/* Shared design tokens + base styles for the actuallyintegrated.com/site/ marketing pages —
   deliberately kept separate from the builder app's own bundled CSS (this is a static site,
   not part of the React build), but the token VALUES are copied straight from
   src/index.css's :root / [data-theme="dark"] blocks so it reads as the same product.
   Update both places together if the app's palette ever changes. */

/* Fredoka, embedded (variable font, weights 400-700) so the brand wordmark and headings
   never depend on a network call to Google Fonts -- no request, no IP sent, before or after
   cookie consent. Downloaded once from Google's own fonts.gstatic.com CDN and base64-inlined
   here; update by re-running the same fetch if the family's build ever changes upstream. */
@font-face {
  font-family: 'Fredoka';
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url(data:font/woff2;base64,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) format('woff2');
}

:root {
  --color-bg: #f7f8fa;
  --color-surface: #ffffff;
  --color-surface-alt: #f8f9fa;
  --color-surface-muted: #f0f0f0;

  --color-border: #dee2e6;
  --color-border-strong: #ced4da;

  --color-text: #1a1a1a;
  --color-text-secondary: #495057;
  --color-text-muted: #6c757d;

  --color-accent: #0090ff;
  --color-accent-hover: #2fa4ff;
  --color-accent-2: #7c3aed;

  --color-success: #10b768;
  --color-warning: #f5a623;
  --color-danger: #ff3b5c;

  --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen', 'Ubuntu',
    'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue', sans-serif;

  --shadow-sm: 0 1px 3px rgba(0, 0, 0, 0.08);
  --shadow-md: 0 2px 8px rgba(0, 0, 0, 0.10);
  --shadow-lg: 0 4px 20px rgba(0, 0, 0, 0.16);

  --radius-sm: 4px;
  --radius-md: 6px;
  --radius-lg: 10px;

  /* Translucent version of --color-surface for the glass header (see .site-header below)
     -- kept as its own var, scheme-matched alongside --color-surface itself in the dark
     block below, rather than computed with color-mix() at use-site, so both stay trivially
     in sync if the surface color itself ever changes. */
  --color-header-glass-bg: rgba(255, 255, 255, 0.72);

  color-scheme: light;
}

@media (prefers-color-scheme: dark) {
  :root {
    --color-bg: #14161a;
    --color-surface: #1c1f24;
    --color-surface-alt: #23262c;
    --color-surface-muted: #2a2e35;

    --color-border: #33373f;
    --color-border-strong: #454a54;

    --color-text: #f1f2f4;
    --color-text-secondary: #c3c7cf;
    --color-text-muted: #8b909b;

    --color-accent: #22d3ee;
    --color-accent-hover: #67e3f5;
    --color-accent-2: #e879f9;

    --color-success: #39ff9e;
    --color-warning: #ffcf4d;
    --color-danger: #ff4d6d;

    --color-header-glass-bg: rgba(28, 31, 36, 0.72);

    color-scheme: dark;
  }
}

* { box-sizing: border-box; }

html, body {
  margin: 0;
  padding: 0;
}

html {
  /* Belt-and-suspenders alongside body's own overflow-x: clip below -- overflow set on body
     is supposed to propagate up to the viewport per spec, but empirically the page could
     still be scrolled a few pixels horizontally (the .full-bleed 100vw-vs-real-viewport-
     width gap) with only body's rule in place. Setting it here directly on the actual
     scrolling root removes any doubt. */
  overflow-x: clip;
}

body {
  background: var(--color-bg);
  color: var(--color-text);
  font-family: var(--font-family);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  line-height: 1.5;
  /* Guards against the classic `.full-bleed` (100vw) artifact below: 100vw is the LAYOUT
     viewport width, which includes the vertical scrollbar's own width on the (scrollbar-
     carrying) platforms/browsers where the scrollbar isn't an overlay -- a few pixels wider
     than the ACTUAL visible width, which without this clips into a spurious horizontal
     scrollbar. `clip` (not `hidden`) specifically so this doesn't also create a new
     scroll container/containing block of its own. */
  overflow-x: clip;
}

a { color: var(--color-accent); }

img { max-width: 100%; }

.site-header {
  position: sticky;
  top: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  gap: 24px;
  padding: 14px 24px;
  background: var(--color-header-glass-bg);
  border-bottom: 1px solid var(--color-border);
  /* Liquid glass: the same feTurbulence + feDisplacementMap wavy refraction as the /site/
     landing page's own header (see landing.css), chained with blur+saturate. Unlike the
     landing page, this header keeps its normal light-content color scheme (dark text/logo
     via the vars above) rather than the landing page's white-on-dark-hero palette -- the
     page's own light content is what shows (softly distorted) through the blur here, not a
     dark hero. Needs the same inline <svg><filter id="liquid-glass-distort">...</filter>
     ref this page's own <body> now carries -- see any /site/* page for the markup. Staying
     `position: sticky` (not fixed) is deliberate too: content already starts right below
     the header in normal flow, so it needs no compensating top-padding hack, and merely
     scrolls up underneath the header (now translucent) exactly like a fixed glass header
     would, without the extra plumbing. */
  backdrop-filter: url(#liquid-glass-distort) blur(16px) saturate(1.6);
  -webkit-backdrop-filter: blur(16px) saturate(1.6); /* Safari ignores SVG refs in -webkit-backdrop-filter; still gets blur+saturate */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, 0.5),
    0 4px 24px rgba(0, 0, 0, 0.06);
}

/* Browsers with no backdrop-filter support at all (rare in 2026, but real) get a plain
   opaque header instead of a permanently-translucent one sitting over whatever scrolls
   beneath it (which would be too low-contrast to read without the blur actually applying). */
@supports not (backdrop-filter: blur(1px)) {
  .site-header {
    background: var(--color-surface);
  }
}

.site-header .logo-link {
  display: flex;
  align-items: center;
  gap: 10px;
  text-decoration: none;
  color: var(--color-text);
  font-weight: 700;
  font-size: 16px;
  /* Without this, a cramped header row (nav links + CTA all fighting for space on a
     narrow phone) can flex-shrink this whole block narrower than its content wants —
     confirmed live as a squished/stretched-looking logo on mobile, since shrinking only
     ever affects width, not height, distorting the otherwise-square image. */
  flex-shrink: 0;
}

.site-header .logo-text {
  /* Matches src/App.tsx's own wordmark next to the logo exactly (font, weight, size,
     tracking) — this had no font-family override before, so it silently fell back to
     the page's default system-font stack (--font-family isn't set here either) instead
     of Fredoka, reading as a different brand mark next to an identical logo image. The
     Fredoka font itself is embedded at the top of this file (@font-face, no network call). */
  font-family: 'Fredoka', sans-serif;
  font-weight: 700;
  font-size: 17px;
  letter-spacing: 0.3px;
}

.site-header .logo-link img {
  /* Matches src/App.tsx's own .app-logo exactly (height: 68px, width: auto, no
     border-radius — logo.png is already a self-contained icon on a transparent
     background, so a corner-radius crop was never doing anything visible on it
     anyway) — the two headers should read as the same brand mark at the same size. */
  height: 68px;
  width: auto;
  /* Also matches .app-logo exactly -- the builder's logo has this same 4px padding
     (some breathing room right on the mark itself) with an equal negative margin-right
     so it doesn't also push the wordmark next to it further away; this page had neither,
     so its logo sat measurably tighter than the builder's despite being the same size. */
  padding: 4px;
  margin-right: -4px;
  /* Same reasoning as .logo-link's own flex-shrink: 0 above, one level down — the image
     is itself a flex item inside .logo-link's own flex row, so it needs the same
     protection independently. */
  flex-shrink: 0;
  box-sizing: border-box;
}

.site-header nav {
  display: flex;
  gap: 4px;
  margin-left: 8px;
  /* Lets the bar actually shrink (and, with overflow: hidden, clip) below its own content's
     natural width once the hamburger's adaptive-fit script starts pulling links out of it on
     mobile -- a flex item's automatic minimum size is otherwise its CONTENT size, which would
     have silently overridden every measurement the script makes. Desktop is unaffected: at
     that width nothing needs to shrink in the first place. */
  flex-shrink: 1;
  min-width: 0;
  overflow: hidden;
}

.site-header nav a {
  padding: 7px 12px;
  border-radius: var(--radius-sm);
  color: var(--color-text-secondary);
  text-decoration: none;
  font-size: 14px;
  font-weight: 600;
}

.site-header nav a:hover {
  background: var(--color-surface-alt);
  color: var(--color-text);
}

.site-header nav a.active {
  color: var(--color-accent);
  background: var(--color-surface-alt);
}

/* Hamburger menu -- sits after the Open Builder CTA (not inside <nav> itself), hidden entirely
   on desktop where all six nav links (Home/Widgets/Tools/Example/Docs/Shop) just show inline
   with room to spare. Below 640px, each page's own inline script (see any /site/* page's
   markup right after its </header>) measures the bar and peels links off its end -- into this
   menu -- one at a time until whatever's left actually fits next to the logo and CTA, so the
   bar always keeps as many links inline as there's genuinely room for rather than collapsing
   everything the moment a phone width is hit. Real DOM moves, not a duplicated hidden copy of
   each link, so assistive tech still only ever sees one instance of each. */
.site-header .nav-more {
  position: relative;
  display: none;
  flex-shrink: 0;
}
.site-header .nav-more-toggle {
  /* Every one of these resets a distinct way a bare <button> leaks native platform chrome
     through a plain background/border override -- appearance for the platform-drawn pill
     itself, background-image/outline/text-shadow for the parts a shorthand `background: none`
     or `border: none` alone doesn't touch. Without all of them together this still read as a
     visibly darker, heavier control than the plain nav links next to it, even at rest (before
     any hover/click). */
  appearance: none;
  -webkit-appearance: none;
  -moz-appearance: none;
  width: 36px;
  height: 36px;
  padding: 0;
  margin: 0;
  border-radius: var(--radius-sm);
  background-color: transparent;
  background-image: none;
  border: none;
  box-shadow: none;
  outline: none;
  color: var(--color-text-secondary);
  cursor: pointer;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.site-header .nav-more-toggle:hover,
.site-header .nav-more-toggle[aria-expanded="true"] {
  background: var(--color-surface-alt);
  color: var(--color-text);
}
.site-header .nav-more-menu {
  position: absolute;
  top: 100%;
  right: 0;
  margin-top: 6px;
  background: var(--color-surface);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-md);
  box-shadow: var(--shadow-lg);
  display: flex;
  flex-direction: column;
  padding: 6px;
  min-width: 140px;
  z-index: 60;
}
.site-header .nav-more-menu[hidden] { display: none; }
.site-header .nav-more-menu a {
  padding: 9px 10px;
  font-size: 13px;
  font-weight: 600;
  color: var(--color-text-secondary);
  text-decoration: none;
  border-radius: var(--radius-sm);
}
.site-header .nav-more-menu a:hover,
.site-header .nav-more-menu a.active {
  background: var(--color-surface-alt);
  color: var(--color-text);
}

.site-header .cta {
  margin-left: auto;
  padding: 9px 18px;
  border-radius: var(--radius-md);
  background: var(--color-accent);
  color: #fff;
  text-decoration: none;
  font-weight: 700;
  font-size: 14px;
  box-shadow: var(--shadow-sm);
  /* A plain inline <a> otherwise wraps its own text across two lines the moment the
     header row gets tight — nowrap keeps "Open Builder" on one line; flex-shrink: 0
     stops the row from squeezing this box narrower than that single line needs (which
     would just reintroduce the wrap another way). If there's still no room even for
     that, the .cta-open-word span below drops to just "Builder" on mobile instead. */
  white-space: nowrap;
  flex-shrink: 0;
}

.site-header .cta:hover { background: var(--color-accent-hover); }

.site-main {
  max-width: 1100px;
  margin: 0 auto;
  padding: 48px 24px 80px;
}

.site-footer {
  border-top: 1px solid var(--color-border);
  padding: 24px;
  text-align: center;
  color: var(--color-text-muted);
  font-size: 13px;
  display: flex;
  justify-content: center;
  align-items: center;
  gap: 8px;
  flex-wrap: wrap;
}

/* ---- Full-bleed: breaks a child out of .site-main's centered max-width: 1100px column so it
   spans the full browser window instead -- used by Widgets/Tools/Example's own card grids
   (plus their toolbar and any ad tiles inside the grid), which read better using the whole
   window than boxed into the same width as a paragraph of copy. Classic 100vw/-50vw
   full-bleed technique: escapes the parent's centering and max-width, then re-adds its own
   matching horizontal padding so content doesn't run to the literal screen edge. */
.full-bleed {
  width: 100vw;
  position: relative;
  left: 50%;
  right: 50%;
  margin-left: -50vw;
  margin-right: -50vw;
  padding-left: 24px;
  padding-right: 24px;
  box-sizing: border-box;
}
@media (max-width: 640px) {
  .full-bleed { padding-left: 16px; padding-right: 16px; }
}

.site-footer a { color: var(--color-text-muted); }

/* Privacy Policy / Terms & Conditions pages — a narrower reading column than .site-main's
   full 1100px (a legal document reads better at paragraph width), same section rhythm as the
   equivalent React modals (src/components/shared/LegalDoc.tsx) so both stay visually
   consistent even though the content is duplicated by necessity (see this repo's own
   "every /site/* page is self-contained" convention, shared.css's own header comment). */
.legal-doc { max-width: 720px; margin: 0 auto; }
.legal-doc .legal-effective-date { font-size: 12px; color: var(--color-text-muted); margin: 0 0 28px; }
.legal-doc section { margin-bottom: 26px; }
.legal-doc h2 { font-size: 17px; font-weight: 700; margin: 0 0 8px; }
.legal-doc p { font-size: 14px; line-height: 1.7; color: var(--color-text-secondary); margin: 0 0 10px; }
.legal-doc p:last-child { margin-bottom: 0; }

.hero {
  text-align: center;
  padding: 40px 0 56px;
}

.hero h1 {
  font-size: clamp(26px, 6vw, 40px);
  font-weight: 800;
  margin: 0 0 16px;
  letter-spacing: -0.02em;
}

.hero p {
  font-size: 17px;
  color: var(--color-text-secondary);
  max-width: 640px;
  margin: 0 auto 28px;
}

.hero .actions {
  display: flex;
  gap: 12px;
  justify-content: center;
  flex-wrap: wrap;
}

.btn {
  display: inline-block;
  padding: 12px 24px;
  border-radius: var(--radius-md);
  text-decoration: none;
  font-weight: 700;
  font-size: 15px;
  border: 1px solid transparent;
}

.btn-primary {
  background: var(--color-accent);
  color: #fff;
  box-shadow: var(--shadow-md);
}
.btn-primary:hover { background: var(--color-accent-hover); }

.btn-secondary {
  background: var(--color-surface);
  color: var(--color-text);
  border-color: var(--color-border-strong);
}
.btn-secondary:hover { background: var(--color-surface-alt); }

.card-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 16px;
  margin: 32px 0;
}

.card {
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: 20px;
  transition: border-color 0.15s ease, transform 0.15s ease;
}

a.card:hover {
  border-color: var(--color-accent);
  transform: translateY(-1px);
}

.card h3 {
  margin: 0 0 8px;
  font-size: 15px;
  font-weight: 700;
}

.card p {
  margin: 0;
  font-size: 13.5px;
  color: var(--color-text-secondary);
}

.section-title {
  font-size: 22px;
  font-weight: 800;
  margin: 0 0 6px;
  letter-spacing: -0.01em;
}

.section-subtitle {
  color: var(--color-text-muted);
  font-size: 14px;
  margin: 0 0 24px;
}

.demo-frame-wrap {
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  overflow: hidden;
  box-shadow: var(--shadow-md);
  background: var(--color-surface);
}

/* The embedded demo is a fixed 1280x640 canvas export (same as any exported HTML page —
   the builder doesn't produce a responsive layout, it produces a fixed-size screen). Rather
   than let a narrow viewport either clip it or force horizontal scrolling, the iframe keeps
   its true 1280x640 intrinsic size and gets CSS-scaled down as a whole (transform: scale,
   set from JS in example/index.html based on the wrapper's actual width) so the full canvas
   is always visible, just smaller — the wrapper's height is set to match every time so there
   is never leftover blank space below the shrunk iframe.
   */
.demo-frame-wrap {
  overflow: hidden;
}

.demo-frame-wrap iframe {
  display: block;
  width: 1280px;
  height: 640px;
  border: none;
  transform-origin: top left;
}

.note {
  background: var(--color-surface-alt);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-md);
  padding: 12px 16px;
  font-size: 13.5px;
  color: var(--color-text-secondary);
  margin: 16px 0;
}

/* ---- Mobile ---- */
@media (max-width: 640px) {
  .site-header {
    gap: 10px;
    padding: 10px 14px;
  }

  /* Logo image stays (brand recognition, and it's the home link); the wordmark next to it
     is the first thing to go when space is tight — the nav labels below still say where
     everything leads. Shrunk back down from the desktop 68px (see the base rule's own
     comment) — that size only reads right next to the full wordmark, which is gone here. */
  .site-header .logo-link img {
    height: 30px;
    width: 30px;
    /* Matches .app-logo's own mobile values (padding: 0, marginRight: 0) -- the wordmark
       next to it is gone here anyway, so there's nothing for the negative margin to pull
       closer to, and the padding was only ever there to give the desktop mark some room. */
    padding: 0;
    margin-right: 0;
  }

  .site-header .logo-text {
    display: none;
  }

  .site-header nav {
    margin-left: 0;
    gap: 2px;
  }

  .site-header nav a {
    padding: 6px 8px;
    font-size: 13px;
  }

  /* Shown only here — see the .nav-more rules above this media block for why (six links no
     longer fit next to the logo/CTA at this width) and any page's own inline script for how
     the overflow links actually get moved in and out of it. */
  .site-header .nav-more {
    display: inline-flex;
  }

  .site-header .cta {
    padding: 7px 12px;
    font-size: 13px;
  }

  /* Drops "Open " from the CTA on mobile, leaving just "Builder" — the fallback for
     when nowrap alone still isn't enough room. Each page's own markup wraps just that
     word: <a class="cta"><span class="cta-open-word">Open </span>Builder</a>. */
  .site-header .cta .cta-open-word {
    display: none;
  }

  .site-main {
    padding: 28px 16px 56px;
  }

  .hero {
    padding: 20px 0 36px;
  }

  .hero p {
    font-size: 15px;
  }

  .hero .actions {
    flex-direction: column;
    align-items: stretch;
  }

  .btn {
    text-align: center;
  }
}

/* ---- Ad bottom bar ---- */
/* Mirrors src/components/AdBottomBar.tsx's own layout (same two-zone split: the ad
   scrolls horizontally in its own zone, Privacy Policy/Dismiss sit in a separate,
   never-scrolled sibling that's always fully on-screen) but goes further — TWO separate
   Fixed-size ad units, swapped by breakpoint (.ad-desktop 728x90, .ad-mobile 320x50),
   not one unit reused at both sizes.
   Backstory: the original single desktop-sized unit was configured "Responsive" in the
   AdSense dashboard, not "Fixed size" — even with no data-ad-format/full-width-responsive
   attributes on this end, AdSense's own script would still override its container with an
   inline height:auto !important and substitute its own much taller auto-negotiated size
   once it decided 728x90 didn't fit a phone width (confirmed live, twice). An
   overflow:hidden clip was tried and deliberately reverted — cropping a real served ad
   risks violating AdSense's policy against obscuring ad content — and simply hiding the
   bar under 641px was the interim fix before this. A genuinely Fixed-size unit doesn't
   get the auto-negotiation treatment at all: it renders at exactly the size requested,
   so .ad-mobile below should just work at its real 320x50 with no further games needed. */
.ad-bottom-bar {
  position: fixed;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 500;
  display: flex;
  align-items: center;
  height: 98px;
  background: var(--color-surface);
  border-top: 1px solid var(--color-border-strong);
  box-shadow: var(--shadow-lg);
}

.ad-bottom-bar .ad-slot-wrap {
  flex: 1;
  min-width: 0;
  overflow-x: auto;
  padding: 0 8px;
}

.ad-bottom-bar .ad-slot-wrap ins {
  display: inline-block;
}

.ad-bottom-bar .ad-desktop {
  width: 728px;
  height: 90px;
}

/* Hidden by default (desktop-first); the mobile media query below swaps this pair. */
.ad-bottom-bar .ad-mobile {
  display: none;
  width: 320px;
  height: 50px;
}

.ad-bottom-bar .ad-controls {
  display: flex;
  align-items: center;
  gap: 4px;
  flex-shrink: 0;
  padding: 0 8px 0 0;
}

.ad-bottom-bar .ad-privacy-link {
  background: none;
  border: none;
  padding: 4px 8px;
  color: var(--color-text-muted);
  text-decoration: underline;
  cursor: pointer;
  font-size: 11px;
  line-height: 1;
  white-space: nowrap;
}

.ad-bottom-bar .ad-dismiss-btn {
  width: 28px;
  height: 28px;
  flex-shrink: 0;
  border-radius: 50%;
  border: 1px solid var(--color-border-strong);
  background: var(--color-surface);
  color: var(--color-text);
  font-size: 14px;
  font-weight: 700;
  line-height: 1;
  padding: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  cursor: pointer;
}

.ad-bottom-bar .ad-dismiss-btn:hover {
  background: var(--color-surface-alt);
}

/* Reserves space at the bottom of the page for the fixed bar above, so it doesn't overlap
   the footer — toggled off (see each page's own dismiss script) once the bar is gone. */
body.has-ad-bar {
  padding-bottom: 98px;
}

/* Swaps in the dedicated 320x50 Fixed-size mobile unit and a shorter bar to match (a 98px
   bar around a 50px ad wastes a lot of the screen a phone doesn't have to spare — 66px
   keeps the same ~8px breathing room on each side the desktop 98px/90px pairing has).
   Each page's own inline script mirrors this same 641px cutoff when deciding which one to
   actually push() a fill request for — the hidden one is never pushed, only ever the one
   actually shown. Deliberately its own media query block placed here (after
   .ad-bottom-bar's own rules), not folded into the earlier general "Mobile" block above —
   a same-specificity override needs to come AFTER the rule it's overriding in source
   order to actually win the cascade, regardless of which one is behind a media query
   condition (this exact ordering bug already bit the previous version of this rule). */
@media (max-width: 640px) {
  .ad-bottom-bar {
    height: 66px;
  }

  .ad-bottom-bar .ad-desktop {
    display: none;
  }

  .ad-bottom-bar .ad-mobile {
    display: inline-block;
  }

  body.has-ad-bar {
    padding-bottom: 66px;
  }
}

/* ---- Cookie consent banner ---- */
/* Mirrors src/components/CookieConsent's own design, copy, and localStorage key
   ('cookieConsent': 'granted' | 'denied') — these static pages previously only carried the
   Consent Mode *default* (denied) script with nothing to ever call ('consent','update',...),
   so an EEA/UK visitor here was never actually asked and stayed permanently denied. Sits
   just above the ad bar (12px gap), same reasoning as the React version: an AdSense ad must
   not be obscured by other content. */
.site-cookie-consent {
  position: fixed;
  left: 12px;
  right: 12px;
  bottom: 110px; /* ad bar's 98px + 12px gap */
  z-index: 2000;
  max-width: 640px;
  margin: 0 auto;
  background: var(--color-surface);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-lg);
  box-shadow: var(--shadow-lg);
  padding: 16px 18px;
  display: flex;
  flex-direction: column;
  gap: 10px;
}
/* Equal specificity to the plain class rule above (both set `display`) -- an attribute
   selector doesn't outrank a class selector, so `hidden` needs its own rule after it to win.
   Same issue documented on the widgets-page preview modal's own [hidden] guards. */
.site-cookie-consent[hidden] {
  display: none;
}
.site-cookie-consent p {
  margin: 0;
  font-size: 13px;
  line-height: 1.5;
  color: var(--color-text);
}
.site-cookie-consent-actions {
  display: flex;
  gap: 8px;
  justify-content: flex-end;
}
.site-cookie-consent-actions button {
  padding: 7px 14px;
  font-size: 12px;
  font-weight: 600;
  border-radius: var(--radius-sm);
  cursor: pointer;
  border: 1px solid var(--color-border-strong);
  background: var(--color-surface-alt);
  color: var(--color-text);
}
.site-cookie-consent-accept {
  background: var(--color-accent) !important;
  border-color: var(--color-accent) !important;
  color: #fff !important;
}
/* Ad bar dismissed (body loses .has-ad-bar, see each page's own dismiss script) -- banner
   drops down closer to the bottom edge, matching App.tsx's own
   `adBarDismissed ? 0 : AD_BAR_HEIGHT` positioning logic. */
body:not(.has-ad-bar) .site-cookie-consent {
  bottom: 12px;
}
@media (max-width: 640px) {
  .site-cookie-consent {
    bottom: 78px; /* mobile ad bar's 66px + 12px gap */
  }
}

/* ---- In-content ad ---- */
/* A second placement, in addition to the bottom bar — non-home pages only (Widgets,
   Tools, Example, and each individual tool page). On the two pages with a long enough
   card grid (Widgets' 39 cards, Design Match's 5 widget cards), it repeats every 3rd
   card instead of sitting once at the top — see each page's own markup/script for how
   that's built (Widgets: static HTML with one ad block inserted every 3 cards; Design
   Match: the same insertion done from JS, since that grid is built at runtime). Shorter
   pages (Tools' 2 cards, Example and the CSS Slot Machine with no comparable repeating
   list) just keep the single placement between the intro and the main content. This is
   deliberately a real Responsive unit (data-ad-format="auto", data-full-width-responsive=
   "true") either way -- the bottom bar's own auto-negotiated-size problem came from forcing
   a Responsive unit into a FIXED-height pinned container other layout depended on. The
   standalone placements below still have no such container (just a normal block in the
   page's own flow, so whatever height AdSense picks there is fine) -- but the in-grid
   placement now does (see the aspect-ratio rule below and why). */
.in-content-ad {
  text-align: center;
  /* Deliberately NOT grid-column: 1/-1 -- sized like a normal grid item (same width as the
     widget/tool card next to it) when this sits inside a grid (Widgets' .card-grid, Design
     Match's .widget-grid), so it reads as one more same-size tile in the row instead of a
     wide banner interrupting it. Same card chrome as .card/.widget-card (background,
     border, radius, padding) either way, so it's still clearly its own tile rather than a
     bare strip blending into the page. */
  background: var(--color-surface);
  border: 1px solid var(--color-border);
  border-radius: var(--radius-lg);
  padding: 16px;
  box-shadow: var(--shadow-sm);
  /* A CSS grid row stretches every item in it to match its TALLEST item -- an AdSense
     Responsive unit can render considerably taller than a widget/tool card's own fixed-
     ratio thumb once a real ad actually fills it, which was blowing out the whole row's
     height (every OTHER card in that row stretching taller too) instead of just this one
     tile. Matching .card-thumb's own 340/190 ratio (widgets/index.html) gives this element
     a definite, width-derived height the same way a real card gets one, so it can no longer
     contribute a taller natural size to the row; overflow: hidden then contains whatever
     AdSense renders to that box instead of letting it push past it. AdSense's own "auto"
     format is meant to size itself down to fit a given container, so this rarely needs to
     actually clip anything in practice. */
  aspect-ratio: 340 / 190;
  overflow: hidden;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
}
/* Used only where this sits OUTSIDE a grid (Tools' 2-card page, Example, CSS Slot Machine) --
   needs its own vertical spacing since there's no grid `gap` providing it there, and the
   fixed aspect-ratio above is specifically a grid-row-height fix that doesn't apply here --
   nothing else in the page's normal flow depends on this element's height, so it's free to
   be whatever height AdSense actually wants. */
.in-content-ad--standalone {
  margin: 32px 0;
  aspect-ratio: auto;
  display: block;
}

.in-content-ad .in-content-ad-label {
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.05em;
  color: var(--color-text-muted);
  margin-bottom: 10px;
  flex: 0 0 auto;
}

.in-content-ad ins {
  width: 100%;
  /* min-height: 0 lets this genuinely shrink to whatever's left below the label inside the
     fixed-aspect-ratio box above (a flex child's default min-height is its own content size,
     not 0 -- see the ins itself, and any real ad AdSense fills it with, wanting to be taller
     than that remaining space otherwise). */
  flex: 1 1 auto;
  min-height: 0;
}
