/* Layout: CAD workspace \2014  toolbar, menu, tabs, [tool panel | plan canvas | layers+properties], status bar with plant tabs.
   Own light/dark switch (data-ui on <html>), independent of the host theme. Canvas colours live in the JS palette. */
:root{
  color-scheme: dark;
  --bg:#1d2129; --chrome:#262b34; --panel:#2a2f39; --panel-2:#323844; --head:#3a4252; --line:#3c4453; --edge:#1b1f26;
  --tab-bg:#2e3440; --doc-bg:#22262e; --menu:#2d323d; --menu-line:#444c5c;
  --field:#20242c; --field-line:#3e4657; --ro:#2d323c; --btn-line:#485166; --step:#353b47; --anchor:#2f3540;
  --fg:#d7dbe2; --fg-2:#c3c8d1; --strong:#ffffff; --muted:#8f97a6;
  --accent:#3d84e6; --accent-soft:rgba(61,132,230,.22);
  --overlay:rgba(38,43,52,.88); --overlay-line:#3d4556; --log-bg:rgba(32,36,44,.78); --dyn-bg:rgba(25,28,35,.92);
  --note-bg:#3a3528; --note-fg:#e9dcbc; --tg:#7d8596; --tg-on:#8ec0ff; --tg-on-bg:rgba(61,132,230,.16); --tg-on-line:#36598a;
  --eye-on:#e7c44b; --eye-off:#5a6273; --alz-bg:#232831; --alz-col:#7a5a46; --shadow:rgba(0,0,0,.45); --scrim:rgba(10,12,16,.55);
  --load:#e9a23b; --pillar:#f08c4c; --wall:#62a6ea; --footing:#d9b23c; --beam:#4cc9a6; --beamc:#e77fb3; --beamf:#f0c86a; --mat:#a08ff7; --pit:#ef7a6a; --slab:#7fc77a; --hole:#c9ced8; --stair:#b48ce0; --brace:#e07b39; --roof:#d0925c; --ref:#9fb0d0;
  --warn:#f0b44c; --err:#ef6b6b; --ok:#5fc48a;
  --font:"Segoe UI", system-ui, -apple-system, "Helvetica Neue", Arial, sans-serif;
  --mono:Consolas, "Cascadia Mono", ui-monospace, "SF Mono", Menlo, monospace;
}
:root[data-ui="light"]{
  color-scheme: light;
  --bg:#f7f8fa; --chrome:#e9ecf1; --panel:#f3f5f8; --panel-2:#e3e7ed; --head:#d6dce5; --line:#cfd5de; --edge:#c3c9d3;
  --tab-bg:#e3e7ed; --doc-bg:#e1e5eb; --menu:#ffffff; --menu-line:#c9cfd8;
  --field:#ffffff; --field-line:#c2c9d4; --ro:#e8ebf0; --btn-line:#b9c1cd; --step:#e7eaef; --anchor:#eef0f4;
  --fg:#1f2430; --fg-2:#3e4654; --strong:#0d1117; --muted:#6b7382;
  --accent:#2f74d6; --accent-soft:rgba(47,116,214,.14);
  --overlay:rgba(255,255,255,.9); --overlay-line:#cfd5de; --log-bg:rgba(255,255,255,.85); --dyn-bg:rgba(255,255,255,.95);
  --note-bg:#fbf1d9; --note-fg:#5a4515; --tg:#7c8594; --tg-on:#1f5fbf; --tg-on-bg:rgba(47,116,214,.12); --tg-on-line:#8fb3e6;
  --eye-on:#c99a12; --eye-off:#a7afbb; --alz-bg:#ffffff; --alz-col:#d9a07c; --shadow:rgba(30,40,60,.18); --scrim:rgba(30,36,48,.35);
  --load:#c77a12; --pillar:#ee7d36; --wall:#2f78c4; --footing:#a67c00; --beam:#0f9a7a; --beamc:#c2407f; --beamf:#9a6b00; --mat:#6a52d9; --pit:#d2462f; --slab:#3f9a3a; --hole:#6b7280; --stair:#7c4dbb; --brace:#c25a1c; --roof:#a8642c; --ref:#6b7fa8;
  --warn:#b7791f; --err:#c53030; --ok:#2f855a;
}
html,body{height:100%}
body{background:var(--bg);color:var(--fg);font:12.5px/1.35 var(--font);overflow:hidden}
*{box-sizing:border-box}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer}
:focus-visible{outline:1px solid var(--accent);outline-offset:1px}

#app{height:100%;display:grid;grid-template-rows:auto auto auto 1fr auto;grid-template-columns:minmax(0,1fr);min-height:0}
#doctabs{min-width:0}

/* toolbar */
#toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:2px;row-gap:3px;padding:4px 8px;background:var(--chrome);border-bottom:1px solid var(--edge);overflow:hidden} /* wraps to a second row of icons on narrow screens */
#toolbar::-webkit-scrollbar{display:none}
.brand{display:flex;align-items:center;gap:6px;font-weight:600;margin-right:10px;white-space:nowrap;color:var(--strong)}
.brand svg{color:var(--accent)}
.tb{width:28px;height:28px;display:grid;place-items:center;border:1px solid transparent;border-radius:3px;background:none;color:var(--fg-2);flex:0 0 auto}
.tb:hover{background:var(--panel-2);border-color:var(--line)}
.tb.on{background:var(--accent-soft);border-color:var(--accent);color:var(--strong)}
.tb svg{width:17px;height:17px}
.sep{width:1px;height:20px;background:var(--line);margin:0 6px;flex:0 0 auto}
.tb-drawer{display:none}

/* menu */
#menubar{display:flex;gap:0;padding:0 4px;background:var(--chrome);border-bottom:1px solid var(--edge);position:relative;z-index:30}
.menu{position:relative}
.menu>button{background:none;border:0;padding:4px 8px;color:var(--fg)}
.menu>button:hover,.menu.open>button{background:var(--panel-2)}
.menu>button[aria-disabled=true]{opacity:.45;cursor:default}.menu>button[aria-disabled=true]:hover{background:none}
.menu-list{position:absolute;left:0;top:100%;min-width:250px;background:var(--menu);border:1px solid var(--menu-line);box-shadow:0 8px 24px var(--shadow);padding:4px 0;display:none}
.menu.open .menu-list{display:block}
.menu-list button{display:flex;justify-content:space-between;gap:20px;width:100%;text-align:left;background:none;border:0;padding:5px 14px}
.menu-list button:hover{background:var(--accent);color:#fff}
.menu-list button.cur::before{content:"\2713 ";margin-left:-11px;width:11px;color:var(--accent)}
.menu-list button.cur:hover::before{color:#fff}
.menu-list button.cur{justify-content:flex-start}
.menu-list button.cur kbd{margin-left:auto}
.menu-list kbd{font:11px var(--mono);color:var(--muted)}
.menu-list button:hover kbd{color:#e8eefc}
.menu-list hr{border:0;border-top:1px solid var(--menu-line);margin:4px 0}

/* doc tabs */
#doctabs{display:flex;align-items:stretch;background:var(--doc-bg);border-bottom:1px solid var(--edge);height:26px}
.dtab{display:flex;align-items:center;gap:8px;padding:0 12px;color:var(--muted);border-right:1px solid var(--edge)}
.dtab.cur{background:var(--panel);color:var(--fg);min-width:160px;justify-content:space-between}
.dtab small{color:var(--muted)}

/* main */
#main{display:grid;grid-template-columns:220px minmax(0,1fr) 300px;min-height:0}
aside{background:var(--panel);min-height:0;overflow:auto;scrollbar-width:thin;scrollbar-color:var(--btn-line) transparent}
#left{border-right:1px solid var(--edge)}
#right{border-left:1px solid var(--edge);display:flex;flex-direction:column}
.ph{background:var(--head);color:var(--strong);text-align:center;padding:4px 8px;font-size:12px;position:sticky;top:0;z-index:2}
.ph.left{text-align:left}
.tabs2{display:grid;grid-template-columns:1fr 1fr;background:var(--tab-bg);border-bottom:1px solid var(--line)}
.tabs2 button{background:none;border:0;padding:6px;color:var(--muted)}
.tabs2 button.cur{background:var(--panel);color:var(--strong);box-shadow:inset 0 -2px 0 var(--accent)}
details.sec{border-bottom:1px solid var(--line)}
details.sec>summary{list-style:none;cursor:pointer;padding:6px 10px;display:flex;align-items:center;gap:6px;user-select:none;background:var(--head);color:var(--strong);font-weight:600;letter-spacing:.01em}
details.sec>summary::-webkit-details-marker{display:none}
details.sec>summary::before{content:"\203a ";display:inline-block;width:10px;color:var(--muted);transition:transform .12s}
details.sec[open]>summary::before{transform:rotate(90deg)}
details.sec>summary:hover{filter:brightness(1.08)}
details.sec[open]>summary{border-bottom:1px solid var(--line)}
.sec-body{padding:6px 10px 10px;display:grid;gap:6px}
.toolgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:4px}
.tool{display:flex;align-items:center;gap:7px;padding:6px 7px;background:var(--panel-2);border:1px solid var(--line);border-radius:3px;text-align:left;color:var(--fg)}
.tool:hover{border-color:var(--btn-line)}
.tool.on{border-color:var(--accent);background:var(--accent-soft);color:var(--strong)}
.tool svg{width:16px;height:16px;flex:0 0 auto}
.tool.wide{grid-column:1/-1}
.chk{display:flex;align-items:center;gap:7px;color:var(--fg-2)}
.chk input{accent-color:var(--accent)}
.hint{color:var(--muted);font-size:11.5px}

/* levels */
.lvtable{width:100%;border-collapse:collapse;font-size:12px}
.lvtable td{padding:2px 2px;border-bottom:1px solid var(--line)}
.lvtable tr.cur td{background:var(--accent-soft)}
.lvtable input{width:100%;background:var(--panel-2);border:1px solid transparent;border-radius:2px;padding:2px 4px}
.lvtable input:focus{border-color:var(--accent);outline:none}
.lvtable input.z{text-align:right;font-family:var(--mono);width:62px}
.lvtable .act{width:18px;text-align:center;cursor:pointer;color:var(--muted)}
.lvtable tr.cur .act{color:var(--accent)}
.xbtn{background:none;border:0;color:var(--muted);padding:0 3px}
.xbtn:hover{color:var(--err)}
.btnrow{display:flex;gap:4px;flex-wrap:wrap}
.btn{background:var(--panel-2);border:1px solid var(--btn-line);border-radius:3px;padding:4px 10px;color:var(--fg)}
.btn:hover{border-color:var(--accent)}
.btn:disabled{opacity:.5;cursor:default}
.pgrid .btnrow .btn{padding:3px 8px}
.btn.pri{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.pri:hover{filter:brightness(1.1)}
.lvhead{margin-top:6px;color:var(--muted);font-size:11px;letter-spacing:.06em;text-transform:uppercase;border-top:1px solid var(--line);padding-top:8px}
.lvdxf{display:grid;gap:5px}
.lvdxf .row{display:grid;gap:2px;padding:3px 4px;border-radius:2px}
.lvdxf .row.cur{background:var(--accent-soft)}
.lvdxf .top{display:flex;justify-content:space-between;align-items:baseline;gap:6px;cursor:pointer}
.lvdxf .top b{font-weight:500;font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lvdxf .top span{font:10.5px var(--mono);color:var(--muted);white-space:nowrap}
.lvdxf select{width:100%;background:var(--field);border:1px solid var(--field-line);border-radius:2px;padding:2px 4px;font-size:12px}
.lvdxf select:focus{border-color:var(--accent);outline:none}
#alzado{width:100%;display:block;background:var(--alz-bg);border:1px solid var(--line);border-radius:2px}

/* view */
#view{position:relative;min-width:0;min-height:0;overflow:hidden;background:var(--bg)}
#cv{position:absolute;inset:0;width:100%;height:100%;display:block;cursor:none;touch-action:none}
.crumb{position:absolute;left:10px;top:8px;color:var(--fg-2);font-size:12px;display:flex;gap:6px;align-items:center;pointer-events:none;background:var(--overlay);padding:2px 8px;border-radius:3px}
.crumb b{color:var(--strong);font-weight:600}
.crumb .dim{color:var(--muted)}
.crumb .refon{color:var(--ref)}
.lvbadge{position:absolute;right:14px;top:12px;width:120px;padding:8px 10px;border:1px solid var(--overlay-line);background:var(--overlay);border-radius:4px;text-align:center;pointer-events:none}
.lvbadge .n{font-size:13px;font-weight:600;color:var(--strong);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lvbadge .z{font:600 18px var(--mono);color:var(--accent);margin-top:2px}
.lvbadge .r{font-size:11px;color:var(--muted)}
#cmd{position:absolute;left:50%;bottom:12px;transform:translateX(-50%);width:min(680px,calc(100% - 24px));pointer-events:none}
#cmdlog{font:11.5px/1.45 var(--mono);color:var(--fg-2);background:var(--log-bg);padding:4px 8px;border-radius:3px 3px 0 0;max-height:50px;overflow:hidden;display:flex;flex-direction:column;justify-content:flex-end}
#cmdlog .w{color:var(--warn)} #cmdlog .e{color:var(--err)} #cmdlog .o{color:var(--ok)}
.cmdbar{display:flex;align-items:center;gap:6px;background:var(--panel);border:1px solid var(--btn-line);border-radius:0 0 3px 3px;padding:3px 8px;pointer-events:auto}
.cmdbar span{font:12px var(--mono);color:var(--muted);white-space:nowrap}
#cmdprompt{flex:1 1 auto;min-width:0;white-space:normal;line-height:1.35;font:11.5px var(--mono);color:var(--muted);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}#cmdprompt b{color:var(--strong);font-weight:600}#cmdprompt .op{color:var(--accent)}
#cmdin{flex:0 0 150px;min-width:0;border-left:1px solid var(--btn-line)!important;padding-left:6px;background:none;border:0;outline:none;font:12px var(--mono);color:var(--strong)}
#dyn{position:absolute;pointer-events:none;font:11.5px var(--mono);background:var(--dyn-bg);color:var(--strong);border:1px solid var(--accent);padding:2px 6px;border-radius:2px;white-space:nowrap;display:none}

/* right: layers */
#layers{flex:0 0 auto;max-height:50%;overflow:auto;border-bottom:1px solid var(--edge)}
.lyr{display:grid;grid-template-columns:20px 14px 1fr auto;align-items:center;gap:6px;padding:3px 10px;font-size:12px}
.lyr:hover{background:var(--panel-2)}
.lyr .eye{background:none;border:0;padding:0;color:var(--eye-on);display:grid;place-items:center}
.lyr .eye.off{color:var(--eye-off)}
.lyr .sw{width:11px;height:11px;border:1px solid #0006}
.lyr .cnt{color:var(--muted);font:11px var(--mono)}
.lgroup{padding:6px 10px 2px;color:var(--muted);font-size:11px;letter-spacing:.06em;text-transform:uppercase;display:flex;align-items:center;gap:6px}
.lgroup .swr{width:16px;height:0;border-top:2px dashed var(--ref);display:inline-block}
.refpanel{padding:3px 10px 9px;display:grid;gap:5px}
.refpanel select{width:100%;background:var(--field);border:1px solid var(--field-line);border-radius:2px;padding:3px 6px}
.refpanel select:focus{border-color:var(--accent);outline:none}
.refpanel.on select{border-color:var(--ref)}
.refopts{display:flex;gap:14px;flex-wrap:wrap}

/* right: properties */
#props{flex:1 1 auto;overflow:auto}
#results{flex:0 1 auto;max-height:46%;overflow:auto;border-bottom:1px solid var(--edge)}
.resstat{padding:6px 10px;font-size:11.5px;color:var(--muted)}
.resstat.stale{color:var(--warn)}
.resform{padding:0 10px 8px;font:11.5px var(--mono);color:var(--fg-2);word-break:break-word}
#checks{flex:0 1 auto;max-height:42%;overflow:auto;border-bottom:1px solid var(--edge)}
.chkhead{display:flex;justify-content:space-between;align-items:center;text-align:left}
.chkhead .xbtn{color:var(--strong);font-size:13px;padding:0 4px}
.chkbar{display:flex;gap:4px;flex-wrap:wrap;padding:6px 10px}
.chip{border:1px solid var(--btn-line);background:none;border-radius:10px;padding:1px 8px;font-size:11px;color:var(--muted)}
.chip.on.e{color:var(--err);border-color:var(--err)} .chip.on.w{color:var(--warn);border-color:var(--warn)} .chip.on.i{color:var(--accent);border-color:var(--accent)}
.chkok{margin:4px 10px 10px;padding:6px 8px;border-left:2px solid var(--ok);color:var(--fg-2);font-size:12px}
.chklv{padding:6px 10px 2px;color:var(--muted);font-size:11px;letter-spacing:.06em;text-transform:uppercase}
.chklv span{font-family:var(--mono);letter-spacing:0;text-transform:none}
.chkit{display:grid;grid-template-columns:10px 1fr;gap:7px;align-items:start;width:100%;text-align:left;background:none;border:0;padding:4px 10px;font-size:12px;color:var(--fg)}
.chkit:hover{background:var(--panel-2)}
.chkit em{font-style:normal;font-size:10.5px;color:var(--muted);white-space:nowrap;border:1px solid var(--line);border-radius:8px;padding:0 5px;margin-left:2px}
.chkit i{width:9px;height:9px;border-radius:50%;margin-top:4px}
.chkit i.e{background:var(--err)} .chkit i.w{background:var(--warn)} .chkit i.i{border:1.5px solid var(--accent)}
.ptitle{display:flex;justify-content:space-between;align-items:center;padding:8px 10px 4px}
.ptitle b{font-size:13px}
.ptitle .tag{font-size:11px;color:var(--muted)}
.pgrid{display:grid;grid-template-columns:110px 1fr;gap:5px 8px;padding:4px 10px 10px;align-items:center}
.pgrid label{text-align:right;color:var(--fg-2)}
.pgrid input,.pgrid select{width:100%;background:var(--field);border:1px solid var(--field-line);border-radius:2px;padding:3px 6px}
.pgrid input:focus,.pgrid select:focus{border-color:var(--accent);outline:none}
.pgrid input[type=number]{font-family:var(--mono)}
.pgrid .ro{padding:3px 6px;background:var(--ro);border-radius:2px;font-family:var(--mono);color:var(--fg-2);min-height:22px}
.pgrid .full{grid-column:1/-1}
.pgrid input[type=checkbox],.pgrid input[type=radio]{width:auto;flex:0 0 auto}
.pgrid label.chk{text-align:left;justify-content:flex-start}
.dlg .pgrid{grid-template-columns:120px 1fr;align-items:start}
.dlg .pgrid>label:not(.chk){padding-top:2px}
.unit{display:flex;align-items:center;gap:4px}
.unit span{color:var(--muted);font-size:11px;width:16px}
.stepper{display:grid;grid-template-columns:22px 1fr 22px;gap:2px}
.stepper button{background:var(--step);border:1px solid var(--field-line);border-radius:2px;padding:0;line-height:1}
.stepper button:hover{border-color:var(--accent)}
.anchor{display:grid;grid-template-columns:repeat(3,22px);grid-template-rows:repeat(3,22px);gap:2px;padding:3px;background:var(--field);border:1px solid var(--field-line);width:max-content;position:relative}
.anchor button{background:var(--anchor);border:1px solid var(--field-line);border-radius:2px;padding:0}
.anchor button.on{background:var(--pillar);border-color:var(--pillar)}
.anchor button:hover{border-color:var(--accent)}
details.psec{border-bottom:none}
details.psec>summary{padding:6px 10px;color:var(--muted);font-size:11px;letter-spacing:.06em;text-transform:uppercase;border-top:1px solid var(--line);margin-top:2px}
details.psec>summary b{color:var(--text)}
.psec-body{padding:2px 0 6px}
#right > div > .ph.fold-h{cursor:pointer;user-select:none}
#right > div > .ph.fold-h::before{content:"\203a ";display:inline-block;width:12px;margin-right:2px;color:var(--muted);transition:transform .12s}
#right > div:not(.folded) > .ph.fold-h::before{transform:rotate(90deg)}
#right > div.folded > :not(.ph){display:none !important}
.psub{padding:6px 10px 2px;color:var(--muted);font-size:11px;letter-spacing:.06em;text-transform:uppercase;border-top:1px solid var(--line);margin-top:4px}
.note{margin:4px 10px 10px;padding:6px 8px;border-left:2px solid var(--warn);background:var(--note-bg);color:var(--note-fg);font-size:11.5px}

/* status */
#status{display:flex;align-items:center;gap:2px;background:var(--chrome);border-top:1px solid var(--edge);height:28px;padding:0 6px;font-size:12px}
#ptabs{display:flex;align-items:stretch;height:100%;overflow-x:auto;scrollbar-width:none;min-width:0;flex:1 1 auto}
#ptabs::-webkit-scrollbar{display:none}
.ptab{background:none;border:0;padding:0 12px;color:var(--fg-2);white-space:nowrap;border-top:2px solid transparent}
.ptab:hover{background:var(--panel-2)}
.ptab.cur{background:var(--head);color:var(--strong);border-top-color:var(--accent)}
.ptab small{color:var(--muted);font-family:var(--mono);margin-left:5px}
.ptab.cur small{color:var(--accent)}
#coords{font:11.5px var(--mono);color:var(--fg-2);padding:0 10px;white-space:nowrap;flex:0 0 auto;min-width:170px;text-align:right}
.tg{background:none;border:1px solid transparent;border-radius:2px;padding:1px 7px;font:600 10.5px var(--mono);color:var(--tg);letter-spacing:.04em;flex:0 0 auto}
.tg.on{color:var(--tg-on);background:var(--tg-on-bg);border-color:var(--tg-on-line)}
.tg:hover{border-color:var(--btn-line)}

/* modal */
#modal{position:fixed;inset:0;background:var(--scrim);display:grid;place-items:center;z-index:100;padding:16px}
.dlg{width:min(520px,100%);background:var(--panel);border:1px solid var(--btn-line);box-shadow:0 20px 50px var(--shadow);border-radius:4px;max-height:90vh;display:flex;flex-direction:column}
.dlg h3{margin:0;font-size:13px;font-weight:600;padding:8px 12px;background:var(--head);color:var(--strong);border-radius:4px 4px 0 0;display:flex;justify-content:space-between}
.dlg .bd{padding:12px;overflow:auto;display:grid;gap:10px}
.dlg .ft{padding:10px 12px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:6px}
.dlg textarea{width:100%;height:220px;background:var(--field);border:1px solid var(--field-line);color:var(--fg-2);font:11px var(--mono);padding:6px;resize:vertical}
.dlg .pgrid{padding:0}
.kbd{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;font-size:12px}
.kbd kbd{font:11px var(--mono);background:var(--field);border:1px solid var(--field-line);border-radius:2px;padding:1px 5px;color:var(--strong);justify-self:start}
.swatches{display:flex;gap:6px;flex-wrap:wrap}
.swatches button{width:30px;height:30px;border-radius:3px;border:1px solid var(--btn-line);padding:0}
.swatches button:hover{outline:2px solid var(--accent)}
.colrow{display:flex;align-items:center;gap:10px}
.colrow input[type=color]{width:54px;height:32px;border:1px solid var(--field-line);background:var(--field);padding:2px}
.colrow code{font:12px var(--mono);color:var(--fg-2)}

.dlg.wide{width:min(1000px,100%)}
.tabs3{display:flex;gap:2px;flex-wrap:wrap;border-bottom:1px solid var(--line)}
.tabs3 button{background:none;border:0;border-bottom:2px solid transparent;padding:5px 10px;color:var(--muted)}
.tabs3 button.cur{color:var(--strong);border-bottom-color:var(--accent)}
.tabs3 button span{font:10.5px var(--mono);color:var(--muted);margin-left:3px}
.qtab{border-collapse:collapse;font-size:12px;width:100%}
.qtab th{position:sticky;top:0;background:var(--head);color:var(--strong);font-weight:500;text-align:left;padding:4px 6px;white-space:nowrap}
.qtab td{padding:3px 6px;border-bottom:1px solid var(--line);vertical-align:middle}
.qtab td.num,.qtab th.num{text-align:right;font-family:var(--mono)}
.qtab.cmb td{font-family:var(--mono);text-align:right}
.qtab.cmb td:first-child{text-align:left;font-family:var(--font)}
.qtab.cmb th{text-align:right}
.qtab.cmb th:first-child{text-align:left}
.qtab tr.tot td{font-weight:600;border-top:2px solid var(--line)}
.qtab input,.qtab select{background:var(--field);border:1px solid var(--field-line);border-radius:2px;padding:2px 4px;max-width:100%}
.qtab input.qn{width:220px}
.qtab input.qpsi{width:52px;font-family:var(--mono);text-align:right}
.qtab input.qpsi.own{font-weight:700;border-color:var(--accent)}
.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:5px;vertical-align:middle}
.qrows{display:grid;gap:4px;padding:4px 10px}
.qrow{display:grid;grid-template-columns:minmax(0,1.4fr) 56px minmax(0,1fr) 16px;gap:4px;align-items:center}
.qrow select,.qrow input{width:100%;background:var(--field);border:1px solid var(--field-line);border-radius:2px;padding:2px 4px;font-size:12px;min-width:0}
.qrow input[type=number]{font-family:var(--mono);text-align:right}
select.btn{max-width:170px}
[hidden]{display:none!important}
.qrow.fromuso{box-shadow:inset 3px 0 0 var(--accent)}
.ro.mono{font-family:var(--mono);font-size:11px;word-break:break-all;line-height:1.35}
.gid{cursor:pointer}.gid:hover{color:var(--accent)}
.ifct td,.ifct th{white-space:nowrap}
.ifct tbody tr{cursor:pointer}.ifct tbody tr:hover td{background:var(--accent-soft)}
.ifct td.mono{font-family:var(--mono);font-size:11px}
/* workflow steps */
#doctabs{height:auto;min-height:38px}
.dtab.cur{min-width:150px;max-width:220px;flex-direction:column;align-items:flex-start;justify-content:center;gap:0;line-height:1.2}
.dtab.cur span{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:190px}
.stepbar{display:flex;list-style:none;margin:0;padding:0 6px;gap:2px;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none;align-items:stretch}
.stepbar li{display:flex}
.stp{display:flex;align-items:center;gap:6px;background:none;border:0;border-bottom:2px solid transparent;padding:3px 9px 3px 6px;color:var(--muted);text-align:left;cursor:pointer;white-space:nowrap;position:relative}
.stp:hover{background:var(--panel-2)}
.stp.cur{color:var(--strong);border-bottom-color:var(--accent);background:var(--panel)}
.stp .sn{width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font:600 11px var(--mono);border:1.5px solid var(--btn-line);color:var(--muted);flex:none}
.stp.ok .sn{background:#2f8a5b;border-color:#2f8a5b;color:#fff}
.stp.warn .sn{border-color:#d9a23a;color:#d9a23a}
.stp.cur .sn{box-shadow:0 0 0 2px var(--accent-soft)}
.stp.cur.todo .sn{border-color:var(--accent);color:var(--accent)}
.stx{display:flex;flex-direction:column;line-height:1.15}
.stx b{font-weight:600;font-size:12px}
.stx small{font-size:10.5px;color:var(--muted)}
.stp.warn .stx small{color:#d9a23a}
.stp:not(:last-child)::after{content:"";position:absolute;right:-2px;top:50%;width:6px;height:1px;background:var(--btn-line)}
.steph{display:flex;justify-content:space-between;align-items:center;font-weight:600}
.stepn{font:11px var(--mono);color:var(--muted);font-weight:400}
.stepintro{padding:8px 10px;border-bottom:1px solid var(--line);font-size:12px;color:var(--muted);line-height:1.45}
.stepintro p{margin:0 0 6px}
.chknav{display:flex;gap:4px;align-items:center;padding:4px 10px}.chknav span{flex:1;text-align:center;font-size:11.5px;color:var(--muted)}.chknav .btn{padding:2px 9px}
.chkcur{display:flex;gap:6px;padding:4px 10px 6px;font-size:12px;border-bottom:1px solid var(--line)}.chkcur em{color:var(--muted);font-style:normal}
details.chkg>summary{list-style:none;display:flex;align-items:flex-start;gap:6px;padding:5px 10px;cursor:pointer;font-size:11.5px;border-top:1px solid var(--line)}details.chkg>summary::-webkit-details-marker{display:none}
details.chkg>summary::before{content:"\203a ";color:var(--muted);transition:transform .12s;display:inline-block}details.chkg[open]>summary::before{transform:rotate(90deg)}
details.chkg>summary .gt{flex:1}details.chkg>summary .xbtn{padding:0 4px}details.chkg .chkit{padding-left:22px}.chkit.cur{background:var(--accent-soft)}
.tg.pj{display:grid;grid-template-columns:1fr;gap:2px 6px;font-size:11.5px;color:var(--muted)}.tg.pj input{width:100%;box-sizing:border-box;margin-bottom:4px}
.stst{cursor:pointer;font-size:11.5px;padding:3px 8px;border-radius:3px;background:var(--panel-2);color:var(--fg);display:inline-block}
.stst.ok{color:#5fc48a}.stst.warn{color:#e3ad45}
.stepnav{display:flex;justify-content:space-between;gap:6px;padding:8px 10px;border-bottom:1px solid var(--line)}
.stepnav .btn{flex:1}
.menu-list .mh{padding:6px 14px 2px;font-size:10.5px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;border-top:1px solid var(--menu-line);margin-top:4px}
.menu-list .mh:first-child{border-top:0;margin-top:0}
@media (max-width: 900px){ .dtab.cur{display:none} .stx small{display:none} .stp{padding:3px 8px} }

#wfstat.on{color:var(--strong)}#wfstat.warn{color:#e0a84a}
#dropzone{position:absolute;inset:10px;z-index:50;text-align:center;line-height:1.6;border:2px dashed var(--accent);background:var(--accent-soft);display:grid;place-items:center;color:var(--strong);font-size:15px;pointer-events:none}

@media (max-width: 900px){
  #main{grid-template-columns:minmax(0,1fr)}
  #left,#right{position:absolute;top:0;bottom:0;z-index:20;width:min(300px,86vw);display:none;box-shadow:0 0 30px var(--shadow)}
  #left{left:0} #right{right:0}
  #left.show{display:block} #right.show{display:flex}
  #main{position:relative}
  .tb-drawer{display:grid}
  .lvbadge{display:none}
  #coords{min-width:0}
  .brand span{display:none}
}
@media (prefers-reduced-motion: reduce){ *{transition:none!important} }
.lib-tabs{display:flex;gap:4px;border-bottom:1px solid var(--btn-line);margin:0 0 10px}.lib-tabs button{background:none;border:0;border-bottom:2px solid transparent;color:var(--muted);padding:6px 12px;cursor:pointer;font:inherit}.lib-tabs button.on{color:var(--strong);border-bottom-color:var(--accent)}.lib-bar{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin:8px 0}.lib-two{display:grid;grid-template-columns:1.6fr 1fr;gap:14px;align-items:start}@media(max-width:900px){.lib-two{grid-template-columns:1fr}}.lib-t{font-size:11.5px}.lib-t tr[data-lp]{cursor:pointer}.lib-t tr.cur td{background:rgba(59,130,246,.18)}.lib-t td:first-child{white-space:nowrap}.lib-kv td{text-align:left}.lib-t td:nth-child(2){text-align:left}.lib-kv th{text-align:left;font-weight:500;color:var(--muted);width:44%}.lib-body{max-height:70vh;overflow:auto}
.wl-grid{display:grid;grid-template-columns:1.25fr 1fr;gap:18px}.wl-grid.wl-w{grid-template-columns:0.9fr 1.35fr}.wl-det{border:1px solid var(--line,#444);border-radius:8px;padding:10px 12px}.wl-det p{margin:4px 0 10px;line-height:1.45}@media(max-width:820px){.wl-grid{grid-template-columns:1fr}}
.wl-steps{margin:0 0 8px;padding-left:20px}.wl-steps li{margin:0 0 7px}.wl-steps b{display:block}.wl-steps span{color:var(--mute,#9aa);font-size:12px;line-height:1.35}
.wl-btn{display:block;width:100%;text-align:left;margin:0 0 7px;padding:9px 12px;border-radius:8px;border:1px solid var(--line,#444);background:transparent;color:inherit;cursor:pointer;font:inherit}
.wl-btn b{display:block;font-size:13.5px}.wl-btn span{display:block;font-size:12px;opacity:.75;margin-top:2px}.wl-btn:hover{border-color:var(--accent,#3b82f6)}.wl-btn.pri{border-color:var(--accent,#3b82f6);background:rgba(59,130,246,.14)}
#busy{position:fixed;inset:0;z-index:10000;background:rgba(10,12,16,.35);display:grid;place-items:center;cursor:progress}
#busy .bcard{width:min(420px,calc(100vw - 32px));background:var(--panel);color:var(--fg);border:1px solid var(--btn-line);border-radius:10px;padding:14px 16px;box-shadow:0 10px 30px rgba(0,0,0,.35)}
#busy .bt{font-weight:600;font-size:14px;margin-bottom:4px}#busy .bx{font-size:12px;color:var(--muted);min-height:16px;margin-bottom:8px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#busy .bbar{height:8px;border-radius:4px;background:var(--panel-2);overflow:hidden;position:relative}#busy .bbar i{display:block;height:100%;width:0;background:var(--accent);border-radius:4px;transition:width .15s linear}
#busy .bbar.ind i{width:35%!important;position:absolute;animation:busyind 1.1s ease-in-out infinite}@keyframes busyind{0%{left:-35%}100%{left:100%}}
#busy .bf{display:flex;justify-content:space-between;align-items:center;margin-top:10px;font-size:12px;color:var(--muted)}
@media (prefers-reduced-motion:reduce){#busy .bbar.ind i{animation:none;left:0;width:100%!important;opacity:.5}#busy .bbar i{transition:none}}
