:root{--bg: #0a0a0b;--ink-1: #ececee;--ink-2: #a1a1a6;--ink-3: #6e6e73;--hair: rgba(255, 255, 255, .08);--hair-strong: rgba(255, 255, 255, .16);--mono: ui-monospace, "SF Mono", "SFMono-Regular", "JetBrains Mono", "IBM Plex Mono", Menlo, Consolas, monospace;--ease: cubic-bezier(.22, 1, .36, 1)}*{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}body{background:var(--bg);color:var(--ink-1);font-family:var(--mono);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;overflow-x:hidden}button{font-family:inherit;color:inherit;background:none;border:none;cursor:pointer}a{color:inherit;text-decoration:none}.eyebrow{font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--ink-3)}#gallery-scroll{position:relative;z-index:1;max-width:1240px;margin:0 auto;padding:clamp(48px,9vh,110px) clamp(20px,5vw,56px) 120px}.masthead{margin-bottom:clamp(40px,7vh,88px)}.masthead .eyebrow{margin-bottom:18px}.masthead h1{font-family:var(--mono);font-weight:500;font-size:clamp(38px,8vw,92px);line-height:.98;letter-spacing:-.02em;color:var(--ink-1)}.masthead .sub{margin-top:20px;font-size:clamp(12px,1.4vw,15px);letter-spacing:.04em;color:var(--ink-2)}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(268px,1fr));gap:clamp(12px,1.6vw,20px)}.card{position:relative;display:flex;flex-direction:column;aspect-ratio:4 / 5;padding:18px;border:1px solid var(--hair);border-radius:14px;background:linear-gradient(180deg,#ffffff04,#fff0);overflow:hidden;transition:border-color .5s var(--ease),transform .5s var(--ease);text-align:left;width:100%}.card:hover,.card:focus-visible{border-color:var(--hair-strong);transform:translateY(-3px);outline:none}.card-top{display:flex;justify-content:space-between;align-items:baseline;position:relative;z-index:2}.card-stage{font-size:11px;letter-spacing:.22em}.card-date{font-size:11px;letter-spacing:.14em;color:var(--ink-3)}.card-spacer{flex:1}.card-foot{position:relative;z-index:2}.card-route{font-size:14px;letter-spacing:.01em;color:var(--ink-1);line-height:1.35}.card-route .arrow{color:var(--ink-3);margin:0 6px}.card-meta{margin-top:8px;display:flex;gap:10px;font-size:11px;letter-spacing:.06em;color:var(--ink-2)}.card-meta .dot{color:var(--ink-3)}.card-type{margin-top:10px;display:inline-block;font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-3)}#gallery-gl{position:fixed;inset:0;z-index:0;pointer-events:none}.card.static-thumb canvas{position:absolute;inset:0;width:100%;height:100%;z-index:1}#stage-view{position:fixed;inset:0;z-index:10;background:var(--bg);opacity:0;pointer-events:none;transition:opacity .55s var(--ease)}#stage-view.active{opacity:1;pointer-events:auto}#stage-canvas{position:absolute;inset:0;display:block;touch-action:none}.stage-ui{position:absolute;inset:0;pointer-events:none;z-index:3}.stage-header{position:absolute;top:clamp(20px,4vh,40px);left:clamp(20px,4vw,48px);right:clamp(20px,4vw,48px);display:flex;justify-content:space-between;align-items:flex-start;gap:20px}.back-btn{pointer-events:auto;display:inline-flex;align-items:center;margin-bottom:16px;padding:6px 13px 6px 11px;border:1px solid var(--hair);border-radius:999px;background:#0006;backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);font-size:10px;letter-spacing:.2em;color:var(--ink-2);transition:color .3s var(--ease),border-color .3s var(--ease)}.back-btn:hover{color:var(--ink-1);border-color:var(--hair-strong)}.stage-header .eyebrow{margin-bottom:8px}.stage-title{font-size:clamp(18px,2.6vw,26px);font-weight:500;letter-spacing:-.01em;line-height:1.15}.stage-title .arrow{color:var(--ink-3);margin:0 8px}.close-btn{pointer-events:auto;width:42px;height:42px;border:1px solid var(--hair);border-radius:50%;color:var(--ink-2);font-size:18px;line-height:1;display:flex;align-items:center;justify-content:center;transition:color .3s var(--ease),border-color .3s var(--ease);flex:none}.close-btn:hover{color:var(--ink-1);border-color:var(--hair-strong)}.city-label{position:absolute;transform:translate(-50%,-100%);display:flex;flex-direction:column;align-items:center;pointer-events:none;will-change:transform,opacity;transition:opacity .25s linear}.city-label .pill{display:flex;align-items:baseline;gap:8px;padding:7px 14px;background:#000000c7;border:1px solid rgba(255,255,255,.28);border-radius:999px;backdrop-filter:blur(8px) saturate(1.1);-webkit-backdrop-filter:blur(8px) saturate(1.1);white-space:nowrap}.city-label .name{font-size:13px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:#fff}.city-label .kind{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-3)}.city-label .tick{width:1px;height:16px;margin-top:2px;background:linear-gradient(rgba(255,255,255,.55),transparent)}.stage-footer{position:absolute;bottom:clamp(20px,4vh,44px);left:clamp(20px,4vw,48px);right:clamp(20px,4vw,48px);display:flex;align-items:flex-end;justify-content:space-between;gap:28px;flex-wrap:wrap}.stat-hero{display:flex;align-items:baseline;gap:8px}.stat-hero .num{font-size:clamp(44px,9vw,88px);font-weight:500;letter-spacing:-.03em;line-height:.9}.stat-hero .unit{font-size:clamp(14px,2vw,20px);color:var(--ink-3);letter-spacing:.06em}.stat-row{display:flex;gap:clamp(20px,4vw,48px)}.stat{display:flex;flex-direction:column;gap:6px}.stat .label{font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-3)}.stat .value{font-size:clamp(15px,2vw,20px);color:var(--ink-1);letter-spacing:.02em}.stage-nav{position:absolute;top:50%;transform:translateY(-50%);pointer-events:auto;width:46px;height:46px;border:1px solid var(--hair);border-radius:50%;color:var(--ink-2);display:flex;align-items:center;justify-content:center;font-size:16px;transition:color .3s var(--ease),border-color .3s var(--ease),opacity .3s var(--ease)}.stage-nav:hover{color:var(--ink-1);border-color:var(--hair-strong)}.stage-nav.prev{left:clamp(16px,3vw,40px)}.stage-nav.next{right:clamp(16px,3vw,40px)}.stage-nav[disabled]{opacity:.2;pointer-events:none}.hint{position:absolute;bottom:14px;left:50%;transform:translate(-50%);font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-3);opacity:.7;transition:opacity .6s var(--ease)}.hint.hidden{opacity:0}@media(max-width:560px){.stage-nav{display:none}.stage-footer{gap:16px}}@media(prefers-reduced-motion:reduce){*{transition-duration:.001ms!important}}
