:root{
  --bg:#f3f1ec; --surface:#fbfaf7; --surface-2:#eeebe4; --ink:#1c2127; --ink-2:#4a525c; --muted:#7a828c;
  --line:#dcd8cf; --line-2:#c9c4b9; --accent:#d9561f; --accent-h:#bf4714; --accent-soft:#fbe7dc;
  --ok:#2f7a4f; --warn:#8a5a00; --warn-bg:#fbf1dc;
  --blue:#2d4a63;
  --r:10px; --r-sm:7px;
  --sans:'General Sans','Segoe UI',system-ui,sans-serif; --mono:'JetBrains Mono',ui-monospace,monospace;
  --shadow:0 1px 2px rgba(28,33,39,.05),0 8px 24px -12px rgba(28,33,39,.12);
}
*{box-sizing:border-box;margin:0}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{font-family:var(--sans);background:var(--bg);color:var(--ink);font-size:15px;line-height:1.55;
  background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px);
  background-size:32px 32px;background-attachment:fixed;background-position:-1px -1px}
body::before{content:"";position:fixed;inset:0;background:radial-gradient(ellipse at 50% 0,rgba(243,241,236,.55),var(--bg) 70%);pointer-events:none;z-index:-1}
.wrap{max-width:1180px;margin:0 auto;padding:0 24px}
.mono{font-family:var(--mono);font-feature-settings:"zero" 1}
.label{font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600}
.hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
button{font:inherit;cursor:pointer}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* top */
.topbar{background:var(--ink);color:#f3f1ec;position:sticky;top:0;z-index:20}
.topbar-in{display:flex;align-items:center;justify-content:space-between;height:60px}
.brand{display:flex;align-items:center;gap:12px;color:inherit;text-decoration:none}
.logo{width:34px;height:34px;color:#f3f1ec}
.brand-text{display:flex;flex-direction:column;line-height:1.1}
.brand-text strong{font-weight:700;letter-spacing:.12em;font-size:15px}
.brand-text small{font-size:11.5px;color:#a9b0b8}
.top-links{display:flex;align-items:center;gap:20px;font-size:13.5px}
.top-links a{color:#d6dadf;text-decoration:none}.top-links a:hover{color:#fff}
.pill-live{display:inline-flex;align-items:center;gap:7px;padding:4px 10px;border:1px solid #3a424c;border-radius:99px;color:#d6dadf;font-size:12.5px}
.pill-live i{width:7px;height:7px;border-radius:50%;background:#4cc27a;box-shadow:0 0 0 3px rgba(76,194,122,.2)}

/* intro */
.intro{padding-top:44px;padding-bottom:28px}
.eyebrow{font-family:var(--mono);font-size:12px;color:var(--accent);letter-spacing:.04em;margin-bottom:12px}
h1{font-size:clamp(28px,3.6vw,42px);line-height:1.08;letter-spacing:-.02em;font-weight:600;max-width:20ch}
.lede{margin-top:12px;color:var(--ink-2);max-width:60ch;font-size:16px}

/* layout */
.workspace{display:grid;grid-template-columns:minmax(0,5fr) minmax(0,6fr);gap:20px;align-items:start;padding-bottom:40px}
.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);box-shadow:var(--shadow)}
.side{display:flex;flex-direction:column;gap:20px;position:sticky;top:80px}

/* configurator */
.cfg{padding:6px 22px 22px}
.step{padding:18px 0;border-bottom:1px dashed var(--line-2)}
.step-h{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.step-h h2{font-size:16px;font-weight:600}
.num{width:24px;height:24px;border-radius:6px;background:var(--ink);color:#fff;font:600 12px var(--mono);display:grid;place-items:center}
.drop{display:flex;flex-direction:column;align-items:center;gap:6px;padding:26px 16px;border:1.5px dashed var(--line-2);border-radius:var(--r);background:var(--surface-2);cursor:pointer;text-align:center;transition:border-color .2s,background .2s}
.drop:hover,.drop.over{border-color:var(--accent);background:var(--accent-soft)}
.drop input{position:absolute;opacity:0;pointer-events:none;width:1px}
.drop svg{width:34px;height:34px;color:var(--accent)}
.drop-t{font-size:14.5px}.drop-t strong{font-weight:600}
.drop-s{font-size:12.5px;color:var(--muted)}
.file-chip{display:flex;justify-content:space-between;align-items:center;margin-top:10px;padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-sm);background:#fff;font-size:13.5px}
.fc-name{font-family:var(--mono);font-size:12.5px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.link{background:none;border:0;color:var(--blue);font-size:13.5px;text-decoration:underline;text-underline-offset:3px;padding:0}
.link:hover{color:var(--accent)}
.toggle-manual{margin-top:12px}
.manual{margin-top:14px}
.seg{display:inline-flex;border:1px solid var(--line-2);border-radius:var(--r-sm);padding:3px;background:var(--surface-2);margin-bottom:12px}
.seg button{border:0;background:none;padding:6px 12px;border-radius:5px;font-size:13px;color:var(--ink-2)}
.seg button.on{background:#fff;color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08);font-weight:500}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.fld{display:flex;flex-direction:column;gap:5px;margin-bottom:12px;font-size:13px;color:var(--ink-2);font-weight:500}
.grid2 .fld{margin-bottom:0}
.fld input,.fld select,.fld textarea{font:inherit;font-size:14.5px;color:var(--ink);background:#fff;border:1px solid var(--line-2);border-radius:var(--r-sm);padding:9px 11px;width:100%;min-width:0}
.fld select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' fill='none'%3E%3Cpath d='m1 1.5 5 5 5-5' stroke='%234a525c' stroke-width='1.6' stroke-linecap='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;padding-right:32px}
.fld input:focus,.fld select:focus,.fld textarea:focus,.qtys input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}
.hint{font-size:13px;color:var(--muted);margin-bottom:10px}
#matHint{margin:10px 0 0;padding:9px 11px;background:var(--warn-bg);color:var(--warn);border-radius:var(--r-sm)}
.qtys{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.qtys input{font:500 14.5px var(--mono);text-align:center;padding:10px 4px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:#fff;width:100%;min-width:0;color:var(--ink)}
.go{padding-top:20px}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line-2);background:#fff;color:var(--ink);padding:11px 18px;border-radius:var(--r-sm);font-weight:600;font-size:15px;transition:background .15s,transform .1s}
.btn:active{transform:translateY(1px)}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;width:100%;padding:13px 18px}
.btn.primary:hover:not(:disabled){background:var(--accent-h)}
.btn:disabled{opacity:.45;cursor:not-allowed}
.btn.wide{width:100%}
.err{margin-top:10px;font-size:13.5px;color:#a3321a;background:#fbe9e4;padding:9px 12px;border-radius:var(--r-sm)}

/* viewer */
.viewer{overflow:hidden}
.viewer-h{display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line)}
.dims{font-size:12.5px;color:var(--ink-2)}
.canvas{position:relative;height:280px;background:#1c2127;background-image:linear-gradient(rgba(255,255,255,.05) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.05) 1px,transparent 1px);background-size:20px 20px;display:grid;place-items:center;overflow:hidden}
.empty{display:flex;flex-direction:column;align-items:center;gap:12px;color:#7d8792;text-align:center;padding:20px;font-size:13.5px}
.empty svg{width:180px;color:#58626d;animation:float 6s ease-in-out infinite}
@keyframes float{50%{transform:translateY(-6px)}}
#partSvg{position:absolute;left:6%;top:7%;width:88%;height:86%;overflow:visible}
#partSvg path{fill:none;stroke:#f3f1ec;stroke-width:var(--sw);stroke-linecap:round;stroke-linejoin:round}
#partSvg path.draw{stroke-dasharray:var(--len);stroke-dashoffset:var(--len);animation:draw 1.1s cubic-bezier(.4,0,.2,1) forwards}
@keyframes draw{to{stroke-dashoffset:0}}
#partSvg .dimline{stroke:var(--accent);stroke-width:calc(var(--sw) * .6);stroke-dasharray:none;animation:none}
#partSvg text{fill:var(--accent);font:500 11px var(--mono)}
.scan{position:absolute;inset:0;background:linear-gradient(180deg,transparent 0,rgba(217,86,31,.0) 40%,rgba(217,86,31,.35) 50%,transparent 52%);background-size:100% 220%;animation:scan 1.4s linear infinite;pointer-events:none}
@keyframes scan{from{background-position:0 120%}to{background-position:0 -120%}}
.facts{display:grid;grid-template-columns:repeat(4,1fr);border-top:1px solid var(--line)}
.facts div{padding:11px 14px;border-right:1px solid var(--line);display:flex;flex-direction:column;gap:2px}
.facts div:last-child{border-right:0}
.facts strong{font-size:13.5px;font-weight:500}

/* results */
.results{padding:20px}
.res-idle p{color:var(--ink-2);margin-top:6px;font-size:14px;max-width:52ch}
.steps-run{list-style:none;padding:0;margin-top:12px;display:flex;flex-direction:column;gap:9px}
.steps-run li{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--muted);transition:color .25s}
.steps-run li::before{content:"";width:14px;height:14px;border-radius:50%;border:1.5px solid var(--line-2);flex:none;transition:all .25s}
.steps-run li.run{color:var(--ink)}
.steps-run li.run::before{border-color:var(--accent);border-top-color:transparent;animation:spin .7s linear infinite}
.steps-run li.done{color:var(--ink-2)}
.steps-run li.done::before{background:var(--ok);border-color:var(--ok);box-shadow:inset 0 0 0 3px var(--surface)}
@keyframes spin{to{transform:rotate(360deg)}}
.res-h{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:14px}
.res-h h2{font-size:17px;font-weight:600;margin-top:2px}
.ref{font-size:11.5px;color:var(--muted);padding:3px 8px;border:1px solid var(--line);border-radius:5px;white-space:nowrap}
.qcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:10px}
.qcard{border:1px solid var(--line);border-radius:var(--r-sm);padding:14px;background:#fff;opacity:0;transform:translateY(8px);animation:rise .45s cubic-bezier(.2,.7,.2,1) forwards}
@keyframes rise{to{opacity:1;transform:none}}
.qcard .q{font:500 12px var(--mono);color:var(--muted)}
.qcard .pp{font:600 18px var(--mono);letter-spacing:-.02em;margin:6px 0 2px;white-space:nowrap}
.qcard .pp small{font:400 12px var(--sans);color:var(--muted);letter-spacing:0}
.qcard .row{display:flex;justify-content:space-between;gap:8px;font-size:12.5px;color:var(--ink-2);padding-top:7px;margin-top:7px;border-top:1px dashed var(--line)}
.qcard .row span:last-child{font-family:var(--mono);color:var(--ink);white-space:nowrap}
.mat-note{font-size:13px;color:var(--ink-2);margin:12px 0 0}
.disclaimer{display:flex;gap:10px;margin:14px 0;padding:12px 14px;background:var(--warn-bg);border-radius:var(--r-sm);color:#5e4307;font-size:13px;line-height:1.5}
.disclaimer svg{width:18px;height:18px;flex:none;margin-top:1px;color:var(--warn)}
.fine{font-size:12px;color:var(--muted);margin-top:10px}

/* how */
.how{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;padding-top:12px;padding-bottom:48px}
.how div{border-top:2px solid var(--ink);padding-top:14px}
.num-s{font-size:12px;color:var(--accent)}
.how h3{font-size:16px;font-weight:600;margin:4px 0 6px}
.how p{font-size:14px;color:var(--ink-2)}
.foot{border-top:1px solid var(--line-2);padding-top:18px;padding-bottom:30px;font-size:13px;color:var(--ink-2)}
.foot .fine{max-width:80ch}

/* dialog */
dialog{margin:auto;border:0;border-radius:12px;padding:0;width:min(560px,calc(100% - 24px));box-shadow:0 30px 80px -20px rgba(0,0,0,.45);color:var(--ink);background:var(--surface)}
dialog::backdrop{background:rgba(20,24,28,.55);backdrop-filter:blur(3px)}
.dlg-in{padding:22px}
.dlg-h{display:flex;justify-content:space-between;align-items:center;margin-bottom:8px}
.dlg-h h2{font-size:18px;font-weight:600}
.x{border:0;background:none;font-size:26px;line-height:1;color:var(--muted);padding:0 4px}
.dlg-in .grid2{margin-bottom:12px}
.dlg-in .btn.primary{margin-top:6px}
.done{text-align:center;padding:16px 0 4px;display:flex;flex-direction:column;align-items:center;gap:10px}
.done svg{width:52px;color:var(--ok)}
.done h3{font-size:18px}
.done p{color:var(--ink-2);font-size:14px;max-width:40ch}

@media (max-width:900px){
  .workspace{grid-template-columns:1fr}
  .side{position:static}
  .how{grid-template-columns:1fr}
}
@media (max-width:520px){
  .qcards{grid-template-columns:1fr!important}
  .wrap{padding:0 16px}
  .top-links a{display:none}
  .intro{padding-top:28px}
  .cfg{padding:2px 16px 16px}
  .qtys{grid-template-columns:repeat(2,1fr)}
  .facts{grid-template-columns:repeat(2,1fr)}
  .facts div:nth-child(2){border-right:0}
  .facts div:nth-child(-n+2){border-bottom:1px solid var(--line)}
  .canvas{height:220px}
  .grid2{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}#partSvg path.draw{stroke-dashoffset:0}.qcard{opacity:1;transform:none}}

/* design flags */
#partSvg .flag{fill:none;stroke:#ff3b30;stroke-width:calc(var(--sw) * 2.2);stroke-dasharray:none;animation:none}
#partSvg .flag.halo{stroke-width:calc(var(--sw) * .8);fill:rgba(255,59,48,.14);animation:pulse 1.6s ease-in-out infinite;transform-box:fill-box;transform-origin:center}
@keyframes pulse{50%{opacity:.35}}
.flags{margin-top:14px;border:1.5px solid #e0412f;border-radius:var(--r-sm);background:#fdecea;padding:12px 14px;color:#7a1c12}
.flag-item{display:flex;gap:10px;font-size:13px;line-height:1.5}
.flag-item+.flag-item{margin-top:10px;padding-top:10px;border-top:1px dashed #f0b2aa}
.flag-item svg{width:18px;height:18px;flex:none;color:#d42b1c;margin-top:1px}
.flag-item strong{color:#b3200f;font-weight:600}
.flag-item p{margin-top:2px}
.flag-foot{margin-top:10px;font-size:12.5px;color:#7a1c12}
.flag-foot a{color:#b3200f;font-weight:600}
.qcard .disc{margin-top:7px;font-size:11.5px;color:var(--ok);font-weight:600}

/* pdf scale */
.pdfscale{margin-top:12px;padding:14px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:#fff}
.ps-t{font-size:13.5px;color:var(--ink-2);margin-bottom:12px}
.ps-t strong{color:var(--ink)}
.ps-row{display:grid;grid-template-columns:1.4fr 1fr;gap:10px}
.ps-mm{flex-direction:row;align-items:center;gap:8px;font-weight:400;margin:2px 0 12px}
.ps-mm input{width:auto}
.ps-mode{margin:10px 0 0}
#psRedo{margin-top:10px;display:block}
#pageSvg{position:absolute;inset:8px;width:calc(100% - 16px);height:calc(100% - 16px)}
#pageSvg .bd{fill:none;stroke:#6b7480;stroke-width:var(--pw);stroke-linecap:round}
#pageSvg image{opacity:.92}
#pageSvg .cand{fill:rgba(255,255,255,0);stroke:#8fb3d9;stroke-width:calc(var(--pw) * 2);stroke-dasharray:calc(var(--pw) * 6) calc(var(--pw) * 4);cursor:pointer;pointer-events:all}
#pageSvg .cand:hover{stroke:#fff;fill:rgba(255,255,255,.08)}
#pageSvg .cand.sel{stroke:var(--accent);stroke-width:calc(var(--pw) * 3.5);stroke-dasharray:none;fill:rgba(217,86,31,.18)}
.canvas.page{height:360px;background:#2a3038}
.pdf-badge{display:inline-block;margin-left:8px;font-size:11px;padding:2px 7px;border-radius:4px;background:var(--accent-soft);color:var(--accent-h);font-weight:600}
@media (max-width:520px){.ps-row{grid-template-columns:1fr}.canvas.page{height:260px}}

.ps-sheets{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:12px;padding-bottom:12px;border-bottom:1px dashed var(--color-border,#ddd)}
.ps-sheets .btn.sm{min-width:36px;height:32px;padding:0 10px;font-size:18px;line-height:1}
.ps-sheets .btn.sm:disabled{opacity:.4;cursor:default}
.ps-sheets #psSheetLbl{font-weight:600;font-variant-numeric:tabular-nums}
.ps-sheets .hint{flex-basis:100%;margin:0}

.pclass{margin:0 0 14px;font-size:13.5px;line-height:1.5;color:var(--ink-2,#5b5f66)}
.pc-tag{display:inline-block;font-family:'JetBrains Mono',monospace;font-size:11.5px;letter-spacing:.04em;text-transform:uppercase;padding:3px 8px;border-radius:4px;margin-right:6px;font-weight:600}
.pc-simple{background:#e3f1e6;color:#1f6b35}
.pc-standard{background:#ebedf0;color:#3d434b}
.pc-complex{background:#fbe7dc;color:#9a3d12}

/* contact gate */
.chk{display:flex;gap:10px;align-items:flex-start;margin:12px 0 4px;font-size:14px;line-height:1.45;cursor:pointer}
.chk input{margin-top:3px;width:16px;height:16px;accent-color:var(--accent);flex:none}
.gate-fine{margin-top:12px;font-size:12px;color:var(--muted)}

.fine-list{margin:6px 0 0;padding-left:18px}
.fine-list li{margin:2px 0}
.fine-list a{color:inherit;text-decoration:underline}
