/* ============================================================================
   Frame — generator workspace UI
   SINGLE SOURCE OF TRUTH for the generator tool UI, shared by the homepage
   and all 5 dedicated generator pages (WhatsApp, WiFi, vCard, PDF, Menu).
   Header/branding styling now lives in theme-light.css (shared by every page,
   generator or not) — see "SITE-WIDE HEADER" near the end of that file.

   Consolidated: the previous version had grown into three appended override
   layers with 20 selectors declared 2–4 times each. Every selector below is
   now declared exactly once, in document order:

     1  tokens & layout        9  advanced
     2  hero                  10  preview panel
     3  step headers          11  how-to section
     4  QR type toolbar       12  trust strip
     5  inputs & accordions   13  mobile      14  motion
     6  colours / logo        15  new SEO/content sections
     7  shape & frames        16  section rhythm (alternating bg)
     8  styles / templates

   Loaded after theme-light.css, before frame-navigation-v3.css, on the
   homepage and all 5 dedicated generator pages. Sections 2, 3, 11, 12, 15, 16
   (hero/how-to/trust-strip/SEO content/section rhythm) apply only where that
   markup exists (homepage today) — safe no-ops elsewhere. */

/* ---------------------------------------------------- 1. tokens & layout */
:root{
  color-scheme:light;                 /* stops the OS painting native selects dark */
  --ws-ink:#0F2233;                   /* primary text — the H1 navy */
  --ws-ink-2:#47586B;                 /* secondary */
  --ws-line:#E1E7EE;                  /* hairlines — separators, not boxes */
  --ws-line-strong:#CCD5DF;           /* input borders */
  --ws-surface:#F7F9FB;               /* preview column / quiet hover fills */
  --ws-hover:#F2F5F8;                 /* row + tab hover */
  --ws-dim:#5B6473;                   /* helper text, ~5:1 on white */
  --ws-teal:#0E7F78;                  /* brand teal, text-safe (4.6:1+ on the band) */
  --ws-surface-2:#E8EEF4;             /* accordion header rows — one step darker, so closed sections read as distinct rows, not blank space */
  --ws-radius:12px;
  --ws-navy:#0F2233;                  /* dark-section surface, matches howto */
  --ws-mist:#EEF3F8;                  /* soft light blue-gray surface, section rhythm */
  --ws-teal-wash:#EAF7F5;             /* faint turquoise-tinted accent surface */
}

@media (min-width:901px){
  .hero .wrap{max-width:min(85vw,1400px)!important;padding:0 24px!important;}
  .hero-head{max-width:820px;}
  .studio{
    /* 440px floor is deliberate, not arbitrary: at 1024px viewport (the
       narrowest width this layout is checked against) a 35% split with a
       370px floor pins the preview column at 370px — too tight for a
       genuinely large QR without the nested .frame-inner/canvas (fixed px,
       see section 10) silently overflowing their shrunk parent. 440px
       guarantees enough room at 1024/1366/1440 alike. */
    grid-template-columns:minmax(0,58fr) minmax(440px,42fr)!important;
    grid-template-areas:"toolbar toolbar" "controls preview" "customize preview"!important;
    /* plain white: the preview column paints its own tint (section 10). The
       old fixed 440px gradient split drifted off the real column edge
       whenever the 42fr column grew past 440px, leaving a white strip. */
    background:#fff!important;
    border-radius:14px!important;
  }
  .type-toolbar{grid-area:toolbar;}
  .controls{padding:22px 30px 10px!important;border-right:1px solid var(--ws-line)!important;}
  .customize{padding:0 30px 26px!important;border-right:1px solid var(--ws-line)!important;}
}
/* One application surface: a single hairline border and one soft, low shadow
   (replaces the heavy lift it needed against the old saturated band). The
   left column — content AND customise — is one white surface; only the
   preview column is tinted, so the page reads as "configure | output". */
.studio{
  border:1px solid var(--ws-line)!important;
  box-shadow:0 1px 2px rgba(15,34,51,.04),0 12px 32px -14px rgba(15,34,51,.14)!important;
}
.customize{background:#fff!important;border-radius:0 0 14px 14px;}
@media (min-width:901px){
  /* Two-column layout: .customize only occupies the bottom-left grid cell,
     so only that corner sits at the card's actual edge. */
  .customize{border-radius:0 0 0 14px;}
}
/* .studio ships overflow:hidden in the base stylesheet (it rounds the corners
   by clipping). Visible here, at every width, so the More dropdown below can
   overlay the fields instead of being clipped or forced to push them down —
   the corners that used to rely on that clip now round themselves explicitly
   instead (.type-toolbar's own top radius above, .customize's bottom radius
   here; .controls/.preview never touch the card's outer edge). */
.studio{overflow:visible!important;}

/* ------------------------------------------------------------- 2. hero */
@media (min-width:901px){
  body:has(.hero) .hero{padding-top:18px!important;padding-bottom:40px!important;}
  .hero-badges{margin:12px 0 18px!important;}
}
@media (max-width:900px){
  body:has(.hero) .hero{padding-bottom:24px!important;}
}
.hero::after{display:none!important;}          /* hard section cut, no fade */
.hero::before{bottom:0!important;}              /* band ends flush with the hero, no overhang into the next section —
  the gap above is real padding on .hero itself, not a fade, so the cut stays sharp */

/* The band behind header + hero (theme-light.css paints it saturated
   teal->blue). Toned down to a pale blue-grey with only a faint teal hint at
   the very top, so the white workspace is the brightest, most defined thing
   on screen. Teal survives as an accent (tagline, trust icons), not a field. */
.hero::before{background:linear-gradient(180deg,#E3F3F1 0,#EDF3F7 260px,#F1F5F8 100%)!important;}
/* The header is its own opaque surface in both states. theme-light.css made
   it transparent at the top (the band underneath stopped 10px short of the
   68px header, leaving a light strip) and 94% white + saturate/blur once
   scrolled — which let the QR preview's dark modules bleed through as a grey
   smudge between FAQ and the CTA. Solid, no backdrop filter, one hairline. */
body:has(.hero) .nav,body:has(.hero) .nav.scrolled{
  background:#FAFBFC!important;
  backdrop-filter:none!important;-webkit-backdrop-filter:none!important;
  border-bottom:1px solid rgba(15,34,51,.08)!important;
}
body:has(.hero) .nav-links > a:hover{background:rgba(15,34,51,.05)!important;}
body:has(.hero) .nav.scrolled .nav-links > a:hover{background:var(--surface-2)!important;}
.hero-head .eyebrow{background:#fff!important;border:1px solid var(--ws-line)!important;color:#0B4A57!important;}
.hero-head .eyebrow::before{background:var(--ws-teal)!important;box-shadow:none!important;animation:none!important;}
/* the white accent word was only legible on the saturated band */
.hero-head .hero-tagline .accent{color:var(--ws-teal)!important;}

/* Trust line: three plain statements with small teal icons instead of a third
   row of white pills — same claims, far less competition with the tool. */
.hero .hero-badges{gap:8px 22px!important;margin:16px 0 22px!important;}
.hero .hero-badge,.hero .hero-badge.alt{
  background:transparent!important;border:0!important;box-shadow:none!important;
  padding:0!important;border-radius:0!important;animation:none!important;
  gap:7px!important;font-size:13.5px!important;font-weight:500!important;color:#33475A!important;
}
.hero .hero-badge:hover{transform:none!important;box-shadow:none!important;}
.hero .hero-badge svg{width:15px!important;height:15px!important;color:var(--ws-teal);}
@media (max-width:900px){
  .hero .hero-badges{gap:6px 16px!important;margin:12px 0 16px!important;}
  .hero .hero-badge,.hero .hero-badge.alt{font-size:13px!important;padding:0!important;}
}

/* ---------------------------------------------------- 3. step headers */
.step-head,.cz-head{
  display:flex!important;align-items:center!important;gap:10px!important;
  font-family:'Manrope','Inter',sans-serif!important;
  font-size:15px!important;font-weight:700!important;color:var(--ws-ink)!important;
}
.step-head{margin-bottom:10px;}
.cz-head{padding:20px 0 8px!important;border-top:1px solid var(--ws-line)!important;margin-top:6px;}
/* The two steps are a real sequence, so the numbers stay — but as a quiet
   tinted badge, leaving solid blue to the one primary action (Download). */
.step-num{
  width:22px;height:22px;flex-shrink:0;border-radius:6px;
  background:var(--accent-soft);color:var(--accent);
  font-family:'Inter',sans-serif;font-size:12px;font-weight:700;
  display:inline-flex;align-items:center;justify-content:center;
}
.cz-head-note{margin-left:auto;font-family:'Inter',sans-serif!important;font-size:12.5px!important;color:var(--ws-dim)!important;font-weight:400!important;letter-spacing:0!important;}

/* ------------------------------------------------ 4. QR type toolbar */
/* A full-width bar across the TOP EDGE of the whole white board — spans
   both columns on desktop via grid-area:toolbar (see section 1) — instead
   of being tucked inside the left column. This is what makes it read as
   the tool's primary nav, the way QRCode Monkey's type row does. .studio
   has overflow:hidden + border-radius, so this bar's top corners clip to
   match automatically; no manual rounding needed here. */
.type-toolbar{
  position:relative;min-width:0!important;   /* grid item default is min-width:auto —
    without this override, the 13 non-wrapping tabs impose their full min-content
    width on the "toolbar" grid track, forcing .studio wide at every viewport and
    defeating .type-tabs' own overflow-x:auto scrolling entirely. */
  background:#fff!important;                /* part of the same white card now, not a
    separate strip — only a hairline divider marks it off from the fields below */
  border-bottom:1px solid var(--ws-line)!important;
  border-radius:14px 14px 0 0;               /* .studio switches to overflow:visible
    below (needed so the More dropdown can overlay instead of pushing content down),
    so this top corner no longer clips automatically and must round itself. */
  padding:10px 22px!important;
}
.type-tabs{
  display:flex!important;flex-wrap:nowrap!important;gap:4px!important;  /* base .type-tabs
    in frame.css is flex-wrap:wrap — unless overridden, "More" drops to its own row the
    moment the 13 tabs' natural width exceeds the toolbar; nowrap + scroll keeps one row */
  background:transparent!important;border:0!important;padding:0!important;margin:0!important;
  overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch;
}
.type-tabs::-webkit-scrollbar{display:none}
/* Tabs read as a quiet segmented row: no resting border or fill, text + icon
   only. Selection is a tinted accent chip — unmistakable, but no heavier than
   it needs to be (the old solid-navy chip + drop shadow outweighed the tool). */
.type-tab{
  flex:0 0 auto!important;
  display:inline-flex!important;align-items:center!important;gap:6px!important;
  background:transparent!important;border:1px solid transparent!important;
  border-radius:8px!important;padding:0 10px!important;min-height:36px!important;
  font-size:12.5px!important;font-weight:500!important;color:var(--ws-ink-2)!important;
  white-space:nowrap;box-shadow:none!important;cursor:pointer;
}
.type-tab-ico{width:15px;height:15px;flex-shrink:0;display:inline-flex;color:inherit;opacity:.85;}
.type-tab-ico svg{width:100%;height:100%;display:block;}
.type-tab:hover{background:var(--ws-hover)!important;color:var(--ws-ink)!important;}
.type-tab:focus-visible{outline:2px solid var(--accent)!important;outline-offset:1px;}
.type-tab.active{
  background:var(--accent-soft)!important;color:#1D4ED8!important;
  border-color:#CFDCFD!important;font-weight:600!important;box-shadow:none!important;
}
.type-tab.active .type-tab-ico{opacity:1;}
.type-tab-more{
  /* Deliberately a plain last flow item now, not position:sticky — sticky
     pinned it to the scroll viewport's right edge even at scrollLeft:0,
     which visually overlapped/covered whichever tab happened to sit there
     (PDF, at common desktop widths). A normal trailing item avoids that
     collision entirely and still satisfies "More sits at the end of the row".
     A hairline outline marks it as a menu trigger rather than a type. */
  color:var(--ws-ink)!important;border-color:var(--ws-line)!important;
  font-weight:600!important;gap:7px!important;margin-left:4px;
}
.type-tab-more .caret{font-size:10px;opacity:.7;transition:transform .2s ease;}
.type-toolbar.open .type-tab-more{background:var(--ws-hover)!important;border-color:var(--ws-line-strong)!important;}
.type-toolbar.open .type-tab-more .caret{transform:rotate(180deg);}

/* "More" dropdown — a true overlay, positioned absolutely under the toolbar.
   .studio is overflow:visible (see section 1) precisely so this can extend
   past the toolbar without being clipped or forced to push .controls/.preview
   down. 200ms open, matching the requested 180-220ms range; a touch faster
   closing feels snappier without being abrupt. */
.type-more-menu{
  position:absolute;top:100%;left:28px;right:28px;z-index:40;
  margin-top:-1px;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:16px 28px;
  background:#fff;border:1px solid var(--ws-line);border-radius:14px;
  box-shadow:0 16px 36px rgba(15,34,51,.16);padding:20px 22px;
  opacity:0;visibility:hidden;pointer-events:none;
  transform:translateY(-6px);
  transition:opacity .2s cubic-bezier(.22,1,.36,1),transform .2s cubic-bezier(.22,1,.36,1),visibility .2s;
}
.type-toolbar.open .type-more-menu{
  opacity:1;visibility:visible;pointer-events:auto;transform:none;
  transition:opacity .18s ease,transform .18s ease,visibility .18s;
}
.type-more-col{min-width:0;display:flex;flex-direction:column;gap:3px;}
.type-more-col > b{
  font-family:'Inter',sans-serif;font-size:12.5px;font-weight:600;
  color:var(--ws-dim);margin-bottom:4px;padding-left:11px;
}
.type-more-item{
  width:100%!important;justify-content:flex-start!important;
  min-height:37px!important;padding:0 11px!important;border-radius:8px!important;
  font-size:13px!important;font-weight:500!important;color:var(--ws-ink)!important;
  background:transparent!important;border-color:transparent!important;
}
.type-more-item:hover{background:var(--ws-surface)!important;border-color:var(--ws-line)!important;}

/* --------------------------------------------- 5. inputs & accordions */
.controls .field > label,.cz-body .field > label,.range-row > label{
  display:block;font-size:13.5px!important;font-weight:600!important;
  color:var(--ws-ink)!important;margin-bottom:7px!important;letter-spacing:0!important;
}
.controls input[type="text"],.controls input[type="url"],.controls input[type="email"],
.controls input[type="tel"],.controls textarea,.controls select,
.cz-body input[type="text"],.cz-body input[type="url"],.cz-body select,.res-select{
  min-height:42px!important;padding:10px 13px!important;font-size:14px!important;
  border:1px solid var(--ws-line-strong)!important;border-radius:8px!important;
  background:#fff!important;color:var(--ws-ink)!important;
  transition:border-color .15s ease,box-shadow .15s ease;
}
.controls textarea{min-height:78px!important;}
.controls input:hover,.controls select:hover,.controls textarea:hover,
.cz-body input[type="text"]:hover,.cz-body select:hover,.res-select:hover{border-color:#B3BFCC!important;}
.controls input:focus,.controls select:focus,.controls textarea:focus,
.cz-body input:focus,.cz-body select:focus,.res-select:focus{
  border-color:var(--accent)!important;box-shadow:0 0 0 3px rgba(44,95,246,.13)!important;
}
.controls input::placeholder,.controls textarea::placeholder{color:#8792A0!important;}
.now-creating{font-size:13px!important;color:var(--ws-dim)!important;margin-bottom:16px!important;}
.now-creating strong,.now-creating b{color:var(--ws-ink)!important;font-weight:600!important;}
.controls .field{margin-bottom:16px!important;}

/* native select popups must follow the light theme */
select,.res-select{
  -webkit-appearance:none;appearance:none;color-scheme:light!important;
  background-image:url("data:image/svg+xml;charset=utf8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2347586B' stroke-width='2.5' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E")!important;
  background-repeat:no-repeat!important;background-position:right 14px center!important;
  padding-right:42px!important;
}
select option{background:#fff!important;color:var(--ws-ink)!important;}
/* Belt-and-suspenders for the print-resolution dropdown specifically: frame.css
   (the original dark theme) still carries `.res-select option{background:#111318}`
   with no !important. The rules above already beat it on importance, but native
   <option> popup rendering is inconsistent enough across browsers that it's
   worth pinning with hard-coded colours (not CSS variables) and background-color
   specifically, scoped directly to this element, rather than trusting the
   generic `select option` selector alone to win in every engine. */
.res-select,.res-select option{color-scheme:light!important;}
.res-select option{background:#fff!important;background-color:#fff!important;color:#0F2233!important;}

/* The six sections are one settings list, not six stacked cards: no per-row
   box, border or shadow — a hairline between rows does the separating, and
   hover/open states are carried by a soft row tint and the icon. */
.cz{
  border:0!important;border-top:1px solid var(--ws-line)!important;
  background:transparent!important;border-radius:0!important;
  margin:0!important;box-shadow:none!important;
}
.cz:last-of-type{border-bottom:1px solid var(--ws-line)!important;}
/* Title over a one-line description, icon and chevron centred on both. */
.cz > summary{
  display:grid!important;
  grid-template-columns:30px minmax(0,1fr) 22px;
  grid-template-areas:"icon title chev" "icon hint chev";
  column-gap:12px!important;row-gap:1px;align-items:center!important;
  min-height:58px!important;padding:9px 8px!important;margin:0 -8px!important;
  cursor:pointer;background:transparent;border-radius:9px;list-style:none;
  transition:background .15s ease;
}
.cz > summary::-webkit-details-marker{display:none}
.cz > summary:hover{background:var(--ws-hover);}
.cz > summary:focus-visible{outline:2px solid var(--accent)!important;outline-offset:-2px;border-radius:9px!important;}

/* left-side icon — a real glyph per section, one restrained style for all.
   An open section's icon takes the accent tint (not a solid fill). */
.cz-icon{
  grid-area:icon;
  width:30px!important;height:30px!important;flex-shrink:0;border-radius:8px;
  display:inline-flex!important;align-items:center;justify-content:center;
  background:#EEF2F6;border:0;color:#4A5B6E;
  transition:background .15s ease,color .15s ease;
}
.cz-icon svg{width:15px;height:15px;}
.cz[open]:not(.is-closing) > summary .cz-icon{background:var(--accent-soft);color:var(--accent);}

.cz-title{
  grid-area:title;align-self:end;
  font-family:'Manrope',sans-serif!important;font-size:14.5px!important;
  font-weight:700!important;color:var(--ws-ink)!important;line-height:1.3;
}
.cz-hint{
  grid-area:hint;align-self:start;display:block;   /* studio-ux.css hides it on mobile; the two-line row needs it */
  font-size:12.5px!important;color:var(--ws-dim)!important;line-height:1.4;
  white-space:nowrap;overflow:hidden;text-overflow:ellipsis;
}

/* right-side chevron — a plain stroke, no box. It flips the instant a
   section starts closing (.is-closing), not after the collapse finishes. */
.cz-chev{
  grid-area:chev;
  width:22px!important;height:22px!important;flex-shrink:0;
  display:inline-flex;align-items:center;justify-content:center;
  font-size:0!important;background:transparent!important;border:0!important;border-radius:6px!important;
  color:#6B7A8C!important;transition:transform .2s cubic-bezier(.2,.8,.2,1),color .15s ease;
}
.cz-chev::before{
  content:'';width:7px;height:7px;
  border-right:1.75px solid currentColor;border-bottom:1.75px solid currentColor;
  transform:rotate(45deg) translate(-1.5px,-1.5px);
}
.cz > summary:hover .cz-chev{background:transparent!important;color:var(--ws-ink)!important;}
.cz[open]:not(.is-closing) > summary .cz-chev{transform:rotate(180deg);color:var(--ws-ink)!important;}
.cz.is-closing > summary .cz-chev{transform:none;}   /* beats the older .cz[open] rules in theme-light/studio-ux */

/* Vertical spacing lives in pseudo-element spacers, NOT padding: theme-light
   pins .cz-body padding with !important, and an animated height can never go
   below a border-box's padding (that was the old 26px "stuck" frame before
   the snap). With zero vertical padding the body can animate cleanly to 0. */
.cz-body{padding:0 2px!important;overflow:visible;}
.cz-body::before{content:'';display:block;height:4px;}
.cz-body::after{content:'';display:block;height:20px;}
.cz.is-animating > .cz-body{overflow:hidden;}

/* a closed accordion must occupy zero height */
details.cz:not([open]) > .cz-body{
  display:none!important;height:0!important;padding:0!important;margin:0!important;border:0!important;
}

/* -------------------------------------------------- 6. colours & logo */
.swatches{gap:18px!important;}
.swatch-item{background:transparent!important;border:0!important;padding:0!important;box-shadow:none!important;}
.swatch-item span{color:var(--ws-ink-2)!important;font-size:13px!important;}
input[type="color"]{
  width:44px!important;height:38px!important;padding:2px!important;
  border:1px solid var(--ws-line-strong)!important;border-radius:8px!important;
  background:#fff!important;cursor:pointer;
}
.logo-zone{border:1px dashed #B9C4D0!important;background:var(--ws-surface)!important;}

/* ------------------------------------------------- 7. shape & frames */
.shape-group-label{color:var(--ws-ink)!important;font-size:13.5px!important;font-weight:500!important;}
.shape-btn{
  width:44px!important;height:44px!important;
  border:1px solid var(--ws-line-strong)!important;border-radius:10px!important;background:#fff!important;
}
.shape-btn.active{border-color:var(--accent)!important;background:var(--accent-soft)!important;color:var(--accent)!important;}
.frame-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(112px,1fr));gap:9px;}
.frame-btn{
  min-height:44px;padding:10px 12px;cursor:pointer;
  background:#fff;border:1px solid var(--ws-line-strong);border-radius:10px;
  font-family:'Inter',sans-serif;font-size:13px;font-weight:500;color:var(--ws-ink-2);
}
.frame-btn:hover{border-color:var(--ws-line-strong);color:var(--ws-ink);}
.frame-btn.active{border-color:var(--accent);background:var(--accent-soft);color:var(--accent);font-weight:600;}

/* ------------------------------------------- 8. styles / templates */
.cz[data-cz="design"] .quick-cats{
  display:flex!important;flex-wrap:nowrap!important;gap:6px!important;
  overflow-x:auto;scrollbar-width:none;padding-bottom:4px;margin-bottom:13px!important;
}
.cz[data-cz="design"] .quick-cats::-webkit-scrollbar{display:none}
.quick-cat{
  flex:0 0 auto;min-height:36px;padding:0 13px!important;
  background:#fff!important;border:1px solid var(--ws-line-strong)!important;
  border-radius:8px!important;font-size:12.5px!important;color:var(--ws-ink-2)!important;
  display:inline-flex;align-items:center;cursor:pointer;
}
.quick-cat.active{background:var(--accent-soft)!important;color:#1D4ED8!important;border-color:#CFDCFD!important;font-weight:600!important;}
.quick-swatches{display:flex;flex-wrap:wrap;gap:10px!important;}
.quick-swatch{
  width:64px!important;height:64px!important;border-radius:10px!important;
  border:1px solid var(--ws-line-strong)!important;cursor:pointer;
}
.quick-swatch:hover{border-color:var(--accent)!important;}

/* ------------------------------------------------------ 9. advanced */
.range-row{margin-bottom:18px;}
.range-row:last-child{margin-bottom:0;}
.range-val{
  display:inline-block;min-width:30px;padding:1px 7px;margin-left:4px;
  background:var(--accent-soft);color:var(--accent);border-radius:6px;
  font-size:12.5px;font-weight:700;text-align:center;
}
.range-row input[type="range"]{
  -webkit-appearance:none;appearance:none;width:100%;height:6px;
  background:#DDE4EC;border-radius:99px;outline:none;cursor:pointer;
}
.range-row input[type="range"]::-webkit-slider-thumb{
  -webkit-appearance:none;width:20px;height:20px;border-radius:50%;
  background:#fff;border:2.5px solid var(--accent);
  box-shadow:0 1px 3px rgba(15,34,51,.2);cursor:pointer;
}
.range-row input[type="range"]::-moz-range-thumb{
  width:18px;height:18px;border-radius:50%;background:#fff;border:2.5px solid var(--accent);
}
.range-note{display:block;font-size:12.5px;color:var(--ws-ink-2);margin-top:7px;line-height:1.5;}
.transparent-toggle{color:var(--ws-ink-2)!important;font-size:13.5px!important;}

/* ------------------------------------------------- 10. preview panel */
/* Preview sizing — one fluid rule instead of three fixed-pixel breakpoints.
   The rendered canvas already carries the code's own quiet zone (~5.5
   modules of white drawn by the renderer), so the white tile around it adds
   nothing but extra margin. The complete, uncropped canvas therefore fills
   the tile minus a thin 4px gutter, and the tile is a true square sized to
   its column (it was 290x300 at 360px). Display-only: the canvas bitmap,
   its quiet zone and every export are untouched. */
.preview{--pv-tile:412px;}
@media (min-width:901px){
  .preview{background:var(--ws-surface)!important;border-radius:0 0 14px 0;padding:24px 24px 22px!important;top:84px!important;gap:12px!important;}
}
@media (max-width:900px){
  .preview{--pv-tile:380px;padding:16px!important;}
}
.preview .frame{
  width:min(100%,var(--pv-tile))!important;height:auto!important;aspect-ratio:1/1;
  max-width:100%!important;padding:4px;
}
.preview .frame-inner{width:100%!important;height:100%!important;max-width:none!important;border-radius:8px!important;}
.preview .frame canvas{width:100%!important;height:100%!important;max-width:none!important;}
/* The QR is the dominant object: a clean white tile on the tinted column,
   defined by a hairline and the lightest possible lift. */
.preview .frame{
  background:#fff!important;border:1px solid var(--ws-line)!important;
  border-radius:12px!important;box-shadow:0 1px 2px rgba(15,34,51,.05)!important;
}
.res-row{margin-top:6px;}
.res-label{font-size:12.5px!important;font-weight:500!important;color:var(--ws-dim)!important;margin-bottom:6px!important;}
.preview-note{font-size:12.5px!important;color:var(--ws-ink-2)!important;max-width:290px;text-align:center;}
.preview .download-btn{
  min-height:48px!important;font-size:15px!important;font-weight:600!important;
  border-radius:9px!important;background:var(--accent)!important;color:#fff!important;border:0!important;
  box-shadow:0 1px 2px rgba(44,95,246,.25)!important;
}
.preview .download-btn:hover{background:#1E4FDD!important;}
.preview .download-btn:focus-visible{outline:2px solid var(--accent)!important;outline-offset:2px;}
/* Status under Download: the privacy line and the free/no-account line were
   two separately styled fragments (one in gold). One quiet block now — a
   hairline, then both lines in the same small secondary text. The error note
   (#qrErrorNote) sits above Download, so these selectors never touch it. */
.preview .download-btn ~ .preview-note{
  width:100%;max-width:300px!important;margin:0 auto!important;
  font-size:12px!important;line-height:1.5!important;font-weight:400!important;
  color:var(--ws-dim)!important;
}
.preview .download-btn + .preview-note{border-top:1px solid var(--ws-line);padding-top:12px;margin-top:4px!important;}
.preview .download-btn ~ .preview-note + .preview-note{margin-top:-8px!important;}
.preview .generate-btn{
  min-height:42px!important;font-size:14px!important;border-radius:10px!important;
  background:#fff!important;color:var(--ws-ink)!important;
  border:1.5px solid var(--ws-line)!important;font-weight:500!important;
}
.preview .generate-btn:hover{background:var(--ws-surface)!important;border-color:var(--ws-line-strong)!important;}

/* -------------------------------------------------- 11. how-to section */
.howto{background:var(--ws-navy);color:#E6EDF3;padding:92px 0 96px;}
.howto .wrap{max-width:min(85vw,1400px);padding:0 24px;}
.howto-head{max-width:680px;margin-bottom:48px;}
.howto-eyebrow{
  display:inline-block;font-size:12px;font-weight:600;
  color:#5FD6C4;background:rgba(95,214,196,.12);
  border:1px solid rgba(95,214,196,.28);padding:5px 12px;border-radius:999px;
}
.howto h2{
  font-family:'Manrope',sans-serif;font-size:clamp(30px,3.6vw,42px);font-weight:800;
  color:#fff!important;margin:18px 0 14px;letter-spacing:-.02em;
}
.howto-head p{color:#9FB4C4;font-size:16.5px;line-height:1.7;margin:0;}

/* Product-demonstration steps — each row pairs real copy with a mockup of
   the actual FRAME UI for that step (toolbar / customise panel+live QR /
   download panel), not a plain icon+text card. Alternates side for rhythm;
   .howto-step-rev flips which column each half sits in. */
.howto-steps{display:flex;flex-direction:column;gap:72px;margin-bottom:56px;}
.howto-step{
  display:grid;grid-template-columns:minmax(0,42fr) minmax(0,58fr);
  gap:56px;align-items:center;
}
.howto-step-rev{grid-template-columns:minmax(0,58fr) minmax(0,42fr);}
.howto-step-rev .howto-step-text{order:2;}
.howto-step-rev .howto-step-visual{order:1;}
.howto-step-num{
  display:inline-block;font-family:'IBM Plex Mono',monospace;font-size:12.5px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:#5FD6C4;margin-bottom:16px;
}
.howto-step-text h3{
  font-family:'Manrope',sans-serif;font-size:clamp(23px,2.4vw,29px);font-weight:800;
  color:#fff!important;margin:0 0 16px;letter-spacing:-.01em;
}
.howto-step-text p{color:#9FB4C4!important;font-size:16px;line-height:1.75;margin:0;max-width:460px;}
.howto-step-visual{
  background:rgba(255,255,255,.04);border:1px solid rgba(255,255,255,.11);
  border-radius:18px;padding:36px;min-height:250px;min-width:0;
  display:flex;align-items:center;justify-content:center;
}

/* step 1 mockup — toolbar */
.hm-toolbar{display:flex;flex-wrap:wrap;gap:10px;width:100%;}
.hm-tab{
  display:inline-flex;align-items:center;gap:7px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);
  border-radius:10px;padding:0 14px;height:44px;
  font-family:'Inter',sans-serif;font-size:13px;font-weight:600;color:#C9D6E0;
}
.hm-tab-ico{width:16px;height:16px;display:inline-flex;color:inherit;}
.hm-tab-ico svg{width:100%;height:100%;display:block;}
.hm-tab-active{background:#5FD6C4;border-color:#5FD6C4;color:#0F2233;}
.hm-tab-more{background:transparent;border-style:dashed;color:#7E93A6;}
.hm-caret{font-size:10px;margin-left:2px;}

/* step 2 mockup — customise controls + live QR */
.hm-customize{display:flex;gap:28px;width:100%;align-items:center;flex-wrap:wrap;justify-content:center;}
.hm-controls{flex:1 1 190px;display:flex;flex-direction:column;gap:15px;}
.hm-row{display:flex;align-items:center;gap:9px;}
.hm-label{font-family:'IBM Plex Mono',monospace;font-size:11px;color:#7E93A6;width:50px;flex-shrink:0;}
.hm-swatch{width:22px;height:22px;border-radius:6px;border:2px solid rgba(255,255,255,.2);}
.hm-swatch-outline{background:transparent;border-style:dashed;}
.hm-chip{
  width:30px;height:30px;border-radius:8px;background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.14);display:inline-flex;align-items:center;justify-content:center;
  font-size:13px;color:#C9D6E0;
}
.hm-chip-active{background:#5FD6C4;border-color:#5FD6C4;color:#0F2233;}
.hm-logo-chip{
  display:inline-flex;align-items:center;gap:7px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);
  border-radius:8px;padding:6px 12px;font-size:12px;color:#C9D6E0;
}
.hm-logo-chip svg{width:14px;height:14px;flex-shrink:0;}
.hm-live-qr{
  position:relative;flex-shrink:0;background:#fff;border-radius:14px;
  padding:14px;display:flex;align-items:center;justify-content:center;
  box-shadow:0 12px 30px rgba(0,0,0,.35);
}
.hm-qr-glyph{width:104px;height:104px;color:#0F2233;display:block;}
.hm-live-dot{
  position:absolute;top:-11px;left:50%;transform:translateX(-50%);
  background:#5FD6C4;color:#0F2233;font-size:10px;font-weight:700;
  padding:4px 10px;border-radius:999px;white-space:nowrap;
}

/* step 3 mockup — test & download */
.hm-download{display:flex;align-items:center;gap:28px;width:100%;flex-wrap:wrap;justify-content:center;}
.hm-download-qr{background:#fff;border-radius:16px;padding:18px;flex-shrink:0;box-shadow:0 14px 34px rgba(0,0,0,.4);}
.hm-qr-glyph-lg{width:136px;height:136px;}
.hm-download-side{display:flex;flex-direction:column;gap:12px;min-width:210px;}
.hm-safe-badge{
  display:inline-flex;align-items:center;gap:6px;width:fit-content;
  background:rgba(60,200,140,.15);border:1px solid rgba(60,200,140,.4);color:#5FE0A6;
  font-size:12px;font-weight:600;padding:6px 12px;border-radius:999px;
}
.hm-res-select{
  display:flex;align-items:center;justify-content:space-between;gap:8px;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.16);
  border-radius:9px;padding:10px 13px;font-size:12.5px;color:#C9D6E0;
}
.hm-dl-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  background:#5FD6C4;color:#0A2A24;font-weight:700;font-size:13.5px;
  border-radius:9px;padding:11px 16px;
}

.howto-advantage{
  margin-top:26px;padding:26px 28px;border-radius:15px;
  background:rgba(95,214,196,.07);border:1px solid rgba(95,214,196,.22);
}
.howto-advantage h3{font-family:'Manrope',sans-serif;font-size:17px;font-weight:700;color:#5FD6C4!important;margin:0 0 8px;}
.howto-advantage p{color:#A8BECD!important;font-size:14.5px;line-height:1.7;margin:0;max-width:900px;}

/* ------------------------------------------------------ 12. trust strip */
.trust-strip{padding:30px 0 6px;overflow:hidden;}
.trust-strip .wrap{max-width:min(85vw,1400px);padding:0 24px;overflow:hidden;}
.trust-strip-label{
  display:block;text-align:center;font-family:'Inter',sans-serif;
  font-size:12.5px;font-weight:600;letter-spacing:.04em;
  color:var(--ws-ink-2);margin-bottom:18px;
}
.trust-strip-track{
  display:flex;width:max-content;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 8%,#000 92%,transparent);
}
.trust-strip-row{
  display:flex;align-items:center;gap:44px;flex-shrink:0;padding-right:44px;
}
.trust-mark{
  display:inline-flex;align-items:center;gap:8px;
  font-family:'Manrope',sans-serif;font-size:15.5px;font-weight:700;
  color:var(--ws-ink-2);white-space:nowrap;letter-spacing:.01em;
}
.trust-mark svg{flex-shrink:0;color:var(--accent);}

/* -------------------------------------------------------- 13. mobile */
@media (max-width:900px){
  .step-head{font-size:15px;margin-bottom:11px;}
  .cz-head{padding:18px 0 11px!important;font-size:15px!important;}
  .cz > summary{min-height:60px!important;}
  /* stacked layout: the preview block above already ends on a divider */
  .cz-head{border-top:0!important;margin-top:0;flex-wrap:wrap;row-gap:2px;justify-content:flex-start!important;}
  .cz-head-note{flex-basis:100%;margin-left:32px!important;}
  .controls input,.controls select,.controls textarea{min-height:44px!important;font-size:16px!important;}
  .type-toolbar{padding:10px 18px!important;}
  .type-tabs{
    margin-left:-18px;margin-right:-18px;
    padding-left:18px!important;padding-right:18px!important;
  }
  .type-tab{min-height:40px!important;font-size:13px!important;padding:0 11px!important;gap:6px!important;}
  .type-tab-ico{width:14px;height:14px;}
  .type-more-menu{left:20px!important;right:20px!important;grid-template-columns:1fr!important;gap:14px!important;}
  .howto{padding:56px 0 60px;}
  .howto .wrap{max-width:none;padding:0 20px;}
  .howto-head{margin-bottom:32px;}
  .howto-steps{gap:48px;margin-bottom:40px;}
  .howto-step,.howto-step-rev{grid-template-columns:1fr;gap:22px;}
  .howto-step-text,.howto-step-rev .howto-step-text{order:2;}
  .howto-step-visual,.howto-step-rev .howto-step-visual{order:1;}
  .howto-step-text p{max-width:none;}
  .howto-step-visual{padding:24px;min-height:0;}
  .hm-qr-glyph{width:84px;height:84px;}
  .hm-qr-glyph-lg{width:108px;height:108px;}
  .hm-download{justify-content:flex-start;}
  .frame-grid{grid-template-columns:repeat(2,minmax(0,1fr));}
  .trust-strip{padding:22px 0 4px;}
  .trust-strip-label{font-size:11.5px;margin-bottom:14px;}
  .trust-mark{font-size:15px;}
  .trust-strip-row{gap:32px;padding-right:32px;}
}
@media (min-width:901px) and (max-width:1180px){
  .howto-step,.howto-step-rev{grid-template-columns:1fr;gap:26px;}
  .howto-step-text,.howto-step-rev .howto-step-text{order:1;}
  .howto-step-visual,.howto-step-rev .howto-step-visual{order:2;}
  .howto-step-text p{max-width:none;}
}

/* -------------------------------------------------------- 14. motion */
@media (prefers-reduced-motion:no-preference){
  /* accordion open/close motion is driven by generator-ux.js (one height +
     opacity animation per section) — no competing CSS keyframe here */
  #qrOutput{animation:qrIn .3s cubic-bezier(.22,1,.36,1);}
  @keyframes qrIn{from{opacity:0;transform:scale(.975)}to{opacity:1;transform:none}}
  .type-tab,.quick-cat,.shape-btn,.frame-btn,.quick-swatch{
    transition:background .18s ease,color .18s ease,border-color .18s ease,box-shadow .18s ease;
  }
  .download-btn,.generate-btn,.nav-cta{transition:background .18s ease,box-shadow .18s ease,transform .1s ease;}
  .download-btn:active,.generate-btn:active,.nav-cta:active{transform:translateY(1px);}
  .download-btn:hover{box-shadow:0 4px 12px rgba(44,95,246,.24)!important;}
  .howto-step-visual{transition:border-color .26s ease,background .26s ease;}
  .howto-step-visual:hover{background:rgba(255,255,255,.06);border-color:rgba(95,214,196,.35);}
  .quick-swatch:hover{transform:translateY(-2px);}

  .trust-strip-track{animation:trustScroll 26s linear infinite;}
  .trust-strip:hover .trust-strip-track{animation-play-state:paused;}
  @keyframes trustScroll{from{transform:translateX(0);}to{transform:translateX(-50%);}}
}
@media (prefers-reduced-motion:reduce){
  .trust-strip-row[aria-hidden="true"]{display:none;}
  /* accordions toggle instantly (generator-ux.js also skips its animation) */
  .cz-chev,.cz-icon,.cz > summary,.type-tab-more .caret{transition:none!important;}
}

/* ------------------------------------------------- 15. new SEO/content sections */
.strip-sub{font-size:15.5px;color:var(--ws-ink-2);line-height:1.6;margin-top:10px;max-width:560px;}
@media (min-width:901px){.grid6{grid-template-columns:repeat(3,1fr)!important;}}

/* differentiator — "Create it. Customize it. Check it. Print it." */
.differentiator{padding:26px 0;}
.diff-steps{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:10px 6px;}
.diff-step{
  display:inline-flex;align-items:center;gap:10px;
  font-family:'Manrope',sans-serif;font-size:14px;font-weight:700;color:#fff;
  background:rgba(255,255,255,.06);border:1px solid rgba(255,255,255,.14);
  border-radius:999px;padding:9px 18px 9px 9px;
}
.diff-num{
  display:inline-flex;align-items:center;justify-content:center;
  width:23px;height:23px;border-radius:50%;flex-shrink:0;
  background:#5FD6C4;color:#0A2A24;font-size:11.5px;font-weight:800;
}
.diff-step-final{background:rgba(95,214,196,.14);border-color:rgba(95,214,196,.35);color:#5FD6C4;}
.diff-arrow{color:rgba(255,255,255,.35);font-size:15px;}
@media (max-width:700px){
  .diff-arrow{display:none;}
  .diff-steps{flex-direction:column;align-items:stretch;}
  .diff-step{justify-content:center;}
}

/* QR codes explained */
.explainer{padding:84px 0;}
.explainer .wrap{max-width:min(85vw,1400px);padding:0 24px;}
.explainer-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:30px 40px;margin-top:8px;}
.explainer-item h3{font-family:'Manrope',sans-serif;font-size:18px;font-weight:700;color:var(--ws-ink);margin:0 0 10px;}
.explainer-item p{font-size:15px;line-height:1.7;color:var(--ws-ink-2);margin:0;}
.explainer-item a{color:var(--accent);font-weight:600;text-decoration:none;border-bottom:1px solid transparent;}
.explainer-item a:hover{border-bottom-color:currentColor;}
@media (max-width:760px){.explainer{padding:52px 0;}.explainer-grid{grid-template-columns:1fr;gap:26px;}}

/* what types of QR codes can you create for free */
.qrtypes{padding:84px 0;}
.qrtypes .wrap{max-width:min(85vw,1400px);padding:0 24px;}
.qrtype-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin-top:8px;}
.qrtype-card{background:#fff;border:1.5px solid var(--ws-line);border-radius:14px;padding:22px 20px;transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease;}
.qrtype-ico{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:11px;margin-bottom:14px;background:var(--accent-soft,#EAF0FE);color:var(--accent,#2C5FF6);}
.qrtype-ico svg{width:18px;height:18px;}
.qrtype-card h3{font-family:'Manrope',sans-serif;font-size:15.5px;font-weight:700;color:var(--ws-ink);margin:0 0 7px;}
.qrtype-card p{font-size:13.5px;line-height:1.58;color:var(--ws-ink-2);margin:0;}
@media (prefers-reduced-motion:no-preference){
  .qrtype-card:hover{transform:translateY(-2px);box-shadow:0 10px 22px rgba(15,34,51,.08);border-color:var(--ws-line-strong);}
}
@media (max-width:1180px) and (min-width:641px){.qrtype-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:640px){.qrtypes{padding:52px 0;}.qrtype-grid{grid-template-columns:1fr;gap:14px;}}

/* where to place a QR code */
.placement{padding:84px 0;}
.placement .wrap{max-width:min(85vw,1400px);padding:0 24px;}
.placement-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin:8px 0 36px;}
.placement-card{background:#fff;border:1.5px solid var(--ws-line);border-radius:14px;padding:22px 20px;}
.placement-ico{display:inline-flex;align-items:center;justify-content:center;width:38px;height:38px;border-radius:11px;margin-bottom:14px;background:#fff;border:1.5px solid var(--ws-line-strong);color:var(--ws-ink-2);}
.placement-ico svg{width:18px;height:18px;}
.placement-card h3{font-family:'Manrope',sans-serif;font-size:15px;font-weight:700;color:var(--ws-ink);margin:0 0 7px;}
.placement-card p{font-size:13.5px;line-height:1.58;color:var(--ws-ink-2);margin:0;}
.placement-tips{background:#fff;border:1.5px solid var(--ws-line);border-radius:16px;padding:26px 28px;}
.placement-tips h3{font-family:'Manrope',sans-serif;font-size:16px;font-weight:700;color:var(--ws-ink);margin:0 0 14px;}
.placement-tips ul{margin:0;padding-left:20px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 24px;}
.placement-tips li{font-size:14px;color:var(--ws-ink-2);line-height:1.6;}
@media (max-width:1180px) and (min-width:641px){.placement-grid{grid-template-columns:repeat(2,minmax(0,1fr));}}
@media (max-width:640px){
  .placement{padding:52px 0;}
  .placement-grid{grid-template-columns:1fr;gap:14px;}
  .placement-tips ul{grid-template-columns:1fr;}
}

/* checker promo link inside .health */
.checker-link{display:inline-block;margin-top:16px;font-size:13.5px;font-weight:600;color:var(--accent);text-decoration:none;}
.checker-link:hover{text-decoration:underline;}

/* ---------------------------------------- 16. section rhythm (alternating bg) */
/* Every section below the fold defaulted to plain white — no rhythm, everything
   blends together. Three core surfaces (white / soft mist / navy) plus a
   turquoise-tinted wash, alternating down the page. Flat colours only, so every
   boundary is a hard, intentional cut — never a gradient/fade into the next
   section (frame.css's cards inside these sections are already white, so they
   read cleanly against every one of these backdrops without further changes). */
/* theme-light.css shrinks .strip-head h2 site-wide (clamp 22-30px) — restored
   to a stronger size here, homepage-only, so section headings read with the
   same weight as the hero/how-to headings instead of fading out below the fold. */
.strip-head{max-width:620px!important;margin-bottom:44px!important;}
.strip-head h2{
  font-size:clamp(28px,3.2vw,38px)!important;font-weight:800!important;
  color:var(--ws-ink)!important;letter-spacing:-.01em;margin-top:14px!important;
}
.strip-head .eyebrow{
  font-family:'Inter',sans-serif!important;font-weight:600!important;
  letter-spacing:.04em!important;color:var(--accent,#2C5FF6)!important;
}
.trust-strip{background:var(--ws-mist)!important;}
.strip{background:#fff!important;}
.templates{background:var(--ws-mist)!important;}

/* Initial #templateGrid skeleton — before the first QR renders, frame.js
   swaps in real preset thumbnails, but that first render is a beat behind
   page paint. Rather than let a "Loading designs…" string be visible for
   even a moment, the initial HTML ships these placeholder cards instead,
   so there's always a complete, plausible-looking gallery on screen. */
.template-card.skeleton{cursor:default;}
.template-card.skeleton .skeleton-thumb{
  width:100%;aspect-ratio:1;border-radius:10px;margin-bottom:12px;
  background:linear-gradient(100deg,var(--ws-line) 30%,var(--ws-mist) 50%,var(--ws-line) 70%);
  background-size:200% 100%;
}
.template-card.skeleton .skeleton-label{
  height:12px;width:64%;margin:0 auto 12px;border-radius:4px;background:var(--ws-line);
}
.template-card.skeleton .skeleton-btn{
  height:34px;border-radius:8px;background:var(--ws-surface);border:1px solid var(--ws-line);
}
@media (prefers-reduced-motion:no-preference){
  .template-card.skeleton .skeleton-thumb{animation:skeletonShimmer 1.4s ease-in-out infinite;}
}
@keyframes skeletonShimmer{0%{background-position:200% 0;}100%{background-position:-200% 0;}}
.explainer{background:#fff!important;}
.qrtypes{background:var(--ws-mist)!important;}
.differentiator{background:var(--ws-navy)!important;}
.spotlight{background:#fff!important;}
.health{background:#fff!important;}
.placement{background:var(--ws-mist)!important;}
.compare{background:var(--ws-mist)!important;}
