:root{
  --bg:#fef8ed;
  --surface:#fffdfa;
  --surface-2:#fff5e6;
  --line:#efe3d5;
  --line-strong:#e2d5c5;
  --text:#2c1810;
  --text-soft:#6d5d54;
  --deep:#5d3a1a;
  --deep-2:#8c5e32;
  --accent:#e67e22;
  --accent-soft:#fff2e0;
  --orange:#f39c12;
  --orange-soft:#fef2d0;
  --danger:#c5594c;
  --danger-soft:#fff1ee;
  --shadow:0 18px 50px rgba(93,58,26,.06);
  --radius-xl:28px;
  --radius-lg:22px;
  --radius-md:18px;
  --radius-sm:14px;
  --shell:min(1440px, calc(100% - 48px));
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;
  background:linear-gradient(180deg,#fffefc 0%, #fef8ed 100%);
  color:var(--text);
  font-family:"Noto Sans TC","PingFang TC","Microsoft JhengHei",system-ui,sans-serif;
  line-height:1.6;
}
a{text-decoration:none;color:inherit}
img{display:block;max-width:100%}
h1,h2,h3,h4,h5,p,ul,ol,dl{margin-top:0}
h1{font-size:clamp(2.25rem, 4vw, 4rem);line-height:1.12;letter-spacing:-.03em;margin-bottom:.9rem}
h2{font-size:clamp(1.6rem,2.5vw,2.3rem);line-height:1.2;letter-spacing:-.025em;margin-bottom:.7rem}
h3{font-size:1.2rem;line-height:1.3;margin-bottom:.45rem}
small{font-size:.82rem}
.shell{width:var(--shell);margin-inline:auto}
.muted,.helper-text{color:var(--text-soft)}
.eyebrow{
  display:inline-flex;align-items:center;gap:.5rem;
  font-size:.8rem;font-weight:800;letter-spacing:.08em;
  text-transform:uppercase;color:var(--accent);
}
.badge,.soft-badge,.mini-badge{
  display:inline-flex;align-items:center;gap:.35rem;
  padding:.38rem .72rem;border-radius:999px;
  font-size:.78rem;font-weight:800;
}
.badge{background:var(--orange-soft);color:var(--orange);border:1px solid #f0d4b5}
.soft-badge{background:var(--accent-soft);color:var(--accent);border:1px solid #f9dab5}
.mini-badge{background:rgba(255,255,255,.92);color:var(--accent);border:1px solid rgba(255,255,255,.9)}
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:.5rem;
  padding:.92rem 1.28rem;border-radius:999px;border:1px solid transparent;
  font-weight:800;font-size:.96rem;cursor:pointer;transition:.22s ease;
  font-family:inherit;
}
.btn:hover{transform:translateY(-1px)}
.btn-sm{padding:.72rem 1.05rem;font-size:.88rem}
.btn-primary{background:var(--accent);color:#fff;box-shadow:0 10px 24px rgba(230,126,34,.22)}
.btn-primary:hover{background:#d35400}
.btn-secondary{background:var(--surface);border-color:var(--line);color:var(--accent)}
.btn-secondary:hover{border-color:var(--line-strong);background:#fff}
.btn-ghost{background:transparent;border-color:rgba(255,255,255,.28);color:#fff}
.btn-danger{background:var(--danger-soft);border-color:#eab8b0;color:var(--danger)}
.btn-danger:hover{background:#ffe7e3}
.icon-btn{
  width:46px;height:46px;border-radius:14px;border:1px solid var(--line);
  display:grid;place-items:center;background:var(--surface);color:var(--accent);font-size:1.1rem;
}
.card,.glass-card,.panel-card,.metric-card,.form-card,.media-card,.stack-card,.info-card,.empty-card,.alert-card{
  background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-xl);box-shadow:var(--shadow);
}
.card,.panel-card,.metric-card,.form-card,.stack-card,.info-card,.empty-card,.alert-card{padding:24px}
.glass-card{padding:24px;background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.12);backdrop-filter:blur(10px);box-shadow:none}
.public-body{background:
  radial-gradient(circle at 84% 12%, rgba(243,156,18,.14), transparent 24%),
  radial-gradient(circle at 8% 88%, rgba(230,126,34,.10), transparent 28%),
  linear-gradient(180deg,#fffcf5 0%, #fdf9f0 100%);
}
.app-auth-body{
  padding-bottom:90px;
  background:
    radial-gradient(circle at 90% 10%, rgba(230,126,34,0.08), transparent 40%),
    radial-gradient(circle at 10% 90%, rgba(243,156,18,0.08), transparent 40%),
    linear-gradient(180deg,#fffefc 0%, #fef8ed 100%);
}
.site-header{
  position:sticky;top:0;z-index:100;
  background:rgba(255, 253, 250, 0.85);
  backdrop-filter:blur(12px);
  border-bottom:1px solid var(--line);
}
.topbar-shell{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:74px}
.brand-link{display:flex;align-items:center;gap:14px;min-width:240px;color:var(--text)}
.brand-mark{
  width:42px;height:42px;border-radius:14px;display:grid;place-items:center;
  background:linear-gradient(135deg,#f39c12,#e67e22);font-weight:900;color:#fff;box-shadow:0 8px 16px rgba(230,126,34,.16)
}
.brand-copy strong{display:block;font-size:1.02rem;line-height:1.1}
.brand-copy small{display:block;color:var(--text-soft)}
.main-nav{display:flex;align-items:center;justify-content:center;gap:14px;flex:1}
.main-nav a{
  padding:10px 14px;border-radius:12px;color:var(--text-soft);font-weight:800;
  transition:.2s ease;
}
.main-nav a:hover,.main-nav a.active{color:var(--accent);background:var(--accent-soft)}
.header-actions{display:flex;align-items:center;gap:14px;min-width:240px;justify-content:flex-end}
.user-chip{position:relative;display:flex;align-items:center;gap:10px;padding:8px 12px;border-radius:999px;background:var(--surface-2);color:var(--text);border:1px solid var(--line);cursor:pointer}
.user-avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,#f9d5a2,#d35400);font-weight:900;color:#fff}
.user-name{font-weight:800}
.user-menu{
  position:absolute;top:calc(100% + 10px);right:0;width:200px;padding:10px;border-radius:18px;
  background:#fff;border:1px solid var(--line);box-shadow:var(--shadow);display:none;z-index:120
}
.user-chip:hover .user-menu{display:block}
.user-menu a{display:block;padding:10px 12px;border-radius:12px;color:var(--text);font-weight:700}
.user-menu a:hover{background:var(--surface-2)}
.messages-wrap{padding-top:18px}
.messages-list{display:grid;gap:10px}
.flash-message{padding:14px 18px;border-radius:16px;background:#fff8e7;border:1px solid #f9dab5;color:#8c5e32;font-weight:700}
.flash-message.error{background:var(--danger-soft);border-color:#efc2bc;color:var(--danger)}
.app-main-area{padding:28px 0 40px}
.section-head{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:18px}
.section-head p{margin:0;color:var(--text-soft)}
.grid-2{display:grid;grid-template-columns:1.5fr .95fr;gap:22px}
.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
.grid-5{display:grid;grid-template-columns:repeat(5,1fr);gap:18px}
.hero-surface{
  border-radius:34px;overflow:hidden;position:relative;
  background:linear-gradient(100deg,#2c1810 0%, #5d3a1a 46%, #8c5e32 100%);
  color:#fff;box-shadow:0 28px 60px rgba(93,58,26,.18)
}
.hero-surface::before{
  content:"";position:absolute;inset:auto -10% -45% auto;width:48%;height:72%;
  background:radial-gradient(circle, rgba(243,156,18,.35), rgba(243,156,18,0));
}
.hero-surface::after{
  content:"";position:absolute;left:0;bottom:0;width:100%;height:100%;
  background:radial-gradient(circle at 80% 10%, rgba(255,255,255,.08), transparent 20%),
             linear-gradient(145deg, transparent 58%, rgba(255,255,255,.05) 58.5%, transparent 59%);
  pointer-events:none;
}
.hero-inner{position:relative;z-index:1;padding:34px}
.hero-grid{display:grid;grid-template-columns:1.15fr .95fr;gap:22px}
.hero-lead p,.hero-copy p,.hero-content p,.cover-copy p{color:rgba(255,255,255,.82);max-width:720px}
.hero-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:26px}
.hero-right{display:grid;grid-template-columns:1fr 1fr;gap:16px;align-content:start}
.hero-mini-card{padding:18px;border-radius:24px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1)}
.hero-mini-card ul{list-style:none;padding:0;margin:14px 0 0;display:grid;gap:12px}
.hero-mini-card li{display:flex;align-items:center;justify-content:space-between;gap:10px;padding-bottom:10px;border-bottom:1px solid rgba(255,255,255,.08)}
.hero-mini-card li:last-child{border-bottom:0;padding-bottom:0}
.hero-mini-card strong,.hero-mini-card b{color:#fff}
.hero-mini-card span,.hero-mini-card small{color:rgba(255,255,255,.78)}
.hero-search-bar{display:flex;align-items:center;gap:12px;justify-content:space-between;margin-top:18px}
.toolbar-row{display:flex;align-items:center;justify-content:space-between;gap:18px;margin:18px 0 20px}
.toolbar-row .left-actions,.toolbar-row .right-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.search-box{display:flex;align-items:center;gap:10px;padding:0 16px;background:var(--surface);border:1px solid var(--line);border-radius:16px;min-width:320px;height:48px}
.search-box input{border:0;outline:none;background:transparent;flex:1;font:inherit;color:var(--text)}
.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin:20px 0 28px}
.metric-card span{display:block;color:var(--accent);font-size:2.2rem;line-height:1;font-weight:900;margin-bottom:8px}
.metric-card small{display:block;color:var(--text-soft);font-weight:700}
.library-card,.group-card,.album-card{overflow:hidden;padding:0}
.card-cover{height:190px;background:linear-gradient(135deg,#d2b48c,#f39c12);background-size:cover;background-position:center;position:relative}
.card-cover::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(44,24,16,.05),rgba(44,24,16,.28))}
.card-body{padding:20px}
.card-body p{color:var(--text-soft);margin-bottom:0}
.card-meta{display:flex;align-items:center;gap:12px;flex-wrap:wrap;color:var(--text-soft);font-weight:700;font-size:.92rem;margin:10px 0 12px}
.card-footer{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-top:16px}
.avatar-cluster{display:flex;align-items:center}
.avatar-cluster .avatar-item{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,#f9d5a2,#e67e22);color:#fff;border:2px solid #fff;margin-left:-8px;font-weight:900;box-shadow:0 6px 14px rgba(0,0,0,.08)}
.avatar-cluster .avatar-item:first-child{margin-left:0}
.avatar-label{font-size:.82rem;color:var(--text-soft);font-weight:800}
.card-kebab{font-size:1.4rem;color:#a6968c}
.photo-card{overflow:hidden;padding:0;transition:.22s ease}
.photo-card:hover{transform:translateY(-2px)}
.photo-card img{width:100%;height:220px;object-fit:cover}
.photo-card .photo-copy{padding:14px 16px}
.photo-card .photo-copy strong{display:block;margin-bottom:4px}
.photo-card .photo-copy span{display:block;color:var(--text-soft);font-size:.9rem}
.dashboard-layout{display:grid;grid-template-columns:1.8fr .9fr;gap:22px}
.dashboard-sidebar{display:grid;gap:18px;align-content:start}
.sidebar-list{display:grid;gap:14px}
.compact-library,.activity-row,.group-row{display:grid;grid-template-columns:74px 1fr;gap:14px;align-items:center;padding:14px;border-radius:18px;background:var(--surface-2);border:1px solid var(--line)}
.compact-thumb{width:74px;height:74px;border-radius:16px;background:linear-gradient(135deg,#5d3a1a,#f39c12);overflow:hidden}
.compact-thumb img{width:100%;height:100%;object-fit:cover}
.compact-copy small,.activity-row small,.group-row small{color:var(--text-soft)}
.wide-banner{display:grid;grid-template-columns:1.25fr .75fr;gap:18px;align-items:stretch}
.banner-card{padding:30px;border-radius:30px;background:linear-gradient(100deg,#2c1810 0%, #5d3a1a 100%);color:#fff;position:relative;overflow:hidden}
.banner-card::after{content:"";position:absolute;right:-80px;bottom:-90px;width:280px;height:280px;background:radial-gradient(circle, rgba(243,156,18,.35), rgba(243,156,18,0));}
.banner-card p{color:rgba(255,255,255,.82)}
.banner-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}
.banner-side{display:grid;gap:18px}
.info-list{display:grid;gap:12px;margin-top:14px}
.info-item{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.info-item:last-child{border-bottom:0;padding-bottom:0}
.page-hero{margin-bottom:24px}
.page-hero .hero-inner{padding:28px 30px}
.page-hero-cover{position:absolute;inset:0;opacity:.36;background-size:cover;background-position:center;mix-blend-mode:screen}
.page-hero-grid{position:relative;z-index:1;display:grid;grid-template-columns:1.3fr .7fr;gap:24px;align-items:end}
.stats-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin:12px 0 0}
.stats-strip .glass-card{display:grid;justify-items:center;text-align:center;padding:16px}
.stats-strip strong{font-size:2rem;color:#fff}
.album-row{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.album-tile{position:relative;border-radius:24px;overflow:hidden;min-height:220px;color:#fff;background:#2c1810}
.album-tile img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.album-tile::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.12),rgba(0,0,0,.58))}
.album-tile .album-tile-copy{position:absolute;left:18px;right:18px;bottom:18px;z-index:1}
.album-tile .album-day{display:inline-flex;padding:.3rem .55rem;border-radius:999px;background:rgba(255,255,255,.18);font-weight:800;font-size:.8rem;margin-bottom:10px}
.preview-panels{display:grid;grid-template-columns:1.2fr .7fr .7fr;gap:18px}
.thumb-strip{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-top:14px}
.thumb-strip a,.thumb-strip div{border-radius:18px;overflow:hidden;background:var(--surface-2);height:104px;display:block}
.thumb-strip img{width:100%;height:100%;object-fit:cover}
.map-preview-box{height:250px;border-radius:20px;overflow:hidden;background:linear-gradient(135deg,#fdf2e9,#fff8e7);position:relative}
.map-preview-box::before{content:"";position:absolute;inset:16px;background:linear-gradient(90deg,rgba(255,255,255,.45) 1px, transparent 1px), linear-gradient(rgba(255,255,255,.42) 1px, transparent 1px);background-size:40px 40px;border-radius:16px;opacity:.5}
.map-pin{position:absolute;width:18px;height:18px;border-radius:50%;background:var(--accent);border:4px solid rgba(255,255,255,.96);box-shadow:0 8px 18px rgba(0,0,0,.18)}
.timeline-mini{display:grid;gap:14px;margin-top:12px}
.timeline-mini .time-row{display:grid;grid-template-columns:58px 1fr;gap:12px;align-items:start}
.timeline-mini .time-row strong{color:var(--accent)}
.album-gallery{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.album-gallery .photo-card img{height:250px}
.detail-layout{display:grid;grid-template-columns:1.55fr .82fr;gap:22px}
.detail-stage{background:#2c1810;border-radius:28px;padding:18px;overflow:hidden;position:relative}
.detail-stage img{width:100%;max-height:680px;object-fit:cover;border-radius:22px}
.thumb-carousel{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-top:16px}
.thumb-carousel img{width:100%;height:94px;object-fit:cover;border-radius:16px}
.definition-list{display:grid;grid-template-columns:120px 1fr;gap:14px 12px;margin:0}
.definition-list dt{font-weight:800;color:var(--text-soft)}
.definition-list dd{margin:0;font-weight:700}
.exif-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 18px;margin-top:10px}
.exif-grid div span{display:block;color:var(--text-soft);font-size:.82rem}
.exif-grid div strong{display:block;margin-top:2px}
.map-card{margin-top:16px;overflow:hidden;padding:0}
.map-card iframe,.map-card .map-placeholder{width:100%;height:220px;border:0;display:block}
.map-placeholder{background:linear-gradient(135deg,#fdf2e9,#fff8e7);position:relative}
.map-placeholder::before{content:"";position:absolute;inset:18px;border-radius:18px;background:linear-gradient(90deg,rgba(255,255,255,.46) 1px, transparent 1px), linear-gradient(rgba(255,255,255,.46) 1px, transparent 1px);background-size:42px 42px}
.timeline-page{display:grid;gap:22px}
.timeline-hero{padding:30px 34px}
.timeline-layout{display:grid;grid-template-columns:160px 1fr;gap:18px}
.timeline-date{padding:8px 0 0 10px}
.timeline-date strong{font-size:2rem;color:var(--accent);display:block;line-height:1}
.timeline-date span{font-weight:800;color:var(--orange)}
.timeline-items{display:grid;gap:16px;position:relative}
.timeline-items::before{content:"";position:absolute;left:-25px;top:6px;bottom:6px;width:2px;background:#e8dfd2}
.timeline-item-card{display:grid;grid-template-columns:1.1fr 220px;gap:14px;padding:18px;border-radius:24px;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow);position:relative}
.timeline-item-card::before{content:"";position:absolute;left:-34px;top:22px;width:16px;height:16px;border-radius:50%;background:var(--accent);box-shadow:0 0 0 5px #fff5e6}
.timeline-item-card img{width:100%;height:150px;object-fit:cover;border-radius:18px}
.timeline-item-meta{display:grid;gap:6px}
.timeline-item-meta .meta-list{display:grid;gap:6px;color:var(--text-soft);font-weight:700;font-size:.93rem}
.map-layout{display:grid;grid-template-columns:360px 1fr;gap:20px}
.leaflet-container-card{min-height:720px;border-radius:28px;border:1px solid var(--line);overflow:hidden;box-shadow:var(--shadow)}
.filter-panel .sidebar-list{margin-top:16px}
.form-layout{display:grid;grid-template-columns:.95fr 1.05fr;gap:22px;align-items:start}
.form-intro{padding:30px;border-radius:30px;background:linear-gradient(125deg,#2c1810,#4a2c10);color:#fff;position:relative;overflow:hidden}
.form-intro::after{content:"";position:absolute;right:-90px;bottom:-110px;width:280px;height:280px;background:radial-gradient(circle, rgba(243,156,18,.32), rgba(243,156,18,0));}
.form-intro p{color:rgba(255,255,255,.82)}
.form-grid{display:grid;gap:16px}
.field-wrap{display:grid;gap:7px}
.field-wrap label{font-weight:800;color:var(--text)}
.field-wrap input,
.field-wrap textarea,
.field-wrap select{
  width:100%;padding:13px 15px;border-radius:16px;border:1px solid var(--line);background:#fff;color:var(--text);font:inherit;outline:none
}
.field-wrap input:focus,.field-wrap textarea:focus,.field-wrap select:focus{border-color:#cda776;box-shadow:0 0 0 3px rgba(230,126,34,.1)}
.field-wrap textarea{min-height:120px;resize:vertical}
.field-help{color:var(--text-soft);font-size:.88rem}
.field-errors{list-style:none;padding:0;margin:0;color:var(--danger);font-size:.9rem;font-weight:700}
.radio-group{display:grid;gap:10px}
.radio-group > div{padding:12px 14px;border:1px solid var(--line);border-radius:16px;background:var(--surface-2)}
.empty-card{text-align:left}
.empty-card h3{margin-bottom:8px}
.empty-card p{color:var(--text-soft)}
.confirm-box{max-width:860px;margin-inline:auto}
.impact-grid .metric-card{padding:18px}
.install-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:24px}
.public-hero{padding:54px 0 88px}
.public-hero-grid{display:grid;grid-template-columns:.92fr 1.08fr;gap:40px;align-items:center;min-height:calc(100vh - 120px)}
.public-copy h1{font-size:clamp(3rem,5vw,5.1rem)}
.public-copy p{font-size:1.12rem;color:var(--text-soft);max-width:620px}
.public-actions{display:flex;gap:14px;flex-wrap:wrap;margin:30px 0 16px}
.mock-device{border-radius:36px;overflow:hidden;background:#fff;border:10px solid #2c1810;box-shadow:0 34px 70px rgba(93,58,26,.18)}
.mock-screen{display:grid;grid-template-columns:180px 1fr;min-height:490px}
.mock-nav{background:linear-gradient(180deg,#2c1810,#4a2c10);color:#fff;padding:30px 22px}
.mock-nav nav{display:grid;gap:10px;margin-top:24px}
.mock-nav nav span{padding:10px 12px;border-radius:14px;color:rgba(255,255,255,.84);font-weight:800}
.mock-nav nav span.active{background:rgba(255,255,255,.12);color:#fff}
.mock-main{padding:28px;background:var(--surface-2)}
.mock-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:22px 0}
.mock-metrics div,.mock-tile,.mock-subcard{background:#fff;border:1px solid var(--line);border-radius:20px;padding:14px;box-shadow:0 10px 24px rgba(93,58,26,.05)}
.mock-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}
.mock-tile{height:142px;background:linear-gradient(135deg,#5d3a1a,#f39c12);color:#fff;display:flex;align-items:end}
.mock-subgrid{display:grid;grid-template-columns:1.1fr .9fr;gap:12px;margin-top:12px}
.promo-strip{margin:0 0 72px;padding:28px 32px;border-radius:32px;background:linear-gradient(100deg,#2c1810,#4a2c10);color:#fff;display:flex;align-items:center;justify-content:space-between;gap:20px}
.promo-strip p{margin:0;color:rgba(255,255,255,.82)}
.hide-mobile{display:inline-flex}
.mobile-nav{display:none}
@media (max-width:1280px){
  .grid-5{grid-template-columns:repeat(3,1fr)}
  .preview-panels{grid-template-columns:1fr 1fr}
  .preview-panels > :first-child{grid-column:1 / -1}
  .album-row{grid-template-columns:repeat(2,1fr)}
  .album-gallery{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:1024px){
  .main-nav{gap:6px}
  .main-nav a{padding:8px 10px;font-size:.92rem}
  .dashboard-layout,.grid-2,.hero-grid,.wide-banner,.page-hero-grid,.detail-layout,.map-layout,.form-layout,.public-hero-grid,.timeline-layout{grid-template-columns:1fr}
  .hero-right{grid-template-columns:1fr}
  .grid-4,.metric-grid,.install-grid,.grid-3{grid-template-columns:repeat(2,1fr)}
  .album-gallery,.grid-5{grid-template-columns:repeat(2,1fr)}
  .public-hero{padding-top:32px}
  .mock-screen{grid-template-columns:1fr}
  .mock-nav{display:none}
  .hide-mobile{display:none}
}
@media (max-width:760px){
  :root{--shell:min(100% - 24px, 100% - 24px)}
  .site-header{position:sticky}
  .topbar-shell{min-height:68px;gap:12px}
  .brand-link{min-width:auto}
  .brand-copy small{display:none}
  .main-nav{display:none}
  .header-actions{min-width:auto}
  .user-name{display:none}
  .app-main-area{padding:18px 0 26px}
  .hero-inner,.page-hero .hero-inner{padding:22px}
  .toolbar-row,.section-head,.card-footer,.hero-search-bar{display:block}
  .toolbar-row .right-actions{margin-top:12px}
  .search-box{min-width:100%;margin-top:12px}
  .grid-4,.metric-grid,.install-grid,.grid-3,.album-gallery,.album-row,.preview-panels,.grid-5,.thumb-strip,.thumb-carousel,.impact-grid{grid-template-columns:1fr}
  .timeline-item-card{grid-template-columns:1fr}
  .timeline-items::before{left:8px}
  .timeline-item-card::before{left:-6px}
  .timeline-date{padding-left:28px}
  .map-layout{gap:14px}
  .leaflet-container-card{min-height:60vh}
  .hero-actions,.public-actions,.banner-actions{align-items:stretch}
  .hero-actions .btn,.public-actions .btn,.banner-actions .btn,.card-footer .btn{width:100%}
  .mobile-nav{position:fixed;left:12px;right:12px;bottom:12px;z-index:110;display:grid;grid-template-columns:repeat(5,1fr);gap:8px;background:rgba(44,24,16,.96);border-radius:24px;padding:8px;box-shadow:0 18px 42px rgba(0,0,0,.24)}
  .mobile-nav a{color:#fff;font-size:.78rem;font-weight:800;padding:10px 4px;border-radius:14px;text-align:center}
  .mobile-nav .primary-mobile-link{background:var(--accent);color:#fff}
}

/* === v2.1 bug fixes === */
/* 1) 首頁回憶庫卡片不要被硬切成 5 欄，避免按鈕與日期被壓到直排 */
.library-grid,
.grid-5{
  display:grid;
  grid-template-columns:repeat(auto-fit, minmax(280px, 1fr));
  gap:18px;
}
.dashboard-layout .library-grid,
.dashboard-layout .grid-5{
  grid-template-columns:repeat(auto-fit, minmax(240px, 1fr));
}
.library-card .card-footer{
  align-items:center;
}
.library-card .card-footer .btn{
  white-space:nowrap;
}
.library-card .card-footer .avatar-label{
  line-height:1.45;
  text-align:right;
  max-width:135px;
}

/* 2) 使用者選單改為 click 開關，避免滑鼠移出就關閉 */
.user-menu-wrap{
  position:relative;
}
.user-menu-wrap summary{
  list-style:none;
}
.user-menu-wrap summary::-webkit-details-marker{
  display:none;
}
.user-menu-wrap .user-chip{
  border:0;
}
.user-menu-wrap[open] .user-menu{
  display:block;
}
.user-menu{
  top:calc(100% + 12px);
}
.user-menu::before{
  content:"";
  position:absolute;
  top:-8px;
  right:28px;
  width:14px;
  height:14px;
  transform:rotate(45deg);
  background:#fff;
  border-left:1px solid var(--line);
  border-top:1px solid var(--line);
}

/* 3) 群組卡片三點選單 */
.card-menu{
  position:relative;
  margin-left:auto;
}
.card-menu summary{
  list-style:none;
}
.card-menu summary::-webkit-details-marker{
  display:none;
}
.card-kebab{
  width:38px;
  height:38px;
  display:grid;
  place-items:center;
  border-radius:999px;
  border:1px solid transparent;
  cursor:pointer;
}
.card-kebab:hover{
  background:var(--surface-2);
  border-color:var(--line);
}
.card-menu-panel{
  position:absolute;
  right:0;
  bottom:calc(100% + 10px);
  min-width:160px;
  padding:8px;
  background:#fff;
  border:1px solid var(--line);
  border-radius:16px;
  box-shadow:var(--shadow);
  z-index:20;
  display:grid;
  gap:2px;
}
.card-menu-panel a{
  padding:10px 12px;
  border-radius:12px;
  font-weight:800;
  font-size:.9rem;
}
.card-menu-panel a:hover{
  background:var(--surface-2);
}
.card-menu-panel .danger-link{
  color:var(--danger);
}

/* 4) 時間線日期與卡片不要重疊 */
.timeline-layout{
  grid-template-columns:220px minmax(0, 1fr);
  gap:42px;
  align-items:start;
}
.timeline-date{
  position:relative;
  padding:14px 0 0 0;
}
.timeline-date strong{
  font-size:1.65rem;
  white-space:nowrap;
}
.timeline-items::before{
  left:-24px;
}
.timeline-item-card{
  grid-template-columns:minmax(0, 1fr) 220px;
}
.timeline-item-card::before{
  left:-33px;
}

/* 5) 地圖頁防止 tile 文字外溢破版 */
.leaflet-container-card{
  background:#fdf2e9;
}
.leaflet-container-card .leaflet-tile{
  image-rendering:auto;
}
.map-popup img{
  width:160px;
  height:100px;
  object-fit:cover;
  border-radius:12px;
  margin-bottom:8px;
}
.map-popup strong{
  display:block;
  color:var(--text);
}
.map-popup p{
  margin:4px 0 8px;
  color:var(--text-soft);
  font-size:.86rem;
}
.map-popup a{
  color:var(--accent);
  font-weight:900;
}

/* 6) 回憶庫列表頁與卡片在中小尺寸更穩 */
@media (max-width:1280px){
  .dashboard-layout .library-grid,
  .dashboard-layout .grid-5,
  .library-grid,
  .grid-5{
    grid-template-columns:repeat(auto-fit, minmax(260px, 1fr));
  }
}
@media (max-width:760px){
  .library-grid,
  .grid-5,
  .dashboard-layout .library-grid,
  .dashboard-layout .grid-5{
    grid-template-columns:1fr;
  }
  .timeline-layout{
    grid-template-columns:1fr;
    gap:12px;
  }
  .timeline-date{
    padding-left:0;
  }
  .timeline-items{
    padding-left:24px;
  }
  .timeline-items::before{
    left:8px;
  }
  .timeline-item-card{
    grid-template-columns:1fr;
  }
  .timeline-item-card::before{
    left:-23px;
  }
  .library-card .card-footer{
    display:flex;
    align-items:center;
  }
}

/* === v2.2 fixes from user feedback === */
/* 最近照片不要被擠成很細的直條 */
.thumb-strip{
  display:flex !important;
  gap:12px;
  overflow-x:auto;
  padding:2px 2px 10px;
  scrollbar-width:thin;
}
.thumb-strip a,
.thumb-strip div{
  flex:0 0 92px;
  width:92px;
  height:112px;
  border-radius:18px;
  overflow:hidden;
  background:var(--surface-2);
}
.thumb-strip img{
  width:100%;
  height:100%;
  object-fit:cover;
}
.preview-panels .card:has(.thumb-strip){
  min-width:0;
}

/* 地圖預覽改得更像實際地圖，而不是只有淡色格線 */
.map-preview-box{
  background:
    radial-gradient(circle at 25% 32%, rgba(230,126,34,.22) 0 10px, transparent 11px),
    radial-gradient(circle at 62% 24%, rgba(230,126,34,.20) 0 8px, transparent 9px),
    radial-gradient(circle at 74% 62%, rgba(230,126,34,.18) 0 9px, transparent 10px),
    linear-gradient(135deg, rgba(230,186,134,.8) 0%, rgba(243,215,185,.92) 42%, rgba(235,225,207,.95) 100%) !important;
}
.map-preview-box::before{
  content:"";
  position:absolute;
  inset:0;
  opacity:.72;
  background:
    linear-gradient(26deg, transparent 0 32%, rgba(255,255,255,.7) 33% 34%, transparent 35% 100%),
    linear-gradient(132deg, transparent 0 42%, rgba(255,255,255,.55) 43% 44%, transparent 45% 100%),
    linear-gradient(88deg, transparent 0 58%, rgba(255,255,255,.5) 59% 60%, transparent 61% 100%),
    radial-gradient(ellipse at 78% 74%, rgba(182,146,123,.35), transparent 42%),
    linear-gradient(90deg, rgba(255,255,255,.32) 1px, transparent 1px),
    linear-gradient(rgba(255,255,255,.28) 1px, transparent 1px);
  background-size:auto, auto, auto, auto, 42px 42px, 42px 42px;
  border-radius:20px;
}
.map-preview-box::after{
  content:"";
  position:absolute;
  left:10%;
  right:8%;
  top:54%;
  height:5px;
  border-radius:999px;
  background:linear-gradient(90deg, transparent 0%, rgba(111,85,53,.35) 15%, rgba(111,85,53,.35) 82%, transparent 100%);
  transform:rotate(-8deg);
}
.map-preview-box .map-pin{
  z-index:2;
  width:18px;
  height:18px;
}

/* 刪除確認頁裡長文字不要撐爆 metric card */
.impact-grid .metric-card span{
  font-size:1.25rem;
  line-height:1.3;
  word-break:break-word;
}

/* 登入前導覽列按鈕文字更自然 */
.site-header-public .main-nav a{
  min-width:auto;
}

/* 使用 details 當選單時，舊 hover 規則不要干擾 */
.user-menu-wrap .user-menu{
  display:none;
}
.user-menu-wrap[open] .user-menu{
  display:block;
}

@media(max-width:760px){
  .thumb-strip a,
  .thumb-strip div{
    flex-basis:86px;
    width:86px;
    height:104px;
  }
}

/* === v2.3 fixes: real-looking mini maps, library filters, today recommendation hero === */
.recommendation-hero{min-height:360px}
.recommendation-hero .hero-grid{align-items:end}
.recommendation-hero.has-photo .page-hero-cover{
  opacity:.42;
  background-size:cover;
  background-position:center;
  mix-blend-mode:screen;
}
.recommendation-hero.has-photo::after{
  background:linear-gradient(90deg, rgba(44,24,16,.95) 0%, rgba(44,24,16,.74) 48%, rgba(44,24,16,.36) 100%);
}
.recommendation-hero h1{max-width:780px}
.recommendation-hero .hero-mini-card{background:rgba(255,255,255,.11)}

.filter-card{margin:18px 0 28px}
.filter-form{
  display:grid;
  grid-template-columns:1fr 1fr 1fr 1fr minmax(240px,1.4fr) auto;
  gap:14px;
  align-items:end;
}
.filter-form .field-wrap{margin:0}
.filter-form label{font-size:.86rem;color:var(--text-soft);font-weight:900}
.filter-search-wrap input{height:48px}
.filter-actions{display:flex;align-items:end}
.filter-actions .btn{height:48px;white-space:nowrap}

/* 讓所有小地圖看起來像「真的地圖預覽」而不是抽象色塊 */
.map-preview-box,
.map-placeholder{
  background-color:#f0ece4 !important;
  background-image:
    radial-gradient(circle at 17% 64%, rgba(230,126,34,.18) 0 14px, transparent 15px),
    radial-gradient(circle at 45% 40%, rgba(230,126,34,.12) 0 11px, transparent 12px),
    radial-gradient(circle at 74% 58%, rgba(230,126,34,.14) 0 13px, transparent 14px),
    linear-gradient(25deg, transparent 0 29%, rgba(255,255,255,.76) 29.4% 31.4%, transparent 32% 100%),
    linear-gradient(125deg, transparent 0 42%, rgba(255,255,255,.64) 42.4% 44.2%, transparent 45% 100%),
    linear-gradient(88deg, transparent 0 58%, rgba(255,255,255,.58) 58.3% 60%, transparent 60.4% 100%),
    linear-gradient(165deg, transparent 0 48%, rgba(168,148,134,.45) 48.3% 49.6%, transparent 50% 100%),
    radial-gradient(ellipse at 88% 82%, rgba(190,154,120,.28), transparent 34%),
    linear-gradient(90deg, rgba(255,255,255,.23) 1px, transparent 1px),
    linear-gradient(rgba(255,255,255,.23) 1px, transparent 1px),
    linear-gradient(135deg,#ebe2dc 0%,#f4ede9 46%,#ead7d0 100%) !important;
  background-size:auto,auto,auto,auto,auto,auto,auto,auto,42px 42px,42px 42px,auto !important;
  position:relative;
  overflow:hidden;
}
.map-preview-box::before,
.map-placeholder::before{
  content:"";
  position:absolute;
  inset:0;
  background:
    linear-gradient(25deg, transparent 0 30%, rgba(255,255,255,.88) 30.4% 31.2%, transparent 32% 100%),
    linear-gradient(128deg, transparent 0 43%, rgba(255,255,255,.74) 43.4% 44.4%, transparent 45% 100%),
    linear-gradient(92deg, transparent 0 58%, rgba(255,255,255,.65) 58.4% 59.5%, transparent 60% 100%),
    linear-gradient(166deg, transparent 0 49%, rgba(105,81,55,.28) 49.2% 50.1%, transparent 50.5% 100%);
  opacity:.86;
  border-radius:inherit;
}
.map-preview-box::after,
.map-placeholder::after{
  content:"";
  position:absolute;
  left:10%;
  right:8%;
  top:54%;
  height:5px;
  border-radius:999px;
  background:linear-gradient(90deg, transparent, rgba(92,68,37,.38), transparent);
  transform:rotate(-8deg);
  z-index:1;
}
.map-preview-box .map-pin,
.map-placeholder .map-pin{
  z-index:3;
  width:18px;
  height:18px;
  border:4px solid #fff;
  background:var(--accent);
  box-shadow:0 10px 22px rgba(94,80,62,.18);
}
.map-preview-box .map-pin::after,
.map-placeholder .map-pin::after{
  content:"";
  position:absolute;
  inset:-9px;
  border-radius:50%;
  background:rgba(230,126,34,.14);
  z-index:-1;
}

/* 最近照片在窄欄位改成穩定橫向縮圖列 */
.preview-panels .thumb-strip{
  display:flex !important;
  grid-template-columns:none !important;
  gap:12px;
  overflow-x:auto;
  padding-bottom:10px;
}
.preview-panels .thumb-strip a,
.preview-panels .thumb-strip div{
  flex:0 0 98px !important;
  width:98px !important;
  min-width:98px !important;
  height:112px !important;
  border-radius:18px;
}
.preview-panels .thumb-strip img{width:100%;height:100%;object-fit:cover}

@media(max-width:1180px){
  .filter-form{grid-template-columns:repeat(2,1fr)}
  .filter-actions .btn{width:100%}
}
@media(max-width:760px){
  .filter-form{grid-template-columns:1fr}
  .filter-actions .btn{width:100%}
  .recommendation-hero{min-height:auto}
}

/* === v2.4 fixes: map filters, compact map page, Google login button polish, remove group extra icon === */
.compact-map-layout{
  grid-template-columns:360px minmax(0, 1fr);
  align-items:start;
  gap:18px;
}
.map-filter-panel{
  max-height:calc(100vh - 120px);
  overflow:auto;
  position:sticky;
  top:92px;
}
.compact-leaflet-map,
.leaflet-container-card.compact-leaflet-map{
  height:min(620px, calc(100vh - 150px));
  min-height:500px;
  max-height:650px;
}
.map-filter-form{
  display:grid;
  gap:12px;
  margin:18px 0 18px;
}
.map-filter-form .field-wrap{
  display:grid;
  gap:6px;
}
.map-filter-form label{
  font-size:.84rem;
  font-weight:900;
  color:var(--text-soft);
}
.map-filter-form input,
.map-filter-form select{
  width:100%;
  border:1px solid var(--line);
  border-radius:14px;
  background:#fff;
  padding:11px 12px;
  font:inherit;
  color:var(--text);
}
.map-filter-actions{
  display:grid;
  grid-template-columns:1fr 1fr;
  gap:10px;
}
.map-filter-actions .btn{
  padding:.78rem .9rem;
}
.map-summary-list{
  margin:14px 0 16px;
}
.filter-panel .alert-card{
  margin-top:14px;
}
.group-list .right-actions .icon-btn{
  display:none !important;
}
.site-header-public .btn-primary{
  background:var(--accent);
}
.social-login-note{
  margin-top:10px;
  color:var(--text-soft);
  font-size:.92rem;
}
@media(max-width:1024px){
  .compact-map-layout{grid-template-columns:1fr}
  .map-filter-panel{position:relative;top:auto;max-height:none}
  .compact-leaflet-map,
  .leaflet-container-card.compact-leaflet-map{
    height:62vh;
    min-height:420px;
    max-height:none;
  }
}
@media(max-width:760px){
  .map-filter-actions{grid-template-columns:1fr}
  .compact-leaflet-map,
  .leaflet-container-card.compact-leaflet-map{
    height:58vh;
    min-height:360px;
  }
}

/* === v2.5: 首頁小地圖改為真實 Leaflet 互動地圖 === */
.mini-leaflet-map.map-preview-box{
  height:250px;
  min-height:250px;
  border:1px solid rgba(132,105,83,.18);
  background:#f3efe8 !important;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.55);
}
.mini-leaflet-map.map-preview-box::before,
.mini-leaflet-map.map-preview-box::after{
  content:none !important;
  display:none !important;
}
.mini-leaflet-map .leaflet-container{
  font-family:inherit;
}
.mini-leaflet-map .leaflet-tile-pane{
  filter:saturate(.84) sepia(.05) contrast(.98);
}
.mini-leaflet-map .leaflet-marker-icon{
  filter:drop-shadow(0 8px 14px rgba(52,34,23,.24));
}
.mini-leaflet-map .leaflet-control-attribution{
  border-radius:999px 0 0 0;
  background:rgba(255,255,255,.82);
  color:#8b7768;
  font-size:.66rem;
  font-weight:800;
  padding:3px 7px;
}
.map-loading-state,
.map-empty-overlay{
  position:absolute;
  left:16px;
  right:16px;
  bottom:16px;
  z-index:500;
  border:1px solid rgba(226,213,197,.9);
  border-radius:18px;
  background:rgba(255,255,255,.88);
  box-shadow:0 14px 28px rgba(90,62,35,.12);
  backdrop-filter:blur(8px);
  color:var(--text);
}
.map-loading-state{
  padding:12px 14px;
  font-size:.88rem;
  font-weight:900;
}
.map-empty-overlay{
  display:grid;
  gap:4px;
  padding:14px 16px;
}
.map-empty-overlay strong{
  font-size:.96rem;
}
.map-empty-overlay span{
  color:var(--text-soft);
  font-size:.82rem;
  line-height:1.45;
}
.mini-map-popup{
  display:grid;
  gap:6px;
  width:190px;
}
.mini-map-popup img{
  width:100%;
  height:96px;
  object-fit:cover;
  border-radius:12px;
}
.mini-map-popup p{
  margin:0;
  color:var(--text-soft);
  font-size:.78rem;
  line-height:1.4;
}
.preview-panels .card-footer{
  align-items:center;
  justify-content:space-between;
  gap:12px;
}

.photo-detail-map.map-placeholder,
.photo-detail-map.mini-leaflet-map{
  width:100%;
  height:260px;
  min-height:260px;
  border-radius:0;
}
.photo-detail-map.map-placeholder::before,
.photo-detail-map.map-placeholder::after{
  content:none !important;
  display:none !important;
}

/* === v2.6: 首頁地圖預覽改為商用產品式旅行工作區 === */
.home-map-preview{
  margin-top:28px;
  position:relative;
}
.home-map-preview::after{
  content:"";
  position:absolute;
  right:2%;
  top:-44px;
  width:160px;
  height:96px;
  pointer-events:none;
  opacity:.16;
  background:
    radial-gradient(circle at 28% 50%, transparent 27px, rgba(93,58,26,.34) 28px 30px, transparent 31px),
    linear-gradient(15deg, transparent 0 46%, rgba(93,58,26,.26) 47% 49%, transparent 50% 100%);
  transform:rotate(-10deg);
}
.home-map-heading{
  margin-bottom:20px;
}
.home-map-heading h2{
  position:relative;
  font-size:clamp(1.85rem, 2.8vw, 2.6rem);
  color:var(--text);
  margin-bottom:10px;
}
.home-map-heading h2::after{
  content:"";
  display:block;
  width:52px;
  height:5px;
  margin-top:12px;
  border-radius:999px;
  background:linear-gradient(90deg,#d8913d,#f3c06d);
}
.home-map-grid{
  display:grid;
  grid-template-columns:minmax(360px, 1.42fr) minmax(260px, .78fr) minmax(280px, .86fr);
  gap:22px;
  align-items:stretch;
}
.home-map-card{
  padding:26px;
  border-radius:26px;
  background:rgba(255,253,250,.92);
  box-shadow:0 22px 60px rgba(93,58,26,.08);
}
.preview-card-title{
  display:flex;
  align-items:center;
  gap:16px;
  margin-bottom:18px;
}
.preview-card-title.compact{
  align-items:center;
  margin-bottom:22px;
}
.preview-card-title h3{
  margin:0 0 3px;
  font-size:1.24rem;
}
.preview-card-title p{
  margin:0;
  color:var(--text-soft);
  font-weight:700;
}
.preview-icon{
  flex:0 0 auto;
  width:56px;
  height:56px;
  border-radius:50%;
  display:grid;
  place-items:center;
  font-size:1.4rem;
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.7);
}
.preview-icon-map{background:#fff1dc;color:#d98a2b}
.preview-icon-photo{background:#fff5e5;color:#d98a2b}
.preview-icon-activity{background:#fff4e5;color:#d98a2b}
.preview-link{
  margin-left:auto;
  color:var(--accent);
  font-size:.9rem;
  font-weight:900;
  white-space:nowrap;
}
.home-map-preview .map-preview-box.mini-leaflet-map{
  height:330px;
  min-height:330px;
  border-radius:20px;
  border-color:rgba(226,213,197,.85);
  box-shadow:inset 0 0 0 1px rgba(255,255,255,.4), 0 14px 28px rgba(93,58,26,.08);
}
.home-map-preview .leaflet-control-zoom{
  border:0;
  box-shadow:0 10px 24px rgba(76,55,37,.16);
}
.home-map-preview .leaflet-control-zoom a{
  color:var(--text);
  border-color:rgba(226,213,197,.8);
}
.home-map-preview .map-empty-overlay{
  left:28px;
  right:auto;
  bottom:20px;
  width:min(320px, calc(100% - 40px));
  padding:18px 20px;
}
.map-empty-overlay .empty-icon{
  width:34px;
  height:34px;
  border-radius:50%;
  display:grid;
  place-items:center;
  background:#fff2df;
}
.map-stat-strip{
  display:grid;
  grid-template-columns:repeat(3, 1fr);
  margin-top:16px;
  border:1px solid var(--line);
  border-radius:18px;
  background:rgba(255,255,255,.64);
  overflow:hidden;
}
.map-stat-strip div{
  display:grid;
  grid-template-columns:auto 1fr;
  gap:2px 10px;
  align-items:center;
  padding:14px 16px;
}
.map-stat-strip div + div{
  border-left:1px solid var(--line);
}
.map-stat-strip span{
  grid-row:1 / span 2;
  width:34px;
  height:34px;
  border-radius:50%;
  display:grid;
  place-items:center;
  background:#f8f2ea;
}
.map-stat-strip strong{
  font-size:1.35rem;
  line-height:1;
}
.map-stat-strip small{
  color:var(--text-soft);
  line-height:1.25;
}
.map-preview-actions{
  justify-content:flex-start;
  margin-top:16px;
}
.map-preview-actions .btn{
  border-radius:12px;
  padding-inline:1.35rem;
}
.date-photo-list{
  display:grid;
  gap:20px;
}
.date-photo-group{
  display:grid;
  gap:10px;
}
.date-photo-meta{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  color:var(--text-soft);
  font-weight:800;
  font-size:.9rem;
}
.date-photo-grid{
  display:grid;
  grid-template-columns:repeat(3, minmax(0, 1fr));
  gap:10px;
}
.date-photo-grid a{
  display:block;
  aspect-ratio:1 / .82;
  min-height:76px;
  overflow:hidden;
  border-radius:11px;
  background:var(--surface-2);
}
.date-photo-grid a:nth-child(n+4){
  display:none;
}
.date-photo-grid img{
  width:100%;
  height:100%;
  object-fit:cover;
  transition:transform .22s ease, filter .22s ease;
}
.date-photo-grid a:hover img{
  transform:scale(1.045);
  filter:saturate(1.05);
}
.wide-soft-link{
  display:flex;
  align-items:center;
  justify-content:center;
  margin-top:22px;
  min-height:54px;
  border-radius:14px;
  color:var(--accent);
  font-weight:900;
  background:linear-gradient(90deg,rgba(255,244,229,.3),rgba(255,242,224,.88),rgba(255,244,229,.3));
}
.activity-feed{
  display:grid;
  border:1px solid var(--line);
  border-radius:18px;
  overflow:hidden;
  background:rgba(255,255,255,.52);
}
.activity-feed-row{
  display:grid;
  grid-template-columns:48px 1fr auto;
  gap:12px;
  align-items:center;
  padding:15px 16px;
  transition:background .18s ease;
}
.activity-feed-row + .activity-feed-row{
  border-top:1px solid var(--line);
}
.activity-feed-row:hover{
  background:#fff9f1;
}
.activity-feed-icon{
  width:42px;
  height:42px;
  border-radius:50%;
  display:grid;
  place-items:center;
  font-size:1.05rem;
}
.activity-feed-icon.green{background:#dff1e6}
.activity-feed-icon.orange{background:#fff1db}
.activity-feed-icon.mint{background:#e1f2e9}
.activity-feed-icon.blue{background:#e5f0fb}
.activity-feed-icon.pink{background:#fbe4e4}
.activity-feed-copy{
  display:grid;
  gap:1px;
  min-width:0;
}
.activity-feed-copy strong{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.activity-feed-copy small{
  color:var(--text-soft);
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.activity-feed-row time{
  color:#9a897d;
  font-size:.82rem;
  font-weight:800;
  white-space:nowrap;
}
.activity-note{
  margin-top:16px;
  min-height:72px;
  display:grid;
  place-items:center;
  text-align:center;
  color:#a89585;
  font-weight:800;
  border-radius:18px;
  background:
    radial-gradient(circle at 80% 35%, rgba(230,126,34,.12), transparent 13%),
    linear-gradient(10deg, transparent 0 48%, rgba(216,145,61,.15) 49% 50%, transparent 51% 100%),
    #fffaf2;
}
.soft-empty-state{
  display:grid;
  gap:6px;
  padding:22px;
  border:1px dashed #e7d8c8;
  border-radius:18px;
  background:#fffaf4;
  color:var(--text-soft);
}
.soft-empty-state strong{
  color:var(--text);
}

@media(max-width:1280px){
  .home-map-grid{
    grid-template-columns:1fr 1fr;
  }
  .home-footprint-card{
    grid-column:1 / -1;
  }
}
@media(max-width:760px){
  .home-map-grid{
    grid-template-columns:1fr;
  }
  .home-footprint-card{
    grid-column:auto;
  }
  .home-map-card{
    padding:20px;
    border-radius:22px;
  }
  .preview-card-title{
    align-items:flex-start;
  }
  .home-map-preview .map-preview-box.mini-leaflet-map{
    height:300px;
    min-height:300px;
  }
  .map-stat-strip{
    grid-template-columns:1fr;
  }
  .map-stat-strip div + div{
    border-left:0;
    border-top:1px solid var(--line);
  }
  .activity-feed-row{
    grid-template-columns:42px 1fr;
  }
  .activity-feed-row time{
    grid-column:2;
  }
}

/* === v2.7: 修正首頁地圖預覽被 dashboard 左欄擠壓的版面 === */
.app-auth-body .app-shell{
  width:100%;
  max-width:1480px;
  margin-inline:auto;
  padding-inline:clamp(32px, 3vw, 48px);
}
.dashboard-layout{
  width:100%;
  display:grid;
  grid-template-columns:minmax(0, 1fr) minmax(300px, 360px);
  gap:28px;
  align-items:start;
}
.dashboard-main,
.dashboard-sidebar,
.home-map-preview,
.home-map-card{
  min-width:0;
}
.dashboard-sidebar{
  gap:20px;
}
.home-map-preview{
  grid-column:1 / -1;
  width:100%;
  margin-top:30px;
}
.home-map-grid{
  width:100%;
  grid-template-columns:minmax(0, 1.55fr) minmax(280px, .95fr) minmax(300px, 1fr);
  gap:28px;
}
.home-map-card{
  display:flex;
  flex-direction:column;
  min-height:100%;
  padding:28px;
}
.preview-card-title{
  min-width:0;
}
.preview-card-title > div{
  min-width:0;
}
.preview-card-title h3{
  white-space:nowrap;
}
.preview-link{
  flex:0 0 auto;
}
.home-map-preview .map-preview-box.mini-leaflet-map{
  height:clamp(320px, 25vw, 380px);
  min-height:320px;
  border-radius:22px;
}
.map-stat-strip{
  grid-template-columns:repeat(3, minmax(0, 1fr));
}
.map-stat-strip div{
  min-width:0;
  padding:14px 12px;
}
.map-stat-strip small{
  word-break:keep-all;
}
.date-photo-grid a{
  min-height:84px;
}
.recent-photo-card .wide-soft-link,
.recent-activity-card .activity-note{
  margin-top:auto;
}
.activity-feed{
  flex:1 1 auto;
}

@media(max-width:1180px){
  .home-map-grid{
    grid-template-columns:minmax(0, 1.35fr) minmax(300px, 1fr);
  }
  .home-footprint-card{
    grid-column:1 / -1;
  }
}
@media(max-width:1024px){
  .app-auth-body .app-shell{
    padding-inline:32px;
  }
  .dashboard-layout{
    grid-template-columns:1fr;
  }
  .dashboard-sidebar{
    grid-template-columns:repeat(2, minmax(0, 1fr));
  }
  .dashboard-sidebar > .card:last-child:nth-child(odd){
    grid-column:1 / -1;
  }
}
@media(max-width:760px){
  .app-auth-body .app-shell{
    padding-inline:12px;
  }
  .dashboard-sidebar,
  .home-map-grid{
    grid-template-columns:1fr;
  }
  .home-footprint-card{
    grid-column:auto;
  }
  .home-map-card{
    padding:20px;
  }
  .preview-card-title.compact{
    display:grid;
    grid-template-columns:auto minmax(0, 1fr) auto;
    gap:12px;
  }
  .preview-icon{
    width:48px;
    height:48px;
  }
  .home-map-preview .map-preview-box.mini-leaflet-map{
    height:320px;
    min-height:320px;
  }
  .map-stat-strip{
    grid-template-columns:repeat(3, minmax(0, 1fr));
  }
  .map-stat-strip div{
    grid-template-columns:1fr;
    justify-items:center;
    text-align:center;
    gap:4px;
    padding:10px 6px;
  }
  .map-stat-strip div + div{
    border-left:1px solid var(--line);
    border-top:0;
  }
  .map-stat-strip span{
    grid-row:auto;
    width:30px;
    height:30px;
  }
  .map-stat-strip strong{
    font-size:1.18rem;
  }
  .map-stat-strip small{
    font-size:.74rem;
    line-height:1.2;
  }
}

/* === v2.8: 無 EXIF 照片的日期手動輸入與地點搜尋 === */
.location-search-panel{
  display:grid;
  gap:12px;
  padding:18px;
  border:1px solid #ecd8c3;
  border-radius:20px;
  background:linear-gradient(135deg,#fffaf4,#fff3e4);
}
.location-search-copy{
  display:grid;
  gap:3px;
}
.location-search-copy strong{
  color:var(--text);
}
.location-search-copy span{
  color:var(--text-soft);
  font-size:.92rem;
}
.location-search-controls{
  display:grid;
  grid-template-columns:minmax(0, 1fr) auto;
  gap:10px;
}
.location-search-input{
  width:100%;
  border:1px solid var(--line);
  border-radius:999px;
  background:#fff;
  padding:12px 16px;
  font:inherit;
  color:var(--text);
  outline:none;
}
.location-search-input:focus{
  border-color:#d8913d;
  box-shadow:0 0 0 3px rgba(230,126,34,.12);
}
.location-search-status{
  min-height:20px;
  color:var(--text-soft);
  font-size:.9rem;
  font-weight:800;
}
.location-search-status[data-type="success"]{color:#4f8a5f}
.location-search-status[data-type="warning"]{color:#a46d20}
.location-search-status[data-type="error"]{color:var(--danger)}
.location-search-results{
  display:grid;
  gap:8px;
}
.location-result{
  width:100%;
  display:grid;
  grid-template-columns:minmax(0, 1fr) auto;
  gap:12px;
  align-items:center;
  padding:12px 14px;
  border:1px solid var(--line);
  border-radius:16px;
  background:#fff;
  text-align:left;
  color:var(--text);
  font:inherit;
  cursor:pointer;
  transition:.18s ease;
}
.location-result:hover{
  border-color:#d8913d;
  transform:translateY(-1px);
  box-shadow:0 10px 24px rgba(93,58,26,.08);
}
.location-result span{
  display:grid;
  gap:2px;
  min-width:0;
}
.location-result strong,
.location-result small{
  overflow:hidden;
  text-overflow:ellipsis;
  white-space:nowrap;
}
.location-result small{
  color:var(--text-soft);
}
.location-result em{
  color:var(--accent);
  font-size:.82rem;
  font-style:normal;
  font-weight:900;
  white-space:nowrap;
}
.metadata-preview{
  margin-top:20px;
  border-radius:24px;
  overflow:hidden;
  border:1px solid rgba(255,255,255,.18);
  box-shadow:0 18px 40px rgba(0,0,0,.16);
}
.metadata-preview img{
  width:100%;
  max-height:260px;
  object-fit:cover;
}
.modal-open{
  overflow:hidden;
}
.location-modal{
  position:fixed;
  inset:0;
  z-index:300;
  display:none;
  align-items:center;
  justify-content:center;
  padding:24px;
}
.location-modal.is-open{
  display:flex;
}
.location-modal-backdrop{
  position:absolute;
  inset:0;
  background:rgba(44,24,16,.38);
  backdrop-filter:blur(7px);
}
.location-modal-dialog{
  position:relative;
  z-index:1;
  width:min(620px, 100%);
  max-height:min(86vh, 760px);
  overflow:auto;
  padding:28px;
  border-radius:24px;
  background:linear-gradient(180deg,#fffdfa,#fff7ed);
  border:1px solid rgba(239,227,213,.96);
  box-shadow:0 30px 90px rgba(44,24,16,.24);
}
.location-modal-dialog h2{
  margin:14px 0 10px;
  font-size:clamp(1.55rem, 3vw, 2rem);
}
.location-modal-dialog p{
  color:var(--text-soft);
  margin-bottom:20px;
}
.location-modal-x{
  position:absolute;
  top:18px;
  right:18px;
  width:38px;
  height:38px;
  border:1px solid var(--line);
  border-radius:50%;
  background:#fff;
  color:var(--text-soft);
  font-size:1.35rem;
  line-height:1;
  cursor:pointer;
}
.selected-location-card{
  display:grid;
  gap:4px;
  margin-top:12px;
  padding:14px 16px;
  border-radius:18px;
  background:#fff;
  border:1px solid #efd8bf;
}
.selected-location-card[hidden]{
  display:none;
}
.selected-location-card span{
  color:var(--text-soft);
  font-size:.82rem;
  font-weight:900;
}
.selected-location-card strong{
  color:var(--text);
}
.selected-location-card small{
  color:var(--accent);
  font-weight:900;
}
.location-modal-actions{
  display:flex;
  justify-content:flex-end;
  gap:12px;
  margin-top:20px;
  flex-wrap:wrap;
}
.app-toast{
  position:fixed;
  left:50%;
  bottom:28px;
  z-index:360;
  transform:translate(-50%, 16px);
  opacity:0;
  padding:13px 18px;
  border-radius:999px;
  background:#2c1810;
  color:#fff;
  box-shadow:0 16px 34px rgba(44,24,16,.22);
  font-weight:900;
  transition:.22s ease;
}
.app-toast.is-visible{
  transform:translate(-50%, 0);
  opacity:1;
}

@media(max-width:760px){
  .location-search-controls,
  .location-result{
    grid-template-columns:1fr;
  }
  .location-search-controls .btn{
    width:100%;
  }
  .location-modal{
    align-items:end;
    padding:12px;
  }
  .location-modal-dialog{
    max-height:88vh;
    padding:22px;
    border-radius:24px 24px 20px 20px;
  }
  .location-modal-actions{
    display:grid;
    grid-template-columns:1fr;
  }
  .location-modal-actions .btn{
    width:100%;
  }
  .app-toast{
    left:12px;
    right:12px;
    bottom:18px;
    transform:translateY(16px);
    text-align:center;
  }
  .app-toast.is-visible{
    transform:translateY(0);
  }
}

/* Timeline global year filter and commercial layout */
.timeline-global-page{
  width:100%;
  max-width:1480px;
  margin-inline:auto;
  gap:24px;
}
.timeline-global-hero{
  min-height:178px;
  background:
    radial-gradient(circle at 88% 88%, rgba(243,156,18,.46), transparent 32%),
    linear-gradient(102deg,#2c1810 0%, #5d3518 52%, #c57826 100%);
}
.timeline-hero-grid{
  grid-template-columns:minmax(0,1fr) minmax(420px,.74fr);
  align-items:center;
}
.timeline-global-hero h1{
  margin-bottom:.4rem;
}
.timeline-global-hero p{
  margin-bottom:0;
  color:rgba(255,255,255,.82);
  font-weight:700;
}
.timeline-stats-strip{
  margin:0;
}
.timeline-stats-strip .glass-card{
  min-height:112px;
  border-color:rgba(255,255,255,.24);
  background:rgba(255,255,255,.11);
}
.timeline-stats-strip strong{
  font-size:clamp(2rem, 4vw, 3rem);
  line-height:1;
}
.timeline-filter-card{
  position:relative;
  z-index:4;
  padding:12px;
  border:1px solid var(--line);
  border-radius:28px;
  background:rgba(255,253,250,.82);
  box-shadow:0 16px 40px rgba(93,58,26,.06);
}
.timeline-year-bar{
  position:relative;
  display:flex;
  align-items:center;
  gap:12px;
  overflow-x:auto;
  overflow-y:visible;
  padding:0 2px 2px;
  scrollbar-width:thin;
}
.year-pill{
  flex:0 0 auto;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-width:92px;
  min-height:48px;
  padding:10px 24px;
  border-radius:999px;
  border:1px solid var(--line);
  background:#fffdfa;
  color:var(--text-soft);
  font-weight:900;
  box-shadow:0 8px 18px rgba(93,58,26,.04);
  transition:.2s ease;
  white-space:nowrap;
}
.year-pill:hover{
  color:var(--accent);
  border-color:#f3c28b;
  transform:translateY(-1px);
}
.year-pill.is-active{
  background:linear-gradient(135deg,#f39c12,#e67e22);
  color:#fff;
  border-color:transparent;
  box-shadow:0 12px 28px rgba(230,126,34,.24);
}
.timeline-more-menu{
  position:relative;
  flex:0 0 auto;
}
.timeline-more-menu summary{
  list-style:none;
  cursor:pointer;
}
.timeline-more-menu summary::-webkit-details-marker{
  display:none;
}
.timeline-year-dropdown{
  position:absolute;
  top:calc(100% + 10px);
  left:0;
  z-index:30;
  min-width:150px;
  padding:10px;
  border:1px solid var(--line);
  border-radius:20px;
  background:#fffdfa;
  box-shadow:0 22px 54px rgba(44,24,16,.16);
}
.timeline-year-option{
  display:block;
  padding:10px 14px;
  border-radius:14px;
  color:var(--text);
  font-weight:850;
  white-space:nowrap;
}
.timeline-year-option:hover,
.timeline-year-option.is-active{
  color:var(--accent);
  background:var(--accent-soft);
}
.timeline-section-head{
  display:flex;
  align-items:end;
  justify-content:space-between;
  gap:18px;
  padding:0 8px;
}
.timeline-section-head h2{
  margin-bottom:4px;
}
.timeline-section-head p{
  margin:0;
  color:var(--text-soft);
  font-weight:700;
}
.timeline-toolbar-actions{
  display:flex;
  gap:12px;
  flex-wrap:wrap;
  justify-content:flex-end;
}
.tool-pill{
  display:inline-flex;
  align-items:center;
  justify-content:center;
  min-height:44px;
  padding:9px 18px;
  border-radius:999px;
  border:1px solid var(--line);
  background:rgba(255,253,250,.86);
  color:var(--text-soft);
  font-weight:850;
  white-space:nowrap;
}
.timeline-library-row{
  grid-template-columns:210px minmax(0,1fr);
  gap:40px;
}
.timeline-library-row .timeline-date{
  padding-top:24px;
}
.timeline-library-row .timeline-date strong{
  color:var(--text);
  font-size:1.42rem;
  line-height:1.15;
}
.timeline-library-row .timeline-date span{
  color:var(--accent);
  font-weight:950;
}
.timeline-memory-card{
  grid-template-columns:minmax(0,1fr) minmax(340px,520px);
  align-items:center;
  min-height:168px;
  padding:16px;
  gap:22px;
  border-radius:24px;
  background:rgba(255,253,250,.95);
}
.timeline-memory-card::before{
  top:30px;
}
.timeline-memory-meta{
  padding-left:4px;
  gap:8px;
}
.timeline-memory-meta h3{
  font-size:1.5rem;
  margin:0;
}
.timeline-memory-meta p{
  margin:2px 0 4px;
  color:var(--text-soft);
  font-weight:700;
}
.timeline-memory-facts{
  display:flex !important;
  flex-wrap:wrap;
  gap:8px 12px !important;
}
.timeline-memory-facts span{
  padding:5px 10px;
  border-radius:999px;
  background:#fff7ed;
  border:1px solid var(--line);
}
.timeline-cover-frame{
  min-width:0;
}
.timeline-cover-frame img,
.timeline-cover-placeholder{
  width:100%;
  height:138px;
  object-fit:cover;
  border-radius:18px;
}
.timeline-cover-placeholder{
  display:grid;
  place-items:center;
  align-content:center;
  gap:2px;
  background:
    radial-gradient(circle at 78% 20%, rgba(243,156,18,.28), transparent 25%),
    linear-gradient(135deg,#faead7,#fff8ed 46%,#d59b5b);
  color:var(--deep);
  border:1px solid #f2d7b7;
}
.timeline-cover-placeholder span{
  color:var(--accent);
  font-size:.78rem;
  font-weight:950;
  letter-spacing:.08em;
  text-transform:uppercase;
}
.timeline-cover-placeholder strong{
  font-size:2.6rem;
  line-height:1;
}
.timeline-empty-state{
  display:grid;
  justify-items:start;
  gap:8px;
  padding:34px;
}
.timeline-empty-state .btn{
  margin-top:8px;
}

@media(max-width:1280px){
  .timeline-hero-grid{
    grid-template-columns:1fr;
  }
  .timeline-stats-strip{
    max-width:720px;
  }
  .timeline-memory-card{
    grid-template-columns:minmax(0,1fr) minmax(280px,420px);
  }
}

@media(max-width:1024px){
  .timeline-library-row{
    grid-template-columns:1fr;
    gap:12px;
  }
  .timeline-library-row .timeline-date{
    padding:0 0 0 28px;
  }
  .timeline-memory-card{
    grid-template-columns:minmax(0,1fr) minmax(260px,360px);
  }
  .timeline-section-head{
    align-items:start;
    flex-direction:column;
  }
  .timeline-toolbar-actions{
    justify-content:flex-start;
  }
}

@media(max-width:760px){
  .timeline-global-page{
    gap:18px;
  }
  .timeline-global-hero{
    border-radius:26px;
  }
  .timeline-global-hero.timeline-hero{
    padding:24px 22px;
  }
  .timeline-stats-strip{
    grid-template-columns:repeat(3, minmax(0, 1fr));
    gap:8px;
  }
  .timeline-stats-strip .glass-card{
    min-height:auto;
    padding:13px 8px;
  }
  .timeline-stats-strip strong{
    font-size:1.65rem;
  }
  .timeline-filter-card{
    margin-inline:-4px;
    padding:10px;
    border-radius:22px;
  }
  .year-pill{
    min-width:auto;
    min-height:42px;
    padding:8px 18px;
  }
  .timeline-year-dropdown{
    left:auto;
    right:0;
    min-width:140px;
    max-width:calc(100vw - 40px);
  }
  .timeline-section-head{
    padding:0;
  }
  .timeline-toolbar-actions{
    width:100%;
    display:grid;
    grid-template-columns:1fr 1fr;
  }
  .tool-pill{
    min-height:40px;
    padding:8px 10px;
    font-size:.88rem;
  }
  .timeline-memory-card{
    grid-template-columns:1fr;
    gap:14px;
  }
  .timeline-cover-frame{
    order:-1;
  }
  .timeline-cover-frame img,
  .timeline-cover-placeholder{
    height:172px;
  }
  .timeline-memory-meta h3{
    font-size:1.28rem;
  }
  .timeline-memory-facts{
    display:grid !important;
    grid-template-columns:1fr;
  }
}

/* Timeline actionable sort/filter controls */
.timeline-action-pill{
  gap:8px;
  color:var(--text-soft);
  cursor:pointer;
}
.timeline-action-pill:hover,
.timeline-action-pill.is-active{
  color:var(--accent);
  border-color:#f3c28b;
  background:#fff7ed;
  transform:translateY(-1px);
}
.tool-icon{
  width:18px;
  height:18px;
  flex:0 0 18px;
  color:currentColor;
}
.timeline-filter-menu{
  position:relative;
}
.timeline-filter-menu summary{
  list-style:none;
}
.timeline-filter-menu summary::-webkit-details-marker{
  display:none;
}
.timeline-filter-dropdown{
  position:absolute;
  top:calc(100% + 10px);
  right:0;
  z-index:36;
  width:220px;
  padding:10px;
  border:1px solid var(--line);
  border-radius:20px;
  background:#fffdfa;
  box-shadow:0 22px 54px rgba(44,24,16,.16);
}
.timeline-filter-option{
  display:flex;
  align-items:center;
  justify-content:space-between;
  gap:12px;
  padding:11px 12px;
  border-radius:14px;
  color:var(--text);
  font-weight:850;
}
.timeline-filter-option:hover,
.timeline-filter-option.is-active{
  color:var(--accent);
  background:var(--accent-soft);
}
.timeline-filter-option strong{
  padding:3px 8px;
  border-radius:999px;
  background:#fff;
  color:var(--accent);
  font-size:.74rem;
  box-shadow:inset 0 0 0 1px #f4d7b7;
}

@media(max-width:760px){
  .timeline-action-pill{
    width:100%;
    min-width:0;
  }
  .timeline-filter-menu{
    min-width:0;
  }
  .timeline-filter-dropdown{
    right:0;
    width:min(260px, calc(100vw - 42px));
  }
  .timeline-action-pill span{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
  }
}
