@font-face{font-family:"Noto Sans TC Local";src:url("fonts/noto-sans-tc-chinese-traditional-400-normal.7883616c5dee.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Noto Sans TC Local";src:url("fonts/noto-sans-tc-chinese-traditional-700-normal.db3b00e9125d.woff2") format("woff2");font-weight:700;font-display:swap}
@font-face{font-family:"Noto Serif TC Local";src:url("fonts/noto-serif-tc-chinese-traditional-400-normal.5e7ee7eb40e6.woff2") format("woff2");font-weight:400;font-display:swap}
@font-face{font-family:"Noto Serif TC Local";src:url("fonts/noto-serif-tc-chinese-traditional-700-normal.a5e10c9cfe61.woff2") format("woff2");font-weight:700;font-display:swap}

:root{
  --ink:#101211;
  --ink-deep:#080a09;
  --gold:#cba471;
  --gold-deep:#a8814f;
  --cream:#f6f2ea;
  --cream-ink:#241f18;
  --sans:"Noto Sans TC Local","Noto Sans TC",system-ui,sans-serif;
  --serif:"Noto Serif TC Local","Noto Serif TC",serif;
  --mono:ui-monospace,SFMono-Regular,Menlo,monospace;
  --rail-gap:clamp(4.6rem,9vh,5.6rem);
}

*{box-sizing:border-box}
html,body{height:100%}
body.hall-tour-page{margin:0;overflow:hidden;background:var(--ink);color:#fff;font-family:var(--sans);-webkit-font-smoothing:antialiased}
button,a{font:inherit;-webkit-tap-highlight-color:transparent}
button:focus-visible,a:focus-visible,#tour-viewer:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
.skip-link{position:fixed;top:.5rem;left:.5rem;z-index:10000;padding:.7rem 1rem;background:var(--cream);color:var(--cream-ink);text-decoration:none;transform:translateY(-160%)}
.skip-link:focus{transform:none}
.tour-kicker{margin:0;color:var(--gold);font:400 .62rem/1 var(--mono);letter-spacing:.28em}

/* ---------- stage ---------- */
.tour-shell{position:relative;height:100dvh;width:100%;overflow:hidden;background:var(--ink)}
.tour-stage{position:absolute;inset:0}
.tour-viewer{position:absolute;inset:0;z-index:1;background:var(--ink)}
.tour-viewer:fullscreen,.tour-viewer:-webkit-full-screen{overflow:visible!important}
.stage-veil{position:absolute;inset:0;z-index:2;pointer-events:none;background:
  radial-gradient(68% 56% at 4% 88%,rgba(8,10,9,.84) 0,rgba(8,10,9,.46) 46%,rgba(8,10,9,0) 78%),
  linear-gradient(0deg,rgba(8,10,9,.5) 0,rgba(8,10,9,.12) 16%,rgba(8,10,9,0) 30%),
  linear-gradient(180deg,rgba(8,10,9,.46) 0,rgba(8,10,9,.1) 12%,rgba(8,10,9,0) 24%),
  radial-gradient(118% 92% at 50% 38%,rgba(0,0,0,0) 34%,rgba(8,10,9,.72) 100%)}
.tour-viewer .pnlm-load-button{border:1px solid rgba(255,255,255,.65);background:rgba(16,18,17,.82)}
.tour-viewer .pnlm-about-msg,.tour-viewer .pnlm-panorama-info{display:none!important}

.viewer-loading,.viewer-error{position:absolute;inset:0;z-index:9;display:grid;place-content:center;justify-items:center;gap:.4rem;padding:2rem;background:var(--ink);color:#fff;text-align:center}
.viewer-loading[hidden],.viewer-error[hidden]{display:none}
.loading-mark{width:40px;height:40px;border:1px solid rgba(255,255,255,.22);border-top-color:var(--gold);border-radius:50%;animation:spin .9s linear infinite}
.viewer-loading p{margin:1.1rem 0 0;font-size:.78rem;letter-spacing:.16em;color:rgba(255,255,255,.72)}
@keyframes spin{to{transform:rotate(360deg)}}
.viewer-error h2{margin:.7rem 0 .6rem;font-family:var(--serif);font-size:clamp(1.4rem,3vw,1.9rem);font-weight:700;letter-spacing:.04em}
.viewer-error p:not(.tour-kicker){max-width:32rem;margin:0 0 1.6rem;color:rgba(255,255,255,.76);font-size:.85rem;line-height:1.9}

/* ---------- buttons ---------- */
.solid-button,.line-button{display:inline-flex;align-items:center;justify-content:center;gap:.55rem;min-height:44px;padding:.75rem 1.3rem;border:1px solid transparent;font-size:.8rem;letter-spacing:.12em;text-decoration:none;cursor:pointer;transition:background-color .22s ease,color .22s ease,border-color .22s ease}
.solid-button{background:var(--cream);color:var(--cream-ink);font-weight:700}
.solid-button:hover{background:#fff}
.line-button{background:transparent;border-color:rgba(255,255,255,.42);color:#fff}
.line-button:hover{background:var(--cream);border-color:var(--cream);color:var(--cream-ink)}
.button-arrow{transition:transform .22s ease}
.solid-button:hover .button-arrow{transform:translateX(3px)}

/* ---------- top bar ---------- */
.hud-top{position:absolute;top:0;left:0;right:0;z-index:6;display:flex;align-items:center;justify-content:space-between;gap:1rem;min-height:clamp(58px,8vh,76px);padding:0 clamp(1rem,3vw,2rem);background:linear-gradient(180deg,rgba(8,10,9,.7),rgba(8,10,9,.18) 68%,rgba(8,10,9,0))}
.hud-brand{display:flex;align-items:center;gap:.9rem;min-width:0;text-shadow:0 1px 12px rgba(8,10,9,.6)}
.brand-mark{flex:none;width:34px;height:34px;display:grid;place-items:center;text-decoration:none;transition:opacity .22s ease}
.brand-mark img{display:block;width:100%;height:100%;object-fit:contain}
.brand-mark:hover{opacity:.82}
.hud-title{margin:0;font-size:clamp(.86rem,1.35vw,1.05rem);font-weight:700;letter-spacing:.16em;color:#fff;white-space:nowrap}
.hud-tag{margin:0;flex:none;padding:.22rem .5rem;border:1px solid rgba(203,164,113,.6);color:var(--gold);font-size:.6rem;letter-spacing:.18em;white-space:nowrap}
.hud-tag[hidden]{display:none}
.hud-nav{display:flex;align-items:center;gap:clamp(.9rem,1.8vw,1.7rem);text-shadow:0 1px 12px rgba(8,10,9,.6)}
.hud-link{display:inline-flex;align-items:center;min-height:44px;padding:0;border:0;background:transparent;color:rgba(255,255,255,.74);font-size:.76rem;letter-spacing:.18em;text-decoration:none;cursor:pointer;white-space:nowrap;transition:color .22s ease}
.hud-link:hover{color:#fff}
.hud-cta{display:inline-flex;align-items:center;min-height:44px;padding:.7rem 1.15rem;border:1px solid rgba(255,255,255,.42);color:#fff;font-size:.76rem;letter-spacing:.14em;text-decoration:none;white-space:nowrap;transition:background-color .22s ease,color .22s ease,border-color .22s ease}
.hud-cta:hover{background:var(--cream);border-color:var(--cream);color:var(--cream-ink)}
.cta-short{display:none}

/* ---------- narrative ---------- */
.hud-narrative{position:absolute;z-index:5;left:clamp(1rem,4vw,3.25rem);bottom:calc(var(--rail-gap) + clamp(1rem,2.5vh,2.2rem));width:min(28rem,calc(100% - 2rem));color:#fff;text-shadow:0 1px 18px rgba(8,10,9,.45)}
.narrative-kicker{display:flex;align-items:center;flex-wrap:wrap;gap:.8rem;margin:0 0 .95rem;font:400 .63rem/1 var(--mono);letter-spacing:.26em;color:var(--gold)}
.kicker-rule{width:44px;height:1px;background:var(--gold-deep)}
.kicker-place{font-family:var(--sans);letter-spacing:.18em;color:rgba(255,255,255,.66)}
.kicker-place:empty{display:none}
.narrative-title{margin:0;font-family:var(--serif);font-weight:700;font-size:clamp(1.65rem,4vw,2.85rem);line-height:1.2;letter-spacing:.04em;text-wrap:pretty}
.narrative-text{margin:1rem 0 0;max-width:26rem;font-size:.84rem;line-height:2.05;color:rgba(255,255,255,.85);text-wrap:pretty}
.narrative-text:empty{display:none}
.narrative-actions{display:flex;flex-wrap:wrap;gap:.65rem;margin-top:1.6rem}

/* ---------- tool rail ---------- */
.tool-rail{position:absolute;z-index:5;right:clamp(.75rem,2.5vw,2rem);bottom:calc(var(--rail-gap) + clamp(1rem,2.5vh,2.2rem));display:flex;flex-direction:column;align-items:flex-end;gap:.5rem}
.tool-rail button{box-sizing:border-box;width:40px;height:40px;display:grid;place-items:center;min-width:0;min-height:0;padding:0;border:1px solid rgba(255,255,255,.3);border-radius:50%;background:rgba(16,18,17,.45);-webkit-appearance:none;appearance:none;line-height:0;backdrop-filter:blur(8px);color:#fff;cursor:pointer;transition:background-color .2s ease,border-color .2s ease,transform .2s ease}
.tool-rail button:hover{background:rgba(138,106,69,.92);border-color:transparent;transform:translateY(-1px)}
.tool-rail svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.tool-rail.is-fullscreen{position:fixed;z-index:20;right:clamp(.75rem,2.5vw,2rem);bottom:1.5rem}
.tool-rail.is-fullscreen button{box-sizing:border-box}
.control-pad{display:grid;grid-template-columns:repeat(3,40px);gap:.3rem;margin-bottom:.35rem}
.control-pad button:nth-child(1){grid-area:1/2}
.control-pad button:nth-child(2){grid-area:2/1}
.control-pad button:nth-child(3){grid-area:2/3}
.control-pad button:nth-child(4){grid-area:3/2}
#autorotate-button[aria-pressed="true"]{background:var(--gold-deep);border-color:transparent}
#autorotate-button[aria-pressed="true"] svg circle:first-child{animation:spin 6s linear infinite;transform-origin:50% 50%}

/* ---------- bottom chapter rail ---------- */
.hud-bottom{position:absolute;z-index:5;left:0;right:0;bottom:0;min-height:var(--rail-gap);display:flex;align-items:center;justify-content:space-between;gap:1.2rem;padding:0 clamp(1rem,3vw,2rem);background:linear-gradient(0deg,rgba(8,10,9,.8),rgba(8,10,9,.24) 62%,rgba(8,10,9,0))}
.chapter-rail{display:flex;align-items:center;gap:clamp(.9rem,2.4vw,1.7rem);min-width:0;overflow-x:auto;scrollbar-width:none}
.chapter-rail::-webkit-scrollbar{display:none}
.chapter-button{display:inline-flex;align-items:center;gap:.65rem;flex:none;min-height:44px;padding:0;border:0;background:transparent;color:rgba(255,255,255,.7);font-size:.76rem;letter-spacing:.14em;white-space:nowrap;cursor:pointer;transition:color .22s ease}
.chapter-button .chapter-rule{width:26px;height:1px;background:rgba(255,255,255,.4);transition:background-color .22s ease,width .22s ease}
.chapter-button:hover{color:#fff}
.chapter-button:hover .chapter-rule{background:rgba(255,255,255,.75)}
.chapter-button[aria-current="true"]{color:#fff}
.chapter-button[aria-current="true"] .chapter-rule{width:34px;background:var(--gold)}
.chapter-index{font-family:var(--mono);font-size:.68rem;letter-spacing:.1em;color:inherit;opacity:.8}
.drag-hint{flex:none;margin:0;font-size:.66rem;letter-spacing:.14em;color:rgba(255,255,255,.5);white-space:nowrap}

/* ---------- intro layer ---------- */
.intro-layer{position:absolute;inset:0;z-index:8;display:grid;place-items:center;padding:1.5rem;background:radial-gradient(120% 85% at 50% 45%,rgba(8,10,9,.58) 0,rgba(8,10,9,.86) 100%);animation:fade-in .5s ease both}
.intro-layer[hidden]{display:none}
.intro-card{display:flex;flex-direction:column;align-items:center;gap:1.05rem;text-align:center;max-width:22rem;text-shadow:0 1px 14px rgba(8,10,9,.7)}
.intro-mark{width:76px;height:76px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.5);border-radius:50%;color:#fff}
.intro-lead{margin:0;font-size:.88rem;letter-spacing:.16em;color:rgba(255,255,255,.94)}
.intro-sub{margin:0;font-size:.76rem;line-height:1.9;letter-spacing:.06em;color:rgba(255,255,255,.64)}
.intro-card .line-button{margin-top:.4rem;letter-spacing:.18em}
@keyframes fade-in{from{opacity:0}to{opacity:1}}

/* ---------- sheets (scene index / help) ---------- */
.sheet{position:fixed;inset:0;z-index:9999;padding:clamp(1.2rem,4vw,2.8rem);background:rgba(10,12,11,.95);backdrop-filter:blur(14px);overflow:auto;animation:fade-in .28s ease both}
.sheet[hidden]{display:none}
.scene-index{display:grid;grid-template-rows:auto 1fr auto;gap:clamp(1.1rem,3vw,1.9rem);align-content:start}
.sheet-head{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}
.sheet-head h2{margin:.5rem 0 0;font-family:var(--serif);font-weight:700;font-size:clamp(1.5rem,3.4vw,2.1rem);letter-spacing:.06em;color:#fff}
.sheet-sub{margin:.5rem 0 0;font-size:.76rem;line-height:1.8;color:rgba(255,255,255,.6)}
.sheet-close{flex:none;width:44px;height:44px;display:grid;place-items:center;border:1px solid rgba(255,255,255,.28);border-radius:50%;background:transparent;color:#fff;font-size:1.5rem;line-height:1;cursor:pointer;transition:background-color .2s ease,color .2s ease}
.sheet-close:hover{background:var(--cream);border-color:var(--cream);color:var(--cream-ink)}
.sheet-foot{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:.8rem;padding-top:1.1rem;border-top:1px solid rgba(255,255,255,.16);font-size:.74rem;line-height:1.85;color:rgba(255,255,255,.6)}
.sheet-foot p{margin:0}
.sheet-foot a{color:var(--gold);text-decoration:none;letter-spacing:.1em}
.sheet-foot a:hover{color:#fff}

.scene-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(15rem,1fr));gap:clamp(.9rem,2.2vw,1.5rem);align-content:start}
.scene-button{display:block;padding:0;border:0;background:transparent;color:#fff;text-align:left;cursor:pointer}
.scene-preview{position:relative;display:block;aspect-ratio:16/10;overflow:hidden;background:#1d1f1c}
.scene-preview img{width:100%;height:100%;display:block;object-fit:cover;transition:transform .55s ease,opacity .3s ease}
.scene-button:hover .scene-preview img{transform:scale(1.045)}
.scene-preview::after{content:"";position:absolute;inset:0;border:1px solid rgba(255,255,255,.14);transition:border-color .22s ease}
.scene-button:hover .scene-preview::after{border-color:rgba(255,255,255,.4)}
.scene-button[aria-current="true"] .scene-preview::after{border:1px solid var(--gold)}
.scene-index-num{position:absolute;left:.7rem;top:.6rem;font-family:var(--mono);font-size:.66rem;letter-spacing:.14em;color:#fff;text-shadow:0 1px 6px rgba(0,0,0,.6)}
.scene-current-tag{position:absolute;right:.6rem;bottom:.6rem;padding:.2rem .5rem;background:var(--gold);color:var(--cream-ink);font-size:.6rem;font-weight:700;letter-spacing:.14em}
.scene-button:not([aria-current="true"]) .scene-current-tag{display:none}
.scene-copy strong{display:block;margin-top:.8rem;font-family:var(--serif);font-weight:700;font-size:.98rem;letter-spacing:.04em}
.scene-copy small{display:block;margin-top:.35rem;font-size:.73rem;line-height:1.8;color:rgba(255,255,255,.62)}
.scene-copy small:empty{display:none}

.help-panel{display:grid;place-items:center}
.help-card{position:relative;width:min(100%,38rem);padding:clamp(1.6rem,4vw,2.6rem);background:var(--cream);color:var(--cream-ink)}
.help-card .tour-kicker{color:var(--gold-deep)}
.help-card h2{margin:.5rem 0 1.3rem;font-family:var(--serif);font-weight:700;font-size:clamp(1.45rem,3.4vw,1.9rem);letter-spacing:.05em}
.help-card ul{margin:0;padding-left:1.1rem}
.help-card li{margin:.8rem 0;font-size:.85rem;line-height:1.95}
.help-card li::marker{color:var(--gold-deep)}
.help-card .sheet-close{position:absolute;top:.8rem;right:.8rem;border-color:rgba(36,31,24,.22);color:var(--cream-ink)}
.help-card .sheet-close:hover{background:var(--cream-ink);border-color:var(--cream-ink);color:var(--cream)}
.help-alt{display:inline-block;margin-top:1.4rem;color:var(--gold-deep);font-size:.8rem;letter-spacing:.1em;text-decoration:none;border-bottom:1px solid currentColor}
.help-alt:hover{color:var(--cream-ink)}

/* ---------- pannellum hotspots ---------- */
.pnlm-hotspot-base{cursor:pointer}
.pnlm-scene{width:48px!important;height:48px!important;margin:-24px 0 0 -24px!important;border:2px solid #fff;border-radius:50%;background:var(--gold)!important;box-shadow:0 5px 18px rgba(0,0,0,.35)}
.pnlm-scene::after{content:"→";position:absolute;inset:0;display:grid;place-content:center;color:#fff;font-size:1.3rem;font-weight:700}
.pnlm-info{width:38px!important;height:38px!important;margin:-19px 0 0 -19px!important;border:2px solid #fff;border-radius:50%;background:var(--gold-deep)!important;box-shadow:0 5px 18px rgba(0,0,0,.35)}
.pnlm-info::after{content:"i";position:absolute;inset:0;display:grid;place-content:center;color:#fff;font:700 1rem Georgia,serif}
.pnlm-hotspot-base span{font-family:var(--sans)!important;white-space:normal!important;max-width:220px}
.pnlm-tooltip:focus span{visibility:visible!important}
.pnlm-tooltip:focus span::after{content:"";position:absolute;width:0;height:0;border-width:10px;border-style:solid;border-color:rgba(0,0,0,.7) transparent transparent;bottom:-20px;left:-10px;margin:0 50%}
.hf-tour-door-hotspot{width:68px!important;height:34px!important;margin:-17px 0 0 -34px!important;border:0;border-radius:50%;background:transparent!important;box-shadow:none;transition:none}
.hf-tour-door-hotspot::before{content:"";position:absolute;inset:5px;border:4px solid rgba(255,255,255,.72);border-radius:50%;box-shadow:0 1px 2px rgba(16,18,17,.28),0 0 14px rgba(255,255,255,.22);transition:border-color .2s ease,box-shadow .2s ease,transform .2s ease}
.hf-tour-door-hotspot::after{content:""}
.hf-tour-door-hotspot:hover::before,.hf-tour-door-hotspot:focus-visible::before{border-color:rgba(255,255,255,.98);box-shadow:0 1px 3px rgba(16,18,17,.34),0 0 0 4px rgba(203,164,113,.24),0 0 18px rgba(255,255,255,.38);transform:scale(1.06)}
.hf-tour-door-hotspot span{font-size:.76rem!important;font-weight:700!important;line-height:1.45!important}
.hf-tour-door-hotspot:focus-visible{outline:2px solid var(--gold);outline-offset:5px}

/* ---------- locator (?editor=1) ---------- */
.locator-panel{position:absolute;top:calc(clamp(58px,8vh,76px) + .6rem);right:clamp(.75rem,2.5vw,2rem);z-index:7;width:min(18rem,calc(100% - 2rem));padding:.9rem;background:var(--cream);color:var(--cream-ink);border:1px solid var(--gold);font-size:.74rem}
.locator-panel[hidden]{display:none}
.locator-panel output{display:block;margin:.4rem 0;font-family:var(--mono)}
.locator-panel button{min-height:38px;padding:.4rem .7rem}
.locator-panel p{margin:.55rem 0 0}
.locator-panel code{font-family:var(--mono)}

/* ---------- responsive ---------- */
@media(max-width:900px){
  .hud-link--wide{display:none}
}
@media(max-width:800px){
  :root{--rail-gap:3.9rem}
  .hud-top{min-height:56px;gap:.6rem;padding:0 .9rem}
  .hud-nav{gap:.85rem}
  .hud-link,.hud-cta{font-size:.72rem;letter-spacing:.1em}
  .hud-cta{padding:.6rem .8rem}
  .cta-full{display:none}
  .cta-short{display:inline}
  .hud-tag{display:none}
  .hud-narrative{left:1rem;right:4.2rem;width:auto;bottom:calc(var(--rail-gap) + .9rem)}
  .narrative-kicker{margin-bottom:.7rem;gap:.6rem}
  .kicker-rule{width:32px}
  .narrative-text{margin-top:.7rem;font-size:.78rem;line-height:1.85;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
  .narrative-actions{margin-top:1.1rem}
  .solid-button,.line-button{padding:.7rem 1rem;font-size:.76rem}
  .control-pad{display:none}
  .tool-rail{right:.7rem;bottom:calc(var(--rail-gap) + .9rem);gap:.45rem}
  .tool-rail button{width:38px;height:38px}
  .tool-rail.is-fullscreen{right:.7rem;bottom:1rem}
  .hud-bottom{padding:0 1rem}
  .drag-hint{display:none}
  .chapter-button{font-size:.72rem;letter-spacing:.1em;gap:.5rem}
  .chapter-button .chapter-rule{width:18px}
  .chapter-button[aria-current="true"] .chapter-rule{width:24px}
  .scene-list{grid-template-columns:repeat(auto-fill,minmax(11rem,1fr))}
}
@media(max-width:520px){
  .hud-title{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}
  .hud-brand{gap:.6rem}
  .narrative-title{font-size:1.5rem}
  .scene-list{grid-template-columns:1fr 1fr;gap:.7rem}
  .scene-copy small{display:none}
}
@media(max-height:560px){
  .narrative-text{display:none}
  .control-pad{display:none}
  .narrative-actions{margin-top:1rem}
}

@media(prefers-reduced-motion:reduce){
  *{scroll-behavior:auto!important}
  .loading-mark{animation-duration:1.8s}
  .intro-layer,.sheet{animation:none}
  .scene-preview img,.hf-tour-door-hotspot::before,.button-arrow,.chapter-button .chapter-rule,.tool-rail button{transition:none}
  #autorotate-button[aria-pressed="true"] svg circle:first-child{animation:none}
}
