:root{
  --ink:#07150d;        /* Giraso green */
  --panel:#0b1d12;
  --panel-2:#10271a;
  --line:#1b3626;
  --line-2:#26493a;
  --text:#e4ece6;
  --muted:#8aa294;
  --faint:#5d7768;
  --lime:#c3ef5f;       /* accent */
  --lime-ink:#0a1a05;
  --paper:#f3f0e8;
  --sel:#178a4c;
  --hover:#d9822b;
  --danger:#f08a7b;
  --mono:'Geist Mono',ui-monospace,Menlo,monospace;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--ink);color:var(--text);font:13px/1.45 Geist,system-ui,sans-serif;-webkit-font-smoothing:antialiased}
button,input,select,textarea{font:inherit;color:inherit}
button{cursor:pointer}
svg.i{width:16px;height:16px;flex:none;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}

.app{display:grid;grid-template-rows:46px 1fr 28px;height:100vh}

/* top bar */
.top{display:flex;align-items:center;gap:4px;padding:0 10px 0 8px;background:var(--ink);border-bottom:1px solid var(--line);white-space:nowrap;overflow-x:auto}
.logo{display:flex;align-items:center;gap:9px;padding-right:12px;margin-right:6px;border-right:1px solid var(--line);height:30px}
.logo-mark{width:26px;height:26px;border-radius:6px;background:var(--lime);color:var(--lime-ink);display:grid;place-items:center;font-weight:700;font-size:16px;line-height:1;padding-bottom:2px}
.logo b{font-weight:600;letter-spacing:-.01em}
.logo span{color:var(--muted);font-weight:400}
.fname{background:transparent;border:1px solid transparent;border-radius:5px;padding:4px 7px;color:var(--text);width:170px;min-height:30px}
.fname:hover{border-color:var(--line)}
.fname:focus{outline:none;border-color:var(--line-2);background:var(--panel)}
.spacer{flex:1}
.tb{background:transparent;border:1px solid transparent;border-radius:5px;padding:5px 8px;display:inline-flex;align-items:center;gap:6px;color:var(--text);min-height:30px;flex:none}
.tb:hover{background:var(--panel-2)}
.tb:disabled{opacity:.35;cursor:default;background:transparent}
.tb.outline{border-color:var(--line-2)}
.tb.go{background:var(--lime);color:var(--lime-ink);font-weight:600;border-color:var(--lime)}
.tb.go:hover{background:#d2f77f}
.vr{width:1px;height:20px;background:var(--line);margin:0 6px;flex:none}
.zoom{font-family:var(--mono);font-size:12px;color:var(--muted);min-width:46px;text-align:center}

/* body */
main{display:grid;grid-template-columns:44px 240px 1fr 296px;min-height:0}
.rail{background:var(--ink);border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 0}
.tool{width:34px;height:34px;border-radius:6px;border:0;background:transparent;color:var(--muted);display:grid;place-items:center;position:relative}
.tool:hover{color:var(--text);background:var(--panel-2)}
.tool[aria-pressed="true"]{background:var(--lime);color:var(--lime-ink)}
.tool svg.i{width:18px;height:18px}
.rail hr{width:20px;border:0;border-top:1px solid var(--line);margin:6px 0}

.side{background:var(--panel);display:flex;flex-direction:column;min-height:0}
.side.left{border-right:1px solid var(--line)}
.side.right{border-left:1px solid var(--line)}
.head{display:flex;align-items:center;justify-content:space-between;padding:12px 12px 6px;font-weight:600;font-size:12px;color:var(--text)}
.head small{font-weight:400;color:var(--faint);font-size:11px}

.layers{flex:1;overflow:auto;padding:0 6px 8px;min-height:0}
.lrow{display:flex;align-items:center;gap:7px;width:100%;border:0;background:none;text-align:left;padding:4px 6px;border-radius:5px;color:var(--text);min-height:28px}
.lrow:hover{background:var(--panel-2)}
.lrow.sel{background:#1a3d2a;box-shadow:inset 2px 0 0 var(--lime)}
.lrow.dim{color:var(--faint)}
.lrow .nm{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lrow .tg{color:var(--faint);font-size:11px;font-family:var(--mono)}
.lrow .ic{color:var(--muted);display:grid;place-items:center}
.lrow .ic svg.i{width:14px;height:14px}
.chipdot{width:10px;height:10px;border-radius:2px;box-shadow:inset 0 0 0 1px #ffffff2e;flex:none}
.eye{border:0;background:none;color:var(--faint);padding:3px;border-radius:4px;display:grid;place-items:center;visibility:hidden}
.lrow:hover .eye,.eye.off{visibility:visible}
.eye:hover{color:var(--text)}
.eye svg.i{width:14px;height:14px}

.colors{border-top:1px solid var(--line);padding-bottom:12px}
.colors p{margin:0 12px 10px;color:var(--faint);font-size:11.5px}
.swatches{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;padding:0 12px}
.sw{position:relative}
.chip{width:100%;aspect-ratio:1;border-radius:5px;border:0;box-shadow:inset 0 0 0 1px #ffffff26;display:block}
.chip:hover{box-shadow:inset 0 0 0 1px #ffffff26,0 0 0 2px var(--lime)}
.sw label{position:absolute;right:-3px;bottom:-3px;width:15px;height:15px;border-radius:4px;background:var(--panel);border:1px solid var(--line-2);display:grid;place-items:center;color:var(--muted);cursor:pointer}
.sw label:hover{color:var(--lime)}
.sw label svg.i{width:10px;height:10px;stroke-width:2}
.sw input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none}

/* stage */
.stage{position:relative;overflow:hidden;background:#e7e3d8;background-image:radial-gradient(#07150d1f 1px,transparent 1.2px);background-size:24px 24px;touch-action:none}
.stage[data-tool]:not([data-tool="select"]){cursor:crosshair}
.stage.panning{cursor:grabbing}
.viewport{position:absolute;left:0;top:0;transform-origin:0 0}
.art{background:#fff;box-shadow:0 1px 0 #07150d14,0 0 0 1px #07150d1a}
.art.checker{background-color:#fff;background-image:linear-gradient(45deg,#eeeae1 25%,transparent 25%),linear-gradient(-45deg,#eeeae1 25%,transparent 25%),linear-gradient(45deg,transparent 75%,#eeeae1 75%),linear-gradient(-45deg,transparent 75%,#eeeae1 75%);background-size:14px 14px;background-position:0 0,0 7px,7px -7px,-7px 0}
.art>svg{display:block;width:100%;height:100%;overflow:visible}
.overlay{position:absolute;inset:0;pointer-events:none}
.box{position:absolute;outline:1.5px solid var(--sel)}
.box.hover{outline:1px solid var(--hover)}
.tag{position:absolute;left:-1.5px;top:-21px;background:var(--sel);color:#fff;font:500 11px/1 var(--mono);padding:4px 6px;border-radius:3px 3px 3px 0;white-space:nowrap}
.handle{position:absolute;width:9px;height:9px;margin:-4.5px 0 0 -4.5px;background:#fff;border:1.5px solid var(--sel);pointer-events:auto;cursor:nwse-resize}
.drop{position:absolute;inset:14px;border:1.5px dashed var(--ink);border-radius:8px;display:none;align-items:center;justify-content:center;font-size:15px;color:var(--ink);background:#f3f0e8d9;pointer-events:none}
.stage.dragover .drop{display:flex}

/* right panel */
.tabs{display:flex;padding:0 6px;border-bottom:1px solid var(--line);gap:2px}
.tab{border:0;background:none;padding:12px 8px 10px;color:var(--muted);font-weight:500;border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{color:var(--text)}
.tab[aria-selected="true"]{color:var(--text);border-bottom-color:var(--lime)}
.pbody{flex:1;overflow:auto;min-height:0;padding-bottom:20px}
.selhead{padding:12px 12px 2px;display:flex;align-items:baseline;gap:8px}
.selhead b{font-size:14px;font-weight:600}
.selhead span{color:var(--faint);font-size:12px;font-family:var(--mono)}
.empty{padding:2px 12px 8px;color:var(--muted);font-size:12px}
.acts{display:flex;flex-wrap:wrap;gap:4px;padding:10px 12px 12px;border-bottom:1px solid var(--line)}
.ab{border:1px solid var(--line-2);background:transparent;border-radius:5px;width:32px;height:30px;display:grid;place-items:center;color:var(--muted)}
.ab:hover{color:var(--text);border-color:var(--muted)}
.ab.danger:hover{color:var(--danger);border-color:var(--danger)}
.ab.txt{width:auto;padding:0 9px;font-size:12px}
.sec{border-bottom:1px solid var(--line);padding:2px 0 10px}
.sec>.head{padding-top:10px}
.row{display:grid;grid-template-columns:84px 1fr;align-items:center;gap:8px;padding:2px 12px}
.row>label{color:var(--muted);font-size:12px;user-select:none;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pair{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:2px 12px}
.nf{position:relative;display:flex;align-items:center}
.nf>label{position:absolute;left:0;top:0;bottom:0;width:26px;display:grid;place-items:center;color:var(--faint);font:500 11px var(--mono);cursor:ew-resize;user-select:none;z-index:1}
.nf>label:hover{color:var(--lime)}
.nf input{padding-left:28px !important}
label.scrub{cursor:ew-resize}
label.scrub:hover{color:var(--lime)}
input[type=text],select,textarea{width:100%;background:var(--ink);border:1px solid var(--line);border-radius:5px;padding:5px 7px;min-height:30px}
input[type=text]{font-family:var(--mono);font-size:12px}
input[type=text]:hover,select:hover,textarea:hover{border-color:var(--line-2)}
input[type=text]:focus,select:focus,textarea:focus{outline:none;border-color:var(--lime)}
select{font-size:12px}
textarea{resize:vertical;font-family:var(--mono);font-size:12px}
.cc{display:flex;gap:6px;align-items:center}
.cc input[type=color]{width:30px;height:30px;padding:0;border:1px solid var(--line-2);border-radius:5px;background:none;flex:none;cursor:pointer}
.cc input[type=color]::-webkit-color-swatch-wrapper{padding:3px}
.cc input[type=color]::-webkit-color-swatch{border:0;border-radius:3px}
.cc .ab{flex:none}
.arow{display:grid;grid-template-columns:84px 1fr 26px;gap:6px;padding:2px 12px;align-items:center}
.arow .k{color:var(--muted);font:12px var(--mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.x{border:0;background:none;color:var(--faint);border-radius:4px;height:28px;display:grid;place-items:center}
.x:hover{color:var(--danger)}
.x.add:hover{color:var(--lime)}
.codewrap{display:flex;flex-direction:column;gap:8px;padding:12px;height:100%}
.codewrap textarea{flex:1;min-height:300px;white-space:pre;overflow:auto;line-height:1.55}
.keys{padding:6px 12px;display:grid;grid-template-columns:auto 1fr;gap:7px 12px;font-size:12px;color:var(--muted);align-items:center}
.keys kbd{font:500 11px var(--mono);color:var(--text);background:var(--ink);border:1px solid var(--line-2);border-bottom-width:2px;border-radius:4px;padding:1px 5px;white-space:nowrap;justify-self:start}

/* status bar */
.status{display:flex;align-items:center;gap:18px;padding:0 12px;border-top:1px solid var(--line);background:var(--ink);color:var(--faint);font:11.5px var(--mono);white-space:nowrap;overflow:hidden}
.status b{color:var(--muted);font-weight:500}
.status .msg{margin-left:auto;color:var(--lime);opacity:0;transition:opacity .2s}
.status .msg.on{opacity:1}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
@media (max-width:980px){main{grid-template-columns:44px 1fr 280px}.side.left{display:none}}
.sprite{position:absolute;width:0;height:0}
.codeacts{display:flex;gap:6px}
