:root{--bg:#D2D0CB;--card:#DEDCD7;--line:#55544F;--line2:#8F8D88;--ink:#262626;--muted:#5E5C57;--accent:#3A3A3A;--accent2:#262626;--soft:#CFCDC7;
  --ok:#1F6B3C;--okbg:#CFE3D1;--warn:#7A4E00;--warnbg:#EADFC4;--err:#9A2418;--errbg:#EBD2CE;--hi:#B3184F;--field:#E6E4DF;--input:#55544F;
  --hdr:#DEDCD7;--chip:#CFCDC7;--view:#C9C7C2;--inv:#3A3A3A;--invink:#ECE7DC;--pink:#D6207A;--tape:#3A3A3A;--tapeink:#ECE7DC;--shadow:#8A8883;--dot:rgba(38,38,38,.12);--rule:rgba(38,38,38,.2);
  --fh:'Big Shoulders Display',Impact,sans-serif;--fb:'Inter',system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--fm:'Space Mono',ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;color-scheme:light}
html[data-theme="dark"]{--bg:#262626;--card:#303030;--line:#8A857B;--line2:#5A564F;--ink:#D8D4CB;--muted:#A39D92;--accent:#3A3A3A;--accent2:#D8D4CB;--soft:#3A3A3A;
  --ok:#4ADE80;--okbg:#1E3A2A;--warn:#E8B95A;--warnbg:#3A3020;--err:#F08A80;--errbg:#3D2321;--hi:#FF3D9A;--field:#2B2B2B;--input:#8A857B;
  --hdr:#303030;--chip:#3A3A3A;--view:#1F1F1F;--inv:#D8D4CB;--invink:#262626;--pink:#FF3D9A;--tape:#3A3A3A;--tapeink:#ECE7DC;--shadow:#171717;--dot:rgba(216,212,203,.09);--rule:rgba(216,212,203,.18);color-scheme:dark}
html[data-theme="dark"] .btn.primary-soft{color:var(--ink)}html[data-theme="dark"] .field.changed,html[data-theme="dark"] .seqrow.on{background:#3A3020}html[data-theme="dark"] img.svgfix,html[data-theme="dark"] .real svg{background:#ECE7DC;border-radius:0}
.themebtn{min-height:36px;min-width:36px;border-radius:999px;border:1px solid #5B636B;background:transparent;color:#fff;cursor:pointer;font-size:16px}
*{box-sizing:border-box}
body{margin:0;background-color:var(--bg);background-image:radial-gradient(var(--dot) .9px,transparent 1.4px);background-size:5px 5px;color:var(--ink);font:15px/1.45 var(--fb)}
.wrap{max-width:none;margin:0;padding:16px 20px 48px;display:flex;flex-direction:column;gap:18px}
h2{margin:0;font-size:16px;font-weight:600}
.muted{color:var(--muted)} .small{font-size:12.5px} .mono{font-family:var(--fm);font-size:.95em}
.top{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:space-between;background:var(--hdr);color:#fff;border-radius:12px;padding:14px 18px}
.title{font-size:22px;font-weight:700}.sub{font-size:13px;color:#C9CED3}
.topbtns{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.units{display:flex;gap:4px;background:#2C3238;border-radius:999px;padding:4px}
.units button{min-height:36px;padding:0 14px;border:0;border-radius:999px;background:transparent;color:#E6E9EC;font:inherit;font-size:14px;cursor:pointer}
.units button.on{background:var(--card);color:var(--ink);font-weight:600}
.btn{min-height:44px;padding:0 15px;border-radius:8px;font:inherit;font-size:14px;cursor:pointer;border:1px solid var(--input);background:var(--card);color:var(--ink)}
.top .btn.ghost{background:transparent;color:#fff;border-color:#5B636B}
.btn.primary-soft{background:var(--soft);color:var(--accent2);border-color:var(--accent);font-weight:500}
.top .btn.primary-soft{background:var(--accent);color:#fff;border-color:#8FB3DD;font-weight:600}
.btn.primary{background:var(--accent);color:#fff;border:0;font-weight:600}
.btn.build{background:#2E7D4F;color:#fff;border:0;font-weight:600;padding:0 20px}
.btn.build[disabled]{background:#8A9199;cursor:not-allowed}
.btn.danger{background:var(--card);color:#9A3412;border-color:var(--hi);font-weight:600}
.btn.small{min-height:34px;font-size:13px;padding:0 10px}
.btn[disabled]{opacity:.6;cursor:not-allowed}
.btnrow{display:flex;flex-wrap:wrap;gap:8px}
.note{background:var(--soft);border:1px solid #B7CDE6;color:var(--accent2);border-radius:10px;padding:10px 14px;font-size:14px}
.cols{display:flex;flex-wrap:wrap;gap:18px;align-items:flex-start}
.left{flex:1 1 400px;min-width:0;display:flex;flex-direction:column;gap:14px}
.right{flex:999 1 560px;min-width:0;display:flex;flex-direction:column;gap:14px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:16px 18px;display:flex;flex-direction:column;gap:12px;min-width:0}
.head{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between}
.row2{display:flex;flex-wrap:wrap;gap:14px}
.sizes{flex:1 1 250px}.drawing{flex:3 1 480px}
.sec .shead{display:flex;justify-content:space-between;align-items:baseline;gap:8px;cursor:pointer;background:none;border:0;padding:0;font:inherit;color:inherit;text-align:left;width:100%}
.field{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:3px 12px;align-items:center}
.field label{font-size:14px;font-weight:500}
.field .hint{grid-column:1/-1;font-size:12px;color:var(--muted)}
.field.changed{background:#FFFBF2;border:1px solid #D9B26A;border-radius:8px;padding:6px 8px}
.num{display:flex;align-items:center;gap:6px}
.num input{width:100px;min-height:40px;padding:0 10px;border:1px solid var(--input);border-radius:8px;text-align:right;font:14px ui-monospace,Menlo,monospace;background:var(--field);color:var(--ink)}
.num input:focus{outline:2px solid var(--accent);outline-offset:1px}
.unit{font-size:13px;color:var(--muted);white-space:nowrap;min-width:26px}.frac{color:var(--accent2);font-weight:600}
.pills{display:flex;flex-wrap:wrap;gap:6px;justify-content:flex-end}
.pill{min-height:36px;padding:0 12px;border-radius:999px;border:1px solid var(--input);background:var(--card);color:var(--ink);font:inherit;font-size:13px;cursor:pointer}
.pill.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}
.chg{grid-column:1/-1;display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:12px;color:var(--warn)}
.sizerow{display:flex;justify-content:space-between;gap:12px;padding:5px 8px;border-radius:6px;font-size:14px}
.sizerow.hi{background:var(--soft);color:var(--accent2);font-weight:700}
.chk{display:flex;gap:10px;align-items:baseline;font-size:14px;padding:7px 10px;border-radius:8px;margin-bottom:6px}
.chk b{min-width:58px}
.chk.ok{color:var(--ok);background:var(--okbg)}.chk.warn{color:var(--warn);background:var(--warnbg)}.chk.error{color:var(--err);background:var(--errbg)}
.pillstat{font-size:13px;font-weight:600;border-radius:999px;padding:2px 10px}
.pillstat.ok{color:var(--ok);background:var(--okbg)}.pillstat.warn{color:var(--warn);background:var(--warnbg)}.pillstat.error{color:var(--err);background:var(--errbg)}
.tabs{display:flex;flex-wrap:wrap;gap:8px;border-bottom:1px solid var(--line);padding-bottom:12px}
.tab{min-height:44px;padding:0 14px;border-radius:8px;border:1px solid var(--line);background:var(--card);color:var(--ink);font:inherit;font-size:14px;cursor:pointer;display:flex;gap:8px;align-items:center}
.tab.on{background:var(--inv);color:var(--invink);border-color:var(--ink)}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.grid.wide{grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}
.group{border:1px solid var(--line);border-radius:10px;padding:12px;background:var(--field);display:flex;flex-direction:column;gap:8px;min-width:0}
.ghead{display:flex;justify-content:space-between;align-items:center;gap:8px}
.gcode{font:12px ui-monospace,Menlo,monospace;color:var(--muted)}
.gname{font-size:15px;font-weight:600}
.prow{display:grid;grid-template-columns:20px auto minmax(0,1fr) auto;gap:8px;align-items:center;text-align:left;min-height:36px;padding:4px 8px;border-radius:6px;border:1px solid transparent;background:transparent;color:var(--ink);font:inherit;cursor:pointer;width:100%}
.prow.on{border-color:var(--accent);background:var(--soft)}
.box{width:18px;height:18px;border-radius:4px;border:1px solid #8A9199;background:var(--card);color:#fff;font-size:12px;line-height:17px;text-align:center}
.prow.on .box{background:var(--accent);border-color:var(--accent)}
.pname{font-size:13px;overflow-wrap:anywhere}
.badge{font-size:11px;font-weight:600;border-radius:999px;padding:1px 8px;white-space:nowrap}
.badge.beta{color:var(--warn);background:var(--warnbg)}.badge.released{color:var(--ok);background:var(--okbg)}.badge.hidden{color:#fff;background:#8A9199}
.badge.foot{color:var(--accent2);background:var(--soft)}.badge.need{color:var(--warn);background:var(--warnbg)}.badge.from{color:var(--muted);background:var(--chip)}.badge.custom{color:#9A3412;background:#FFEDE3}
.srow{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center;font-size:13px;padding:4px 6px;border-radius:6px;background:var(--card);border:1px solid var(--line2)}
.stepper{display:flex;align-items:center;gap:6px}
.stepper button{width:40px;height:40px;border-radius:8px;border:1px solid var(--input);background:var(--card);font:inherit;font-size:18px;cursor:pointer}
.stepper.sm button{width:28px;height:28px;font-size:14px}
.stepper span{min-width:26px;text-align:center;font:600 15px ui-monospace,Menlo,monospace}
.banner{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;background:var(--bg);border-radius:10px;padding:10px 12px}
.plist{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:6px}
.plist .it{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:8px;align-items:center;font-size:13px;padding:6px 8px;border-radius:6px;background:var(--bg)}
.notebox{font-size:12px;color:var(--warn);background:var(--warnbg);border-radius:6px;padding:6px 8px}
figure{margin:0;display:flex;flex-direction:column;gap:6px;border:1px solid var(--line2);border-radius:10px;padding:10px;background:var(--field);min-width:0}
figcaption{font-size:13px;font-weight:600}
.sk{position:relative;width:100%;background:var(--card);border-radius:6px;max-height:460px}
.sk svg{position:absolute;inset:0;width:100%;height:100%}
.sk span{position:absolute;transform:translate(-50%,-50%);font-size:11px;font-weight:500;background:rgba(255,255,255,.88);padding:0 3px;border-radius:3px;white-space:nowrap;pointer-events:none}
.sk span.hi{color:var(--hi);font-weight:700}.sk span.big{font-size:22px;font-weight:700;background:transparent}
.real{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px}
.real svg{width:100%;height:auto;background:var(--card);border-radius:6px}
.ctrl{display:flex;flex-wrap:wrap;gap:10px 18px;align-items:center}
select{min-height:40px;padding:0 10px;border:1px solid var(--input);border-radius:8px;font:inherit;font-size:14px;background:var(--field);color:var(--ink)}
.editcard{border:2px solid var(--accent)}
.verify{border:2px solid var(--hi);border-radius:10px;padding:14px;display:flex;flex-direction:column;gap:10px;background:#FFF7F2}
.vrow{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:baseline;font-size:13px;padding:6px 8px;background:var(--card);border-radius:6px}
.results{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px}
.results button{display:flex;gap:8px;align-items:center;text-align:left;min-height:40px;padding:4px 10px;border-radius:8px;border:1px solid var(--line);background:var(--field);color:var(--ink);font:inherit;cursor:pointer}
input[type=search]{min-height:44px;padding:0 12px;border:1px solid var(--input);border-radius:8px;font:inherit;font-size:14px;background:var(--field);width:100%}
.bar{height:10px;border-radius:999px;background:var(--line2);overflow:hidden}.bar>div{height:100%;background:#2E7D4F;transition:width .4s}
.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:sp 1s linear infinite;vertical-align:-2px}
@keyframes sp{to{transform:rotate(360deg)}}
.foot{text-align:center}
details.adv>summary{cursor:pointer;font-weight:600;font-size:14px;padding:4px 0}
@media (max-width:600px){.num input{width:84px}.top{padding:12px}.title{font-size:19px}}
[hidden]{display:none !important}

.shape3d{width:100%;aspect-ratio:3/2;border-radius:8px;background:#F6F7F4;cursor:grab;touch-action:none;outline-offset:2px}
.cdot{display:inline-block;width:9px;height:9px;border-radius:50%;margin-right:5px;vertical-align:middle}
.stackchk{display:flex;align-items:center;gap:8px;font-size:13px;min-height:32px;cursor:pointer}.stackchk input{width:18px;height:18px}
.showpick{display:flex;align-items:center;gap:8px;margin:6px 0 2px}.showpick select{flex:1;min-width:0;min-height:32px}
/* ---- v2: site menu, who is signed in, library and account pages ---- */
.linkbtn{display:inline-flex;align-items:center;text-decoration:none}
.sitenav{display:flex;gap:4px;background:#2C3238;border-radius:999px;padding:4px}
.sitenav a{min-height:36px;display:inline-flex;align-items:center;padding:0 14px;border-radius:999px;color:#E6E9EC;text-decoration:none;font-size:14px}
.sitenav a.on{background:var(--card);color:var(--ink);font-weight:600}
.whomenu{position:relative}
.whomenu summary{list-style:none;display:flex;align-items:center;gap:8px;cursor:pointer;min-height:40px;padding:0 10px;border:1px solid #5B636B;border-radius:999px;color:#fff}
.whomenu summary::-webkit-details-marker{display:none}
.avatar{width:28px;height:28px;border-radius:50%;background:var(--accent);color:#fff;display:inline-flex;align-items:center;justify-content:center;font-weight:700;font-size:13px}
.whoname{font-size:14px;max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.whopop{position:absolute;right:0;top:46px;z-index:50;background:var(--card);color:var(--ink);border:1px solid var(--line);border-radius:10px;box-shadow:0 8px 24px rgba(0,0,0,.18);padding:10px;display:flex;flex-direction:column;gap:4px;min-width:220px}
.whopop a,.whopop button{display:block;text-align:left;padding:8px 10px;border-radius:6px;color:var(--ink);text-decoration:none;background:none;border:0;font:inherit;cursor:pointer}
.whopop a:hover,.whopop button:hover{background:var(--soft)}
.badge{display:inline-block;font-size:11px;font-weight:700;border-radius:999px;padding:1px 7px;margin-left:5px;vertical-align:middle}
.b-s1{background:#FDE7DA;color:#9A3412}.b-s5{background:#F9D3BD;color:#7C2D12;border:1px solid #E8875A}.b-tr{background:var(--okbg);color:var(--ok)}.b-ad{background:#E6E3F7;color:#4338CA}.b-vb{background:#DDF1F6;color:#0E6276}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chip{display:inline-flex;align-items:center;gap:4px;font-size:12px;border-radius:999px;padding:2px 9px;background:var(--chip);color:var(--ink);border:1px solid var(--line2)}
.chip.el{background:#EAF2FB;color:var(--accent2)}
.lf{display:flex;flex-direction:column;gap:4px}
.lf label,.lf .lbl{font-size:14px;font-weight:500}
.lf .hint{font-size:12px;color:var(--muted)}
.lf select,.txt{min-height:40px;padding:6px 10px;border:1px solid var(--input);border-radius:8px;font:inherit;font-size:14px;background:var(--field);color:var(--ink);width:100%}
.txt.code{font:20px ui-monospace,Menlo,monospace;letter-spacing:.2em;text-transform:uppercase;max-width:200px}
.num input.ft,.num input.inch{width:72px}
.chkline{display:flex;gap:8px;align-items:flex-start}
.units.small-units{background:var(--chip)}.units.small-units button{color:var(--ink);min-height:30px}.units.small-units button.on{background:var(--inv);color:var(--invink)}
.libform{position:sticky;top:10px}
.libres{display:flex;flex-direction:column;gap:12px}
.tcard h2 a{color:var(--ink);text-decoration:none}.tcard h2 a:hover{text-decoration:underline}
.tstats{display:flex;flex-wrap:wrap;gap:6px 18px}
.fit{font-size:12px;font-weight:700;border-radius:999px;padding:3px 10px;margin-right:6px}.fit.ok{background:var(--okbg);color:var(--ok)}.fit.tight{background:var(--warnbg);color:var(--warn)}
.stage{font-size:12px;font-weight:700;border-radius:999px;padding:3px 10px;background:var(--chip)}.st-built{background:#E3EDF8;color:var(--accent2)}.st-verified{background:var(--okbg);color:var(--ok)}
.creator{color:var(--accent2);font-weight:600;text-decoration:none}.creator:hover{text-decoration:underline}
.vid{position:relative;padding-top:56.25%;border-radius:10px;overflow:hidden;background:#000}.vid iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
.tbl{width:100%;border-collapse:collapse;font-size:14px}.tbl th,.tbl td{text-align:left;padding:7px 6px;border-bottom:1px solid var(--line2);vertical-align:top}
.tbl td.btnrow{display:flex;gap:6px;flex-wrap:wrap}
.qrow{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;border-bottom:1px solid var(--line2);padding:8px 0}
.provbtn{justify-content:center;font-weight:600;color:#fff;border:0}.pv-discord{background:#5865F2;color:#fff}.pv-google{background:var(--card);color:#1F1F1F;border:1px solid #747775}.pv-patreon{background:#000;color:#fff}
.signin{max-width:520px}
.prose ul{margin:0 0 6px 18px;padding:0}.prose li{margin:4px 0}.prose h2{margin-top:6px}
.foot a{color:var(--muted)}
@media (max-width:700px){.sitenav{order:3;width:100%;justify-content:center}.libform{position:static}}
/* ---- v2 partsgen: setup bar, parts first, drawings on click ---- */
.setupbar{display:flex;flex-direction:column;gap:10px}
.setuprow{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:center;justify-content:space-between}
.setupsum{display:flex;flex-wrap:wrap;gap:6px 14px;font-size:14px}
.setupsum span b{font-weight:600}
.setupctl{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.setupctl select{min-height:40px;border-radius:8px;border:1px solid var(--input);padding:0 8px;font:inherit;font-size:14px;background:var(--field)}
.statusline{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;font-size:14px;border-top:1px solid var(--line2);padding-top:10px}
body:not(.setup-open) #settingsCol{display:none}
body.no-draw #drawCard{display:none}
.p3d{position:relative;width:100%;aspect-ratio:4/3;background:var(--view);border:1px solid var(--line2);border-radius:8px;overflow:hidden}
.p3d canvas{display:block;width:100%!important;height:100%!important}
.p3dbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;font-size:13px;margin-top:6px}
.p3dbar input[type=range]{width:160px}
.realgrid{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:12px}
@media (max-width:900px){.realgrid{grid-template-columns:1fr}}
/* ---- 2.1 partsgen: list on the left, viewer always on screen ---- */
.setpanel{display:none}
body.setup-open .setpanel{display:flex}
.setgrid{display:grid;grid-template-columns:minmax(0,1.4fr) minmax(0,1fr);gap:14px}
.pg2{display:grid;grid-template-columns:minmax(300px,420px) minmax(0,1fr);gap:16px;align-items:start}
.pgright{display:flex;flex-direction:column;gap:14px;position:sticky;top:10px;max-height:calc(100vh - 20px);overflow:auto}
.plist2{gap:10px}
.psearch{display:flex;gap:8px}.psearch input{flex:1}.psearch select{min-height:40px;border-radius:8px;border:1px solid var(--input);font:inherit;font-size:14px;padding:0 6px;background:var(--field)}
.pcat{border:1px solid var(--line);border-radius:10px;background:var(--card)}
.pcat>summary{list-style:none;cursor:pointer;padding:10px 12px;display:flex;justify-content:space-between;align-items:center;font-weight:600}
.pcat>summary::-webkit-details-marker{display:none}
.pcat>summary::before{content:'▸';margin-right:8px;color:var(--muted)}.pcat[open]>summary::before{content:'▾'}
.pcat .pcount{font-weight:400;font-size:12.5px;color:var(--muted)}
.pgrp{padding:0 10px 8px}.pgrp .gh{font-size:12px;color:var(--muted);font-weight:600;text-transform:uppercase;letter-spacing:.04em;margin:8px 4px 4px}
.prow2{display:grid;grid-template-columns:auto auto minmax(0,1fr) auto;gap:8px;align-items:center;padding:6px 6px;border-radius:8px;cursor:pointer;font-size:14px}
.prow2:hover{background:var(--soft)}.prow2.cur{background:var(--soft);outline:1px solid #B7CDE6}
.prow2 input{width:18px;height:18px;margin:0}
.prow2 .pn{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tested{font-size:13px;border-top:1px solid var(--line2);padding-top:8px;display:flex;flex-direction:column;gap:4px}
.tested .tn{color:var(--warn)}
.basiccard .field{margin-bottom:4px}
@media (max-width:1000px){.pg2{grid-template-columns:1fr}.pgright{position:static;max-height:none;order:-1}.setgrid{grid-template-columns:1fr}}
.pcat>summary{justify-content:flex-start}.pcat .pcount{margin-left:auto}
.top .units button.on{background:#fff;color:#1B1F23}
html[data-theme="dark"] .chip.el{background:#22374D;color:#9CC6F2}html[data-theme="dark"] .st-built{background:#22374D;color:#9CC6F2}
html[data-theme="dark"] .notebox,html[data-theme="dark"] .banner{background:var(--field);color:var(--ink)}
.flatbig .real{grid-template-columns:repeat(2,minmax(0,1fr))}
.flatbig .real figure svg{width:100%;height:auto;max-height:42vh}
.p3d{aspect-ratio:16/10}
.prow2 .lk{width:18px;text-align:center;font-size:12px;opacity:.75}
.prow2.soon{cursor:default;opacity:.8}.prow2.soon:hover{background:none}
.lockline{margin-right:8px;color:var(--muted)}
.sizemodal{position:fixed;inset:0;z-index:200;background:rgba(10,12,14,.55);display:flex;align-items:center;justify-content:center;padding:16px}
.sizemodal .szbox{background:var(--card);color:var(--ink);border-radius:14px;max-width:560px;width:100%;padding:20px 22px;display:flex;flex-direction:column;gap:12px;box-shadow:0 20px 60px rgba(0,0,0,.35)}
.sizemodal .row{display:grid;grid-template-columns:150px minmax(0,1fr);gap:8px;align-items:center}
.sizemodal select,.sizemodal input{min-height:38px;border-radius:8px;border:1px solid var(--input);background:var(--field);color:var(--ink);font:inherit;font-size:14px;padding:0 8px;width:100%}
.about .hero{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);gap:18px;align-items:center}
.about .steps{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.about .step b{display:block;font-size:15px;margin-bottom:4px}.about .step .n{display:inline-flex;width:26px;height:26px;border-radius:50%;background:var(--accent);color:#fff;align-items:center;justify-content:center;font-weight:700;margin-bottom:6px}
.about .vidslot{aspect-ratio:16/9;border-radius:12px;background:var(--view);display:flex;align-items:center;justify-content:center;color:var(--muted);border:1px dashed var(--line)}
@media (max-width:800px){.about .hero{grid-template-columns:1fr}}
/* Street Cat FPV front page */
.home{display:flex;flex-direction:column;gap:16px}
.homehero{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:22px;align-items:start}
.homehero .pitch h2{font-size:24px;line-height:1.2;margin:4px 0 10px}
.homehero .pitch p{font-size:15px;color:var(--muted);margin:0 0 14px;max-width:56ch}
.homeacct{display:flex;flex-direction:column;gap:10px;border-left:1px solid var(--line);padding-left:22px}
.homeacct h2{margin:0}
.homelinks{display:flex;flex-wrap:wrap;gap:8px}
.tools{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:12px}
.tool{display:flex;flex-direction:column;gap:6px;text-decoration:none;color:var(--ink);transition:border-color .15s}
.tool b{font-size:17px;color:var(--accent2)}.tool span{font-size:14px;color:var(--muted)}
.tool:hover{border-color:var(--accent)}
.hometracks{display:flex;flex-direction:column;gap:10px}
.hometracks .tcard{box-shadow:none}
.homesteps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 16px;margin-top:18px;padding-top:16px;border-top:1px solid var(--line2)}
.homesteps div{font-size:13.5px;color:var(--muted);display:flex;gap:10px;align-items:flex-start}.homesteps b{color:var(--ink);display:block;font-size:14px}
.homesteps .n{flex:none;display:inline-flex;width:24px;height:24px;border-radius:50%;background:var(--accent);color:#fff;align-items:center;justify-content:center;font-weight:700;font-size:12px}
@media (max-width:520px){.homesteps{grid-template-columns:1fr}}
@media (max-width:800px){.homehero{grid-template-columns:1fr}.homeacct{border-left:0;padding-left:0;border-top:1px solid var(--line);padding-top:16px}}
@media (max-width:700px){.sitenav{flex-wrap:wrap;border-radius:14px;gap:2px}.sitenav a{padding:0 10px;font-size:13.5px}}
html[data-theme="dark"] .pv-google{background:#131314;color:#E3E3E3;border-color:#8E918F}
.pop{font-size:11.5px;color:var(--muted);background:var(--chip);border-radius:999px;padding:1px 7px;margin-left:6px;white-space:nowrap;font-weight:500}
.popline{display:block;margin-top:2px}
.psearch{flex-wrap:wrap}.psearch input{flex:1 1 100%}.psearch select{flex:1 1 40%}
/* Street Cat FPV home, projects and updates */
.stacknav{display:flex;flex-wrap:wrap;gap:4px;align-items:center;padding:4px 6px;border:1px solid var(--line);background:var(--card);border-radius:999px;align-self:flex-start}
.stacknav a{min-height:32px;display:inline-flex;align-items:center;padding:0 14px;border-radius:999px;color:var(--ink);text-decoration:none;font-size:14px}
.stacknav a.on{background:var(--accent);color:#fff;font-weight:600}.stacknav a:hover:not(.on){background:var(--chip)}
.stacknav .stlbl{font-size:12px;font-weight:700;color:var(--muted);padding:0 8px 0 10px;text-transform:uppercase;letter-spacing:.4px}
.navsep{width:1px;align-self:stretch;background:#4A5158;margin:4px 2px}
.sech{font-size:18px;margin:4px 2px 10px}
.homeintro{display:flex;flex-direction:column;gap:12px}.homeintro p{font-size:16px;line-height:1.55;margin:0 0 10px;max-width:70ch}
.socials{display:flex;flex-wrap:wrap;gap:8px}.btn.social{font-weight:600;border:0;color:#fff}
.sc-youtube{background:#C4302B}.sc-instagram{background:linear-gradient(45deg,#F58529,#DD2A7B 55%,#8134AF)}.sc-patreon{background:#1B1F23}
html[data-theme="dark"] .sc-patreon{background:#E6E9EC;color:#14171A}
.projcard .pchead,.projintro .pchead{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.pstatus{font-size:12px;font-weight:700;border-radius:999px;padding:3px 10px;background:var(--soft);color:var(--accent2)}
.projintro p{font-size:15px;line-height:1.55;max-width:75ch;margin:0 0 10px}
.updates{display:flex;flex-direction:column;gap:12px}
.update h3{margin:0;font-size:17px}.update .uphead{display:flex;flex-direction:column;gap:2px}
.update p{margin:0 0 8px;line-height:1.5;max-width:75ch}
.update .upimg{max-width:min(100%,720px);max-height:560px;border-radius:10px;align-self:flex-start;object-fit:contain}
.update .vid{max-width:720px;width:100%;padding-top:0;aspect-ratio:16/9}
.adm-up{display:flex;flex-direction:column;gap:8px}.adm-row{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}.adm-row>.lf{flex:1 1 220px}
.adm-list .qrow{align-items:flex-start}.adm-proj{border-top:1px solid var(--line2);padding-top:10px;margin-top:4px}
textarea.txt{min-height:90px;resize:vertical;font:inherit;padding:8px}
.relcat{border:1px solid var(--line2);border-radius:10px;padding:6px 10px;margin-top:8px}.relcat summary{display:flex;justify-content:space-between;gap:10px;cursor:pointer;padding:6px 2px;font-weight:600}
.reltbl td{vertical-align:middle}.reltbl select{min-height:32px;border-radius:6px;border:1px solid var(--input);background:var(--field);color:var(--ink);font:inherit;font-size:13px}
.relchips{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.relchip{border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:999px;padding:5px 12px;font:inherit;font-size:13px;cursor:pointer}
.relchip span{color:var(--muted);margin-left:2px}.relchip.on{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.relchip.on span{color:#DCE9F7}
.relhelp{margin-left:6px}.relhelp summary{cursor:pointer;color:var(--accent2)}.relhelp>div{margin-top:6px;display:flex;flex-direction:column;gap:2px}
.relbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;border:1px solid var(--line2);border-radius:10px;padding:8px 12px;background:var(--bg);min-height:46px}
.relbar.on{position:sticky;top:8px;z-index:5;border-color:var(--accent);background:var(--soft)}
.relgrp{display:inline-flex;gap:6px;align-items:center;font-size:14px}.relbar select{min-height:32px;border-radius:6px;border:1px solid var(--input);background:var(--field);color:var(--ink);font:inherit;font-size:13px}.relall{margin:6px 2px}
.projintro .rth,.homeintro .rth,.update .rth{font-size:17px;margin:16px 0 6px}
.rtl{margin:0 0 10px;padding-left:20px;max-width:75ch;line-height:1.55}.rtl li{margin:3px 0}
.pctbl td,.pctbl th{text-align:left}.pctbl td:not(:first-child),.pctbl th:not(:first-child){text-align:center;width:110px}
/* configuration page */
.cfg{display:flex;flex-direction:column;gap:16px}.note2{background:var(--soft);color:var(--accent2);border-color:var(--accent)}
.cfgunits{align-self:flex-start;background:var(--chip);border-radius:999px;padding:4px;display:inline-flex;gap:4px}.cfgunits button{border:0;background:transparent;color:var(--ink);font:inherit;padding:8px 16px;border-radius:999px;cursor:pointer}.cfgunits button.on{background:var(--accent);color:#fff;font-weight:600}
.cfggrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(440px,1fr));gap:14px}
.cfgnum{display:flex;gap:14px;border:1px solid var(--line2);border-radius:12px;padding:12px}.cfgpic{flex:none;width:120px}.cfgpic svg{width:120px;height:80px}
.cfgbody{display:flex;flex-direction:column;gap:6px;flex:1;min-width:0}.cfgin{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.cfgin select,.cfgadv input,.cfgin input{min-height:38px;border-radius:8px;border:1px solid var(--input);background:var(--field);color:var(--ink);font:inherit;font-size:14px;padding:0 8px}
.cfgin select{flex:1;min-width:200px}.cfgin input{width:110px}.cfgder{font-weight:600;color:var(--accent2);font-size:14px}
.cfgadv{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px;margin:10px 0}.cfgsave{position:sticky;bottom:0;background:var(--bg);padding:10px 0;border-top:1px solid var(--line);z-index:5}
.cfgpic .pp{fill:#E9ECEF;stroke:#8A939B}.cfgpic .pe{fill:#C9CFD5;stroke:#6B747C}.cfgpic .ph{fill:var(--card);stroke:#6B747C}.cfgpic .px{fill:none;stroke:#E8742F;stroke-width:5}
.cfgpic .sq{fill:none;stroke:#C9CFD5;stroke-width:5}.cfgpic .dim,.cfgpic .dim2{stroke:var(--accent);stroke-width:1.6;fill:none}.cfgpic .dim2{stroke-dasharray:3 3}.cfgpic .dimf{fill:var(--accent)}
.cfgpic .dt{font-size:10px;fill:var(--accent2);font-weight:700}.cfgpic .dt.sm{font-size:9px}
@media (max-width:560px){.cfggrid{grid-template-columns:1fr}.cfgnum{flex-direction:column}}
.s4grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:8px}
.s4{display:flex;flex-direction:column;gap:4px;border:1px solid var(--line2);border-radius:10px;padding:8px 10px;background:var(--bg)}
.s4l{font-size:12px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.3px}.s4 select{min-height:36px;border-radius:8px;border:1px solid var(--input);background:var(--field);color:var(--ink);font:inherit;font-size:13.5px;padding:0 6px;width:100%}
.s4d{font-size:13px;color:var(--accent2);font-weight:600}.setuprow{flex-wrap:wrap}.setuprow>.s4head{flex:1 1 100%}
.pill.editpill{border-color:var(--accent);color:var(--accent2);font-weight:600}.pill.editpill.on{background:var(--accent);color:#fff}
@media (max-width:900px){.s4grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:520px){.s4grid{grid-template-columns:1fr}}
/* catalogue pictures */
.pthumb{width:34px;height:26px;object-fit:contain;vertical-align:middle;margin-right:6px;border-radius:4px;background:var(--view)}.pthumb.none{display:inline-block}
.psearch select{flex:1 1 30%}
body.partgrid .pgrp{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px}
body.partgrid .pgrp .gh{grid-column:1/-1}
body.partgrid .prow2{grid-template-columns:auto minmax(0,1fr);grid-template-areas:"pic pic" "box code" "name name" "badge badge";border:1px solid var(--line2);padding:8px;align-items:start}
body.partgrid .prow2 .gcode{grid-area:code;display:contents}body.partgrid .prow2 .pthumb{grid-area:pic;width:100%;height:84px;margin:0 0 4px}
body.partgrid .prow2>input,body.partgrid .prow2>.lk{grid-area:box}body.partgrid .prow2 .pn{grid-area:name;font-size:13px}body.partgrid .prow2 .badge{grid-area:badge;justify-self:start}
#p3d{position:relative}.p3dthumb{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:var(--view);padding:6%;box-sizing:border-box;animation:p3dpulse 1.6s ease-in-out infinite alternate}
@keyframes p3dpulse{from{opacity:1}to{opacity:.75}}
.cfgbad{color:var(--err,#B42318)}
.storechip{display:inline-block;font-size:11.5px;font-weight:600;border-radius:999px;padding:2px 8px;background:#E7F4E4;color:#246B2A;white-space:nowrap}
html[data-theme="dark"] .storechip{background:#20382A;color:#9FD8A6}.relsname{min-height:30px;font-size:12.5px;margin-top:4px;width:100%}
.pkrow{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:10px;align-items:center;padding:8px;border-radius:10px;border:1px solid var(--line2);margin:6px 0}
.pkpics{display:flex;flex-direction:column;gap:2px}.pkpics img{width:38px;height:30px;object-fit:contain;background:var(--view);border-radius:4px}.pkbody{display:flex;flex-direction:column;gap:2px;min-width:0}
.pkbody ul{margin:4px 0 0;padding-left:18px}body.partgrid .pkcat .pgrp{display:block}
.topsocial{display:inline-flex;gap:4px;align-items:center}.topsocial a{display:inline-flex;width:34px;height:34px;align-items:center;justify-content:center;border-radius:50%;color:#E6E9EC;border:1px solid #5B636B}
.topsocial a:hover{background:#3B4249}.topsocial svg{width:18px;height:18px}.fxbar .topsocial a{width:30px;height:30px}
/* ---------------------------------------------------------------- the top bar on every page: brand left; account, menu, socials and theme right */
.gbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;background:var(--hdr);color:#fff;padding:8px 16px;position:relative;z-index:60}
.gbrand{color:#fff;text-decoration:none;font-weight:800;font-size:16px;letter-spacing:.2px;white-space:nowrap}
.gbar .gsp{flex:1}
.gbar .gwho{order:1}.gbar .sitenav{order:2;flex-wrap:nowrap}.gbar .topsocial{order:3}.gbar .themebtn{order:4}
.gbar .sitenav a{white-space:nowrap}
.gbar .whomenu summary{min-height:38px}
.lvltag{font-size:11.5px;font-weight:700;padding:2px 8px;border-radius:999px;background:#3B4249;color:#E6E9EC;white-space:nowrap}
.lvltag.lv-beta{background:#7C3AED;color:#fff}.lvltag.lv-supporter{background:#C2410C;color:#fff}.lvltag.lv-admin{background:#0E7C66;color:#fff}
.whobadges{display:flex;flex-wrap:wrap;gap:4px;padding:4px 10px 6px}
.gbar .gsub{order:10;flex-basis:100%;border:0;background:transparent;padding:0;border-radius:0;gap:2px}
.gbar .gsub a{color:#C9D0D6;min-height:30px;font-size:13.5px}.gbar .gsub a.on{background:#E6E9EC;color:#1B1F23}.gbar .gsub a:hover:not(.on){background:#2C3238}
.gbar .gsub .stlbl{color:#8A949D}
.wrap > .top{margin-top:0}
@media (max-width:760px){
  .gbar{padding:8px 12px}
  .gbar .sitenav{order:5;flex-basis:100%;overflow-x:auto;scrollbar-width:none;border-radius:14px;justify-content:flex-start;width:auto}
  .gbar .sitenav::-webkit-scrollbar{display:none}
  .gbar .gsub{overflow-x:auto;flex-wrap:nowrap}
  .gbar .whoname{max-width:90px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .gbar .topsocial{display:none}
}
/* trackgen: the bar sits above the app, which fills the rest of the screen */
body.fx{display:flex;flex-direction:column}
body.fx .gbar{padding:4px 10px;gap:6px 8px}
body.fx .gbar .sitenav{padding:3px}body.fx .gbar .sitenav a{min-height:26px;font-size:13px;padding:0 10px}
body.fx .gbar .whomenu summary{min-height:30px}body.fx .gbar .themebtn{min-height:30px;min-width:30px}
body.fx .gbar .gsub a{min-height:24px;font-size:12.5px}
body.fx .fxapp{flex:1;min-height:0;height:auto}
.gbar .gsp{flex:1 1 0;min-width:0}
.gbar .gsub a,.gbar .gsub .stlbl{white-space:nowrap}
@media (max-width:760px){
  .gbar .whoname{max-width:64px}.gbar .whomenu summary{gap:6px;padding:0 8px}
  .gbrand{font-size:15px}
  .gbar .gsub .stlbl{display:none}
}
/* projects on the Admin page and their cards */
.adm-proj .projhead{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.adm-proj.off{opacity:.8;border-style:dashed}
.pjflags{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;margin:6px 0}
.adm-new{background:var(--soft)}
.projimg{width:100%;aspect-ratio:16/9;object-fit:cover;border-radius:8px;margin-bottom:6px}
.note-hidden{border-color:#C2410C;background:#FFF4EC;color:#7C2D12}
:root[data-theme="dark"] .note-hidden{background:#3A2418;color:#FBD5BD}
/* packages: contents up front, one download button */
.pkrow{grid-template-columns:minmax(0,1fr)}
.pklist{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:4px;margin:6px 0}
.pkitem{display:flex;align-items:center;gap:6px;padding:3px 6px;border-radius:8px;background:var(--soft);cursor:pointer;font-size:12.5px;min-width:0}
.pkitem:hover{outline:1px solid var(--accent)}
.pkitem .pthumb{width:30px;height:24px;flex:none}
.pkitem .pkn{font-weight:700;flex:none}.pkitem .pkc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pknotes{margin:2px 0 4px;padding-left:18px}
.pkdl{display:flex;flex-direction:column;gap:6px;align-items:flex-start}.pkjob{width:100%}.pkjob .bar{margin:2px 0}
.offtag{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.3px;padding:1px 6px;border-radius:999px;background:#C2410C;color:#fff;margin-left:4px}
.tool.soon{opacity:.7;cursor:default}
/* report a problem / feedback */
.rpbtns{display:inline-flex;gap:6px;order:0}
.rpbtn{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:0 10px;border-radius:999px;border:1px solid #5B636B;background:transparent;color:#E6E9EC;font:inherit;font-size:13px;cursor:pointer;white-space:nowrap}
.rpbtn:hover{background:#2C3238}.rpbtn [aria-hidden]{font-weight:800;color:#F59E0B}
body.fx .rpbtn{min-height:28px;font-size:12.5px}
.rpform .lf{display:flex;flex-direction:column;gap:4px;font-size:13.5px}
.rpform textarea,.rpform input.txt{width:100%;box-sizing:border-box}
.rpform .hp{position:absolute;left:-9999px;width:1px;height:1px;opacity:0}
.rpdet{margin:4px 0 0;padding-left:18px;word-break:break-word}
@media (max-width:760px){.rpbtn .rpt{display:none}.rpbtn{padding:0 11px}}
.rpctl{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;justify-content:space-between;margin:6px 0}
.rplist{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.rprow{border:1px solid var(--line);border-radius:10px;padding:8px 10px}.rprow.st-new{border-left:4px solid #C2410C}.rprow.st-fixed,.rprow.st-wontfix{opacity:.7}
.rphead{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.pstatus.rp-bug{background:#FDE2D3;color:#9A3412}.pstatus.rp-fb{background:#DBEAFE;color:#1E40AF}
.rpbody{display:flex;flex-direction:column;gap:4px;padding:6px 0;word-break:break-word}.rpshot{max-width:320px;max-height:220px;border-radius:8px;border:1px solid var(--line)}
@media (max-width:760px){.gbar .whoname{display:none}.gbar .gsp{display:none}.gbrand{margin-right:auto}}
.rdy{font-size:10.5px;font-weight:700;padding:1px 6px;border-radius:999px;background:var(--chip);color:var(--muted);white-space:nowrap;vertical-align:middle}
.rdy.ok{background:#DCFCE7;color:#166534}:root[data-theme="dark"] .rdy.ok{background:#14532D;color:#BBF7D0}
.pkitem .pkr{margin-left:auto;flex:none}
/* Admin: access by level */
.acwrap{overflow-x:auto}.acgrid td.acc{text-align:center}.acgrid th:not(:first-child){text-align:center;min-width:64px}
.acgrid tr.acg td{font-weight:700;background:var(--soft);font-size:12.5px;text-transform:uppercase;letter-spacing:.3px}
/* ================================================================ 2.16: the zine look. Grey paper, toner, one pink; Big Shoulders heads, Inter body, Space Mono labels ================================================================ */
h1,h2,h3,.title,.sech,.fxbrand,.about .step b,.update h3{font-family:var(--fh);font-weight:800;letter-spacing:.03em;text-transform:uppercase;line-height:1}
h2{font-size:22px}.sech{font-size:26px;display:inline-block;border-bottom:4px solid var(--line);padding-bottom:2px;margin:6px 2px 12px}
.update h3{font-size:22px}.about .step b{font-size:18px;margin-bottom:6px}
.gcode,.badge,.pop,.rdy,.stage,.fit,.pstatus,.chip,.lvltag,.storechip,.offtag,.s4l,.fxh,.pcat .pcount,.pgrp .gh,.tested,.unit,.small-units button,.stacknav .stlbl{font-family:var(--fm)}
.gcode{font-size:11.5px;color:var(--muted)}
/* the top bar: paper, a 3px rule under it; brand as two tags; nav as typewriter tags; account at the far right */
.gbar{background:var(--hdr);color:var(--ink);border-bottom:3px solid var(--line);padding:10px 20px;gap:8px 10px}
.gbrand{display:inline-flex;align-items:center;gap:5px;color:var(--ink);font-weight:400}
.gbrand .gb1{background:var(--tape);color:var(--tapeink);padding:5px 9px 3px;font-family:var(--fh);font-weight:800;font-size:20px;letter-spacing:.04em;text-transform:uppercase;transform:rotate(-1.5deg);line-height:1}
.gbrand .gb2{background:var(--card);color:var(--ink);border:2px solid var(--line);border-left:6px solid var(--pink);padding:3px 9px 1px;font-family:var(--fh);font-weight:800;font-size:20px;letter-spacing:.04em;text-transform:uppercase;transform:rotate(2deg);line-height:1}
.gbar .rpbtns{order:0}.gbar .sitenav{order:1}.gbar .topsocial{order:2}.gbar .themebtn{order:3}.gbar .gwho{order:4}
.sitenav{background:transparent;border-radius:0;padding:0;gap:4px}
.sitenav a{border-radius:0;border:2px solid var(--line);background:var(--card);color:var(--ink);font-family:var(--fm);font-size:13px;min-height:34px;padding:0 10px;transform:rotate(-.6deg)}
.sitenav a:nth-child(2n){transform:rotate(.8deg)}
.sitenav a.on{background:var(--tape);color:var(--tapeink);border-color:var(--tape);box-shadow:3px 3px 0 var(--pink);font-weight:400}
.rpbtn{border-radius:0;border:2px dashed var(--line);color:var(--ink);font-family:var(--fm);font-size:12.5px}.rpbtn:hover{background:var(--card)}.rpbtn [aria-hidden]{color:var(--pink)}
.themebtn{border-radius:0;border:2px solid var(--line);color:var(--ink);background:var(--card)}
.whomenu summary{border-radius:0;border:2px solid var(--line);background:var(--card);color:var(--ink);font-family:var(--fm);font-size:13px;transform:rotate(1deg)}
.avatar{border-radius:0;background:var(--tape);color:var(--tapeink)}
.lvltag{border-radius:0;background:var(--tape);color:var(--tapeink);font-size:11px;letter-spacing:.06em;text-transform:uppercase}
.lvltag.lv-beta,.lvltag.lv-supporter,.lvltag.lv-admin{background:var(--tape);color:var(--tapeink)}.lvltag.lv-admin{border-left:4px solid var(--pink)}
.whopop{border-radius:0;border:2px solid var(--line);box-shadow:5px 5px 0 var(--shadow)}.whopop a,.whopop button{border-radius:0}
.gsignin{border-radius:0}
.topsocial a{border-radius:0;border:2px solid var(--line);color:var(--ink)}.topsocial a:hover{background:var(--card)}
.gbar .gsub{border-top:2px dashed var(--rule);padding-top:6px;margin-top:2px}
.gbar .gsub a{color:var(--ink);border:2px solid transparent;transform:none;background:transparent;font-size:13px}.gbar .gsub a.on{border-color:var(--line);background:var(--card);color:var(--ink);box-shadow:none;transform:rotate(-1deg)}.gbar .gsub a:hover:not(.on){background:var(--card)}
.gbar .gsub .stlbl{color:var(--muted);letter-spacing:.14em;font-size:11px}
.offtag{border-radius:0;background:var(--pink);color:#fff}
/* page title strip: no more dark block */
.top{background:transparent;color:var(--ink);border-radius:0;padding:14px 0 6px;border-bottom:0}
.title{font-size:44px;background:var(--tape);color:var(--tapeink);padding:8px 14px 4px;display:inline-block;transform:rotate(-1.5deg)}
.sub{color:var(--muted);font-family:var(--fm);font-size:13px;margin-top:10px}
.top .btn.ghost{color:var(--ink);border-color:var(--line);background:transparent}
.units{background:transparent;border:2px solid var(--line);border-radius:0;padding:0;gap:0}
.units button{border-radius:0;color:var(--ink);font-family:var(--fm);font-size:13px;min-height:34px}.units button.on,.top .units button.on{background:var(--tape);color:var(--tapeink);font-weight:400}
/* buttons: square, 2px, the main ones with an offset shadow; pink only under the primary */
.btn{border-radius:0;border:2px solid var(--line);background:var(--card);color:var(--ink);font-weight:600}
.btn.primary,.btn.build,.top .btn.primary-soft{background:var(--tape);color:var(--tapeink);border:2px solid var(--tape);box-shadow:4px 4px 0 var(--pink)}
.btn.build{background:var(--tape)}.btn.build[disabled]{background:var(--chip);color:var(--muted);border-color:var(--line2);box-shadow:none}
.btn.primary-soft{background:var(--card);color:var(--ink);border:2px solid var(--line);border-left:6px solid var(--pink)}
.btn.danger{border-color:var(--hi);color:var(--hi)}
.btn.ghost{border-style:dashed;background:transparent}
.btn.small{border-width:2px}
.pill{border-radius:0;border:2px solid var(--line);font-family:var(--fm);font-size:12.5px}.pill.on{background:var(--tape);border-color:var(--tape);color:var(--tapeink);font-weight:400}
.pill.editpill{border-color:var(--line);color:var(--ink)}.pill.editpill.on{background:var(--tape);color:var(--tapeink)}
.tab{border-radius:0;border:2px solid var(--line)}.tab.on{background:var(--tape);color:var(--tapeink);border-color:var(--tape)}
.tabs{border-bottom:2px dashed var(--rule)}
/* cards: square, 2px rule; flyers (the ones you click into) get the 3px rule and an offset shadow */
.card{border-radius:0;border:2px solid var(--line);background:var(--card)}
.card.tool,.projcard,.tcard,.homeintro,.projintro{border-width:3px;box-shadow:5px 5px 0 var(--shadow)}
.card.tool{transform:rotate(-.5deg)}.card.tool:nth-child(2n){transform:rotate(.6deg)}.card.tool:hover{border-color:var(--pink);transform:rotate(0)}
.tool b{color:var(--ink);font-family:var(--fh);font-weight:800;font-size:24px;letter-spacing:.03em;text-transform:uppercase}
.note{border-radius:0;border:2px solid var(--line);border-left:6px solid var(--pink);background:var(--card);color:var(--ink)}
.banner,.group,.notebox,figure,.sk,.real svg,.levelrow,.verify,.vrow,.results button,.whopop,.plist .it,.srow,.sizerow,.chk{border-radius:0}
.group{border:2px solid var(--line2)}
.pstatus,.stage,.fit,.badge,.chip,.rdy,.pop,.storechip{border-radius:0;border:2px solid var(--line);background:var(--card);color:var(--ink);font-size:11px;letter-spacing:.04em;text-transform:uppercase;padding:1px 7px;font-weight:400}
.badge.released,.st-verified,.fit.ok,.rdy.ok{background:var(--okbg);color:var(--ok);border-color:var(--line)}
.badge.beta,.badge.need,.fit.tight{background:var(--warnbg);color:var(--warn)}
.badge.hidden{background:var(--chip);color:var(--muted)}
.chip{text-transform:none;letter-spacing:0;border-width:1px}.chip.el{background:var(--card);color:var(--ink)}
.b-s1,.b-s5,.b-tr,.b-ad,.b-vb{background:var(--card);color:var(--ink);border:2px solid var(--line)}.b-s5,.b-ad{border-left:5px solid var(--pink)}
.stacknav{border-radius:0;border:2px solid var(--line)}.stacknav a{border-radius:0;font-family:var(--fm);font-size:13px}.stacknav a.on{background:var(--tape);color:var(--tapeink);font-weight:400}
/* fields */
input[type=search],select,.txt,.lf select,.num input,.tname,.fxname,.sizemodal select,.sizemodal input,.cfgin select,.cfgadv input,.cfgin input,.setupctl select,.psearch select,.s4 select,.relbar select,.reltbl select,.sq .sqctl select,.pmenu select{border-radius:0;border:2px solid var(--line);background:var(--field);color:var(--ink)}
.num input{font-family:var(--fm)}.num input:focus,input[type=search]:focus,select:focus,.txt:focus{outline:2px solid var(--pink);outline-offset:1px}
.stepper button{border-radius:0;border:2px solid var(--line);background:var(--card);color:var(--ink)}.stepper span{font-family:var(--fm)}
.field.changed{border-radius:0;border:2px solid var(--warn)}
.bar{border-radius:0;background:var(--chip);border:1px solid var(--line2)}.bar>div{background:var(--tape)}
.sizemodal .szbox{border-radius:0;border:3px solid var(--line);box-shadow:8px 8px 0 var(--shadow)}
.spin{border-top-color:var(--pink)}
/* partsgen: wider list, rows with a Download / Generate button each */
.pg2{grid-template-columns:minmax(360px,5fr) minmax(0,6fr)}
.pcat{border-radius:0;border:0;border-bottom:2px solid var(--line);background:transparent}
.pcat>summary{padding:10px 4px;font-family:var(--fb);font-weight:700;font-size:15px}
.pcat>summary .gcode{background:var(--tape);color:var(--tapeink);padding:1px 6px;margin-right:6px;font-size:11.5px}
.pcat[open]>summary{background:var(--card);border-bottom:2px dashed var(--rule)}
.pgrp .gh{letter-spacing:.1em;font-size:11px}
.prow2{grid-template-columns:auto auto minmax(0,1fr) auto auto;border-radius:0;padding:7px 6px;border-bottom:1px dashed var(--rule)}
.prow2:hover{background:var(--card)}.prow2.cur{background:var(--card);outline:2px solid var(--line)}
.prow2 .gcode{font-size:11.5px;color:var(--ink)}
.pthumb{border-radius:0;background:var(--view)}
.storechip{display:inline-block;width:9px;height:9px;padding:0;border-radius:50%;background:var(--ok);border:2px solid var(--line);vertical-align:middle;margin-left:4px;font-size:0}
.pdl{min-height:30px;padding:0 10px;font-size:12.5px;font-weight:700;border:2px solid var(--line);background:var(--card);color:var(--ink);font-family:var(--fb);cursor:pointer;white-space:nowrap;text-decoration:none;display:inline-flex;align-items:center;gap:6px}
.pdl.ok{background:var(--tape);color:var(--tapeink);border-color:var(--tape);box-shadow:3px 3px 0 var(--pink)}
.pdl.busy,.pdl[disabled]{opacity:.55;cursor:default;box-shadow:none}.pdl.wait{border-style:dashed;background:transparent}
.pdl.fail{border-color:var(--err);color:var(--err)}
body.partgrid .prow2{grid-template-areas:"pic pic" "box code" "name name" "badge dl";border:2px solid var(--line2)}body.partgrid .prow2 .pdl{grid-area:dl;justify-self:end}
.s4{border-radius:0;border:2px solid var(--line2);background:var(--card)}.s4d{color:var(--ink);font-family:var(--fm);font-size:12px}
.setupbar h2{font-size:22px}.statusline{border-top:2px dashed var(--rule)}
.pillstat{border-radius:0;border:2px solid var(--line);font-family:var(--fm);font-size:12px;text-transform:uppercase;letter-spacing:.04em;font-weight:400;padding:2px 9px}
.pillstat.ok{background:var(--okbg);color:var(--ok)}
.editcard{border:2px solid var(--line);border-left:6px solid var(--pink)}
.p3d{border-radius:0;border:2px solid var(--line);background:var(--view)}
.relbar,.relcat,.relchip,.qrow,.rprow,.pkrow,.pkitem,.cfgnum,.cfgunits,.cfgunits button,.upimg,.projimg,.vid,.about .vidslot,.shape3d{border-radius:0}
.relchip{border:2px solid var(--line)}.relchip.on{background:var(--tape);border-color:var(--tape);color:var(--tapeink)}
.cfgunits{border:2px solid var(--line);background:transparent}.cfgunits button.on{background:var(--tape);color:var(--tapeink)}
.pkitem{background:var(--card);border:1px solid var(--line2)}.pkrow{border:2px solid var(--line2)}
.rprow.st-new{border-left:5px solid var(--pink)}
/* home, overview, projects */
.homehero,.about .hero{gap:28px}
.about .step .n,.homesteps .n{border-radius:0;background:var(--card);color:var(--ink);border:3px solid var(--line);font-family:var(--fh);font-size:16px;transform:rotate(-4deg)}
.foot{font-family:var(--fm);font-size:12px;border-top:3px solid var(--line);padding-top:16px}
.hero1{display:grid;grid-template-columns:minmax(0,7fr) minmax(0,5fr);gap:40px;align-items:center;padding:12px 0 8px}
.hero1 .marker{font-family:'Permanent Marker',cursive;color:var(--pink);font-size:20px;transform:rotate(-3deg);display:inline-block;margin-bottom:10px}
.hero1 h1{margin:0;font-size:clamp(44px,7vw,92px);display:flex;flex-direction:column;align-items:flex-start;gap:4px}
.hero1 h1 span{display:inline-block;padding:10px 14px 2px;line-height:.95}
.hero1 h1 .l1{background:var(--tape);color:var(--tapeink);transform:rotate(-1.5deg)}
.hero1 h1 .l2{border:4px solid var(--line);padding-top:6px;transform:rotate(.8deg);margin-left:6%}
.hero1 h1 .l3{background:var(--card);border:4px solid var(--line);border-bottom:8px solid var(--pink);padding-top:6px;transform:rotate(-.8deg);margin-left:2%}
.hero1 p{font-size:17px;color:var(--muted);max-width:52ch;margin:14px 0 16px}
.hero1 .btnrow .btn{min-height:50px;font-family:var(--fh);font-weight:800;font-size:20px;letter-spacing:.05em;text-transform:uppercase;padding:0 24px;box-shadow:4px 4px 0 var(--shadow)}
.hero1 .btnrow .btn.primary{box-shadow:4px 4px 0 var(--pink)}
.heropic{border:3px solid var(--line);background:var(--view);aspect-ratio:4/3;display:flex;align-items:center;justify-content:center;color:var(--muted);font-family:var(--fm);font-size:12px;transform:rotate(2deg);box-shadow:8px 8px 0 var(--shadow);overflow:hidden}
.heropic img,.heropic iframe{width:100%;height:100%;object-fit:cover;border:0}
.story p{font-size:16px;line-height:1.6;max-width:62ch}
.catgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.catcard{display:flex;flex-direction:column;gap:6px;border:2px solid var(--line);background:var(--card);padding:14px 16px;text-decoration:none;color:var(--ink)}
.catcard .ch{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.catcard .ch b{font-family:var(--fm);font-size:14px;letter-spacing:.06em;text-transform:uppercase;font-weight:700}
.catcard .cc{font-family:var(--fm);font-size:11.5px;color:var(--muted);margin-left:auto}
.catcard p{margin:0;font-size:13.5px;color:var(--muted)}
.guide{display:grid;grid-template-columns:220px minmax(0,1fr);gap:32px;align-items:start}
.guidenav{position:sticky;top:12px;display:flex;flex-direction:column;gap:6px;font-family:var(--fm);font-size:13px}.guidenav a{color:var(--ink)}
.guide .rth{font-family:var(--fh);font-weight:800;font-size:26px;letter-spacing:.03em;text-transform:uppercase;border-bottom:4px solid var(--line);display:inline-block;padding-bottom:2px;margin:20px 0 8px}
@media (max-width:800px){.hero1{grid-template-columns:1fr}.guide{grid-template-columns:1fr}.guidenav{position:static}}
@media (max-width:760px){.gbar .gwho{order:4}.gbar .themebtn{order:3}.title{font-size:34px}}
.s4grid{display:flex;flex-wrap:wrap;gap:10px}.s4{flex:1 1 200px;padding:6px 10px}.s4 select{min-height:32px;font-size:13px}
.setuprow>.s4head{flex:1 1 100%}.setupctl .btn{min-height:36px}
body.homepage .wrap>.top{display:none}
.hero1 h1{font-size:clamp(44px,7vw,100px)}
.wrap a:not(.btn):not(.linkbtn):not(.tool):not(.catcard):not(.creator){color:var(--ink);text-decoration-thickness:2px;text-decoration-color:var(--pink);text-underline-offset:2px}
@media (max-width:1000px){.pg2{grid-template-columns:1fr}}
@media (max-width:760px){.gbar .sitenav{order:5;flex-basis:100%}.gbar .sitenav a{transform:none}.gbar .gwho{order:4;margin-left:auto}.gbar .themebtn{order:3}.gbar .rpbtns{order:1}}
.title,.fxbrand,.tool b,.gbrand .gb1,.gbrand .gb2{text-transform:none}
.pgright{position:static;max-height:none;overflow:visible}
/* ---- 2.17: tagline scrawl, coming-soon stamp, fittings show, road map, grid view ---- */
.gtag{font-family:'Permanent Marker',cursive;color:var(--pink);font-size:15px;transform:rotate(-3deg);display:inline-block;margin-left:6px;white-space:nowrap}
@media (max-width:900px){.gtag{display:none}}
/* 2.20.3: the header is the same on every page, front page included */
.btn.soon{position:relative;opacity:.75;pointer-events:auto}
.soonstamp{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%) rotate(-12deg);font-family:'Permanent Marker',cursive;font-size:15px;color:var(--pink);background:var(--card);border:2px solid var(--pink);padding:1px 8px;white-space:nowrap;text-transform:none;letter-spacing:0}
.fitshow{position:relative;width:100%;height:100%;display:flex;align-items:center;justify-content:center}
.fitpic{position:absolute;inset:0;margin:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;opacity:0;transition:opacity .2s;background:var(--view)}
.fitpic.on{opacity:1;z-index:2;transition:opacity .8s}
.fitpic img{width:68%;height:auto;max-height:70%;object-fit:contain;image-rendering:auto}
.fitpic figcaption{font-family:var(--fm);font-size:13px;color:var(--ink)}
.fitline{position:absolute;left:16px;top:14px;z-index:5;pointer-events:none;display:flex;flex-direction:column;gap:4px;font-family:'Permanent Marker',cursive;color:var(--pink);font-size:clamp(24px,3vw,34px);transform:rotate(-4deg);line-height:1.05;text-shadow:2px 2px 0 var(--bg)}   /* 2.20.3: always on top of the pictures, and bigger */
.roadmap{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px;max-width:720px}
.roadmap li{display:grid;grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:center;padding:8px 10px;border:2px solid var(--line2);background:var(--card)}
.roadmap li.rm-done{opacity:.7}.roadmap li.rm-now{border-color:var(--line);box-shadow:4px 4px 0 var(--pink)}
.roadmap .stk{transform:none;justify-content:center}
/* grid view: code on one line, badge and button on their own rows */
body.partgrid .pgrp{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
body.partgrid .prow2{grid-template-columns:auto minmax(0,1fr);grid-template-areas:"pic pic" "box code" "name name" "badge badge" "dl dl";padding:8px;gap:6px 8px;align-items:start}
body.partgrid .prow2 .gcode{grid-area:code;display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
body.partgrid .prow2 .pthumb{grid-area:pic;width:100%;height:96px;margin:0}
body.partgrid .prow2 .pn{grid-area:name;font-size:13px;white-space:normal;overflow-wrap:anywhere}
body.partgrid .prow2 .badge{grid-area:badge;justify-self:start}
body.partgrid .prow2 [data-pdlbox]{grid-area:dl;display:block}body.partgrid .prow2 .pdl{width:100%;justify-content:center}
/* an assembled shape: its own row, a picture of the whole shape, then its hub parts below */
body.partgrid .prow2.shaperow,.prow2.shaperow{grid-column:1/-1;grid-template-columns:120px minmax(0,1fr);grid-template-areas:"pic text";align-items:center;gap:8px 16px;background:var(--card);border:2px solid var(--line);padding:8px 10px;margin:6px 0 2px}
.shaperow .shsvg{grid-area:pic;width:120px;height:90px;display:block}
.shaperow .shtext{grid-area:text;display:flex;flex-direction:column;gap:2px;min-width:0}
.shaperow .shtext b{font-family:var(--fh);font-weight:800;font-size:22px;letter-spacing:.02em;text-transform:uppercase}
.shaperow .shtext .small{color:var(--muted)}
.shaperow.cur{outline:2px solid var(--line)}

.secttl{margin:18px 0 8px}

/* 2.19: library snapshots, a plan sketch of each track fitted to the track itself */
.tcard{position:relative}
.tcard .tsketch{float:right;margin:0 0 8px 14px;width:220px;max-width:40%;border:2px solid var(--line2);background:var(--view);box-shadow:3px 3px 0 var(--shadow);display:block}
.tcard .tsketch img{display:block;width:100%;height:auto}
.tcard .btnrow{clear:both}
.tbig .tsketch{float:none;display:block;width:100%;max-width:520px;margin:10px 0;border:2px solid var(--line2);background:var(--view);box-shadow:3px 3px 0 var(--shadow)}.tbig .tsketch img{display:block;width:100%;height:auto}
@media (max-width:700px){.tcard .tsketch{float:none;width:100%;max-width:none;margin:0 0 10px}}

/* 2.20: room names and trophies */
.chip.brand{border-color:var(--pink);color:var(--ink)}
.chip.trophy{border-color:#C9A227}
.fitpic{padding-top:56px}.fitpic img{max-height:62%}
.picknm{display:block;width:100%;padding:5px 10px;font-family:var(--fm);font-size:12px;color:var(--ink);background:var(--bg);border-top:1px dashed var(--line2);text-decoration:none}.picknm b{color:var(--pink)}.picknm:hover{text-decoration:underline}
