:root{--ink:#102a3b;--paper:#fffdf4;--yellow:#ffd44a;--teal:#23baad;--coral:#ff746a;--purple:#7553a5;--line:3px solid var(--ink)}
*{box-sizing:border-box}body{margin:0;background:#102a3b;color:var(--ink);font-family:'Noto Sans KR',system-ui,sans-serif;min-height:100dvh}button{font:inherit;cursor:pointer;color:inherit;touch-action:manipulation;-webkit-tap-highlight-color:transparent}button:focus-visible{outline:3px solid #0699d0;outline-offset:4px}button:disabled{cursor:default}button:not(:disabled):active{transform:translateY(2px);box-shadow:none!important}button{transition:background .12s,transform .1s}button[hidden],[hidden]{display:none!important}.game-shell{max-width:1440px;margin:auto;padding:22px 36px 16px;background:var(--paper);min-height:100dvh}.topbar{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}.brand{display:flex;gap:12px;align-items:center}.brand-mark{font-size:28px;line-height:1;font-weight:900;letter-spacing:-3px;background:var(--yellow);border:var(--line);width:49px;height:49px;display:grid;place-items:center;transform:rotate(-6deg);border-radius:13px;box-shadow:3px 3px 0 var(--ink)}h1{font-size:29px;letter-spacing:-1.7px;margin:0;line-height:1.2;font-weight:900}.brand-dot{color:var(--teal)}.brand-sub{font-size:10px;letter-spacing:2.7px;font-weight:800}.header-actions{display:flex;gap:8px}.icon-button{border:2px solid var(--ink);background:var(--paper);border-radius:50%;width:40px;height:40px;font-size:21px;font-weight:800;display:grid;place-items:center;position:relative}.icon-button:hover{background:var(--yellow)}.icon-button:disabled{opacity:.35}.off-mark{position:absolute;font-size:14px;right:5px;top:0}.stage-path{display:grid;grid-template-columns:repeat(5,1fr);gap:12px;margin-bottom:17px}.stage-chip{border:2px solid #d7ddd7;background:transparent;border-radius:10px;display:flex;align-items:center;gap:10px;padding:9px 12px;text-align:left;font-size:14px;font-weight:800;color:#53626b;min-width:0;white-space:nowrap}.stage-chip .stage-num{border:2px solid currentColor;font-size:12px;min-width:25px;height:25px;display:grid;place-items:center;border-radius:50%}.stage-chip.active{color:var(--ink);background:var(--yellow);border-color:var(--ink);box-shadow:3px 3px 0 var(--ink)}.stage-chip.done{color:#167f78;border-color:#91cfc3;background:#eaf8ed}.stage-chip:disabled{opacity:.48}.stage-chip .lock{margin-left:auto;font-size:12px}.battle-frame{position:relative;border:var(--line);border-radius:18px;overflow:hidden;background:#8bdae9;isolation:isolate;box-shadow:0 5px 0 var(--ink)}#battle{display:block;width:100%;height:clamp(300px,45vh,530px);touch-action:none;background:linear-gradient(#91e4ee 0%,#c9f2e8 70%,#dace7e 70%)}.battle-hud{position:absolute;z-index:2;top:17px;left:20px;right:20px;display:flex;justify-content:space-between;pointer-events:none;gap:20px}.base-status{width:25%;max-width:240px}.base-status>div:first-child{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;gap:10px;font-size:14px;font-weight:900;text-shadow:1px 1px 0 white}.base-status b{font-size:13px;font-variant-numeric:tabular-nums}.health-track{height:12px;border:2px solid var(--ink);background:#fffc;overflow:hidden;border-radius:4px;box-shadow:0 2px 0 #102a3b20}.health-track i{display:block;background:#21b49d;width:100%;height:100%;transition:width .16s}.hostile .health-track i{background:#ff746a}.mission-clock{text-align:center;font-variant-numeric:tabular-nums}.mission-clock>span{display:block;font-size:11px;letter-spacing:1.5px;font-weight:900}.mission-clock strong{font-size:23px;line-height:1.4}.battle-caption{position:absolute;z-index:2;bottom:26px;left:18px;right:16px;display:flex;align-items:center;justify-content:space-between;gap:6px;pointer-events:none}.battle-caption>span{font-size:12px;font-weight:800;background:#fffdebcf;border:1px solid #102a3b33;padding:5px 10px;border-radius:6px}.speed-button{pointer-events:auto;background:var(--paper);border:2px solid var(--ink);border-radius:7px;padding:3px 9px;font-weight:900;font-size:14px;min-width:44px}.minimap{position:absolute;left:18px;right:18px;bottom:10px;height:5px;border-radius:4px;background:#102a3b33;pointer-events:none}.map-home,.map-enemy{position:absolute;top:-1px;width:7px;height:7px;border:1px solid var(--ink);border-radius:2px;background:var(--teal)}.map-enemy{right:0;background:var(--coral)}#map-camera{position:absolute;height:11px;top:-3px;border:1px solid #102a3b77;border-radius:3px;background:#ffffff22}#map-dots i{position:absolute;top:0;width:3px;height:5px;background:var(--teal)}#map-dots i.enemy{background:#dc5181}.battle-overlay{position:absolute;z-index:4;inset:0;display:flex;align-items:center;justify-content:center;background:#b7e9e416;backdrop-filter:blur(1.5px)}.mission-card{position:relative;min-width:325px;padding:27px 35px 22px;text-align:center;background:var(--paper);border:var(--line);border-radius:17px;box-shadow:6px 6px 0 var(--ink);transform:rotate(-1deg)}.eyebrow{display:inline-block;font-size:12px;letter-spacing:2px;font-weight:900;text-transform:uppercase;color:#168d87}.mission-card h2{font-size:33px;letter-spacing:-1.5px;margin:6px 0 10px;line-height:1.25;font-weight:900}.mission-card p{font-size:14px;line-height:1.7;margin:0 0 19px}.primary-button{background:var(--yellow);border:var(--line);border-radius:9px;font-weight:900;padding:11px 25px;min-width:190px;font-size:18px;box-shadow:3px 3px 0 var(--ink)}.primary-button span{margin-left:17px;font-size:23px}.primary-button:hover{background:#ffe16d}.mission-note{display:block;margin-top:15px;font-size:11px;font-weight:600;color:#56666d}.secondary-button{display:block;background:transparent;border:0;text-decoration:underline;text-underline-offset:3px;margin:14px auto 0;font-weight:700;font-size:14px}.toast{position:absolute;top:95px;left:50%;transform:translate(-50%,-8px);z-index:8;pointer-events:none;background:var(--ink);color:white;border-radius:30px;padding:9px 20px;opacity:0;transition:opacity .15s,transform .15s;font-size:14px;white-space:nowrap;font-weight:700}.toast.visible{opacity:1;transform:translate(-50%,0)}.command-deck{padding:17px 0 0}.economy-row{display:flex;justify-content:space-between;align-items:center;margin-bottom:12px;gap:10px}.fish-counter{display:flex;gap:9px;align-items:baseline;white-space:nowrap}.fish-symbol{color:#be8400;background:var(--yellow);width:29px;height:29px;border:2px solid var(--ink);border-radius:50%;align-self:center;display:grid;place-items:center;font-size:18px}.fish-counter>strong{font-size:27px;line-height:1;font-weight:900;letter-spacing:-1px;font-variant-numeric:tabular-nums}.wallet-cap{font-size:14px;font-weight:700;color:#67727b}.income{font-size:12px;font-weight:800;margin-left:7px;background:#d9f3e6;color:#167a5f;padding:4px 8px;border-radius:5px}.troop-count{font-size:12px;color:#657279;font-weight:700}.controls-grid{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:16px}.unit-roster{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:11px}.unit-card{position:relative;overflow:hidden;background:#fff;border:2px solid var(--ink);border-radius:12px;padding:6px 4px 9px;display:flex;flex-direction:column;align-items:center;box-shadow:0 3px 0 var(--ink);min-width:0}.unit-card:hover:not(:disabled){background:#effcf4;transform:translateY(-3px)}.unit-card:not(:disabled){border-color:var(--ink)}.unit-card:disabled{box-shadow:0 2px 0 #b5bcb5;border-color:#b5bcb5}.unit-card:disabled .unit-cost{color:#8a928b}.unit-card:disabled .unit-portrait{opacity:.7}.unit-card.on-cooldown .cooldown-cover{display:block}.unit-key{position:absolute;left:7px;top:5px;font-size:11px;font-weight:800;color:#7c858a}.unit-role{position:absolute;right:7px;top:7px;color:#64726c;font-size:10px;font-weight:700}.unit-portrait{width:86px;height:76px;max-width:100%;object-fit:contain;pointer-events:none}.unit-name{font-size:14px;font-weight:900;line-height:1.5;white-space:nowrap}.unit-cost{font-size:14px;font-weight:800;line-height:1.6;color:#08766f}.unit-cost:before{content:'◆';font-size:10px;margin-right:4px;color:#d2a018}.cooldown-cover{position:absolute;inset:auto 0 0;background:#102a3b19;display:none;pointer-events:none}.cooldown-seconds{position:absolute;top:40px;left:0;right:0;font-size:20px;font-weight:900;text-shadow:0 0 7px white;display:none}.unit-card.on-cooldown .cooldown-seconds{display:block}.support-controls{display:flex;flex-direction:column;gap:11px}.support-button{position:relative;overflow:hidden;display:flex;gap:10px;align-items:center;border:2px solid var(--ink);border-radius:10px;text-align:left;padding:10px 11px;min-height:65px;box-shadow:0 3px 0 var(--ink);background:#fff}.support-icon{font-size:28px;line-height:1;width:35px;text-align:center;font-weight:900}.support-button>span{z-index:1}.support-button strong{font-size:14px;display:block;white-space:nowrap}.support-button small{font-size:11px;display:inline-block;margin-left:4px;background:#ffffff80;padding:1px 4px;border-radius:3px;font-weight:900}.support-button>span>span{display:block;font-size:12px;font-weight:600;margin-top:3px}.upgrade{background:#d6f4e5}.upgrade:disabled{background:#e9eee5;box-shadow:0 2px 0 #b5bcb5;border-color:#b5bcb5;color:#687773}.cannon{background:#e4e9e7}.cannon.ready{background:var(--yellow);animation:ready-pulse 1.6s infinite}.cannon-progress{position:absolute;left:0;bottom:0;width:0;height:5px;background:#788a88}.cannon.ready .cannon-progress{background:#a77900}.game-footer{display:flex;justify-content:space-between;gap:20px;font-size:12px;font-weight:600;color:#76807e;margin-top:17px}.keyboard-tip b{margin:0 5px;color:#bbc0b6}.result-stats{display:flex;justify-content:center;gap:24px;font-size:12px;padding:2px 0 17px}.result-stats strong{display:block;font-size:21px;color:#159688}.result-stars{color:#f1b523!important;font-size:34px!important;letter-spacing:4px;margin-bottom:8px!important}dialog{background:var(--paper);border:var(--line);border-radius:20px;width:min(520px,calc(100% - 34px));color:var(--ink);padding:30px;box-shadow:7px 7px 0 #102a3b90;max-height:90dvh}dialog::backdrop{background:#102a3bb0;backdrop-filter:blur(4px)}.dialog-close{position:absolute;right:15px;top:15px}dialog h2{font-size:25px;letter-spacing:-1px;margin:12px 0 26px}dialog ol{padding:0 0 0 24px;margin:0}dialog li{margin-bottom:18px;padding-left:5px}dialog li strong{display:block;font-size:16px;margin-bottom:5px}dialog li span{font-size:14px;line-height:1.65;color:#58676b}.help-note{font-size:12px;line-height:1.8;color:#677574;border-top:1px solid #ccd5cb;padding-top:17px;margin-bottom:22px}.help-note+button{display:block;margin:auto}
@keyframes ready-pulse{50%{box-shadow:0 3px 0 var(--ink),0 0 0 4px #ffd44a66}}@media(min-width:1500px){.game-shell{min-height:0;border-radius:24px;margin:24px auto;padding:25px 36px 21px}#battle{height:48vh;max-height:590px}}
@media(max-width:1050px){.game-shell{padding:18px 22px 14px}.controls-grid{grid-template-columns:1fr 185px;gap:12px}.unit-roster{gap:8px}.support-button{padding:9px 7px;gap:4px}.stage-chip{padding:8px;font-size:12px;gap:6px}.stage-path{gap:8px}.keyboard-tip{display:none}.unit-portrait{height:68px}.unit-role{font-size:9px}.game-footer{margin-top:14px}}
@media(max-width:700px){.game-shell{padding:max(14px,env(safe-area-inset-top)) 12px max(14px,env(safe-area-inset-bottom));min-height:100dvh}.topbar{margin-bottom:20px}.brand-mark{width:40px;height:40px;font-size:23px;border-radius:10px}.brand{gap:10px}h1{font-size:24px}.brand-sub{font-size:8px;letter-spacing:2px}.icon-button{width:34px;height:34px;font-size:18px}.header-actions{gap:6px}.stage-path{gap:7px;margin-bottom:13px}.stage-chip{display:flex;justify-content:center;flex-direction:column;gap:4px;border:0;padding:4px 0;background:transparent!important;font-size:11px;border-radius:0}.stage-chip .stage-num{width:29px;height:29px}.stage-chip .stage-name{font-size:10px;font-weight:700}.stage-chip.active{box-shadow:none}.stage-chip.active .stage-num{background:var(--yellow);box-shadow:2px 2px 0 var(--ink)}.stage-chip.done .stage-num{background:#d3f2df}.stage-chip .lock{display:none}.battle-frame{border-radius:14px}#battle{height:clamp(280px,40dvh,420px)}.battle-hud{top:13px;left:12px;right:12px;gap:8px}.base-status{width:33%;}.base-status>div:first-child{font-size:11px;gap:5px}.base-status b{font-size:10px}.health-track{height:10px}.mission-clock>span{font-size:9px;letter-spacing:.5px}.mission-clock strong{font-size:19px}.battle-caption{left:10px;right:9px;bottom:24px}.battle-caption>span{font-size:10px;max-width:calc(100% - 45px);padding:4px 7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.speed-button{font-size:12px;min-width:37px}.minimap{left:11px;right:11px}.mission-card{min-width:0;width:80%;padding:20px 16px 18px;box-shadow:4px 4px 0 var(--ink)}.mission-card h2{font-size:27px;margin:5px 0 9px}.mission-card p{font-size:12px;margin-bottom:14px}.primary-button{font-size:16px;padding:9px 20px;min-width:172px}.mission-note{font-size:9px;margin-top:13px}.eyebrow{font-size:10px;letter-spacing:1.4px}.toast{font-size:12px;top:70px;padding:7px 12px}.economy-row{margin-bottom:10px}.command-deck{padding-top:16px}.fish-counter{gap:6px}.fish-counter>strong{font-size:24px}.fish-symbol{width:25px;height:25px;font-size:14px}.income{font-size:10px;padding:3px 6px;margin-left:4px}.wallet-cap{font-size:11px}.troop-count{font-size:10px}.controls-grid{grid-template-columns:1fr;gap:12px}.unit-roster{gap:6px}.unit-card{border-radius:8px;padding:7px 2px 6px}.unit-portrait{height:57px;width:66px;margin-top:3px}.unit-key{display:none}.unit-role{top:3px;right:4px;font-size:8px}.unit-name{font-size:11px}.unit-cost{font-size:12px}.support-controls{display:grid;grid-template-columns:1fr 1fr;gap:9px}.support-button{min-height:57px;padding:7px 10px;gap:8px}.support-icon{font-size:27px;width:25px}.support-button strong{font-size:12px}.support-button small{font-size:9px;margin-left:3px}.support-button>span>span{font-size:10px}.game-footer{font-size:10px;margin-top:14px;justify-content:center}.cooldown-seconds{top:31px;font-size:18px}.result-stats{font-size:10px;padding-bottom:14px}.result-stats strong{font-size:18px}dialog{padding:25px 22px}dialog h2{font-size:23px}dialog .eyebrow{font-size:11px}.help-note{font-size:12px}}
@media(max-height:550px) and (orientation:landscape){.game-shell{padding:6px 16px 8px}.topbar{margin-bottom:8px}.brand-mark{height:31px;width:31px;font-size:20px}.brand h1{font-size:21px}.brand-sub{display:none}.header-actions .icon-button{width:30px;height:30px}.stage-path{position:absolute;top:10px;left:36%;right:22%;gap:6px;margin:0}.stage-chip{font-size:0;padding:0;border:0;background:none!important;box-shadow:none!important}.stage-chip .stage-name,.stage-chip .lock{display:none}.stage-chip .stage-num{height:24px;width:24px;font-size:10px}.stage-chip.active .stage-num{background:var(--yellow)}#battle{height:calc(100dvh - 180px);min-height:190px}.battle-hud{top:8px;left:12px;right:12px}.base-status>div:first-child{font-size:10px;margin-bottom:3px}.base-status b{font-size:10px}.health-track{height:8px}.mission-clock>span{font-size:8px}.mission-clock strong{font-size:16px}.battle-caption>span{font-size:9px}.mission-card{padding:12px 24px;min-width:320px}.mission-card h2{font-size:23px;margin:3px 0}.mission-card p{font-size:11px;margin:0 0 9px}.mission-note{display:none}.primary-button{font-size:14px;padding:6px 19px;min-width:160px}.primary-button span{font-size:17px}.command-deck{padding-top:8px}.economy-row{margin-bottom:6px}.fish-counter>strong{font-size:20px}.fish-symbol{height:21px;width:21px;font-size:12px}.income,.troop-count,.wallet-cap{font-size:10px}.controls-grid{grid-template-columns:minmax(0,1fr) 190px;gap:12px}.unit-roster{gap:7px}.unit-card{display:grid;grid-template-columns:45px 1fr;grid-template-rows:23px 20px;padding:5px 4px;border-radius:7px}.unit-portrait{grid-row:1 / 3;grid-column:1;width:45px;height:43px;margin:0}.unit-name{font-size:10px;align-self:end}.unit-cost{font-size:11px;align-self:start}.unit-role,.unit-key{display:none}.support-controls{display:grid;grid-template-columns:1fr 1fr;gap:7px}.support-button{padding:4px;min-height:54px;display:block;text-align:center;border-radius:7px}.support-icon{display:none}.support-button strong{font-size:10px}.support-button small{font-size:8px}.support-button>span>span{font-size:9px}.game-footer{display:none}.cooldown-seconds{top:15px;font-size:17px}.result-stats{padding:0 0 7px;font-size:10px}.result-stats strong{font-size:16px}.secondary-button{margin-top:8px;font-size:11px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
.rotate-hint{display:none}
@media(max-width:700px) and (orientation:portrait){.rotate-hint{display:flex;align-items:center;justify-content:center;gap:8px;margin:-5px 0 13px;padding:9px 6px;border:2px solid var(--ink);border-radius:8px;background:var(--yellow);font-size:12px;font-weight:800}.rotate-hint span{font-size:22px;line-height:1}}
@media(max-height:600px) and (orientation:landscape){
 body{overflow:hidden}
 .game-shell{height:100dvh;min-height:0;max-width:none;margin:0;border-radius:0;padding:6px max(12px,env(safe-area-inset-right)) max(6px,env(safe-area-inset-bottom)) max(12px,env(safe-area-inset-left));display:grid;grid-template-rows:32px minmax(0,1fr) 112px;gap:7px}
 .topbar{margin:0;min-height:0}.brand h1{font-size:21px}.brand-sub{display:none}.brand-mark{height:28px;width:28px;font-size:18px;border-radius:8px}.header-actions .icon-button{width:32px;height:32px;font-size:18px}
 .stage-path{position:absolute;top:9px;left:39%;right:23%;gap:8px;margin:0}.stage-chip{font-size:0;padding:0;border:0;background:none!important;box-shadow:none!important}.stage-chip .stage-name,.stage-chip .lock{display:none}.stage-chip .stage-num{height:24px;min-width:24px;font-size:11px}.stage-chip.active .stage-num{background:var(--yellow)}
 .battle-frame{min-height:0;border-radius:11px;box-shadow:0 3px 0 var(--ink)}#battle{height:100%;min-height:0}
 .battle-hud{top:7px;left:12px;right:12px}.base-status>div:first-child,.base-status b{font-size:12px;margin-bottom:3px}.health-track{height:8px}.mission-clock>span{font-size:10px}.mission-clock strong{font-size:17px}.battle-caption{bottom:19px}.battle-caption>span{font-size:11px;padding:2px 7px}.speed-button{min-width:48px;font-size:14px;padding:4px 10px}.minimap{bottom:7px}
 .command-deck{padding:0;min-height:0;display:grid;grid-template-rows:27px 1fr;gap:5px}.economy-row{margin:0}.fish-counter>strong{font-size:23px}.income,.troop-count,.wallet-cap{font-size:12px}.fish-symbol{width:23px;height:23px;font-size:14px}
 .controls-grid{grid-template-columns:minmax(0,1fr) 180px;gap:10px;min-height:0}.unit-roster{gap:7px}.unit-card{display:grid;grid-template-columns:40% 60%;grid-template-rows:1fr 1fr;align-items:center;padding:4px 2px;border-radius:8px}.unit-portrait{grid-row:1 / 3;grid-column:1;width:100%;height:52px;margin:0}.unit-name{font-size:14px;align-self:end}.unit-cost{font-size:14px;align-self:start}.unit-key,.unit-role{display:none}.cooldown-seconds{top:24px;font-size:20px}
 .support-controls{display:grid;grid-template-columns:1fr 1fr;gap:7px}.support-button{display:block;text-align:center;padding:5px 2px;min-height:0;border-radius:8px}.support-icon{display:none}.support-button strong{font-size:13px;white-space:normal}.support-button small{display:block;font-size:11px;margin:2px 0}.support-button>span>span{font-size:11px;line-height:1.3}.cannon #cannon-label{font-size:0}.cannon #cannon-label:after{content:'전장 전체 공격';font-size:11px}
 .game-footer{display:none}.mission-card{width:auto;min-width:320px;max-width:90%;max-height:calc(100% - 12px);overflow-y:auto;transform:none;padding:11px 24px}.mission-card h2{font-size:24px;margin:3px 0 6px}.mission-card p{font-size:13px;margin:0 0 9px}.mission-note{display:none}.mission-card .primary-button{font-size:15px;padding:6px 20px}.mission-card .eyebrow{font-size:10px}.result-stats{font-size:11px;padding:0 0 7px}.result-stats strong{font-size:16px}.secondary-button{margin-top:7px;font-size:12px}.toast{top:52px;font-size:13px}
}
@media(max-width:700px) and (orientation:portrait){.unit-name,.unit-cost{font-size:14px}.support-button strong{font-size:14px}.support-button>span>span{font-size:12px}.base-status>div:first-child,.base-status b{font-size:12px}.mission-card p{font-size:14px}.mission-note{font-size:12px}.game-footer{font-size:12px}.income,.wallet-cap,.troop-count{font-size:12px}.stage-chip .stage-name{font-size:11px}.support-button{gap:5px;padding:7px}.support-icon{width:22px;font-size:25px}.support-button small{font-size:10px}.battle-caption>span{font-size:12px}}
