:root{--cream:#faf9f6;--forest:#1b4332;--ink:#18372c;--muted:#67746c;--line:#dde2d9;--sans:Archivo,Arial,sans-serif;--serif:Fraunces,Georgia,serif;color-scheme:light}
*{box-sizing:border-box}html,body{margin:0;min-height:100%;background:var(--cream);color:var(--ink)}body{font:14px/1.5 var(--sans);height:100svh;display:flex;flex-direction:column;-webkit-font-smoothing:antialiased}button,a{-webkit-tap-highlight-color:transparent}button{font:500 13px var(--sans);border:0;background:none;color:inherit;cursor:pointer}button:disabled{opacity:.4;cursor:wait}a{color:var(--forest);text-underline-offset:4px}button:focus-visible,a:focus-visible,canvas:focus-visible{outline:2px solid #2d6a4f;outline-offset:4px}button:focus:not(:focus-visible){outline:0}button:hover:not(:disabled){background:#e9ede6}button:active:not(:disabled){transform:translateY(1px)}.header{height:96px;flex:none;padding:0 32px;display:flex;align-items:center;justify-content:space-between;gap:20px}.identity{display:flex;align-items:center;gap:16px}.identity img{flex:none}.date{margin:0 0 3px;font-size:12px;font-weight:500;color:var(--muted)}.date span{margin-left:12px;padding-left:12px;border-left:1px solid #aebcaf}h1{font:500 32px/1.15 var(--serif);letter-spacing:-.025em;margin:0}h2{font:500 32px/1.15 var(--serif);letter-spacing:-.025em;margin:14px 0}main{flex:1;min-height:0;display:flex;flex-direction:column;padding:0 20px}.room-frame{position:relative;flex:1;min-height:280px;background:#e5e6e1;overflow:hidden;border-radius:14px}#stage{position:absolute;inset:0}#stage canvas{display:block;width:100%;height:100%;touch-action:none;cursor:grab}#stage canvas:active{cursor:grabbing}#viewFade{position:absolute;inset:0;background:var(--cream);opacity:0;pointer-events:none;transition:opacity .2s}#viewFade.on{opacity:1}.scene-note{position:absolute;top:18px;left:20px;display:flex;align-items:center;gap:8px;background:rgba(250,249,246,.95);padding:8px 12px;border-radius:4px;font-size:12px;pointer-events:none}.live-dot{width:5px;height:5px;background:#4d735d;border-radius:100%}#gestureHint{position:absolute;bottom:16px;left:50%;transform:translateX(-50%);padding:7px 12px;border-radius:30px;background:rgba(250,249,246,.92);font-size:12px;color:#475b4e;margin:0;pointer-events:none;white-space:nowrap;transition:opacity .4s}#gestureHint.dismissed{opacity:0}.viewer-footer{height:80px;flex:none;padding:0 12px;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:16px}.caption p{font:500 20px/1.3 var(--serif);margin:0 0 3px}.caption span{font-size:11px;color:var(--muted)}.viewpoints{display:flex;align-items:center;gap:4px;padding:4px;border:1px solid var(--line);border-radius:30px}.viewpoints button{padding:0 20px;min-height:44px;border-radius:30px;white-space:nowrap}.viewpoints button[aria-pressed=true]{background:var(--forest);color:var(--cream)}.utilities{display:flex;justify-content:flex-end;align-items:center;gap:6px}.text-button{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:0 12px;min-height:44px;border-radius:24px;white-space:nowrap}.icon-button{display:grid;place-items:center;width:44px;height:44px;border:1px solid var(--line);border-radius:50%;flex:none}.primary{display:inline-flex;align-items:center;justify-content:center;gap:20px;background:var(--forest);color:var(--cream);border:0;border-radius:28px;padding:14px 24px;min-height:48px;text-decoration:none;font:500 14px var(--sans)}.primary:hover{background:#285d45!important}#loading{position:absolute;inset:0;background:var(--cream);z-index:3;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:22px;transition:opacity .18s ease}#loading[hidden]{display:none}#loading.is-ready{opacity:0;pointer-events:none}.logo-progress{--progress-offset:100;width:clamp(128px,18vmin,160px);aspect-ratio:1}.loading-logo{display:block;width:100%;height:100%}.loading-ring{stroke-dasharray:100 100;stroke-dashoffset:var(--progress-offset);stroke-linecap:butt;transition:stroke-dashoffset .22s linear}#loadingText{font-size:12px;letter-spacing:.02em;color:var(--muted);margin:0}
.source-link{font-size:11px;margin-top:32px;color:var(--muted)}#failure{position:absolute;inset:0;background:var(--cream);z-index:4;text-align:center;align-content:center;padding:24px}#failure[hidden]{display:none}#failure a{display:block;margin-top:20px}#help{position:absolute;bottom:54px;right:24px;width:min(310px,calc(100% - 48px));padding:22px;background:var(--cream);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 30px #16362620;font-size:13px}#help p{color:#57695d;margin:10px 0}#help button{padding:10px 16px;border:1px solid var(--line);border-radius:22px;min-height:44px}.keyboard-help{display:block}dialog{border:1px solid var(--line);border-radius:20px;background:var(--cream);color:var(--ink);padding:28px;width:min(440px,calc(100vw - 32px));max-height:calc(100svh - 48px);overflow:auto;box-shadow:0 24px 80px #09271930}dialog::backdrop{background:#152d2244;backdrop-filter:blur(4px)}.dialog-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:32px}.intro{font-size:15px;line-height:1.6;color:#526458}address{font-style:normal;font-size:14px;line-height:1.7;margin:24px 0}.preview-details{border-top:1px solid var(--line);margin-top:28px;padding-top:14px;font-size:12px;color:var(--muted)}.credit{font-size:10px;color:var(--muted);line-height:1.6;margin:24px 0 0}
@media(max-width:1000px){.caption{display:none}.viewer-footer{grid-template-columns:1fr auto}.viewpoints{justify-self:start}.header{padding:0 24px}}
@media(max-width:640px){body{height:100svh}.header{height:88px;padding:0 16px;gap:8px}.identity{gap:10px}.identity img{width:36px;height:36px}h1{font-size:23px}.date{font-size:10px}.date span{margin-left:6px;padding-left:6px}.header .venue-button{width:auto;min-width:131px;padding:0 12px;font-size:11px;gap:7px}.header .venue-button svg{width:16px;height:16px}main{padding:0 12px}.room-frame{min-height:250px}.scene-note{top:12px;left:12px;font-size:11px;padding:7px 10px}.viewer-footer{height:calc(96px + env(safe-area-inset-bottom));padding:5px 0 max(5px,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:2px;justify-content:flex-start}.viewpoints{width:100%;justify-content:center;padding:3px;gap:0}.viewpoints button{flex:1;padding:0 10px;min-height:44px;font-size:12px}.utilities{justify-content:center}.utilities{gap:2px}.utilities .icon-button{border:0;width:32px;height:32px}.utilities .text-button{font-size:11px;min-height:32px;padding:0 6px}#gestureHint{font-size:11px;bottom:14px}.keyboard-help{display:none}dialog{padding:24px;width:calc(100vw - 24px)}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{transition:none!important;scroll-behavior:auto!important}}



.joystick-control{position:absolute;bottom:28px;display:flex;align-items:center;flex-direction:column;gap:8px;user-select:none}.move-control{left:28px}.look-control{right:28px}.joystick{position:relative;width:88px;height:88px;border-radius:50%;border:1px solid #1b433238;background:#faf9f6cf;backdrop-filter:blur(8px);touch-action:none;cursor:grab}.joystick-knob{position:absolute;left:50%;top:50%;width:32px;height:32px;border-radius:50%;background:var(--forest);box-shadow:0 2px 8px #18372c20;pointer-events:none}.joystick.is-active{background:#faf9f6eb;cursor:grabbing}.joystick[aria-disabled=true]{opacity:.4;pointer-events:none}.joystick:focus-visible{outline:2px solid var(--forest);outline-offset:4px}.joystick-label{font-size:10px;letter-spacing:.02em;padding:2px 8px;border-radius:12px;background:#faf9f6e6;pointer-events:none}.credits{font-size:10px;color:var(--muted);margin-top:22px}.credits summary{cursor:pointer;padding:8px 0}.credits p{line-height:1.6;margin:4px 0}#help{bottom:160px;z-index:2}
@media(max-width:640px){.joystick-control{bottom:16px;gap:6px}.move-control{left:16px}.look-control{right:16px}.joystick{width:76px;height:76px}.joystick-knob{width:28px;height:28px}#gestureHint{bottom:124px}}

.venue-map{height:240px;width:100%;border-radius:12px;overflow:hidden;background:#e8ece5;border:1px solid var(--line);margin-top:22px}.venue-map-status{height:100%;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;padding:18px;text-align:center;font-size:12px}.venue-map-status p{margin:0}.venue-map-popup{font:12px/1.45 var(--sans);color:var(--ink)}.venue-map-popup p{margin:5px 0 0}.mapboxgl-ctrl-logo{min-height:23px}.venue-map .mapboxgl-ctrl-attrib{font-size:10px}.venue-map button.mapboxgl-ctrl-zoom-in,.venue-map button.mapboxgl-ctrl-zoom-out{width:40px;height:40px}.venue-map .mapboxgl-marker:focus-visible{outline:2px solid var(--forest);outline-offset:4px}

.header .identity .date{margin:6px 0 0;font-size:13px}.venue-button{border:1px solid #a9b8ab;background:#f5f6f1;min-width:174px;min-height:44px}.venue-button:hover{border-color:var(--forest)}
@media(max-width:640px){.header .identity .date{font-size:11px;margin-top:5px}.header{gap:10px}.identity{gap:10px}.venue-button{min-width:131px}.identity h1{white-space:nowrap}}
@media(max-width:374px){.header{padding:0 12px;gap:8px}.identity{gap:8px}.identity img{width:30px;height:30px}.identity h1{font-size:20px}.header .venue-button{min-width:118px;padding:0 9px;gap:5px;font-size:10px}}

@media(min-width:641px){.utilities .text-button{font-size:11px;min-height:30px;padding:0 6px}.utilities .icon-button{width:32px;height:32px;border:0}.utilities{gap:2px}.caption p{font-size:18px}}
.utilities .icon-button svg{width:17px;height:17px}

.keyboard-hint{display:none}
@media(hover:hover) and (pointer:fine){
  .keyboard-hint{position:absolute;top:18px;right:20px;display:flex;align-items:center;gap:7px;margin:0;padding:6px 10px;border-radius:4px;background:rgba(250,249,246,.95);color:#475b4e;font-size:11px;line-height:1.4;pointer-events:none;white-space:nowrap}
  .keyboard-keys{display:inline-flex;gap:3px}
  .keyboard-keys kbd{display:inline-grid;place-items:center;width:20px;height:22px;border:1px solid #b9c5ba;border-bottom-width:2px;border-radius:4px;background:#fffefa;color:var(--forest);font:500 10px/1 var(--sans)}
}

@media(max-width:640px) and (hover:hover) and (pointer:fine){.keyboard-hint{top:12px;right:12px}}
@media(max-width:479px){.keyboard-hint .keyboard-intro{display:none}}
