:root{--primary:#45d7e8;--accent:#ff9a3d;--bg:#08121f;--panel:#0b1825;--panel2:#102131;--line:#263b4d;--text:#e8f1f7;--muted:#8399aa;--danger:#ff6b64;--ok:#59d499;--sans:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;--mono:"SFMono-Regular",Consolas,monospace;color-scheme:dark}
*{box-sizing:border-box}html{background:var(--bg);font-family:var(--sans)}body{margin:0;background:var(--bg);color:var(--text);min-width:320px}a{color:inherit;text-decoration:none}button,input,select{font:inherit}.site-header{height:68px;display:flex;align-items:center;justify-content:space-between;padding:0 22px;background:color-mix(in srgb,var(--bg) 94%,black);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:11px}.brand img{width:40px;height:40px;object-fit:contain}.brand-symbol{display:grid;place-items:center;width:38px;height:38px;border:2px solid var(--primary);color:var(--accent);font:900 1.2rem var(--mono)}.brand strong,.brand small{display:block}.brand strong{font:750 .9rem var(--mono);letter-spacing:.08em}.brand small{font-size:.72rem;color:var(--muted);margin-top:3px}.site-header nav{display:flex;align-items:center;gap:18px;font-size:.82rem}.site-header nav a:hover{color:var(--primary)}.user-label{color:var(--muted);padding-left:16px;border-left:1px solid var(--line)}.eyebrow{margin:0 0 7px;color:var(--primary);font:700 .68rem/1.2 var(--mono);letter-spacing:.14em}.muted{color:var(--muted);font-size:.82rem;line-height:1.5}.button{min-height:39px;padding:0 14px;border:1px solid #3a5367;background:transparent;color:var(--text);border-radius:4px;cursor:pointer;font-size:.8rem;font-weight:700}.button:hover{border-color:var(--primary)}.button.primary{background:var(--primary);border-color:var(--primary);color:#041017}.button.danger{border-color:color-mix(in srgb,var(--danger) 55%,transparent);color:var(--danger)}.button.small{min-height:31px;padding:0 9px;font-size:.72rem}.button:disabled{opacity:.4;cursor:not-allowed}.button-row{display:flex;gap:7px;flex-wrap:wrap}.flash{max-width:1200px;margin:14px auto;padding:12px 15px;border:1px solid var(--line);background:var(--panel)}.flash.success{border-color:color-mix(in srgb,var(--ok) 55%,transparent);color:var(--ok)}.flash.error{border-color:color-mix(in srgb,var(--danger) 55%,transparent);color:#ff9994}
.auth-page{min-height:100vh;display:grid;place-items:center;padding:24px;background-image:linear-gradient(rgba(80,120,145,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(80,120,145,.07) 1px,transparent 1px);background-size:28px 28px}.auth-card{width:min(440px,100%);padding:34px;border:1px solid var(--line);background:rgba(8,20,32,.96);box-shadow:0 28px 80px rgba(0,0,0,.3)}.auth-card h1{margin:0 0 8px;font-size:1.7rem}.login-logo{display:block;max-width:180px;max-height:80px;object-fit:contain;margin:0 0 24px}.stack{display:grid;gap:15px}.stack label,.control-panel label{display:grid;gap:6px;color:var(--muted);font-size:.77rem}.stack input,.stack select,.control-panel input,.control-panel select,.project-box input,.project-box select{width:100%;min-height:42px;padding:0 10px;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:3px;outline:none}.stack input:focus,.stack select:focus,.control-panel input:focus,.control-panel select:focus{border-color:var(--primary);box-shadow:0 0 0 2px color-mix(in srgb,var(--primary) 15%,transparent)}
.app-shell{display:grid;grid-template-columns:350px minmax(0,1fr);min-height:calc(100vh - 68px)}.control-panel{padding:22px;background:color-mix(in srgb,var(--bg) 88%,#142c3f);border-right:1px solid var(--line);overflow:auto}.project-box{display:grid;gap:9px;padding:0 0 22px;margin-bottom:6px;border-bottom:1px solid var(--line)}.project-box .muted{margin:3px 0 0}.control-panel fieldset{border:0;border-top:1px solid var(--line);padding:20px 0 2px;margin:0 0 14px}.control-panel legend{padding-right:12px;font:700 .76rem var(--mono);text-transform:uppercase}.control-panel legend span{color:var(--accent);margin-right:7px}.field-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.control-panel label em{justify-self:end;color:#5b7486;font:600 .65rem var(--mono);font-style:normal}.switch-row{display:flex!important;align-items:center;justify-content:space-between;margin-top:13px;padding:12px;border:1px solid var(--line);cursor:pointer}.switch-row strong,.switch-row small{display:block}.switch-row strong{color:var(--text)}.switch-row small{margin-top:3px}.switch{position:relative;flex:0 0 auto;width:42px;height:24px}.switch input{position:absolute;opacity:0}.switch i{position:absolute;inset:0;background:#2b4051;border-radius:16px}.switch i:after{content:"";position:absolute;width:18px;height:18px;left:3px;top:3px;border-radius:50%;background:#b6c6d1;transition:.2s}.switch input:checked+i{background:var(--primary)}.switch input:checked+i:after{transform:translateX(18px);background:#041017}
.drawing-panel{padding:24px 28px 38px;background-color:#0d1a27;background-image:linear-gradient(rgba(90,130,155,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(90,130,155,.05) 1px,transparent 1px);background-size:24px 24px;min-width:0}.drawing-toolbar{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:15px}.drawing-toolbar h1{font-size:1.35rem;margin:0}.tab.active{border-color:var(--primary);color:var(--primary);background:color-mix(in srgb,var(--primary) 8%,transparent)}.canvas-wrap{background:rgba(4,12,20,.78);border:1px solid #355064;min-height:470px;overflow:hidden}.canvas-wrap svg{display:block;width:100%;height:auto;min-height:470px}.results{margin-top:15px;padding:18px;background:rgba(4,12,20,.82);border:1px solid var(--line)}.result-heading{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}.result-heading .eyebrow{margin:0}#statusBadge{padding:6px 9px;border:1px solid color-mix(in srgb,var(--ok) 45%,transparent);color:var(--ok);font:700 .65rem var(--mono)}#statusBadge.warn{color:var(--danger);border-color:color-mix(in srgb,var(--danger) 45%,transparent)}.result-grid{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line);border-left:1px solid var(--line)}.result{padding:12px;border-right:1px solid var(--line);border-bottom:1px solid var(--line)}.result span{display:block;color:var(--muted);font-size:.7rem;min-height:2em}.result strong{display:block;margin-top:6px;font:700 1rem var(--mono)}.result.accent strong{color:var(--primary)}.warning-text{color:var(--danger);font-size:.78rem;margin:12px 0 0}.toast{position:fixed;right:18px;bottom:18px;max-width:360px;padding:12px 15px;background:#132638;border:1px solid var(--primary);transform:translateY(120px);opacity:0;transition:.25s;z-index:30}.toast.show{transform:none;opacity:1}.toast.error{border-color:var(--danger)}
.admin-shell{max-width:1300px;margin:auto;padding:32px 24px}.admin-shell.narrow{max-width:760px}.page-heading{display:flex;justify-content:space-between;margin-bottom:20px}.page-heading h1{margin:0}.admin-grid{display:grid;grid-template-columns:330px 1fr;gap:20px}.card{padding:21px;background:var(--panel);border:1px solid var(--line)}.card h2{margin:0 0 16px;font-size:1.05rem}.table-card{min-width:0}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse;font-size:.79rem}th,td{padding:11px;border-bottom:1px solid var(--line);text-align:left;vertical-align:top}th{color:var(--muted);font:700 .68rem var(--mono);text-transform:uppercase}td small{display:block;color:var(--muted);margin-top:3px}.actions{display:flex;gap:8px;align-items:flex-start}.actions form{margin:0}details summary{cursor:pointer;color:var(--primary);font-size:.72rem}.inline-reset{display:flex;gap:5px;margin-top:8px}.inline-reset input{min-width:140px;height:31px;background:var(--bg);border:1px solid var(--line);color:var(--text);padding:0 7px}.color-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.color-grid input[type=color]{height:56px;padding:4px}.logo-preview{padding:14px;border:1px solid var(--line)}.logo-preview img{display:block;max-width:240px;max-height:100px;object-fit:contain;margin-bottom:12px}.checkbox{display:flex!important;grid-template-columns:auto 1fr!important;align-items:center}.checkbox input{width:auto!important;min-height:0!important}
/* SVG */
#drawing .grid{stroke:#263b4d;stroke-width:1;opacity:.45}#drawing .structure{fill:rgba(91,141,239,.1);stroke:#5b8def;stroke-width:2}#drawing .log{fill:color-mix(in srgb,var(--primary) 15%,transparent);stroke:var(--primary);stroke-width:2.4}#drawing .axis{stroke:var(--primary);stroke-width:1;stroke-dasharray:8 6}#drawing .tread{fill:color-mix(in srgb,var(--accent) 20%,transparent);stroke:var(--accent);stroke-width:2}#drawing .datum{stroke:#8ca0af;stroke-width:1.5}#drawing .dim{stroke:#b7c5cf;stroke-width:1;fill:none}#drawing .ext{stroke:#62798a;stroke-width:1;stroke-dasharray:3 4}#drawing .dim-text{fill:#d4dfe6;font:700 13px var(--mono);text-anchor:middle}#drawing .note{fill:#8299aa;font:600 12px var(--mono)}#drawing .title{fill:#e8f1f7;font:700 14px var(--mono);letter-spacing:1px}#drawing .angle{stroke:var(--accent);stroke-width:1.5;fill:none}#drawing .angle-text{fill:var(--accent);font:700 13px var(--mono)}
@media(max-width:1050px){.app-shell{grid-template-columns:1fr}.control-panel{border-right:0;border-bottom:1px solid var(--line)}#stairForm{display:grid;grid-template-columns:1fr 1fr;gap:0 22px}.result-grid{grid-template-columns:repeat(2,1fr)}.admin-grid{grid-template-columns:1fr}}
@media(max-width:700px){.site-header{height:auto;padding:12px 15px;align-items:flex-start}.brand small,.user-label{display:none}.site-header nav{gap:10px;flex-wrap:wrap;justify-content:flex-end}.control-panel,.drawing-panel,.admin-shell{padding:18px 14px}#stairForm{grid-template-columns:1fr}.drawing-toolbar{align-items:flex-start;flex-direction:column}.result-grid{grid-template-columns:1fr 1fr}.canvas-wrap,.canvas-wrap svg{min-height:360px}.field-grid,.color-grid{grid-template-columns:1fr}.actions{min-width:180px}}
@media print{@page{size:A3 landscape;margin:10mm}.site-header,.control-panel,.drawing-toolbar .button-row,.toast{display:none!important}.app-shell{display:block}.drawing-panel{padding:0;background:white}.canvas-wrap,.results{background:white;border-color:#8ca0af}.drawing-toolbar h1,.result strong{color:#102431}.eyebrow{color:#087f8c}.result span{color:#4c6575}}
.logout-form{margin:0}.logout-form button{border:0;background:none;color:var(--text);padding:0;cursor:pointer;font:inherit}.logout-form button:hover{color:var(--primary)}
