:root{--bg:#141518;--panel:#1c1d21;--panel-2:#23252a;--line:#30323a;--text:#f3f1ec;--muted:#9b988f;--gold:#c9a44c;--gold-soft:#c9a44c24;--ok:#6fbf8e;--warn:#d9a441;--err:#e0766a;--info:#8fb3d9;--radius:10px;--font:"Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--mono:ui-monospace, "SF Mono", Menlo, Consolas, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}*{box-sizing:border-box}html,body,#root{height:100%}body{background:var(--bg);color:var(--text);font:14px/1.5 var(--font);-webkit-font-smoothing:antialiased;margin:0}h1{letter-spacing:-.01em;margin:4px 0;font-size:22px;font-weight:600}h2{margin:0 0 12px;font-size:16px;font-weight:600}h3{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin:18px 0 8px;font-size:13px;font-weight:600}a{color:var(--gold);text-decoration:none}code,pre,.mono{font-family:var(--mono)}pre{white-space:pre-wrap;word-break:break-word;background:var(--bg);border:1px solid var(--line);border-radius:8px;max-height:480px;margin:0 0 12px;padding:12px;overflow:auto}.muted{color:var(--muted)}.small{font-size:12px}.text-error{color:var(--err)}.sr-only{clip:rect(0 0 0 0);width:1px;height:1px;position:absolute;overflow:hidden}input,select,textarea{font:inherit;color:var(--text);background:var(--bg);border:1px solid var(--line);border-radius:8px;width:100%;min-height:36px;padding:8px 10px}input[type=checkbox]{width:18px;min-height:18px;accent-color:var(--gold)}input[type=color]{width:40px;padding:2px}input:focus,select:focus,textarea:focus,button:focus-visible{outline:2px solid var(--gold);outline-offset:1px;border-color:#0000}textarea{resize:vertical}.field{flex-direction:column;gap:4px;margin-bottom:12px;display:flex}.field label{color:var(--muted);font-size:12px;font-weight:500}.req{color:var(--gold);margin-left:3px}.help{color:var(--muted);font-size:12px}.btn{font:inherit;border:1px solid var(--line);background:var(--panel-2);color:var(--text);cursor:pointer;white-space:nowrap;border-radius:8px;align-items:center;gap:6px;min-height:36px;padding:8px 14px;font-weight:500;display:inline-flex}.btn:hover:not(:disabled){border-color:var(--gold)}.btn:disabled{opacity:.45;cursor:not-allowed}.btn.primary{background:var(--gold);border-color:var(--gold);color:#17140c;font-weight:600}.btn.primary:hover:not(:disabled){filter:brightness(1.08)}.btn.ghost{background:0 0}.btn.link{color:var(--gold);background:0 0;border:none;min-height:0;padding:0}.btn.link.danger{color:var(--err)}.btn.sm{min-height:30px;padding:4px 10px;font-size:12px}.file-btn{position:relative;overflow:hidden}.file-btn input{opacity:0;cursor:pointer;position:absolute;inset:0}.row-gap{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.badge{border:1px solid var(--line);white-space:nowrap;border-radius:999px;padding:2px 8px;font-size:11px;font-weight:600;display:inline-block}.status-draft{color:var(--muted)}.status-processing{color:var(--info);border-color:var(--info)}.status-review{color:var(--warn);border-color:var(--warn)}.status-approved{color:var(--ok);border-color:var(--ok)}.status-failed{color:var(--err);border-color:var(--err)}.badge.ready{color:var(--ok);border-color:var(--ok)}.badge.pending{color:var(--muted);border-style:dashed}.v-published{color:var(--ok);border-color:var(--ok)}.v-draft{color:var(--warn);border-color:var(--warn)}.v-archived{color:var(--muted)}.notice{border:1px solid var(--line);border-left:3px solid var(--info);background:var(--panel);border-radius:8px;margin:0 0 14px;padding:10px 14px}.notice-error{border-left-color:var(--err)}.notice-warn{border-left-color:var(--warn)}.notice-ok{border-left-color:var(--ok)}.spinner{color:var(--muted);align-items:center;gap:10px;padding:16px 0;display:flex}.spin{border:2px solid var(--line);border-top-color:var(--gold);border-radius:50%;width:16px;height:16px;animation:.8s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.shell{grid-template-columns:220px minmax(0,1fr);min-height:100%;display:grid}.sidebar{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;gap:22px;height:100vh;padding:18px 14px;display:flex;position:sticky;top:0}.brand{align-items:center;gap:10px;display:flex}.brand-name{letter-spacing:.01em;font-weight:700}.brand-sub{color:var(--gold);letter-spacing:.12em;text-transform:uppercase;font-size:11px}.sidebar nav{flex-direction:column;gap:2px;display:flex}.sidebar nav a{color:var(--text);border-radius:8px;padding:8px 10px}.sidebar nav a:hover{background:var(--panel-2)}.sidebar nav a.active{background:var(--gold-soft);color:var(--gold)}.nav-group{color:var(--muted);text-transform:uppercase;letter-spacing:.1em;margin:14px 10px 4px;font-size:11px}.sidebar-foot{border-top:1px solid var(--line);flex-direction:column;align-items:flex-start;gap:8px;margin-top:auto;padding-top:14px;display:flex}.main{min-width:0}.page{max-width:1500px;padding:24px 28px 60px}.page.narrow{max-width:820px}.shell-lite{padding:20px}.page-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:16px;margin-bottom:18px;display:flex}.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);min-width:0;margin-bottom:16px;padding:18px}.card.overflow{overflow-x:auto}.card-head{justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;display:flex}.card-head h2,.card-head h3{margin:0}.two-col{grid-template-columns:1fr 1fr;align-items:start;gap:16px;display:grid}.two-col.wide-left{grid-template-columns:2fr 1fr}.empty{border:1px dashed var(--line);border-radius:var(--radius);text-align:center;color:var(--muted);padding:40px}.auth-wrap{background:radial-gradient(ellipse at top, #1f1d18 0%, var(--bg) 60%);place-items:center;min-height:100%;padding:20px;display:grid}.auth-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;flex-direction:column;gap:12px;width:100%;max-width:380px;padding:28px;display:flex}.auth-card.wide{max-width:620px}.auth-card h1{margin-top:14px}.modules-strip{grid-template-columns:repeat(7,minmax(0,1fr));gap:10px;margin-bottom:22px;display:grid}.module-tile,.module-card{text-align:left;font:inherit;color:var(--text);background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);cursor:pointer;flex-direction:column;align-items:flex-start;gap:8px;padding:12px;display:flex}.module-tile:hover,.module-card:hover{border-color:var(--gold)}.module-name{font-size:13px;font-weight:600}.module-tile .badge{white-space:normal}.module-grid{grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin-top:12px;display:grid}.module-card p{color:var(--muted);flex:1;margin:0;font-size:13px}.filters{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:12px;display:flex}.filter-right{align-items:center;gap:8px;display:flex}.filter-right select,.filter-right input{width:auto;min-width:160px}.tabs{border-bottom:1px solid var(--line);gap:2px;display:flex;overflow-x:auto}.tab{font:inherit;color:var(--muted);cursor:pointer;white-space:nowrap;background:0 0;border:none;border-bottom:2px solid #0000;padding:8px 12px}.tab.on{color:var(--text);border-bottom-color:var(--gold)}.tab .count{color:var(--gold);margin-left:6px;font-size:11px}.module-tabs{margin-bottom:16px}.section-tabs{margin:18px 0 14px}.job-table{border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.jt-row{color:var(--text);border-top:1px solid var(--line);background:var(--panel);grid-template-columns:60px 2.2fr 1.1fr 1.3fr 110px 1fr 1.1fr;align-items:center;gap:12px;padding:11px 14px;display:grid}.jt-row:first-child{border-top:none}.jt-head{background:var(--panel-2);color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:11px}a.jt-row:hover{background:var(--panel-2)}.jt-title{text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.dropzone{border:1.5px dashed var(--line);border-radius:var(--radius);text-align:center;cursor:pointer;margin-bottom:12px;padding:26px;display:block;position:relative}.dropzone:hover{border-color:var(--gold)}.dropzone.has-file{border-style:solid}.dropzone input{opacity:0;cursor:pointer;position:absolute;inset:0}.file-info{flex-direction:column;gap:2px;display:flex}.file-info .small:last-child{color:var(--gold)}.local-preview{border:1px solid var(--line);border-radius:8px;place-items:center;height:360px;display:grid;overflow:hidden}.local-preview img{object-fit:contain;max-width:100%;max-height:100%}.dims-row{grid-template-columns:1fr auto 1fr 110px;align-items:end;gap:8px;display:grid}.dims-row .field{margin-bottom:0}.lock{background:var(--panel-2);border:1px solid var(--line);color:var(--muted);cursor:pointer;border-radius:8px;place-items:center;width:36px;height:36px;display:grid}.lock.on{color:var(--gold);border-color:var(--gold)}.dims{margin-bottom:8px}.dims .help{margin-top:6px;display:block}.chips{flex-wrap:wrap;gap:6px;display:flex}.chip{font:inherit;background:var(--bg);color:var(--text);border:1px solid var(--line);cursor:pointer;border-radius:8px;flex-direction:column;align-items:center;padding:5px 10px;font-size:12px;line-height:1.2;display:inline-flex}.chip.on{border-color:var(--gold);background:var(--gold-soft);color:var(--gold)}.chip-sub{color:var(--muted);font-size:10px}.small-chips .chip{padding:3px 7px;font-size:11px}.input-unit{align-items:center;gap:8px;display:flex}.input-unit input{max-width:160px}.colours{flex-direction:column;align-items:flex-start;gap:6px;display:flex}.colour-row{grid-template-columns:40px 100px 1fr auto;gap:6px;width:100%;display:grid}.colour-row .hex{font-family:var(--mono)}.action-bar{background:linear-gradient(transparent, var(--bg) 30%);justify-content:space-between;align-items:flex-end;gap:16px;padding:18px 0 8px;display:flex;position:sticky;bottom:0}.meta-line{color:var(--text);flex-wrap:wrap;align-items:center;gap:12px;display:flex}.head-actions{align-items:flex-start;display:flex}.gen-wrap{text-align:right;flex-direction:column;align-items:flex-end;gap:6px;max-width:360px;display:flex}.correction-box{flex-direction:column;gap:8px;width:340px;display:flex}.compare{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden}.compare-toolbar{border-bottom:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;display:flex}.zoom-level{font-family:var(--mono);text-align:center;min-width:52px}.compare-panes{grid-template-columns:1fr 1fr;display:grid}.pane+.pane{border-left:1px solid var(--line)}.pane-title{text-transform:uppercase;letter-spacing:.08em;color:var(--muted);border-bottom:1px solid var(--line);padding:6px 12px;font-size:11px}.pane-stage{cursor:grab;touch-action:none;height:62vh;min-height:380px;position:relative;overflow:hidden}.pane-stage:active{cursor:grabbing}.pane-content{transform-origin:50%;place-items:center;padding:16px;display:grid;position:absolute;inset:0}.preview-media{object-fit:contain;-webkit-user-select:none;user-select:none;image-rendering:auto;max-width:100%;max-height:100%}canvas.preview-media{width:auto;max-width:100%;height:auto;max-height:100%}.preview-note{background:var(--panel);color:var(--muted);border-radius:6px;padding:2px 8px;font-size:11px;position:absolute;bottom:8px;left:8px}.pane-empty{color:var(--muted);text-align:center;max-width:320px}.checker{background-color:#2a2b30;background-image:linear-gradient(45deg,#24252a 25%,#0000 25%),linear-gradient(-45deg,#24252a 25%,#0000 25%),linear-gradient(45deg,#0000 75%,#24252a 75%),linear-gradient(-45deg,#0000 75%,#24252a 75%);background-position:0 0,0 10px,10px -10px,-10px 0;background-size:20px 20px}.file-list{margin:0;padding:0;list-style:none}.file-list li{border-top:1px solid var(--line);grid-template-columns:110px 1fr auto auto auto;align-items:center;gap:12px;padding:8px 0;display:grid}.file-list li:first-child{border-top:none}.fname{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.kind{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-size:11px}.kind-export,.kind-result{color:var(--gold)}.correction-upload{border-top:1px solid var(--line);margin-top:14px;padding-top:12px}.timeline{border-left:1px solid var(--line);margin:0;padding:0 0 0 14px;list-style:none}.timeline li{padding:4px 0 10px 10px;position:relative}.timeline li:before{content:"";background:var(--gold);border-radius:50%;width:9px;height:9px;position:absolute;top:11px;left:-19px}table.kv{border-collapse:collapse;width:100%}.kv th{text-align:left;color:var(--muted);vertical-align:top;width:200px;padding:6px 12px 6px 0;font-weight:500}.kv td{padding:6px 0}.instructions{max-height:60vh;font-size:13px;line-height:1.55}.instructions-editor{min-height:420px;font-family:var(--mono);margin-bottom:12px;font-size:13px;line-height:1.55}.version-list{margin:0;padding:0;list-style:none}.version-list li{border-top:1px solid var(--line);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 0;display:flex}.version-list li:first-child{border-top:none}.version-view{margin-top:12px}.grid-table{border-collapse:collapse;width:100%}.grid-table th{text-align:left;color:var(--muted);text-transform:uppercase;letter-spacing:.06em;border-bottom:1px solid var(--line);padding:6px 8px;font-size:11px}.grid-table td{border-bottom:1px solid var(--line);vertical-align:middle;padding:8px}.grid-table input[type=number]{max-width:120px}input.inline{background:0 0;border-color:#0000;min-height:0;padding:2px 4px}input.inline:hover{border-color:var(--line)}.users td{min-width:90px}@media (width<=1200px){.modules-strip{grid-template-columns:repeat(4,minmax(0,1fr))}}@media (width<=900px){.shell{grid-template-columns:minmax(0,1fr)}.sidebar,.sidebar nav{min-width:0}.sidebar{z-index:10;flex-flow:wrap;align-items:center;gap:10px;height:auto;padding:10px 14px;position:sticky;top:0}.brand-sub{display:none}.sidebar nav{flex-direction:row;flex:100%;order:3;overflow-x:auto}.sidebar nav a{white-space:nowrap;padding:6px 10px}.nav-group{display:none}.sidebar-foot{border:none;flex-direction:row;align-items:center;margin:0 0 0 auto;padding:0}.sidebar-foot .who{display:none}.page{padding:16px 16px 60px}.two-col,.two-col.wide-left{grid-template-columns:1fr}.modules-strip{grid-template-columns:repeat(2,minmax(0,1fr))}.filter-right{flex-wrap:wrap;width:100%}.filter-right select,.filter-right input{flex:1;min-width:0}.jt-head{display:none}.jt-row{grid-template-columns:1fr auto;grid-template-areas:"title status""meta meta";gap:4px 10px}.jt-row>span:first-child,.jt-row>span:nth-child(6){display:none}.jt-row>span:nth-child(2){grid-area:title}.jt-row>span:nth-child(5){grid-area:status}.jt-row>span:nth-child(3),.jt-row>span:nth-child(4),.jt-row>span:nth-child(7){color:var(--muted);font-size:12px;display:inline}.jt-row{grid-template-areas:"title status""m1 m1""m2 m2""m3 m3"}.jt-row>span:nth-child(3){grid-area:m1}.jt-row>span:nth-child(4){grid-area:m2}.jt-row>span:nth-child(7){grid-area:m3}.compare-panes{grid-template-columns:1fr}.pane+.pane{border-left:none;border-top:1px solid var(--line)}.pane-stage{height:44vh;min-height:260px}.gen-wrap{text-align:left;align-items:flex-start}.head-actions{width:100%}.file-list li{grid-template-columns:1fr auto}.file-list li .kind,.file-list li .muted{grid-column:1/-1}.dims-row{grid-template-columns:1fr auto 1fr}.dims-row .unit-field{grid-column:1/-1}.colour-row{grid-template-columns:40px 90px 1fr}.colour-row button{grid-column:1/-1;justify-self:start}.correction-box{width:100%}.action-bar{flex-direction:column;align-items:stretch}}.modules-strip{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}.status-chips{flex-wrap:wrap;gap:4px;display:flex}.status-chips .badge{white-space:nowrap}.badge.warn{color:var(--warn);border-color:var(--warn)}.text-ok{color:var(--ok)}.pilot{color:#17140c;background:var(--gold);vertical-align:middle;border-radius:999px;margin-left:6px;padding:1px 6px;font-size:10px;font-weight:700}.setup-status{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;display:flex}.checklist{flex-direction:column;gap:6px;display:flex}.checklist label{color:var(--text);align-items:center;gap:8px;font-size:13px;display:flex}.ref-form{border:1px solid var(--line);border-radius:8px;padding:12px}.file-list li.inactive{opacity:.5}.file-list li{grid-template-columns:170px 1fr auto auto auto}.adapt{border:1px solid var(--line);border-radius:8px;margin-bottom:10px;padding:10px}.adapt-cols{grid-template-columns:1fr 1fr;gap:10px;display:grid}.adapt-label{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;margin-bottom:4px;font-size:11px}.stat-row{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin-bottom:16px;display:grid}.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}.stat-label{color:var(--muted);font-size:12px}.stat-value{font-variant-numeric:tabular-nums;font-size:26px;font-weight:600}.stat-value.small-value{padding-top:8px;font-size:15px}.grid-table.small input{min-height:30px;padding:4px 6px}@media (width<=900px){.adapt-cols,.stat-row{grid-template-columns:1fr}.file-list li{grid-template-columns:1fr auto}}.bbox-wrap{max-width:100%;display:inline-block;position:relative}.bbox-wrap img{max-width:100%;max-height:340px;display:block}.bbox{outline:2px dashed var(--gold);outline-offset:0;pointer-events:none;position:absolute}.local-preview{height:auto;min-height:200px;padding:10px}.bounds-info{border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:4px;margin-top:10px;padding:10px 12px;display:flex}.basis-choice{flex-direction:column;gap:4px;margin-top:6px;display:flex}.basis-choice label{color:var(--text);align-items:center;gap:8px;display:flex}.basis-choice input{width:auto;min-height:0}.stone-colours{flex-direction:column;gap:10px;width:100%;display:flex}.stone-colour-group{border:1px solid var(--line);border-radius:8px;flex-direction:column;align-items:flex-start;gap:6px;padding:8px 10px;display:flex}.stone-colour-group.orphan{border-color:var(--err)}.stone-colour-head{font-size:13px}.check-list{flex-direction:column;gap:6px;margin:0;padding:0;list-style:none;display:flex}.check-list li{grid-template-columns:22px 1fr;align-items:start;gap:6px;display:grid}.check-icon{font-weight:700}.check-pass .check-icon{color:var(--ok)}.check-fail .check-icon{color:var(--err)}.check-manual .check-icon{color:var(--warn)}.flag-list{color:var(--warn);flex-direction:column;gap:4px;margin:0;padding-left:18px;display:flex}.diameter-overrides{flex-direction:column;gap:6px;display:flex}
