:root{color-scheme:dark;--bg:#14110f;--panel:#1d1815ee;--line:#4a3d36;--stone:#775c55;--torch:#ee8e2e;--red:#da4e38;--yellow:#facb3e;--green:#97da3f;--frost:#8fdcff;--text:#f3e9dc;--muted:#a8998a;font-family:Inter,"Segoe UI",system-ui,sans-serif}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{margin:0;min-height:100%;background:radial-gradient(circle at 50% 0,#2a211c 0,#14110f 55%);color:var(--text);overscroll-behavior:none}
body{overflow-x:hidden}
button{font:inherit;color:inherit}
.topbar{height:58px;display:flex;align-items:center;justify-content:space-between;padding:0 max(16px,calc((100vw - 1120px)/2));border-bottom:1px solid #ffffff10;background:#0d0b0acc}
.brand{color:var(--text);text-decoration:none;letter-spacing:.12em;font-size:13px}
.brand b{color:var(--torch)}
.top-actions{display:flex;gap:8px}
.icon-button,.result-actions button{border:1px solid var(--line);background:#211b18;color:#d3c4b4;border-radius:7px;padding:8px 12px;cursor:pointer;font-size:12px;font-weight:700;letter-spacing:.07em}
main{padding:18px 14px 40px}
.game-shell{width:min(1100px,100%);margin:auto}

.wall-hud{width:min(680px,78%);margin:0 auto 12px}
.wall-hud>div:first-child{display:flex;justify-content:space-between;align-items:end}
.wall-hud span{font-weight:900;letter-spacing:.16em}
.wall-hud small{color:#e8c9a8}
.bar{height:10px;border:1px solid #ffffff25;border-radius:2px;background:#0a0807;overflow:hidden}
.bar i{display:block;width:100%;height:100%;transition:width .12s linear}
.wall-bar{height:16px;margin-top:5px;box-shadow:0 0 18px #ee8e2e22}
.wall-bar i{background:linear-gradient(90deg,#5d4a43,#aa8d7a,#d3bfa9)}
body[data-wall="2"] .wall-bar i{background:linear-gradient(90deg,#8a5a1c,var(--torch))}
body[data-wall="3"] .wall-bar i,body[data-wall="4"] .wall-bar i{background:linear-gradient(90deg,#7c1f1a,var(--red))}
body[data-wall="4"] .wall-hud{animation:alarm .5s infinite alternate}
.wall-hud .siege{flex:1;margin-left:12px;font-style:normal;font-size:12px;font-weight:800;letter-spacing:.04em;color:var(--red);animation:alarm .4s infinite alternate}
body[data-siege] .wall-bar{border-color:var(--red);box-shadow:0 0 0 1px var(--red),0 0 18px #da4e3899}

.arena{position:relative;aspect-ratio:16/9;max-height:calc(100vh - 150px);margin:auto;overflow:hidden;border:1px solid #57463d;border-radius:10px;background:#14110f;box-shadow:0 18px 70px #000a}
canvas{image-rendering:pixelated}
#gameCanvas{display:block;width:100%;height:100%;touch-action:none}
body[data-placing] #gameCanvas{cursor:crosshair}
.status-hud{position:absolute;z-index:4;left:0;right:0;top:0;display:flex;justify-content:space-between;padding:10px 14px;pointer-events:none;font-size:13px;font-weight:800;letter-spacing:.1em;text-shadow:0 2px 0 #000,0 0 8px #000}
.status-hud .wave{color:var(--yellow)}
.status-hud .tally{display:flex;gap:16px}
.status-hud b{font:900 15px ui-monospace,Consolas,monospace}
.boss-hud{position:absolute;z-index:4;left:50%;bottom:108px;transform:translateX(-50%);width:min(420px,44%);text-align:center;font-size:11px;font-weight:900;letter-spacing:.2em;color:#ffb3a6;text-shadow:0 2px 0 #000;pointer-events:none}
.boss-bar{height:9px;margin-top:3px}
.boss-bar i{background:linear-gradient(90deg,#3d734f,var(--green))}
body[data-rage] .boss-bar i{background:linear-gradient(90deg,#7c1f1a,var(--red))}
.combo-text{position:absolute;z-index:5;right:16px;top:44px;font:900 22px ui-monospace,Consolas,monospace;color:var(--yellow);text-shadow:0 2px 0 #000,0 0 12px #ee8e2e88;pointer-events:none;opacity:0;transition:opacity .2s}
.combo-text.on{opacity:1}
.combo-text.pop{animation:pop .3s}
.streak-text{position:absolute;z-index:5;right:16px;top:74px;font:900 16px ui-monospace,Consolas,monospace;letter-spacing:.08em;color:#ffd9d2;text-shadow:0 2px 0 #000,0 0 12px #da4e38;pointer-events:none;opacity:0;transform-origin:right center}
.streak-text.pop{animation:streak 1.6s forwards}
.streak-text.big{font-size:30px;color:var(--yellow)}
.rush-warning{position:absolute;z-index:8;left:50%;top:27%;transform:translateX(-50%);padding:6px 16px;border:2px solid var(--red);border-radius:6px;background:#3a0f0cd9;color:#ffd9d2;font-size:clamp(13px,2.4vw,22px);font-weight:900;letter-spacing:.12em;white-space:nowrap;pointer-events:none;animation:alarm .35s infinite alternate}
#gameCanvas.zoom{animation:zoom .28s}
.arena::after{content:"";position:absolute;inset:0;z-index:6;pointer-events:none;opacity:0;box-shadow:inset 0 0 110px 26px #da4e38}
body[data-wall="3"] .arena::after{animation:breach 1.5s infinite}
body[data-wall="4"] .arena::after{animation:breach .8s infinite}
.announcement{position:absolute;left:50%;top:44%;transform:translate(-50%,-50%);font-size:clamp(28px,6vw,64px);font-weight:1000;letter-spacing:.06em;text-align:center;white-space:nowrap;text-shadow:0 4px 0 #000,0 0 30px #da4e38;pointer-events:none;z-index:8}
.prep-bar{position:absolute;z-index:9;left:50%;bottom:106px;transform:translateX(-50%);display:flex;align-items:center;gap:10px;padding:8px 12px;border:1px solid var(--line);border-radius:9px;background:#1d1815e6;font-size:12px;white-space:nowrap}
.prep-bar b{color:var(--yellow)}
.prep-bar button{border:1px solid #6a574c;background:#2c231f;border-radius:6px;padding:7px 11px;cursor:pointer;font-size:12px;font-weight:700}
.prep-bar button:hover:not(:disabled){border-color:var(--torch)}
.prep-bar button:disabled{opacity:.45;cursor:not-allowed}
kbd{margin-left:6px;padding:2px 5px;background:#0005;border:1px solid #fff4;border-radius:3px;font-size:10px}
.place-hint{position:absolute;z-index:9;left:50%;bottom:154px;transform:translateX(-50%);padding:5px 11px;border:1px solid var(--yellow);border-radius:6px;background:#16120fe0;color:var(--yellow);font-size:12px;font-weight:700;white-space:nowrap;pointer-events:none}
/* 배치 시너지: 학습 한 줄(놓을 자리 안내 위) · 켜질 때 알림 · 아군 설명 상자 · 학습이 권하는 버튼 */
.tutorial-hint{position:absolute;z-index:9;left:50%;bottom:190px;transform:translateX(-50%);max-width:calc(100% - 24px);padding:6px 14px;border:1px solid var(--frost);border-radius:6px;background:#0d1820e8;color:#e6f9ff;font-size:13px;font-weight:800;text-align:center;pointer-events:none;box-shadow:0 0 16px #8fdcff44}
.synergy-banner{position:absolute;z-index:8;left:50%;top:64%;transform:translateX(-50%);display:grid;justify-items:center;gap:2px;white-space:nowrap;pointer-events:none;text-shadow:0 2px 0 #000,0 0 14px #4f9dff}
.synergy-banner.show{animation:synergy 1.1s forwards}
.synergy-banner b{font-size:clamp(14px,2.6vw,24px);font-weight:1000;letter-spacing:.14em;color:#cdf4ff}
.synergy-banner span{font:900 12px ui-monospace,Consolas,monospace;letter-spacing:.08em;color:#fff}
.synergy-banner.new b{color:var(--yellow);text-shadow:0 2px 0 #000,0 0 16px var(--torch)}
.synergy-tip{position:absolute;z-index:10;transform:translate(-50%,-100%);display:grid;gap:7px;width:max-content;max-width:min(270px,80%);padding:8px 11px;border:1px solid var(--frost);border-radius:6px;background:#0d1218f2;font-size:11px;line-height:1.35;text-align:left;pointer-events:none;box-shadow:0 8px 24px #000a}
.synergy-tip.below{transform:translate(-50%,0)}
.synergy-tip b{display:block;color:#cdf4ff;letter-spacing:.08em}
.synergy-tip b.trio{color:var(--yellow)}
.synergy-tip span{display:block;color:var(--muted);font-size:10px}
.synergy-tip em{display:block;font-style:normal;color:var(--text)}
.place-synergies{gap:3px;max-width:min(330px,94%);padding:7px 10px}
.place-synergies div{display:flex;gap:7px;align-items:baseline;white-space:nowrap}
.place-synergies b{display:inline}
.place-synergies .unknown b{color:var(--muted)}
.place-synergies span{display:inline}
.place-synergies small{margin-left:auto;color:var(--muted);font-size:9px}
.build-item.hint{animation:hint .7s infinite alternate}
.toggle small{margin-left:6px;color:var(--muted);font-size:10px}
.build-bar{position:absolute;z-index:9;left:50%;bottom:8px;transform:translateX(-50%);display:flex;gap:5px;padding:5px;border:1px solid var(--line);border-radius:10px;background:#16120fdb;max-width:calc(100% - 12px)}
.build-list{display:flex;gap:5px}
.build-item{position:relative;display:grid;justify-items:center;align-content:start;gap:1px;width:64px;padding:5px 2px 4px;border:1px solid #57463d;border-radius:7px;background:#2c231f;cursor:pointer;line-height:1}
.build-item.soldier{background:#242b22}
.build-item.trap{background:#28262b}
.build-item canvas,.build-item .glyph{width:56px;height:46px}
.build-item .glyph{display:grid;place-items:center;font-size:24px;color:var(--green)}
.build-item span{font-size:8.5px;font-weight:800;letter-spacing:.03em;color:#d3c4b4}
.build-item em{font:900 12px ui-monospace,Consolas,monospace;color:var(--yellow)}
.build-item small.up{min-height:1em;font:800 9px ui-monospace,Consolas,monospace;color:#9fd8ff}
.build-item .short{color:var(--red)}
.build-item em.word::before{display:none}
.build-item kbd{position:absolute;left:3px;top:3px;margin:0;padding:0 3px;font-size:9px}
.build-item i{position:absolute;right:4px;top:3px;font:800 10px ui-monospace,Consolas,monospace;color:var(--green)}
.build-item:hover:not(:disabled){border-color:var(--torch)}
.build-item.active{border-color:var(--yellow);box-shadow:0 0 0 1px var(--yellow),0 0 14px #facb3e66}
.build-item:disabled{opacity:.42;cursor:not-allowed}

.overlay{position:absolute;inset:0;display:none;place-items:center;z-index:12;background:linear-gradient(#0d0b0ac2,#0d0b0ae8);padding:18px;overflow:auto}
.overlay.visible{display:grid}
.panel{width:min(560px,94%);padding:28px;text-align:center;border:1px solid #57463d;background:linear-gradient(145deg,#28201cec,#16120fec);border-radius:12px;box-shadow:0 20px 65px #000b;position:relative}
.menu-panel h1{font-size:clamp(40px,7vw,80px);line-height:.82;margin:10px 0 18px;letter-spacing:-.05em}
.menu-panel h1 span{color:var(--torch);text-shadow:0 0 35px #ee8e2e66}
.eyebrow{font-size:11px;letter-spacing:.22em;color:var(--torch);font-weight:800}
.tagline{color:#d3c4b4;letter-spacing:.12em;font-size:12px}
.record{margin:20px auto;display:grid;gap:3px}
.record span,.result-grid span{color:var(--muted);font-size:10px;letter-spacing:.15em}
.record b{font:900 27px ui-monospace,monospace}
.record small{color:var(--yellow);font-weight:800}
.primary{border:0;border-radius:7px;padding:15px 28px;background:linear-gradient(90deg,#c0611d,#f09a3e);box-shadow:0 8px 25px #ee8e2e44;color:#1b1109;font-weight:900;letter-spacing:.1em;cursor:pointer}
.help{display:grid;gap:5px;margin:18px 0 0;color:var(--muted);font-size:11px}
.help b{color:#f3e9dc;margin-right:4px}
.help i{font-style:normal;opacity:.75}
.result-actions{display:flex;justify-content:center;gap:8px}
.panel h2{font-size:35px;margin:8px 0 20px;letter-spacing:.04em}
.choice-list{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.choice-list button{border:1px solid #57463d;background:#2c231f;border-radius:8px;padding:18px 12px;cursor:pointer;text-align:left}
.choice-list button:hover{border-color:var(--torch);transform:translateY(-2px)}
.choice-list b,.choice-list span,.choice-list em{display:block}
.choice-list span{font-size:12px;color:#e8d9c8;margin-top:7px}
.choice-list em{font-style:normal;font-size:10px;color:var(--muted);margin-top:8px;letter-spacing:.1em}
.result-panel h2{font-size:58px;color:var(--yellow);text-shadow:0 0 24px #facb3e55}
.result-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:12px}
.result-grid div{padding:10px;border:1px solid #453831;background:#16120f}
.result-grid b{display:block;font-size:19px;margin-top:3px}
.best-line{margin:0 0 14px;font-size:12px;color:var(--muted);letter-spacing:.08em}
.best-line.new{color:var(--yellow);font-weight:800}
.reward-line{min-height:1.2em;margin:0 0 14px;font-size:12px;color:var(--green);letter-spacing:.04em}
.result-panel>.primary{width:100%;font-size:20px;padding:18px;margin-bottom:10px}
.compact{width:330px}
.close{position:absolute;right:12px;top:10px;border:0;background:none;font-size:28px;cursor:pointer}
#settingsList{display:grid;gap:12px;text-align:left}
#settingsList label,.toggle,.slider-row{display:grid;grid-template-columns:120px 1fr 44px;align-items:center;gap:10px;font-size:12px}
.toggle{grid-template-columns:1fr auto;margin-top:18px}
.slider-row{margin-top:18px;text-align:left}
.slider-row small{display:block;color:var(--muted);font-size:10px}
.settings-panel input[type=range]{accent-color:var(--torch);width:100%}
.settings-panel input[type=checkbox]{width:22px;height:22px;accent-color:var(--torch)}
.settings-panel select{font:inherit;font-size:12px;padding:4px 8px;background:#1b2129;color:inherit;border:2px solid var(--torch);border-radius:4px}

/* 화면 테두리: 사용자가 준 UI 시트에서 자른 조각(assets/ui — scripts/slice-last-wall-ui.py)을 9-slice 로 늘린다. 글자 · 값은 HTML 이 얹는다.
   border-image 의 앞 수는 조각의 테두리 두께(원본 px), / 뒤는 화면에서의 두께다. */
.panel{border:6px solid transparent;border-image:url(assets/ui/panel.png) 18 fill / 16px;border-radius:0;background:none}
.bar{border:2px solid #4a3a30;border-radius:3px;box-shadow:inset 0 0 0 1px #000}
.build-bar{border-color:#3a2c25;background:#0d0a09d9}
.build-item,.build-item.soldier,.build-item.trap{border:2px solid transparent;border-image:url(assets/ui/frame.png) 26 fill / 12px;border-radius:0;background:none}
.build-item:hover:not(:disabled){border-image-source:url(assets/ui/frame-hover.png)}
.build-item.active{border-color:transparent;border-image-source:url(assets/ui/frame-selected.png);box-shadow:0 0 14px #facb3e66}
.build-item:disabled{opacity:1}
.build-item:disabled canvas,.build-item:disabled .glyph{filter:grayscale(.85) brightness(.6)}
.build-item:disabled em{color:var(--red)}
/* 3단계 메타 성장: 잠긴 아군 · 판 중 BEST · SOUL · 게임오버 줄 · 영구 강화 창 · 코덱스 */
.build-item.locked canvas{filter:brightness(0) opacity(.55)}
.build-item.locked em{color:var(--muted)}
.build-item.locked em::before{content:"🔒";background:none;width:auto;height:auto;margin-right:2px}
.status-hud .wave-line{display:flex;align-items:baseline;gap:8px}
.best-chip{font:900 11px ui-monospace,Consolas,monospace;font-style:normal;letter-spacing:.08em;color:#cdf4ff}
.best-chip:empty{display:none}
.soul-chip{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:800;letter-spacing:.08em;color:#d8c9ff}
.soul-chip b{font:900 15px ui-monospace,Consolas,monospace;color:#f0e8ff}
.soul-gem{display:inline-block;width:10px;height:10px;transform:rotate(45deg);background:linear-gradient(135deg,#f0e8ff,#9b7bff);box-shadow:0 0 8px #9b7bffaa}
.meta-actions{display:flex;justify-content:center;align-items:center;gap:8px;margin-top:12px;flex-wrap:wrap}
.meta-actions button{border:2px solid transparent;border-image:url(assets/ui/button.png) 12 fill / 9px;background:none;padding:8px 14px;cursor:pointer;font-size:12px;font-weight:800;letter-spacing:.08em;color:#d3c4b4}
.meta-actions button:hover{filter:brightness(1.15)}
.master-badge{margin:-8px 0 12px;font-size:11px;font-weight:900;letter-spacing:.2em;color:var(--yellow);text-shadow:0 0 12px #facb3e88}
.result-grid .soul-cell b{color:#d8c9ff}
.result-grid .minor b{font-size:15px;color:#cbbcad}
.soul-line,.unlock-line{margin:0 0 8px;font-size:11px;line-height:1.5;color:var(--muted);letter-spacing:.03em}
.unlock-line{white-space:pre-line;color:#cdf4ff;font-weight:800;letter-spacing:.06em}
.opened-line{margin:0 0 4px;font-size:10.5px;color:var(--yellow)}
.opened-line:empty{display:none}
/* 메타 후속: N AVAILABLE · 막 열린 카드(NEW · 첫 설치 할인) · 강화 창 계열 · 추천 · 구매 직후 한 줄 · START NEXT RUN */
.available{margin-left:4px;padding:1px 5px;border-radius:8px;background:#9b7bff;color:#120d20;font:900 9px ui-monospace,Consolas,monospace;letter-spacing:.04em;vertical-align:1px}
.build-item.fresh{box-shadow:0 0 0 1px #cdf4ff,0 0 10px #8fdcff66;animation:fresh 1s 2}
.build-item.fresh::before{content:"NEW";position:absolute;top:-7px;left:50%;transform:translateX(-50%);padding:0 4px;border-radius:3px;background:#cdf4ff;color:#0d1218;font:900 8px ui-monospace,Consolas,monospace;letter-spacing:.06em;z-index:1}
.build-item.sale em{color:var(--green)}
.build-item.sale em::after{content:" -50%";font-size:9px}
.meta-group{margin:8px 0 0;font-size:10px;font-weight:900;letter-spacing:.22em;color:var(--torch);text-align:left}
.meta-row.recommended{border-color:#9b7bff;box-shadow:0 0 0 1px #9b7bff55}
.meta-row.recommended span{color:#d8c9ff}
.meta-bought{min-height:1.3em;margin:-4px 0 6px;font-size:11px;font-weight:800;color:var(--green);letter-spacing:.03em}
.meta-bought.show{animation:pop .3s}
.meta-start{width:100%;margin-top:12px;font-size:15px;padding:12px}
@keyframes fresh{50%{box-shadow:0 0 0 2px #cdf4ff,0 0 18px #8fdcffcc}}
.result-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
.result-grid div{min-width:0}
@media(max-width:420px){
  .result-grid{gap:5px}
  .result-grid div{padding:7px 2px}
  .result-grid span{font-size:8.5px;letter-spacing:.04em;white-space:nowrap}
  .result-grid b{font-size:15px;white-space:nowrap}
  .result-grid .minor b{font-size:13px}
}
.result-actions{flex-wrap:wrap}
.soul-line{color:#cfc2ec}
.meta-panel,.codex-panel{width:min(640px,96%);max-height:min(92%,640px);overflow:auto}
.meta-head{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:-6px 0 12px;flex-wrap:wrap}
.meta-head small{font-size:11px;color:var(--muted)}
.meta-list{display:grid;gap:6px;text-align:left}
.meta-row{display:grid;grid-template-columns:130px 70px 1fr auto;align-items:center;gap:10px;padding:7px 10px;background:#0d0a09aa;border:1px solid #3a2c25;border-radius:4px;font-size:12px}
.meta-row b{letter-spacing:.06em;color:var(--text)}
.meta-row i{font-style:normal;letter-spacing:.12em;color:#b59cff;font-size:11px}
.meta-row span{color:#cbbcad}
.meta-row button{min-width:88px;border:2px solid transparent;border-image:url(assets/ui/button.png) 12 fill / 9px;background:none;padding:6px 10px;cursor:pointer;font:800 11px ui-monospace,Consolas,monospace;color:#f0e8ff}
.meta-row button:disabled{opacity:.45;cursor:not-allowed}
.codex-panel h2{font-size:clamp(20px,6vw,32px)}
.codex-milestones{display:flex;justify-content:center;gap:6px;flex-wrap:wrap;margin:-8px 0 12px}
.milestone{padding:3px 8px;border:1px solid #3a2c25;border-radius:10px;font-size:10px;color:var(--muted)}
.milestone.done{border-color:var(--yellow);color:var(--yellow)}
.codex-list{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;text-align:left}
.codex-card{display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;column-gap:10px;row-gap:2px;align-items:center;padding:7px 9px;background:#0d0a09aa;border:1px solid #3a2c25;border-radius:4px}
.codex-card b{grid-column:2;font-size:12px;letter-spacing:.08em;color:#cdf4ff}
.codex-card.trio b{color:var(--yellow)}
.codex-card em{grid-column:2;font-style:normal;font-size:10.5px;line-height:1.35;color:#cbbcad}
.codex-card.unknown b{color:var(--muted)}
.codex-card.unknown em{color:#7d7064}
.codex-team{grid-row:1 / span 2;display:flex}
.codex-team canvas{width:28px;height:23px}
.choice-list button{border:2px solid transparent;border-image:url(assets/ui/frame.png) 26 fill / 14px;border-radius:0;background:none;padding:20px 16px}
.choice-list button:hover{border-image-source:url(assets/ui/frame-hover.png)}
.primary{border:2px solid transparent;border-image:url(assets/ui/button-primary.png) 14 fill / 10px;border-radius:0;background:none}
.primary:hover{filter:brightness(1.08)}
.icon-button,.result-actions button,.prep-bar button{border:2px solid transparent;border-image:url(assets/ui/button.png) 12 fill / 9px;border-radius:0;background:none}
.icon-button:hover,.result-actions button:hover,.prep-bar button:hover:not(:disabled){filter:brightness(1.15)}
kbd{border:2px solid transparent;border-image:url(assets/ui/key.png) 14 fill / 6px;border-radius:0;background:none;color:var(--text)}
.coin,.build-item em::before,#earlyBonus::after{content:"";display:inline-block;width:1.1em;height:1.1em;background:url(assets/ui/coin.png) center/contain no-repeat;vertical-align:-.2em}
.build-item em::before{margin-right:2px;opacity:1}
#earlyBonus::after{margin-left:2px}
.choice-panel .eyebrow,#pauseScreen h2{height:35px;margin:0 auto 12px;background:url(assets/ui/ribbon-wave.png) center/contain no-repeat;color:transparent;user-select:none} /* 리본에 글자가 그려져 있다 — 글자는 읽기 프로그램용으로 남긴다 */
#pauseScreen h2{height:39px;background-image:url(assets/ui/ribbon-paused.png)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
@keyframes pop{0%{transform:scale(1.6)}100%{transform:scale(1)}}
@keyframes alarm{from{filter:none}to{filter:brightness(1.5)}}
@keyframes streak{0%{opacity:1;transform:scale(1.5)}15%{transform:scale(1)}75%{opacity:1}100%{opacity:0}}
@keyframes zoom{0%{transform:scale(1)}40%{transform:scale(1.025)}100%{transform:scale(1)}}
@keyframes breach{0%,100%{opacity:0}50%{opacity:.55}}
@keyframes synergy{0%{opacity:0;transform:translateX(-50%) scale(1.3)}15%{opacity:1;transform:translateX(-50%) scale(1)}80%{opacity:1}100%{opacity:0;transform:translateX(-50%) scale(1)}}
@keyframes hint{from{box-shadow:0 0 0 #8fdcff00}to{box-shadow:0 0 0 2px var(--frost),0 0 18px #8fdcffcc}}

/* 메뉴 · 영구 강화 창(설계 26절 · 사용자 시안): 판을 넓히고 기록 · 단추를 키운다. 설명은 주황 이름 | 왼쪽 맞춤 두 칸.
   강화 창은 줄마다 아이콘 | 이름 | 단계 점 | 설명 | 값. 창(강화 · 코덱스 · 설정)은 전장 상자가 아니라 화면 전체에 띄운다 — PC 에서 9줄이 스크롤 없이 보인다. */
.help{grid-template-columns:max-content 1fr;column-gap:12px;row-gap:5px;text-align:left}
.help>span{display:contents}
.help b{margin:0;text-align:right;color:var(--torch);letter-spacing:.06em}
.help em{font-style:normal}
/* PC(마우스 · 넓은 화면)에서만 메뉴를 키운다 — 전장 상자(최대 1100×619) 안에 다 들어가게 큰 글자는 화면 높이(vh)를 따른다. 휴대폰은 지금 크기 그대로. */
@media(min-width:761px) and (pointer:fine){
  #menuScreen{padding:10px}
  .menu-panel{width:min(780px,94%);padding:18px 40px 16px}
  .menu-panel .eyebrow{margin:0}
  .menu-panel h1{font-size:clamp(40px,min(7vw,7vh),92px);margin:6px 0 10px}
  .menu-panel .tagline{margin:0;font-size:14px;letter-spacing:.14em}
  .record{margin:10px auto;gap:2px}
  .record span{font-size:12px;letter-spacing:.2em}
  .record b{font:900 clamp(26px,3.6vh,40px) ui-monospace,Consolas,monospace;letter-spacing:.02em}
  .record small{font-size:clamp(14px,1.8vh,19px);font-weight:900}
  .menu-panel>.primary{min-width:min(340px,86%);padding:11px 40px;font-size:clamp(17px,2.2vh,24px);letter-spacing:.12em}
  .menu-panel>.primary kbd{margin-left:12px;padding:3px 9px;font-size:12px;letter-spacing:.08em}
  .meta-actions{gap:14px;margin-top:12px}
  .meta-actions button{padding:10px 22px;font-size:15px;letter-spacing:.08em}
  .soul-chip{gap:8px;font-size:15px}
  .soul-chip b{font-size:22px}
  .soul-gem{width:14px;height:14px}
  .available{margin-left:8px;padding:2px 9px;border-radius:10px;font-size:10px}
  .help{column-gap:14px;row-gap:3px;margin-top:12px;font-size:12.5px;line-height:1.4;color:#d8ccbd}
  .meta-panel{padding:24px 34px 22px}
  .meta-panel h2{font-size:clamp(30px,4.6vh,48px);margin:2px 0 10px}
}
.overlay.modal{position:fixed;inset:0;z-index:30}
.meta-panel,.codex-panel{width:min(760px,96%);max-height:100%}
.meta-head{margin:0 0 10px}
.meta-head .soul-chip b{font-size:24px}
.meta-head small{font-size:13px}
.meta-group{margin:10px 0 4px;font-size:13px;letter-spacing:.24em}
.meta-list{gap:6px}
.meta-row{grid-template-columns:40px 160px 64px 1fr 116px;gap:14px;min-height:52px;padding:6px 14px;background:#0d0a09cc;border-radius:6px;font-size:13px}
.meta-icon{display:grid;place-items:center;width:40px;height:40px}
.meta-icon canvas{image-rendering:pixelated}
.meta-row b{font-size:14px;letter-spacing:.05em}
.meta-text{color:#d8ccbd}
.pips{display:flex;gap:5px;align-items:center}
.pips span{width:11px;height:11px;border:2px solid #9b7bff;border-radius:50%}
.pips span.on{background:#9b7bff;box-shadow:0 0 6px #9b7bffaa}
.meta-row button{min-width:108px;padding:9px 12px;font-size:13px}
.panel>.close{right:14px;top:14px;width:40px;height:40px;display:grid;place-items:center;border:2px solid transparent;border-image:url(assets/ui/button.png) 12 fill / 9px;font-size:22px;line-height:1}
.meta-start{margin-top:16px}
@media(max-width:760px),(pointer:coarse){
  main{padding:8px 4px}
  .topbar{height:48px;padding:0 10px}
  .arena{width:100%;max-height:none;border-radius:4px}
  .wall-hud{width:94%;margin-bottom:6px}
  .status-hud{padding:6px 8px;font-size:11px}
  .build-bar{bottom:5px;gap:4px;padding:4px}
  .build-list{gap:4px}
  .build-item{width:50px;padding:3px 1px}
  .build-item canvas,.build-item .glyph{width:42px;height:34.5px}
  .build-item span,.build-item kbd{display:none}
  .boss-hud{bottom:72px}
  .prep-bar{bottom:70px;gap:6px;padding:6px 8px}
  .place-hint{bottom:112px;font-size:11px}
  .tutorial-hint{bottom:144px;font-size:12px;padding:5px 10px}
  .prep-bar kbd,.primary kbd{display:none}
  .panel{padding:20px}
  .choice-list{grid-template-columns:1fr}
  .choice-list button{padding:12px}
  .meta-row{grid-template-columns:36px 1fr auto;column-gap:10px;row-gap:3px;min-height:0;padding:7px 10px}
  .meta-icon{grid-column:1;grid-row:1 / span 2;width:36px;height:36px}
  .meta-row b{grid-column:2;grid-row:1}
  .meta-row i{grid-column:3;grid-row:1;justify-self:end}
  .meta-text{grid-column:2;grid-row:2}
  .meta-row button{grid-column:3;grid-row:2}
  .meta-panel{padding:20px 14px 16px}
  .codex-list{grid-template-columns:1fr}
  .menu-panel h1{font-size:46px}
}
@media(max-width:760px) and (orientation:portrait){
  .arena{aspect-ratio:auto;height:calc(100svh - 116px);min-height:520px;max-height:760px;background:linear-gradient(#14110f 0 31%,#1b1613 31% 100%)}
  #gameCanvas{height:auto;aspect-ratio:16/9;border-bottom:1px solid #453831}
  .overlay{padding:10px}
  .panel{padding:16px}
  .menu-panel h1{font-size:clamp(38px,12vw,52px);margin:8px 0 13px}
  .record{margin:14px auto}
  .choice-list{max-height:60vh;overflow:auto}
  .build-bar{bottom:auto;top:calc(100vw * 9 / 16 + 10px);display:grid;grid-template-columns:repeat(4,1fr);width:calc(100% - 12px);gap:5px;padding:5px}
  .build-list{display:contents}
  .build-item{width:auto;padding:6px 2px 5px}
  .build-item canvas,.build-item .glyph{width:56px;height:46px}
  .build-item span{display:block}
  .prep-bar{bottom:auto;top:calc(100vw * 9 / 16 + 204px);flex-wrap:wrap;justify-content:center;white-space:normal}
  .place-hint{bottom:auto;top:calc(100vw * 9 / 16 - 64px)}
  .tutorial-hint{bottom:auto;top:calc(100vw * 9 / 16 + 290px);width:calc(100% - 24px)} /* 구매 막대 · 준비 막대 아래 */
  .synergy-banner{top:calc(100vw * 9 / 16 * .64)}
  .announcement{top:calc(100vw * 9 / 32)}
  .rush-warning{top:calc(100vw * 9 / 16 * .68)}
  .boss-hud{bottom:auto;top:calc(100vw * 9 / 16 - 30px);width:60%}
}
@media(max-height:620px){
  .topbar{display:none}
  main{padding:0}
  .wall-hud{position:absolute;z-index:5;top:0;left:0;width:100%;margin:0}
  .wall-hud>div:first-child{display:none}
  .wall-bar{height:5px;margin:0;border:0;border-radius:0}
  .status-hud{padding-top:9px}
  .game-shell{position:relative}
  .arena{max-height:100vh}
  .panel{padding:16px}
  .menu-panel h1{font-size:48px;margin:5px}
  .record{margin:10px}
  .help{margin:9px 0 0}
  .result-panel h2{font-size:40px;margin:4px}
  .result-grid{margin-bottom:8px}
}
/* 전체화면 버튼 기호(몰입 중에는 나가기 기호) · iPhone 회전 · 홈 화면 안내 · 앱 안 브라우저 안내(외부 브라우저로 열기) */
.icon-button .glyph{width:12px;height:12px;margin-right:6px;vertical-align:-1px;fill:none;stroke:currentColor;stroke-width:2}
#fullscreenButton .glyph.exit,html.game-immersive #fullscreenButton .glyph.enter{display:none}
html.game-immersive #fullscreenButton .glyph.exit{display:inline}
.rotate-tip,.home-tip,.app-tip{margin:10px 0 0;font-size:11px;line-height:1.5;color:#cdf4ff;letter-spacing:.03em}
.home-tip b{color:var(--yellow)}
.app-tip{display:grid;gap:6px;justify-items:center;padding:8px 10px;border:1px solid #8fdcff55;border-radius:6px;background:#0d1820aa}
.app-tip button{border:2px solid transparent;border-image:url(assets/ui/button.png) 12 fill / 9px;background:none;padding:6px 12px;cursor:pointer;font-size:12px;font-weight:800;letter-spacing:.04em;color:#d3c4b4}
@media(orientation:landscape){.rotate-tip{display:none}}
@media(max-width:760px),(pointer:coarse){#fullscreenButton .label{display:none}#fullscreenButton .glyph{margin:0}} /* 세로 위 막대 폭(375px)에 셋이 들어가게 ⛶ 는 기호만 */
/* 짧은 가로 화면(휴대폰 가로 · 전체화면): 카드 8장을 전장 좌우 띠에 넷씩, 전장은 가운데 16:9(띠는 최소 --rail-min).
   위 모서리: 왼쪽 ← 목록 · 전체화면, 오른쪽 일시정지 · 설정(기호만). 창(메뉴 · 결과 · 강화)은 띠까지 덮는다. */
:root{--screen-h:100vh;--corner:34px;--corner-button:24px;--corner-gap:2px;--corner-pad:4px;--safe-t:env(safe-area-inset-top,0px);--safe-r:env(safe-area-inset-right,0px);--safe-b:env(safe-area-inset-bottom,0px);--safe-l:env(safe-area-inset-left,0px);--swipe-room:160px}
@supports(height:100dvh){:root{--screen-h:100dvh}}
@media(max-height:620px) and (orientation:landscape){
  :root{--rail-min:calc(56px + max(var(--safe-l), var(--safe-r)));--arena-w:min(calc(100vw - 2 * var(--rail-min)),calc(var(--screen-h) * 16 / 9));--arena-h:calc(var(--arena-w) * 9 / 16);--rail:calc((100vw - var(--arena-w)) / 2);--gap-y:calc((var(--screen-h) - var(--arena-h)) / 2)}
  main{min-height:var(--screen-h);display:grid;place-items:center}
  .game-shell{width:var(--arena-w)}
  .arena{width:var(--arena-w);height:var(--arena-h);aspect-ratio:auto;max-height:none;overflow:visible;border-radius:0}
  .overlay{inset:calc(-1 * var(--gap-y)) calc(-1 * var(--rail))}
  .topbar{display:flex;position:fixed;z-index:20;inset:0 0 auto;height:calc(var(--corner) + var(--safe-t));padding:var(--safe-t) max(var(--corner-pad), var(--safe-r)) 0 max(var(--corner-pad), var(--safe-l));background:none;border:0;pointer-events:none}
  .topbar>*,.top-actions>*{pointer-events:auto}
  .top-actions{gap:var(--corner-gap);pointer-events:none}
  .brand{display:grid;place-items:center;width:var(--corner-button);height:28px;font-size:0}
  .brand::before{content:"←";font-size:18px;color:var(--text)}
  .icon-button{display:grid;place-items:center;width:var(--corner-button);height:28px;padding:0;font-size:13px}
  .icon-button .label{display:none}
  .icon-button .glyph{margin:0}
  #fullscreenButton{position:fixed;top:calc(3px + var(--safe-t));left:calc(max(var(--corner-pad), var(--safe-l)) + var(--corner-button) + var(--corner-gap))} /* ← 바로 옆 — 띠(최소 56px) 안 */
  .build-bar{top:calc(var(--corner) - var(--gap-y));bottom:calc(-1 * var(--gap-y));left:calc(-1 * var(--rail));right:calc(-1 * var(--rail));transform:none;max-width:none;display:grid;grid-template-columns:var(--rail) 1fr var(--rail);grid-template-rows:repeat(4,minmax(0,1fr));grid-auto-flow:column;gap:4px;padding:0 4px max(4px, var(--safe-b));border:0;border-radius:0;background:none;pointer-events:none}
  .build-list{display:contents}
  .build-list>:nth-child(-n+4){grid-column:1;margin-left:var(--safe-l)}
  .build-list>:nth-child(n+5),#repairButton{grid-column:3;margin-right:var(--safe-r)}
  .build-item{width:auto;min-width:0;min-height:0;padding:2px 1px;pointer-events:auto;align-content:center}
  .prep-bar{bottom:8px}
  .boss-hud{bottom:12px}
  .place-hint{bottom:62px} /* 준비 막대(두 줄 48px) 위 */
  .tutorial-hint{bottom:96px}
  .choice-list{grid-template-columns:repeat(3,minmax(0,1fr));max-height:none} /* 창이 띠까지 넓어 세 칸이 한 줄에 — 고르려고 스크롤하지 않는다 */
  .choice-panel h2{margin:2px 0 10px;font-size:26px}
}
/* 몰입 중(전체화면 · 고정 화면 · 홈 화면 앱 — html.game-immersive, 사용자 "풀화면이면 웹사이트 메뉴가 안 보여야"): 사이트 머리(GHK ARCADE · 목록 ←)를 숨기고
   게임 단추(⛶ · Ⅱ · ⚙)만 오른쪽 위에 기호로, 노치 · 홈 표시줄은 비킨다. 가로 띠에서는 ⛶ 가 왼쪽 위(띠 하나에 둘까지만 들어간다). 세로에서는 성벽 숫자를 단추 밑에서 비켜 둔다. */
html.game-immersive .brand{display:none}
html.game-immersive .topbar{position:fixed;z-index:20;inset:0 0 auto auto;height:calc(var(--corner) + var(--safe-t));padding:var(--safe-t) max(var(--corner-pad), var(--safe-r)) 0 var(--corner-pad);background:none;border:0;pointer-events:none}
html.game-immersive .top-actions{gap:var(--corner-gap)}
html.game-immersive .top-actions>*{pointer-events:auto}
html.game-immersive .icon-button{display:grid;place-items:center;width:var(--corner-button);height:28px;padding:0;font-size:13px}
html.game-immersive .icon-button .label{display:none}
html.game-immersive .icon-button .glyph{margin:0}
@media(max-width:760px),(pointer:coarse){html.game-immersive .wall-hud>div:first-child{padding-right:calc(3 * var(--corner-button) + 2 * var(--corner-gap) + 2 * var(--corner-pad))}}
@media(max-width:760px) and (orientation:portrait){html.game-immersive main{padding-top:calc(8px + var(--safe-t))}} /* 홈 화면 앱의 상태 표시줄 아래로 */
@media(max-height:620px) and (orientation:landscape){html.game-immersive #fullscreenButton{left:max(var(--corner-pad), var(--safe-l))}}
/* 판 중에는 페이지가 스크롤 · 당겨 새로 고침되지 않게(고정 화면은 쓸어 올려 막대를 접어야 해서 예외) */
html:not(.game-pseudo) body.game-running{overflow:hidden;overscroll-behavior:none}
/* 아이폰 고정 화면: 게임을 보이는 화면에 붙이고 페이지를 --swipe-room 만큼 길게 — 위로 쓸어 올리면 브라우저가 주소창 · 아래 막대를 접는다 */
html.game-pseudo{height:auto}
html.game-pseudo body{min-height:calc(100vh + var(--swipe-room));overflow:visible;background:#000}
html.game-pseudo main{position:fixed;inset:0;z-index:6;overflow:hidden}
.swipe-hint{position:fixed;inset:0;z-index:30;display:grid;place-items:center;padding:20px;background:#000c;text-align:center;touch-action:pan-y}
.swipe-hint b{display:block;margin-bottom:6px;font-size:18px;color:var(--yellow)}
.swipe-hint span{display:block;font-size:13px;color:var(--text)}
.swipe-hint small{display:block;margin-top:10px;font-size:11px;color:var(--muted)}
