/* Structured cabling pages (/services/structured-cabling/<page>/, 16 pages: the residential and
   commercial guides and 14 property-type pages). Loaded only by those pages (main.cam.sc), with
   cab-props.js. Everything is scoped under main.cam so nothing reaches the shared header, footer or
   mobile call bar.
   1. The cabling overview's page CSS, unchanged (its violet .cam.sc layer included).
   2. State copies (.msv / .ms-off) and the mono fallback face (as cam-areas.css).
   3. The pages' own rules; where a mockup rule differs from the overview's, the mockup's comes after
      it. Animations use only transform, opacity and stroke-dashoffset; page code prefixes:
      .cr- .cb- (guides), .sa- .sc- .sb- .sf- .st- .sp- .so- .sm- .sl- .sr- .ss- .sw- .sh- .sd-. */

/* ---- 1. access control overview ---- */
/* Camera pages, shared rules. Everything is scoped under main.cam so nothing
   reaches the shared header, footer or mobile call bar. Animations use only
   transform, opacity, stroke-dashoffset and offset-distance. */
main.cam{display:block;background:#060910;color:#e8edf5;font-family:var(--sans)}
.cam a{color:#4d9eff}.cam a:hover{color:#8bbcff}
.cam .wrap{max-width:1200px;margin:0 auto;padding:0 24px}
.cam .m{font-family:var(--mono)}
.cam .sec{position:relative;padding:112px 0;overflow:hidden}
.cam .cam-hero{padding:calc(var(--nav-h) + 16px) 0 104px}
.cam .alt{background:#070b14;border-top:1px solid rgba(120,170,255,.12);border-bottom:1px solid rgba(120,170,255,.12)}
.cam .grid-bg{position:absolute;inset:0;pointer-events:none;background-image:linear-gradient(rgba(77,158,255,.07) 1px,transparent 1px),linear-gradient(90deg,rgba(77,158,255,.07) 1px,transparent 1px),linear-gradient(rgba(77,158,255,.032) 1px,transparent 1px),linear-gradient(90deg,rgba(77,158,255,.032) 1px,transparent 1px);background-size:80px 80px,80px 80px,16px 16px,16px 16px;-webkit-mask-image:radial-gradient(80% 70% at 50% 40%,#000 25%,transparent 85%);mask-image:radial-gradient(80% 70% at 50% 40%,#000 25%,transparent 85%)}
.cam .crumb{font-family:var(--mono);font-size:12px;line-height:19.2px;letter-spacing:.08em;color:#7d92b3;margin-bottom:22px;padding-top:4px}
.cam .crumb a{color:#8a95a8;padding:14px 6px;margin:0 -6px}.cam .crumb a:hover{color:#e8edf5}
.cam .kick{display:flex;align-items:center;flex-wrap:wrap;gap:12px;font-family:var(--mono);font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:#7d92b3}
.cam .cnt{border:1px solid rgba(120,170,255,.35);padding:2px 7px;color:#e8edf5}
.cam h1{margin:0;font-weight:900;letter-spacing:-.045em;line-height:.98;color:#e8edf5}
.cam .h2{margin:0;font-size:clamp(34px,4.6vw,56px);font-weight:800;letter-spacing:-.035em;line-height:1.02;color:#e8edf5}
.cam .cam-lead{margin:0;font-size:17px;line-height:1.65;color:#a3adbd}
.cam .c{position:relative;display:flex;flex-direction:column;gap:10px;padding:26px;background:rgba(9,14,24,.82);border:1px solid rgba(120,170,255,.14);border-radius:4px;color:#e8edf5;overflow:hidden;transition:transform .3s}
.cam .c::before,.cam .c::after{content:"";position:absolute;width:12px;height:12px;border-color:#4d9eff;border-style:solid;opacity:.55;pointer-events:none}
.cam .c::before{top:-1px;left:-1px;border-width:2px 0 0 2px}
.cam .c::after{bottom:-1px;right:-1px;border-width:0 2px 2px 0}
.cam a.c:hover,.cam .c.hv:hover{border-color:rgba(77,158,255,.6);background:rgba(12,20,36,.92);transform:translateY(-3px);color:#e8edf5}
.cam a.c:hover::before,.cam a.c:hover::after,.cam .c.hv:hover::before,.cam .c.hv:hover::after{width:28px;height:28px;opacity:1}
.cam .n{font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;color:#7d92b3;text-transform:uppercase}
.cam .t{margin:0;font-size:21px;font-weight:700;letter-spacing:-.015em;color:#e8edf5;line-height:1.25}
.cam .p{margin:0;font-size:15px;line-height:1.6;color:#a3adbd}
.cam .go{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#4d9eff}
.cam a.go{display:inline-flex;align-items:center;min-height:44px}
.cam .p a{text-decoration:underline;text-underline-offset:2px}
.cam .cam-btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;min-height:52px;padding:0 22px;border-radius:6px;font-weight:700;font-size:15px;line-height:1.2;transition:transform .2s}
.cam .cam-btn-p{background:#0060df;color:#fff;box-shadow:0 10px 30px -10px rgba(29,123,255,.7)}
.cam .cam-btn-p:hover{background:#1d7bff;color:#fff;transform:translateY(-2px)}
.cam .cam-btn-g{border:1px solid rgba(120,170,255,.3);color:#e8edf5;background:rgba(9,14,24,.6)}
.cam .cam-btn-g:hover{color:#fff;border-color:#4d9eff}
.cam .pill{display:inline-flex;align-items:center;gap:8px;min-height:32px;padding:0 12px;border:1px solid rgba(120,170,255,.22);border-radius:999px;font-size:13px;font-weight:600;color:#c9d2e0;background:rgba(5,8,16,.5)}
.cam .pill i{width:6px;height:6px;border-radius:50%;background:#22c55e}
.cam .ill{stroke:#4d9eff;fill:none;stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}
.cam .dim{stroke:rgba(120,170,255,.35)}
.cam .lbl{font:600 10px var(--mono);fill:#8bbcff;letter-spacing:.08em}
.cam .lbl2{font:500 9.5px var(--mono);fill:#7d92b3;letter-spacing:.1em}
.cam .tog{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 16px;border:1px solid rgba(120,170,255,.25);border-radius:5px;background:rgba(5,8,16,.6);color:#a9bddc;font:600 12px var(--mono);letter-spacing:.1em;text-transform:uppercase;cursor:pointer}
.cam .tog:hover{border-color:#4d9eff;color:#fff}
.cam .tog.on{border-color:#4d9eff;background:rgba(29,123,255,.18);color:#fff}
.cam .tog.bad.on{border-color:#ff6b6b;background:rgba(255,107,107,.12);color:#ffb4b4}
.cam ul.lst{list-style:disc;margin:0;padding-left:18px;display:flex;flex-direction:column;gap:8px}
.cam [hidden]{display:none!important}

@keyframes cam-flow{to{stroke-dashoffset:-48}}
.cam .flow{stroke-dasharray:6 6;animation:cam-flow 1.6s linear infinite}
.cam .flow-r{stroke-dasharray:3 9;animation:cam-flow 1.6s linear infinite reverse}
@keyframes cam-blink{0%,100%{opacity:1}50%{opacity:.15}}
.cam .blink{animation:cam-blink 1.1s step-end infinite}

.cam details.rfi{border-top:1px solid rgba(120,170,255,.14)}
.cam details.rfi summary{list-style:none;display:grid;grid-template-columns:90px minmax(0,1fr) 28px;align-items:center;gap:16px;min-height:76px;cursor:pointer;color:#e8edf5;font-size:19px;font-weight:700;letter-spacing:-.01em;line-height:1.3;padding:8px 0}
.cam details.rfi summary::-webkit-details-marker{display:none}
.cam details.rfi .pl{width:28px;height:28px;border:1px solid rgba(120,170,255,.35);border-radius:4px;display:grid;place-items:center;color:#4d9eff;transition:transform .3s}
.cam details.rfi[open] .pl{transform:rotate(45deg)}
.cam .ans{margin:0 0 26px 106px;max-width:680px;font-size:15.5px}

/* Off-screen sections pause; reduced motion stops everything. */
.cam .paused,.cam .paused *{animation-play-state:paused!important}
@media (prefers-reduced-motion: reduce){
  .cam *,.cam *::before,.cam *::after{animation:none!important;transition:none!important}
}
@media (max-width:700px){
  .cam details.rfi summary{grid-template-columns:minmax(0,1fr) 28px;font-size:17px}
  .cam details.rfi summary .m{display:none}
  .cam .ans{margin-left:0}
  .cam .sec{padding:76px 0}
  .cam .cam-hero{padding:calc(var(--nav-h) + 16px) 0 72px}
}
/* Structured cabling page: violet accent (#a78bfa) next to the site blue. Scoped to main.cam.sc.
   Colour changes are instant or opacity layers; animations use transform, opacity and stroke-dashoffset. */
/* First paint uses a fallback font (Inter arrives with the async main.css). A fallback scaled
   to Inter's metrics keeps the hero lines and pill rows the same when Inter swaps in. */
@font-face{font-family:'Inter sc-fallback';src:local('Arial'),local('ArialMT'),local('Liberation Sans'),local('LiberationSans'),local('Helvetica');ascent-override:90.2%;descent-override:22.48%;line-gap-override:0%;size-adjust:107.4%}
@font-face{font-family:'Inter sc-fallback-h1';src:local('Arial'),local('ArialMT'),local('Liberation Sans'),local('LiberationSans'),local('Helvetica');ascent-override:90.2%;descent-override:22.48%;line-gap-override:0%;size-adjust:114.2%}
main.cam.sc{font-family:'Inter','Inter sc-fallback',system-ui,-apple-system,sans-serif}
.cam.sc h1{font-family:'Inter','Inter sc-fallback-h1',system-ui,-apple-system,sans-serif}
.cam.sc .c::before,.cam.sc .c::after{border-color:#a78bfa;opacity:.65}
.cam.sc a.c:hover,.cam.sc .c.hv:hover{border-color:rgba(167,139,250,.55)}
.cam.sc .vi{stroke:#a78bfa}
.cam.sc .tog{padding:0 14px;letter-spacing:.08em}
.cam.sc .tog:hover{border-color:#a78bfa;color:#fff}
.cam.sc .tog.on{border-color:#a78bfa;background:rgba(167,139,250,.16);color:#fff}
.cam.sc .tog.bad.on{border-color:#ff6b6b;background:rgba(255,107,107,.12);color:#ffb4b4}
.cam.sc details.rfi summary{grid-template-columns:minmax(0,1fr) 28px}
.cam.sc details.rfi .pl{color:#a78bfa}
.cam.sc .ans{margin:0 0 26px;max-width:720px}
@keyframes sc-ledp{0%,100%{opacity:.35}50%{opacity:1}}
.cam .ledp{animation:sc-ledp 1.4s ease-in-out infinite}

/* hero: jack tracer. The selected run, jack and port are opacity layers over the base drawing. */
.cam .tr .run{fill:none;stroke:rgba(167,139,250,.28);stroke-width:1.3}
.cam .tr .run-s,.cam .tr .run-r{fill:none;stroke-width:2.6;opacity:0;transition:opacity .3s}
.cam .tr .run-s{stroke:#c4b5fd}.cam .tr .run-r{stroke:#ff8a8a}
.cam .tr .runf{fill:none;stroke:#fff;stroke-width:2.6;stroke-dasharray:6 10;opacity:0}
.cam .tr .run-s.sel,.cam .tr .runf.sel{opacity:1}
.cam .tr .runf.sel{animation:cam-flow 1.2s linear infinite}
.cam .tr.messy .run-s.sel,.cam .tr.messy .runf.sel{opacity:0}
.cam .tr.messy .run-r.sel{opacity:1}
.cam .tr .jg{cursor:pointer}
.cam .tr text{pointer-events:none}
.cam .tr .jk{fill:#0b1324;stroke:#a78bfa;stroke-width:1.5}
.cam .tr .jk-s{fill:#a78bfa;stroke:#fff;stroke-width:1.5;opacity:0;transition:opacity .25s}
.cam .tr .jk-s.sel{opacity:1}
.cam .tr .port{fill:#1b2440}.cam .tr .port.used{fill:#3b3170}
.cam .tr .port-s{fill:#c4b5fd;opacity:0;transition:opacity .25s}
.cam .tr .port-s.sel{opacity:1}.cam .tr.messy .port-s.sel{opacity:0}
.cam .tr .lab{font:700 9px var(--mono);fill:#c4b5fd;opacity:1;transition:opacity .3s}
.cam .tr .q{font:700 10px var(--mono);fill:#ff8a8a;opacity:0;transition:opacity .3s}
.cam .tr.messy .lab{opacity:0}.cam .tr.messy .q{opacity:1}
.cam .tr .neat{opacity:1;transition:opacity .4s}.cam .tr .mess{opacity:0;transition:opacity .4s}
.cam .tr.messy .neat{opacity:0}.cam .tr.messy .mess{opacity:1}
.cam .jchip{display:inline-flex;align-items:center;gap:6px;min-height:44px;padding:0 10px;border:1px solid rgba(120,170,255,.2);border-radius:4px;background:transparent;color:#a9bddc;font:600 12px var(--mono);cursor:pointer}
.cam .jchip:hover{border-color:#a78bfa;color:#fff}
.cam .jchip.on{border-color:#a78bfa;color:#fff;background:rgba(167,139,250,.14)}
.cam .kv{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(140px,100%),1fr));gap:10px 18px}
.cam .kv .k{font:600 10px var(--mono);letter-spacing:.14em;text-transform:uppercase;color:#7d92b3}
.cam .kv .v{font-size:15px;font-weight:600;line-height:1.35;color:#e8edf5;margin-top:3px}

/* included drawings */
@keyframes sc-lab{0%,20%{opacity:0;transform:translateY(-4px)}35%,90%{opacity:1;transform:none}100%{opacity:0}}
.cam .labin{animation:sc-lab 3.4s ease infinite}
@keyframes sc-drawl{0%{stroke-dashoffset:300}55%,100%{stroke-dashoffset:0}}
.cam .drawl{stroke-dasharray:300;animation:sc-drawl 3.6s ease-in-out infinite}

/* cable picker */
.cam .lenv{font-size:30px;font-weight:800;letter-spacing:-.02em;color:#e8edf5}
.cam .rng{width:100%;height:44px;margin:0;accent-color:#a78bfa;cursor:pointer}
.cam .bar{transform-box:view-box;transform-origin:0 0;transition:transform .3s}
.cam .axis{position:relative;height:34px;margin-top:-18px;font-size:11px;color:#7d92b3}
.cam .axis span{position:absolute;top:0}
.cam .axis .mid{transform:translateX(-50%);color:#f5c46b;text-align:center}
.cam .cbl{display:flex;flex-direction:column;gap:8px;padding:20px;border-radius:5px;border:1px solid rgba(120,170,255,.16);background:#070b14}
.cam .cbl .cn{font-size:20px;font-weight:800}
.cam .cbl.ok{border-color:rgba(74,222,128,.45);background:rgba(74,222,128,.05)}
.cam .cbl.no{border-color:rgba(255,107,107,.35);background:rgba(255,107,107,.04);opacity:.85}
.cam .cbl.best{box-shadow:0 0 0 2px #a78bfa}
.cam .cbl .st{font:700 12px var(--mono);letter-spacing:.1em;text-transform:uppercase}
.cam .cbl.ok .st{color:#8bf0b0}.cam .cbl.no .st{color:#ff8a8a}
.cam .rate{display:inline-flex;align-items:center;min-height:30px;padding:0 12px;border-radius:4px;background:#a78bfa;color:#0b0716;font:700 12px var(--mono);letter-spacing:.06em}
.cam .row2{display:grid;grid-template-columns:130px minmax(0,1fr);gap:14px;padding:10px 0;border-top:1px dashed rgba(120,170,255,.16)}
.cam .row2 .rk{font:600 10.5px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:#7d92b3;padding-top:3px}
.cam .row2 .rv{font-size:15px;line-height:1.55;color:#dfe6f2}
.cam .rec{display:flex;gap:14px;align-items:baseline;padding-top:16px;border-top:1px dashed rgba(120,170,255,.2)}
.cam .cab{gap:22px;padding:30px;border-color:rgba(167,139,250,.35)}
.cam .xsbox{display:flex;flex-wrap:wrap;gap:24px 40px;align-items:center;padding:24px;border:1px solid rgba(120,170,255,.14);border-radius:6px;background:#070b14}
/* cross-section: jacket colours are three opacity layers */
.cam .xs .cu,.cam .xs .fbg{transform-box:view-box;transform-origin:130px 130px;transition:transform .5s cubic-bezier(.3,.7,.3,1),opacity .4s}
.cam .xs .fbg{opacity:0;transform:scale(.6)}
.cam .xs.fb .fbg{opacity:1;transform:none}
.cam .xs.fb .cu{opacity:0;transform:scale(.6)}
.cam .xs.c-5e .cu{transform:scale(.9)}
.cam .xs.c-6a .cu{transform:scale(1.04)}
.cam .xs .jkt{stroke-width:2;opacity:0;transition:opacity .4s}
.cam .xs .jk-in{fill:rgba(77,158,255,.25);stroke:#4d9eff}
.cam .xs .jk-pl{fill:rgba(226,232,240,.22);stroke:#e2e8f0}
.cam .xs .jk-out{fill:#111318;stroke:#94a3b8}
.cam .xs.j-in .jk-in,.cam .xs.j-pl .jk-pl,.cam .xs.j-out .jk-out{opacity:1}
.cam .xs .shield,.cam .xs .gelg{opacity:0;transition:opacity .4s}
.cam .xs.sh .shield,.cam .xs.gel .gelg{opacity:1}
.cam .xs .spline{transition:opacity .3s}
.cam .xs.c-5e .spline{opacity:0}
.cam .xs .pairs{transform-box:view-box;transform-origin:130px 130px;animation:sc-spin 26s linear infinite}
@keyframes sc-spin{to{transform:rotate(360deg)}}

/* messy vs clean, property tiles, repair chips */
.cam .pf{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:16px}
.cam .c.bad{background:rgba(255,107,107,.04);border-color:rgba(255,107,107,.22)}
.cam .c.good{background:rgba(74,222,128,.04);border-color:rgba(74,222,128,.25)}
.cam .chk{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:12px}
.cam .chk li{display:grid;grid-template-columns:22px minmax(0,1fr);gap:10px;font-size:15px;line-height:1.5;color:#dfe6f2}
.cam .mk{width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font:700 11px var(--sans);margin-top:1px}
.cam .pt{display:flex;flex-direction:column;gap:8px;min-height:180px}
.cam .pt svg{width:100%;height:64px}
.cam .bchip{display:inline-flex;align-items:center;gap:10px;min-height:46px;padding:0 16px;border:1px solid rgba(120,170,255,.2);border-radius:5px;background:rgba(5,8,16,.6);color:#e8edf5;font-weight:600;font-size:15px}
.cam .bchip:hover{border-color:#a78bfa;color:#fff}
.cam .bchip i{width:7px;height:7px;border-radius:50%;background:#a78bfa}
@media (max-width:760px){
  .cam .pf{grid-template-columns:minmax(0,1fr)}
  .cam .row2{grid-template-columns:minmax(0,1fr);gap:4px}
  .cam .cab{padding:22px 16px}
  .cam .xsbox{padding:18px 14px}
  .cam .rec{flex-direction:column;gap:6px}
  .cam .axis{height:48px;font-size:10px}
  .cam .axis .mid{width:76px}
  .cam.sc details.rfi summary{font-size:17px}
}

/* ---- 2. state copies (cam-props.js) ---- */
.cam .ms-off{opacity:0!important}
.cam .msv{transition:opacity .35s}
/* mono labels keep their height when the web font arrives: the local fallback carries
   JetBrains Mono's vertical metrics (as cam-areas.css) */
@font-face{font-family:'JetBrains Mono Fallback';src:local('Menlo'),local('Consolas'),local('DejaVu Sans Mono'),local('Noto Mono'),local('Liberation Mono'),local('Courier New');ascent-override:102%;descent-override:30%;line-gap-override:0%}
main.cam{--mono:'JetBrains Mono','JetBrains Mono Fallback','Fira Code',monospace}

/* ---- 3. the pages' own rules ---- */
.cam .m{font-family:var(--mono)}
.cam .kick{display:flex;align-items:center;flex-wrap:wrap;gap:12px;font-family:var(--mono);font-size:11.5px;letter-spacing:.18em;text-transform:uppercase;color:#7d92b3}
.cam .h2{margin:0;font-size:clamp(34px,4.6vw,56px);font-weight:800;letter-spacing:-.035em;line-height:1.02}
.cam .c{position:relative;display:flex;flex-direction:column;gap:10px;padding:26px;background:rgba(9,14,24,.82);border:1px solid rgba(120,170,255,.14);border-radius:4px;color:#e8edf5;overflow:hidden;transition:transform .3s}
.cam .c::before,.cam .c::after{content:"";position:absolute;width:12px;height:12px;border-color:#a78bfa;border-style:solid;opacity:.6;pointer-events:none}
.cam a.c:hover,.cam .c.hv:hover{border-color:rgba(167,139,250,.55);background:rgba(12,20,36,.92);transform:translateY(-3px);color:#e8edf5}
.cam .n{font-family:var(--mono);font-size:10.5px;letter-spacing:.18em;color:#7d92b3;text-transform:uppercase}
.cam .t{margin:0;font-size:21px;font-weight:700;letter-spacing:-.015em;color:#e8edf5}
.cam .go{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:#4d9eff}
.cam .tl-c{stroke:#a78bfa}
.cam .lbl{font:600 10px var(--mono);fill:#8bbcff;letter-spacing:.08em}
.cam .lbl2{font:500 9.5px var(--mono);fill:#7d92b3;letter-spacing:.1em}
.cam .tog{display:inline-flex;align-items:center;gap:8px;min-height:44px;padding:0 14px;border:1px solid rgba(120,170,255,.25);border-radius:5px;background:rgba(5,8,16,.6);color:#a9bddc;font:600 12px var(--mono);letter-spacing:.08em;text-transform:uppercase;cursor:pointer}
.cam .tog:hover{border-color:#a78bfa;color:#fff}
.cam .tog.on{border-color:#a78bfa;background:rgba(167,139,250,.14);color:#fff}
.cam .flow{stroke-dasharray:6 6;animation:cam-flow 1.6s linear infinite}
.cam .blink{animation:cam-blink 1.1s step-end infinite}
.cam .chip{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 12px;border:1px solid rgba(120,170,255,.2);border-radius:4px;background:transparent;color:#a9bddc;font:600 12.5px var(--sans);cursor:pointer}
.cam .chip:hover{border-color:#a78bfa;color:#fff}
.cam .chip.on{border-color:#a78bfa;color:#fff;background:rgba(167,139,250,.1)}
.cam .chip b{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;background:rgba(167,139,250,.18);color:#c4b5fd;font:700 10px var(--mono)}
@keyframes cab-cellon{0%,10%{opacity:.15}20%,100%{opacity:1}}
.cam .cell{animation:cab-cellon 4s infinite}
@keyframes cab-dswing{0%,20%{transform:scaleX(1)}35%,75%{transform:scaleX(.3)}90%,100%{transform:scaleX(1)}}
.cam .dswing{transform-box:fill-box;transform-origin:left center;animation:cab-dswing 4s ease-in-out infinite}
@keyframes cab-dash{to{stroke-dashoffset:-30}}
.cam .march{stroke-dasharray:4 4;animation:cab-dash 1.5s linear infinite}
.cam .row{display:grid;grid-template-columns:150px minmax(0,1fr);gap:16px;padding:12px 0;border-top:1px dashed rgba(120,170,255,.16)}
.cam .row .rk{font:600 11px var(--mono);letter-spacing:.12em;text-transform:uppercase;color:#7d92b3;padding-top:3px}
.cam .row .rv{font-size:15.5px;line-height:1.55;color:#dfe6f2}
.cam .pf{display:grid;grid-template-columns:minmax(0,1fr) 64px minmax(0,1fr);align-items:stretch}
.cam .pf .ar{display:flex;align-items:center;justify-content:center}
.cam .bad{background:rgba(255,107,107,.04);border-color:rgba(255,107,107,.22)}
.cam .good{background:rgba(74,222,128,.04);border-color:rgba(74,222,128,.25)}
.cam .mk{width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font:700 12px var(--sans);flex:none}
.cam .pt{display:flex;flex-direction:column;gap:8px;min-height:186px}
.cam .pt svg{width:100%;height:66px}
.cam details.rfi summary{list-style:none;display:grid;grid-template-columns:minmax(0,1fr) 28px;align-items:center;gap:16px;min-height:76px;cursor:pointer;color:#e8edf5;font-size:19px;font-weight:700;letter-spacing:-.01em}
.cam details.rfi .pl{width:28px;height:28px;border:1px solid rgba(120,170,255,.35);border-radius:4px;display:grid;place-items:center;color:#a78bfa;transition:transform .3s}
.cam .ans{margin:0 0 26px;max-width:720px;font-size:15.5px}
@media (max-width:760px){.cam .pf .ar{height:36px;transform:rotate(90deg)}}
@media (max-width:760px){.cam .row{grid-template-columns:minmax(0,1fr);gap:4px}}
@media (max-width:760px){.cam details.rfi summary{font-size:17px}}
@media (max-width:760px){.cam .sec{padding:76px 0}}
.cam .stage{transition:opacity .45s}
.cam .stage.off{opacity:0}
.cam .sw .vk,.cam .sw .vf{display:none}
.cam .sw.s-k .vk,.cam .sw.s-f .vf{display:inline}
.cam .cmp{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:12px;padding:9px 0;border-top:1px dashed rgba(120,170,255,.14);font-size:14px;color:#a9bddc}
.cam .cmp:first-child{border-top:0}
.cam .cmp b{font:600 12.5px var(--mono);letter-spacing:.04em;color:#e8edf5;text-align:right}
.cam .sw.s-k .cmp b{color:#ff9b9b}
.cam .sw.s-f .cmp b{color:#c4b5fd}
@keyframes cab-ringk{0%{transform:scale(.6);opacity:.9}100%{transform:scale(1.9);opacity:0}}
.cam .rk2{transform-box:fill-box;transform-origin:center;animation:cab-ringk 1.4s ease-out infinite}
.cam .sw2{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:middle}
.cam .step{display:flex;flex-direction:column;gap:10px;padding:24px;border-top:2px solid rgba(167,139,250,.5);background:rgba(9,14,24,.6)}
.cam .step .sn{font:700 13px var(--mono);letter-spacing:.14em;color:#a78bfa}
.cam .drow{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;padding:12px 0;border-top:1px dashed rgba(120,170,255,.16)}
.cam .drow:first-child{border-top:0}
.cam .drow .dn{font-size:15px;font-weight:600;color:#e8edf5}
.cam .drow .dn small{display:block;font:500 11px var(--mono);letter-spacing:.06em;color:#7d92b3;margin-top:3px}
.cam .st{display:inline-flex;align-items:center;gap:8px;min-height:28px;padding:0 10px;border-radius:3px;font:700 11px var(--mono);letter-spacing:.1em;text-transform:uppercase;white-space:nowrap}
.cam .st.st-u{background:rgba(167,139,250,.16);color:#c4b5fd;border:1px solid rgba(167,139,250,.5)}
.cam .st.st-l{background:rgba(255,107,107,.12);color:#ff9b9b;border:1px solid rgba(255,107,107,.45)}
@media (max-width:760px){.cam .cmp{grid-template-columns:minmax(0,1fr)}}
@media (max-width:760px){.cam .cmp b{text-align:left}}
.cam .sched{border:1px solid rgba(120,170,255,.16);border-radius:4px;background:rgba(5,8,16,.55);display:grid;grid-template-columns:repeat(auto-fit,minmax(min(460px,100%),1fr))}
.cam .shead{grid-column:1/-1;display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:12px 20px;border-bottom:1px solid rgba(120,170,255,.16);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;color:#7d92b3}
.cam .srow{display:grid;grid-template-columns:58px minmax(0,1fr);gap:16px;padding:22px 20px;border-bottom:1px solid rgba(120,170,255,.1)}
.cam .srow:hover{background:rgba(29,123,255,.05)}
.cam .sno{font-size:11px;letter-spacing:.12em;color:#4d9eff;padding-top:4px}
.cam .stag{display:inline-flex;align-items:center;min-height:24px;padding:0 9px;border:1px solid rgba(120,170,255,.28);border-radius:3px;font:600 10.5px var(--mono);letter-spacing:.1em;text-transform:uppercase;color:#8bbcff}
.cam .tc{display:flex;flex-direction:column;gap:6px;padding:14px 16px;border:1px solid rgba(120,170,255,.14);border-radius:4px;background:rgba(9,14,24,.7);color:#e8edf5;min-height:120px;transition:transform .25s}
.cam .tc svg{width:100%;height:44px}
.cam .tc .tt2{font-size:15px;font-weight:700;letter-spacing:-.01em;color:#e8edf5}
.cam .tc .go{margin-top:auto;font-size:10.5px}
.cam a.tc:hover{border-color:rgba(77,158,255,.6);background:rgba(12,20,36,.92);transform:translateY(-2px)}
.cam .tc.here{border-style:dashed;border-color:rgba(74,222,128,.4);background:rgba(74,222,128,.04)}
.cam .big{font:800 44px/1 var(--sans);letter-spacing:-.03em}
@media (max-width:560px){.cam .srow{grid-template-columns:1fr;gap:8px}}
@keyframes cab-truck{0%,10%{transform:translateX(90px)}55%,100%{transform:translateX(0)}}
.cam .truck{animation:cab-truck 6s ease-in-out infinite alternate}
@keyframes cab-steam{0%{transform:translateY(0);opacity:0}30%{opacity:.7}100%{transform:translateY(-18px);opacity:0}}
.cam .steam{animation:cab-steam 2.4s ease-out infinite}
.cam .nite{fill:rgba(2,4,8,0);pointer-events:none}
.cam .nite.on{fill:rgba(2,4,8,.85)}
.cam a.tc:hover{border-color:rgba(167,139,250,.6)}
.cam .tc.here{border-color:rgba(167,139,250,.45);background:rgba(167,139,250,.05)}
.cam .sno{color:#a78bfa}
.cam .stag{border-color:rgba(167,139,250,.35);color:#c4b5fd}
.cam .srow:hover{background:rgba(167,139,250,.05)}
.cam .rv{gap:16px}
.cam .sa-dw{stroke-dasharray:100 100;stroke-dashoffset:0}
.cam .sa-dw.go{animation:sa-dw 2.1s cubic-bezier(.4,.1,.3,1) both}
@keyframes sa-dw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
.cam .sa-fs.go{transform-box:fill-box;transform-origin:center;animation:sa-pop .45s cubic-bezier(.3,1.6,.5,1) both}
.cam .sa-pop{transform-box:fill-box;transform-origin:center;animation:sa-pop2 4s ease-in-out infinite}
@keyframes sa-pop{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}
@keyframes sa-pop2{0%{transform:scale(.6);opacity:0}12%,85%{transform:scale(1);opacity:1}100%{opacity:0}}
.cam .sa-br{transition:opacity .4s}
.cam .sa-br.go{animation:sa-fade 2.4s ease-in both}
@keyframes sa-fade{0%,70%{opacity:0}100%{opacity:1}}
.cam .sa-fill{transform-box:fill-box;transform-origin:center bottom}
.cam .sa-fill.go{animation:sa-fill 1.4s .9s ease-out both}
@keyframes sa-fill{from{transform:scaleY(0)}to{transform:scaleY(1)}}
.cam .sa-lt{stroke-dasharray:3 27;animation:sa-lt 1.1s linear infinite}
@keyframes sa-lt{to{stroke-dashoffset:-30}}
.cam .sa-lt2{stroke-dasharray:10 40;animation:sa-lt2 1.3s linear infinite}
@keyframes sa-lt2{to{stroke-dashoffset:-50}}
.cam .sa-pk{stroke-dasharray:2 34;animation:sa-pk 1.8s linear infinite}
@keyframes sa-pk{to{stroke-dashoffset:-36}}
.cam .sa-cord.go{animation:sa-cord .5s cubic-bezier(.3,1.4,.5,1) both}
@keyframes sa-cord{from{transform:translateY(-26px);opacity:0}to{transform:none;opacity:1}}
.cam .sa-wf{transform-box:fill-box;transform-origin:center;animation:sa-wf 1.6s ease-out infinite}
@keyframes sa-wf{from{transform:scale(.4);opacity:.9}to{transform:scale(2);opacity:0}}
.cam .sa-ok{animation:sa-ok 4.5s infinite both}
@keyframes sa-ok{0%{opacity:.15}12%,88%{opacity:1}100%{opacity:.15}}
.cam .sa-hk.go{animation:sa-hk .55s cubic-bezier(.3,1.5,.5,1) both}
@keyframes sa-hk{from{transform:translateY(-40px);opacity:0}to{transform:none;opacity:1}}
.cam .sa-lab.go{animation:sa-lab .6s cubic-bezier(.3,1.3,.5,1) both}
@keyframes sa-lab{from{transform:translateY(-18px);opacity:0}to{transform:none;opacity:1}}
.cam .sa-ndl{transform:rotate(0deg);transition:transform .6s}
.cam .sa-ndl.on{transform:rotate(108deg);animation:sa-ndl 2.6s ease-out}
@keyframes sa-ndl{0%{transform:rotate(0deg)}45%{transform:rotate(114deg)}60%{transform:rotate(102deg)}75%{transform:rotate(111deg)}100%{transform:rotate(108deg)}}
.cam .sa-sc{overflow-x:auto;-webkit-overflow-scrolling:touch}
.cam .sa-hint{display:none;font-size:11px;color:#7d92b3}
@media (max-width:640px){.cam .sa-hint{display:block}}
@media (prefers-reduced-motion:reduce){.cam .sa-io,.cam .sa-io *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sa-io .sa-mv{opacity:0!important}}
.cam .sa-span{grid-column:span 2}
@media (max-width:760px){.cam .sa-span{grid-column:auto}}
.cam .sb-dw{stroke-dasharray:100 100;stroke-dashoffset:0}
.cam .sb-dw.go{animation:sb-dw 2s cubic-bezier(.4,.1,.3,1) both}
@keyframes sb-dw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
.cam .sb-dw2{stroke-dasharray:100 100;animation:sb-dw2 4s ease-in-out infinite}
@keyframes sb-dw2{0%{stroke-dashoffset:100}55%,100%{stroke-dashoffset:0}}
.cam .sb-pk{stroke-dasharray:2 30;animation:sb-pk 1.7s linear infinite}
@keyframes sb-pk{to{stroke-dashoffset:-32}}
.cam .sb-seal.go{transform-box:fill-box;transform-origin:center;animation:sb-seal .5s cubic-bezier(.3,1.6,.5,1) both}
@keyframes sb-seal{from{transform:scale(0);opacity:0}to{transform:scale(1);opacity:1}}
.cam .sb-hit{opacity:0}
.cam .sb-hit.go{transform-box:fill-box;transform-origin:center;animation:sb-hit .7s ease-out both}
@keyframes sb-hit{0%{transform:scale(.4);opacity:1}100%{transform:scale(2);opacity:0}}
.cam .sb-spin{transform-box:fill-box;transform-origin:center;animation:sb-spin .5s linear infinite}
@keyframes sb-spin{0%{transform:scaleX(1)}50%{transform:scaleX(-1)}100%{transform:scaleX(1)}}
.cam .sb-wf{transform-box:fill-box;transform-origin:center;animation:sb-wf 2.1s ease-out infinite}
@keyframes sb-wf{from{transform:scale(.4);opacity:.9}to{transform:scale(3.4);opacity:0}}
.cam .sb-row.go{animation:sb-row .45s ease-out both}
@keyframes sb-row{from{opacity:0;transform:translateX(-10px)}to{opacity:1;transform:none}}
.cam .sb-bar{transform-box:fill-box;transform-origin:left center}
.cam .sb-bar.go{animation:sb-bar 1.4s .9s cubic-bezier(.3,.8,.3,1) both}
@keyframes sb-bar{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.cam .sb-drl{animation:sb-drl 2.6s ease-in-out infinite alternate}
@keyframes sb-drl{0%,15%{transform:translateX(24px)}85%,100%{transform:translateX(0)}}
.cam .sb-rod{animation:sb-rod 3s ease-in-out infinite}
@keyframes sb-rod{0%{transform:translateY(64px);opacity:0}15%{opacity:1}80%,100%{transform:translateY(0);opacity:1}}
.cam .sb-tagx{animation:sb-tagx 4.5s ease-in-out infinite both}
@keyframes sb-tagx{0%{opacity:0;transform:translateY(-6px)}12%,85%{opacity:1;transform:none}100%{opacity:0}}
.cam .sb-tag{align-self:flex-start;margin-top:6px;display:inline-flex;align-items:center;min-height:24px;padding:0 9px;border-radius:3px;font:700 11px var(--mono);letter-spacing:.1em}
.cam .sb-p{background:rgba(74,222,128,.12);color:#8bf0b0;border:1px solid rgba(74,222,128,.4)}
.cam .sb-w{background:rgba(245,196,107,.12);color:#f5c46b;border:1px solid rgba(245,196,107,.45)}
.cam .sb-span{grid-column:span 2}
.cam .sb-bb.go{animation:sb-bb 2.6s ease-in-out both}
@keyframes sb-bb{0%{transform:none;opacity:1}20%,62%{transform:translate(-18px,6px);opacity:.55}85%,100%{transform:none;opacity:1}}
.cam .sb-sc{overflow-x:auto;-webkit-overflow-scrolling:touch}
.cam .sb-hint{display:none;font-size:11px;color:#7d92b3}
@media (max-width:760px){.cam .sb-span{grid-column:auto}}
@media (max-width:640px){.cam .sb-hint{display:block}}
@media (prefers-reduced-motion:reduce){.cam .sb-io,.cam .sb-io *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sb-io .sb-mv{opacity:0!important}}
.cam .sc-dw{stroke-dasharray:100 100;stroke-dashoffset:0}
.cam .sc-dw.go{animation:sc-dw 1.8s cubic-bezier(.4,.1,.3,1) both}
@keyframes sc-dw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
.cam .sc-pk{stroke-dasharray:2 30;animation:sc-pk 1.6s linear infinite}
@keyframes sc-pk{to{stroke-dashoffset:-32}}
.cam .sc-pk2{stroke-dasharray:3 60;animation:sc-pk2 1.5s linear infinite}
@keyframes sc-pk2{to{stroke-dashoffset:-63}}
.cam .sc-lt{stroke-dasharray:4 24;animation:sc-pk 1.2s linear infinite}
.cam .sc-tag.go{animation:sc-tag .5s cubic-bezier(.3,1.4,.5,1) both}
@keyframes sc-tag{from{transform:translateY(-14px);opacity:0}to{transform:none;opacity:1}}
.cam .sc-pt{opacity:0;transform:translateX(-36px);transition:transform .6s cubic-bezier(.3,1.2,.5,1),opacity .4s}
.cam .sc-pt.on{opacity:1;transform:none}
.cam .sc-cord{opacity:0;transform:translateY(-22px);transition:transform .45s cubic-bezier(.3,1.4,.5,1),opacity .3s}
.cam .sc-cord.on{opacity:1;transform:none}
.cam .sc-wf{transform-box:fill-box;transform-origin:center;animation:sc-wf 1.6s ease-out infinite}
@keyframes sc-wf{from{transform:scale(.5);opacity:.9}to{transform:scale(2.6);opacity:0}}
.cam .sc-chk{transform-box:fill-box;transform-origin:center;animation:sc-chk 4.2s infinite both}
@keyframes sc-chk{0%{transform:scale(0);opacity:0}10%,85%{transform:scale(1);opacity:1}100%{opacity:0}}
.cam .sc-drill{animation:sc-drill 2.6s ease-in-out infinite alternate}
@keyframes sc-drill{0%,15%{transform:translateX(26px)}85%,100%{transform:translateX(0)}}
.cam .sc-fill{transform-box:fill-box;transform-origin:center bottom;animation:sc-fill 3.6s ease-out infinite}
@keyframes sc-fill{0%{transform:scaleY(0)}45%,100%{transform:scaleY(1)}}
.cam .sc-hand{animation:sc-hand 6s linear infinite}
@keyframes sc-hand{to{transform:rotate(360deg)}}
.cam .sc-halo{animation:sc-halo 1.2s ease-in-out infinite alternate}
@keyframes sc-halo{from{opacity:.25}to{opacity:1}}
.cam .sc-res{display:flex;flex-direction:column;gap:6px;padding:16px 18px;border-radius:5px;border:1px solid rgba(74,222,128,.45);background:rgba(74,222,128,.07);color:#8bf0b0}
.cam .sc-res.no{border-color:rgba(255,107,107,.5);background:rgba(255,107,107,.08);color:#ff9b9b}
.cam .sc-big{font:800 34px/1 var(--sans);letter-spacing:-.02em}
.cam .sc-span{grid-column:span 2}
.cam .sc-sc{overflow-x:auto;-webkit-overflow-scrolling:touch}
.cam .sc-hint{display:none;font-size:11px;color:#7d92b3}
@media (max-width:760px){.cam .sc-span{grid-column:auto}}
@media (max-width:640px){.cam .sc-hint{display:block}}
@media (prefers-reduced-motion:reduce){.cam .sc-io,.cam .sc-io *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sc-io .sc-mv{opacity:0!important}}
@keyframes sw-cell{from{transform:scale(.92);opacity:.6}to{transform:scale(1);opacity:1}}
.cam .sw-cell{transform-box:fill-box;transform-origin:center;animation:sw-cell 2.2s ease-in-out infinite alternate}
@keyframes sw-fl{0%,100%{opacity:1}50%{opacity:.25}}
.cam .sw-fl{animation:sw-fl .9s ease-in-out infinite}
.cam .sw-run{fill:none;stroke:#4d9eff;stroke-width:1.6;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:0}
@keyframes sw-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.cam .sw-pl.on .sw-run{animation:sw-draw 1.2s cubic-bezier(.4,.1,.4,1) both}
@keyframes sw-pk{from{offset-distance:0%;opacity:0}10%{opacity:1}90%{opacity:1}to{offset-distance:100%;opacity:0}}
.cam .sw-pk{fill:#e8edf5;animation:sw-pk 2.4s linear infinite}
.cam .sw-c4,.cam .sw-c6{stroke-dasharray:1;stroke-dashoffset:0}
@keyframes sw-c4{0%,10%{stroke-dashoffset:1}50%,100%{stroke-dashoffset:0}}
.cam .sw-c4{animation:sw-c4 3.2s ease-out infinite}
.cam .sw-c6{animation:sw-c4 3.6s ease-in-out infinite}
@keyframes sw-scan{from{transform:translateX(0)}to{transform:translateX(180px)}}
.cam .sw-scan{animation:sw-scan 2.6s ease-in-out infinite alternate}
.cam .sw-box{border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#04070d;overflow:hidden}
.cam .sw-fg{display:grid;grid-template-columns:minmax(0,1.55fr) minmax(0,1fr);gap:22px;align-items:start}
@media (max-width:900px){.cam .sw-fg{grid-template-columns:minmax(0,1fr)}}
.cam .sw-g{opacity:0;transition:opacity .4s}
.cam .sw-g.on{opacity:1}
.cam .sw-g.on .sw-pt{animation:sw-pt .4s ease-out both}
@keyframes sw-pt{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.cam .sw-g.on .sw-cab{animation:sw-draw 1.2s cubic-bezier(.4,.1,.4,1) both}
.cam .sw-cab{fill:none;stroke-dasharray:1;stroke-dashoffset:0}
@keyframes sw-pop{from{opacity:0;transform:scale(.4)}to{opacity:1;transform:none}}
.cam .sw-pop{transform-box:fill-box;transform-origin:center}
.cam .sw-g.on .sw-pop{animation:sw-pop .5s cubic-bezier(.3,1.4,.5,1) both}
.cam .sw-slide{transition:transform .7s cubic-bezier(.3,.7,.3,1)}
.cam .sw-g:not(.on) .sw-slide{transform:translateX(-60px)}
@keyframes sw-str{to{stroke-dashoffset:-14}}
.cam .sw-str{animation:sw-str 1.2s linear infinite}
.cam .sw-tot{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.cam .sw-tot div{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border:1px solid rgba(120,170,255,.16);border-radius:4px;background:#070b14}
.cam .sw-tot b{font:800 32px/1 var(--sans);letter-spacing:-.02em;color:#e8edf5}
.cam .sw-tot small{font:500 11px var(--mono);color:#7d92b3;letter-spacing:.04em}
.cam .sw-row{grid-template-columns:118px minmax(0,1fr);gap:12px;padding:10px 0}
.cam .sw-row .rv{font-size:14.5px}
@media (prefers-reduced-motion:reduce){.cam .sw-io *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sw-io [style*=offset-path]{opacity:0}}
.cam .sd-m,.cam .sd-v{opacity:0;transition:opacity .5s,transform .7s cubic-bezier(.3,.7,.3,1)}
.cam .sd-m{transform:translateX(-30px)}
.cam .sd-v{transform:translateY(-24px)}
.cam .sd-rb.on .sd-m,.cam .sd-rb.on .sd-v{opacity:1;transform:none}
.cam .sd-neat{opacity:0;transition:opacity .3s}
.cam .sd-rb.on .sd-neat{opacity:1}
.cam .sd-cd{fill:none;stroke-width:3;stroke-linecap:butt;stroke-dasharray:1;stroke-dashoffset:0}
@keyframes sd-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.cam .sd-rb.on .sd-cd{animation:sd-draw .5s cubic-bezier(.3,.7,.3,1) both}
.cam .sd-mess{transition:opacity .5s,transform .6s}
.cam .sd-mess.off{opacity:0;transform:translateY(26px)}
.cam .sd-mess.au{opacity:.45}
@keyframes sd-sway{from{transform:rotate(-.5deg)}to{transform:rotate(.6deg)}}
.cam .sd-sway{transform-box:view-box;transform-origin:200px 100px;animation:sd-sway 3.2s ease-in-out infinite alternate}
.cam .sd-abg{transition:opacity .5s,transform .6s}
.cam .sd-abg.off{opacity:0;transform:translateY(40px)}
.cam .sd-ab{fill:none;stroke:#5b6578;stroke-width:2.4}
.cam .sd-abg.au .sd-ab{stroke:#ff6b6b;stroke-dasharray:5 4;animation:cab-dash 1.5s linear infinite}
.cam .sd-fib{fill:none;stroke:#facc15;stroke-width:1.6}
@keyframes sd-lp{from{offset-distance:0%;opacity:0}15%{opacity:1}85%{opacity:1}to{offset-distance:100%;opacity:0}}
.cam .sd-lp{fill:#fff7c2;animation:sd-lp 1.8s linear infinite}
@keyframes sd-heat{0%{transform:translateY(4px);opacity:0}40%{opacity:.9}100%{transform:translateY(-14px);opacity:0}}
.cam .sd-heat{animation:sd-heat 1.8s ease-out infinite}
@keyframes sd-scan{from{transform:translateX(0)}to{transform:translateX(196px)}}
.cam .sd-scan{animation:sd-scan 2.2s ease-in-out infinite alternate}
@keyframes sd-wave{0%,100%{opacity:.2}50%{opacity:1}}
.cam .sd-wave{animation:sd-wave .8s ease-in-out infinite}
@keyframes sd-tag{from{transform:translateX(-24px);opacity:0}to{transform:none;opacity:1}}
.cam .stage:not(.off) .sd-tag{animation:sd-tag .6s .3s cubic-bezier(.3,.7,.3,1) both}
.cam .sd-c1,.cam .sd-c2{stroke-dasharray:1;stroke-dashoffset:0}
@keyframes sd-c1{0%{stroke-dashoffset:1}60%,100%{stroke-dashoffset:0}}
.cam .sd-c1{animation:sd-c1 3.2s ease-in-out infinite}
@keyframes sd-c2{0%,10%{stroke-dashoffset:1}50%,100%{stroke-dashoffset:0}}
.cam .sd-c2{animation:sd-c2 3.4s ease-out infinite}
@keyframes sd-air{from{transform:translateX(-14px);opacity:0}30%{opacity:1}to{transform:translateX(26px);opacity:0}}
.cam .sd-air{animation:sd-air 1.8s linear infinite}
@keyframes sd-airb{0%{transform:translateX(0);opacity:0}30%{opacity:1}100%{transform:translateX(-10px);opacity:0}}
.cam .sd-airb{animation:sd-airb 1.8s .9s linear infinite}
@keyframes sd-print{0%,15%{transform:translateX(-56px);opacity:0}25%{opacity:1}60%,100%{transform:none;opacity:1}}
.cam .sd-print{animation:sd-print 3.6s ease-out infinite}
@keyframes sd-print2{from{transform:translateX(0)}to{transform:translateX(-136px)}}
.cam .sd-print2{animation:sd-print2 6s linear infinite}
.cam .sd-box{border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#04070d;overflow:hidden}
.cam .sd-fj{fill:none;stroke-width:4;stroke-linejoin:round}
.cam .sd-fj2{fill:none;stroke-width:3}
.cam .sd-fj.os2,.cam .sd-fj2.os2{stroke:#facc15}
.cam .sd-fj.om4,.cam .sd-fj2.om4{stroke:#22d3ee}
.cam .sd-con.os2{fill:#3b82f6}
.cam .sd-con.om4{fill:#22d3ee}
@keyframes sd-lp2{from{offset-distance:0%;opacity:0}10%{opacity:1}90%{opacity:1}to{offset-distance:100%;opacity:0}}
.cam .sd-lp2{fill:#ffffff;animation:sd-lp2 2.4s linear infinite}
@keyframes sd-lp3{from{offset-distance:0%;opacity:0}10%{opacity:1}50%{opacity:1}62%,100%{offset-distance:62%;opacity:0}}
.cam .sd-lp3{fill:#ffffff;animation:sd-lp3 2.4s linear infinite}
.cam .sd-row{grid-template-columns:118px minmax(0,1fr);gap:12px;padding:10px 0}
.cam .sd-row .rv{font-size:14.5px}
.cam .sd-otdr{overflow-x:auto}
.cam .sd-cov{transform:translateX(560px)}
@keyframes sd-sw0{from{transform:translateX(0)}to{transform:translateX(560px)}}
@keyframes sd-sw1{from{transform:translateX(0)}to{transform:translateX(560px)}}
@keyframes sd-sw2{from{transform:translateX(0)}to{transform:translateX(560px)}}
.cam .sd-cov.k0{animation:sd-sw0 2.4s cubic-bezier(.4,.1,.5,1) both}
.cam .sd-cov.k1{animation:sd-sw1 2.4s cubic-bezier(.4,.1,.5,1) both}
.cam .sd-cov.k2{animation:sd-sw2 2.4s cubic-bezier(.4,.1,.5,1) both}
.cam .sd-hint{display:none;font-size:11px;letter-spacing:.06em;color:#7d92b3;padding:6px 0 4px}
@media (max-width:560px){.cam .sd-hint{display:block}}
@media (prefers-reduced-motion:reduce){.cam .sd-io *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sd-io [style*=offset-path]{opacity:0}}
.cam .sd-fg{display:grid;grid-template-columns:minmax(0,340px) minmax(0,1fr);gap:22px;align-items:start}
@media (max-width:900px){.cam .sd-fg{grid-template-columns:minmax(0,1fr)}}
@keyframes sl-lt{to{stroke-dashoffset:-56}}
.cam .sl-lt{fill:none;stroke:#fffbe0;stroke-width:1.8;stroke-dasharray:2 26;stroke-linecap:round;animation:sl-lt 1.4s linear infinite;transition:opacity .4s}
.cam .sl-la2{opacity:0}
.cam .sl-h1 .sl-la,.cam .sl-h2 .sl-la{opacity:0}
.cam .sl-h2 .sl-la2{opacity:1}
.cam .sl-fa{transition:opacity .5s}
.cam .sl-h1 .sl-fa{opacity:.3}
.cam .sl-ledA,.cam .sl-ledB,.cam .sl-w1{fill:#4ade80}
.cam .sl-w2{fill:#f5c46b}
.cam .sl-h1 .sl-ledA,.cam .sl-h2 .sl-ledA,.cam .sl-h1 .sl-w1,.cam .sl-h2 .sl-w1{fill:#ff5a5a}
.cam .sl-h1 .sl-w2,.cam .sl-h2 .sl-w2{fill:#4ade80}
.cam .sl-ca,.cam .sl-cb{transition:opacity .4s}
.cam .sl-h1 .sl-ca,.cam .sl-h2 .sl-ca{opacity:.3}
.cam .sl-h0 .sl-cb{opacity:.55}
@keyframes sl-pk{from{offset-distance:0%}to{offset-distance:100%}}
.cam .sl-pk{offset-rotate:0deg;animation:sl-pk 1.3s linear infinite}
.cam .sl-fgrid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:24px;align-items:start}
.cam .sl-scr{min-width:0;overflow-x:auto;border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#04070d}
.cam .sl-side{display:flex;flex-direction:column;gap:14px;padding:20px;border:1px solid rgba(167,139,250,.38);border-radius:10px;background:linear-gradient(160deg,rgba(167,139,250,.1),rgba(7,11,20,.9) 55%)}
.cam .sl-side .row{grid-template-columns:52px minmax(0,1fr);gap:12px;padding:10px 0}
.cam .sl-side .row .rv{font-size:14.5px}
.cam .sl-hint{display:none;font-size:11px;letter-spacing:.06em;color:#7d92b3}
@media (max-width:900px){.cam .sl-fgrid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:560px){.cam .sl-csvg{min-width:560px}}
@media (max-width:560px){.cam .sl-hint{display:block}}
.cam .sl-csvg .sl-z{opacity:0;transition:opacity .35s}
.cam .sl-r0 .sl-z0,.cam .sl-r1 .sl-z1,.cam .sl-r2 .sl-z2{opacity:1}
@keyframes sl-draw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
.cam .sl-cc{stroke-dasharray:100;stroke-dashoffset:0}
.cam .sl-r0 .sl-z0 .sl-cc,.cam .sl-r1 .sl-z1 .sl-cc,.cam .sl-r2 .sl-z2 .sl-cc{animation:sl-draw 1.6s ease both}
@keyframes sl-blk{0%,100%{opacity:.45}50%{opacity:1}}
.cam .sl-blk{animation:sl-blk 2.4s ease-in-out infinite}
@keyframes sl-slap{0%,25%{opacity:0;transform:translateY(-14px)}45%,85%{opacity:1;transform:none}100%{opacity:0;transform:none}}
.cam .sl-slap{animation:sl-slap 3.4s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.cam .sl-anim *,.cam .sl-card *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sl-anim .sl-pk{display:none}}
.cam .sl-h2 .sl-fah{opacity:.3}
.cam .sm-seg .sm-run{stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset 1.1s ease}
.cam .sm-seg.on .sm-run{stroke-dashoffset:0}
.cam .sm-pk{offset-rotate:0deg;animation:sm-pk 2.8s linear infinite}
@keyframes sm-pk{from{offset-distance:0%}to{offset-distance:100%}}
.cam .sm-seg .sm-pk{opacity:0;transition:opacity .3s}
.cam .sm-seg.on .sm-pk{opacity:1}
.cam .sm-seg .sm-ph,.cam .sm-seg .sm-pf{opacity:0;transition:opacity .4s}
.cam .sm-seg.on .sm-ph,.cam .sm-seg.on .sm-pf{opacity:1}
.cam .sm-seg .sm-cord{opacity:0;transform:translateY(-9px);transition:opacity .35s,transform .5s cubic-bezier(.3,.7,.3,1)}
.cam .sm-seg.on .sm-cord{opacity:1;transform:none}
.cam .sm-seg:not(.on) .sm-led{animation:none;opacity:0}
.cam .sm-hsvg .sm-ta,.cam .sm-hsvg .sm-tb,.cam .sm-hsvg .sm-tc{fill:#5d6f8f}
.cam .sm-h0 .sm-ta{fill:#c4b5fd}
.cam .sm-h1 .sm-tb{fill:#8bbcff}
.cam .sm-h2 .sm-tc{fill:#f8d999}
.cam .sm-h0 rect.sm-oa{fill:rgba(167,139,250,.5)!important}
.cam .sm-h1 rect.sm-ob{fill:rgba(77,158,255,.5)!important}
.cam .sm-h2 rect.sm-oc{fill:rgba(245,196,107,.5)!important}
.cam .sm-fgrid{display:grid;grid-template-columns:minmax(0,1.85fr) minmax(0,1fr);gap:24px;align-items:start}
.cam .sm-fw{min-width:0;border:1px solid rgba(120,170,255,.14);border-radius:4px;overflow-x:auto;background:#04070d}
.cam .sm-side{display:flex;flex-direction:column;gap:14px;padding:20px;border:1px solid rgba(167,139,250,.38);border-radius:10px;background:linear-gradient(160deg,rgba(167,139,250,.1),rgba(7,11,20,.9) 55%)}
.cam .sm-side .row{grid-template-columns:92px minmax(0,1fr);gap:12px;padding:10px 0}
.cam .sm-side .row .rv{font-size:14.5px}
.cam .sm-hint{display:none;font-size:11px;letter-spacing:.06em;color:#7d92b3}
@media (max-width:900px){.cam .sm-fgrid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:560px){.cam .sm-wsvg{min-width:560px}}
@media (max-width:560px){.cam .sm-hint{display:block}}
@media (max-width:560px){.cam .sm-side .row{grid-template-columns:minmax(0,1fr);gap:4px}}
@keyframes sm-draw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
.cam .sm-cab{stroke-dasharray:100;stroke-dashoffset:0}
.cam .sm-w0 .sm-cab{animation:sm-draw 1.6s ease both}
.cam .sm-dry{opacity:0;transform:translateX(30px);transition:opacity .5s,transform .6s cubic-bezier(.3,.7,.3,1)}
.cam .sm-w2 .sm-dry{opacity:1;transform:none}
.cam .sm-inset{opacity:0;transform:scale(.96);transform-origin:200px 250px;transition:opacity .45s,transform .5s cubic-bezier(.3,.7,.3,1)}
.cam .sm-inset.on{opacity:1;transform:none}
@keyframes sm-fan{from{opacity:0;transform:translateX(-26px)}to{opacity:1;transform:none}}
.cam .sm-inset.on .sm-fan{animation:sm-fan 1.1s cubic-bezier(.3,.7,.3,1) both}
@keyframes sm-punch{0%,30%{transform:translateX(0)}45%,55%{transform:translateX(-6px)}70%,100%{transform:translateX(0)}}
.cam .sm-inset.on .sm-punch{animation:sm-punch 1.8s ease-in-out infinite}
@keyframes sm-ecg{from{stroke-dashoffset:100}to{stroke-dashoffset:-100}}
.cam .sm-ecg{stroke-dasharray:100;animation:sm-ecg 2.6s linear infinite}
@keyframes sm-slap{0%,25%{opacity:0;transform:translateY(-14px)}45%,85%{opacity:1;transform:none}100%{opacity:0;transform:none}}
.cam .sm-slap{animation:sm-slap 3.4s ease-in-out infinite}
@media (prefers-reduced-motion:reduce){.cam .sm-anim *,.cam .sm-card *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sm-anim .sm-pk{display:none}}
.cam .so-run{fill:none;stroke:#4d9eff;stroke-width:2.2;stroke-linejoin:round;stroke-dasharray:1;stroke-dashoffset:0}
@keyframes so-draw{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.cam .so-runs.draw .so-run{animation:so-draw 1.8s cubic-bezier(.4,.1,.4,1) both}
.cam .so-bd{opacity:0;transform:translateX(-60px);transition:opacity .5s,transform .7s cubic-bezier(.3,.7,.3,1)}
.cam .so-tl{opacity:0;transform:translateY(-26px);transition:opacity .4s,transform .6s cubic-bezier(.3,.7,.3,1)}
.cam .so-pl{opacity:0;transition:opacity .6s .5s}
.cam .so-dw.on .so-bd,.cam .so-dw.on .so-tl{opacity:1;transform:none}
.cam .so-dw.on .so-pl{opacity:1}
@keyframes so-flag{from{transform:rotate(-3deg)}to{transform:rotate(3deg)}}
.cam .so-flag{transform-box:fill-box;transform-origin:left top;animation:so-flag 1.6s ease-in-out infinite alternate}
@keyframes so-pk{from{offset-distance:0%;opacity:0}8%{opacity:1}92%{opacity:1}to{offset-distance:100%;opacity:0}}
.cam .so-pk{fill:#e8edf5;offset-rotate:0deg;animation:so-pk 2.8s linear infinite}
.cam .so-c1,.cam .so-c2,.cam .so-c4,.cam .so-c6{stroke-dasharray:1;stroke-dashoffset:0}
@keyframes so-c1{0%,10%{stroke-dashoffset:1}45%,100%{stroke-dashoffset:0}}
.cam .so-c1{animation:so-c1 4s ease-in-out infinite}
@keyframes so-c1b{0%,50%{opacity:0;transform:translateX(-30px)}70%,92%{opacity:.92;transform:none}100%{opacity:0}}
.cam .so-c1b{opacity:0;animation:so-c1b 4s ease-in-out infinite}
@keyframes so-c2{0%,10%{stroke-dashoffset:1}50%,100%{stroke-dashoffset:0}}
.cam .so-c2{animation:so-c2 3.4s ease-out infinite}
.cam .so-c4{animation:so-c2 3.4s ease-out infinite}
.cam .so-c6{animation:so-c1 4s ease-in-out infinite}
.cam .so-bar{stroke-dasharray:1;stroke-dashoffset:0}
.cam .so-bar{animation:so-c2 3.6s ease-out infinite}
.cam .so-x{animation:cam-blink 1.1s step-end infinite}
.cam .so-box{border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#04070d;overflow:hidden}
.cam .so-fg{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:22px;align-items:start}
@media (max-width:900px){.cam .so-fg{grid-template-columns:minmax(0,1fr)}}
.cam .so-chip i{width:10px;height:10px;border-radius:2px;border:1.5px solid}
.cam .so-chip:not(.on){color:#7d92b3}
.cam .so-ly{opacity:0;transition:opacity .35s}
.cam .so-ly.on{opacity:1}
.cam .so-hr{fill:none;stroke-width:1.1;opacity:.75;stroke-dasharray:1;stroke-dashoffset:0}
.cam .so-ly.on .so-hr{animation:so-draw 1.1s cubic-bezier(.4,.1,.4,1) both}
@keyframes so-cov{0%{transform:scale(.7);opacity:.2}50%{opacity:1}100%{transform:scale(1.05);opacity:.4}}
.cam .so-cov{transform-box:fill-box;transform-origin:center;animation:so-cov 2.6s ease-in-out infinite alternate}
.cam .so-tot{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.cam .so-tot div{display:flex;flex-direction:column;gap:6px;padding:12px 14px;border:1px solid rgba(120,170,255,.16);border-radius:4px;background:#070b14}
.cam .so-tot b{font:800 30px/1 var(--sans);letter-spacing:-.02em;color:#e8edf5}
.cam .so-pp{display:flex;flex-direction:column;gap:8px;padding:14px;border:1px solid rgba(120,170,255,.16);border-radius:4px;background:#070b14}
.cam .so-ports{display:grid;grid-template-columns:repeat(24,minmax(0,1fr));gap:3px}
.cam .so-ports .so-pt{display:block;aspect-ratio:1/1.1;border-radius:1px;background:#02040a;border:1px solid rgba(139,188,255,.25)}
.cam .so-ports .so-pt.so-ws{background:#4d9eff;border-color:#4d9eff}
.cam .so-ports .so-pt.so-cf{background:#e9eef6;border-color:#e9eef6}
.cam .so-ports .so-pt.so-ap{background:#a78bfa;border-color:#a78bfa}
.cam .so-ports .so-pt.so-cam{background:#f28c3a;border-color:#f28c3a}
.cam .so-ports .so-pt.so-ac{background:#3fc173;border-color:#3fc173}
.cam .so-ports .so-pt.so-pr{background:#8a95a8;border-color:#8a95a8}
.cam .so-row{grid-template-columns:110px minmax(0,1fr);gap:12px;padding:10px 0}
.cam .so-row .rv{font-size:14.5px}
@media (prefers-reduced-motion:reduce){.cam .so-io *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .so-io [style*=offset-path]{opacity:0}}
@media (prefers-reduced-motion:reduce){.cam .so-c1b{opacity:0}}
.cam .sp-g{transition:opacity .45s}
.cam .sp-g:not(.on){opacity:0}
.cam .sp-g .sp-fd{transition:opacity .45s}
.cam .sp-g:not(.on) .sp-fd{opacity:0;transition-delay:0s!important}
.cam .sp-g .sp-up{transition:transform .6s cubic-bezier(.3,.7,.3,1),opacity .4s}
.cam .sp-g:not(.on) .sp-up{transform:translateY(34px);opacity:0;transition-delay:0s!important}
.cam .sp-g .sp-cam{transition:transform 1.2s cubic-bezier(.3,.7,.3,1) .3s}
.cam .sp-g:not(.on) .sp-cam{transform:translateY(52px)}
.cam .sp-dr{stroke-dasharray:1 1;stroke-dashoffset:0}
.cam .sp-g.on .sp-dr{animation-name:spdr;animation-duration:1.2s;animation-timing-function:cubic-bezier(.4,.6,.3,1);animation-fill-mode:both}
.cam .sp-t8{font:600 8px var(--mono);fill:#7d92b3;letter-spacing:.06em}
.cam .sp-tip{offset-distance:100%;opacity:0}
.cam .sp-g.on .sp-tip{animation:cab-sptip 1s cubic-bezier(.4,.6,.3,1) both}
@keyframes cab-sptip{0%{offset-distance:0%;opacity:1}85%{opacity:1}100%{offset-distance:100%;opacity:0}}
@keyframes cab-spscan{0%{transform:translateY(0)}100%{transform:translateY(180px)}}
.cam .sp-scan{animation:cab-spscan 2.4s ease-in-out infinite alternate}
@keyframes cab-spbeam{0%,100%{opacity:.55}50%{opacity:1}}
.cam .sp-beam{animation:cab-spbeam 1.6s ease-in-out infinite}
@keyframes cab-spprint{to{transform:translateX(-236px)}}
.cam .sp-print{animation:cab-spprint 6s linear infinite}
.cam .sp-nd{transform-origin:366px 140px}
@keyframes cab-spnd{0%{transform:rotate(-8deg)}100%{transform:rotate(14deg)}}
.cam .sp-g.on .sp-nd{animation:cab-spnd 1.4s ease-in-out infinite alternate}
@keyframes cab-spsweep{0%{transform:rotate(-24deg)}100%{transform:rotate(24deg)}}
.cam .sp-sweep{transform-origin:105px 78px;animation:cab-spsweep 2.6s ease-in-out infinite alternate}
@keyframes cab-spkey{0%,100%{transform:rotate(-6deg)}50%{transform:rotate(6deg)}}
.cam .sp-key{transform-origin:112px 32px;animation:cab-spkey 2.4s ease-in-out infinite}
.cam .sp-c4{stroke-dasharray:1 1;animation:cab-spc4 2.4s ease-in-out infinite}
@keyframes cab-spc4{0%{stroke-dashoffset:1}60%,100%{stroke-dashoffset:0}}
.cam .sp-g .sp-sh{transition:transform .75s cubic-bezier(.3,.7,.3,1),opacity .45s}
.cam .sp-g:not(.on) .sp-sh{transform:translateX(-300px);opacity:0}
.cam .sp-g.on .sp-dr.sp-lin{animation-timing-function:linear}
.cam .sp-row{fill:rgba(167,139,250,0);stroke:rgba(167,139,250,0)}
.cam .sp-k.on .sp-row{fill:rgba(167,139,250,.14);stroke:#a78bfa}
.cam .sp-k.on .sp-rt{fill:#e8edf5}
.cam .sp-tab{fill:#16223a;stroke:rgba(139,188,255,.45)}
.cam .sp-k.on .sp-tab{fill:#a78bfa;stroke:#c4b5fd}
.cam .sp-tt{font:700 10px var(--mono);fill:#7d92b3;text-anchor:middle}
.cam .sp-k.on .sp-tt{fill:#060910}
.cam .sp-old{opacity:0}
.cam .sp-g.on .sp-old{animation:cab-spold 1.2s ease-in both}
@keyframes cab-spold{0%,40%{opacity:1}100%{opacity:0}}
.cam .sp-wm{transform-box:fill-box;transform-origin:center}
.cam .sp-g.on .sp-wm{animation:cab-spwm 1s ease 1s both}
@keyframes cab-spwm{from{opacity:0;transform:scale(1.15)}to{opacity:1;transform:scale(1)}}
.cam .sp-sway{transform-origin:784px 84px;animation:cab-spsway 3.2s ease-in-out infinite}
@keyframes cab-spsway{0%,100%{transform:rotate(-2deg)}50%{transform:rotate(2deg)}}
.cam .sp-cp{animation:cab-spcp 3.2s ease-in-out infinite}
@keyframes cab-spcp{0%{offset-distance:0%;opacity:0}10%{opacity:1}90%{opacity:1}100%{offset-distance:100%;opacity:0}}
@media (prefers-reduced-motion:reduce){.cam .spx *,.cam .spc *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .spx .sp-scan{transform:translateY(90px)}}
@media (prefers-reduced-motion:reduce){.cam .spc .sp-cp{opacity:0}}
@keyframes sr-air{to{stroke-dashoffset:-28}}
.cam .sr-air{stroke-dasharray:6 8;animation:sr-air 1.6s linear infinite}
.cam .sr-lift{transform-box:fill-box;transform-origin:left center;transition:transform .6s ease}
.cam .sr-h0 .sr-lift,.cam .sr-h1 .sr-lift{transform:rotate(-28deg)}
.cam .sr-cab{stroke-dasharray:100;stroke-dashoffset:100;transition:opacity .3s}
.cam .sr-h1 .sr-cab{animation-name:sr-draw;animation-timing-function:linear;animation-fill-mode:both}
.cam .sr-h2 .sr-cab{stroke-dashoffset:0}
.cam .sr-grip{offset-rotate:0deg;opacity:0}
.cam .sr-h1 .sr-grip{opacity:1;animation-name:sr-grip;animation-timing-function:linear;animation-fill-mode:both}
@keyframes sr-fade{from{opacity:0}to{opacity:1}}
.cam .sr-print{opacity:0;transition:opacity .4s}
.cam .sr-h2 .sr-print{opacity:1}
.cam .sr-h1 .sr-print{animation:sr-fade .5s 2.2s both}
@keyframes sr-needle{0%{transform:rotate(0)}30%{transform:rotate(80deg)}45%{transform:rotate(70deg)}60%{transform:rotate(77deg)}75%{transform:rotate(69deg)}100%{transform:rotate(72deg)}}
.cam .sr-needle{transform:rotate(72deg)}
.cam .sr-h1 .sr-needle{animation:sr-needle 2.6s ease-out both}
.cam .sr-gate{transform-box:fill-box;transform-origin:top;transition:transform 1.1s cubic-bezier(.4,.1,.3,1)}
.cam .sr-h2 .sr-gate{transform:scaleY(.06)}
@keyframes sr-pk{from{offset-distance:0%}to{offset-distance:100%}}
.cam .sr-pk{offset-rotate:0deg;opacity:0;transition:opacity .3s;animation:sr-pk 2.4s linear infinite}
.cam .sr-h2 .sr-pk{opacity:1}
@keyframes sr-fov{0%,100%{opacity:.55}50%{opacity:1}}
.cam .sr-fov{animation:sr-fov 2.8s ease-in-out infinite}
.cam .sr-pos{fill:rgba(77,158,255,.08)}
.cam .sr-h2 .sr-pos{fill:rgba(77,158,255,.3)}
.cam .sr-fgrid{display:grid;grid-template-columns:minmax(0,1.7fr) minmax(0,1fr);gap:24px;align-items:start}
.cam .sr-fw{min-width:0;overflow-x:auto;border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#04070d}
.cam .sr-side{display:flex;flex-direction:column;gap:14px;padding:20px;border:1px solid rgba(167,139,250,.38);border-radius:10px;background:linear-gradient(160deg,rgba(167,139,250,.1),rgba(7,11,20,.9) 55%)}
.cam .sr-side .row{grid-template-columns:104px minmax(0,1fr);gap:12px;padding:10px 0}
.cam .sr-side .row .rv{font-size:14.5px}
.cam .sr-hint{display:none;font-size:11px;letter-spacing:.06em;color:#7d92b3}
@media (max-width:900px){.cam .sr-fgrid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:560px){.cam .sr-csvg{min-width:560px}}
@media (max-width:560px){.cam .sr-hint{display:block}}
@media (max-width:560px){.cam .sr-side .row{grid-template-columns:minmax(0,1fr);gap:4px}}
.cam .sr-dp{fill:#04070d;stroke:#7d92b3;stroke-width:1.3;stroke-dasharray:3 2}
.cam .sr-d0,.cam .sr-d1,.cam .sr-d2,.cam .sr-c1 .sr-d3,.cam .sr-c1 .sr-d4,.cam .sr-c2 .sr-d3,.cam .sr-c2 .sr-d4{fill:rgba(167,139,250,.5);stroke:#a78bfa;stroke-dasharray:none}
.cam .sr-csvg .sr-dl0,.cam .sr-csvg .sr-dl1,.cam .sr-csvg .sr-dl2,.cam .sr-c1 .sr-dl3,.cam .sr-c1 .sr-dl4,.cam .sr-c2 .sr-dl3,.cam .sr-c2 .sr-dl4{fill:#c4b5fd}
.cam .sr-reg{transition:opacity .4s,transform .55s cubic-bezier(.3,.7,.3,1)}
.cam .sr-r3,.cam .sr-r4{opacity:0;transform:translateY(-16px)}
.cam .sr-c1 .sr-r3,.cam .sr-c1 .sr-r4,.cam .sr-c2 .sr-r3,.cam .sr-c2 .sr-r4{opacity:1;transform:none}
.cam .sr-r4{transition-delay:.15s}
.cam .sr-r5{opacity:0}
.cam .sr-q0,.cam .sr-q1,.cam .sr-hh,.cam .sr-shop{transition:opacity .45s}
.cam .sr-c1 .sr-q0,.cam .sr-c2 .sr-q0,.cam .sr-q1,.cam .sr-hh{opacity:0}
.cam .sr-c1 .sr-q1,.cam .sr-c2 .sr-q1,.cam .sr-c2 .sr-hh{opacity:1}
.cam .sr-c0 .sr-sh4,.cam .sr-c0 .sr-sh5,.cam .sr-c0 .sr-sh6,.cam .sr-c0 .sr-sh7,.cam .sr-c0 .sr-sh8,.cam .sr-c0 .sr-sh9{opacity:0}
@keyframes sr-shuffle{from{transform:translateX(0)}to{transform:translateX(-6px)}}
.cam .sr-shop{animation:sr-shuffle 2.6s ease-in-out infinite alternate}
.cam .sr-shop:nth-of-type(even){animation-delay:-1.3s}
@keyframes sr-ring{0%{transform:scale(.5);opacity:.9}100%{transform:scale(1.9);opacity:0}}
.cam .sr-ring{opacity:0;transform-box:fill-box;transform-origin:center}
.cam .sr-apd{opacity:.35;transition:opacity .4s}
.cam .sr-c2 .sr-apd{opacity:1}
.cam .sr-c2 .sr-ring{animation:sr-ring 1.6s ease-out infinite}
.cam .sr-pp{fill:#04070d;stroke:rgba(139,188,255,.5)}
.cam .sr-p0,.cam .sr-p1,.cam .sr-p2,.cam .sr-c1 .sr-p3,.cam .sr-c1 .sr-p4,.cam .sr-c2 .sr-p3,.cam .sr-c2 .sr-p4{fill:#1a2438;stroke:#a78bfa}
.cam .sr-cord{opacity:0;transform:translateY(14px);transition:opacity .35s,transform .5s cubic-bezier(.3,.7,.3,1)}
.cam .sr-k0,.cam .sr-k1,.cam .sr-k2,.cam .sr-c1 .sr-k3,.cam .sr-c1 .sr-k4,.cam .sr-c2 .sr-k3,.cam .sr-c2 .sr-k4{opacity:1;transform:none}
.cam .sr-k4{transition-delay:.15s}
.cam .sr-led{fill:#334155}
.cam .sr-l0,.cam .sr-l1,.cam .sr-l2,.cam .sr-c1 .sr-l3,.cam .sr-c1 .sr-l4,.cam .sr-c2 .sr-l3,.cam .sr-c2 .sr-l4{fill:#4ade80;animation:cam-blink 1.1s step-end infinite}
.cam .sr-l1{animation-delay:.3s}
.cam .sr-l2{animation-delay:.6s}
.cam .sr-l3{animation-delay:.2s}
.cam .sr-l4{animation-delay:.5s}
@keyframes sr-pop{0%,100%{opacity:.35}50%{opacity:1}}
.cam .sr-pop{animation:sr-pop 2.4s ease-in-out infinite}
.cam .sr-lamp{animation:cam-blink 1.6s step-end infinite}
@media (prefers-reduced-motion:reduce){.cam .sr-anim *,.cam .sr-card *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sr-h1 .sr-cab{stroke-dashoffset:0}}
@media (prefers-reduced-motion:reduce){.cam .sr-anim .sr-pk,.cam .sr-anim .sr-grip{display:none}}
@media (prefers-reduced-motion:reduce){.cam .sr-h1 .sr-print{opacity:1}}
@keyframes ss-pl{from{stroke-dashoffset:0}to{stroke-dashoffset:-96}}
@keyframes ss-pk{from{stroke-dashoffset:-96}to{stroke-dashoffset:0}}
@keyframes ss-draw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
@keyframes ss-grow{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes ss-glow{0%,100%{opacity:.25}50%{opacity:.95}}
@keyframes ss-wave{0%{transform:scale(.25);opacity:.9}100%{transform:scale(1.5);opacity:0}}
@keyframes ss-uin{0%{transform:translateX(-36px);opacity:0}10%,86%{transform:none;opacity:1}96%,100%{transform:none;opacity:0}}
@keyframes ss-lab{0%,8%{transform:translateY(-8px);opacity:0}22%,88%{transform:none;opacity:1}100%{transform:none;opacity:0}}
.cam .ss-pulse{stroke-dasharray:4 96;animation:ss-pl 2.6s linear infinite}
.cam .ss-glow{animation:ss-glow 1.6s ease-in-out infinite}
.cam .ss-fib{transition:opacity .5s}
.cam .ss-fib.dim{opacity:.4}
.cam .ss-band{opacity:0;transition:opacity .5s}
.cam .ss-band.on{opacity:1}
.cam .ss-hz{opacity:.3;transition:opacity .5s}
.cam .ss-hz.on{opacity:1}
.cam .ss-aps{opacity:.45;transition:opacity .5s}
.cam .ss-aps .rk2{visibility:hidden}
.cam .ss-aps.on{opacity:1}
.cam .ss-aps.on .rk2{visibility:visible}
.cam .ss-draw{stroke-dasharray:100;stroke-dashoffset:0}
.cam .ss-drawg.on .ss-draw{animation:ss-draw 1.6s ease-out both}
.cam .ss-bar{transform-box:fill-box;transform-origin:left center}
.cam .ss-drawg.on .ss-bar{animation:ss-grow 1.8s .4s ease-out both}
.cam .ss-wave{transform-box:fill-box;transform-origin:center;animation:ss-wave 2.6s ease-out infinite}
.cam .ss-uin{animation:ss-uin 7s ease-out infinite}
.cam .ss-lab{animation:ss-lab 4.4s ease-out infinite}
.cam .ss-room{border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#04070d;padding:8px}
.cam .ssf-t{font:600 11px var(--mono);fill:#8bbcff;letter-spacing:.06em}
.cam .ssf-s{font:500 9.5px var(--mono);fill:#7d92b3;letter-spacing:.06em}
.cam .ssf-l{font:700 11px var(--mono);fill:#e8edf5;letter-spacing:.04em}
.cam .ss-drop{opacity:.32;transition:opacity .4s}
.cam .ss-drop.on{opacity:1}
.cam .ss-drop .ss-run{stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset 1s ease-out}
.cam .ss-drop.on .ss-run{stroke-dashoffset:0}
.cam .ss-drop .ss-run0{transition:opacity .4s}
.cam .ss-drop.on .ss-run0{opacity:0}
.cam .ss-pk{stroke-dasharray:4 96;opacity:0}
.cam .ss-drop.on .ss-pk{opacity:1;animation:ss-pk 2.4s linear infinite}
.cam .ss-sym{fill:#04070d}
.cam .ss-drop.on .ss-sym{fill:rgba(77,158,255,.4)}
.cam .ss-drop .ss-cov,.cam .ss-drop .ss-cone{opacity:0;transition:opacity .5s}
.cam .ss-drop.on .ss-cov,.cam .ss-drop.on .ss-cone{opacity:1}
.cam .ss-pp{display:flex;flex-direction:column;gap:8px;padding:12px 14px;border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#04070d}
.cam .ss-pg .ss-port{fill:#04070d;stroke:rgba(139,188,255,.5);stroke-width:.8}
.cam .ss-pg .ss-led{fill:#1e293b}
.cam .ss-pg.on .ss-port{fill:rgba(167,139,250,.4);stroke:#c4b5fd}
.cam .ss-pg.on .ss-led{fill:#4ade80}
.cam .ss-v{display:inline-flex;align-items:center;min-height:28px;padding:0 10px;border-radius:3px;font:700 11px var(--mono);letter-spacing:.1em;text-transform:uppercase}
.cam .ss-v.ok{background:rgba(74,222,128,.12);color:#8bf0b0;border:1px solid rgba(74,222,128,.45)}
.cam .ss-v.warn{background:rgba(245,196,107,.12);color:#f5c46b;border:1px solid rgba(245,196,107,.45)}
.cam .ss-cab{display:inline-flex;align-items:center;min-height:26px;padding:0 9px;border-radius:3px;font:600 11px var(--mono);letter-spacing:.06em;color:#8bbcff;border:1px solid rgba(77,158,255,.4);background:rgba(77,158,255,.1);white-space:nowrap}
.cam .ss-cab.poe{color:#c4b5fd;border-color:rgba(167,139,250,.5);background:rgba(167,139,250,.12)}
@media (prefers-reduced-motion:reduce){.cam .ss-anim,.cam .ss-anim *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .ss-anim .ss-pulse,.cam .ss-anim .ss-pk{opacity:0!important}}
.cam .ss-room{overflow-x:auto}
@media (max-width:560px){.cam .ss-room svg{min-width:440px}}
.cam .ss-hint{display:none;margin-top:8px;font-size:11px;letter-spacing:.06em;color:#7d92b3}
@media (max-width:560px){.cam .ss-hint{display:block}}
.cam .sf-g{transition:opacity .45s}
.cam .sf-g:not(.on){opacity:0}
.cam .sf-g .sf-sl{transition:transform .8s cubic-bezier(.3,.7,.3,1),opacity .45s}
.cam .sf-g:not(.on) .sf-sl{transform:translateX(-340px);opacity:0}
.cam .sf-g .sf-fd{transition:opacity .45s}
.cam .sf-g:not(.on) .sf-fd{opacity:0;transition-delay:0s!important}
.cam .sf-dr,.cam .sf-dr2,.cam .sf-dr3{stroke-dasharray:1 1;stroke-dashoffset:0}
.cam .sf-g.on .sf-dr{animation:cab-sfdr 1s cubic-bezier(.4,.6,.3,1) both}
.cam .sf-w.on .sf-dr2{animation:cab-sfdr 1.6s cubic-bezier(.4,.6,.3,1) both}
.cam .sf-g.on .sf-dr3{animation:cab-sfdr 2.8s cubic-bezier(.5,.1,.3,1) .3s both}
@keyframes cab-sfdr{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.cam .sf-tx{font:600 8px var(--mono);fill:#8bbcff;letter-spacing:.08em}
@keyframes cab-sfpk{from{offset-distance:0%}to{offset-distance:100%}}
@keyframes cab-sfpkb{from{offset-distance:100%}to{offset-distance:0%}}
.cam .sf-pk{animation:cab-sfpk 2.6s linear infinite}
.cam .sf-pk2{animation:cab-sfpk 3.3s linear infinite}
.cam .sf-pk3{animation:cab-sfpkb 3.3s linear infinite}
.cam .sf-cp{animation:cab-sfpk 3s linear infinite}
@keyframes cab-sflp{to{stroke-dashoffset:-45}}
.cam .sf-lp{stroke-dasharray:5 40;animation:cab-sflp 1.4s linear infinite}
@keyframes cab-sfbit{0%,15%{transform:translateX(0)}55%,75%{transform:translateX(18px)}100%{transform:translateX(0)}}
.cam .sf-bit{animation:cab-sfbit 3.2s ease-in-out infinite}
@keyframes cab-sftm{0%{transform:translateX(-76px)}100%{transform:translateX(76px)}}
.cam .sf-tm{animation:cab-sftm 4.5s ease-in-out infinite alternate}
@keyframes cab-sfreel{to{transform:rotate(360deg)}}
.cam .sf-reel{transform-box:fill-box;transform-origin:center;animation:cab-sfreel 1.6s linear infinite}
@keyframes cab-sfprint{to{transform:translateX(-374px)}}
.cam .sf-print{animation:cab-sfprint 7s linear infinite}
.cam .sf-nd{transform-origin:825px 262px;transform:rotate(102deg);transition:transform 1.6s cubic-bezier(.3,.7,.3,1) .5s}
.cam .sf-g:not(.on) .sf-nd{transform:rotate(0deg);transition-delay:0s}
@keyframes cab-sfnd{0%{transform:rotate(96deg)}100%{transform:rotate(106deg)}}
.cam .sf-g.on .sf-nd{animation:cab-sfnd 1.3s ease-in-out 2.2s infinite alternate}
@keyframes cab-sfring{0%{transform:scale(.5);opacity:.9}100%{transform:scale(1.9);opacity:0}}
.cam .sf-ring{transform-box:fill-box;transform-origin:center;animation:cab-sfring 1.6s ease-out infinite}
@media (prefers-reduced-motion:reduce){.cam .sfx *,.cam .sfc *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sfc .sf-cp{opacity:0}}
@media (prefers-reduced-motion:reduce){.cam .sfx .sf-pk,.cam .sfx .sf-pk2,.cam .sfx .sf-pk3{opacity:0}}
.cam .st-g{transition:opacity .45s}
.cam .st-g:not(.on){opacity:0}
.cam .st-g .st-sl{transition:transform .8s cubic-bezier(.3,.7,.3,1),opacity .45s}
.cam .st-g:not(.on) .st-sl{transform:translateX(-60px);opacity:0}
.cam .st-g .st-fd{transition:opacity .45s}
.cam .st-g:not(.on) .st-fd{opacity:0;transition-delay:0s!important}
.cam .st-g .st-dn{transition:transform .9s cubic-bezier(.3,.7,.3,1),opacity .4s}
.cam .st-g:not(.on) .st-dn{transform:translateY(-150px);opacity:0}
.cam .st-dr{stroke-dasharray:1 1;stroke-dashoffset:0}
.cam .st-g.on .st-dr{animation:cab-stdr 1s cubic-bezier(.4,.6,.3,1) both}
@keyframes cab-stdr{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.cam .st-tab{font:700 8px var(--mono);fill:#060910;letter-spacing:.1em}
.cam .st-tab2{font:600 7.5px var(--mono);fill:#8bbcff;letter-spacing:.06em}
@keyframes cab-stpk{from{offset-distance:0%}to{offset-distance:100%}}
.cam .st-pk{animation:cab-stpk 1.8s linear infinite}
.cam .st-cp{animation:cab-stpk 2.6s linear infinite}
@keyframes cab-stlp{to{stroke-dashoffset:-45}}
.cam .st-lp{stroke-dasharray:5 40;animation:cab-stlp 1.4s linear infinite}
@keyframes cab-stsmk{0%{transform:translateY(0) scale(.6);opacity:0}15%{opacity:1}100%{transform:translateY(-320px) scale(1.6);opacity:0}}
.cam .st-smk{transform-box:fill-box;transform-origin:center;animation:cab-stsmk 4s ease-in infinite;opacity:0}
@keyframes cab-stsmk2{0%{transform:translateY(0) scale(.6);opacity:0}20%{opacity:1}70%{opacity:.8}100%{transform:translateY(-78px) scale(1.7);opacity:0}}
.cam .st-smk2{transform-box:fill-box;transform-origin:center;animation:cab-stsmk2 3.5s ease-out infinite;opacity:.5}
@keyframes cab-stflk{0%,100%{transform:scaleY(1)}50%{transform:scaleY(.82)}}
.cam .st-flk{transform-box:fill-box;transform-origin:center bottom;animation:cab-stflk .9s ease-in-out infinite}
.cam .st-swell{transform-box:fill-box;transform-origin:center top}
.cam .st-g.on .st-swell{animation:cab-stswell 2.2s cubic-bezier(.3,.7,.3,1) .4s both}
@keyframes cab-stswell{from{transform:scale(.25,.1)}to{transform:scale(1,1)}}
@keyframes cab-stbar{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.cam .st-bar{transform-box:fill-box;transform-origin:left center;animation:cab-stbar 1.4s cubic-bezier(.3,.7,.3,1) both}
@keyframes cab-stdrip{0%{transform:translateY(0);opacity:0}20%{opacity:1}100%{transform:translateY(14px);opacity:0}}
.cam .st-drip{transform-box:fill-box;animation:cab-stdrip 2.1s ease-in infinite}
.cam .st-rw{stroke-dasharray:1 1;animation:cab-strw 3.6s ease-in-out infinite}
@keyframes cab-strw{0%{stroke-dashoffset:1}50%,100%{stroke-dashoffset:0}}
@media (prefers-reduced-motion:reduce){.cam .stx *,.cam .stc *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .stc .st-cp,.cam .stx .st-pk{opacity:0}}
@media (prefers-reduced-motion:reduce){.cam .stx .st-smk{opacity:.45;transform:translateY(-250px) scale(1.4)}}
@keyframes sh-light{from{stroke-dashoffset:0}to{stroke-dashoffset:-92}}
@keyframes sh-pk{from{stroke-dashoffset:0}to{stroke-dashoffset:-94}}
@keyframes sh-grow{0%,30%{transform:scaleX(0)}100%{transform:scaleX(1)}}
@keyframes sh-wave{0%{transform:scale(.3);opacity:.9}100%{transform:scale(1.6);opacity:0}}
@keyframes sh-drill{0%,100%{transform:translateY(0)}50%{transform:translateY(7px)}}
@keyframes sh-emi{0%,100%{opacity:.2}50%{opacity:1}}
.cam .sh-light{stroke-dasharray:8 92;animation:sh-light 2.6s linear infinite}
.cam .sh-pk{stroke-dasharray:6 94;animation:sh-pk 2.2s linear infinite}
.cam .sh-seg{transform-box:fill-box;transform-origin:left center}
.cam .stage:not(.off) .sh-seg{animation:sh-grow 2.4s ease-out both}
.cam .sh-wave{transform-box:fill-box;transform-origin:center;animation:sh-wave 2.8s ease-out infinite}
.cam .sh-drill{animation:sh-drill 1.4s ease-in-out infinite}
.cam .sh-emi{animation:sh-emi 1.6s ease-in-out infinite}
.cam .sh-sum{display:flex;flex-direction:column;gap:8px;padding:18px;border:1px solid rgba(167,139,250,.35);border-radius:6px;background:linear-gradient(160deg,rgba(167,139,250,.1),rgba(7,11,20,.9) 55%)}
.cam .shf-t{font:700 11px var(--mono);fill:#cfe0ff;letter-spacing:.05em}
.cam .shf-s{font:500 9.5px var(--mono);fill:#7d92b3;letter-spacing:.06em}
@keyframes sh-pk2{from{stroke-dashoffset:0}to{stroke-dashoffset:-94}}
@keyframes sh-door{0%,18%{transform:scaleY(1)}42%,68%{transform:scaleY(.25)}92%,100%{transform:scaleY(1)}}
@keyframes sh-drip{0%{transform:translateY(0);opacity:0}15%{opacity:1}100%{transform:translateY(16px);opacity:0}}
.cam .sh-rt{opacity:.55;transition:opacity .4s}
.cam .sh-rt.on{opacity:1}
.cam .sh-rt .sh-run{stroke-dasharray:100;stroke-dashoffset:100;transition:stroke-dashoffset 1.2s ease-out}
.cam .sh-rt.on .sh-run{stroke-dashoffset:0}
.cam .sh-pk2{stroke-dasharray:6 94;opacity:0}
.cam .sh-rt.on .sh-pk2{opacity:1;animation:sh-pk2 2.4s 1s linear infinite}
.cam .sh-door{transform-box:fill-box;transform-origin:top center;animation:sh-door 9s ease-in-out infinite}
.cam .sh-drip{animation:sh-drip 1.8s ease-in infinite}
@media (prefers-reduced-motion:reduce){.cam .sh-anim,.cam .sh-anim *{animation:none!important}}
@media (prefers-reduced-motion:reduce){.cam .sh-anim .sh-light,.cam .sh-anim .sh-pk,.cam .sh-anim .sh-pk2,.cam .sh-anim .sh-drip{opacity:0!important}}
.cam .sh-scr{overflow-x:auto}
@media (max-width:560px){.cam .sh-scr svg{min-width:440px}}
.cam .sh-hint{display:none;margin-top:8px;font-size:11px;letter-spacing:.06em;color:#7d92b3}
@media (max-width:560px){.cam .sh-hint{display:block}}
.cam [data-rcp] *{animation-play-state:paused!important}
@keyframes cr-draw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
@keyframes cr-pop{from{opacity:0;transform:scale(.2)}70%{opacity:1;transform:scale(1.25)}to{opacity:1;transform:scale(1)}}
@keyframes cr-in{from{opacity:0}to{opacity:1}}
@keyframes cr-slide{from{opacity:0;transform:translateX(40px)}to{opacity:1;transform:none}}
@keyframes cr-drop{from{opacity:0;transform:translateY(-16px)}to{opacity:1;transform:none}}
@keyframes cr-run{0%{offset-distance:0%;opacity:0}8%{opacity:1}92%{opacity:1}100%{offset-distance:100%;opacity:0}}
@keyframes cr-head{0%{offset-distance:0%;opacity:1}99%{opacity:1}100%{offset-distance:100%;opacity:0}}
@keyframes cr-ring{from{transform:scale(1);opacity:.9}to{transform:scale(3.4);opacity:0}}
@keyframes cr-lite{from{stroke-dashoffset:0}to{stroke-dashoffset:-66}}
@keyframes cr-dl{0%{stroke-dashoffset:100}45%,85%{stroke-dashoffset:0}100%{stroke-dashoffset:-100}}
@keyframes cr-fish{0%{offset-distance:0%;opacity:0}10%{opacity:1}70%,85%{offset-distance:100%;opacity:1}100%{offset-distance:100%;opacity:0}}
.cam .cr-lite{stroke-dasharray:5 61;animation:cr-lite 1.5s linear infinite}
.cam .cr-hero .cr-run{fill:none;stroke:#a78bfa;stroke-width:1.8;stroke-dasharray:100;stroke-dashoffset:0}
.cam .cr-hero.s0 .cr-run{animation:cr-draw 1.4s linear both}
.cam .cr-hero .cr-head{fill:#f3efff;opacity:0}
.cam .cr-hero.s0 .cr-head{animation:cr-head 1.4s linear both}
.cam .cr-hero .cr-tg{opacity:0;transition:opacity .3s}
.cam .cr-hero.s0 .cr-tg{opacity:1}
.cam .cr-hero .cr-jk{transition:opacity .3s}
.cam .cr-hero.s0 .cr-jk{opacity:0}
.cam .cr-hero .cr-pop{transform-box:fill-box;transform-origin:center}
.cam .cr-hero.s1 .cr-pop{animation:cr-pop .5s ease-out both}
.cam .cr-hero .cr-live{opacity:0;transition:opacity .3s}
.cam .cr-hero.s2 .cr-live{opacity:1}
.cam .cr-hero .cr-pk{fill:#efeaff;offset-rotate:0deg}
.cam .cr-hero.s2 .cr-pk{animation:cr-run 2.2s linear infinite}
.cam .cr-hero .cr-apr{fill:none;stroke:#a78bfa;stroke-width:1.2;transform-box:fill-box;transform-origin:center;opacity:0}
.cam .cr-hero.s2 .cr-apr{animation:cr-ring 1.8s ease-out infinite}
.cam .cr-hero .cr-bun{fill:none;stroke:#a78bfa;stroke-width:1.5;stroke-dasharray:100;stroke-dashoffset:0}
.cam .cr-hero.s0 .cr-bun{animation:cr-draw 1.3s linear both}
.cam .cr-hero .cr-pp{transition:opacity .3s}
.cam .cr-hero.s0 .cr-pp{opacity:0}
.cam .cr-hero.s1 .cr-pp{animation:cr-drop .55s ease-out both}
.cam .cr-hero .cr-port{fill:#a78bfa;opacity:1}
.cam .cr-hero.s1 .cr-port{animation:cr-in .25s ease-out both}
.cam .cr-hero .cr-devs{opacity:0;transition:opacity .3s}
.cam .cr-hero.s2 .cr-devs{opacity:1}
.cam .cr-hero.s2 .cr-dv{animation:cr-slide .55s cubic-bezier(.3,.7,.3,1) both}
.cam .cr-hero .cr-cord{fill:none;stroke:#4d9eff;stroke-width:2.2;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:0}
.cam .cr-hero.s2 .cr-cord{animation:cr-draw .5s ease-out both}
.cam .cr-rd{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px 18px}
.cam .cr-rd div{display:flex;flex-direction:column;gap:4px;min-width:0}
.cam .cr-stk .row{grid-template-columns:minmax(0,1fr);gap:4px}
.cam .cr-rd b{font-size:14.5px;font-weight:600;color:#e8edf5}
.cam .cr-dl{fill:none;stroke:#a78bfa;stroke-width:1.5;stroke-dasharray:100;animation:cr-dl 4.2s ease-in-out infinite}
.cam .cr-fish{fill:#f3efff;animation:cr-fish 3.4s ease-in-out infinite}
.cam .cr-ks .cr-slv{opacity:0}
.cam .cr-ks.s0 .cr-slv{animation:cr-strip 1.3s ease-in-out both}
@keyframes cr-strip{0%,30%{opacity:1;transform:none}100%{opacity:0;transform:translateX(90px)}}
.cam .cr-ks .cr-fan,.cam .cr-ks .cr-cuts,.cam .cr-ks .cr-brk{transition:opacity .3s}
.cam .cr-ks.s0 .cr-fan,.cam .cr-ks.s0 .cr-cuts,.cam .cr-ks.s0 .cr-brk{opacity:0}
.cam .cr-ks .cr-fanmask{transform-box:fill-box;transform-origin:left center}
.cam .cr-ks.s1 .cr-fanmask{animation:cr-sx 1.3s ease-in-out both}
@keyframes cr-sx{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.cam .cr-ks.s1 .cr-cuts,.cam .cr-ks.s1 .cr-brk{animation:cr-in .4s 1.1s both}
.cam .cr-ks.s3 .cr-cuts{opacity:0}
.cam .cr-ks .cr-cut{transform-box:fill-box;transform-origin:center}
.cam .cr-ks.s2 .cr-cut{animation:cr-cut .6s ease-in both}
@keyframes cr-cut{from{opacity:1;transform:none}to{opacity:0;transform:translate(10px,26px) rotate(40deg)}}
.cam .cr-ks .cr-seat{fill:rgba(167,139,250,.3);stroke:#a78bfa;stroke-width:1.2;opacity:1}
.cam .cr-ks.s0 .cr-seat,.cam .cr-ks.s1 .cr-seat{opacity:0}
.cam .cr-ks.s2 .cr-seat{animation:cr-in .2s both}
.cam .cr-ks .cr-tool{opacity:0}
.cam .cr-ks.s2 .cr-tool{animation:cr-punch 3.2s linear both}
.cam .cr-ks .cr-cap,.cam .cr-ks .cr-lab,.cam .cr-ks .cr-wm{transition:opacity .3s}
.cam .cr-ks.s0 .cr-cap,.cam .cr-ks.s1 .cr-cap,.cam .cr-ks.s2 .cr-cap,.cam .cr-ks.s0 .cr-lab,.cam .cr-ks.s1 .cr-lab,.cam .cr-ks.s2 .cr-lab,.cam .cr-ks.s0 .cr-wm,.cam .cr-ks.s1 .cr-wm,.cam .cr-ks.s2 .cr-wm{opacity:0}
.cam .cr-ks.s3 .cr-cap{animation:cr-snap .6s cubic-bezier(.3,.7,.3,1) both}
@keyframes cr-snap{0%{opacity:0;transform:translateX(70px)}75%{opacity:1;transform:translateX(-4px)}100%{opacity:1;transform:none}}
.cam .cr-ks.s3 .cr-lab{animation:cr-drop .5s .6s ease-out both}
.cam .cr-ks.s3 .cr-wm{animation:cr-in .4s 1.1s both}
.cam .cr-ks .cr-wml{transform-box:fill-box;transform-origin:top}
.cam .cr-ks.s3 .cr-wml{animation:cr-grow .3s ease-out both}
@keyframes cr-grow{from{transform:scaleY(0)}to{transform:none}}
.cam .cr-pins{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:6px;margin:10px 4px 8px}
.cam .cr-pin{display:flex;flex-direction:column;gap:6px;padding:8px 8px 10px;border:1px solid rgba(120,170,255,.14);border-radius:4px;background:#070b14;font-size:12.5px;line-height:1.25;color:#e8edf5;min-width:0}
.cam .cr-pin .m{font-size:11px;color:#c4b5fd}
.cam .cr-pin i{display:block;height:8px;border-radius:4px}
@media (max-width:700px){.cam .cr-pins{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:700px){.cam .cr-pin{flex-direction:row;align-items:center;gap:8px}}
@media (max-width:700px){.cam .cr-pin i{width:22px;flex:none}}
.cam .cr-ksm{display:none!important}
@media (max-width:640px){.cam .cr-ksd{display:none!important}}
@media (max-width:640px){.cam .cr-ksm{display:block!important}}
.cam .cr-split{display:flex;flex-wrap:wrap;align-items:flex-start;justify-content:center}
.cam .cr-sa{flex:362 1 0;min-width:280px}
.cam .cr-sb{flex:192 1 0;min-width:150px;max-width:230px}
.cam .cr-pl{flex:300 1 0;min-width:270px}
.cam .cr-sl{flex:286 1 0;min-width:270px;max-width:none}
@keyframes cr-wave{from{transform:scale(.25);opacity:.75}to{transform:scale(2.6);opacity:0}}
.cam .cr-air-svg .cr-wv{fill:none;stroke:#8bbcff;stroke-width:1.4;transform-box:fill-box;transform-origin:center;animation:cr-wave 2.4s ease-out infinite}
@keyframes cr-march{to{stroke-dashoffset:-28}}
.cam .cr-air-svg .cr-air{fill:none;stroke-width:1.4;stroke-dasharray:3 4;animation:cr-march 1.4s linear infinite}
.cam .cr-air-svg .cr-wire{fill:none;stroke:#a78bfa;stroke-width:2;stroke-dasharray:100;stroke-dashoffset:0}
.cam .cr-air-svg.a-f .cr-wire{animation:cr-draw 1s ease-out both}
@keyframes cr-lane{from{transform:translateX(0)}to{transform:translateX(-280px)}}
.cam .cr-air-svg .cr-lane{animation:cr-lane 6s linear infinite}
@keyframes cr-dup{to{stroke-dashoffset:-36}}
.cam .cr-air-svg .cr-dup,.cam .cr-air-svg .cr-dupr{fill:none;stroke-width:3;stroke-dasharray:10 8;animation:cr-dup .9s linear infinite}
@keyframes cr-punch{0%{transform:translate(60px,86px);opacity:0}1%{transform:translate(0,86px);opacity:1}5%{transform:translate(-14px,86px);opacity:1}8%{transform:translate(0,86px);opacity:1}13%{transform:translate(0,108px);opacity:1}17%{transform:translate(-14px,108px);opacity:1}20%{transform:translate(0,108px);opacity:1}25%{transform:translate(0,130px);opacity:1}29%{transform:translate(-14px,130px);opacity:1}32%{transform:translate(0,130px);opacity:1}37%{transform:translate(0,152px);opacity:1}41%{transform:translate(-14px,152px);opacity:1}44%{transform:translate(0,152px);opacity:1}49%{transform:translate(0,174px);opacity:1}53%{transform:translate(-14px,174px);opacity:1}56%{transform:translate(0,174px);opacity:1}61%{transform:translate(0,196px);opacity:1}65%{transform:translate(-14px,196px);opacity:1}68%{transform:translate(0,196px);opacity:1}73%{transform:translate(0,218px);opacity:1}77%{transform:translate(-14px,218px);opacity:1}80%{transform:translate(0,218px);opacity:1}85%{transform:translate(0,240px);opacity:1}89%{transform:translate(-14px,240px);opacity:1}92%{transform:translate(0,240px);opacity:1}98%{transform:translate(60px,240px);opacity:0}100%{transform:translate(60px,240px);opacity:0}}
@keyframes cb-draw{from{stroke-dashoffset:100}to{stroke-dashoffset:0}}
@keyframes cb-in{from{opacity:0}to{opacity:1}}
@keyframes cb-slide{from{opacity:0;transform:translateX(70px)}70%{opacity:1}to{opacity:1;transform:none}}
@keyframes cb-pop{from{opacity:0;transform:translateX(-6px)}to{opacity:1;transform:none}}
@keyframes cb-lite{from{stroke-dashoffset:0}to{stroke-dashoffset:-66}}
@keyframes cb-led{0%,60%{opacity:1}61%,72%{opacity:.15}73%,100%{opacity:1}}
@keyframes cb-ring{from{transform:scale(.6);opacity:1}to{transform:scale(2.6);opacity:0}}
@keyframes cb-strip{from{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:none}}
@keyframes cb-zoom{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:none}}
.cam .cb-lite{stroke-dasharray:5 61;animation:cb-lite 1.5s linear infinite}
.cam .cb-hero .cb-u{transform-box:view-box}
.cam .cb-hero.s0 .cb-u{animation:cb-slide .5s cubic-bezier(.3,.7,.3,1) both}
.cam .cb-hero .cb-el,.cam .cb-hero .cb-patch,.cam .cb-hero .cb-leg,.cam .cb-hero .cb-lb{transition:opacity .35s}
.cam .cb-hero .cb-el{opacity:0}
.cam .cb-hero.s0 .cb-el{opacity:1}
.cam .cb-hero.s0 .cb-pop{animation:cb-pop .4s ease-out both}
.cam .cb-hero .cb-bun{fill:none;stroke:#a78bfa;stroke-width:1.3;stroke-dasharray:100;stroke-dashoffset:0;opacity:.85}
.cam .cb-hero.s0 .cb-bun{animation:cb-draw .8s linear both}
.cam .cb-hero.s0 .cb-patch{opacity:0}
.cam .cb-hero .cb-cord{fill:none;stroke-width:1.7;stroke-linecap:round;stroke-dasharray:100;stroke-dashoffset:0}
.cam .cb-hero.s1 .cb-cord{animation:cb-draw .45s ease-out both}
.cam .cb-hero .cb-led{fill:#4ade80;animation:cb-led 1.3s step-end infinite}
.cam .cb-hero.s1 .cb-late{animation:cb-lite 1.5s linear 1.4s infinite}
.cam .cb-hero .cb-leg{opacity:0}
.cam .cb-hero.s1 .cb-leg{opacity:1;animation:cb-in .5s .3s both}
.cam .cb-hero .cb-lb{opacity:0}
.cam .cb-hero.s2 .cb-lb{opacity:1}
.cam .cb-hero .cb-strip{fill:#e8edf5}
.cam .cb-hero.s2 .cb-strip{animation:cb-strip .35s ease-out both}
.cam .cb-hero .cb-trace{fill:none;stroke:#fff;stroke-width:2.6;stroke-linecap:round}
.cam .cb-hero .cb-ring{fill:none;stroke:#c4b5fd;stroke-width:1.4;transform-box:fill-box;transform-origin:center;animation:cb-ring 1.6s ease-out infinite}
.cam .cb-hero .cb-zoom,.cam .cb-hero .cb-face{transform-box:fill-box;transform-origin:left center}
.cam .cb-hero.s2 .cb-zoom{animation:cb-zoom .45s 1s ease-out both}
.cam .cb-hero.s2 .cb-face{animation:cb-zoom .45s 1.5s ease-out both}
.cam .cb-rd{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px 18px}
.cam .cb-rd div{display:flex;flex-direction:column;gap:4px;min-width:0}
.cam .cb-rd b{font-size:14.5px;font-weight:600;color:#e8edf5}
.cam .cb-stk .row{grid-template-columns:minmax(0,1fr);gap:4px}
@keyframes cb-rot{to{transform:rotate(360deg)}}
.cam .cb-rot{animation:cb-rot 14s linear infinite}
@keyframes cb-tagl{0%,15%{opacity:0;transform:translateY(-10px)}35%,85%{opacity:1;transform:none}100%{opacity:0;transform:none}}
.cam .cb-tagl{animation:cb-tagl 4s ease-out infinite}
@keyframes cb-row{0%,100%{opacity:.25}50%{opacity:1}}
.cam .cb-row{animation:cb-row 2.4s ease-in-out infinite}
.cam .cb-rs .cb-up{stroke-dasharray:6 50;animation:cb-lite 1.6s linear infinite}
@keyframes cb-run{0%{offset-distance:0%;opacity:0}6%{opacity:1}94%{opacity:1}100%{offset-distance:100%;opacity:0}}
.cam .cb-rs .cb-pk{fill:#efeaff;animation:cb-run 2.6s linear infinite}
@keyframes cb-march{to{stroke-dashoffset:-28}}
.cam .cb-rs .cb-hlr{fill:rgba(167,139,250,.08);stroke:#c4b5fd;stroke-width:1.6;stroke-dasharray:6 4;animation:cb-march 1.2s linear infinite}
.cam .cb-ct .cb-rev{transform-box:fill-box;transform-origin:left center}
@keyframes cb-rev0{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes cb-rev1{from{transform:scaleX(0)}to{transform:scaleX(1)}}
@keyframes cb-rev2{from{transform:scaleX(0)}to{transform:scaleX(1)}}
.cam .cb-ct.t0 .cb-rev{animation:cb-rev0 2.2s linear both}
.cam .cb-ct.t1 .cb-rev{animation:cb-rev1 2.2s linear both}
.cam .cb-ct.t2 .cb-rev{animation:cb-rev2 2.2s linear both}
@keyframes cb-cur0{0%{transform:translateX(0);opacity:1}99%{opacity:1}100%{transform:translateX(146px);opacity:0}}
@keyframes cb-cur1{0%{transform:translateX(0);opacity:1}99%{opacity:1}100%{transform:translateX(146px);opacity:0}}
@keyframes cb-cur2{0%{transform:translateX(0);opacity:1}99%{opacity:1}100%{transform:translateX(146px);opacity:0}}
.cam .cb-ct .cb-cur{opacity:0}
.cam .cb-ct.t0 .cb-cur{animation:cb-cur0 2.2s linear both}
.cam .cb-ct.t1 .cb-cur{animation:cb-cur1 2.2s linear both}
.cam .cb-ct.t2 .cb-cur{animation:cb-cur2 2.2s linear both}
@keyframes cb-mv0{0%{offset-distance:0%;opacity:1}99%{opacity:1}100%{offset-distance:100%;opacity:0}}
@keyframes cb-mv1{0%{offset-distance:0%;opacity:1}99%{opacity:1}100%{offset-distance:100%;opacity:0}}
@keyframes cb-mv2{0%{offset-distance:0%;opacity:1}99%{opacity:1}100%{offset-distance:100%;opacity:0}}
.cam .cb-ct .cb-mv{fill:#efeaff;opacity:0}
.cam .cb-ct.t0 .cb-mv{animation:cb-mv0 1.1s ease-in-out 2 both}
.cam .cb-ct.t1 .cb-mv{animation:cb-mv1 1.1s ease-in-out 2 both}
.cam .cb-ct.t2 .cb-mv{animation:cb-mv2 1.1s ease-in-out 2 both}
.cam .cb-ct .cb-ok,.cam .cb-ct .cb-bad{fill:none;stroke-width:1.8;stroke-linejoin:round}
.cam .cb-ct .cb-ok{stroke:#4ade80}
.cam .cb-ct .cb-bad{stroke:#ff6b6b}
@keyframes cb-stamp{0%,85%{opacity:0;transform:scale(1.7)}100%{opacity:1;transform:none}}
.cam .cb-ct .cb-stamp{transform-box:fill-box;transform-origin:center}
.cam .cb-ct.t0 .cb-s0,.cam .cb-ct.t1 .cb-s1,.cam .cb-ct.t2 .cb-s2{animation:cb-stamp 2.6s ease-in both}
.cam .cb-split{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-start;justify-content:center;margin-top:6px}
.cam .cb-wm{flex:200 1 0;min-width:190px;max-width:300px}
.cam .cb-gr{flex:380 1 0;min-width:280px}
.cam .cb-scr{overflow-x:auto;-webkit-overflow-scrolling:touch}
.cam .cb-swipe{display:none;margin:0 16px 14px;font-size:10.5px;letter-spacing:.12em;color:#7d92b3}
@media (max-width:640px){.cam .cb-scr svg{min-width:560px}}
@media (max-width:640px){.cam .cb-swipe{display:block}}
@media (prefers-reduced-motion: reduce){.cam .cr-z *,.cam .cb-z *{animation:none!important}}
@media (prefers-reduced-motion: reduce){.cam .cr-hero .cr-pk,.cam .cr-hero .cr-head,.cam .cr-hero .cr-apr,.cam .cr-air-svg .cr-wv,.cam .cr-ks .cr-tool,.cam .cb-z .cb-pk,.cam .cb-z .cb-mv{opacity:0!important}}
@media (prefers-reduced-motion: reduce){.cam .cr-ks.s2 .cr-cut{opacity:0}}
@font-face{font-family:'Inter';font-style:normal;font-weight:100 900;font-display:swap;src:url('/assets/fonts/inter-v20-latin-variable.woff2') format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
.cam .so-sw{background:transparent}
.cam .on>.so-sw{background:var(--c)}
