:root{
  color-scheme:dark;
  --ink:#e8eef7; --muted:#93a3b8; --line:#22314a; --bg:#0b1220; --panel:#111c2f;
  --panel2:#16233b; --accent:#4f8ef7; --ok:#22c55e; --warn:#f59e0b; --bad:#ef4444;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{background:var(--bg);color:var(--ink);font:15px/1.5 -apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,Helvetica,Arial,sans-serif}
header{display:flex;align-items:center;gap:12px;padding:10px 14px;background:#0a1526;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}
header .mark{width:34px;height:34px;border-radius:9px;background:linear-gradient(135deg,#4f8ef7,#22d3ee);display:grid;place-items:center;font-size:19px}
header .title{display:flex;flex-direction:column;line-height:1.15}
header .title strong{font-size:15px}
header .title span{font-size:12px;color:var(--muted)}
header nav{display:flex;gap:4px;margin-left:10px;flex-wrap:wrap}
header nav button{background:none;border:0;color:var(--muted);font:inherit;font-size:13.5px;padding:8px 11px;border-radius:9px;cursor:pointer}
header nav button.on,header nav button:hover{background:var(--panel2);color:#fff}
header .net{margin-left:auto;font-size:12px;color:var(--ok);border:1px solid var(--line);border-radius:999px;padding:3px 10px}
header .net.off{color:var(--warn)}

main{height:calc(100% - 55px);overflow:auto}
.view{display:none;padding:14px}
.view.on{display:block}
.split{display:grid;gap:12px;grid-template-columns:minmax(280px,1.15fr) minmax(330px,1fr) minmax(300px,1fr);align-items:start}
@media (max-width:1180px){.split{grid-template-columns:1fr 1fr}.out-pane{grid-column:1 / -1}}
@media (max-width:820px){.split{grid-template-columns:1fr}}

.pane{background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.pane-head{display:flex;align-items:center;gap:8px;padding:10px 12px;background:var(--panel2);border-bottom:1px solid var(--line);font-weight:600;font-size:14px}
.pane-head .grow{flex:1}

.frame{position:relative;min-height:420px;background:#0e1526;display:flex;flex-direction:column}
.frame.drag{outline:2px dashed var(--accent);outline-offset:-6px}
.frame .placeholder{padding:20px;color:var(--muted);font-size:13.5px;max-width:52ch}
.frame .pdf{flex:1;width:100%;min-height:420px;border:0}
.frame iframe{width:100%;height:420px;border:0;background:#fff}
.frame-foot{display:flex;align-items:center;gap:8px;padding:8px 12px;border-top:1px solid var(--line);font-size:12.5px}

form.form{padding:12px;display:flex;flex-direction:column;gap:12px}
fieldset{border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:0}
legend{font-size:12.5px;color:var(--muted);padding:0 6px}
label{display:flex;flex-direction:column;gap:4px;font-size:12.5px;color:var(--muted)}
label.inline{flex-direction:row;align-items:center;gap:7px;color:var(--ink);font-weight:600;font-size:13.5px}
input,select{background:#0d1728;border:1px solid var(--line);color:var(--ink);border-radius:8px;padding:8px 9px;font:inherit;font-size:14px;min-width:0}
input[type=checkbox]{width:16px;height:16px;accent-color:var(--accent)}
.grid2{display:grid;grid-template-columns:1fr minmax(80px,auto);gap:10px}
.grid3{display:grid;grid-template-columns:repeat(auto-fit,minmax(92px,1fr));gap:10px}
.grid4{display:grid;grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:10px}
.fieldset-stock .grid3 > label:last-child{grid-column:1 / -1}
.row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.grow{flex:1}
.hint{font-size:12px;color:var(--muted);margin:8px 0 0}

button,.mini{background:var(--panel2);border:1px solid var(--line);color:var(--ink);border-radius:9px;padding:8px 12px;font:inherit;font-size:13.5px;cursor:pointer}
button:hover,.mini:hover{border-color:#33507d}
button.primary{background:var(--accent);border-color:var(--accent);color:#04101f;font-weight:700}
button.mini{padding:5px 9px;font-size:12.5px}
button.danger{color:#fca5a5;border-color:#5b1a1a}
button.link{background:none;border:0;color:var(--accent);padding:0;font-size:inherit;text-decoration:underline;cursor:pointer}
.actions{display:flex;gap:8px;flex-wrap:wrap}

.stations{display:flex;flex-direction:column;gap:8px;margin-bottom:8px}
.station{display:grid;grid-template-columns:1fr 1fr 1fr auto;gap:8px;align-items:end}

.out-pane{position:sticky;top:66px}
.code{margin:0;padding:12px;background:#0a1322;color:#d7e6ff;font:12.5px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;white-space:pre;overflow:auto;max-height:calc(100vh - 190px)}
.warnings{padding:10px 12px;border-bottom:1px solid var(--line);max-height:210px;overflow:auto}
.warn-head{color:var(--warn);font-weight:700;font-size:13px;margin-bottom:6px}
.warn-item{font-size:12.5px;color:#f4d9a8;padding:5px 0 5px 12px;border-left:2px solid var(--warn);margin-bottom:5px}
.ok-head{color:var(--ok);font-size:12.5px}

h2{margin:0 0 8px;font-size:18px}
h3{margin:18px 0 6px;font-size:15px}
.muted{color:var(--muted);font-size:13px}
a{color:var(--accent)}
.drop{border:2px dashed var(--line);border-radius:14px;padding:22px;text-align:center;background:var(--panel)}
.drop.drag{border-color:var(--accent);background:var(--panel2)}
.card{display:flex;align-items:center;gap:10px;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 12px;margin:8px 0}
.sheet{padding:16px;background:#0a1322;border:1px solid var(--line);border-radius:12px;white-space:pre-wrap;font:12.5px/1.6 ui-monospace,Menlo,monospace}
.toast{position:fixed;left:50%;transform:translateX(-50%);bottom:22px;background:#16233b;border:1px solid var(--line);color:#fff;padding:10px 16px;border-radius:10px;z-index:80;box-shadow:0 8px 30px rgba(0,0,0,.45)}
.toast.bad{border-color:#7f1d1d;background:#2a1414}
@media print{header,nav,.actions,.pane-head{display:none!important}.sheet{background:#fff;color:#000;border:0}}

/* AI drawing read — the guess warning has to be impossible to miss */
.hint.warn{color:#ffcf70}
.card.ai{border-color:#4a5f8a;background:linear-gradient(180deg,rgba(74,95,138,.18),rgba(74,95,138,.06))}
#ai-result[hidden]{display:none}

/* ---------------------------------------------------------- setup assistant */
.chatlog{display:flex;flex-direction:column;gap:10px;margin:12px 0;max-height:52vh;overflow-y:auto}
.msg{padding:10px 12px;border-radius:12px;border:1px solid var(--line);max-width:min(900px,92%)}
.msg.user{align-self:flex-end;background:rgba(74,95,138,.22);border-color:#4a5f8a}
.msg.ai{align-self:flex-start;background:var(--panel)}
.msg .who{font-size:11px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:5px}
.msg pre{margin:8px 0 0;white-space:pre-wrap;font-family:inherit;font-size:13px;line-height:1.5}
.msg .gcodeblock{position:relative;background:#0b1020;border:1px solid #2a3550;border-radius:10px;
  padding:10px 12px;margin-top:9px;overflow-x:auto}
.msg .gcodeblock pre{font-family:"JetBrains Mono",ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;white-space:pre}
.msg .apply{margin-top:8px}
.askbar{display:flex;gap:8px;align-items:flex-end;margin-top:6px}
.askbar textarea{flex:1;resize:vertical;background:var(--panel);color:inherit;border:1px solid var(--line);
  border-radius:10px;padding:10px 12px;font:inherit;font-size:13px}
.msg.pending{opacity:.65;font-style:italic}
