/* World Run: live 3D scenery with a lightweight, touch-friendly 2D overlay. */
:root{--mint:#19cba6;--navy:#142c50;--ivory:#fff9ea;--ice:#eaf9f6;color:var(--navy);font-family:'Apple SD Gothic Neo','Noto Sans KR',system-ui,sans-serif;font-weight:600;--safe-top:max(16px,env(safe-area-inset-top));--safe-bottom:max(12px,env(safe-area-inset-bottom));--ui-width:460px}
.ui-symbols{position:absolute;width:0;height:0;overflow:hidden}.ui-icon,button svg{width:26px;height:26px;fill:currentColor;flex-shrink:0}.item-icon{display:inline-block;flex-shrink:0;width:36px;height:36px;background:center/contain no-repeat;vertical-align:middle;filter:drop-shadow(0 2px 2px #08263c45)}.coin-icon{background-image:url('https://worldruncdn.ttok.im/assets/v1/bf0c477e5e323741694cfe3f2359db01644c265b113c7c88adb2dec8c3735722/coin.webp')}.data-icon{position:relative;width:28px;height:30px;margin:3px 5px;border:3px solid #b7fff1;border-radius:5px;background:linear-gradient(135deg,#3ff3d6,#00ad8c 52%,#006c66);box-shadow:0 0 0 2px #009b84,inset 0 0 0 2px #00957a;color:white;font-style:normal;isolation:isolate}.data-icon:before{content:'';position:absolute;z-index:-1;inset:-7px -6px;background:repeating-linear-gradient(90deg,transparent 0 3px,#11bba2 3px 7px,transparent 7px 11px);border-radius:4px}.data-icon:after{content:'MB';position:absolute;inset:0;display:grid;place-items:center;background:linear-gradient(135deg,#20ddbc,#008f7a);border-radius:2px;font:900 12px/1 system-ui;text-shadow:0 1px #006554}.trophy-icon{width:100px;height:88px;filter:drop-shadow(0 5px 0 #d2912870)}.trophy-icon:after{content:'🏆';font:76px/1.15 system-ui}
.japan-flag{display:inline-block;flex-shrink:0;width:26px;height:19px;border-radius:3px;background:radial-gradient(circle,#e93453 0 4.5px,#fff 5px);border:1px solid #fff9;box-shadow:0 1px 3px #08294c30}
.hud{top:var(--safe-top);left:50%;right:auto;transform:translateX(-50%);width:calc(100% - 32px);max-width:var(--ui-width);height:48px;gap:8px;align-items:center;z-index:6}.wordmark{position:fixed;left:calc(50% - 50vw + 40px);top:12px;display:flex;flex-direction:row;gap:6px;white-space:nowrap;filter:drop-shadow(0 2px 0 #fff8);transform:none;font-size:26px;line-height:1}.wordmark>span,.wordmark>strong{font-size:26px}.wordmark>span{color:var(--navy)}.wordmark>strong{color:#00ae94}.wordmark strong span{font-size:21px}.lobby-wallet{display:flex;align-items:center;justify-content:space-between;gap:7px;flex:1;min-width:0}.wallet-pill,.avatar-chip{display:flex;align-items:center;justify-content:center;gap:4px;padding:2px 9px 2px 3px;border:1px solid #c2e4ff55;border-radius:24px;background:linear-gradient(150deg,#24496bee,#142c50f2);color:white;box-shadow:0 3px 5px #0f324435,inset 0 1px 1px #ffffff35;font-weight:800;font-size:14px;white-space:nowrap}.wallet-pill .item-icon{width:30px;height:30px}.wallet-pill .data-icon{width:23px;height:25px;margin:3px}.avatar-chip{padding-left:0;border-radius:30px;gap:5px}.avatar-face{display:grid;place-items:center;width:46px;height:46px;margin:-6px 0;border:3px solid #fff;border-radius:50%;background:#c5f3ec url('https://worldruncdn.ttok.im/assets/v1/c586e63b1a9efe94998885372db5c59f9e688df36aace8c83ed5a42b8ab992f7/trip-reference.webp') 50% 5%/230% auto no-repeat;color:var(--navy);font-size:24px;font-weight:900}.avatar-face[data-character=toki],.avatar-face[data-character=vivi]{background-image:none}.avatar-face[data-character=toki]{background-color:#ffd3df}.avatar-face[data-character=vivi]{background-color:#d4edb8}.top-controls{gap:6px}.icon-button{width:44px;height:44px;display:grid;place-items:center;border-radius:50%;color:#fff;background:linear-gradient(145deg,#35668f,#173252);border:2px solid #e8f9ff;box-shadow:0 0 0 2px #3987bb66,0 4px 6px #123b5140;font-size:24px}.icon-button svg{width:24px;height:24px}#sound,#pause{display:none}
.lobby{position:fixed;inset:0;z-index:4;pointer-events:none;isolation:isolate}.lobby button,.lobby nav{pointer-events:auto}.lobby:before{content:'';position:absolute;inset:62% 0 0;z-index:-1;background:linear-gradient(transparent,#07293624 35%,#eaf9f6a0)}.city-selector{position:absolute;top:calc(var(--safe-top) + 70px);left:50%;transform:translateX(-50%);display:flex;gap:12px;align-items:center;justify-content:center;min-height:42px;padding:7px 17px;border:3px solid #98e1f5;border-radius:30px;background:linear-gradient(#fffef5,#f1fbfa);box-shadow:0 3px 0 #15789f55,0 0 0 4px #f9ffff90;font-weight:900;font-size:16px;white-space:nowrap}.city-selector b{font-size:25px;line-height:20px}.city-selector:active:not(:disabled){transform:translateX(-50%) translateY(2px)}.lobby-caption{position:absolute;left:50%;top:calc(var(--safe-top) + 137px);transform:translateX(-50%);text-align:center;color:white;text-shadow:0 2px 5px #0d344c70;white-space:nowrap}.lobby-caption>span{font-size:10px;letter-spacing:3px}.lobby-caption h1{font-size:30px;letter-spacing:-1.6px;margin:5px 0}.lobby-caption p{font-size:10px;letter-spacing:3px;margin:0;color:#fffde5}.lobby-bottom{position:absolute;left:50%;bottom:calc(var(--safe-bottom) + 87px);transform:translateX(-50%);width:calc(100% - 44px);max-width:428px}.mission-ticket{width:90%;margin:0 auto 13px;display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:41px;padding:6px 17px;color:var(--navy);background:linear-gradient(#fffdf2,#fff5d9);border:1px solid #fff;border-radius:5px;box-shadow:0 3px 1px #6b736640;font-size:14px;font-weight:800;clip-path:polygon(0 0,100% 0,100% 33%,98% 50%,100% 67%,100% 100%,0 100%,0 67%,2% 50%,0 33%)}.mission-ticket strong{font-size:21px;margin-left:auto;white-space:nowrap}.mission-ticket>b{font-size:25px}.mission-ticket .ui-icon{width:23px;height:23px}.lobby-actions{display:flex;gap:10px;align-items:stretch}.primary-button{color:white;background:linear-gradient(170deg,#60ffe0 0,#00d5b0 19%,#00c4a1 59%,#00ae91 85%,#018b78);border:2px solid #008f7b;border-radius:24px;box-shadow:inset 0 2px 1px #d7fff5,inset 0 -3px 2px #008872,0 4px 0 #005d5970,0 6px 12px #123c4330;font-weight:900;font-size:21px;min-height:57px;gap:14px;text-shadow:0 2px 2px #006d6860;transition:filter .15s,transform .15s}.primary-button:hover:not(:disabled){filter:brightness(1.06)}.primary-button:disabled{opacity:1;background:linear-gradient(#c2d0db,#93a7bb);color:#e8f1f6;border-color:#7b91a4;box-shadow:inset 0 2px 0 #fff,0 3px 0 #667d90}.secondary-button{background:linear-gradient(145deg,#fffef6,#f8fbf6);border:1.5px solid #075b76;border-radius:17px;box-shadow:inset 0 2px 0 white,0 3px 0 #39545a35,0 4px 8px #082c3920;color:#08465f;min-height:48px;font-size:16px;font-weight:900;display:flex;align-items:center;justify-content:center;gap:9px}.lobby-actions .primary-button{flex:1;font-size:27px;border-radius:35px;min-height:62px}.character-open{width:108px;gap:5px;font-size:13px;flex-shrink:0}.shirt-glyph{font-size:24px}.play-glyph{font-size:25px;filter:drop-shadow(0 2px 1px #087a77)}.lobby-record{display:flex;justify-content:space-between;gap:8px;padding:11px 4px 0;font-size:10px;color:#fff;text-shadow:0 1px 4px #12354b}.lobby-record button{color:inherit;font-size:10px;padding:0;background:transparent;text-shadow:inherit}.lobby-record b{margin-left:5px}.bottom-nav{position:absolute;left:50%;bottom:var(--safe-bottom);transform:translateX(-50%);width:calc(100% - 28px);max-width:var(--ui-width);min-height:73px;display:flex;justify-content:space-around;gap:3px;border-radius:26px;background:linear-gradient(120deg,#fffef5f7,#fffffff5);padding:5px 8px;border:1px solid white;box-shadow:0 4px 12px #0b3c4a26}.bottom-nav button{position:relative;flex:1;background:transparent;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:5px;border-radius:19px;font-size:11px;font-weight:800;color:#567485;min-width:0}.bottom-nav svg{width:27px;height:27px}.bottom-nav .selected{color:#009c87;background:linear-gradient(#d4fff0,#a8f7e4)}.bottom-nav .data-icon{width:21px;height:24px;margin:2px 0 1px}.bottom-nav .data-icon:after{font-size:9px}.nav-dot{position:absolute;right:21%;top:2px;width:9px;height:9px;border-radius:50%;background:#ff795f;border:1px solid white}
/* The camera and canvas fill the screen; only HUD content has a width cap. */
#game-hud{inset:var(--safe-top) auto auto 50%;width:calc(100% - 28px);max-width:680px;transform:translateX(-50%)}.run-ribbon{display:flex;align-items:center;justify-content:space-between;padding:0 59px 0 2px;height:48px;border-radius:28px;background:linear-gradient(110deg,#203c60ed,#12294dec);box-shadow:inset 0 1px #b7e1ff55,0 2px 6px #08284925;color:white;gap:6px}.run-ribbon>span{display:flex;align-items:center;gap:5px;white-space:nowrap}.run-ribbon b{font-size:21px;letter-spacing:-.7px;font-variant-numeric:tabular-nums}.run-ribbon small{font-size:14px;margin-left:1px}.run-ribbon .distance-pill{height:100%;border-radius:28px;background:#122c4caf;padding:0 12px 0 9px;gap:5px}.run-ribbon .distance-pill svg{width:26px;height:26px}.run-ribbon .item-icon{width:31px;height:31px}.run-ribbon .data-icon{width:24px;height:28px;margin:2px 4px}.run-ribbon .data-icon:after{font-size:11px}body:is([data-phase=running],[data-phase=countdown],[data-phase=paused]) .hud{max-width:680px;justify-content:flex-end;width:calc(100% - 28px);pointer-events:none}body:is([data-phase=running],[data-phase=countdown],[data-phase=paused]) .top-controls{pointer-events:auto}body:not([data-phase=ready]) .lobby-wallet,body:not([data-phase=ready]) .wordmark,body:not([data-phase=ready]) .lobby-settings{display:none}body:is([data-phase=running],[data-phase=countdown],[data-phase=paused]) #pause{display:grid;width:46px;height:46px}
body:is([data-phase=running],[data-phase=countdown],[data-phase=paused]) .route-progress{display:flex;align-items:center;gap:10px;position:relative;top:auto;left:auto;transform:none;margin:9px auto 0;width:96%;padding:6px 10px;background:#163255e8;border:1px solid #b8d9ff40;box-shadow:0 2px 4px #14335625;border-radius:25px;color:#fff;min-height:31px}.route-label{white-space:nowrap;font-size:12px;max-width:46%;text-overflow:ellipsis;overflow:hidden}.route-line{position:relative;flex:1;height:14px;min-width:36px}.route-track{margin:5px 0 0;height:5px;background:#a5c5ed80;border-radius:5px;overflow:hidden}.route-track i{background:linear-gradient(90deg,#0bd3ae,#6dfff0);transition:width .1s}.route-stamps{position:absolute;inset:0;align-items:center;justify-content:space-around;margin:0}.route-stamps>span{width:12px;height:12px;border:1px solid #c7e0ff;background:#8baed9;box-shadow:0 1px 2px #09213c}.route-stamps>span.earned{background:#1ce8c7;border-color:#87ffed;box-shadow:0 0 0 2px #082f5055}.route-progress .japan-flag{width:24px;height:18px}.run-subline{display:flex;justify-content:space-between;margin:7px 12px 0;color:#fff;text-shadow:0 1px 4px #102b4f;font-size:11px;opacity:.95}.score-panel,.run-panel{position:static;text-align:left;display:flex;align-items:center;gap:6px}.score-panel>strong{display:inline;font-size:12px;line-height:1}.score-panel small{font-size:8px;letter-spacing:1px}#combo{font-size:10px;color:#ffdc73}/* 스크롤바. 브라우저 기본 막대가 아이보리 패널 위에서 튀어서, 게임 UI 색으로 다시 그린다.
   Firefox 는 scrollbar-color, Chrome·Safari 는 ::-webkit-scrollbar 를 본다. */
.game-dialog,.center-panel,.achievement-list,.settings-section,.menu-panel,#journey-missions,#gear-list{
 scrollbar-width:thin;scrollbar-color:#19cba6 #dcefe9}
.game-dialog::-webkit-scrollbar,.center-panel::-webkit-scrollbar,.achievement-list::-webkit-scrollbar,
.settings-section::-webkit-scrollbar,.menu-panel::-webkit-scrollbar,
#journey-missions::-webkit-scrollbar,#gear-list::-webkit-scrollbar{width:10px;height:10px}
.game-dialog::-webkit-scrollbar-track,.center-panel::-webkit-scrollbar-track,.achievement-list::-webkit-scrollbar-track,
.settings-section::-webkit-scrollbar-track,.menu-panel::-webkit-scrollbar-track,
#journey-missions::-webkit-scrollbar-track,#gear-list::-webkit-scrollbar-track{
 background:#e3f2ee;border-radius:10px;margin:6px 0}
.game-dialog::-webkit-scrollbar-thumb,.center-panel::-webkit-scrollbar-thumb,.achievement-list::-webkit-scrollbar-thumb,
.settings-section::-webkit-scrollbar-thumb,.menu-panel::-webkit-scrollbar-thumb,
#journey-missions::-webkit-scrollbar-thumb,#gear-list::-webkit-scrollbar-thumb{
 background:linear-gradient(#4de3c2,#00b394);border:2px solid #e3f2ee;border-radius:10px;
 box-shadow:inset 0 1px 0 #ffffff80}
.game-dialog::-webkit-scrollbar-thumb:hover,.center-panel::-webkit-scrollbar-thumb:hover,
.achievement-list::-webkit-scrollbar-thumb:hover,.settings-section::-webkit-scrollbar-thumb:hover,
.menu-panel::-webkit-scrollbar-thumb:hover{background:linear-gradient(#5cf0cf,#00c7a4)}
/* 화살표 버튼과 모서리는 게임 UI 에 어울리지 않아 없앤다. */
.game-dialog::-webkit-scrollbar-button,.center-panel::-webkit-scrollbar-button,
.achievement-list::-webkit-scrollbar-button,.settings-section::-webkit-scrollbar-button,
.menu-panel::-webkit-scrollbar-button{display:none}
.game-dialog::-webkit-scrollbar-corner,.center-panel::-webkit-scrollbar-corner{background:transparent}

/* 어두운 배경(로비·러너 줄) 위에서는 밝은 막대를 쓴다. */
.runner-strip{scrollbar-width:thin;scrollbar-color:#6dfff0aa #0b254066}
.runner-strip::-webkit-scrollbar{height:8px}
.runner-strip::-webkit-scrollbar-track{background:#0b254055;border-radius:8px}
.runner-strip::-webkit-scrollbar-thumb{background:linear-gradient(#9dfff2,#2fd6c0);border-radius:8px;
 border:2px solid transparent;background-clip:padding-box}
.runner-strip::-webkit-scrollbar-button{display:none}
@media(prefers-reduced-motion:no-preference){.runner-strip{scroll-behavior:smooth}}

/* 진행 바. 브라우저 기본 회색 막대 대신 게임 색으로 그린다.
   Chrome·Safari 는 ::-webkit-progress-*, Firefox 는 ::-moz-progress-bar 를 본다. */
progress{appearance:none;-webkit-appearance:none;border:0;border-radius:99px;overflow:hidden;
 background:#d6ebe4;color:var(--mint)}
progress::-webkit-progress-bar{background:#d6ebe4;border-radius:99px}
progress::-webkit-progress-value{background:linear-gradient(90deg,#28e0b8,#00b394);border-radius:99px}
progress::-moz-progress-bar{background:linear-gradient(90deg,#28e0b8,#00b394);border-radius:99px}
/* 잠긴 러너 카드는 어두운 배경 위에 있어 트랙을 낮춘다. */
.runner-card progress{background:#0c2a4a}
.runner-card progress::-webkit-progress-bar{background:#0c2a4a}
.runner-card progress::-webkit-progress-value{background:linear-gradient(90deg,#ffd27a,#ffab4d)}
.runner-card progress::-moz-progress-bar{background:linear-gradient(90deg,#ffd27a,#ffab4d)}

/* 아이템 상자: 부위 탭 + 그 부위의 옷 카드. */
.wardrobe-bar .skill-slots>b{background:#f3efff;border-left-color:var(--skill-accent,#8f7ae0)}
.wardrobe-tabs{display:flex;gap:5px;overflow-x:auto;margin:8px 0 4px;padding-bottom:4px}
.wardrobe-tabs button{flex:0 0 auto;padding:5px 12px;border-radius:20px;border:1.5px solid #d6e6ee;background:#fbfeff;color:#4d6b7a;font-size:11px;font-weight:800}
.wardrobe-tabs button[aria-selected=true]{border-color:var(--mint);background:#e9fbf6;color:#0d8f7a}
.wardrobe-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:6px 0 10px}
.wardrobe-card{display:flex;flex-direction:column;align-items:center;gap:5px;padding:10px 6px;border:2px solid #d6e6ee;border-radius:13px;background:#fbfeff;color:var(--navy)}
.wardrobe-swatch{width:42px;height:42px;border-radius:12px;background:var(--item-color,#ccc);border:2px solid #ffffff;box-shadow:0 2px 5px #0e3b4a22,inset 0 1px 0 #ffffff66}
.wardrobe-card strong{font-size:10px;line-height:1.25;text-align:center}
.wardrobe-card em{font-style:normal;font-size:9px;color:#5d7a86;font-weight:800}
.wardrobe-card[aria-pressed=true]{border-color:var(--mint);background:#effcf8}
.wardrobe-card[aria-pressed=true] em{color:#0d8f7a}
.wardrobe-card[data-owned=false] em{color:#c07a2a}
#wardrobe-notice{min-height:16px;font-size:11px;color:#0d8f7a}
#wardrobe-coins{font-size:11px;color:#5d7a86}

/* 스킬: 로비의 두 칸 + 선택 화면 격자. */
.skill-bar{width:90%;margin:0 auto 11px;display:flex;align-items:center;gap:9px;min-height:38px;padding:5px 13px;border:1px solid #ffffff;border-radius:12px;background:linear-gradient(#fffdf2,#eef8ff);box-shadow:0 3px 1px #6b736630;color:var(--navy);font-size:13px;font-weight:800}
.skill-slots{flex:1;display:flex;gap:6px;min-width:0}
.skill-slots>b{flex:1;display:flex;align-items:center;gap:4px;padding:3px 6px;border-radius:8px;background:#e7f4ff;border-left:3px solid var(--skill-accent,#19cba6);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.skill-slots>b.is-empty{color:#8aa5b5;border-left-color:#c3d6e2;background:#f0f5f8}
.skill-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;margin:10px 0}
.skill-card{display:grid;grid-template-columns:44px 1fr;grid-template-rows:auto auto auto;column-gap:9px;align-items:center;gap:3px 9px;padding:10px;border:2px solid #d6e6ee;border-radius:13px;background:#fbfeff;text-align:left;color:var(--navy)}
.skill-icon{grid-row:1/4;width:44px;height:44px;object-fit:contain;filter:drop-shadow(0 2px 3px #0e3b4a25)}
.skill-card strong{font-size:12px;border-left:3px solid var(--skill-accent,#19cba6);padding-left:6px}
.skill-card span{font-size:10px;color:#5d7a86;line-height:1.35}
.skill-card em{font-style:normal;font-size:8px;letter-spacing:1px;color:var(--skill-accent,#19cba6);font-weight:800}
.skill-card[aria-pressed=true]{border-color:var(--skill-accent,#19cba6);background:#effcf8;box-shadow:0 3px 0 #0e9c8033}
.skill-card[data-full=true]{opacity:.5}
@media(max-width:700px){.skill-grid{grid-template-columns:1fr}}

/* 업적: 미션 카드와 같은 결로, 달성한 항목은 초록으로 가라앉힌다. */
.achievement-list{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:7px;max-height:210px;overflow-y:auto}
.achievement-row{padding:9px 11px;border:1px solid #cee2e4;border-radius:12px;background:#fbfffc}
.achievement-row>div{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.achievement-row strong{font-size:12px}
.achievement-row span{font-size:10px;color:#5d7a86;white-space:nowrap;font-variant-numeric:tabular-nums}
.achievement-row progress{width:100%;height:4px;margin:5px 0 3px}
.achievement-row small{font-size:9px;color:#78929c}
.achievement-row small i{font-style:normal;color:#0d8f7a;font-weight:800}
.achievement-row.is-done{border-color:#9fe0c6;background:#eefaf3}
.achievement-row.is-done strong:after{content:' ✓';color:#0d9c7f}

/* 로비용 컴팩트 러너 선택: 얼굴·이름·레벨만, 달리기 버튼 위에 한 줄로 놓는다. */
.runner-strip-lobby{margin:0 0 9px;padding:2px 0 7px;gap:8px}
.runner-strip-lobby .runner-card{flex-basis:78px;padding:7px 5px 8px;gap:3px;border-radius:13px;background:#12325499;backdrop-filter:blur(3px)}
.runner-strip-lobby .runner-card[aria-checked=true]{background:#17406bf2}
.runner-strip-lobby .runner-portrait{width:44px;height:44px;font-size:17px;border-width:2px}
.runner-strip-lobby .runner-card>b{font-size:11px}
.runner-strip-lobby .runner-level{font-size:8px;padding:1px 0}

/* 러너 선택: 캐릭터가 가로로 늘어서고 오른쪽으로 밀어 고른다. */
.runner-strip{display:flex;gap:10px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;padding:4px 2px 10px;margin:10px -4px 0}
.runner-card{flex:0 0 132px;scroll-snap-align:center;display:flex;flex-direction:column;align-items:center;gap:4px;padding:11px 9px 12px;border-radius:15px;border:2px solid #ffffff1f;background:#123254;color:#eaf4ff;text-align:center;position:relative}
.runner-card[aria-checked=true]{border-color:var(--runner-accent,#6dfff0);background:#17406b;box-shadow:0 6px 16px #0a213a66}
.runner-portrait{width:62px;height:62px;border-radius:50%;background:#0e2a47;border:2px solid var(--runner-accent,#6dfff0);display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:900;color:var(--runner-accent,#6dfff0)}
.runner-card>b{font-size:13px;line-height:1.2}
.runner-card>em{font-style:normal;font-size:8px;letter-spacing:1px;color:var(--runner-accent,#6dfff0);font-weight:800}
.runner-level{position:relative;display:block;width:100%;font-size:9px;color:#cfe6ff;background:#0b2540;border-radius:6px;padding:2px 0;overflow:hidden}
.runner-level>i{position:absolute;left:0;bottom:0;height:2px;background:var(--runner-accent,#6dfff0)}
.runner-hp{font-size:9px;color:#ffd2d6}
.runner-perks{list-style:none;margin:2px 0 0;padding:0;display:flex;flex-direction:column;gap:2px;font-size:9px;color:#bcd8f2}
.runner-card[data-locked=true]{filter:grayscale(.75);opacity:.72}
.runner-card[data-locked=true] .runner-portrait{filter:brightness(.45)}
.runner-lock{margin:4px 0 2px;font-size:9px;color:#ffd98a;display:flex;align-items:center;gap:3px;justify-content:center}
.runner-card progress{width:100%;height:4px}
.runner-card>small{font-size:8px;color:#9fc0dd}
@media(max-width:700px){.runner-card{flex-basis:118px;padding:9px 7px 10px}.runner-portrait{width:54px;height:54px}}
.hp{display:flex;align-items:center;gap:5px;font-size:12px;color:#ffd9dd}.hp .icon-heart{font-size:12px}.hp-track{display:block;width:64px;height:6px;border-radius:6px;background:#0a2643b0;box-shadow:inset 0 1px 2px #06182c99;overflow:hidden}.hp-track>b{display:block;height:100%;width:100%;border-radius:6px;background:linear-gradient(90deg,#ff8d7a,#ffd07a);transition:width .12s linear}.hp>small{font-size:10px;font-variant-numeric:tabular-nums;min-width:22px}.hp[data-low=true]{color:#ffb1ab}.hp[data-low=true] .hp-track>b{background:linear-gradient(90deg,#ff5e51,#ff9b6a);animation:hp-pulse .7s ease-in-out infinite}@keyframes hp-pulse{50%{opacity:.55}}@media(prefers-reduced-motion:reduce){.hp[data-low=true] .hp-track>b{animation:none}}.run-panel>#pace-readout{font-size:10px}#skill-streak{position:absolute;left:50%;top:114px;transform:translateX(-50%);margin:0;padding:5px 11px;border-radius:10px;background:#123356b0;font-size:13px}.powerups{top:149px;left:6px;gap:5px}.powerup{padding:4px 7px;border-radius:5px;font-size:10px}.powerup:first-letter{font-size:12px}.mission-hud{display:none!important}.toast{top:calc(var(--safe-top) + 149px);background:#123156eb;border-radius:22px;font-size:12px;max-width:92%;white-space:normal;width:max-content;padding:9px 17px}.tutorial{top:calc(var(--safe-top) + 196px);padding:9px 14px;max-width:94%;border:1px solid #fff;border-radius:17px;background:#fff9eaf2}.tutorial strong{font-size:13px}.tutorial small{font-size:10px;white-space:normal}.turn-prompt{top:26%}.turn-prompt>b{font-size:65px}.countdown{color:#eaffdf;text-shadow:0 5px 0 #006854,0 12px 30px #14354b88}
.item-status{position:fixed;bottom:calc(var(--safe-bottom) + 29px);z-index:4;width:72px;height:75px;pointer-events:none;filter:drop-shadow(0 4px 4px #082e3c65);opacity:.7}.item-status img{width:100%;height:100%;object-fit:contain}.item-status>b{position:absolute;right:0;bottom:0;display:grid;place-items:center;min-width:25px;height:25px;padding:2px 4px;border:2px solid #c1ecff;border-radius:50%;background:#122e55;color:#fff;font-size:15px;box-shadow:0 1px 3px #123}.item-status>span{position:absolute;top:100%;left:0;right:0;text-align:center;color:white;font-size:10px;text-shadow:0 1px 4px #142c50;line-height:18px}.item-status[data-active=true]{opacity:1;filter:drop-shadow(0 0 10px #50ffdc)}.item-magnet{left:max(12px,calc(50% - 340px))}.item-shield{right:max(12px,calc(50% - 340px))}.swipe-hint{position:fixed;z-index:3;bottom:calc(var(--safe-bottom) + 5px);left:50%;transform:translateX(-50%);font-size:9px;font-weight:700;color:white;white-space:nowrap;text-shadow:0 1px 4px #123;pointer-events:none;margin:0}.swipe-hint:before{content:'⌃';display:block;font-size:36px;line-height:18px;text-align:center;margin-bottom:8px}.player-controls{bottom:calc(var(--safe-bottom) + 23px);gap:5px}.player-controls button{width:44px;height:44px;min-width:44px;border-radius:14px;font-size:22px;background:#123557a6;color:#fff;box-shadow:inset 0 1px #fff8,0 3px 2px #07385244;border:1px solid #c5fff577}.player-controls button:nth-child(2),.player-controls button:nth-child(3){background:#123557a6}.player-controls button small{font-size:8px}.rush-button{bottom:calc(var(--safe-bottom) + 90px);width:135px;min-height:30px;gap:0;border-radius:20px;box-shadow:0 2px 5px #09283422}.rush-button strong{font-size:11px}.rush-button small{display:none}.rush-button i{background:linear-gradient(90deg,#049a85,#14c9a8)}.traffic-warning{bottom:calc(var(--safe-bottom) + 133px);gap:6px}.traffic-warning span{background:transparent;color:transparent;border:0;width:44px;height:20px;font-size:9px;padding:3px 0}.traffic-warning span[data-danger=true]{background:#f77950e8;color:white}.traffic-warning span b{font-size:11px;margin-left:2px}.camera-controls{display:none}body[data-controls=touch] .player-controls{display:none}body[data-controls=touch] .swipe-hint{bottom:calc(var(--safe-bottom) + 10px)}body[data-controls=touch] .rush-button{bottom:calc(var(--safe-bottom) + 65px)}body[data-controls=touch] .traffic-warning{bottom:calc(var(--safe-bottom) + 108px)}body:not([data-phase=running]) .swipe-hint,body:not([data-phase=running]) .item-status{display:none}body:is([data-phase=cleared],[data-phase=gameover]) #game-hud{opacity:.16}body[data-crash=true] .item-status,body[data-crash=true] .swipe-hint{display:none}
/* Dialogs share the ivory, navy and mint visual system. */
.center-panel,.game-dialog,.journey-panel{background:linear-gradient(145deg,#fffef6f7,#fff9eafa);border:2px solid #fff;border-radius:27px;box-shadow:0 0 0 1px #87c9c455,0 15px 65px #082f4660;color:var(--navy);backdrop-filter:blur(10px);padding:25px;width:calc(100% - 36px);max-width:410px;max-height:calc(100dvh - 40px);overflow:auto;overscroll-behavior:contain}.center-panel{transform:translate(-50%,-50%)}.game-dialog{position:fixed;margin:auto}.game-dialog::backdrop,.journey-panel::backdrop{background:#0d2d4f80;backdrop-filter:blur(4px)}.game-dialog form{margin:0}.dialog-close,.close-button{position:absolute;top:12px;right:13px;display:grid;place-items:center;width:35px;height:35px;border-radius:50%;border:1px solid #bad3d4;background:#fffdf4;color:#164d66;font-size:27px;padding:0;line-height:1;box-shadow:0 2px 4px #1232}.game-dialog .eyebrow,.center-panel .eyebrow{display:block;font-size:9px;letter-spacing:2px;color:#547e8b;margin:8px 0}.game-dialog h2,.center-panel h2{font-size:26px;margin:8px 0 16px;line-height:1.2;letter-spacing:-1px}.game-dialog p,.center-panel>p{font-size:13px;line-height:1.7;color:#517381}.game-dialog>.primary-button{margin-top:18px}.game-dialog>.secondary-button{width:100%;margin-top:12px}.text-button{font-size:12px;color:#477787;padding:9px 3px}.character-picker{gap:8px;margin:22px 0 10px}.character-picker button{flex-direction:column;gap:8px;padding:19px 4px 14px;background:#fff;border-radius:17px}.character-picker button span{font-size:10px;line-height:1.5;font-weight:500}.character-picker button b{font-size:14px;letter-spacing:1px}.character-picker button[aria-pressed=true]{background:#caffed;border:2px solid #06b694;box-shadow:0 4px 0 #128b7d28}.character-picker i{width:43px;height:43px;box-shadow:inset 0 3px #fff5,0 3px 0 #174f641a}.runner-dot:after{display:grid;place-items:center;content:'T';height:100%;color:white;font-size:28px;font-weight:900}.runner-dot.vivi:after{content:'V'}.destination-card{position:relative;min-height:125px;border:2px solid #fff;background:linear-gradient(125deg,#b5edff,#e9fffa 60%,#9aefd7);padding:22px 16px;border-radius:20px;display:flex;align-items:center;gap:12px;box-shadow:0 4px 0 #5ca6bc26;margin:20px 0}.destination-card>div{display:flex;flex-direction:column;gap:7px}.destination-card b{font-size:25px}.destination-card span{font-size:11px}.destination-card>strong{position:absolute;right:14px;bottom:10px;font-size:10px;color:#447086}.mode-picker{border-radius:20px;background:#e6f0ed;padding:5px;gap:5px}.mode-picker button{padding:13px 4px;border-radius:15px;font-size:13px}.mode-picker button[aria-pressed=true]{background:linear-gradient(#13d6ad,#00ac91);box-shadow:0 2px 0 #07685c3d}.mode-picker button small{font-size:10px}.muted{font-size:11px!important;color:#78939a!important;text-align:center}.wallet-hero{display:flex;align-items:center;justify-content:center;gap:20px;margin:30px 0;color:#008d7a}.wallet-hero .data-icon{transform:scale(1.65);margin:18px}.wallet-hero strong{font-size:32px;letter-spacing:-1px}.wallet-detail{display:flex;justify-content:space-between;padding:14px 0;border-top:1px solid #d3e1dc;font-size:13px}.data-notice{padding:13px;background:#e8f2ef;border-radius:12px;font-size:11px!important}.friends-art{display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px;margin:24px 0;color:#00ac8f}.friends-art svg{width:90px;height:90px;fill:currentColor}.friends-art span{font-size:11px;letter-spacing:3px}.settings-panel label{font-size:13px;margin-top:17px}.settings-panel select{max-width:180px}.settings-panel .camera-controls{position:static;display:flex;flex-wrap:wrap;transform:none;margin:15px 0 0;background:#184264}.settings-panel .camera-controls button{padding:8px 7px}.settings-panel #sound{display:grid;width:100%;border-radius:14px;height:40px;margin-top:12px;font-size:18px}.journey-panel{max-width:520px}.journey-panel h2{font-size:26px}.mission-card{border-color:#b3e9dc;background:#f4fff8}.gear-row button{color:#fff;background:linear-gradient(#1bd7b1,#00a68d);box-shadow:inset 0 1px #c5ffed}.gear-row button:disabled{color:#788891;background:#e3e9eb}.journey-panel .journey-help{font-size:11px!important}
.result-panel{padding:19px 22px 14px;max-width:380px}.result-medal{position:relative;height:88px;display:flex;align-items:center;justify-content:center;margin-top:0}.result-stars{position:absolute;left:50%;top:49px;transform:translateX(-50%);font-size:19px;letter-spacing:11px;white-space:nowrap;color:#ffd23c;text-shadow:0 2px 0 #c38120;margin:0;pointer-events:none}.result-panel .eyebrow{display:none}.result-panel h2.result-banner{position:relative;z-index:1;background:linear-gradient(#0ccbac,#009b82);color:white;border:1px solid #008a78;border-radius:8px 8px 40% 40%/8px 8px 12% 12%;padding:14px 5px;margin:0 -10px 10px;font-weight:900;font-size:29px;box-shadow:inset 0 2px #8effe0,0 5px 0 #00675366;text-shadow:0 2px 0 #007662}.result-panel>#result-message{font-size:11px;margin:12px 0 10px;line-height:1.5}.result-data-hero{display:flex;flex-direction:column;gap:3px}.result-data-hero>span{font-size:13px}.result-data-hero>strong{font-size:47px;line-height:1.2;font-weight:900;color:#00b398;letter-spacing:-2px;text-shadow:0 2px 0 #005e60,0 3px 3px #154f5522}.result-data-hero small{font-size:.78em}.result-stats{padding:13px 0 10px;margin-top:12px;justify-content:space-around}.result-stats>div{display:grid;grid-template-columns:36px auto;gap:3px 8px;text-align:left;align-items:center}.result-stats>div+div{border-left:1px solid #c6d9d4;padding-left:18px}.result-stats .item-icon,.result-stats .ui-icon{grid-row:span 2;width:35px;height:35px}.result-stats span{font-size:11px;color:#315875}.result-stats b{font-size:19px}.result-score{flex-direction:row;gap:8px;align-items:center;justify-content:center;margin:9px 0}.result-score>span{font-size:10px;letter-spacing:0;color:#547481}.result-score>span b{color:#234b65}.result-score>b{font-size:8px}.data-balance{display:flex;align-items:center;gap:8px;background:#e4efec;padding:9px 12px;border-radius:13px;font-size:12px;box-shadow:inset 0 1px 2px #13433812}.data-balance>b{margin-left:auto;font-size:20px;white-space:nowrap}.data-balance .data-icon{width:23px;height:25px}.result-panel>.primary-button{margin-top:14px;min-height:51px;font-size:22px;border-radius:23px}.result-actions{display:flex;gap:9px;margin:13px 0}.result-actions #restart{flex:1;font-size:19px}.result-actions #restart>b{font-size:31px;line-height:20px}.result-actions #result-home{width:52px}.result-rewards{font-size:11px;background:transparent;padding:0;line-height:1.5}.result-rewards p{font-size:10px;margin:0;color:#638087}.result-rewards strong{font-size:11px;color:#088a7a}.result-stamps{margin-top:6px;gap:6px}.result-stamps span{width:24px;height:24px;font-size:12px;border-width:1px}.result-panel .save-note{margin:6px 0 0!important;font-size:9px!important;line-height:1.5!important}.loading{background:radial-gradient(ellipse at 50% 35%,#225573,#112647);color:var(--ivory)}.loading-brand b{color:#1ee2bd}.load-track{height:7px}.load-track i{background:linear-gradient(90deg,#00b498,#6effd7)}
@media(max-width:900px){.wordmark,.lobby-caption{display:none}}
@media(min-width:900px){:root{--ui-width:490px}.lobby-caption{left:calc(50% - 300px);top:35%;text-align:left}.lobby-caption h1{font-size:40px}.lobby-caption>span{font-size:12px}.lobby-caption p{font-size:13px}.city-selector{top:calc(var(--safe-top) + 65px)}.lobby-bottom{bottom:calc(var(--safe-bottom) + 90px)}.lobby .bottom-nav{min-height:70px}.run-ribbon{height:51px}.run-ribbon b{font-size:23px}}
@media(max-width:370px){:root{--safe-top:max(11px,env(safe-area-inset-top))}.hud{width:calc(100% - 20px)}.wallet-pill,.avatar-chip{font-size:12px;padding-right:6px;gap:2px}.lobby-wallet{gap:4px}.avatar-face{width:40px;height:40px}.wallet-pill .item-icon{width:25px;height:25px}.wallet-pill .data-icon{width:21px;height:23px}.icon-button{width:38px;height:38px}.run-ribbon{height:44px;padding-right:47px;gap:2px}.run-ribbon b{font-size:17px}.run-ribbon small{font-size:12px}.run-ribbon .distance-pill{padding:0 8px 0 6px;gap:3px}.run-ribbon .distance-pill svg{width:23px;height:23px}.run-ribbon .item-icon{width:25px;height:25px}.run-ribbon .data-icon{width:21px;height:24px;margin:2px 3px}.run-ribbon>span{gap:3px}body:is([data-phase=running],[data-phase=countdown],[data-phase=paused]) #pause{width:41px;height:41px}.route-label{font-size:10px}.run-subline{margin-top:5px}.lobby-caption{top:calc(var(--safe-top) + 124px)}.lobby-caption h1{font-size:25px}.lobby-actions .primary-button{min-height:55px;font-size:24px}.character-open{width:90px;font-size:11px}.lobby-bottom{width:calc(100% - 28px)}.mission-ticket{width:90%;font-size:12px}.mission-ticket strong{font-size:18px}.item-status{width:60px;height:63px}.player-controls{gap:2px}.player-controls button{width:42px;min-width:42px}.swipe-hint{font-size:8px}.game-dialog,.center-panel{padding:22px 18px;width:calc(100% - 26px)}.result-panel{padding:16px}.result-panel h2.result-banner{font-size:24px}.result-data-hero>strong{font-size:40px}}
@media(max-height:700px){.lobby-caption{display:none}.lobby-bottom{bottom:calc(var(--safe-bottom) + 76px)}.bottom-nav{min-height:64px}.lobby-actions .primary-button{min-height:54px}.lobby-record{padding-top:9px}.mission-ticket{margin-bottom:10px;min-height:36px}.result-medal{height:56px}.result-medal .trophy-icon{height:56px;width:64px}.trophy-icon:after{font-size:51px}.result-stars{top:30px;font-size:16px}.result-panel h2.result-banner{font-size:24px;padding:10px 5px}.result-data-hero>strong{font-size:37px}.result-panel>#result-message{font-size:10px;margin:9px 0}.result-stats{padding:10px 0;margin-top:8px}.result-panel>.primary-button{min-height:45px;margin-top:10px}.result-actions{margin:10px 0}.result-stamps{display:none}}
@media(max-height:500px) and (orientation:landscape){.lobby-bottom{left:calc(50% + 25vw);bottom:calc(var(--safe-bottom) + 66px);max-width:290px}.bottom-nav{left:calc(50% + 25vw);max-width:300px;min-height:55px}.city-selector{left:25%;top:calc(var(--safe-top) + 66px)}.hud{max-width:420px;left:25%;width:46%}.lobby-record{font-size:9px}.lobby-record button{font-size:9px}.lobby-actions .primary-button{font-size:22px}.character-open{width:85px}.mission-ticket{font-size:11px}.lobby-wallet .wallet-pill{font-size:12px}.run-subline{display:none}.tutorial{top:116px}.toast{top:109px}.powerups{top:95px}.turn-prompt{top:25%}#skill-streak{top:91px}.item-status{width:54px;height:56px}.swipe-hint{font-size:8px}.rush-button{bottom:calc(var(--safe-bottom) + 77px)}.traffic-warning{bottom:calc(var(--safe-bottom) + 112px)}}
@media(prefers-reduced-motion:reduce){.primary-button,.route-track i{transition:none}}

.runner-dot[data-portrait=true]:after{content:none}.character-picker .runner-dot[data-portrait=true]{width:56px;height:56px;border:2px solid #fff;box-shadow:0 3px 6px #1233}

/* Four real runners remain easy to select on narrow phones. */
.character-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.runner-dot.orange{background:#ff7d42}.character-picker button b{font-size:13px}
.tutorial{max-width:310px;padding:10px 13px;border-radius:17px;background:#143451df;color:#fff;box-shadow:0 4px 14px #16304922}.tutorial small{color:#d2e9ed}

/* Keep the road's vanishing point and incoming traffic readable. */
.tutorial{top:calc(var(--safe-top) + 123px);max-width:258px;padding:7px 10px;gap:8px;border-color:#b9e7ed80}.tutorial strong{font-size:12px}.tutorial small{font-size:9px;line-height:1.3}.tutorial>span{font-size:23px}
.toast{top:auto;bottom:calc(var(--safe-bottom) + 159px);max-width:280px;padding:7px 12px;font-size:11px}
body[data-phase=paused] .tutorial,body[data-phase=paused] .toast{display:none}
@media(max-height:500px) and (orientation:landscape){.tutorial{top:100px;left:25%;max-width:200px}.toast{bottom:80px}}

/* Six complete visual destinations; these cards select the real 3D scene. */
.city-flag{font-style:normal;font-size:22px;line-height:1;flex:none}
.city-grid{display:grid;grid-template-columns:1fr 1fr;gap:9px;margin:12px 0 18px}
.city-card{min-height:112px;padding:0;overflow:hidden;border:2px solid #d8e5e9;border-radius:14px;background:#f7faf6;color:#123454;text-align:left;box-shadow:0 3px 0 #d3dfe4}
.city-card[aria-pressed=true]{border-color:#00aa98;box-shadow:0 0 0 2px #61e6cd}
.city-card>span:last-child{display:flex;align-items:center;gap:5px;padding:9px 7px;font-size:11px;line-height:1.4}
.city-card i{font-size:19px;font-style:normal}.city-art{display:block;height:70px;background:linear-gradient(150deg,#91d8ff,#daf3ef);position:relative;overflow:hidden}
.city-art:before{content:'';position:absolute;bottom:0;left:20%;width:18px;height:42px;background:#b6c7c7;box-shadow:23px 10px #d2d7ce,50px -7px #a2bac9,73px 14px #c4d2d8}
.city-art:after{content:'';position:absolute;left:47%;bottom:0;width:5px;height:61px;background:#df4e4c;clip-path:polygon(46% 0,58% 0,65% 55%,100% 100%,0 100%,39% 55%);transform:scaleX(3)}
.city-nagoya .city-art{background:linear-gradient(#b0dded,#fbe5cf)}.city-nagoya .city-art:after{width:45px;height:50px;left:32%;transform:none;background:repeating-linear-gradient(#366f64 0 8px,#f0e4c6 8px 16px);clip-path:polygon(35% 0,65% 0,100% 100%,0 100%)}
.city-shanghai .city-art:after{background:#cd73a1;clip-path:polygon(47% 0,55% 0,60% 30%,80% 40%,60% 50%,63% 65%,100% 80%,63% 90%,65% 100%,30% 100%,34% 90%,0 80%,32% 65%,37% 50%,20% 40%,39% 30%)}
.city-paris .city-art:after{background:#8c7c60}.city-paris .city-art:before{background:#ead5b5;box-shadow:23px 10px #edddbe,50px -7px #f1dfbc,73px 14px #d8c6ac}
.city-bangkok .city-art:after{background:#d5a93b;transform:scaleX(6);clip-path:polygon(50% 0,62% 30%,80% 50%,64% 50%,100% 80%,78% 80%,100% 100%,0 100%,20% 80%,0 80%,36% 50%,20% 50%,38% 30%)}
.city-hongkong .city-art{background:linear-gradient(#103167,#3785b0)}.city-hongkong .city-art:after{width:16px;left:51%;transform:none;clip-path:polygon(30% 0,80% 0,100% 100%,0 100%);background:repeating-linear-gradient(#eacf8e 0 2px,#4e7b9c 2px 6px)}
@media(max-height:650px){.city-card{min-height:85px}.city-art{height:46px}.city-grid{gap:7px}}

/* Tokyo reference framing: two readable ribbons and square power-up panels. */
body[data-city=tokyo] .run-subline{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
body[data-city=tokyo] .item-status{width:78px;height:78px;opacity:1;bottom:calc(var(--safe-bottom) + 28px);background:url('https://worldruncdn.ttok.im/assets/v1/b7be36c33823a814aab3cbb27edc1193c7e821f82727e219917c9594b4a4bba9/item-buttons.webp') 0 0/200% 100% no-repeat;filter:drop-shadow(0 3px 3px #0b294b60)}
body[data-city=tokyo] .item-status.item-shield{background-position:100% 0}
body[data-city=tokyo] .item-status img{visibility:hidden}
body[data-city=tokyo] .item-status>span{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}
body[data-city=tokyo] .item-status>b{right:0;bottom:0;font-size:14px;min-width:24px;height:24px}
body[data-city=tokyo] .item-status[data-active=true]{filter:drop-shadow(0 0 9px #51ffe3)}
body[data-city=tokyo] #rush:disabled{visibility:hidden}
@media(max-width:370px){body[data-city=tokyo] .item-status{width:66px;height:66px}}
