:root{--ink: #26364a;--ink-2: #5b5548;--paper: #f5ebe0;--paper-2: #e6dcd2;--paper-3: #d9ccbc;--paper-hi: #faf6f0;--navy: #1d3557;--navy-2: #162e4e;--navy-line: #2a4468;--slate: #5b8db8;--slate-2: #8aafd0;--slate-3: #8da2b8;--line: #e6dcd2;--line-2: #cdbfae;--field-line: #968a79;--gold: #c29b47;--gold-2: #b89040;--rust: #b5532a;--moss: #6b8e5a;--shadow: 0 1px 0 rgba(29, 53, 87, .05), 0 8px 24px rgba(29, 53, 87, .08);--shadow-lg: 0 2px 0 rgba(29, 53, 87, .04), 0 24px 60px rgba(29, 53, 87, .18);--radius: 12px;--font-display: "Marcellus", Georgia, serif;--font-caps: "Marcellus SC", Georgia, serif;--font-body: "Work Sans", system-ui, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, monospace}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-body);font-size:14px;background:var(--paper);color:var(--ink);-webkit-font-smoothing:antialiased}#root{min-height:100dvh;display:flex;flex-direction:column}a{color:var(--navy);text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed}:focus-visible{outline:2px solid var(--navy);outline-offset:2px}.navy-surface :focus-visible{outline-color:var(--gold)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.mono{font-family:var(--font-mono)}.topnav{position:sticky;top:0;z-index:20;display:flex;flex-wrap:wrap;align-items:center;gap:12px 20px;min-height:76px;padding:12px 32px;background:#f5ebe0f0;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:12px}.brand-name{font-family:var(--font-display);font-size:21px;color:var(--navy);line-height:1}.brand-sub{font-family:var(--font-caps);font-size:10px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-2);margin-top:4px}.nav{display:flex;gap:4px}.nav-link{display:inline-flex;align-items:center;min-height:40px;padding:0 16px;border:0;border-radius:999px;background:transparent;color:var(--ink-2);font-weight:500}.nav-link:hover{background:#1d35570f;color:var(--navy)}.nav-link[aria-current=page]{background:var(--navy);color:var(--paper)}.chip-link{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 14px;border:1px solid var(--line);border-radius:999px;background:#fff9;color:var(--ink-2);font-size:13px;text-align:left}.chip-link:hover{border-color:var(--navy);color:var(--navy)}.spacer{flex:1 1 0}.lang{display:flex;gap:2px}.lang button{min-width:44px;height:40px;border:0;border-radius:999px;background:transparent;color:var(--ink-2);font-weight:500;font-size:13px}.lang button[aria-pressed=true]{background:#1d355714;color:var(--navy);font-weight:600}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 18px;border-radius:999px;font-weight:600;font-size:14px;border:1px solid var(--navy);background:transparent;color:var(--navy);white-space:nowrap}.btn:hover:not(:disabled){background:#1d35570f}.btn-primary{background:var(--navy);color:var(--paper);border-color:var(--navy)}.btn-primary:hover:not(:disabled){background:var(--ink)}.btn:disabled{opacity:.45}.btn-block{width:100%;min-height:48px;border-radius:6px;letter-spacing:.04em}.btn-sm{min-height:36px;padding:0 14px;font-size:13px}.ib{width:36px;height:36px;display:inline-flex;align-items:center;justify-content:center;border:0;border-radius:999px;background:transparent;color:var(--ink-2);flex:0 0 auto}.ib:hover:not(:disabled){background:#1d355714;color:var(--navy)}.ib:disabled{opacity:.3}.ib.danger:hover:not(:disabled){color:var(--rust);background:#b5532a14}.ib-lg{width:44px;height:44px;border:1px solid var(--line-2);background:var(--paper);color:var(--navy)}.ib-lg:hover:not(:disabled){background:var(--paper-2)}.play{width:54px;height:54px;border-radius:50%;border:0;background:var(--navy);color:var(--paper);display:inline-flex;align-items:center;justify-content:center}.play:hover:not(:disabled){background:var(--ink)}.page{flex:1 1 auto;display:flex;flex-wrap:wrap;gap:20px;padding:24px 32px;align-items:flex-start}.col-left{flex:1 1 300px;max-width:330px;min-width:280px;display:flex;flex-direction:column;gap:16px}.col-main{flex:999 1 560px;min-width:0}.col-right{flex:1 1 340px;max-width:400px;min-width:300px;display:flex;flex-direction:column;gap:16px}@media (max-width: 760px){.topnav{padding:12px 16px;position:static}.page{padding:16px}.col-left,.col-right{max-width:none}}.card{background:var(--paper-hi);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:18px;display:flex;flex-direction:column;gap:14px}.card-flush{padding:0;gap:0;overflow:hidden}.card-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.card-head-pad{padding:14px 12px 14px 18px}.eyebrow{display:flex;align-items:center;gap:10px;margin:0;font-family:var(--font-caps);font-weight:400;font-size:12px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-2)}.eyebrow:after{content:"";flex:1;height:1px;background:var(--line)}.eyebrow.bare:after{display:none}.title{margin:0;font-family:var(--font-display);font-weight:400;font-size:20px;color:var(--navy)}.title-lg{font-size:24px}.muted{color:var(--ink-2);font-size:12px}.note{margin:0;font-size:13px;line-height:1.5;color:var(--ink-2)}.note.warn{color:var(--rust)}.field{display:flex;flex-direction:column;gap:6px;min-width:0}.field-label{font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2)}.input-wrap{display:flex;align-items:center;gap:6px;height:42px;padding:0 12px;border:1px solid var(--field-line);border-radius:6px;background:var(--paper)}.input-wrap:focus-within{border-color:var(--navy);box-shadow:0 0 0 1px var(--navy)}.input-wrap input{flex:1;min-width:0;border:0;background:transparent;outline:none;padding:0;font-family:var(--font-mono);font-weight:500;font-size:14px;color:var(--ink)}.input-wrap .unit{font-size:12px;color:var(--ink-2);white-space:nowrap}.field.invalid .input-wrap{border-color:var(--rust);box-shadow:0 0 0 1px var(--rust)}.field-error{font-size:12px;color:var(--rust);line-height:1.3}.text-input,.textarea{width:100%;border:1px solid var(--field-line);border-radius:6px;background:var(--paper);padding:10px 12px;color:var(--ink);outline:none}.textarea{font-family:var(--font-mono);font-size:13px;resize:vertical;min-height:72px}.text-input:focus,.textarea:focus{border-color:var(--navy);box-shadow:0 0 0 1px var(--navy)}.grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}.stepper{display:flex;gap:8px}.stepper .step-btn{width:44px;height:42px;border:1px solid var(--field-line);border-radius:6px;background:var(--paper);color:var(--navy);font-size:18px}.stepper .field{flex:1}.check-row{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;cursor:pointer}.check-row input{width:20px;height:20px;accent-color:var(--navy)}.check-inline{display:inline-flex;align-items:center;gap:10px;min-height:44px;cursor:pointer}.check-inline input{width:18px;height:18px;accent-color:var(--navy)}.seg{display:flex;gap:4px;padding:4px;border-radius:999px;background:var(--paper-2)}.seg button{flex:1;height:36px;padding:0 14px;border:0;border-radius:999px;background:transparent;color:var(--ink-2);font-weight:500;font-size:13px;white-space:nowrap}.seg button[aria-pressed=true]{background:var(--navy);color:var(--paper);font-weight:600}.seg.mono button{font-family:var(--font-mono);min-width:48px}.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.tile{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 4px;border:1px solid var(--line-2);border-radius:10px;background:var(--paper);color:var(--ink);font-size:12px;font-weight:500;text-align:center}.tile:hover{border-color:var(--navy)}.tile[aria-pressed=true]{background:var(--navy);border-color:var(--navy);color:var(--paper);font-weight:600}.tile[aria-pressed=true] svg{color:var(--gold)}.presets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}.preset{display:flex;align-items:center;gap:10px;height:46px;padding:0 10px;border:1px solid var(--line-2);border-radius:6px;background:var(--paper);color:var(--ink);font-family:var(--font-mono);font-size:13px;font-weight:500}.preset:hover{border-color:var(--navy)}.preset[aria-pressed=true]{background:var(--navy);border-color:var(--navy);color:var(--paper);font-weight:600}.preset[aria-pressed=true] rect{stroke:var(--gold)}.navy-surface{background:var(--navy-2);color:var(--paper-3);border-radius:10px}.view-box{margin:0 18px;padding:12px 14px 10px;display:flex;flex-direction:column;gap:8px}.legend{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:12px}.legend span{display:inline-flex;align-items:center;gap:6px}.sheet-svg{width:100%;height:auto;max-height:68vh;display:block;touch-action:none;cursor:grab}.sheet-svg.dragging{cursor:grabbing}.zoom{display:flex;align-items:center;gap:2px;padding:3px;border:1px solid var(--line-2);border-radius:999px;background:var(--paper)}.zoom span{font-family:var(--font-mono);font-size:12px;padding:0 6px;min-width:48px;text-align:center}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;padding:18px}@media (max-width: 560px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}.stat{display:flex;flex-direction:column;gap:6px;border-top:1px solid var(--line);padding-top:12px}.stat-value{font-family:var(--font-display);font-size:30px;line-height:1;color:var(--navy)}.hint{font-size:12px;color:var(--paper-3)}.obj-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.obj{display:flex;align-items:center;gap:10px;padding:8px 6px 8px 12px;border:1px solid var(--line);border-radius:10px;background:var(--paper);outline:none}.obj:hover{border-color:var(--line-2)}.obj:focus-visible{outline:2px solid var(--navy);outline-offset:1px}.obj.selected{border:1.5px solid var(--navy);background:var(--paper-2)}.obj-main{flex:1;min-width:0;display:flex;flex-direction:column;cursor:pointer}.obj-name{font-weight:600}.obj-dims{font-family:var(--font-mono);font-size:12px;color:var(--ink-2)}.obj-warn{font-size:12px;color:var(--rust);font-weight:500}.obj-qty{font-family:var(--font-mono);font-weight:600;font-size:13px;color:var(--navy);padding:0 4px}.row-actions{display:flex;flex-wrap:wrap;gap:8px}.row-actions .btn{flex:1 1 0}.code{font-family:var(--font-mono);font-size:12.5px;line-height:21px;background:var(--navy-2);color:var(--paper);overflow:auto}.code-line{display:flex;gap:12px;padding:0 18px;white-space:pre;height:21px}.code-line .ln{width:36px;flex:0 0 36px;text-align:right;color:var(--slate-3);-webkit-user-select:none;user-select:none}.code-line.hl{background:#8aafd029}.code-line.cur{background:#c29b473d}.code-line .mark{width:12px;flex:0 0 12px;color:var(--gold)}.code-line.clickable{cursor:pointer}.code-line.clickable:hover{background:#f5ebe00f}.tok-g{color:var(--gold);font-weight:600}.tok-m{color:var(--slate-2);font-weight:600}.tok-c{color:var(--slate-3)}.code-more{padding:6px 18px 4px 66px;color:var(--slate-3);font-family:var(--font-body);font-size:12px}.sim-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:16px 18px}.chip{display:inline-flex;align-items:center;gap:8px;min-height:36px;padding:0 14px;border:1px solid var(--line-2);border-radius:999px;background:var(--paper);font-size:13px;cursor:pointer}.chip input{accent-color:var(--navy);width:16px;height:16px}.sim-canvas-wrap{position:relative;width:100%;aspect-ratio:4 / 3;max-height:64vh;min-height:280px}.sim-canvas-wrap canvas{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;display:block;touch-action:none}.sim-empty{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:24px;color:var(--paper-3)}.transport{display:flex;flex-direction:column;gap:12px;padding:16px 18px 18px}.scrub-row{display:flex;align-items:center;gap:12px;font-family:var(--font-mono);font-size:13px}.scrub{flex:1;accent-color:var(--navy);height:24px}.controls{display:flex;flex-wrap:wrap;align-items:center;gap:12px}.controls .group{display:flex;align-items:center;gap:8px}.dro{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.dro-cell{background:var(--paper);border:1px solid var(--line);border-radius:10px;padding:10px 14px;display:flex;flex-direction:column;gap:4px}.dro-cell .v{font-family:var(--font-mono);font-weight:600;font-size:22px;color:var(--navy)}.dro-small{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.dro-small .v{font-family:var(--font-mono);font-weight:600;font-size:13px;display:inline-flex;align-items:center;gap:6px}.dot{width:8px;height:8px;border-radius:50%;display:inline-block}.checks{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}.checks li{display:flex;gap:10px;align-items:flex-start}.checks li svg{flex:0 0 auto;margin-top:1px}.checks .t{font-weight:500}.checks .s{font-size:12px;color:var(--ink-2)}.issue-list{margin:6px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:2px}.issue-list button{border:0;background:none;padding:2px 0;color:var(--navy);text-decoration:underline;font-size:12px;text-align:left}dialog.modal{border:0;padding:0;border-radius:16px;background:var(--paper-hi);color:var(--ink);box-shadow:var(--shadow-lg);width:min(760px,calc(100vw - 32px));max-height:calc(100dvh - 32px);overflow-x:hidden}fieldset{min-width:0}dialog.modal::backdrop{background:#162e4e73}.modal-head{padding:26px 32px 20px;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:6px}.modal-head h2{margin:0;font-family:var(--font-display);font-weight:400;font-size:30px;color:var(--navy)}.modal-head p{margin:0;color:var(--ink-2);font-size:15px}.modal-body{padding:22px 32px;display:flex;flex-wrap:wrap;gap:24px}.modal-foot{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:16px 32px;border-top:1px solid var(--line);background:var(--paper)}.eyebrow-gold{display:flex;align-items:center;gap:10px;font-family:var(--font-caps);font-size:11px;letter-spacing:.28em;text-transform:uppercase;color:var(--ink-2)}.eyebrow-gold:after{content:"";width:40px;height:1px;background:var(--gold)}@media (max-width: 560px){.modal-head,.modal-body,.modal-foot{padding-left:18px;padding-right:18px}.presets{grid-template-columns:repeat(2,minmax(0,1fr))}}
