/* Interface geometry follows @aivexa/button, card, tabs, dialog; game field is custom canvas. */
*{box-sizing:border-box}html{scrollbar-width:thin;scrollbar-color:var(--icon) var(--background);overscroll-behavior:none}body{margin:0;background:var(--background);color:var(--foreground);font:var(--type-text);line-height:1.5}button,input,select{font:var(--type-button);letter-spacing:0}button{min-height:44px;display:inline-flex;justify-content:center;align-items:center;gap:8px;cursor:pointer;padding:10px 16px;border:1px solid var(--border);border-radius:var(--radius-md);color:var(--foreground);background:var(--card);touch-action:manipulation;transition:background .16s,transform .16s,border-color .16s;white-space:nowrap}button:hover{background:var(--secondary);border-color:var(--input)}button:active:not(:disabled){transform:translateY(1px)}button:focus-visible,a:focus-visible,summary:focus-visible,canvas:focus-visible,input:focus-visible{outline:2px solid var(--ring);outline-offset:3px}button:disabled{color:var(--disabled-foreground);background:var(--disabled);cursor:default;box-shadow:none}.primary{background:var(--primary);color:var(--primary-foreground);border-color:var(--primary)}.primary:hover{background:var(--primary-active);border-color:var(--primary-active)}svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}input,select{background:var(--field);border:1px solid var(--input);color:var(--foreground);border-radius:var(--radius-sm);height:40px;padding:8px}input[type=number]{width:106px;-moz-appearance:textfield}input::-webkit-inner-spin-button,input::-webkit-outer-spin-button{-webkit-appearance:none}input[type=checkbox]{width:16px;height:16px;accent-color:var(--primary)}select,option{background:var(--field);color:var(--foreground)}a{color:var(--accent-foreground)}h1,h2,h3,p{margin:0}h1{font:var(--type-title)}h2{font:var(--type-title)}h3{font:var(--type-text-strong)}p{color:var(--text-secondary)}[hidden]{display:none!important}.game-shell{max-width:1280px;margin:auto;padding:20px 24px 30px}.game-header{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.brand{display:flex;align-items:center;gap:12px}.brand-mark{width:38px;height:38px;color:var(--accent-foreground);fill:var(--secondary);stroke-width:1.2}.brand>div>span{font:var(--type-caption);color:var(--text-secondary)}.header-actions{display:flex;align-items:center;gap:8px}.view-switch{display:flex;gap:4px;padding:4px;background:var(--secondary);border:1px solid var(--border);border-radius:var(--radius-md)}.view-switch button{background:transparent;min-height:34px;padding:8px 12px;border:0;font-size:12px}.view-switch button.active{background:var(--card);color:var(--accent-foreground);box-shadow:var(--shadow-card)}.icon-button{width:44px;padding:8px;flex-shrink:0}.chapter-bar{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:16px}.eyebrow{display:block;font:var(--type-caption);color:var(--text-secondary);margin-bottom:4px}.chapter-actions{display:flex;gap:8px;align-items:center}.chapter-actions .stars{font-size:20px}.stars{color:var(--warning);display:flex;gap:4px}.stars .empty-star{color:var(--icon);opacity:.35}.soft-button{background:var(--secondary);color:var(--accent-foreground)}.play-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:20px;align-items:start}.arena-card{min-width:0;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:16px 16px 12px;position:relative;overflow:hidden}.arena-hud{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.integrity{display:flex;align-items:center;gap:8px;flex-wrap:wrap;max-width:170px}.integrity>svg{width:24px;height:24px;color:var(--accent-foreground)}.integrity strong{font-size:20px;font-weight:700;line-height:1}.integrity span{display:block;font-size:10px;color:var(--text-secondary)}.health-track{width:100%;height:4px;background:var(--muted);border-radius:var(--radius-pill);overflow:hidden}.health-track i{display:block;height:100%;background:var(--accent-foreground);width:100%;transition:width .2s}.wave-hud{text-align:right}.wave-hud>span{font-size:10px;color:var(--text-secondary);display:block}.wave-hud strong{display:block;font-size:14px;font-weight:500}.wave-hud b{font-weight:600}.wave-dots{display:flex;gap:4px;justify-content:flex-end;margin-top:8px}.wave-dots i{display:block;width:20px;height:4px;background:var(--muted);border-radius:var(--radius-pill)}.wave-dots i.done{background:var(--accent-foreground)}.wave-dots i.current{background:var(--primary-hover)}.arena-scene{position:relative;width:min(100%,612px);margin:0 auto;border-radius:var(--radius-md);overflow:hidden;background:var(--background)}#gem-board{display:block;width:100%;height:auto;aspect-ratio:9/11;touch-action:manipulation;cursor:crosshair}.arena-foot{display:flex;align-items:center;justify-content:space-between;gap:8px;padding-top:12px;color:var(--text-secondary);font-size:12px}.arena-foot>span{display:flex;align-items:center;gap:6px}.status-dot{width:6px;height:6px;border-radius:50%;background:var(--accent-foreground)}.command-deck{display:flex;flex-direction:column;gap:12px;min-width:0}.brief-card{padding:0 4px 8px}.brief-card h3{font-size:16px;line-height:1.4;margin-bottom:8px}.brief-card p{font-size:12px;line-height:1.6}.building-panel,.wave-card,.recipes,.dev-report{border:1px solid var(--border);background:var(--card);border-radius:var(--radius-md);padding:16px}.panel-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px;gap:8px}.panel-heading>span{font-size:12px;color:var(--text-secondary)}.gem-palette{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.stone-button{position:relative;min-width:0;min-height:98px;display:flex;flex-direction:column;gap:0;padding:8px 4px;border-color:var(--border);background:var(--background)}.stone-button.active{outline:2px solid var(--ring);outline-offset:-2px;background:var(--secondary)}.stone-button canvas{width:48px;height:48px;pointer-events:none}.stone-button .stone-name{font-size:12px;font-weight:500}.stone-button .stone-count{position:absolute;right:6px;top:6px;font:var(--type-micro);color:var(--text-secondary)}.stone-button:disabled canvas{opacity:.4;filter:grayscale(.8)}.inspector{min-height:126px;padding:16px 0 12px}.inspector-head{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px}.inspector-head strong{font:var(--type-text-strong)}.inspector p{font-size:12px;line-height:1.5}.tiny-tag{display:inline-block;color:var(--accent-foreground);background:var(--secondary);padding:4px 8px;border-radius:var(--radius-sm);font:var(--type-micro);white-space:nowrap}.properties{display:flex;gap:12px;margin-top:8px;font-size:10px;color:var(--text-secondary)}.properties b{font-weight:600;color:var(--foreground)}.build-actions{display:flex;gap:8px}.place-button{flex:1;color:var(--accent-foreground);background:var(--secondary)}.status-line{font-size:12px;line-height:1.5;margin-top:12px;min-height:36px}.status-line.error{color:var(--destructive)}.merge-actions{display:flex;flex-direction:column;gap:8px;margin-top:8px}.merge-actions:empty{display:none}.merge-button{width:100%;white-space:normal;text-align:left;font-size:12px;justify-content:flex-start;background:var(--secondary);color:var(--accent-foreground)}.enemy-brief{display:flex;align-items:center;gap:12px}.enemy-brief canvas{width:44px;height:44px}.enemy-brief>div{flex:1}.enemy-brief strong{font-size:14px;font-weight:500}.enemy-brief p{font-size:10px}.enemy-count{font-size:16px;font-weight:600}.wave-progress{height:4px;background:var(--muted);border-radius:var(--radius-pill);overflow:hidden;margin-top:12px}.wave-progress i{display:block;height:100%;background:var(--accent-foreground);transition:width .1s}.wave-actions{display:flex;gap:8px}.launch-button{flex:1;font-size:14px}.launch-button svg{fill:currentColor;width:16px}.speed-button{width:44px;padding:8px}.deck-footer{text-align:center;display:flex;flex-direction:column;gap:4px}.text-button{min-height:34px;border:0;background:transparent;padding:4px 8px;color:var(--text-secondary);font-size:12px}.save-state{font-size:10px;color:var(--text-secondary)}.recipes summary{cursor:pointer;min-height:24px;display:flex;justify-content:space-between;align-items:center;font-size:12px;font-weight:500}.recipes summary span{font-size:10px;color:var(--text-secondary)}.recipe{border-top:1px solid var(--border);margin-top:12px;padding-top:12px}.recipe-header{display:flex;align-items:center;gap:8px}.recipe canvas{width:36px;height:36px}.recipe strong{font-size:12px;display:block;font-weight:600}.recipe p{font-size:12px;line-height:1.5;margin-top:6px}.recipe .equation{font-size:10px;color:var(--text-secondary);margin-top:6px}.dev-only{display:none!important}body[data-view=dev] .dev-only{display:flex!important}.dev-toolbar{align-items:center;flex-wrap:wrap;gap:8px 12px;padding:12px;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-md);margin-bottom:16px;font-size:12px}.dev-toolbar label{display:flex;align-items:center;gap:8px}.dev-toolbar button{font-size:12px}.dev-badge{color:var(--accent-foreground);font:var(--type-caption-strong)}.file-button{min-height:44px;padding:10px 12px;cursor:pointer;background:var(--secondary);border:1px solid var(--border);border-radius:var(--radius-md)}.dev-model{flex:1 1 100%;color:var(--text-secondary);font-size:12px}.dev-report{flex-direction:column;gap:8px}.dev-report pre{margin:0;font-size:12px;line-height:1.6;white-space:pre-wrap;font-family:var(--font-sans)}.dev-report p,.dev-report a{font-size:12px}.wave-banner{position:absolute;left:50%;top:40%;transform:translate(-50%,-50%);padding:16px 24px;background:var(--glass);backdrop-filter:blur(12px);color:var(--foreground);border:1px solid var(--surface-border);border-radius:var(--radius-md);font:var(--type-subtitle);white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .25s}.wave-banner.visible{opacity:1}.pause-cover{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;background:var(--overlay);backdrop-filter:blur(6px)}.pause-cover>svg{width:38px;height:38px}.pause-cover strong{font:var(--type-title)}.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);max-width:calc(100vw - 32px);background:var(--popover);color:var(--foreground);border:1px solid var(--border);border-radius:var(--radius-md);padding:12px 20px;font-size:12px;box-shadow:var(--shadow-float);z-index:90}.modal-backdrop{position:fixed;inset:0;z-index:100;background:var(--overlay);backdrop-filter:blur(12px);display:flex;align-items:center;justify-content:center;padding:20px}.game-modal{position:relative;width:min(100%,760px);max-height:90svh;overflow-y:auto;background:var(--popover);border:1px solid var(--border);border-radius:var(--radius-lg);padding:30px;box-shadow:var(--shadow-float)}.modal-close{position:absolute;right:12px;top:12px}.game-modal h2{margin:0 44px 12px 0}.game-modal p{font-size:14px;line-height:1.6}.modal-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:20px}.modal-actions button{flex:1}.level-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:20px}.level-card{display:flex;align-items:center;gap:16px;min-height:132px;text-align:left;white-space:normal;padding:12px}.level-card>canvas{width:72px;height:88px;border-radius:var(--radius-sm);flex-shrink:0}.level-card>div{display:flex;flex-direction:column;gap:4px;align-items:flex-start}.level-card small{font-size:10px;color:var(--text-secondary)}.level-card strong{font-size:14px;font-weight:500}.level-card.active{border-color:var(--ring);background:var(--secondary)}.result-art{width:110px;height:110px;display:block;margin:0 auto 12px}.result-view{text-align:center}.result-view h2{margin:0 0 8px}.result-stars{display:flex;justify-content:center;gap:12px;margin:12px 0;color:var(--warning);font-size:30px}.result-metrics{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;background:var(--secondary);border-radius:var(--radius-md);padding:16px;margin:20px 0}.result-metrics strong{display:block;font:var(--type-numbers)}.result-metrics span{display:block;font-size:10px;color:var(--text-secondary)}.help-grid{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px 0}.help-step{padding:16px;background:var(--secondary);border-radius:var(--radius-md)}.help-step strong{display:block;margin-bottom:8px;font-size:14px;font-weight:500}.help-step p{font-size:12px}.help-intro{color:var(--accent-foreground);margin-bottom:8px}.embed .game-shell{padding:12px}.embed .brand>div>span{display:none}.embed .game-header{margin-bottom:12px}.embed .play-layout{grid-template-columns:minmax(0,1fr) 280px;gap:12px}.embed .command-deck{gap:8px}.embed .arena-card{padding:12px}.embed .brief-card{display:none}.embed .building-panel,.embed .wave-card{padding:12px}::-webkit-scrollbar{width:6px}::-webkit-scrollbar-thumb{background:var(--icon);border-radius:var(--radius-pill)}::-webkit-scrollbar-track{background:var(--background)}
@media(max-width:980px){.play-layout{grid-template-columns:minmax(0,1fr) 300px;gap:16px}.game-shell{padding:16px}.game-header{margin-bottom:16px}.arena-card{padding:12px}.building-panel,.wave-card{padding:12px}.arena-scene{max-width:520px}}
@media(max-width:767px){.game-shell{padding:12px 12px 24px}.game-header{gap:8px;margin-bottom:12px}.brand{gap:8px}.brand-mark{width:30px;height:30px}.brand h1{font-size:20px;line-height:24px}.brand>div>span{font-size:10px}.header-actions{gap:4px}.view-switch{gap:0;padding:3px}.view-switch button{font-size:10px;padding:8px;min-height:38px}.chapter-bar{margin-bottom:12px;gap:8px}.chapter-bar h2{font-size:20px;line-height:24px}.chapter-bar .eyebrow{font-size:10px}.chapter-actions{gap:4px}.chapter-actions .stars{display:none}.chapter-actions button{padding:8px}.soft-button>span{display:none}.play-layout,.embed .play-layout{display:flex;flex-direction:column;gap:12px}.arena-card{width:100%;padding:10px 10px 8px}.arena-scene{width:min(100%,calc((100svh - 340px)*9/11));min-width:250px;max-width:400px}.arena-hud{margin-bottom:8px}.integrity{max-width:125px;gap:4px}.integrity strong{font-size:16px}.integrity>svg{width:20px}.wave-hud strong{font-size:12px}.wave-dots{margin-top:4px}.wave-dots i{width:16px}.arena-foot{font-size:10px;padding-top:8px}.command-deck{width:100%;display:grid;grid-template-columns:1fr;gap:8px}.brief-card{display:none}.building-panel{padding:10px}.panel-heading{margin-bottom:8px}.building-panel .panel-heading{display:none}.gem-palette{gap:8px}.stone-button{min-height:62px;flex-direction:row;justify-content:flex-start;padding:6px;gap:0}.stone-button canvas{width:34px;height:40px}.stone-button .stone-name{font-size:10px}.stone-button .stone-count{right:5px;top:4px;font-size:10px}.inspector{min-height:0;padding:10px 0 8px}.inspector-head{margin-bottom:4px}.inspector p{font-size:12px}.inspector .properties{display:none}.inspector-head strong{font-size:12px}.status-line{min-height:0;font-size:10px;margin-top:8px}.wave-card{padding:10px 12px;display:flex;align-items:center;gap:12px}.wave-card .panel-heading{display:none}.enemy-brief{gap:8px;flex:1}.enemy-brief canvas{width:30px;height:30px}.enemy-brief strong{font-size:12px}.enemy-brief p{font-size:10px}.enemy-count{font-size:14px}.wave-progress{width:50px;margin:0}.wave-actions{order:1}.deck-footer{order:2}.recipes{order:3;padding:12px}.dev-report{order:4}.wave-actions button{min-height:44px}.view-switch+button{width:38px;min-height:44px}.health-track{height:3px}.game-modal{padding:24px 16px;max-height:92svh}.modal-backdrop{padding:12px}.level-grid{grid-template-columns:1fr}.level-card{min-height:106px}.level-card>canvas{width:56px;height:68px}.help-grid{grid-template-columns:1fr}.result-metrics{padding:12px}.dev-toolbar{margin-bottom:12px;gap:8px}.dev-toolbar input{width:88px}.dev-toolbar button{padding:8px;font-size:10px}.dev-model{font-size:10px}.embed .game-shell{padding:8px}.embed .arena-scene{width:min(100%,360px);min-width:0}.embed .arena-card{padding:8px}.embed .brand h1{font-size:16px}}
@media(prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* On a phone the build/launch action occupies one slot, not two stacked toolbars. */
@media(max-width:767px){
body[data-view=player].is-standalone .game-header{margin-bottom:8px}
body[data-view=player].is-standalone .chapter-bar{margin-bottom:8px}
body[data-view=player].is-standalone .arena-scene{width:min(100%,calc((100svh - 450px)*9/11));min-width:230px}
body[data-view=player] .building-panel .inspector{display:none}
body[data-view=player].has-tower .building-panel .inspector{display:block}
body[data-view=player] .building-panel .inspector>p{display:none}
body[data-view=player] .build-actions{display:none;margin-top:8px}
body[data-view=player].has-cell .build-actions,body[data-view=player].can-undo .build-actions{display:flex}
body[data-view=player].has-cell .wave-actions{display:none}
body[data-view=player].has-cell .wave-card,body[data-view=player].has-tower .wave-card{display:none}
body[data-view=player] .building-panel .status-line{line-height:14px;min-height:14px;margin-top:8px}
body[data-view=player] .wave-card{padding:4px 10px;min-height:38px}
body[data-view=player] .wave-card .enemy-brief canvas{width:24px;height:24px}
body[data-view=player] .wave-card .enemy-brief p{display:none}
body[data-view=player][data-phase=wave] .building-panel{display:none}
body[data-view=player][data-phase=wave].is-standalone .arena-scene{width:min(100%,calc((100svh - 285px)*9/11));max-width:430px}
body[data-view=player][data-phase=wave] .launch-button{display:none}
body[data-view=player][data-phase=wave] .wave-actions{justify-content:center}
body[data-view=player][data-phase=wave] .wave-actions .icon-button,body[data-view=player][data-phase=wave] .speed-button{width:calc(50% - 4px)}
}
