/* ==========================================================================
   base.css — reset + page shell
   --------------------------------------------------------------------------
   The Figma frame is a fixed 1440 x 3067.46 desktop artboard. This baseline
   reproduces it at that exact width; responsive behaviour is deliberately
   out of scope for Phase 1 and is not implemented here.
   ========================================================================== */

*,
*::before,
*::after {
  box-sizing: border-box;   /* Figma strokes are inside-aligned, so every
                               1px card border must sit inside the measured
                               202x303 / 313x176 box, not add to it.        */
}

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

body {
  background: var(--color-background);
  color: var(--color-on-surface);
  font-family: var(--type-family);
  font-size: var(--type-body-m-size);
  line-height: var(--type-line-height);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

img {
  display: block;
  max-width: 100%;
}

button {
  font: inherit;
  color: inherit;
  background: none;
  border: 0;
  padding: 0;
}

a {
  color: inherit;
  text-decoration: none;
}

ul {
  margin: 0;
  padding: 0;
  list-style: none;
}

p,
h1, h2, h3, h4, h5, h6 {
  margin: 0;
  font-size: inherit;
  font-weight: inherit;
}

/* --------------------------------------------------------------------------
   Page frame — the 1440px artboard
   -------------------------------------------------------------------------- */

/* Fluid shell. Full-bleed sections (hero, branded rail, app bar, footer)
   run the whole viewport width; content sits inside --frame-gutter, which
   resolves to the Figma 64px at the 1440px artboard width. */
.page {
  width: 100%;
  min-width: 1200px;
  margin: 0 auto;
  background: var(--color-background);
  /* `clip`, not `hidden`: hidden makes .page a scroll container, which
     breaks position:sticky on the app bar. clip clips without scrolling.  */
  overflow-x: clip;
}

/* --------------------------------------------------------------------------
   Shared primitives
   -------------------------------------------------------------------------- */

/* 4px round separator used in the hero meta row and enriched-card titles */
.dot-divider {
  width: 4px;
  height: 4px;
  border-radius: var(--radius-full);
  background: var(--color-white-80);
  flex: 0 0 auto;
}

.dot-divider--on-surface {
  background: var(--color-on-surface);
}

/* Icon wrapper: keeps the SVG at its exported intrinsic size */
.icon {
  display: block;
  flex: 0 0 auto;
}

.icon--xs { width: var(--icon-xs); height: var(--icon-xs); }
.icon--s  { width: var(--icon-s);  height: var(--icon-s);  }
.icon--m  { width: var(--icon-m);  height: var(--icon-m);  }
.icon--l  { width: var(--icon-l);  height: var(--icon-l);  }
.icon--xl { width: var(--icon-xl); height: var(--icon-xl); }

/* Screen-reader-only text for icon-only controls */
.visually-hidden {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}
