:root{color-scheme:dark;--ink:#102b27;--paper:#f0e8c9;--gold:#e9b777;--leaf:#c5df8b;font-family:system-ui,-apple-system,BlinkMacSystemFont,'Segoe UI',sans-serif;color:var(--paper);background:#102722}*{box-sizing:border-box}body{margin:0;overflow:hidden;overscroll-behavior:none}button,input,select{font:inherit}button{cursor:pointer;color:inherit;background:#244638;border:1px solid #66836466;border-radius:8px}button:hover{border-color:var(--leaf)}button:focus-visible,input:focus-visible,select:focus-visible{outline:2px solid var(--gold);outline-offset:2px}button:disabled{opacity:.45;cursor:default}input,select{color:var(--paper);background:#0c241f;border:1px solid #68816c;border-radius:6px;padding:10px;min-width:0}input[type=checkbox]{width:22px;height:22px;accent-color:var(--leaf)}input[type=range]{padding:0;accent-color:var(--leaf)}svg{width:24px;height:24px;flex:none}.svg-defs{position:absolute;width:0;height:0;overflow:hidden}[hidden]{display:none!important}#game{position:relative;width:100%;height:100dvh;min-height:240px;isolation:isolate;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}#field{position:absolute;inset:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left);touch-action:none}canvas{display:block;width:100%;height:100%;touch-action:none}#chrome{position:absolute;transform-origin:top left;pointer-events:none}#header,#footer{position:absolute;background:#102b27e8;border:1px solid #5b775d55;pointer-events:auto;overflow:hidden}#screen-items{position:absolute;inset:0;pointer-events:none}.widget{position:absolute;display:flex;align-items:center;justify-content:center;gap:5px;margin:0;padding:3px 5px;overflow:hidden;font-size:12px;line-height:1.15;white-space:normal;pointer-events:auto}.widget.brand{justify-content:flex-start;color:var(--leaf);font-weight:800;letter-spacing:1.3px;font-size:14px;text-decoration:none}.widget.stat{flex-direction:column;align-items:flex-start}.widget.stat strong{font-size:17px;font-variant-numeric:tabular-nums}.widget small{font-size:10px}.widget.skill{flex-direction:column;font-size:12px;font-weight:650}.widget.skill small{font-size:10px;font-weight:400;color:var(--gold)}.widget.joystick{border-radius:50%;border:1px solid #a2b47d88;background:#1e3d31aa;touch-action:none}.joystick-knob{width:36%;height:36%;border-radius:50%;background:#a4bc7b88;border:1px solid #c5df8b88;pointer-events:none}.widget.dialogue{background:#182d24f2;border:1px solid var(--gold);border-radius:8px;text-align:center;flex-direction:column}.widget.boss{background:#202d27d9;border-radius:8px;flex-direction:column}.widget.boss progress{width:100%;height:8px;accent-color:var(--gold)}.widget.help{font-size:10px;color:#a9b79a;justify-content:flex-start}.overlay{position:absolute;inset:0;z-index:10}.home{background:linear-gradient(180deg,#102b27ee 0%,#102b2799 40%,#102b27ee 68%);padding:max(28px,env(safe-area-inset-top)) 24px max(20px,env(safe-area-inset-bottom));overflow:auto;display:flex;flex-direction:column;justify-content:space-between;gap:28px}.home-copy,.home-actions{width:min(100%,440px);margin:0 auto}.eyebrow{font-size:10px;font-weight:800;letter-spacing:2px;color:var(--gold)}h1{font:500 clamp(35px,7vh,64px)/1.02 Georgia,serif;letter-spacing:-1.6px;margin:20px 0 16px}h2{font:500 32px/1.1 Georgia,serif;margin:16px 0}em{color:var(--leaf);font-weight:400}p{font-size:14px;line-height:1.55;color:#b6c3ac}label{font-size:13px}#start-form{display:grid;grid-template-columns:1fr 88px;gap:10px;align-items:center}#start-form button{grid-column:1/-1}.primary,.secondary{display:flex;align-items:center;justify-content:space-between;width:100%;padding:15px 18px;font-weight:750;font-size:15px;margin:10px 0}.primary{color:#183629;background:var(--leaf);border-color:var(--leaf)}.secondary{background:#1c3c30}.quiet{display:block;background:transparent;border-color:transparent;padding:12px;text-align:center;width:100%;color:#bac6ac}.modal{display:grid;place-items:center;background:#071c17d9;padding:20px;overflow:auto}.panel{width:min(100%,470px);max-height:100%;overflow:auto;padding:24px;border:1px solid #66836466;border-radius:16px;background:#153428}.hint{font-size:12px}.upgrade-choice{display:flex;justify-content:space-between;gap:16px;align-items:center;width:100%;text-align:left;padding:12px;margin-bottom:8px;font-size:13px}.upgrade-choice small{display:block;color:#b2c79e;margin-top:4px}#toast{position:absolute;bottom:20%;left:50%;transform:translateX(-50%);max-width:90%;padding:10px 16px;border-radius:8px;background:#102722f5;border:1px solid #a2b47d99;z-index:40;font-size:13px;pointer-events:none;opacity:0;transition:opacity .15s}#toast.show{opacity:1}#placement-bar{position:absolute;z-index:35;bottom:12px;left:12px;right:12px;display:flex;align-items:center;justify-content:space-between;gap:12px;background:#102722f2;padding:12px;border:1px solid var(--gold);border-radius:8px;font-size:12px}#placement-bar button{padding:10px;flex:none}.editor{z-index:30;background:#102b27f8;display:flex;flex-direction:column;padding:env(safe-area-inset-top) env(safe-area-inset-right) env(safe-area-inset-bottom) env(safe-area-inset-left)}.editor-top{padding:14px 18px 10px;border-bottom:1px solid #76956944;display:flex;gap:12px;align-items:center;justify-content:space-between}.editor-top h2{font:600 19px system-ui;margin:0 0 4px}.editor-top small{font-size:11px;color:#b7c9a6}.editor-top button{padding:10px 14px}.editor-nav{display:flex;gap:6px;padding:10px 18px;overflow:auto;flex:none;border-bottom:1px solid #76956944}.editor-nav button{white-space:nowrap;padding:8px 12px;font-size:12px}.editor-nav button[aria-current=page]{background:var(--leaf);color:var(--ink)}.editor-body{overflow:auto;overscroll-behavior:contain;flex:1;padding:18px;touch-action:pan-y}.editor-content{max-width:850px;margin:auto}.editor-content h3{font-size:18px;margin:6px 0 16px}.editor-content h4{font-size:14px;margin:22px 0 8px;color:var(--gold)}.editor-content p{margin:6px 0 14px;font-size:12px}.editor-error{padding:10px 18px;color:#ffd1ac;background:#542b22;font-size:13px}.setting-row{display:grid;grid-template-columns:minmax(150px,1fr) minmax(95px,170px);align-items:center;gap:10px;border-bottom:1px solid #78946d22;padding:10px 0}.setting-row small{display:block;color:#a4b998;font-size:11px;font-weight:400;line-height:1.4;margin-top:3px}.setting-row input,.setting-row select{width:100%;padding:8px;font-size:13px}.setting-row input[type=checkbox]{width:22px;justify-self:end}.setting-row input[type=range]{grid-column:1/-1}.editor-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:8px}.editor-card{padding:14px;text-align:left}.editor-card small{display:block;color:#aac099;margin-top:6px}.editor-actions{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}.editor-actions button{padding:10px 14px;font-size:13px}.inline-pick{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:12px 0}.inline-pick input{width:100px}.inline-pick select{max-width:100%}.npc-list{padding:0;list-style:none}.npc-list li{display:flex;justify-content:space-between;gap:10px;padding:8px;border-bottom:1px solid #78946d33;font-size:12px}.npc-list button{padding:5px 10px}.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%)}@media(orientation:landscape) and (max-height:600px){.home{flex-direction:row;align-items:center;gap:32px;padding:18px 36px}.home-copy,.home-actions{width:46%;margin:0}h1{font-size:42px;margin:10px 0}.home p{font-size:12px}.home-actions p{margin:4px 0}.primary,.secondary{padding:11px 16px;margin:8px 0}.quiet{padding:6px}.editor-top{padding:8px 14px}.editor-nav{padding:6px 14px}}@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition:none!important}}
/* Quiet, stable editor feedback and grouped level controls. */
textarea{font:inherit;color:var(--paper);background:#0c241f;border:1px solid #68816c;border-radius:6px;padding:10px;min-width:0;resize:vertical}
textarea:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.editor-top{flex:none;flex-wrap:wrap}.editor-top .editor-actions{margin:0}.editor-body{min-height:0;scrollbar-gutter:stable;overflow-anchor:none}
.editor-content{padding-bottom:28px}.editor-content>.inline-pick{gap:8px}.setting-row textarea{width:100%;font-size:13px;line-height:1.5}
.setting-group{margin:16px 0;padding:14px 16px;border:1px solid #78946d44;border-radius:10px;background:#15392d}
.setting-group h4{margin:0 0 8px;color:var(--paper)}.setting-group .setting-row:last-child{border-bottom:0}
.editor-content .level-summary{padding:12px 14px;border-left:3px solid var(--leaf);border-radius:4px;background:#244638;color:var(--paper);line-height:1.6}
.editor-content .resolved-stats{color:var(--leaf);line-height:1.7;font-variant-numeric:tabular-nums}
.bulk-change{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) minmax(0,1fr);gap:10px;align-items:center}
.bulk-change h4,.bulk-change p{grid-column:1/-1}.bulk-change select,.bulk-change input,.bulk-change textarea{width:100%;font-size:13px}
.bulk-change button{justify-self:start;padding:8px 12px}.bulk-preview-list{max-height:320px;overflow:auto;border:1px solid #78946d44;border-radius:8px}
.bulk-preview table{border-collapse:collapse;width:100%;font-size:12px}.bulk-preview th,.bulk-preview td{text-align:left;padding:10px;border-bottom:1px solid #78946d33;overflow-wrap:anywhere}
.bulk-preview th{position:sticky;top:0;background:#244638}.bulk-preview td:first-child{font-variant-numeric:tabular-nums}
#toast.editor-toast{position:fixed;top:max(10px,env(safe-area-inset-top));bottom:auto;left:50%;max-width:min(90%,560px);z-index:60;box-shadow:0 4px 16px #0004;transition:none}
#toast.error{border-color:#e9b777;background:#422c20}
.widget.dialogue{display:block;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.45;padding:8px;font-size:12px;touch-action:pan-y}
@media(max-width:550px){.editor-top{padding:10px 12px}.editor-top h2{font-size:17px}.editor-top button{padding:8px 10px;font-size:12px}.editor-nav{padding:8px 12px}.editor-body{padding:12px}.setting-group{padding:12px}.bulk-change{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.bulk-change>select:first-of-type,.bulk-change textarea{grid-column:1/-1}.setting-row{grid-template-columns:minmax(130px,1fr) minmax(90px,150px)}}

.editor{background:#102b27}
/* Desktop tip stays below dialogs and never interrupts play. */
#window-hint{position:absolute;z-index:5;top:max(12px,env(safe-area-inset-top));right:max(12px,env(safe-area-inset-right));display:flex;align-items:center;gap:8px;width:max-content;max-width:calc(100% - 24px);padding:8px 8px 8px 12px;border:1px solid #a2b47d88;border-radius:8px;background:#102722f5;box-shadow:0 3px 12px #0003;font-size:12px;line-height:1.4}
#window-hint span{max-width:240px}#window-hint button{flex:none;width:32px;height:32px;font-size:20px;line-height:1}
/* Campaign setup and ending share the existing grove palette. */
#start-form{grid-template-columns:minmax(0,1fr) minmax(100px,130px)}
#start-form #difficulty-buttons button{grid-column:auto}
.difficulty-picker{grid-column:1/-1;border:0;padding:0;margin:0 0 4px;min-width:0}
.difficulty-picker legend{font-size:13px;margin-bottom:8px}
#difficulty-buttons{display:grid;grid-template-columns:1fr 1fr 1.4fr;gap:6px}
#difficulty-buttons button{min-height:44px;padding:9px 6px;font-size:12px;font-weight:650}
#difficulty-buttons button[aria-pressed=true]{background:var(--leaf);color:var(--ink);border-color:var(--leaf)}
#difficulty-summary{font-size:12px;margin:8px 0 4px;line-height:1.45;min-height:35px}
.home-actions{flex:none}.home-actions input,.home-actions select{width:100%}
.victory-panel{text-align:center;border-color:#c5df8b88}
#victory-message{white-space:pre-wrap;overflow-wrap:anywhere;color:var(--paper)}
#credits-window{height:clamp(100px,20dvh,190px);overflow:auto;overscroll-behavior:contain;touch-action:pan-y;border-top:1px solid #78946d44;border-bottom:1px solid #78946d44;margin:18px 0 8px;scrollbar-width:thin}
#credits-window:focus-visible{outline:2px solid var(--gold);outline-offset:3px}
#credits-track{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.9;font-size:13px;color:var(--paper);padding:18px 14px 26px}
.credits-actions{display:flex;justify-content:center;gap:8px;margin-bottom:16px}
.credits-actions button{padding:8px 12px;font-size:12px;min-height:38px}
.setting-row:has(textarea){grid-template-columns:1fr}.setting-row:has(textarea) textarea{max-width:100%}
@media(orientation:landscape) and (max-height:600px){.home{align-items:flex-start}.home-copy{position:sticky;top:0}.home-actions{padding-bottom:16px}.victory-panel{max-height:none}.modal:has(.victory-panel){display:block}.victory-panel{margin:0 auto}}

/* Independent aiming control and compact bulk-edit panels. */
.widget.aimstick{border-color:var(--gold)}.aimstick .joystick-knob{background:#e9b77788;border-color:var(--gold)}
.stick-label{position:absolute;bottom:7px;font-size:9px;letter-spacing:1px;color:var(--gold);pointer-events:none}
.bulk-npc{margin-top:12px;padding:12px;border:1px solid #78946d44;border-radius:8px;background:#102b27}
.bulk-toggle{display:flex;align-items:center;gap:10px;padding:7px 0;font-size:13px}.bulk-toggle input{flex:none}
.bulk-npc .bulk-change{grid-template-columns:1fr 1fr;margin:0 0 8px}.bulk-npc>button{padding:8px;margin-top:8px}
.setting-group>input[type=search],.setting-group>select{display:block;width:100%;margin:8px 0;font-size:13px}
#difficulty-buttons [data-custom]{grid-column:1/-1}#custom-difficulty-page .secondary{overflow-wrap:anywhere}
#custom-confirm{z-index:20}#custom-confirm h2{font-size:26px;overflow-wrap:anywhere}
/* Grove Defenders menu, shared editor and scoped saves. */
.grove-title{font-size:clamp(50px,9vh,88px);letter-spacing:-2px;text-shadow:0 3px 24px #071c17}.grove-title em{font-style:italic}
#start-form button[type=submit]{justify-content:center;text-align:center}#start-form button[type=submit] small{display:block;margin-top:4px;font-size:13px;font-weight:500}
.widget.brand{letter-spacing:0;font-size:14px}.widget[data-widget=wave]{white-space:nowrap;font-size:11px;overflow:visible}.widget[data-widget=clock]{font-variant-numeric:tabular-nums}
.widget.joystick{overflow:visible}.stick-label{position:absolute;bottom:auto;top:calc(100% + 5px);left:0;width:100%;text-align:center;font-size:12px;font-weight:500;pointer-events:none;color:var(--paper)}
.difficulty-stack{display:flex;flex-direction:column;gap:8px;max-width:650px}.difficulty-stack .editor-card{width:100%;min-height:54px;font-size:16px;padding:15px 20px}
.editing-status{font:italic 600 13px Georgia,serif;color:var(--gold);border-left:2px solid var(--gold);padding:6px 12px;overflow-wrap:anywhere}
.search-results{display:grid;gap:8px}.search-results .editor-card{width:100%}.search-target{outline:2px solid var(--gold);outline-offset:3px}
.save-dialog{color:var(--paper);background:#153428;border:1px solid #668364;border-radius:16px;width:min(420px,calc(100% - 32px));padding:24px;box-shadow:0 15px 80px #0008;opacity:1;transition:opacity .6s}
.save-dialog::backdrop{background:#071c17cf}.save-dialog input{width:100%}.save-dialog h3{margin:0 0 18px}.save-actions{display:grid;grid-template-columns:2fr 1fr;gap:8px;margin-top:20px}.save-actions button{padding:10px;min-height:44px}.save-dialog.fading{opacity:0}.save-error{color:#ffd1ac}.save-success{color:var(--leaf);margin:12px 0;font-size:16px}
#checkpoint-message{position:absolute;z-index:45;left:50%;top:30%;transform:translateX(-50%);padding:18px 24px;background:#153428;border:1px solid var(--gold);border-radius:10px;pointer-events:none}
.widget.checkpoint{transition:transform .25s;font-size:11px}.widget.checkpoint.shrinking{transform:scale(.5)}
@media(prefers-reduced-motion:reduce){.widget.checkpoint,.save-dialog{transition:none}}

/* Keep difficulty selection on its own Home Screen page. */
#choose-difficulty{justify-content:center;text-align:center}
.difficulty-page #difficulty-buttons{display:flex;flex-direction:column;gap:8px}
.difficulty-page #difficulty-buttons button{width:100%;min-height:50px;text-align:left;padding:14px 18px;font-size:15px}
#saved-difficulties-title{font:600 16px system-ui;margin:20px 0 8px}

.home-secondary-actions{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,2fr);gap:10px;margin:10px 0}
.home-secondary-actions .secondary{margin:0;min-width:0;min-height:50px}
#welcome-button{justify-content:center;padding-inline:10px}

button,.editor-card{text-align:center}.widget.brand{justify-content:center}.primary,.secondary{justify-content:center}.editor-card small{text-align:center}#pause-panel .panel{text-align:center}.difficulty-stack{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));max-width:none}.difficulty-stack .editor-card{padding:12px 6px;font-size:13px;overflow-wrap:anywhere}

.editor-session-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-width:360px;width:100%}.editor-session-actions>button:first-child{grid-column:1/-1}.editor-session-actions>button{min-width:0}

.editor-card,.upgrade-choice{text-align:center;justify-content:center}

.gui-preset-actions{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}.gui-preset-actions button{flex:1;min-width:100px;min-height:44px;padding:10px;font-size:13px}.import-control{margin:12px 0}.import-control button{width:100%;min-height:44px;padding:10px;white-space:normal;overflow-wrap:anywhere}#menu-credits{margin:0}

#movement-message{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:38;max-width:90%;width:max-content;padding:14px 18px;border:1px solid var(--leaf);border-radius:10px;background:#102b27ed;color:var(--paper);text-align:center;font-size:17px;font-weight:700;pointer-events:none}

.gui-preset-picker{display:flex;gap:8px;align-items:center;margin-bottom:18px}.gui-preset-picker select{flex:1;width:0}.gui-preset-picker button{padding:10px;font-size:13px;min-height:44px}
