:root{
  /* 品牌色：依官方主視覺封面圖採樣 —— 深青綠 + 香檳金 */
  --navy-900:#16302e; --navy-800:#1e433f; --navy-700:#2a5f62; --navy-600:#35787c;
  --gold:#c9a45c; --gold-light:#e8cf9a; --gold-deep:#a07f3a;
  --ink:#172a28; --paper:#f4f3ee; --paper-2:#e8e8e0;
  --red:#cf1c23;
  --radius:18px;
  --safe-b:env(safe-area-inset-bottom,0px);
  --font-ui:-apple-system,BlinkMacSystemFont,'SF Pro Text','PingFang SC','PingFang TC','HarmonyOS Sans SC','HarmonyOS Sans','MiSans','Noto Sans CJK SC','Microsoft YaHei',sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html{height:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%}
html{
  /* 寬屏時整個視窗鋪深孔雀綠，不留白邊 */
  background:#12292c;
  background-image:
    radial-gradient(90% 60% at 50% 0%, #2a5866 0%, transparent 62%),
    radial-gradient(70% 50% at 50% 100%, #1d434c 0%, transparent 58%);
  background-attachment:fixed;
}
body{
  font-family:var(--font-ui);
  background:transparent; color:var(--ink);
  max-width:520px; margin:0 auto; min-height:100dvh;
  overscroll-behavior-y:none;
  box-shadow:0 0 80px rgba(0,0,0,.45);
}
.serif{font-family:'Noto Serif TC','Noto Sans TC',serif}

/* ---------- 開屏：獨立品牌區 + 底部查詢卡 ----------
   背景只承擔氣氛；官方 logo 與活動文字均是獨立內容，鍵盤彈出時不會
   因 background cover 重新裁切，也不會被查詢卡遮住。 */
#splash{
  position:fixed; inset:0; z-index:100; max-width:520px; margin:0 auto;
  height:100svh;min-height:100svh;
  background:#b20d15 url('assets/mobile-red-gold-bg.png') center bottom/cover no-repeat;
  display:flex; flex-direction:column; justify-content:flex-start;
  color:#f3ead6; text-align:center; overflow:hidden;
  animation:coverIn 1.1s cubic-bezier(.2,.8,.2,1) both;
}
@keyframes coverIn{from{opacity:0;transform:scale(1.03)}to{opacity:1;transform:none}}
/* 底部壓暗，保證面板文字清晰 */
#splash::after{
  content:'';position:absolute;left:0;right:0;bottom:0;height:58%;pointer-events:none;z-index:1;
  background:linear-gradient(180deg,transparent,rgba(11,29,29,.28) 34%,rgba(8,25,27,.9) 100%);
}

/* 品牌區固定在上半部；文字不再焊死在背景圖裡。 */
.splash-brand{
  flex:none;height:clamp(270px,40svh,350px);position:relative;z-index:2;display:flex;flex-direction:column;align-items:center;
  padding:clamp(28px,5.6svh,50px) 18px 0;animation:brandIn .9s .12s cubic-bezier(.2,.8,.2,1) both;
}
.splash-brand-kicker{
  margin-top:13px;color:#ead7a9;font-family:'Noto Serif TC',serif;font-size:13px;font-weight:600;
  letter-spacing:.17em;text-indent:.17em;text-shadow:0 2px 9px rgba(0,0,0,.7);
}
.splash-brand h1{
  margin-top:7px;color:#f5e5b9;font-family:'Noto Serif TC',serif;font-size:clamp(15.5px,4.6vw,20px);
  font-weight:900;line-height:1.48;letter-spacing:.08em;text-indent:.08em;text-shadow:0 3px 12px rgba(0,0,0,.8);
}
.splash-brand h1 span{display:block;white-space:nowrap}
@keyframes brandIn{from{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:none}}

/* 查詢面板：懸浮玻璃卡，背景從四周完整透出。 */
.splash-panel{
  flex:none; margin:0 14px; padding:19px 18px 16px;
  display:flex; flex-direction:column; align-items:stretch; position:relative; z-index:2;
  background:linear-gradient(165deg,rgba(16,51,50,.88),rgba(7,27,29,.82));
  backdrop-filter:blur(20px) saturate(1.14); -webkit-backdrop-filter:blur(20px) saturate(1.14);
  border:1px solid rgba(232,207,154,.48); border-radius:20px;
  box-shadow:0 20px 52px rgba(0,0,0,.42),inset 0 1px 0 rgba(255,255,255,.1);
  animation:fadeUp .9s .45s both;
}
.splash-panel::before{
  content:'';position:absolute;left:18%;right:18%;top:-1px;height:1px;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(244,226,184,.82),transparent);
}

@keyframes emblemIn{from{opacity:0;transform:scale(.6) rotate(-8deg)}to{opacity:1;transform:none}}
@keyframes fadeUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
.guest-line{margin-top:2px;text-align:center;animation:fadeUp .8s .05s both}
.guest-line .hello{font-size:13.5px;color:rgba(243,234,214,.6);letter-spacing:.2em}
.guest-line .gname{font-size:33px;font-weight:700;color:#fff;margin-top:4px}
.guest-line .gtitle{font-size:12.5px;color:var(--gold-light);margin-top:5px;letter-spacing:.08em}
.phone-box{margin-top:0;width:100%;animation:fadeUp .8s .5s both}
.lookup-intro{text-align:left;padding:0 2px}
.lookup-title{font-family:'Noto Serif TC',serif;font-size:18px;font-weight:700;color:#f5e5b9;letter-spacing:.1em}
.lookup-sub{margin-top:4px;font-size:11px;color:rgba(243,234,214,.54);letter-spacing:.07em}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.lookup-row{display:flex;align-items:stretch;gap:10px;margin-top:14px}
.phone-box input{
  flex:1;min-width:0;height:54px;padding:0 16px;border-radius:13px;border:1px solid rgba(232,207,154,.38);
  background:rgba(3,20,22,.48);color:#fff;font-size:17px;text-align:left;letter-spacing:0;outline:none;
  font-family:var(--font-ui);font-weight:500;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.05);
  caret-color:var(--gold-light);transition:border-color .2s,box-shadow .2s,background .2s;
}
.phone-box input::placeholder{color:rgba(243,234,214,.56);font-size:16px;font-weight:400;letter-spacing:0;font-family:var(--font-ui)}
.phone-box input:focus{border-color:#ead49f;background:rgba(3,20,22,.66);box-shadow:0 0 0 3px rgba(201,164,92,.12),inset 0 1px 0 rgba(255,255,255,.07)}
.phone-err{font-size:12px;color:#e8a0a6;margin-top:10px;min-height:17px;letter-spacing:.03em}
.phone-err:empty{display:none}
.phone-box input[type=text]{font-size:17px;letter-spacing:0}
/* 同名選擇 */
.pick-box{margin-top:6px;max-height:38dvh;overflow-y:auto;width:min(90%,320px);animation:fadeUp .5s both}
.pick-box .plabel{font-size:13px;color:rgba(243,234,214,.65);letter-spacing:.16em;margin-bottom:12px}
.pick-row{
  display:flex;align-items:center;gap:11px;width:100%;text-align:left;cursor:pointer;
  background:rgba(255,255,255,.06);border:1px solid rgba(201,164,92,.4);border-radius:13px;
  padding:11px 14px;margin-bottom:9px;color:#f3ead6;
}
.pick-row:active{background:rgba(201,164,92,.18)}
.pick-row .pk-name{font-size:16px;font-weight:700;font-family:var(--font-ui)}
.pick-row .pk-sub{font-size:11.5px;color:rgba(243,234,214,.6);margin-top:2px}
.pick-row .pk-no{margin-left:auto;flex:none;font-family:'Noto Serif TC',serif;font-size:22px;font-weight:900;color:var(--gold-light)}
.pick-row .pk-no small{display:block;font-size:10px;font-weight:400;letter-spacing:.1em;color:rgba(243,234,214,.5)}
.guest-line .gtable{
  color:var(--gold-light);margin-top:9px;padding:0 2px;
  display:flex;align-items:center;justify-content:center;gap:.55em;min-width:0;
  font-size:clamp(13px,3.8vw,16px);letter-spacing:clamp(.04em,.35vw,.1em);line-height:1.55;
  white-space:nowrap;word-break:keep-all;
}
.guest-line .gtable .seat-brief{display:block;white-space:nowrap}
.guest-line .gtable .seat-divider{flex:none;color:rgba(232,207,154,.7);letter-spacing:0}
/* 極窄手機固定拆成兩行，每行保持一段完整席位，避免單字掉到第三行。 */
@media (max-width:360px){
  .guest-line .gtable.gtable-pair{display:grid;grid-template-columns:1fr;justify-items:center;gap:1px}
  .guest-line .gtable.gtable-pair .seat-divider{display:none}
}
.back-link{display:inline-block;align-self:center;margin-top:14px;font-size:12px;color:rgba(243,234,214,.5);text-decoration:underline;text-underline-offset:3px;cursor:pointer;letter-spacing:.1em}
#btnLookup{
  flex:0 0 104px;width:auto;height:54px;margin:0;padding:0;border:none;border-radius:13px;
  background:linear-gradient(135deg,var(--gold-light),var(--gold) 55%,var(--gold-deep));
  color:#2a1f08;font-size:15px;font-weight:700;letter-spacing:.08em;text-indent:.08em;
  font-family:var(--font-ui);cursor:pointer;
  box-shadow:0 8px 20px rgba(201,164,92,.24),inset 0 1px 0 rgba(255,255,255,.32);
}
#btnCheckin{
  margin-top:13px;width:100%;height:52px;padding:0;border:none;border-radius:14px;
  background:linear-gradient(135deg,var(--gold-light),var(--gold) 55%,var(--gold-deep));
  color:#2a1f08;font-size:16px;font-weight:700;letter-spacing:.14em;text-indent:.14em;
  font-family:var(--font-ui); cursor:pointer;
  box-shadow:0 9px 24px rgba(201,164,92,.28),inset 0 1px 0 rgba(255,255,255,.35);
}
#btnCheckin:active,#btnLookup:active{transform:scale(.96)}
.splash-foot{text-align:center;font-size:10px;color:rgba(243,234,214,.42);margin-top:10px;letter-spacing:.08em;animation:fadeUp .8s .9s both}


/* ---------- 主应用 ---------- */
#app{display:none;min-height:100dvh;background:var(--paper);flex-direction:column}
#app.on{display:flex}
header.appbar{
  position:sticky;top:0;z-index:40;
  background:linear-gradient(180deg,var(--navy-900),var(--navy-800));
  color:#f3ead6;padding:calc(12px + env(safe-area-inset-top,0px)) 18px 12px;
  display:flex;align-items:center;gap:12px;
  box-shadow:0 2px 14px rgba(12,22,51,.35);
}
.appbar .mini-emblem{width:34px;height:34px;flex:none}
.appbar .t1{font-size:13px;font-weight:700;line-height:1.35;letter-spacing:.08em;font-family:'Noto Serif TC',serif}
.appbar .t2{font-size:10.5px;line-height:1.4;color:rgba(243,234,214,.68);letter-spacing:.035em;margin-top:2px}
main{flex:1;padding:16px 16px calc(86px + var(--safe-b))}
.page{display:none;animation:pageIn .35s ease both}
.page.on{display:block}
@keyframes pageIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* 卡片通用 */
.card{background:#fff;border-radius:var(--radius);box-shadow:0 4px 18px rgba(28,35,64,.07);padding:18px;margin-bottom:14px;border:1px solid rgba(28,35,64,.05)}
.card h3{font-family:'Noto Serif TC',serif;font-size:16px;color:var(--navy-800);letter-spacing:.08em;display:flex;align-items:center;gap:8px;margin-bottom:12px}
.card h3::before{content:'';width:4px;height:16px;border-radius:2px;background:linear-gradient(180deg,var(--gold-light),var(--gold-deep))}

/* 桌号主卡 */
.table-card{
  border-radius:22px;overflow:hidden;margin-bottom:14px;color:#f3ead6;position:relative;
  background:
    radial-gradient(140% 90% at 85% -20%, #357f80 0%, transparent 55%),
    linear-gradient(160deg,var(--navy-800),var(--navy-900));
  box-shadow:0 10px 30px rgba(12,22,51,.35);
  padding:22px 20px 20px;
}
.table-card::after{content:'';position:absolute;inset:8px;border:1px solid rgba(201,164,92,.35);border-radius:16px;pointer-events:none}
.tc-top{display:flex;justify-content:space-between;align-items:flex-start}
.tc-hello{font-size:13px;color:rgba(243,234,214,.7);letter-spacing:.1em}
.tc-name{font-size:22px;font-weight:700;color:#fff;margin-top:4px;font-family:var(--font-ui)}
.tc-role{display:inline-block;margin-top:7px;font-size:11px;color:var(--gold-light);border:1px solid rgba(201,164,92,.5);border-radius:999px;padding:3px 10px;letter-spacing:.12em}
.tc-role:empty{display:none}
.tc-badge{text-align:center;flex:none;margin-left:12px}
.tc-badge .lbl{font-size:11px;letter-spacing:.3em;text-indent:.3em;color:rgba(243,234,214,.65)}
.tc-num{
  font-family:'Noto Serif TC',serif;font-size:64px;font-weight:900;line-height:1;
  background:linear-gradient(180deg,#f2e0b6,var(--gold) 65%,var(--gold-deep));
  -webkit-background-clip:text;background-clip:text;color:transparent;
  margin-top:2px;text-shadow:0 6px 22px rgba(201,164,92,.25);
}
.tc-tname{font-size:12px;color:var(--gold-light);letter-spacing:.28em;text-indent:.28em;margin-top:2px}
.tc-divider{height:1px;background:linear-gradient(90deg,transparent,rgba(201,164,92,.5),transparent);margin:16px 0 12px}
/* 典禮 / 晚宴 雙座位 */
.seat-list{margin-top:16px;display:flex;flex-direction:column;gap:10px}
.seat-item{
  display:flex;align-items:center;gap:13px;padding:13px 15px;border-radius:14px;
  background:rgba(255,255,255,.07);border:1px solid rgba(201,164,92,.4);
}
.seat-item.primary{background:rgba(201,164,92,.15);border-color:rgba(201,164,92,.75)}
.seat-ico{
  flex:none;width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;
  background:rgba(201,164,92,.2);color:var(--gold-light);
}
.seat-main{flex:1;min-width:0}
.seat-k{font-size:11px;letter-spacing:.22em;color:rgba(243,234,214,.6)}
.seat-v{font-size:17px;font-weight:700;color:#fff;margin-top:3px;font-family:'Noto Serif TC',serif;line-height:1.35}
.seat-v em{font-style:normal;font-size:30px;color:var(--gold-light);margin:0 2px;letter-spacing:.02em}
.seat-item.none{background:rgba(255,255,255,.04);border-style:dashed;border-color:rgba(243,234,214,.25)}
.seat-item.none .seat-v{color:rgba(243,234,214,.55);font-size:15px;font-weight:400}
.seat-go{
  flex:none;padding:7px 12px;border-radius:9px;border:1px solid rgba(201,164,92,.5);
  background:none;color:var(--gold-light);font-size:12px;cursor:pointer;letter-spacing:.06em;
}
.tc-meta{display:flex;gap:14px;font-size:12px;line-height:1.65;color:rgba(243,234,214,.78)}
.tc-meta div{flex:1}
.tc-meta .k{color:rgba(243,234,214,.5);font-size:10.5px;letter-spacing:.1em;margin-bottom:3px}
.tc-actions{display:flex;gap:10px;margin-top:16px}
.tc-actions button{
  flex:1;padding:11px 0;border-radius:12px;border:1px solid rgba(201,164,92,.55);
  background:rgba(201,164,92,.12);color:var(--gold-light);font-size:13.5px;letter-spacing:.1em;cursor:pointer;font-weight:500;
}
.tc-actions button.primary{background:linear-gradient(135deg,var(--gold-light),var(--gold) 60%,var(--gold-deep));color:#2a1f08;border:none;font-weight:700}
.tc-actions button.lead{
  padding:15px 0;font-size:17px;letter-spacing:.22em;text-indent:.1em;font-family:'Noto Serif TC',serif;
  border-radius:14px;position:relative;overflow:hidden;box-shadow:0 8px 24px rgba(201,164,92,.35);
}
.tc-actions button.lead::after{
  content:'';position:absolute;top:0;bottom:0;width:46px;left:-60px;transform:skewX(-24deg);
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.55),transparent);
  animation:shine 2.8s ease-in-out infinite;
}
@keyframes shine{0%,55%{left:-60px}85%,100%{left:120%}}

/* 快捷宫格 */
.quick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.quick a{
  background:#fff;border-radius:14px;padding:13px 4px 11px;text-align:center;text-decoration:none;color:var(--navy-800);
  box-shadow:0 3px 12px rgba(28,35,64,.06);border:1px solid rgba(28,35,64,.05);
}
.quick .qi{width:30px;height:30px;margin:0 auto 6px;display:flex;align-items:center;justify-content:center;border-radius:9px;background:linear-gradient(135deg,#f2e6cc,#e6d3a6);color:var(--gold-deep)}
.quick .qt{font-size:11.5px;letter-spacing:.05em}

/* 公告 */
.notice{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;background:linear-gradient(135deg,#fdf8ec,#f7efdb);border:1px solid rgba(201,164,92,.35);border-radius:14px;margin-bottom:14px}
.notice .dot{flex:none;width:7px;height:7px;border-radius:50%;background:var(--gold-light);margin-top:6px;opacity:.72}
@keyframes blink{50%{opacity:.25}}
.notice p{font-size:12.5px;line-height:1.75;color:#5a4a22}

/* 同一部手機可連續替本人、同行嘉賓或官員簽到，無需返回二維碼入口。 */
.continue-checkin{
  width:100%;display:flex;align-items:center;justify-content:center;gap:10px;
  padding:15px 18px;margin:0 0 14px;border-radius:14px;cursor:pointer;
  border:1px solid rgba(201,164,92,.55);background:linear-gradient(135deg,rgba(232,207,154,.2),rgba(29,67,76,.65));
  color:var(--gold-light);font-size:16px;font-weight:700;letter-spacing:.14em;
  box-shadow:0 8px 24px rgba(0,0,0,.2);transition:transform .18s,box-shadow .18s;
}
.continue-checkin:active{transform:scale(.98);box-shadow:0 4px 14px rgba(0,0,0,.2)}

/* 流程 timeline */
.tl{position:relative;--tl-gutter:24px;--tl-axis:8px;padding-left:var(--tl-gutter)}
.tl::before{content:'';position:absolute;left:var(--tl-axis);top:6px;bottom:6px;width:2px;transform:translateX(-50%);background:linear-gradient(180deg,var(--gold),rgba(201,164,92,.15))}
.tl-item{position:relative;padding:0 0 20px}
.tl-item::before{content:'';position:absolute;left:calc(var(--tl-axis) - var(--tl-gutter) - 8px);top:4px;width:16px;height:16px;box-sizing:border-box;border-radius:50%;background:#fff;border:3px solid var(--gold);box-shadow:0 0 0 3px rgba(201,164,92,.15)}
.tl-item.now::before{background:var(--gold);animation:pulseDot 1.6s infinite}
@keyframes pulseDot{50%{box-shadow:0 0 0 7px rgba(201,164,92,.12)}}
.tl-time{font-size:12px;color:var(--gold-deep);font-weight:700;letter-spacing:.05em;font-family:'Noto Serif TC',serif}
.tl-title{font-size:15px;font-weight:700;color:var(--navy-800);margin:3px 0 4px}
.tl-desc{font-size:12.5px;line-height:1.8;color:#6b7086}
.tl-tag{display:inline-block;font-size:10.5px;color:var(--red);border:1px solid rgba(176,52,60,.35);background:rgba(176,52,60,.06);border-radius:6px;padding:2px 7px;margin-top:6px;letter-spacing:.05em}
.agenda-meta{margin:-2px 0 18px;padding:10px 12px;border-radius:11px;background:#f8f3e8;border:1px solid rgba(201,164,92,.28);font-size:12px;line-height:1.65;color:#74613a}
.agenda-meta b{color:var(--navy-800);font-family:'Noto Serif TC',serif;font-size:13px}
.agenda-card .tl-item{padding-bottom:17px}
.agenda-card .tl-title{font-size:14px;line-height:1.55;margin-top:3px}

/* 同桌嘉宾 */
.table-switch{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 12px;scrollbar-width:none}
.table-switch::-webkit-scrollbar{display:none}
.ts-chip{
  flex:none;padding:8px 15px;border-radius:999px;background:#fff;border:1px solid rgba(28,35,64,.12);
  font-size:13px;color:var(--navy-700);cursor:pointer;letter-spacing:.03em;
}
.ts-chip.on{background:var(--navy-800);color:var(--gold-light);border-color:var(--navy-800);font-weight:600}
.ts-chip .mini{font-size:10px;opacity:.65;margin-left:3px}
.guest-row{display:flex;align-items:flex-start;gap:12px;padding:13px 0;border-bottom:1px solid rgba(28,35,64,.06);cursor:pointer}
.guest-row:last-child{border-bottom:none}
.avatar{
  flex:none;width:46px;height:46px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-family:'Noto Serif TC',serif;font-size:18px;font-weight:700;color:#fff;
  border:2px solid rgba(201,164,92,.7);
}
.g-main{flex:1;min-width:0}
.g-name{font-size:15.5px;font-weight:700;color:var(--navy-800);display:flex;align-items:center;gap:7px;flex-wrap:wrap}
.g-badge{font-size:10px;color:var(--gold-deep);border:1px solid rgba(201,164,92,.55);background:rgba(201,164,92,.1);border-radius:5px;padding:1.5px 6px;font-weight:500}
.g-badge.me{color:#fff;background:var(--red);border-color:var(--red)}
.g-title{font-size:12px;color:#6b7086;margin-top:3px;line-height:1.6}
.g-bio{font-size:12.5px;line-height:1.8;color:#4a5068;background:var(--paper);border-radius:10px;padding:10px 12px;margin-top:9px;display:none}
.g-bio.open{display:block;animation:pageIn .25s ease}
.g-arrow{flex:none;color:#c2c6d4;font-size:12px;margin-top:14px;transition:transform .25s}
.guest-row.open .g-arrow{transform:rotate(90deg)}
.table-head-note{font-size:12px;color:#8a8fa3;line-height:1.7;margin-bottom:6px}

/* 会场导览 */
.map-wrap{background:#fff;border-radius:var(--radius);box-shadow:0 4px 18px rgba(28,35,64,.07);padding:14px 10px 6px;margin-bottom:14px;border:1px solid rgba(28,35,64,.05)}
.map-route-hint{
  width:max-content;max-width:calc(100% - 16px);margin:0 auto 8px;padding:7px 14px;border-radius:999px;
  background:#f6efdf;color:#8a6a2c;font-size:11px;font-weight:600;letter-spacing:.06em;text-align:center;
}
.map-secondary-hint{
  display:none;width:calc(100% - 16px);max-width:none;margin:0 8px 10px;padding:10px 16px;border-radius:12px;
  background:linear-gradient(135deg,#f7df91,#c99d3a);color:#2f1d00;border:1px solid rgba(255,248,224,.98);
  font-size:13.5px;font-weight:900;letter-spacing:.04em;text-align:center;box-shadow:0 7px 20px rgba(201,164,92,.38);
}
.map-secondary-hint.on{display:block}
svg#venue{width:100%;height:auto;display:block}
.door-pick{display:flex;gap:8px;padding:10px 8px 12px}
.door-pick button{
  flex:1;padding:10px 0;border-radius:11px;border:1px solid rgba(28,35,64,.14);background:#fff;
  font-size:13px;color:var(--navy-700);cursor:pointer;letter-spacing:.05em;
}
.door-pick button.on{background:var(--navy-800);color:var(--gold-light);border-color:var(--navy-800);font-weight:600}
.legend{display:flex;flex-wrap:wrap;gap:12px;padding:0 8px 12px;font-size:11px;color:#6b7086}
.legend span{display:inline-flex;align-items:center;gap:5px}
svg#venue{cursor:zoom-in}
.map-zoom{
  display:block;width:calc(100% - 16px);margin:6px 8px 12px;padding:11px 0;border-radius:11px;
  border:1px solid rgba(201,164,92,.55);background:linear-gradient(135deg,#fdf8ec,#f6ecd6);
  color:var(--gold-deep);font-size:13.5px;font-weight:700;letter-spacing:.1em;cursor:pointer;
}
/* 全屏橫向看圖 */
#mapFull{position:fixed;inset:0;z-index:130;background:#172a28;display:none;overflow:hidden}
#mapFull.on{display:block}
/* 橫向鋪滿：絕對定位 + 中心旋轉。原先用 flex 會把 .rot 壓縮成正方形，
   導致「放大看清楚」其實沒放大。 */
#mapFull .rot{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;padding:8px}
#mapFull svg{width:100%;height:100%;max-width:100%;max-height:100%;display:block;shape-rendering:geometricPrecision;text-rendering:geometricPrecision}
#mapFull .mf-close{
  position:absolute;top:calc(14px + env(safe-area-inset-top,0px));right:14px;z-index:2;
  width:40px;height:40px;border-radius:50%;border:1px solid rgba(201,164,92,.6);
  background:rgba(0,0,0,.45);color:var(--gold-light);font-size:17px;cursor:pointer;
}
#mapFull .mf-tip{
  position:absolute;bottom:calc(16px + var(--safe-b));left:50%;transform:translateX(-50%);
  color:rgba(243,234,214,.7);font-size:12px;letter-spacing:.1em;white-space:nowrap;
}
.lg{width:10px;height:10px;border-radius:3px;display:inline-block}

/* 联会介绍 */
.about-hero{
  border-radius:var(--radius);overflow:hidden;margin-bottom:14px;padding:24px 20px;color:#f3ead6;text-align:center;
  background:radial-gradient(120% 100% at 50% -20%, #357f80 0%, transparent 60%),linear-gradient(160deg,var(--navy-800),var(--navy-900));
}
.about-hero .ah1{font-family:'Noto Serif TC',serif;font-size:20px;font-weight:900;letter-spacing:.15em}
.about-hero .ah2{font-size:12px;color:var(--gold-light);margin-top:8px;letter-spacing:.25em;text-indent:.25em}
.mission{display:flex;gap:8px;margin:16px 0 4px;justify-content:center}
.mission span{font-size:12px;border:1px solid rgba(201,164,92,.5);color:var(--gold-light);border-radius:999px;padding:5px 13px;letter-spacing:.1em}
.stat-row{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.stat{background:#fff;border-radius:14px;text-align:center;padding:15px 6px;box-shadow:0 3px 12px rgba(28,35,64,.06);border:1px solid rgba(28,35,64,.05)}
.stat .n{font-family:'Noto Serif TC',serif;font-size:24px;font-weight:900;color:var(--navy-800)}
.stat .n em{font-style:normal;font-size:13px;color:var(--gold-deep)}
.stat .k{font-size:11px;color:#8a8fa3;margin-top:4px;letter-spacing:.05em}
.about-p{font-size:13.5px;line-height:2;color:#4a5068;text-align:justify}
.milestone{display:flex;gap:12px;padding:10px 0;border-bottom:1px dashed rgba(28,35,64,.1)}
.milestone:last-child{border-bottom:none}
.ms-year{flex:none;font-family:'Noto Serif TC',serif;font-weight:900;color:var(--gold-deep);font-size:15px;width:44px}
.ms-body{font-size:13px;line-height:1.75;color:#4a5068}

/* 底部导航 */
nav#tabbar{
  position:fixed;bottom:0;left:0;right:0;max-width:520px;margin:0 auto;z-index:50;
  background:rgba(255,255,255,.92);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);
  border-top:1px solid rgba(28,35,64,.08);display:flex;padding:8px 4px calc(8px + var(--safe-b));
}
#tabbar a{flex:1;text-align:center;text-decoration:none;color:#9aa0b4;font-size:10.5px;letter-spacing:.05em}
#tabbar .ni{width:24px;height:24px;margin:0 auto 3px;display:flex;align-items:center;justify-content:center}
#tabbar a.on{color:var(--navy-800);font-weight:700}
#tabbar a.on .ni{color:var(--gold-deep)}
#tabbar svg{width:21px;height:21px}

/* ===== 視覺統一裝飾層（金色綢帶 + 星光，呼應官方封面） ===== */
/* =========================================================================
   decor.css —— 港區省級政協委員聯誼會二十周年慶典 · 全站裝飾層
   金色綢帶 + 四角星光 + 金線／金邊，呼應官方開屏封面圖
   純 CSS / 內聯 SVG，零外部圖片；動畫僅用 transform + opacity
   依賴既有變數：--navy-900 --navy-800 --navy-700 --gold --gold-light
                --gold-deep --paper
   ========================================================================= */

/* 本檔「不」重新宣告 :root 變數 —— 避免覆蓋 index.html 既有的品牌色
   （例如 index.html 的 --navy-700 是 #2a5f62，與草案值不同）。
   所有取用都寫成 var(--x, 兜底值)，因此單獨引入本檔也能正常顯示。 */

/* -------------------------------------------------------------------------
   1) 裝飾宿主：深色區塊加上 .deco-host，讓裝飾層落在背景與文字之間
      isolation:isolate 建立層疊上下文 → .decor 用 z-index:-1
      即可壓在區塊背景之上、所有正文之下，無需改動任何內容元素
   ------------------------------------------------------------------------- */
.deco-host{position:relative;isolation:isolate;overflow:hidden}

.decor{
  position:absolute; inset:0; z-index:-1;
  pointer-events:none; overflow:hidden;
  border-radius:inherit;
  --ribbon-size:190px;      /* 綢帶方塊邊長 */
  --ribbon-op:.26;          /* 綢帶整體透明度（建議 .12 ~ .30） */
  --star-color:#f4e6c4;
  --star-op:.85;
}

/* -------------------------------------------------------------------------
   2) 金色綢帶：右上 (::before) / 左下 (::after)，同一張 SVG 旋轉 180° 復用
      修飾類：.decor--tr（僅右上）  .decor--bl（僅左下）
   ------------------------------------------------------------------------- */
.decor::before,
.decor::after{
  content:''; position:absolute;
  width:var(--ribbon-size); height:var(--ribbon-size);
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 220 220' fill='none'%3E %3Cdefs%3E %3ClinearGradient id='a' x1='0' y1='0' x2='1' y2='1'%3E %3Cstop offset='0' stop-color='%23e8cf9a' stop-opacity='0'/%3E %3Cstop offset='.28' stop-color='%23f4e6c4' stop-opacity='1'/%3E %3Cstop offset='.58' stop-color='%23c9a45c' stop-opacity='.78'/%3E %3Cstop offset='1' stop-color='%23a07f3a' stop-opacity='0'/%3E %3C/linearGradient%3E %3ClinearGradient id='b' x1='.1' y1='0' x2='.9' y2='1'%3E %3Cstop offset='0' stop-color='%23f4e6c4' stop-opacity='0'/%3E %3Cstop offset='.42' stop-color='%23e8cf9a' stop-opacity='.95'/%3E %3Cstop offset='1' stop-color='%23a07f3a' stop-opacity='0'/%3E %3C/linearGradient%3E %3ClinearGradient id='c' x1='0' y1='0' x2='1' y2='1'%3E %3Cstop offset='0' stop-color='%23c9a45c' stop-opacity='0'/%3E %3Cstop offset='.42' stop-color='%23f4e6c4' stop-opacity='.9'/%3E %3Cstop offset='1' stop-color='%23c9a45c' stop-opacity='0'/%3E %3C/linearGradient%3E %3C/defs%3E %3Cpath d='M52 0C118 2 176 54 220 124V86C182 34 132 2 92 0Z' fill='url%28%23a%29'/%3E %3Cpath d='M126 0C162 6 196 32 220 66V44C198 20 168 2 144 0Z' fill='url%28%23b%29'/%3E %3Cpath d='M14 0C96 14 166 74 212 168' stroke='url%28%23c%29' stroke-width='2.6'/%3E %3Cpath d='M0 18C86 34 152 94 196 188' stroke='url%28%23c%29' stroke-width='1.1'/%3E %3Cpath d='M98 0C142 12 188 48 220 98' stroke='url%28%23c%29' stroke-width='.9'/%3E %3Cpath d='M170 0C192 6 208 16 220 28' stroke='url%28%23c%29' stroke-width='1.6'/%3E %3C/svg%3E");
  background-size:100% 100%;
  background-repeat:no-repeat;
  opacity:var(--ribbon-op);
}
.decor::before{ top:calc(var(--ribbon-size) * -.07); right:calc(var(--ribbon-size) * -.07); }
.decor::after {
  bottom:calc(var(--ribbon-size) * -.07); left:calc(var(--ribbon-size) * -.07);
  transform:rotate(180deg);
  opacity:calc(var(--ribbon-op) * .8);
}
.decor--tr::after{display:none}
.decor--bl::before{display:none}

/* -------------------------------------------------------------------------
   3) 星光層：<i> 為一顆四角星，可用行內變數覆寫
      --x/--y 位置  --s 尺寸  --d 動畫相位(負值=隨機錯開)  --r 靜態旋轉  --o 峰值透明度
      不寫變數時，由下方 nth-child 給出預設散佈（5~9 顆）
   ------------------------------------------------------------------------- */
.decor i{
  position:absolute; display:block;
  left:var(--x,50%); top:var(--y,50%);
  width:var(--s,10px); height:var(--s,10px);
  margin:calc(var(--s,10px) / -2);
  opacity:0;
  animation:decoTwinkle var(--dur,5.2s) ease-in-out infinite;
  animation-delay:var(--d,0s);
  will-change:transform,opacity;
}
/* 星芒本體：四角星 clip-path，中心白熱、芒尖漸淡 */
.decor i::before{
  content:''; position:absolute; inset:0;
  background:radial-gradient(circle at 50% 50%,
      #fff 0%, var(--star-color,#f4e6c4) 24%,
      rgba(232,207,154,.62) 48%, rgba(201,164,92,.32) 100%);
  clip-path:polygon(
    50% 0%, 54.5% 38%, 62% 45.5%, 100% 50%, 62% 54.5%, 54.5% 62%,
    50% 100%, 45.5% 62%, 38% 54.5%, 0% 50%, 38% 45.5%, 45.5% 38%);
}
/* 柔光暈：用 radial-gradient 代替 blur，移動端零濾鏡開銷 */
.decor i::after{
  content:''; position:absolute; inset:-45%;
  background:radial-gradient(circle at 50% 50%,
      rgba(244,230,196,.32) 0%, rgba(201,164,92,.14) 38%, transparent 68%);
}
/* 明滅但不熄滅：谷底仍保留 ~28% 亮度，任一瞬間星光都可見，避免「空窗期」 */
@keyframes decoTwinkle{
  0%,100%{ opacity:calc(var(--o,.85) * .28); transform:rotate(var(--r,0deg)) scale(.62) }
  22%    { opacity:var(--o,.85);             transform:rotate(var(--r,0deg)) scale(1)   }
  40%    { opacity:calc(var(--o,.85) * .48); transform:rotate(var(--r,0deg)) scale(.8)  }
  62%    { opacity:calc(var(--o,.85) * .92); transform:rotate(var(--r,0deg)) scale(.97) }
  82%    { opacity:calc(var(--o,.85) * .34); transform:rotate(var(--r,0deg)) scale(.7)  }
}

/* 預設散佈：深色卡片／區塊（9 顆，大小相位皆不同，避開中央文字帶） */
.decor i:nth-child(1){--x:7%;  --y:76%; --s:15px; --d:-.3s;  --dur:5.6s}
.decor i:nth-child(2){--x:21%; --y:90%; --s:8px;  --d:-2.7s; --dur:4.8s; --r:18deg}
.decor i:nth-child(3){--x:38%; --y:10%; --s:7px;  --d:-1.5s; --dur:6.1s}
.decor i:nth-child(4){--x:69%; --y:7%;  --s:11px; --d:-3.4s; --dur:5.0s; --r:-14deg}
.decor i:nth-child(5){--x:88%; --y:22%; --s:17px; --d:-.9s;  --dur:6.4s}
.decor i:nth-child(6){--x:95%; --y:56%; --s:8px;  --d:-4.2s; --dur:4.6s; --r:22deg}
.decor i:nth-child(7){--x:13%; --y:33%; --s:6px;  --d:-2.1s; --dur:5.9s}
.decor i:nth-child(8){--x:57%; --y:93%; --s:10px; --d:-3.8s; --dur:5.3s; --r:-20deg}
.decor i:nth-child(9){--x:79%; --y:72%; --s:6px;  --d:-1.2s; --dur:6.8s}

/* -------------------------------------------------------------------------
   4) 頁頭專用：矮而寬，綢帶縮小、星光沿頂部與右側分佈，不壓標題
   ------------------------------------------------------------------------- */
/* 頁頭很矮很寬：把綢帶橫向拉伸成「淺弧長掃」，比方形綢帶更貼合 bar 的比例 */
.decor--bar{ --ribbon-op:.30; --star-op:.8 }
.decor--bar::before{
  width:80%; height:190px; top:-62px; right:-4%;
  bottom:auto; left:auto;
}
.decor--bar::after{
  width:66%; height:170px; bottom:-104px; left:-6%;
  top:auto; right:auto;
  opacity:calc(var(--ribbon-op) * .7);
}
.decor--bar i:nth-child(1){--x:58%; --y:24%; --s:12px; --d:-.4s;  --dur:5.4s}
.decor--bar i:nth-child(2){--x:72%; --y:72%; --s:8px;  --d:-2.5s; --dur:4.9s; --r:20deg}
.decor--bar i:nth-child(3){--x:86%; --y:30%; --s:15px; --d:-1.1s; --dur:6.2s}
.decor--bar i:nth-child(4){--x:95%; --y:74%; --s:7px;  --d:-3.6s; --dur:5.1s}
.decor--bar i:nth-child(5){--x:44%; --y:84%; --s:6px;  --d:-4.3s; --dur:6.6s; --r:-16deg}
.decor--bar i:nth-child(6){--x:26%; --y:16%; --s:6px;  --d:-1.9s; --dur:5.7s}
.decor--bar i:nth-child(7){--x:9%;  --y:82%; --s:8px;  --d:-3.1s; --dur:6.0s}
.decor--bar i:nth-child(8),
.decor--bar i:nth-child(9){display:none}

/* 頁頭底部金線：與開屏底邊的描邊質感呼應 */
.appbar-gold-edge{
  position:absolute; left:0; right:0; bottom:0; height:1.5px; z-index:1;
  pointer-events:none;
  background:linear-gradient(90deg,
    transparent 0%, rgba(201,164,92,.15) 12%,
    var(--gold-light,#e8cf9a) 42%, var(--gold,#c9a45c) 58%,
    rgba(201,164,92,.15) 88%, transparent 100%);
}

/* 稀疏版：小卡片／窄區塊只留 5 顆 */
.decor--sparse i:nth-child(n+6){display:none}

/* -------------------------------------------------------------------------
   5) 金色分隔線與金邊
   ------------------------------------------------------------------------- */

/* 5.1 深色底上的細金線（無襯飾） */
.gold-rule{
  height:1px; border:0; margin:14px 0;
  background:linear-gradient(90deg,transparent,rgba(201,164,92,.55) 22%,
             var(--gold,#c9a45c) 50%, rgba(201,164,92,.55) 78%, transparent);
}
/* 淺色底（--paper 區）用略深的金 */
.gold-rule.on-light{
  background:linear-gradient(90deg,transparent,rgba(160,127,58,.28) 22%,
             var(--gold-deep,#a07f3a) 50%, rgba(160,127,58,.28) 78%, transparent);
  opacity:.7;
}

/* 5.2 帶菱形結點的分隔（章節標題間） */
.gold-rule-diamond{
  display:flex; align-items:center; gap:10px; margin:16px 0;
  color:var(--gold,#c9a45c);
}
.gold-rule-diamond::before,
.gold-rule-diamond::after{
  content:''; flex:1; height:1px;
  background:linear-gradient(90deg,transparent,currentColor);
  opacity:.5;
}
.gold-rule-diamond::after{ background:linear-gradient(270deg,transparent,currentColor) }
.gold-rule-diamond > i{
  width:6px; height:6px; flex:none; transform:rotate(45deg);
  background:linear-gradient(135deg,var(--gold-light,#e8cf9a),var(--gold-deep,#a07f3a));
}

/* 5.3 內嵌金邊框（深色區塊通用，等同 .table-card::after 的可復用版） */
.gold-frame{ position:relative }
.gold-frame > .gold-frame-line,
.gold-frame::after{
  content:''; position:absolute; inset:8px; z-index:1;
  border:1px solid rgba(201,164,92,.35);
  border-radius:calc(var(--radius,18px) - 6px);
  pointer-events:none;
}
/* 四角加重的金框（封面描邊質感） */
.gold-corners{ position:relative }
.gold-corners::before,
.gold-corners::after{
  content:''; position:absolute; width:26px; height:26px; z-index:1;
  pointer-events:none; border:1.5px solid var(--gold,#c9a45c);
  opacity:.55;
}
.gold-corners::before{ top:8px; left:8px; border-right:0; border-bottom:0; border-radius:8px 0 0 0 }
.gold-corners::after { bottom:8px; right:8px; border-left:0; border-top:0; border-radius:0 0 8px 0 }

/* 5.4 淺色卡片金邊（.card 增強版） */
.card--gold{
  border:1px solid rgba(201,164,92,.42) !important;
  box-shadow:0 4px 18px rgba(28,35,64,.07), inset 0 0 0 3px rgba(232,207,154,.13);
  position:relative; overflow:hidden;
}
/* 卡片頂部金色細飾條 */
.card--gold::before{
  content:''; position:absolute; top:0; left:0; right:0; height:2px;
  background:linear-gradient(90deg,transparent,var(--gold-light,#e8cf9a) 30%,
             var(--gold,#c9a45c) 50%, var(--gold-light,#e8cf9a) 70%, transparent);
  opacity:.9;
}

/* -------------------------------------------------------------------------
   6) 無障礙：尊重 prefers-reduced-motion —— 星光靜止顯示，綢帶保留
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  .decor i{
    animation:none;
    opacity:calc(var(--o,.85) * .8);
    transform:rotate(var(--r,0deg)) scale(.95);
  }
}


/* =========================================================================
   ritual.css —— 港區省級政協委員聯誼會二十周年慶典 · 簽到高光時刻
   深孔雀綠底 + 帆船會徽點亮 + 金色光環 + 星光綻放 + 金色綢帶掃過
   純 CSS / 內聯 SVG，品牌標識使用 assets/emblem-event.png
   動畫僅使用 transform / opacity；總時長 ≈ 2.95s，收尾自動淡出
   取代 index.html 原有的 #ritual / .ring / .seal / .ritual-msg / .petal 樣式
   ========================================================================= */

/* ---- 時間軸（可整體加減速：改 --rt-scale 之外的值請成組調整） ----------
   0.00  底幕亮起
   0.20  會徽點亮浮現
   0.28  星光四射
   0.30  綢帶 A 掃過        0.50  綢帶 B 掃過
   0.50 / 0.72 / 0.94  三圈金色光環錯峰擴散
   0.95  「歡迎蒞臨」
   1.25  嘉賓姓名（大字金漸變）
   1.55  金色分隔線展開
   1.80  「正在為您呈上座位安排」
   2.45  整體優雅淡出 → 2.95 交給主界面                                    */

#ritual{
  position:fixed; inset:0; z-index:110;
  max-width:520px; margin:0 auto;
  display:none; flex-direction:column; align-items:center; justify-content:center;
  overflow:hidden; color:#fff; text-align:center;
  /* 深孔雀綠：中心微亮，四周壓深，與官方封面同色系 */
  background:
    radial-gradient(120% 78% at 50% 34%, #2a5866 0%, #1d434c 34%, #16333a 62%, #12292c 100%);
}
#ritual.on{ display:flex; animation:rtOut .5s 2.45s cubic-bezier(.4,0,.7,1) both }

/* 頂部／底部極淡的青光暈，讓純色底不死板 */
#ritual::before{
  content:''; position:absolute; inset:0; pointer-events:none;
  background:
    radial-gradient(60% 34% at 50% 8%,  rgba(49,118,125,.34), transparent 70%),
    radial-gradient(80% 40% at 50% 104%,rgba(46,105,114,.30), transparent 72%);
  opacity:0; animation:rtFade .8s .05s ease-out both;
}

/* -------------------------------------------------------------------------
   1) 金色綢帶：兩道弧線，錯峰自左下向右上／右下向左上掃過
   ------------------------------------------------------------------------- */
.rt-ribbons{position:absolute;inset:0;overflow:hidden;pointer-events:none;z-index:1}
.rt-rb{position:absolute;left:-46%;width:192%;height:auto;will-change:transform,opacity;opacity:0}
.rt-rb-a{top:6%}
.rt-rb-b{bottom:4%}
#ritual.on .rt-rb-a{animation:rtSweepA 1.75s .30s cubic-bezier(.22,.62,.2,1) both}
#ritual.on .rt-rb-b{animation:rtSweepB 1.85s .50s cubic-bezier(.22,.62,.2,1) both}
@keyframes rtSweepA{
  0%  {opacity:0;  transform:translate3d(-26%,14%,0) rotate(-7deg) scale(1.06)}
  38% {opacity:.95}
  100%{opacity:0;  transform:translate3d(20%,-6%,0)  rotate(1.5deg) scale(1.06)}
}
@keyframes rtSweepB{
  0%  {opacity:0;  transform:translate3d(22%,12%,0)  rotate(6deg) scale(1.05)}
  40% {opacity:.85}
  100%{opacity:0;  transform:translate3d(-22%,-4%,0) rotate(-2deg) scale(1.05)}
}

/* -------------------------------------------------------------------------
   2) 會徽 + 光環 + 星光（共用一個定位中心 .rt-core）
   ------------------------------------------------------------------------- */
.rt-core{
  position:relative; z-index:3;
  width:132px; height:132px; flex:none;
  display:flex; align-items:center; justify-content:center;
}

/* 2.1 會徽背後的金色柔光（代替 filter，移動端零開銷） */
.rt-glow{
  position:absolute; width:340px; height:340px; border-radius:50%; pointer-events:none; opacity:0;
  background:radial-gradient(circle at 50% 50%,
    rgba(244,232,198,.42) 0%, rgba(201,164,92,.26) 26%,
    rgba(201,164,92,.10) 48%, transparent 72%);
}
#ritual.on .rt-glow{animation:rtGlow 1.5s .18s ease-out both}
@keyframes rtGlow{
  0%  {opacity:0;   transform:scale(.35)}
  34% {opacity:1;   transform:scale(1.02)}
  100%{opacity:.62; transform:scale(1)}
}

/* 2.2 會徽本體：由中心點亮、縮放浮現，外加一圈金環 */
.rt-emblem{
  position:relative; z-index:2;
  width:118px; height:118px; border-radius:50%;
  display:flex; align-items:center; justify-content:center;
  background:radial-gradient(circle at 50% 40%, rgba(255,255,255,.14), transparent 70%);
  box-shadow:0 0 0 1px rgba(201,164,92,.75), 0 0 0 7px rgba(201,164,92,.14),
             0 14px 44px rgba(0,0,0,.34);
  opacity:0;
}
.rt-emblem img{width:100%;height:100%;display:block;border-radius:50%}
#ritual.on .rt-emblem{animation:rtEmblem .95s .20s cubic-bezier(.16,1.02,.3,1) both}
@keyframes rtEmblem{
  0%  {opacity:0; transform:scale(.42)}
  46% {opacity:1}
  70% {transform:scale(1.045)}
  100%{opacity:1; transform:scale(1)}
}

/* 2.3 金色光環：三圈錯峰擴散 */
.rt-ring{
  position:absolute; width:132px; height:132px; border-radius:50%; pointer-events:none;
  border:1.5px solid rgba(232,207,154,.7);
  opacity:0; will-change:transform,opacity;
}
.rt-ring:nth-of-type(2){border-width:1px;border-color:rgba(201,164,92,.6)}
.rt-ring:nth-of-type(3){border-width:.8px;border-color:rgba(201,164,92,.45)}
#ritual.on .rt-ring{animation:rtRing 1.45s cubic-bezier(.16,.72,.24,1) both}
#ritual.on .rt-ring:nth-of-type(1){animation-delay:.50s}
#ritual.on .rt-ring:nth-of-type(2){animation-delay:.72s}
#ritual.on .rt-ring:nth-of-type(3){animation-delay:.94s}
@keyframes rtRing{
  0%  {opacity:0;   transform:scale(.62)}
  16% {opacity:.95}
  100%{opacity:0;   transform:scale(3.1)}
}

/* 2.4 星光綻放：12 顆四角星由中心射出後緩慢消隱 */
.rt-burst{position:absolute;inset:0;pointer-events:none}
.rt-burst i{
  position:absolute; left:50%; top:50%; display:block;
  width:var(--s,13px); height:var(--s,13px); margin:calc(var(--s,13px) / -2);
  opacity:0; will-change:transform,opacity;
}
.rt-burst i::before{                       /* 四角星芒：中心白熱、芒尖漸淡 */
  content:''; position:absolute; inset:0;
  background:radial-gradient(circle at 50% 50%,
    #fff 0%, #f4e6c4 26%, rgba(232,207,154,.6) 52%, rgba(201,164,92,.25) 100%);
  clip-path:polygon(50% 0%, 54.5% 38%, 62% 45.5%, 100% 50%, 62% 54.5%, 54.5% 62%,
                    50% 100%, 45.5% 62%, 38% 54.5%, 0% 50%, 38% 45.5%, 45.5% 38%);
}
#ritual.on .rt-burst i{animation:rtStar 1.25s cubic-bezier(.12,.68,.22,1) both}
@keyframes rtStar{
  0%  {opacity:0; transform:translate3d(0,0,0) scale(.2) rotate(0deg)}
  22% {opacity:1}
  60% {opacity:.85}
  100%{opacity:0; transform:translate3d(var(--tx,0),var(--ty,0),0) scale(.62) rotate(38deg)}
}
/* 12 個方位（每 30°），半徑長短交錯，大小與相位各異 */
.rt-burst i:nth-child(1) {--tx:158px; --ty:0;      --s:15px; animation-delay:.28s}
.rt-burst i:nth-child(2) {--tx:97px;  --ty:56px;   --s:9px;  animation-delay:.38s}
.rt-burst i:nth-child(3) {--tx:79px;  --ty:137px;  --s:12px; animation-delay:.31s}
.rt-burst i:nth-child(4) {--tx:0;     --ty:112px;  --s:8px;  animation-delay:.42s}
.rt-burst i:nth-child(5) {--tx:-79px; --ty:137px;  --s:11px; animation-delay:.34s}
.rt-burst i:nth-child(6) {--tx:-97px; --ty:56px;   --s:9px;  animation-delay:.40s}
.rt-burst i:nth-child(7) {--tx:-158px;--ty:0;      --s:16px; animation-delay:.28s}
.rt-burst i:nth-child(8) {--tx:-97px; --ty:-56px;  --s:10px; animation-delay:.36s}
.rt-burst i:nth-child(9) {--tx:-79px; --ty:-137px; --s:13px; animation-delay:.30s}
.rt-burst i:nth-child(10){--tx:0;     --ty:-112px; --s:8px;  animation-delay:.44s}
.rt-burst i:nth-child(11){--tx:79px;  --ty:-137px; --s:14px; animation-delay:.32s}
.rt-burst i:nth-child(12){--tx:97px;  --ty:-56px;  --s:9px;  animation-delay:.39s}

/* -------------------------------------------------------------------------
   3) 文字：三段依次浮現
   ------------------------------------------------------------------------- */
.rt-words{position:relative;z-index:3;margin-top:38px;padding:0 22px;max-width:100%}
.rt-w1{
  font-size:14.5px; font-weight:500; color:rgba(240,246,242,.72);
  letter-spacing:.42em; text-indent:.42em; opacity:0;
}
.rt-name{
  margin-top:14px; line-height:1.2; font-weight:900;
  font-size:clamp(30px,10.8vw,44px); letter-spacing:.1em; text-indent:.1em;
  background:linear-gradient(180deg,#fdf6e2 0%,#f1e0b0 32%,#e8cf9a 55%,#c9a45c 82%,#a98a45 100%);
  -webkit-background-clip:text; background-clip:text; color:transparent;
  -webkit-text-fill-color:transparent;
  opacity:0; word-break:break-word;
}
.rt-rule{display:flex;align-items:center;justify-content:center;gap:9px;margin-top:15px;opacity:0}
.rt-rule::before,.rt-rule::after{
  content:''; width:52px; height:1px;
  background:linear-gradient(90deg,transparent,rgba(201,164,92,.85));
}
.rt-rule::after{background:linear-gradient(270deg,transparent,rgba(201,164,92,.85))}
.rt-rule > i{
  width:5px;height:5px;flex:none;transform:rotate(45deg);
  background:linear-gradient(135deg,#e8cf9a,#a07f3a);
}
.rt-w2{
  margin-top:15px; font-size:12px; color:rgba(240,246,242,.5);
  letter-spacing:.2em; text-indent:.2em; opacity:0;
}
#ritual.on .rt-w1  {animation:rtUp .7s .95s cubic-bezier(.2,.75,.25,1) both}
#ritual.on .rt-name{animation:rtNameIn .85s 1.25s cubic-bezier(.16,.9,.28,1) both}
#ritual.on .rt-rule{animation:rtRule .6s 1.55s ease-out both}
#ritual.on .rt-w2  {animation:rtUp .7s 1.80s cubic-bezier(.2,.75,.25,1) both}

@keyframes rtUp    {from{opacity:0;transform:translate3d(0,12px,0)} to{opacity:1;transform:none}}
@keyframes rtNameIn{from{opacity:0;transform:translate3d(0,16px,0) scale(.93)} to{opacity:1;transform:none}}
@keyframes rtRule  {from{opacity:0;transform:scaleX(.3)} to{opacity:1;transform:none}}
@keyframes rtFade  {from{opacity:0} to{opacity:1}}
/* 收尾：整體優雅淡出並輕微前推，交給主界面 */
@keyframes rtOut{
  0%,84%{opacity:1;transform:scale(1)}
  100%  {opacity:0;transform:scale(1.035)}
}

/* -------------------------------------------------------------------------
   4) 無障礙：prefers-reduced-motion —— 600ms 簡單淡入淡出，畫面靜態呈現
      （JS 同步把等待時間縮短到 620ms，見 ritual.js）
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  #ritual.on,
  #ritual.on .rt-rb-a, #ritual.on .rt-rb-b,
  #ritual.on .rt-glow, #ritual.on .rt-emblem, #ritual.on .rt-ring,
  #ritual.on .rt-burst i,
  #ritual.on .rt-w1, #ritual.on .rt-name, #ritual.on .rt-rule, #ritual.on .rt-w2,
  #ritual::before{animation:none !important}
  #ritual.on{animation:rtCalm .6s linear both !important}
  #ritual::before{opacity:1}
  #ritual.on .rt-glow{opacity:.6}
  #ritual.on .rt-emblem{opacity:1}
  #ritual.on .rt-rb-a{opacity:.5;transform:translate3d(-2%,4%,0) rotate(-4deg)}
  #ritual.on .rt-rb-b{opacity:.4;transform:translate3d(2%,2%,0) rotate(3deg)}
  #ritual.on .rt-ring{opacity:.3;transform:scale(1.5)}
  #ritual.on .rt-ring:nth-of-type(2){opacity:.2;transform:scale(2.1)}
  #ritual.on .rt-ring:nth-of-type(3){opacity:.14;transform:scale(2.7)}
  #ritual.on .rt-burst i{opacity:.5;transform:translate3d(var(--tx,0),var(--ty,0),0) scale(.7)}
  #ritual.on .rt-w1,#ritual.on .rt-name,#ritual.on .rt-rule,#ritual.on .rt-w2{opacity:1;transform:none}
}
/* 靜態淡入淡出（reduced-motion 專用） */
@keyframes rtCalm{0%{opacity:0}22%{opacity:1}74%{opacity:1}100%{opacity:0}}


/* ================= 深色玻璃主題（正宗孔雀綠，對齊官方海報） ================= */
/* =========================================================================
   theme_dark.css —— 電子禮賓深色主題基底
   用法：整段貼到 index.html <style> 的最末尾即可生效（不需改動任何既有規則）。
   目標：消滅白底留空 / 淺色卡片改深色玻璃 / 配色改回封面圖的「偏藍孔雀綠」
   不觸碰：#splash、.splash-panel、cover_tall.jpg 相關樣式
   ========================================================================= */

/* -------------------------------------------------------------------------
   0) 品牌色重寫 —— 直接取自官方封面 cover.jpg
      關鍵：孔雀綠必須偏「藍」，而非偏綠的墨綠
   ------------------------------------------------------------------------- */
:root{
  /* 最深（頁面底） */
  --navy-950:#0f2428;
  --navy-900:#12292c;
  --navy-880:#16333a;
  /* 深（卡片底） */
  --navy-800:#193a42;
  --navy-780:#1d434c;
  /* 中（提亮 / 邊框） */
  --navy-700:#26505c;
  --navy-680:#2a5866;
  /* 亮（高光 / 強調） */
  --navy-600:#2e6972;
  --navy-560:#33737c;
  --navy-520:#3b7380;
  --teal-sky:#31767d;          /* 海報天際線青 */

  /* 金 */
  --gold:#c9a45c;
  --gold-light:#e8cf9a;
  --gold-deep:#a07f3a;
  --gold-pale:#e8e9a8;         /* 綢帶亮金：偏淺偏黃綠，用於標題點綴與高光 */
  --gold-glow:#f1f698;

  --red:#e2242c;

  /* 文字（深色底專用） */
  --tx-1:#ffffff;
  --tx-2:rgba(240,246,242,.86);
  --tx-3:rgba(240,246,242,.62);
  --tx-4:rgba(240,246,242,.44);

  /* 深色玻璃 */
  --glass-bg:rgba(25,58,66,.55);
  --glass-bg-2:rgba(29,67,76,.62);
  --glass-bd:1px solid rgba(201,164,92,.28);
  --glass-sh:0 8px 26px rgba(0,0,0,.28);
}

/* -------------------------------------------------------------------------
   1) 固定全視口深色背景 —— 內容不滿屏時下方也是孔雀綠，永不露白
      html 承載縱向漸變（background-attachment:fixed）
      body::before 承載徑向光暈 + 極淡星點紋理（≤3% 不透明度）
   ------------------------------------------------------------------------- */
html{
  background:
    linear-gradient(180deg,
      #16333a 0%,
      #143036 26%,
      #12292c 58%,
      #102629 82%,
      #0f2428 100%) fixed no-repeat,
    #0f2428;
  background-size:cover;
}
body{
  background:transparent !important;
  color:var(--tx-2);
}
/* 光暈 + 星點：fixed 覆蓋整個視口，z-index:-1 落在所有內容之下 */
body::before{
  content:'';
  position:fixed; inset:-10px; z-index:-1; pointer-events:none;
  background:
    /* 頂部海報式青綠光暈 */
    radial-gradient(78% 42% at 50% -6%,  rgba(59,115,128,.42), transparent 72%),
    radial-gradient(58% 34% at 104% 20%, rgba(49,118,125,.26), transparent 74%),
    radial-gradient(64% 38% at -6% 74%,  rgba(38,80,92,.30),  transparent 76%),
    radial-gradient(50% 26% at 50% 108%, rgba(46,105,114,.20), transparent 78%),
    /* 極淡星點紋理（三層錯位平鋪，最高 3%） */
    radial-gradient(circle at 14% 20%, rgba(255,255,255,.030) 0 1.1px, transparent 1.7px),
    radial-gradient(circle at 66% 46%, rgba(241,246,152,.026) 0 1.0px, transparent 1.6px),
    radial-gradient(circle at 86% 78%, rgba(255,255,255,.022) 0 1.3px, transparent 1.9px);
  background-size:
    100% 100%, 100% 100%, 100% 100%, 100% 100%,
    143px 191px, 211px 163px, 173px 233px;
  background-repeat:no-repeat,no-repeat,no-repeat,no-repeat,repeat,repeat,repeat;
}
/* 主應用容器透明化：原本是 var(--paper) 白底 */
html body #app{
  background:transparent !important;
  min-height:100dvh;
}
html body main{background:transparent}

/* -------------------------------------------------------------------------
   2) 頁頭
   ------------------------------------------------------------------------- */
html body header.appbar{
  background:
    radial-gradient(120% 200% at 88% -60%, rgba(49,118,125,.55) 0%, transparent 62%),
    linear-gradient(180deg,#173740,#12292c);
  box-shadow:0 2px 18px rgba(0,0,0,.42);
  color:#f3ead6;
}
html body .appbar .t1{color:#fff}
html body .appbar .t2{color:var(--tx-3)}

/* -------------------------------------------------------------------------
   3) 通用深色玻璃卡片 —— .card / .notice / .map-wrap / .stat / .quick a
      / .ts-chip / .door-pick button / .sheet
      （帶 !important 者為覆蓋 HTML 內聯 style）
   ------------------------------------------------------------------------- */
html body #app .card,
html body #app .notice,
html body #app .map-wrap,
html body #app .stat,
html body #app .quick a,
html body #app .sheet,
html body #app .ts-chip,
html body #app .door-pick button,
html body #app .map-zoom{
  background:var(--glass-bg) !important;
  -webkit-backdrop-filter:blur(14px) saturate(1.12);
  backdrop-filter:blur(14px) saturate(1.12);
  border:1px solid rgba(201,164,92,.28) !important;
  box-shadow:0 8px 26px rgba(0,0,0,.28);
  color:var(--tx-2);
}
html body #app .card,
html body #app .map-wrap{border-radius:var(--radius)}
html body #app .stat,
html body #app .quick a,
html body #app .notice{border-radius:14px}

/* 內側一道極淡的金色高光，讓玻璃更有「綢面」質感 */
html body #app .card,
html body #app .map-wrap,
html body #app .about-hero{
  box-shadow:0 8px 26px rgba(0,0,0,.28), inset 0 1px 0 rgba(232,233,168,.10);
}

/* 卡片標題 */
html body #app .card h3{
  color:#fff;
  letter-spacing:.1em;
  text-shadow:0 1px 10px rgba(0,0,0,.35);
}
html body #app .card h3::before{
  background:linear-gradient(180deg,var(--gold-pale),var(--gold) 55%,var(--gold-deep));
  box-shadow:0 0 10px rgba(232,233,168,.35);
}

/* -------------------------------------------------------------------------
   4) 桌號主卡 / 關於頁 hero —— 調成偏藍孔雀綠
   ------------------------------------------------------------------------- */
html body #app .table-card{
  background:
    radial-gradient(140% 90% at 85% -20%, #33737c 0%, transparent 56%),
    radial-gradient(120% 80% at 10% 120%, #26505c 0%, transparent 60%),
    linear-gradient(160deg,#1d434c,#12292c);
  box-shadow:0 14px 38px rgba(0,0,0,.42), inset 0 1px 0 rgba(232,233,168,.12);
}
html body #app .table-card::after{border-color:rgba(201,164,92,.42)}
html body #app .tc-num{
  background:linear-gradient(180deg,var(--gold-pale),var(--gold) 62%,var(--gold-deep));
  -webkit-background-clip:text;background-clip:text;color:transparent;
}
html body #app .tc-tname,
html body #app .tc-role{color:var(--gold-light)}
html body #app .tc-hello,
html body #app .tc-meta{color:var(--tx-3)}
html body #app .tc-meta{color:var(--tx-2)}
html body #app .tc-meta .k{color:var(--tx-3)}
html body #app .seat-item{background:rgba(255,255,255,.06);border-color:rgba(201,164,92,.34)}
html body #app .seat-item.primary{
  background:linear-gradient(135deg,rgba(201,164,92,.20),rgba(232,233,168,.09));
  border-color:rgba(232,207,154,.72);
}
html body #app .seat-k{color:var(--tx-3)}
html body #app .seat-v em{color:var(--gold-pale)}

html body #app .about-hero{
  background:
    radial-gradient(120% 100% at 50% -20%, #33737c 0%, transparent 62%),
    radial-gradient(100% 70% at 12% 116%, #26505c 0%, transparent 62%),
    linear-gradient(160deg,#1d434c,#12292c);
}
html body #app .about-hero .ah1{color:#fff}
html body #app .about-hero .ah2{color:var(--gold-pale)}
html body #app .mission span{color:var(--gold-light);border-color:rgba(201,164,92,.55)}

/* -------------------------------------------------------------------------
   5) 公告條 .notice —— 米色改深色玻璃
   ------------------------------------------------------------------------- */
html body #app .notice{
  background:linear-gradient(135deg,rgba(29,67,76,.62),rgba(25,58,66,.52)) !important;
  border-color:rgba(201,164,92,.32) !important;
}
html body #app .notice p{color:var(--tx-2); font-size:12.5px; line-height:1.8}
html body #app .notice p b{color:inherit; font-weight:700}
html body #app .notice .dot{box-shadow:none}

/* -------------------------------------------------------------------------
   6) 快捷宮格
   ------------------------------------------------------------------------- */
html body #app .quick a{color:var(--tx-2)}
html body #app .quick .qi{
  background:linear-gradient(135deg,rgba(232,233,168,.18),rgba(201,164,92,.12));
  border:1px solid rgba(201,164,92,.30);
  color:var(--gold-pale);
}
html body #app .quick .qt{color:var(--tx-2)}

/* -------------------------------------------------------------------------
   7) 時間軸
   ------------------------------------------------------------------------- */
html body #app .tl::before{
  background:linear-gradient(180deg,var(--gold-pale),rgba(201,164,92,.55) 45%,rgba(201,164,92,.10));
}
html body #app .tl-item::before{
  background:#1a3b43;
  border-color:var(--gold);
  box-shadow:0 0 0 3px rgba(201,164,92,.16);
}
html body #app .tl-item.now::before{
  background:var(--gold-pale);
  box-shadow:0 0 0 3px rgba(232,233,168,.20), 0 0 14px rgba(232,233,168,.5);
}
html body #app .tl-time{color:var(--gold-pale)}
html body #app .tl-title{color:#fff}
html body #app .tl-desc{color:var(--tx-3)}
html body #app .tl-tag{
  color:#ff9ba0;
  border-color:rgba(226,36,44,.45);
  background:rgba(226,36,44,.14);
}

html body #app .ts-chip.on{
  background:linear-gradient(135deg,rgba(232,233,168,.24),rgba(201,164,92,.16)) !important;
  border-color:rgba(232,207,154,.75) !important;
  color:var(--gold-pale);
  font-weight:700;
  box-shadow:0 4px 16px rgba(201,164,92,.22);
}
html body #app .ts-chip .mini{opacity:.75}
html body #app .guest-row{border-bottom:1px solid rgba(232,233,168,.12)}
html body #app .guest-row:last-child{border-bottom:none}
html body #app .g-name{color:#fff}
html body #app .g-title{color:var(--tx-3)}
html body #app .g-badge{
  color:var(--gold-pale);
  border-color:rgba(201,164,92,.55);
  background:rgba(201,164,92,.14);
}
html body #app .g-badge.me{color:#fff;background:var(--red);border-color:var(--red)}
html body #app .g-bio{
  background:rgba(15,36,40,.55) !important;
  border:1px solid rgba(201,164,92,.20);
  color:var(--tx-2);
}
html body #app .g-arrow{color:rgba(232,207,154,.55)}
html body #app .table-head-note{color:var(--tx-3)}
/* 頭像：內聯色較暗，疊一層柔光 + 加重金環 */
html body #app .avatar{
  background-image:linear-gradient(150deg,rgba(255,255,255,.22),rgba(0,0,0,.18)) !important;
  border-color:rgba(232,207,154,.75);
  box-shadow:0 3px 12px rgba(0,0,0,.35);
}

/* -------------------------------------------------------------------------
   9) 會場導覽
   ------------------------------------------------------------------------- */
html body #app .map-wrap{padding:14px 10px 6px}
html body #app .map-title .mt1{color:#fff}
html body #app .map-title .mt2{color:var(--tx-3)}
html body #app .legend{color:var(--tx-3)}
html body #app .door-pick button{color:var(--tx-2)}
html body #app .door-pick button.on{
  background:linear-gradient(135deg,rgba(232,233,168,.24),rgba(201,164,92,.16)) !important;
  border-color:rgba(232,207,154,.75) !important;
  color:var(--gold-pale); font-weight:700;
}
html body #app .map-zoom{
  background:linear-gradient(135deg,rgba(201,164,92,.20),rgba(29,67,76,.55)) !important;
  border-color:rgba(201,164,92,.48) !important;
  color:var(--gold-pale) !important;
}
/* 全屏看圖底色統一 */
html body #mapFull{background:#12292c}
/* 9.1 平面圖 SVG 配色協調（屬性選擇器可覆蓋 presentation attribute）
      地板由 #1d4442 → 偏藍的 #1a3f47；白色桌位圈改為帶青的暖白，仍然清晰 */
html body #app svg#venue path[fill="#1d4442"],
html body #mapFull svg path[fill="#1d4442"]{ fill:#1a3f47; stroke:#2f6a76 }
html body #app svg#venue circle[fill="#fff"],
html body #mapFull svg circle[fill="#fff"]{ fill:#eef4f2 }
html body #app svg#venue circle[stroke="#8fbdbb"],
html body #mapFull svg circle[stroke="#8fbdbb"]{ stroke:#79b3bd }
html body #app svg#venue rect[fill="#fff"],
html body #mapFull svg rect[fill="#fff"]{ fill:#f1f6f4 }
html body #app svg#venue text[fill="#1e433f"],
html body #mapFull svg text[fill="#1e433f"]{ fill:#123039 }

/* -------------------------------------------------------------------------
   10) 聯會介紹
   ------------------------------------------------------------------------- */
html body #app .stat .n{color:var(--gold-pale)}
html body #app .stat .n em{color:var(--gold)}
html body #app .stat .k{color:var(--tx-3)}
html body #app .about-p{color:var(--tx-2)}
html body #app .about-p b{color:var(--gold-pale)}
html body #app .milestone{border-bottom:1px dashed rgba(232,233,168,.16)}
html body #app .milestone:last-child{border-bottom:none}
html body #app .ms-year{color:var(--gold-pale)}
html body #app .ms-body{color:var(--tx-2)}
/* 主席寄語落款（HTML 內聯 color:#8a6a2c） */
html body #app .card p.serif[style]{color:var(--gold-light) !important}

/* 兩張帶內聯米色漸變的卡（破冰話題 / 主席寄語）——改為金調深玻璃 */
html body #pg-about .card[style]{
  background:linear-gradient(135deg,rgba(201,164,92,.16),rgba(29,67,76,.60)) !important;
  border:1px solid rgba(201,164,92,.36) !important;
}

/* -------------------------------------------------------------------------
   11) 底部導航 —— 深色毛玻璃 + 金色選中態
   ------------------------------------------------------------------------- */
html body nav#tabbar{
  background:linear-gradient(180deg,rgba(18,41,44,.82),rgba(15,36,40,.94)) !important;
  -webkit-backdrop-filter:blur(18px) saturate(1.2);
  backdrop-filter:blur(18px) saturate(1.2);
  border-top:1px solid rgba(201,164,92,.30);
  box-shadow:0 -8px 26px rgba(0,0,0,.34);
}
/* 導航頂緣金線，呼應頁頭 */
html body nav#tabbar::before{
  content:'';position:absolute;left:0;right:0;top:0;height:1.5px;pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(201,164,92,.12) 12%,
    var(--gold-pale) 42%, var(--gold) 58%, rgba(201,164,92,.12) 88%, transparent);
  opacity:.85;
}
html body #tabbar a{color:var(--tx-4)}
html body #tabbar a.on{color:var(--gold-pale);font-weight:700}
html body #tabbar a.on .ni{
  color:var(--gold-pale);
  filter:drop-shadow(0 0 7px rgba(232,233,168,.45));
}

/* -------------------------------------------------------------------------
   12) 裝飾層在深色玻璃卡上的調校（.decor 綢帶更含蓄，避免刺眼）
   ------------------------------------------------------------------------- */
html body #app .card > .decor,
html body #app .map-wrap > .decor,
html body #app .notice > .decor{ --ribbon-op:.14; --star-op:.55 }
html body #app .table-card > .decor{ --ribbon-op:.24; --star-op:.8 }
html body #app .about-hero > .decor{ --ribbon-op:.20; --star-op:.7 }
html body header.appbar > .decor--bar{ --ribbon-op:.26; --star-op:.7 }
/* 淺色底金線在深色底上不再需要壓暗 */
html body #app .gold-rule.on-light{
  background:linear-gradient(90deg,transparent,rgba(201,164,92,.55) 22%,
             var(--gold) 50%, rgba(201,164,92,.55) 78%, transparent);
  opacity:1;
}
/* 淺色卡金邊變體在深色底的陰影修正 */
html body #app .card--gold{
  box-shadow:0 8px 26px rgba(0,0,0,.28), inset 0 0 0 3px rgba(232,233,168,.09);
}

/* -------------------------------------------------------------------------
   13) 細節：選取色、滾動條、對話框底色
   ------------------------------------------------------------------------- */
html body ::selection{background:rgba(201,164,92,.35);color:#fff}
html body #app *::-webkit-scrollbar{width:0;height:0}
html body #ritual{background:linear-gradient(180deg,#16333a,#0f2428)}

/* ================= 動效系統 ================= */
/* =========================================================================
   motion.css —— 港省聯二十周年慶典 · 動效系統
   庄重 · 克制 · 不炫技：只用 transform / opacity，全部尊重 reduced-motion
   與 .venue-map / .vn-* 平面圖入座動畫完全隔離（本檔不含任何 .vn- 選擇器）
   搭配 motion.js 使用；單獨引入本檔不會讓任何內容消失（隱藏態只在 JS
   加上 .mo-item 後才生效）。
   ========================================================================= */

:root{
  --mo-ease:cubic-bezier(.2,.8,.2,1);   /* 主緩動：起步快、收尾穩 */
  --mo-ease-out:cubic-bezier(.4,0,.6,1);/* 離場緩動 */
  --mo-stagger:74ms;                    /* 卡片錯峰間隔 */
  --mo-rise:14px;                       /* 進場上浮距離 */
}

/* -------------------------------------------------------------------------
   1) 頁面轉場
   把 index.html 既有的 .page{animation:pageIn ...} 關掉，改由本系統接管。
   .page.mo-out  舊頁：淡出 + 極輕微內縮（150ms）
   .page.mo-in   新頁：容器只做快速淡入，位移交給內部卡片，避免雙重運動
   ------------------------------------------------------------------------- */
.page{ animation:none }                       /* 覆蓋既有 pageIn，不需 !important */
.page.mo-out{ animation:moPageOut .15s var(--mo-ease-out) both; will-change:transform,opacity }
.page.mo-in { animation:moPageIn  .2s ease-out both }

@keyframes moPageOut{
  from{ opacity:1; transform:none }
  to  { opacity:0; transform:scale(.986) translateY(-5px) }
}
@keyframes moPageIn{ from{opacity:0} to{opacity:1} }

/* -------------------------------------------------------------------------
   2) 進場編排 / 滾動浮現（同一套原子）
   .mo-item        由 JS 加上 → 預設隱藏（JS 未跑則永不隱藏，安全降級）
   .mo-item.mo-play 播放，延遲 = --mo-i × --mo-stagger
   播完由 JS 移除兩個 class，避免 animation fill 蓋掉 :active 的 transform
   ------------------------------------------------------------------------- */
.mo-item{ opacity:0 }
.mo-item.mo-play{
  animation:moRise .42s var(--mo-ease) both;
  animation-delay:calc(var(--mo-i,0) * var(--mo-stagger));
  will-change:transform,opacity;
}
@keyframes moRise{
  from{ opacity:0; transform:translate3d(0,var(--mo-rise),0) }
  to  { opacity:1; transform:none }
}

/* 深色主卡進場稍慢、幅度稍小，重量感更足 */
.table-card.mo-item.mo-play,
.about-hero.mo-item.mo-play{ animation-duration:.52s; --mo-rise:10px }

/* -------------------------------------------------------------------------
   3) 座位數字強調：放大定格 + 一圈金色光暈散開（數字滾動由 JS 驅動）
   ------------------------------------------------------------------------- */
.seat-v em{ position:relative; display:inline-block }
.seat-v em.mo-num{
  animation:moNum .52s var(--mo-ease) both;
  animation-delay:var(--mo-nd,.2s);
}
@keyframes moNum{
  0%  { opacity:0; transform:translate3d(0,5px,0) scale(.74) }
  62% { opacity:1; transform:translate3d(0,0,0)   scale(1.05) }
  100%{ opacity:1; transform:none }
}
.seat-v em.mo-num::after{
  content:''; position:absolute; left:50%; top:52%;
  width:2.6em; height:2.6em; margin:-1.3em 0 0 -1.3em; border-radius:50%;
  background:radial-gradient(circle,rgba(244,230,196,.5) 0%,rgba(201,164,92,.22) 42%,transparent 70%);
  opacity:0; pointer-events:none;
  animation:moNumGlow 1.15s ease-out both;
  animation-delay:var(--mo-nd,.2s);
}
@keyframes moNumGlow{
  0%  { opacity:0;   transform:scale(.35) }
  28% { opacity:.85; transform:scale(1) }
  100%{ opacity:0;   transform:scale(1.6) }
}

/* -------------------------------------------------------------------------
   4) 微互動 —— 按壓回饋 / 抬升 / 掃光 / 席位切換指示
   ------------------------------------------------------------------------- */

/* 4.1 通用按壓：彈性但不彈跳（無 overshoot） */
.tc-actions button,
.seat-go, .map-zoom, .door-pick button, .ts-chip,
.quick a, .stat, .card, .map-wrap, .pick-row, #tabbar a,
#btnLookup, #btnCheckin{
  transition:transform .2s var(--mo-ease), box-shadow .24s var(--mo-ease),
             background-color .28s var(--mo-ease), border-color .28s var(--mo-ease),
             color .28s var(--mo-ease);
}
.tc-actions button:active,
.map-zoom:active, .door-pick button:active{ transform:scale(.968) }
.seat-go:active, .ts-chip:active{ transform:scale(.94) }
.quick a:active, .stat:active, .pick-row:active{ transform:scale(.965) }
.card:active, .map-wrap:active{ transform:scale(.995) }
#btnLookup:active, #btnCheckin:active{ transform:scale(.962) }   /* 覆蓋既有 .96，統一曲線 */

/* 主按鈕按壓時陰影收斂，像真的被按下去 */
.tc-actions button.lead:active{ box-shadow:0 3px 12px rgba(201,164,92,.28) }

/* 4.2 桌面端輕微抬升（觸控裝置不觸發，避免 hover 殘留） */
@media (hover:hover) and (pointer:fine){
  .card:hover, .map-wrap:hover{ transform:translate3d(0,-2px,0); box-shadow:0 10px 26px rgba(28,35,64,.10) }
  .quick a:hover, .stat:hover{ transform:translate3d(0,-2px,0); box-shadow:0 8px 20px rgba(28,35,64,.10) }
  .table-card:hover{ transform:translate3d(0,-1.5px,0) }
  .table-card{ transition:transform .28s var(--mo-ease) }
}

/* 4.3 金色主按鈕掃光：改用 transform（原版動 left 會觸發佈局）
   節奏放慢到 5.4s，只在後段 40% 掃過，其餘時間靜止 —— 典禮場合的分寸 */
.tc-actions button.lead::after{
  left:0; width:52px;
  transform:translate3d(-96px,0,0) skewX(-24deg);
  animation:moShine 5.4s cubic-bezier(.45,0,.25,1) 1.2s infinite;
  will-change:transform;
}
#btnLookup, #btnCheckin{ position:relative; overflow:hidden }
#btnLookup::after, #btnCheckin::after{
  content:''; position:absolute; top:0; bottom:0; left:0; width:56px; pointer-events:none;
  background:linear-gradient(90deg,transparent,rgba(255,255,255,.48),transparent);
  transform:translate3d(-96px,0,0) skewX(-24deg);
  animation:moShine 5.4s cubic-bezier(.45,0,.25,1) 1.8s infinite;
  will-change:transform;
}
@keyframes moShine{
  0%,58%  { transform:translate3d(-96px,0,0) skewX(-24deg) }
  92%,100%{ transform:translate3d(560px,0,0) skewX(-24deg) }
}

/* 4.4 席位切換：金色指示線在選中 chip 下方平滑滑動 + 拉伸
   基準寬度 100px，JS 用 translateX(x) scaleX(w/100) 定位 —— 純 transform */
.table-switch{ position:relative }
.mo-ink{
  position:absolute; left:0; bottom:4px; width:100px; height:2px; border-radius:2px;
  background:linear-gradient(90deg,rgba(201,164,92,0),var(--gold-light,#e8cf9a) 26%,
             var(--gold,#c9a45c) 52%,rgba(201,164,92,0));
  transform-origin:left center; transform:translate3d(0,0,0) scaleX(0);
  opacity:0; pointer-events:none; z-index:0;
  transition:transform .36s var(--mo-ease), opacity .3s var(--mo-ease);
  will-change:transform;
}
.mo-ink.on{ opacity:1 }
/* chip 本身的深色藥丸改為漸變切換，與滑線同步 */
.ts-chip{ position:relative; z-index:1 }

/* 4.5 底部導航：切換時圖標輕微彈起（僅 scale，無位移） */
#tabbar a.on .ni{ animation:moTabPop .38s var(--mo-ease) both }
@keyframes moTabPop{
  0%{ transform:scale(.84) } 55%{ transform:scale(1.06) } 100%{ transform:scale(1) }
}
#tabbar a:active .ni{ transform:scale(.88); transition:transform .16s var(--mo-ease) }

/* 4.6 嘉賓行 / 里程碑：按壓時整行輕微內縮 */
.guest-row{ transition:transform .2s var(--mo-ease) }
.guest-row:active{ transform:scale(.99) }

/* -------------------------------------------------------------------------
   5) 氛圍：深色區塊的極緩光暈呼吸（22~26s 週期，幅度極小）
   .mo-aura 由 JS 注入到 .deco-host（appbar / table-card / about-hero）
   靠 z-index:-1 落在區塊背景之上、正文之下（.deco-host 已 isolation:isolate）
   ------------------------------------------------------------------------- */
.mo-aura{
  position:absolute; inset:-28%; z-index:-1; pointer-events:none;
  background:
    radial-gradient(42% 38% at 74% 10%, rgba(49,118,125,.55) 0%, transparent 70%),
    radial-gradient(38% 34% at 16% 90%, rgba(201,164,92,.20) 0%, transparent 72%);
  opacity:.45;
  animation:moAura 24s ease-in-out infinite;
  will-change:transform,opacity;
}
@keyframes moAura{
  0%,100%{ opacity:.40; transform:scale(1)     translate3d(0,0,0) }
  50%    { opacity:.70; transform:scale(1.055) translate3d(0,-1.4%,0) }
}
/* 頁頭的光暈更弱更慢，避免干擾標題 */
.appbar .mo-aura{ opacity:.3; animation-duration:30s }
@keyframes moAuraBar{
  0%,100%{ opacity:.26; transform:scale(1) }
  50%    { opacity:.46; transform:scale(1.04) }
}
.appbar .mo-aura{ animation-name:moAuraBar }

/* 綢帶層極緩流動，呼應海報的飄帶（只動 transform/opacity） */
.deco-host > .decor{
  animation:moRibbon 26s ease-in-out infinite;
  will-change:transform,opacity;
}
@keyframes moRibbon{
  0%,100%{ opacity:.9; transform:scale(1) }
  50%    { opacity:1;  transform:scale(1.035) }
}
.appbar .decor{ animation-duration:32s }

/* -------------------------------------------------------------------------
   6) 無障礙：prefers-reduced-motion —— 一切歸零，內容直接呈現最終態
   ------------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce){
  .page, .page.mo-in, .page.mo-out,
  .mo-item, .mo-item.mo-play,
  .seat-v em.mo-num, .seat-v em.mo-num::after,
  .tc-actions button.lead::after,
  #btnLookup::after, #btnCheckin::after,
  .mo-aura, .deco-host > .decor, #tabbar a.on .ni{
    animation:none !important;
  }
  .mo-item, .page, .seat-v em.mo-num{ opacity:1 !important; transform:none !important }
  .seat-v em.mo-num::after{ opacity:0 !important }
  .mo-ink{ transition:none !important }
  .tc-actions button.lead::after,
  #btnLookup::after, #btnCheckin::after{ opacity:0 !important }
  .mo-aura{ opacity:.4 !important }
}


/* ---- 全屏放大版：靜態最終狀態，不跑動畫 ----
   iOS Safari 會把帶 CSS 動畫的元素提升為合成層並柵格化，
   放大後桌號因此出現毛邊。全屏版只用於「看清楚」，
   改為直接呈現最終狀態即可保持純向量渲染。 */
.venue-map.vn-static .vn-fx{opacity:1;animation:none!important;transform:none!important;will-change:auto}
.venue-map.vn-static .vn-route{opacity:1!important;stroke-dashoffset:0!important}
.venue-map.vn-static .vn-walker,
.venue-map.vn-static .vn-walker-halo,
.venue-map.vn-static .vn-ripple{display:none}
.venue-map.vn-static .vn-star{opacity:.4}
.venue-map.vn-static .vn-breath{opacity:.85}

/* 上台嘉賓：典禮優先，晚宴席位作次要提示。 */
.stage-alert{
  display:none;margin:13px 0 0;padding:12px 14px;border-radius:14px;text-align:left;
  background:rgba(143,25,32,.18);border:1px solid rgba(232,207,154,.72);
  box-shadow:inset 0 0 24px rgba(207,28,35,.12),0 8px 22px rgba(0,0,0,.16);
}
.stage-alert.on{display:block}
.stage-alert.front-row{
  background:linear-gradient(135deg,rgba(21,69,82,.92),rgba(99,79,38,.45));
  border-color:rgba(245,220,165,.94);box-shadow:inset 0 0 26px rgba(232,207,154,.09),0 8px 24px rgba(0,0,0,.2);
}
.stage-alert.front-row .stage-alert-tag{background:#e4c77f;color:#23383b}
.stage-alert-head{display:flex;align-items:center;gap:8px;color:#fff2ca;font-size:13px;font-weight:800;letter-spacing:.08em}
.stage-alert-tag{padding:3px 8px;border-radius:999px;background:#b11f27;color:#fff;font-size:10.5px;letter-spacing:.12em}
.stage-alert-time{display:flex;align-items:baseline;gap:9px;margin-top:8px;color:#fff}
.stage-alert-time strong{font-family:'Noto Serif TC',serif;font-size:27px;line-height:1;color:#f3dba7}
.stage-alert-time span{font-size:16px;font-weight:800;letter-spacing:.05em}
.stage-alert-sub{margin-top:6px;color:rgba(255,242,202,.82);font-size:11.5px;line-height:1.65}
#btnCheckin.stage-confirm{letter-spacing:.08em}

.seat-item.stage-priority{
  border-color:rgba(245,213,151,.9);background:linear-gradient(135deg,rgba(177,31,39,.32),rgba(201,164,92,.16));
  box-shadow:inset 0 0 24px rgba(207,28,35,.08),0 0 0 1px rgba(245,213,151,.08);
}
.seat-item.front-row-priority{
  border-color:rgba(245,220,165,.92);background:linear-gradient(135deg,rgba(21,69,82,.92),rgba(123,94,38,.34));
  box-shadow:inset 0 0 26px rgba(232,207,154,.08),0 0 0 1px rgba(245,220,165,.08);
}
.front-row-priority .seat-ico{background:rgba(228,199,127,.2);color:#fff2ca}
.front-row-priority .seat-k{color:#f4dca5;font-weight:800}
.stage-priority .seat-ico{background:rgba(177,31,39,.38);color:#fff2ca}
.stage-priority .seat-k{color:#f4dca5;font-weight:800}
.stage-call{display:flex;align-items:baseline;gap:8px;margin-top:3px;color:#fff}
.stage-call strong{font-family:'Noto Serif TC',serif;font-size:28px;line-height:1;color:#f3dba7}
.stage-call span{font-size:17px;font-weight:800}
.stage-call-sub{margin-top:4px;color:rgba(255,242,202,.72);font-size:11.5px}
.seat-item.stage-dinner{background:rgba(255,255,255,.045);border-color:rgba(201,164,92,.3)}
.seat-item.stage-dinner.waiting .seat-v,.seat-item.stage-dinner.waiting .seat-v em{color:rgba(243,234,214,.76)}
.seat-item.stage-dinner.waiting .seat-go{opacity:.62;cursor:default;pointer-events:none}
.seat-phase-note{margin-top:4px;color:rgba(243,234,214,.58);font-size:10.8px;line-height:1.5}
.map-guidance{
  --guide-gold:#e7c979;
  position:relative;display:grid;grid-template-columns:minmax(0,1.5fr) minmax(118px,1fr);
  width:calc(100% - 8px);margin:0 4px 10px;overflow:hidden;border-radius:16px;
  border:1px solid rgba(232,207,154,.62);
  background:linear-gradient(145deg,rgba(19,61,68,.98),rgba(11,41,46,.98));
  box-shadow:0 8px 24px rgba(5,24,28,.22),inset 0 1px 0 rgba(255,242,202,.04);
}
.map-guidance.single{grid-template-columns:1fr}
.map-guidance::after{
  content:'';position:absolute;top:18px;bottom:18px;left:60%;width:1px;
  background:linear-gradient(180deg,transparent,rgba(232,207,154,.56) 18%,rgba(232,207,154,.56) 82%,transparent);
}
.map-guidance.single::after{display:none}
.map-guide-col{
  min-width:0;padding:16px 18px 17px;text-align:left;
  display:flex;flex-direction:column;align-items:flex-start;justify-content:flex-start;
}
.map-guide-col.secondary{padding-left:16px;padding-right:14px}
.map-guide-label{
  color:var(--guide-gold);font-size:11px;font-weight:800;line-height:1.35;
  letter-spacing:.14em;white-space:nowrap;
}
.map-guide-value{
  margin-top:8px;color:#f1d58e;font-family:'Noto Serif TC',serif;
  font-size:clamp(24px,7.2vw,34px);font-weight:900;line-height:1.12;letter-spacing:.03em;
  overflow-wrap:normal;word-break:keep-all;
}
.map-guide-value.compact{font-size:clamp(20px,5.8vw,28px);line-height:1.2}
.map-guide-value.no-wrap{white-space:nowrap}
.map-guide-value.seat-number{font-size:clamp(22px,6.8vw,31px);letter-spacing:0}
.map-guide-value.balanced{font-size:clamp(20px,5.7vw,27px);line-height:1.2}
.map-guide-value.balanced span{display:block;white-space:nowrap}
.map-guide-details{margin-top:9px;color:rgba(255,249,234,.9);font-size:11.3px;line-height:1.62;letter-spacing:.01em}
.map-guide-details span{display:block}
.map-guide-details span+span{margin-top:2px}
.map-guide-col.secondary .map-guide-details{color:rgba(255,249,234,.7)}
@media(max-width:365px){
  .map-guidance{grid-template-columns:minmax(0,1.45fr) minmax(105px,1fr)}
  .map-guidance::after{left:59%}
  .map-guide-col{padding:14px 14px 15px}
  .map-guide-col.secondary{padding-left:14px;padding-right:10px}
  .map-guide-value.seat-number{font-size:clamp(21px,6.7vw,24px)}
  .map-guide-value.balanced{font-size:19px}
  .map-guide-details{font-size:10.8px}
}
.map-guidance.flash{animation:mapGuidanceFlash 1.05s ease-out both}
@keyframes mapGuidanceFlash{
  0%,100%{border-color:rgba(232,207,154,.58);box-shadow:0 8px 22px rgba(7,25,27,.2),0 0 0 0 rgba(232,207,154,0)}
  38%{border-color:rgba(255,242,202,.96);box-shadow:0 8px 22px rgba(7,25,27,.2),0 0 0 4px rgba(232,207,154,.24),0 0 22px rgba(232,207,154,.26)}
}
@media (prefers-reduced-motion:reduce){.map-guidance.flash{animation:none}}
.preview-badge{
  display:none;position:fixed;z-index:10050;top:max(8px,env(safe-area-inset-top));left:50%;transform:translateX(-50%);
  padding:6px 12px;border-radius:999px;background:rgba(143,25,32,.94);border:1px solid rgba(255,242,202,.78);
  color:#fff2ca;font-size:11px;font-weight:800;letter-spacing:.08em;box-shadow:0 5px 18px rgba(0,0,0,.24);white-space:nowrap;
}
.preview-badge.on{display:block}
.venue-map.vn-play .vn-dual-secondary{animation:vnSecondaryIn .45s ease-out .45s both,vnSecondaryBreath 2.8s ease-in-out 1s infinite}
@keyframes vnSecondaryIn{from{opacity:0;transform:scale(.94)}to{opacity:.72;transform:scale(1)}}
@keyframes vnSecondaryBreath{0%,100%{opacity:.58}50%{opacity:.88}}
@media (prefers-reduced-motion:reduce){
  .venue-map .vn-dual-secondary{animation:none!important;opacity:.78!important;transform:none!important}
}

/* =========================================================================
   港省聯二十周年紅金主題
   原電子禮賓交互與金色路線保留，僅改品牌與視覺。
   ========================================================================= */
:root{
  --navy-950:#560307;--navy-900:#7d070c;--navy-880:#90080e;
  --navy-800:#a90d14;--navy-780:#b7131a;--navy-700:#c91a21;
  --navy-680:#d6282f;--navy-600:#df3a3f;--navy-560:#e64a4f;--navy-520:#eb5d61;
  --teal-sky:#d6282f;--ink:#3a0b0c;--paper:#fff8ef;--paper-2:#f8eadc;
  --gold:#d7ad55;--gold-light:#f1d493;--gold-deep:#a87920;--gold-pale:#fff0b8;--gold-glow:#ffe89b;
  --glass-bg:rgba(125,7,12,.70);--glass-bg-2:rgba(169,13,20,.72);
  --tx-2:rgba(255,247,225,.90);--tx-3:rgba(255,241,205,.68);--tx-4:rgba(255,241,205,.50);
}
html{
  background:linear-gradient(180deg,#b30d15 0%,#8e070d 55%,#5d0307 100%) fixed no-repeat,#79060b;
}
body::before{
  background:
    radial-gradient(80% 46% at 50% -8%,rgba(255,106,91,.38),transparent 72%),
    radial-gradient(65% 38% at 100% 24%,rgba(255,194,95,.15),transparent 74%),
    radial-gradient(62% 40% at 0% 76%,rgba(226,36,44,.28),transparent 76%),
    radial-gradient(circle at 16% 20%,rgba(255,232,155,.08) 0 1px,transparent 1.8px),
    radial-gradient(circle at 72% 48%,rgba(255,255,255,.055) 0 1px,transparent 1.7px);
  background-size:100% 100%,100% 100%,100% 100%,143px 191px,211px 163px;
}
#splash{
  background:#b20d15 url('assets/mobile-red-gold-bg.png') center bottom/cover no-repeat;
}
#splash::after{
  height:62%;
  background:linear-gradient(180deg,transparent,rgba(117,2,8,.08) 28%,rgba(83,1,6,.68) 100%);
}
.splash-brand{height:clamp(285px,42svh,365px);padding-top:clamp(30px,5svh,48px)}
.splash-brand-kicker{margin-top:18px;color:#ffe7a2;font-size:13px;text-shadow:0 2px 9px rgba(92,0,5,.72)}
.splash-brand h1{color:#fff0bd;text-shadow:0 3px 14px rgba(82,0,4,.78)}
.splash-panel{
  background:linear-gradient(165deg,rgba(150,8,15,.91),rgba(91,2,8,.89));
  border-color:rgba(255,224,148,.62);
  box-shadow:0 20px 52px rgba(75,0,5,.44),inset 0 1px 0 rgba(255,255,255,.12);
}
html body header.appbar{
  background:radial-gradient(120% 210% at 88% -70%,rgba(237,76,72,.55),transparent 62%),linear-gradient(180deg,#b3141b,#81070c);
}
html body .appbar .mini-emblem{width:82px;height:34px;object-fit:contain;object-position:left center}
html body #app .table-card,
html body #app .about-hero{
  background:radial-gradient(135% 90% at 86% -20%,#dc373c 0%,transparent 55%),radial-gradient(120% 78% at 8% 118%,#a50d14 0%,transparent 60%),linear-gradient(160deg,#b7131a,#72050a);
}
html body #app .notice{background:linear-gradient(135deg,rgba(171,16,23,.76),rgba(105,4,10,.70))!important}
html body nav#tabbar{background:linear-gradient(180deg,rgba(125,7,12,.88),rgba(84,2,7,.97))!important}
html body #mapFull{background:#74050a}
html body #ritual{background:radial-gradient(circle at 50% 40%,#cf2027 0%,#88070d 58%,#520207 100%)}
.rt-emblem{
  width:min(300px,78vw)!important;height:84px!important;border-radius:16px!important;
  background:rgba(255,255,255,.96)!important;padding:10px 14px!important;
}
.rt-emblem img{object-fit:contain;border-radius:0!important}
.venue-demo-note{
  margin:0 4px 10px;padding:7px 10px;border-radius:10px;background:rgba(255,240,184,.1);
  border:1px solid rgba(255,224,148,.24);color:rgba(255,241,205,.76);font-size:11px;text-align:center;letter-spacing:.04em;
}
.venue-map .vn-plan,#mapFull .vn-plan{
  filter:grayscale(.84) sepia(.24) saturate(.78) brightness(1.20) contrast(.84);
}
.heritage-strip{
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:10px;margin:14px 0;
  padding:17px 16px;border:1px solid rgba(255,224,148,.38);border-radius:16px;
  background:linear-gradient(135deg,rgba(190,19,27,.78),rgba(105,3,9,.82));box-shadow:0 9px 28px rgba(71,0,4,.26);
}
.heritage-year{display:flex;flex-direction:column;color:#fff5d0}.heritage-year.end{text-align:right}
.heritage-year b{font-family:'Noto Serif TC',serif;font-size:27px;color:#ffe49b;letter-spacing:.03em}
.heritage-year span{font-size:10.5px;color:rgba(255,242,207,.7);margin-top:2px}
.heritage-line{display:flex;align-items:center;gap:5px;color:#ffe49b;font-size:10px;font-style:normal;white-space:nowrap}
.heritage-line i{width:13px;height:1px;background:linear-gradient(90deg,transparent,#e9bd61)}
.heritage-line i:last-child{background:linear-gradient(90deg,#e9bd61,transparent)}
.heritage-line em{font-style:normal;font-weight:800}
.reach-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:4px 0 14px}
.reach-grid div{padding:13px 10px;border-radius:13px;background:rgba(255,240,184,.08);border:1px solid rgba(255,224,148,.2);text-align:center}
.reach-grid strong{display:block;color:#ffe49b;font-family:'Noto Serif TC',serif;font-size:30px;line-height:1}
.reach-grid span{display:block;color:rgba(255,246,220,.72);font-size:10.5px;margin-top:7px}
@media(max-height:700px){.splash-brand{height:250px}.splash-brand-kicker{margin-top:10px}}
@media(max-width:360px){.heritage-year b{font-size:24px}}

/* =========================================================================
   會徽與排版定稿：官方圖只取左側清晰圓形會徽，名稱與主題使用網頁文字。
   ========================================================================= */
.brand-emblem-crop{
  flex:none;overflow:hidden;border-radius:50%;background:#fff;
  border:1px solid rgba(255,230,164,.88);
  box-shadow:0 0 0 6px rgba(215,173,85,.13),0 10px 28px rgba(70,0,4,.32);
}
.brand-emblem-crop img{display:block;height:100%;width:auto;max-width:none}
.splash-emblem{width:78px;height:78px}
.splash-brand{height:clamp(272px,39svh,332px);padding-top:clamp(28px,4.8svh,44px)}
.splash-brand-kicker{margin-top:17px;font-size:12.5px;letter-spacing:.14em;text-indent:.14em}
.splash-brand h1{margin-top:8px;font-size:clamp(17px,4.8vw,21px);line-height:1.52;letter-spacing:.07em;text-indent:.07em}

html body .appbar .mini-emblem{width:34px;height:34px;object-fit:unset;object-position:unset;box-shadow:0 0 0 3px rgba(215,173,85,.12),0 5px 14px rgba(56,0,3,.25)}
.appbar .mini-emblem img{height:100%;width:auto;max-width:none}

.rt-emblem{
  width:132px!important;height:132px!important;border-radius:50%!important;padding:7px!important;
  background:rgba(255,255,255,.12)!important;
}
.rt-emblem .ritual-emblem{width:118px;height:118px;box-shadow:none}
.rt-emblem .ritual-emblem img{height:100%;width:auto;max-width:none;border-radius:0!important;object-fit:unset}

/* 主操作使用象牙白，避開大面積紅金撞色；金色只作邊線和信息層級。 */
#btnLookup,#btnCheckin,.tc-actions button.primary{
  background:linear-gradient(180deg,#fffaf1 0%,#f1e5cc 100%);
  color:#771118;border:1px solid rgba(255,235,184,.76);
  box-shadow:0 8px 22px rgba(64,0,4,.25),inset 0 1px 0 #fff;
}
#btnLookup::after,#btnCheckin::after,.tc-actions button.lead::after{display:none!important}
#btnLookup:focus-visible,#btnCheckin:focus-visible,.tc-actions button.primary:focus-visible{outline:3px solid rgba(255,246,216,.55);outline-offset:3px}
.phone-box input{background:rgba(75,0,5,.42);border-color:rgba(255,224,148,.42)}
.phone-box input:focus{background:rgba(69,0,5,.56);border-color:#f3dfaa;box-shadow:0 0 0 3px rgba(255,240,194,.13)}

@media(max-height:700px){
  .splash-brand{height:238px;padding-top:24px}
  .splash-emblem{width:64px;height:64px}
  .splash-brand-kicker{margin-top:12px;font-size:11.5px}
}
@media(max-width:350px){
  .splash-brand h1{font-size:16px}
  .splash-brand-kicker{font-size:11.5px;letter-spacing:.1em;text-indent:.1em}
}

/* =========================================================================
   舒適紅定稿：胭脂紅為主色，象牙白承接內容，香檳金只作邊線與路線。
   ========================================================================= */
:root{
  --navy-950:#5f2024;--navy-900:#73262b;--navy-800:#8b3338;--navy-700:#a5484b;
  --paper:#f5efe7;--paper-2:#ece2d7;--ink:#342b28;
  --gold:#c3a15c;--gold-light:#e5d09b;--gold-deep:#92732f;
  --tx-2:rgba(255,252,242,.94);--tx-3:rgba(255,249,232,.74);--tx-4:rgba(255,249,232,.56);
}
html{background:linear-gradient(180deg,#9c292e 0%,#7e2024 62%,#64171b 100%) fixed no-repeat,#7e2024}
body::before{
  background:
    radial-gradient(80% 46% at 50% -8%,rgba(231,143,128,.24),transparent 72%),
    radial-gradient(65% 38% at 100% 24%,rgba(231,199,127,.11),transparent 74%),
    radial-gradient(62% 40% at 0% 76%,rgba(128,42,45,.20),transparent 76%);
}
#splash::before{content:'';position:absolute;inset:0;z-index:0;background:rgba(91,31,29,.10);pointer-events:none}
#splash::after{background:linear-gradient(180deg,transparent,rgba(91,27,28,.06) 28%,rgba(77,20,23,.52) 100%)}
.splash-panel{
  background:linear-gradient(165deg,rgba(126,37,41,.88),rgba(91,25,29,.86));
  border-color:rgba(236,214,161,.55);box-shadow:0 18px 44px rgba(75,22,25,.30),inset 0 1px 0 rgba(255,255,255,.12)
}
.phone-box input{background:rgba(83,28,31,.44)}
.phone-box input:focus{background:rgba(76,25,28,.56)}

html body #app{background:linear-gradient(180deg,#f6f0e9,#eee5db)!important}
html body main{background:transparent}
html body header.appbar{
  background:radial-gradient(120% 210% at 88% -70%,rgba(210,103,99,.26),transparent 62%),linear-gradient(180deg,#9b2d32,#762025);
  box-shadow:0 2px 16px rgba(86,25,28,.26)
}

/* 淺色信息卡，減少整頁暗紅與玻璃效果。 */
html body #app .card,
html body #app .map-wrap,
html body #app .stat,
html body #app .quick a{
  background:rgba(255,253,249,.96)!important;color:#3f3530;
  border-color:rgba(151,112,56,.14)!important;
  box-shadow:0 6px 20px rgba(89,60,47,.09),inset 0 1px 0 #fff;
  -webkit-backdrop-filter:none;backdrop-filter:none
}
html body #app .card h3{color:#6f272a;text-shadow:none}
html body #app .card h3::before{background:linear-gradient(180deg,#b95455,#8b2c30);box-shadow:none}
html body #app .quick a,html body #app .quick .qt{color:#604446}
html body #app .quick .qi{background:#f3e7d3;border-color:rgba(157,119,57,.18);color:#8c692b}
html body #app .notice{
  background:#fff8eb!important;border-color:rgba(180,139,72,.24)!important;
  color:#624d37;box-shadow:0 5px 16px rgba(93,62,44,.07);-webkit-backdrop-filter:none;backdrop-filter:none
}
html body #app .notice p{color:#624d37}
html body #app .notice .dot{background:#ad4144}

/* 座位主卡採淺暖紅紙張感，與紅色品牌頭部同屬一套色彩。 */
html body #app .table-card{
  color:#4a302e;
  background:radial-gradient(120% 85% at 92% -12%,rgba(196,99,95,.20) 0%,transparent 56%),radial-gradient(100% 70% at 4% 112%,rgba(179,92,88,.12) 0%,transparent 62%),linear-gradient(150deg,#fff8f1,#f1d8cf);
  box-shadow:0 12px 30px rgba(100,53,43,.16),inset 0 1px 0 rgba(255,255,255,.82)
}
html body #app .table-card::after{border-color:rgba(169,104,78,.30)}
html body #app .seat-item{background:rgba(255,253,248,.64);border-color:rgba(165,105,84,.26);box-shadow:0 3px 12px rgba(111,64,51,.05)}
html body #app .seat-item.primary{background:linear-gradient(135deg,rgba(255,251,245,.92),rgba(237,206,195,.58));border-color:rgba(151,77,70,.40)}
html body #app .seat-ico{background:rgba(147,55,59,.10);color:#90383c}
html body #app .seat-k{color:#9a7168}
html body #app .seat-v,html body #app .tc-name{color:#742a2f}
html body #app .seat-v em{color:#8d3035}
html body #app .tc-role{color:#8d3035;border-color:rgba(143,57,61,.34);background:rgba(255,255,255,.36)}
html body #app .tc-meta,html body #app .tc-hello{color:#765a54}
html body #app .tc-meta .k{color:#a17c72}
html body #app .tc-divider{background:linear-gradient(90deg,transparent,rgba(148,73,67,.28),transparent)}
html body #app .seat-go{color:#8d3035;border-color:rgba(143,57,61,.38);background:rgba(255,252,246,.52)}
html body #app .table-card .tc-actions button.primary{background:linear-gradient(180deg,#9b4145,#7c292e);color:#fff8ed;border:1px solid rgba(112,34,39,.30);box-shadow:0 8px 20px rgba(112,40,42,.20),inset 0 1px 0 rgba(255,255,255,.18)}

.continue-checkin{background:#fffdf9;color:#6d3c3e;border-color:rgba(141,80,68,.20);box-shadow:0 5px 16px rgba(93,62,44,.07)}
.venue-demo-note{background:#f7efe3;border-color:rgba(156,115,54,.16);color:#7d6953}
html body #app .map-zoom{background:#fffaf2!important;color:#775d32!important;border-color:rgba(169,128,63,.25)!important;box-shadow:none;-webkit-backdrop-filter:none;backdrop-filter:none}

html body #app .about-hero{
  background:radial-gradient(120% 100% at 50% -20%,#bd6262 0%,transparent 62%),radial-gradient(100% 70% at 12% 116%,#92383d 0%,transparent 62%),linear-gradient(155deg,#a64b4f,#75262b)
}
html body #app .about-p,html body #app .ms-body,html body #app .agenda-meta,html body #app .tl-title{color:#5c504a}
html body #app .ms-year,html body #app .tl-time{color:#8b3034}
html body #app .stat .n{color:#7d3033}
html body #app .stat .n em{color:#987638}
html body #app .stat .k{color:#74655d}
html body #pg-about .card[style]{background:#fff8eb!important;border-color:rgba(180,139,72,.22)!important}
html body #app .card p.serif[style]{color:#7d3033!important}
.heritage-strip{background:linear-gradient(135deg,#a94448,#7d292d);border-color:rgba(229,208,156,.38);box-shadow:0 7px 20px rgba(91,38,39,.16)}

html body nav#tabbar{
  background:rgba(255,252,247,.94)!important;border-top-color:rgba(132,86,60,.14);
  box-shadow:0 -6px 20px rgba(83,53,42,.10);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)
}
html body nav#tabbar::before{background:linear-gradient(90deg,transparent,rgba(151,91,59,.22),transparent);opacity:1}
html body #tabbar a{color:#9b8176}
html body #tabbar a.on,html body #tabbar a.on .ni{color:#8d3034;filter:none}

html body #ritual{background:radial-gradient(circle at 50% 40%,#ad3c40 0%,#7d2429 60%,#59171b 100%)}

/* 路線信息卡使用深胭脂紅；香檳金只標示方向與目的地。 */
.map-guidance{
  --guide-gold:#ead39a;
  border-color:rgba(210,177,108,.46);
  background:linear-gradient(145deg,#8d373c,#642328);
  box-shadow:0 8px 22px rgba(95,39,38,.18),inset 0 1px 0 rgba(255,248,229,.08)
}
.map-guidance::after{background:linear-gradient(180deg,transparent,rgba(226,201,143,.50) 18%,rgba(226,201,143,.50) 82%,transparent)}
.map-guide-value{color:#f0d79d}
.map-guide-details{color:rgba(255,248,235,.88)}
.map-guide-col.secondary .map-guide-details{color:rgba(255,248,235,.68)}
.stage-alert.front-row,.seat-item.front-row-priority{background:linear-gradient(135deg,rgba(139,46,51,.94),rgba(102,35,39,.88));border-color:rgba(229,205,151,.72)}

/* =========================================================================
   終版視覺系統：所有頁面只使用同一組柔和胭脂紅、暖象牙白與香檳金。
   這一層是唯一的色彩決策入口，專門收口早期綠色／高飽和紅色草案。
   ========================================================================= */
:root{
  --brand-950:#5d2024;
  --brand-900:#6f272c;
  --brand-800:#843238;
  --brand-700:#984247;
  --brand-600:#ae5958;
  --brand-200:#ddbeb4;
  --brand-100:#efdcd5;
  --brand-050:#faf0ea;
  --canvas:#f3ede5;
  --surface:#fffdfa;
  --surface-warm:#faf3ec;
  --ink:#493b36;
  --muted:#806f67;
  --line:#e3d6cc;
  --gold:#b8954f;
  --gold-light:#e3cfa0;
  --gold-deep:#8d6d31;
  --gold-pale:#f5e8c6;
  --red:var(--brand-700);
  --paper:var(--canvas);
  --paper-2:#ebe2d8;
  --navy-950:var(--brand-950);
  --navy-900:var(--brand-900);
  --navy-800:var(--brand-800);
  --navy-700:var(--brand-700);
  --navy-600:var(--brand-600);
  --tx-2:rgba(255,253,247,.94);
  --tx-3:rgba(255,249,235,.76);
  --tx-4:rgba(255,249,235,.56);
  --ceremony-gradient:
    radial-gradient(115% 120% at 92% -25%,rgba(190,108,98,.45),transparent 58%),
    linear-gradient(145deg,var(--brand-700),var(--brand-900));
}

html{
  background:linear-gradient(180deg,var(--brand-800),var(--brand-950)) fixed no-repeat,var(--brand-900);
}
body{color:var(--ink)}
body::before{
  background:
    radial-gradient(82% 44% at 50% -8%,rgba(207,139,126,.24),transparent 72%),
    radial-gradient(64% 38% at 100% 25%,rgba(227,207,160,.10),transparent 74%),
    radial-gradient(62% 40% at 0% 76%,rgba(93,32,36,.18),transparent 76%);
}

/* 開屏、管理登入及簽到高光共用同一種深紅層次。 */
#splash::before{background:rgba(93,32,36,.08)}
#splash::after{background:linear-gradient(180deg,transparent,rgba(93,32,36,.08) 30%,rgba(74,22,27,.56) 100%)}
.splash-panel{
  background:linear-gradient(160deg,rgba(132,50,56,.90),rgba(93,32,36,.91));
  border-color:rgba(227,207,160,.58);
  box-shadow:0 18px 44px rgba(64,24,27,.30),inset 0 1px 0 rgba(255,255,255,.12);
}
.phone-box input{background:rgba(71,28,31,.42);border-color:rgba(227,207,160,.42)}
.phone-box input:focus{background:rgba(65,24,28,.54);border-color:var(--gold-light);box-shadow:0 0 0 3px rgba(227,207,160,.14)}
#btnLookup,#btnCheckin{
  background:linear-gradient(180deg,#fffdf7,#f2e7d2);
  color:var(--brand-900);border-color:rgba(227,207,160,.78);
}

/* 應用骨架。 */
html body #app{background:linear-gradient(180deg,#f7f2ec,var(--canvas))!important}
html body header.appbar{
  background:var(--ceremony-gradient);
  box-shadow:0 3px 16px rgba(72,31,33,.22);
}
html body .appbar .t1{color:#fffdf8}
html body .appbar .t2{color:rgba(255,249,235,.74)}
.appbar-gold-edge{background:linear-gradient(90deg,transparent,rgba(227,207,160,.32),var(--gold-light),rgba(227,207,160,.32),transparent)}

/* 全站白卡：同一白、同一邊框、同一陰影。 */
html body #app .card,
html body #app .map-wrap,
html body #app .stat,
html body #app .quick a,
html body #app .sheet,
html body #app .ts-chip,
html body #app .door-pick button{
  background:var(--surface)!important;
  color:var(--ink);
  border-color:var(--line)!important;
  box-shadow:0 7px 20px rgba(86,61,50,.08),inset 0 1px 0 #fff;
  -webkit-backdrop-filter:none;backdrop-filter:none;
}
html body #app .card h3{color:var(--brand-900);text-shadow:none}
html body #app .card h3::before{
  background:linear-gradient(180deg,var(--brand-600),var(--brand-800));
  box-shadow:none;
}
html body #app .about-p,
html body #app .ms-body,
html body #app .tl-title,
html body #app .g-title,
html body #app .table-head-note{color:var(--muted)}

/* 桌位卡以暖象牙紙為主，紅色只承擔姓名、狀態與主操作。 */
html body #app .table-card{
  color:var(--ink);
  background:
    radial-gradient(120% 88% at 92% -12%,rgba(174,89,88,.15),transparent 56%),
    linear-gradient(150deg,var(--surface),var(--brand-050));
  border:1px solid rgba(132,50,56,.12);
  box-shadow:0 12px 30px rgba(91,57,49,.13),inset 0 1px 0 rgba(255,255,255,.92);
}
html body #app .table-card::after{border-color:rgba(184,149,79,.40)}
html body #app .table-card .decor{opacity:.38}
html body #app .tc-name,
html body #app .seat-v,
html body #app .g-name{color:var(--brand-900)}
html body #app .tc-hello,
html body #app .tc-meta{color:#735f58}
html body #app .tc-meta .k,
html body #app .seat-k{color:#9a776e}
html body #app .tc-role{
  color:var(--brand-800);background:rgba(255,255,255,.48);
  border-color:rgba(132,50,56,.30);
}
html body #app .seat-item{
  background:rgba(255,253,250,.76);
  border-color:rgba(132,50,56,.18);
  box-shadow:0 3px 12px rgba(91,57,49,.05);
}
html body #app .seat-item.primary{
  background:linear-gradient(135deg,var(--surface),var(--brand-100));
  border-color:rgba(132,50,56,.30);
}
html body #app .seat-ico{background:rgba(132,50,56,.10);color:var(--brand-800)}
html body #app .seat-v em{color:var(--brand-800)}
html body #app .seat-go{
  color:var(--brand-800);background:var(--surface);
  border-color:rgba(132,50,56,.30);
}
html body #app .tc-divider{background:linear-gradient(90deg,transparent,rgba(132,50,56,.24),transparent)}
html body #app .table-card .tc-actions button.primary{
  background:linear-gradient(180deg,var(--brand-700),var(--brand-900));
  color:#fffaf1;border:1px solid rgba(93,32,36,.22);
  box-shadow:0 8px 20px rgba(93,32,36,.20),inset 0 1px 0 rgba(255,255,255,.16);
}

/* 所有重要提醒共用紅底；普通提醒共用暖白底。 */
html body #app .notice{
  background:var(--surface-warm)!important;
  border-color:var(--line)!important;
  box-shadow:0 5px 16px rgba(86,61,50,.06);
}
html body #app .notice p{color:#66544c}
html body #app .notice .dot{background:var(--brand-700)}
.continue-checkin{
  background:var(--surface);color:var(--brand-900);
  border-color:var(--line);box-shadow:0 5px 16px rgba(86,61,50,.07);
}
.stage-alert,.stage-alert.front-row,
html body #app .seat-item.stage-priority,
html body #app .seat-item.front-row-priority{
  background:var(--ceremony-gradient);
  border-color:rgba(227,207,160,.62);
}
.stage-alert.front-row .stage-alert-tag{background:var(--gold-light);color:var(--brand-950)}
.seat-item.stage-dinner{background:rgba(255,253,250,.62)!important;border-color:rgba(132,50,56,.16)!important}

/* 快捷入口：大面積、統一比例的紅色印章式圖標。 */
.quick{gap:12px}
html body #app .quick a{
  min-height:112px;padding:15px 6px 13px;border-radius:16px;
  display:flex;flex-direction:column;align-items:center;justify-content:center;
  color:var(--ink);
}
html body #app .quick .qi{
  width:46px;height:46px;margin:0 auto 9px;border-radius:14px;
  background:linear-gradient(145deg,var(--brand-600),var(--brand-800));
  border:1px solid rgba(93,32,36,.12);
  color:#fffaf2;box-shadow:0 7px 15px rgba(93,32,36,.18),inset 0 1px 0 rgba(255,255,255,.18);
}
html body #app .quick .qi svg{width:24px;height:24px;stroke-width:2.05}
html body #app .quick .qt{color:#5f4846;font-size:12.5px;font-weight:650;letter-spacing:.035em}

/* 活動流程：同一金線，當前節點紅心，其餘節點白心；不再出現青綠圓點。 */
html body #app .agenda-meta{
  color:var(--muted);background:var(--surface-warm);
  border:1px solid var(--line);
}
html body #app .agenda-meta b{color:var(--brand-900)}
html body #app .tl::before{background:linear-gradient(180deg,var(--gold),rgba(184,149,79,.18))}
html body #app .tl-item::before{
  background:var(--surface);border-color:var(--gold);
  box-shadow:0 0 0 4px rgba(184,149,79,.12);
}
html body #app .tl-item.now::before{
  background:var(--brand-700);border-color:var(--gold-light);
  box-shadow:0 0 0 4px rgba(184,149,79,.16),0 0 0 7px rgba(152,66,71,.08);
}
html body #app .tl-time{color:var(--brand-700)}
html body #app .tl-title{color:#5a4943}
html body #app .tl-desc{color:var(--muted)}
html body #app .tl-tag{
  color:var(--brand-800);background:var(--brand-050);
  border-color:rgba(132,50,56,.24);
}

/* 會場圖與路線。地圖本身保持清晰，信息卡與頁頭使用同一深紅。 */
.venue-demo-note{background:var(--surface-warm);border-color:var(--line);color:var(--muted)}
html body #app .map-zoom{
  background:var(--brand-050)!important;color:var(--brand-800)!important;
  border-color:rgba(132,50,56,.18)!important;box-shadow:none;
  -webkit-backdrop-filter:none;backdrop-filter:none;
}
.map-guidance{
  --guide-gold:var(--gold-light);
  background:var(--ceremony-gradient);
  border-color:rgba(227,207,160,.52);
  box-shadow:0 8px 22px rgba(93,32,36,.18),inset 0 1px 0 rgba(255,255,255,.08);
}
.map-route-hint{background:rgba(255,253,247,.10);color:var(--gold-light)}
.map-secondary-hint{background:var(--gold-light);color:var(--brand-950);border-color:var(--gold-pale)}
.map-guide-value{color:var(--gold-light)}
.map-guide-details{color:rgba(255,250,239,.90)}
.map-guide-col.secondary .map-guide-details{color:rgba(255,250,239,.72)}
.map-guidance::after{background:linear-gradient(180deg,transparent,rgba(227,207,160,.48) 18%,rgba(227,207,160,.48) 82%,transparent)}
#mapFull{background:var(--brand-950)}
#mapFull .mf-close{background:rgba(48,17,19,.68);border-color:rgba(227,207,160,.56);color:var(--gold-light)}

/* 聯會介紹：頁頭、二十年帶與路線卡共用完全相同的深紅層次。 */
html body #app .about-hero,
.heritage-strip{background:var(--ceremony-gradient)}
html body #app .about-hero{box-shadow:0 9px 24px rgba(93,32,36,.17),inset 0 1px 0 rgba(255,255,255,.08)}
html body #app .about-hero .ah1{color:#fffdf8}
html body #app .about-hero .ah2{color:var(--gold-light)}
html body #app .mission span{color:var(--gold-light);border-color:rgba(227,207,160,.54)}
html body #app .stat .n{color:var(--brand-800)}
html body #app .stat .n em{color:var(--gold-deep)}
html body #app .stat .k{color:var(--muted)}
.heritage-strip{border-color:rgba(227,207,160,.48);box-shadow:0 8px 22px rgba(93,32,36,.16)}
.heritage-year b,.heritage-line{color:var(--gold-light)}
.heritage-year span{color:rgba(255,249,235,.72)}
.heritage-line i{background:linear-gradient(90deg,transparent,var(--gold))}
.heritage-line i:last-child{background:linear-gradient(90deg,var(--gold),transparent)}
.reach-grid div{background:var(--surface-warm);border-color:var(--line)}
.reach-grid strong{color:var(--brand-800)}
.reach-grid span{color:var(--muted)}
.milestone{border-bottom-color:var(--line)}
html body #app .ms-year{color:var(--brand-700)}
html body #pg-about .about-closing{background:var(--brand-050)!important;border-color:var(--brand-100)!important}
html body #pg-about .about-closing p{color:var(--brand-800)!important;font-size:14px;font-weight:700}

/* 名單、分組與底部導航沿用同一套文字和選中邏輯。 */
html body #app .ts-chip{color:var(--muted)}
html body #app .ts-chip.on,
html body #app .door-pick button.on{
  background:var(--brand-800)!important;color:#fffaf2!important;
  border-color:var(--brand-800)!important;box-shadow:none;
}
html body #app .g-name{color:var(--brand-900)}
html body #app .g-bio{background:var(--surface-warm);color:var(--muted)}
html body #app .g-badge{color:var(--gold-deep);background:#fbf3df;border-color:rgba(184,149,79,.36)}
html body nav#tabbar{
  background:rgba(255,253,250,.96)!important;
  border-top-color:var(--line);box-shadow:0 -6px 20px rgba(86,61,50,.09);
}
html body nav#tabbar::before{background:linear-gradient(90deg,transparent,rgba(132,50,56,.18),transparent)}
html body #tabbar a{color:#9b847b}
html body #tabbar a.on,
html body #tabbar a.on .ni{color:var(--brand-800);filter:none}

/* 動態裝飾不能再把青色帶回畫面。 */
.mo-aura{
  background:
    radial-gradient(42% 38% at 74% 10%,rgba(174,89,88,.34),transparent 70%),
    radial-gradient(38% 34% at 16% 90%,rgba(184,149,79,.16),transparent 72%);
}
html body #ritual{background:radial-gradient(circle at 50% 40%,var(--brand-700),var(--brand-900) 60%,var(--brand-950) 100%)}

@media(max-width:350px){
  .quick{gap:8px}
  html body #app .quick a{min-height:104px;padding-left:3px;padding-right:3px}
  html body #app .quick .qi{width:42px;height:42px}
  html body #app .quick .qt{font-size:11.5px}
}

/* =========================================================================
   官方會徽與臨時會場示意：不再裁切橫版 Logo，不再沿用其他活動座次圖。
   ========================================================================= */
.brand-emblem-crop{
  display:grid;place-items:center;overflow:visible;background:transparent;border:0;
  box-shadow:none;filter:drop-shadow(0 7px 12px rgba(71,19,21,.22));
}
.brand-emblem-crop img{
  display:block;width:100%;height:100%;max-width:100%;object-fit:contain;object-position:center;
}
.splash-emblem{width:88px;height:88px}
html body .appbar .mini-emblem{width:42px;height:42px;box-shadow:none;filter:drop-shadow(0 4px 7px rgba(44,12,14,.24))}
.appbar .mini-emblem img{width:100%;height:100%;max-width:100%;object-fit:contain}
.rt-emblem .ritual-emblem{width:118px;height:118px;filter:drop-shadow(0 7px 14px rgba(51,8,11,.22))}
.rt-emblem .ritual-emblem img{width:100%;height:100%;max-width:100%;object-fit:contain}

.map-intro{padding:4px 4px 14px}
.map-kicker{
  color:var(--brand-700);font-size:10.5px;font-weight:800;letter-spacing:.24em;text-indent:.24em;
}
.map-intro h2{
  margin-top:5px;color:var(--ink);font-family:'Noto Serif TC',serif;font-size:23px;line-height:1.35;
  letter-spacing:.035em;
}
.map-intro p{margin-top:7px;color:var(--muted);font-size:12.5px;line-height:1.72}
html body #app .map-wrap{padding:10px 10px 14px;border-radius:22px}
.venue-map .vn-plan,#mapFull .vn-plan{filter:none!important}
#pg-map svg#venue{
  overflow:hidden;border-radius:16px;background:#075257;
  border:1px solid rgba(132,50,56,.12);box-shadow:0 9px 24px rgba(89,60,47,.13);
}
#pg-map .map-guidance{margin:12px 4px 0;border-radius:16px}
.plan-pending-note{
  display:flex;align-items:flex-start;gap:10px;margin:11px 5px 0;padding:11px 12px;border-radius:14px;
  background:var(--surface-warm);border:1px solid var(--line);color:var(--muted);
}
.plan-pending-note>span{
  flex:none;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;margin-top:1px;
  background:var(--brand-100);color:var(--brand-800);font-family:Georgia,serif;font-size:13px;font-weight:700;
}
.plan-pending-note p{font-size:11.5px;line-height:1.58}
.plan-pending-note b{color:#604c47;font-size:12px}
html body #app .map-zoom{margin:11px 5px 0;width:calc(100% - 10px);border-radius:13px;padding:12px 0}

#mapFull{
  background:radial-gradient(100% 70% at 50% 20%,#733036 0%,#351719 66%,#211012 100%);
}
#mapFull .rot{padding:64px 14px 92px}
#mapFull .rot svg{border-radius:16px;box-shadow:0 24px 70px rgba(12,3,4,.48)}
#mapFull .mf-caption{
  position:absolute;z-index:2;left:20px;right:20px;bottom:calc(22px + var(--safe-b));text-align:center;color:#fffaf1;
}
#mapFull .mf-caption b{display:block;font-family:'Noto Serif TC',serif;font-size:15px;letter-spacing:.12em}
#mapFull .mf-caption span{display:block;margin-top:4px;color:rgba(255,248,232,.66);font-size:11px;letter-spacing:.04em}

@media(max-height:700px){
  .splash-emblem{width:70px;height:70px}
  #mapFull .rot{padding-top:54px;padding-bottom:76px}
}
