@font-face{font-family:"Geist";src:url("fonts/Geist-Regular.woff2") format("woff2");font-weight:400;font-display:swap;}
@font-face{font-family:"Geist";src:url("fonts/Geist-Medium.woff2") format("woff2");font-weight:500;font-display:swap;}
@font-face{font-family:"Geist";src:url("fonts/Geist-SemiBold.woff2") format("woff2");font-weight:600;font-display:swap;}

/* San Francisco on Apple devices, Geist everywhere else */
:root{
  color-scheme:light dark;
  --sans:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Geist","Helvetica Neue",Arial,sans-serif;

  --bg:#f5f5f7;            /* page */
  --surface:#ffffff;       /* cards */
  --text:#1d1d1f;
  --text-2:#6e6e73;        /* 4.65:1 on --bg, 5.1:1 on white */
  --link:#0066cc;          /* 5.1:1 on --bg */
  --hair:rgba(0,0,0,.12);

  --frame:#1d1d1f;
  --t-light:#e8e8ed; --t-light-hover:#f0f0f3;
  --t-mid:#d2d2d7;   --t-mid-hover:#dadadf;
  --t-ink:#1d1d1f;   --t-ink-2:#57575c;       /* 5.9:1 on light tiles, 4.7:1 on the photo tile */
  --t-dark:#2c2c2e;  --t-dark-hover:#363638;
  --t-paper:#f5f5f7; --t-paper-2:#a1a1a6;     /* 5.4:1 on dark tiles */
  --t-line:rgba(0,0,0,.12); --t-line-d:rgba(255,255,255,.1);

  --nav-bg:rgba(22,22,23,.8); --nav-solid:#161617; --nav-text:#e8e8ed;
  --foot-bg:#f5f5f7; --foot-text:#6e6e73; --foot-link:#424245; --foot-head:#1d1d1f; --foot-hair:#d2d2d7;

  --accent:#0071e3;
  --r-frame:36px; --r-hero:28px; --r-tile:22px; --r-card:28px;
  --gap:12px; --pad:20px; --edge:22px;
}
@media (prefers-color-scheme:dark){
  :root{
    --bg:#000; --surface:#1d1d1f; --text:#f5f5f7; --text-2:#a1a1a6; --link:#2997ff; --hair:rgba(255,255,255,.14);
    --frame:#161617;
    --t-light:#3a3a3c; --t-light-hover:#444446; --t-mid:#48484a; --t-mid-hover:#525254;
    --t-ink:#f5f5f7; --t-ink-2:#aeaeb2; --t-line:rgba(255,255,255,.1);
    --foot-bg:#161617; --foot-text:#86868b; --foot-link:#d2d2d7; --foot-head:#f5f5f7; --foot-hair:#424245;
  }
}
@media (prefers-contrast:more){
  :root{--text-2:#4a4a4f;--t-ink-2:#3a3a3c;--t-paper-2:#d2d2d7;--foot-text:#3a3a3c;--foot-link:#1d1d1f;--hair:rgba(0,0,0,.3);}
}

*{box-sizing:border-box;}
html{-webkit-text-size-adjust:100%;scroll-padding-top:64px;}
html,body{margin:0;}
body{font-family:var(--sans);font-size:17px;line-height:1.47;letter-spacing:-.022em;color:var(--text);background:var(--bg);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;-webkit-tap-highlight-color:transparent;
  min-height:100vh;min-height:100dvh;display:flex;flex-direction:column;}
img{image-orientation:from-image;}
[hidden]{display:none !important;}
a{color:var(--link);text-decoration:none;}
a:hover{text-decoration:underline;}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:4px;}
main{flex:1;}

/* =====================================================================
   global nav
   ===================================================================== */
.gn{position:sticky;top:0;z-index:50;background:var(--nav-bg);
  -webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);}
.gn-in{max-width:1024px;margin:0 auto;height:44px;display:flex;align-items:center;justify-content:space-between;
  padding:0 max(22px,env(safe-area-inset-right)) 0 max(22px,env(safe-area-inset-left));}
.gn a{color:var(--nav-text);opacity:.8;font-size:12px;letter-spacing:-.01em;line-height:1;text-decoration:none;
  display:flex;align-items:center;height:44px;padding:0 8px;transition:opacity .2s;}
.gn a:hover,.gn a[aria-current="page"]{opacity:1;}
.gn .logo{padding:0 8px 0 0;}
.gn .logo i,.gm-head .logo i{display:block;width:15px;height:15px;border-radius:50%;background:#fff;}
.gn .brand{letter-spacing:0;}
.gn .brand b,.gm-brand b{font-weight:600;letter-spacing:.04em;}
.gn .menu-btn{display:none;}
.gm{position:fixed;inset:0;z-index:60;background:var(--nav-solid);color:var(--nav-text);
  padding:0 max(22px,env(safe-area-inset-right)) 40px max(22px,env(safe-area-inset-left));
  opacity:0;visibility:hidden;transition:opacity .25s,visibility .25s;overflow:auto;}
.gm.open{opacity:1;visibility:visible;}
.gm-head{height:48px;display:flex;align-items:center;justify-content:space-between;}
.gm-head a,.gm-head button{color:var(--nav-text);height:48px;display:flex;align-items:center;}
.gm-brand{font-size:12px;opacity:.8;}
.gm ul{list-style:none;margin:18px 0 0;padding:0 12px;}
.gm li a{display:block;color:var(--nav-text);font-size:28px;font-weight:600;letter-spacing:.007em;line-height:1.14;padding:10px 0;text-decoration:none;}
.gm li a[aria-current="page"]{color:#fff;}
.icon-btn{appearance:none;-webkit-appearance:none;border:0;background:none;padding:0 0 0 12px;margin:0;cursor:pointer;min-width:44px;justify-content:flex-end;}
.icon-btn svg{display:block;}

@media (prefers-reduced-transparency:reduce){.gn{background:var(--nav-solid);-webkit-backdrop-filter:none;backdrop-filter:none;}}
@media (max-width:833px){
  .gn-in{height:48px;}
  .gn .item,.gn .brand{display:none;}
  .gn .mbrand{display:flex;}
  .gn .menu-btn{display:flex;}
}
.gn .mbrand{display:none;font-size:12px;}
.gn .mbrand b{font-weight:600;letter-spacing:.04em;}

/* =====================================================================
   generator
   ===================================================================== */
.page{max-width:1180px;margin:0 auto;padding:28px max(var(--edge),env(safe-area-inset-right)) 32px max(var(--edge),env(safe-area-inset-left));}
.frame{background:var(--frame);border-radius:var(--r-frame);padding:14px;}
.board{display:grid;gap:var(--gap);grid-template-columns:repeat(6,minmax(0,1fr));
  grid-template-areas:"src src dep dep dir col" "src src dep dep gen gen" "ani ani ani ani dld dld";}
.tile{position:relative;overflow:hidden;display:flex;flex-direction:column;align-items:flex-start;
  padding:var(--pad);border-radius:var(--r-tile);border:0;margin:0;font:inherit;font-size:14px;letter-spacing:-.01em;text-align:left;
  color:var(--t-ink);background:var(--t-light);box-shadow:inset 0 0 0 1px var(--t-line);
  container-type:inline-size;min-width:0;min-height:0;appearance:none;-webkit-appearance:none;touch-action:manipulation;
  transition:background-color .25s,color .25s,transform .12s;}
.tile.dark{background:var(--t-dark);color:var(--t-paper);box-shadow:inset 0 0 0 1px var(--t-line-d);}
.tile.dark .label,.tile.dark .note{color:var(--t-paper-2);}
.hero{border-radius:var(--r-hero);aspect-ratio:1/1;}
.sq{aspect-ratio:1/1;}
.big{font-size:clamp(18px,14cqi,30px);font-weight:600;letter-spacing:-.02em;line-height:1.08;font-variant-numeric:tabular-nums;max-width:100%;overflow-wrap:anywhere;}
.label{margin-top:6px;font-size:clamp(12px,7cqi,14px);line-height:1.28;color:var(--t-ink-2);}
.note{margin-top:auto;padding-top:12px;font-size:clamp(12px,6cqi,12.5px);line-height:1.33;color:var(--t-ink-2);}
.note:empty{padding-top:0;}
.idx{position:absolute;right:var(--pad);top:var(--pad);z-index:3;font-size:11px;font-weight:600;line-height:1;min-width:24px;height:24px;
  display:flex;align-items:center;justify-content:center;border-radius:999px;color:var(--t-ink-2);box-shadow:inset 0 0 0 1px var(--t-line);}
.tile.dark .idx{color:var(--t-paper-2);box-shadow:inset 0 0 0 1px var(--t-line-d);}
.src{grid-area:src;}.dep{grid-area:dep;}.dir{grid-area:dir;}.col{grid-area:col;}.gen{grid-area:gen;}.dld{grid-area:dld;}.ani{grid-area:ani;}

.src{background:var(--t-mid);cursor:pointer;}
.src:hover,.src.over{background:var(--t-mid-hover);}
.src .hint .big{font-size:clamp(22px,8cqi,34px);}
.src .hint .label{margin-top:10px;}
.src img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:none;}
.chips{position:absolute;left:var(--pad);right:var(--pad);bottom:var(--pad);display:flex;gap:6px;align-items:center;z-index:4;min-width:0;}
.chip{background:rgba(29,29,31,.86);color:#f5f5f7;font:inherit;font-size:12px;font-weight:500;letter-spacing:-.01em;padding:0 12px;height:30px;
  display:inline-flex;align-items:center;border:0;border-radius:999px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.14);
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:100%;font-variant-numeric:tabular-nums;flex:0 0 auto;}
.chip.name{flex:0 1 auto;min-width:48px;}
.chip.push{margin-left:auto;}
button.chip{cursor:pointer;}

.dep{background:var(--t-dark);color:var(--t-paper);box-shadow:inset 0 0 0 1px var(--t-line-d);user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;}
.dep canvas,.dep img,.dep video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:none;}
.dep #compare{display:block;opacity:0;transition:opacity .15s;pointer-events:none;}
.dep.cmp #compare{opacity:1;}
.dep .placeholder{position:absolute;inset:0;color:var(--t-paper-2);font-size:13px;}
.dep .placeholder .ptext{position:absolute;left:var(--pad);bottom:var(--pad);right:var(--pad);}
.cross{position:absolute;left:50%;top:50%;width:34%;aspect-ratio:1/1;transform:translate(-50%,-50%);}
.cross::before,.cross::after{content:"";position:absolute;background:rgba(255,255,255,.18);}
.cross::before{left:0;right:0;top:50%;height:1px;}
.cross::after{top:0;bottom:0;left:50%;width:1px;}
.scanline{position:absolute;left:0;right:0;top:0;height:2px;opacity:0;pointer-events:none;background:rgba(255,255,255,.85);}
.dep.scanning .scanline{animation:scan 1.15s ease-in-out infinite;}
@keyframes scan{0%{top:0;opacity:0;}12%{opacity:1;}88%{opacity:1;}100%{top:100%;opacity:0;}}
.dep .chips{display:none;}
.dep.ready .chips{display:flex;}
.dep.ready{cursor:pointer;}

.toggle{cursor:pointer;}
.toggle:hover{background:var(--t-light-hover);}
.toggle input{position:absolute;opacity:0;width:1px;height:1px;pointer-events:none;margin:0;}
.toggle.on{background:var(--t-dark);color:var(--t-paper);box-shadow:inset 0 0 0 1px var(--t-line-d);}
.toggle.on:hover{background:var(--t-dark-hover);}
.toggle.on .label,.toggle.on .note{color:var(--t-paper-2);}
.toggle:active{transform:scale(.985);}
.toggle:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:3px;}
.hit{position:absolute;inset:0;z-index:2;appearance:none;-webkit-appearance:none;border:0;padding:0;margin:0;background:none;cursor:pointer;border-radius:inherit;font:inherit;color:inherit;}
.wheel{position:absolute;right:calc(var(--pad) - 9px);top:calc(var(--pad) - 9px);width:44px;height:44px;z-index:4;
  appearance:none;-webkit-appearance:none;border:0;padding:0;cursor:pointer;background:none;display:flex;align-items:center;justify-content:center;}
.wheel::before{content:"";width:26px;height:26px;border-radius:50%;
  background:radial-gradient(circle at 50% 50%,#fff 0%,#fff 34%,rgba(255,255,255,0) 37%),conic-gradient(from 90deg,#f5484a,#f5c542,#5fcf6a,#3fc7d4,#4a7bf0,#a45ef0,#f5484a);
  box-shadow:inset 0 0 0 1px rgba(0,0,0,.28);}
.col.on .wheel::before{box-shadow:inset 0 0 0 1px rgba(255,255,255,.5),0 0 0 3px rgba(255,255,255,.14);}
.wheel:active::before{transform:scale(.92);}

.gen{background:var(--t-dark);color:var(--t-paper);cursor:pointer;box-shadow:inset 0 0 0 1px var(--t-line-d);}
.gen .big{font-size:clamp(22px,9cqi,36px);}
.gen .label,.gen .note{color:var(--t-paper-2);}
.gen:hover:not(:disabled){background:var(--t-dark-hover);}
.gen:active:not(:disabled){transform:scale(.99);}
.gen:disabled:not(.busy){opacity:.45;cursor:not-allowed;}
.gen.busy{cursor:progress;}
.fill{position:absolute;left:0;right:0;bottom:0;height:0;background:#3a3a3c;transition:height .3s;z-index:0;}
.gen > *:not(.fill):not(.idx),.ani > .big,.ani > .label,.ani > .note{position:relative;z-index:1;pointer-events:none;}
.gen.busy.indet .fill,.ani.busy.indet .fill{height:100%;animation:breathe 1.8s ease-in-out infinite;}
@keyframes breathe{0%,100%{opacity:.35;}50%{opacity:1;}}

.dld{cursor:pointer;}
.dld:hover:not(:disabled){background:var(--t-dark-hover);}
.dld:active:not(:disabled){transform:scale(.985);}
.dld:disabled{opacity:.42;cursor:not-allowed;}
.dld .big{font-size:clamp(18px,11cqi,28px);}

.ani{min-height:150px;}
.ani .big{font-size:clamp(22px,7cqi,36px);}
.ani.off{opacity:.55;}
.ani.off .hit{cursor:not-allowed;}
.ani.done,.ani.busy{background:var(--t-dark);color:var(--t-paper);box-shadow:inset 0 0 0 1px var(--t-line-d);}
.ani.done .label,.ani.done .note,.ani.busy .label,.ani.busy .note{color:var(--t-paper-2);}
.seg{position:absolute;right:var(--pad);top:var(--pad);z-index:4;display:flex;padding:2px;gap:2px;border-radius:999px;
  background:rgba(118,118,128,.14);box-shadow:inset 0 0 0 1px var(--t-line);}
.ani.done .seg,.ani.busy .seg{background:rgba(118,118,128,.24);box-shadow:inset 0 0 0 1px var(--t-line-d);}
.seg button{appearance:none;-webkit-appearance:none;border:0;background:none;font:inherit;font-size:13px;font-weight:500;color:inherit;
  opacity:.72;min-width:52px;height:32px;padding:0 12px;border-radius:999px;cursor:pointer;font-variant-numeric:tabular-nums;}
.seg button.on{opacity:1;background:#fff;color:#1d1d1f;box-shadow:0 1px 3px rgba(0,0,0,.12),inset 0 0 0 1px rgba(0,0,0,.14);}
.seg button:disabled{cursor:not-allowed;}

.err{grid-column:1/-1;display:none;padding:16px var(--pad);font-size:14px;line-height:1.45;align-items:center;gap:12px;}
.err.on{display:flex;}
.err button{margin-left:auto;}

.status{display:flex;gap:10px;align-items:center;justify-content:center;flex-wrap:wrap;margin-top:14px;font-size:12px;letter-spacing:-.01em;color:var(--text-2);font-variant-numeric:tabular-nums;}
.status .dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:#aeaeb2;margin-right:6px;vertical-align:1px;}
.status .dot.live{background:var(--accent);animation:pulse 1.2s ease-in-out infinite;}
.status .sep{opacity:.4;}
@keyframes pulse{0%,100%{opacity:1;}50%{opacity:.3;}}
.tile:focus-visible{outline:2px solid var(--accent);outline-offset:3px;}

/* colour picker */
.cp{position:fixed;z-index:70;width:268px;background:#1d1d1f;border-radius:16px;padding:12px;letter-spacing:-.01em;
  box-shadow:0 16px 40px rgba(0,0,0,.34),inset 0 0 0 1px rgba(255,255,255,.12);color:#f5f5f7;font-size:12px;line-height:1.35;}
.cp-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;}
.cp-title{font-weight:600;font-size:13px;}
.cp-x{appearance:none;border:0;background:none;color:#a1a1a6;font-size:15px;line-height:1;cursor:pointer;width:32px;height:32px;margin-right:-8px;}
.cp-x:hover{color:#fff;}
.cp-sv{position:relative;height:124px;border-radius:8px;cursor:crosshair;touch-action:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);}
.cp-hue{position:relative;height:14px;border-radius:999px;margin-top:12px;cursor:pointer;touch-action:none;
  background:linear-gradient(90deg,#f00,#ff0,#0f0,#0ff,#00f,#f0f,#f00);box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);}
.cp-dot{position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.6);transform:translate(-50%,-50%);pointer-events:none;}
.cp-hue .cp-dot{top:50%;}
.cp-hex{display:flex;align-items:center;gap:3px;background:#2c2c2e;box-shadow:inset 0 0 0 1px rgba(255,255,255,.1);border-radius:8px;padding:0 10px;height:34px;margin-top:10px;}
.cp-hex input{appearance:none;border:0;background:none;color:#f5f5f7;font:inherit;width:100%;min-width:0;text-transform:uppercase;letter-spacing:.06em;outline:none;font-size:16px;transform:scale(.8);transform-origin:left center;}
.cp-lab{margin:12px 0 6px;color:#a1a1a6;}
.cp-strips{display:flex;flex-direction:column;gap:5px;}
.cp-strips button{appearance:none;-webkit-appearance:none;border:0;height:34px;border-radius:8px;padding:0 12px;cursor:pointer;display:flex;align-items:center;
  font:inherit;font-size:12px;font-weight:600;text-align:left;box-shadow:inset 0 0 0 1px rgba(255,255,255,.16);}
.cp-strips button.sel{box-shadow:inset 0 0 0 1px rgba(255,255,255,.3),0 0 0 2px var(--accent);}
.cp-pre{display:grid;grid-template-columns:repeat(3,1fr);gap:6px;}
.cp-pre button{height:30px;border-radius:8px;border:0;padding:0;cursor:pointer;box-shadow:inset 0 0 0 1px rgba(255,255,255,.14);}
.cp-pre button.sel{box-shadow:inset 0 0 0 1px rgba(255,255,255,.2),0 0 0 2px var(--accent);}

/* =====================================================================
   webcam
   ===================================================================== */
.cam{display:grid;gap:var(--gap);grid-template-columns:repeat(6,minmax(0,1fr));}
.cam-stage{grid-column:1/-1;position:relative;overflow:hidden;border-radius:var(--r-hero);background:#0b0b0c;aspect-ratio:16/9;max-height:64vh;width:100%;box-shadow:inset 0 0 0 1px var(--t-line-d);}
.cam-stage canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;display:none;}
.cam-stage video{position:absolute;right:14px;top:14px;width:22%;max-width:220px;border-radius:14px;z-index:3;display:none;box-shadow:0 0 0 1px rgba(255,255,255,.2);background:#000;object-fit:cover;aspect-ratio:4/3;}
.cam-stage.live canvas{display:block;}
.cam-stage.live.pip video{display:block;}
.cam-stage.mirror canvas,.cam-stage.mirror video{transform:scaleX(-1);}
.cam-empty{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px;color:var(--t-paper);}
.cam-empty .big{font-size:clamp(26px,4vw,40px);}
.cam-empty .label{color:var(--t-paper-2);max-width:440px;margin-top:10px;font-size:15px;}
.cam-stage.live .cam-empty{display:none;}
.cam-stage .chips{display:none;}
.cam-stage.live .chips{display:flex;}
.cam-btn{min-height:92px;justify-content:space-between;cursor:pointer;}
.cam-btn .big{font-size:clamp(16px,9cqi,22px);}
.cam-btn:disabled{opacity:.42;cursor:not-allowed;}
.cam-btn.go{grid-column:span 2;}
.cam-note{grid-column:1/-1;text-align:center;font-size:12px;color:var(--t-paper-2);padding:4px 0 2px;}

/* =====================================================================
   pages (how it works, privacy)
   ===================================================================== */
.doc{max-width:980px;margin:0 auto;padding:0 max(var(--edge),env(safe-area-inset-right)) 70px max(var(--edge),env(safe-area-inset-left));}
.doc-hero{text-align:center;padding:84px 0 56px;max-width:820px;margin:0 auto;}
.doc-hero h1{font-size:clamp(40px,6.4vw,64px);font-weight:600;letter-spacing:-.015em;line-height:1.06;margin:0;}
.doc-hero p{font-size:clamp(19px,2.2vw,24px);line-height:1.38;letter-spacing:.005em;color:var(--text-2);margin:18px auto 0;max-width:680px;font-weight:400;}
.more{display:flex;gap:28px;justify-content:center;flex-wrap:wrap;margin-top:24px;font-size:17px;}
.more a::after{content:" \203A";}
.doc h2{font-size:clamp(28px,3.4vw,40px);font-weight:600;letter-spacing:-.005em;line-height:1.1;margin:0 0 14px;}
.doc h3{font-size:19px;font-weight:600;letter-spacing:-.01em;line-height:1.2;margin:0 0 8px;}
.doc section{padding:56px 0 0;scroll-margin-top:64px;}
.doc p{margin:0 0 14px;color:var(--text);}
.doc .sub{font-size:19px;line-height:1.42;color:var(--text-2);max-width:720px;margin-bottom:24px;}
.doc b{font-weight:600;}
.cards{display:grid;gap:16px;grid-template-columns:repeat(3,minmax(0,1fr));}
.cards.two{grid-template-columns:repeat(2,minmax(0,1fr));}
.cards.four{grid-template-columns:repeat(4,minmax(0,1fr));}
.card{background:var(--surface);border-radius:var(--r-card);padding:30px 28px;box-shadow:inset 0 0 0 1px var(--hair);}
.card .step{font-size:12px;font-weight:600;letter-spacing:.02em;color:var(--text-2);margin-bottom:10px;display:block;}
.card p{font-size:15px;line-height:1.47;color:var(--text-2);margin:0;}
.card p + p{margin-top:10px;}
.card ol{margin:6px 0 0;padding-left:20px;font-size:15px;line-height:1.47;color:var(--text-2);}
.card li{margin:0 0 8px;}
.card li b,.card p b{color:var(--text);}
.card.wide{grid-column:1/-1;}
.specs{background:var(--surface);border-radius:var(--r-card);padding:6px 28px;box-shadow:inset 0 0 0 1px var(--hair);}
.specs div{display:grid;grid-template-columns:minmax(120px,28%) 1fr;gap:18px;padding:18px 0;border-top:1px solid var(--hair);font-size:15px;line-height:1.47;}
.specs div:first-child{border-top:0;}
.specs dt{color:var(--text-2);margin:0;}
.specs dd{margin:0;color:var(--text);}
.fineprint{font-size:12px;line-height:1.5;color:var(--text-2);margin-top:14px;}

/* =====================================================================
   global footer
   ===================================================================== */
.gf{background:var(--foot-bg);color:var(--foot-text);font-size:12px;line-height:1.33;letter-spacing:-.01em;}
.gf-in{max-width:980px;margin:0 auto;padding:20px max(22px,env(safe-area-inset-right)) max(21px,env(safe-area-inset-bottom)) max(22px,env(safe-area-inset-left));}
.gf-note{margin:0;padding:17px 0 11px;border-bottom:1px solid var(--foot-hair);}
.gf-dir{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0 30px;padding:20px 0 12px;}
.gf-dir h3{font-size:12px;font-weight:600;color:var(--foot-head);margin:0 0 .8em;}
.gf-dir ul{list-style:none;margin:0 0 24px;padding:0;}
.gf-dir li{margin:0 0 .8em;}
.gf-dir a,.gf-btn{color:var(--foot-link);}
.gf-btn{appearance:none;-webkit-appearance:none;border:0;background:none;padding:0;margin:0;font:inherit;letter-spacing:inherit;cursor:pointer;text-align:left;}
.gf-btn:hover{text-decoration:underline;}
.gf-more{margin:0;padding:6px 0 18px;border-bottom:1px solid var(--foot-hair);}
.gf-legal{display:flex;flex-wrap:wrap;align-items:center;gap:6px 0;padding:14px 0 0;}
.gf-legal .copy{margin-right:30px;}
.gf-legal .links{display:flex;flex-wrap:wrap;}
.gf-legal .links a{color:var(--foot-link);padding:0 10px;border-left:1px solid var(--foot-hair);line-height:1;}
.gf-legal .links a:first-child{padding-left:0;border-left:0;}
.gf-legal .sig{margin-left:auto;color:var(--foot-link);}
.gf a[target]::after{content:" \2197";}

/* =====================================================================
   responsive
   ===================================================================== */
@media (max-width:980px){
  .board{grid-template-columns:repeat(4,minmax(0,1fr));grid-template-areas:"src src dep dep" "dir col gen gen" "ani ani dld dld";}
  .cards.four{grid-template-columns:repeat(2,minmax(0,1fr));}
}
@media (max-width:833px){
  .cp{left:10px !important;right:10px;bottom:10px !important;top:auto !important;width:auto;}
  .cards,.cards.two{grid-template-columns:1fr;}
  .gf-dir{grid-template-columns:repeat(2,minmax(0,1fr));}
  .gf-legal .sig{margin-left:0;width:100%;}
  .cam{grid-template-columns:repeat(2,minmax(0,1fr));}
  .cam-stage{aspect-ratio:3/4;max-height:66vh;}
  .cam-btn.go{grid-column:1/-1;}
  .doc-hero{padding:56px 0 36px;}
  .doc section{padding-top:44px;}
  .specs div{grid-template-columns:1fr;gap:4px;}
}
@media (max-width:620px){
  :root{--r-frame:26px;--r-hero:20px;--r-tile:18px;--gap:8px;--pad:14px;--edge:16px;--r-card:22px;}
  .page{padding-top:14px;}
  .frame{padding:8px;}
  .board{grid-template-columns:repeat(2,minmax(0,1fr));grid-template-areas:"src src" "dep dep" "gen dld" "dir col" "ani ani";}
  .src{aspect-ratio:16/10;}
  .sq{aspect-ratio:auto;min-height:96px;}
  .gen,.dld{min-height:88px;}
  .gen .big,.dld .big{font-size:21px;}
  .big{font-size:19px;}
  .label{font-size:12px;margin-top:4px;}
  .note{font-size:12px;padding-top:8px;}
  .ani{min-height:122px;}
  .ani .big{font-size:22px;}
  .seg button{min-width:48px;padding:0 10px;}
  .chip{font-size:12px;height:30px;padding:0 10px;}
  .cam-btn{min-height:76px;}
  .cards.four{grid-template-columns:1fr;}
  .card{padding:24px 22px;}
  .specs{padding:4px 22px;}
}
@media (prefers-reduced-motion:reduce){
  .dep.scanning .scanline{animation:none;opacity:.6;top:50%;}
  .gen.busy.indet .fill,.ani.busy.indet .fill,.status .dot.live{animation:none;opacity:.7;}
  *{transition:none !important;}
}
.gn .menu-btn{color:var(--nav-text);height:44px;align-items:center;}
.gm-head .icon-btn{color:var(--nav-text);}
@media (max-width:833px){.gn .logo{min-width:44px;}.gn .menu-btn{height:48px;}}
/* order-sensitive overrides */
.doc .doc-hero p{color:var(--text-2);}
@media (max-width:833px){.gn .mbrand{display:flex;}}
