/* Source Sans 3, self-hosted. Google served this as a VARIABLE font, so one
   file per subset covers 400/600/700 - hence font-weight: 400 700 rather than
   three separate faces. unicode-range means latin-ext is only fetched if a
   character in that range actually appears. */
@font-face {
  font-family: "Source Sans 3";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/fonts/source-sans-3-latin.woff2") format("woff2");
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
                 U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
                 U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

@font-face {
  font-family: "Source Sans 3";
  font-style: normal;
  font-weight: 400 700;
  font-display: swap;
  src: url("/fonts/source-sans-3-latin-ext.woff2") format("woff2");
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF,
                 U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF,
                 U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}

/* DLCL brand tokens, matching the Stitch "Updated Typography" design.
   ---------------------------------------------------------------------------
   Theming model: <html data-theme="light|dark"> is set by the inline script in
   head.html before first paint (saved choice, else the OS preference). With
   JavaScript off no attribute is set, so the media query below still follows
   the OS. Pico is driven from these same tokens further down, so Pico's own
   light/dark defaults can never leak through. */

/* Light palette (the default, and what data-theme="light" pins). */
:root,
:root[data-theme="light"] {
  --dlcl-primary: #a20069;
  --dlcl-on-primary: #ffffff;
  --dlcl-primary-container: #c42683;
  --dlcl-on-primary-container: #ffe7ef;
  --dlcl-primary-hover: #c42683;
  --dlcl-secondary: #5f559a;
  --dlcl-on-secondary: #ffffff;
  --dlcl-tertiary: #00597f;
  --dlcl-on-tertiary: #ffffff;
  --dlcl-background: #fcf9f8;
  --dlcl-surface: #ffffff;
  --dlcl-surface-low: #f6f3f2;
  --dlcl-border: #e5e2e1;
  --dlcl-on-background: #1b1b1b;
  --dlcl-on-surface-variant: #57414a;
  --dlcl-inverse-surface: #313030;
  --dlcl-inverse-on-surface: #f3f0ef;
  --dlcl-footer-heading: #dcd9d9;
  --dlcl-footer-link-hover: #ffb0d6;

  /* Debunked-claim accent, used by the misinformation case cards. */
  --dlcl-alert: #b3261e;
  --dlcl-on-alert: #ffffff;
  --dlcl-alert-surface: #fceceb;
  --dlcl-on-alert-surface: #8c1d18;

  /* The wordmark is solid black on transparency and the partner marks are dark
     line art, so both need help once the page goes dark: the wordmark swaps to
     the white dlcl-logo-invert.png, the partner marks get a light chip. */
  --dlcl-logo-light-display: inline;
  --dlcl-logo-dark-display: none;
  --dlcl-logo-chip: transparent;

  /* Case-study band: the scrim laid over the Bondi photograph, and the accent
     for text printed straight onto it. */
  --dlcl-band-rgb: 252 249 248;
  --dlcl-on-photo-accent: #8c005a;

  --dlcl-sun-display: inline;
  --dlcl-moon-display: none;

  color-scheme: light;
}

/* Dark palette. Declared twice on purpose: once for visitors who have not
   picked a theme (follow the OS) and once for an explicit data-theme="dark".
   Keep the two lists in sync. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --dlcl-primary: #ffa9d2;
    --dlcl-on-primary: #5e0039;
    --dlcl-primary-container: #8e1e60;
    --dlcl-on-primary-container: #ffe0ee;
    --dlcl-primary-hover: #ffd0e6;
    --dlcl-secondary: #bcb1ec;
    --dlcl-on-secondary: #291d5c;
    --dlcl-tertiary: #8ad4f5;
    --dlcl-on-tertiary: #003549;
    --dlcl-background: #141112;
    --dlcl-surface: #1c191a;
    --dlcl-surface-low: #232021;
    --dlcl-border: #3a3435;
    --dlcl-on-background: #ece0e3;
    --dlcl-on-surface-variant: #d6c1c9;
    --dlcl-inverse-surface: #0e0c0d;
    --dlcl-inverse-on-surface: #ece0e3;
    --dlcl-footer-heading: #bfb3b7;
    --dlcl-footer-link-hover: #ffd0e6;

    --dlcl-alert: #ffb4ab;
    --dlcl-on-alert: #601410;
    --dlcl-alert-surface: #33100d;
    --dlcl-on-alert-surface: #ffdad6;

    --dlcl-logo-light-display: none;
    --dlcl-logo-dark-display: inline;
    --dlcl-logo-chip: #f3f0ef;

    --dlcl-band-rgb: 15 13 14;
    --dlcl-on-photo-accent: #ffd0e6;

    --dlcl-sun-display: none;
    --dlcl-moon-display: inline;

    color-scheme: dark;
  }
}

:root[data-theme="dark"] {
  --dlcl-primary: #ffa9d2;
  --dlcl-on-primary: #5e0039;
  --dlcl-primary-container: #8e1e60;
  --dlcl-on-primary-container: #ffe0ee;
  --dlcl-primary-hover: #ffd0e6;
  --dlcl-secondary: #bcb1ec;
  --dlcl-on-secondary: #291d5c;
  --dlcl-tertiary: #8ad4f5;
  --dlcl-on-tertiary: #003549;
  --dlcl-background: #141112;
  --dlcl-surface: #1c191a;
  --dlcl-surface-low: #232021;
  --dlcl-border: #3a3435;
  --dlcl-on-background: #ece0e3;
  --dlcl-on-surface-variant: #d6c1c9;
  --dlcl-inverse-surface: #0e0c0d;
  --dlcl-inverse-on-surface: #ece0e3;
  --dlcl-footer-heading: #bfb3b7;
  --dlcl-footer-link-hover: #ffd0e6;

  --dlcl-alert: #ffb4ab;
  --dlcl-on-alert: #601410;
  --dlcl-alert-surface: #33100d;
  --dlcl-on-alert-surface: #ffdad6;

  --dlcl-logo-light-display: none;
  --dlcl-logo-dark-display: inline;
  --dlcl-logo-chip: #f3f0ef;

  --dlcl-band-rgb: 15 13 14;
  --dlcl-on-photo-accent: #ffd0e6;

  --dlcl-sun-display: none;
  --dlcl-moon-display: inline;

  color-scheme: dark;
}

/* Bind Pico to the DLCL tokens. These reference the palette above, so they
   resolve per theme automatically and Pico never supplies a colour of its own.
   Pico sets colour directly on p/ul/ol/table/headings, which is why an
   unbound --pico-color used to show as pale grey on our always-light
   surfaces when the device was in dark mode. */
:root {
  --pico-font-family: "Source Sans 3", system-ui, sans-serif;
  --pico-color: var(--dlcl-on-background);
  --pico-background-color: var(--dlcl-background);
  --pico-muted-color: var(--dlcl-on-surface-variant);
  --pico-muted-border-color: var(--dlcl-border);
  --pico-h1-color: var(--dlcl-on-background);
  --pico-h2-color: var(--dlcl-on-background);
  --pico-h3-color: var(--dlcl-on-background);
  --pico-h4-color: var(--dlcl-on-background);
  --pico-h5-color: var(--dlcl-on-background);
  --pico-h6-color: var(--dlcl-on-background);
  --pico-primary: var(--dlcl-primary);
  --pico-primary-hover: var(--dlcl-primary-hover);
  --pico-primary-underline: var(--dlcl-primary-hover);
}

/* Pico scales the root font size with the viewport (up to 131.25% at 1536px),
   but .dlcl-container is capped at a fixed 1200px. Past 125% the rem-sized
   navbar outgrows that container and wraps into a 200px-tall stack on large
   monitors, so hold the last step that still fits. */
@media (min-width: 1536px) {
  :root {
    --pico-font-size: 125%;
  }
}

/* The navbar is sticky, so anchor jumps (/#mission, /#why, ...) would land the
   target heading underneath it without this offset. */
section[id] {
  scroll-margin-top: 7rem;
}

body {
  background: var(--dlcl-background);
  color: var(--dlcl-on-background);
}

h1, h2, h3, h4, h5, h6 {
  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
  font-weight: 700;
  letter-spacing: -0.01em;
  color: var(--dlcl-on-background);
}

/* Inline icons (partials/icon.html). Sized in em so they track the text they
   sit in, exactly as the icon font did. */
.dlcl-icon {
  width: 1.1em;
  height: 1.1em;
  flex: 0 0 auto;
  fill: currentColor;
  vertical-align: -0.15em;
}

.dlcl-container {
  max-width: 1200px;
  margin-inline: auto;
  padding-inline: 1.5rem;
}

.dlcl-eyebrow {
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 0.85rem;
  font-weight: 700;
  color: var(--dlcl-primary);
}

.dlcl-label {
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--dlcl-on-surface-variant);
  margin-bottom: 1rem;
}

/* Buttons */
.dlcl-btn {
  display: inline-block;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-size: 0.95rem;
  line-height: 1;
  padding: 0.75rem 1.75rem;
  border-radius: 0.25rem;
  border: 1px solid transparent;
  cursor: pointer;
  text-decoration: none;
  transition: background-color 0.15s, color 0.15s;
}

.dlcl-btn-solid {
  background: var(--dlcl-primary);
  color: var(--dlcl-on-primary);
}

.dlcl-btn-solid:hover {
  background: var(--dlcl-primary-container);
  color: var(--dlcl-on-primary-container);
}

.dlcl-btn-outline {
  background: transparent;
  color: var(--dlcl-primary);
  border-color: var(--dlcl-primary);
}

.dlcl-btn-outline:hover:not(:disabled) {
  background: var(--dlcl-primary);
  color: var(--dlcl-on-primary);
}

.dlcl-btn-outline:disabled {
  opacity: 0.5;
  cursor: not-allowed;
}

/* Navbar */
.dlcl-navbar {
  background: var(--dlcl-surface);
  border-bottom: 1px solid var(--dlcl-border);
  position: sticky;
  top: 0;
  z-index: 50;
}

.dlcl-navbar-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1.5rem;
  position: relative;
}

.dlcl-brand-group {
  flex: 0 1 auto;
  min-width: 0;
}

.dlcl-brand {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  min-width: 0;
  text-decoration: none;
}

.dlcl-brand-logo {
  /* The squash came from pairing a fixed `height` with a flex-shrinkable
     width. Sizing the wordmark by max-height with both dimensions `auto` hands
     it back to the replaced-element sizing rules, so on a viewport too narrow
     even for the collapsed bar it scales down proportionally instead. */
  flex: 0 1 auto;
  height: auto;
  width: auto;
  max-height: 2.25rem;
  max-width: 100%;
}

/* Only one of the two wordmark files is in the layout at a time. */
.dlcl-brand-logo-light { display: var(--dlcl-logo-light-display); }
.dlcl-brand-logo-dark { display: var(--dlcl-logo-dark-display); }

.dlcl-brand-name {
  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
  font-weight: 700;
  color: var(--dlcl-on-background);
  letter-spacing: -0.01em;
}

/* The burger and its checkbox only exist below the nav breakpoint.
   The sibling combinator is not decorative: Pico ships
   `[type=checkbox]~label { display: inline-block }` at specificity (0,1,1),
   which outranks a bare `.dlcl-nav-burger` (0,1,0) and would leave the burger
   painted on desktop. Every rule that sets `display` on the burger has to
   carry at least that much weight. */
.dlcl-nav-toggle,
.dlcl-nav-toggle ~ .dlcl-nav-burger {
  display: none;
}

/* Theme toggle. Pico styles bare <button>, so neutralise it through Pico's own
   custom properties rather than fighting its selectors. */
.dlcl-theme-toggle {
  --pico-background-color: transparent;
  --pico-border-color: transparent;
  --pico-color: currentColor;
  --pico-box-shadow: none;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
  width: 2.5rem;
  height: 2.5rem;
  padding: 0;
  margin: 0;
  border: 1px solid transparent;
  border-radius: 0.25rem;
  background: none;
  color: var(--dlcl-on-surface-variant);
  cursor: pointer;
}

.dlcl-theme-toggle:hover,
.dlcl-theme-toggle:focus {
  background: none;
  border-color: var(--dlcl-border);
  color: var(--dlcl-primary);
}

.dlcl-theme-toggle svg {
  width: 1.25rem;
  height: 1.25rem;
  stroke: currentColor;
  fill: none;
}

.dlcl-theme-toggle:focus-visible {
  outline: 2px solid var(--dlcl-primary);
  outline-offset: 2px;
}

/* Which glyph shows is a palette decision, so it rides on the theme tokens
   and needs no JavaScript to keep in sync. */
.dlcl-theme-toggle .dlcl-icon-sun { display: var(--dlcl-sun-display); }
.dlcl-theme-toggle .dlcl-icon-moon { display: var(--dlcl-moon-display); }

.dlcl-navbar-menu {
  display: flex;
  flex: 1 1 auto;
  align-items: center;
  /* Links and actions sit together against the right edge, with a wider gap
     between the two groups than within them so they still read as separate. */
  justify-content: flex-end;
  gap: 2.25rem;
}

.dlcl-navbar-links {
  display: flex;
  gap: 1.5rem;
  flex-wrap: wrap;
}

.dlcl-navbar-links a {
  color: var(--dlcl-on-surface-variant);
  text-decoration: none;
  text-transform: uppercase;
  font-weight: 700;
  font-size: 0.9rem;
  letter-spacing: 0.02em;
}

.dlcl-navbar-links a:hover {
  color: var(--dlcl-primary);
}

.dlcl-navbar-actions {
  display: flex;
  gap: 1rem;
  flex-wrap: wrap;
}

/* Hero */
.dlcl-hero {
  background: var(--dlcl-surface);
  border-bottom: 1px solid var(--dlcl-border);
  padding-block: 5rem;
}

.dlcl-hero-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) minmax(0, 0.55fr);
  align-items: center;
  gap: 3rem;
}

.dlcl-hero-inner {
  max-width: 900px;
  min-width: 0;
  text-align: left;
}

/* Animated mark. The SVG is authored in its resting state, so this is also
   exactly what shows with JavaScript off. */
.dlcl-hero-figure {
  min-width: 0;
  display: flex;
  justify-content: center;
}

/* Descendant selector on purpose: Pico ships `svg:not(:root){overflow:hidden}`,
   and :not(:root) gives that rule specificity (0,1,1), which outranks a plain
   class. Without the extra weight the bubble is clipped at the SVG edge when
   the wiggle swings it past the viewBox. */
.dlcl-hero-figure .dlcl-logo-anim {
  width: 100%;
  max-width: 26rem;
  height: auto;
  color: var(--dlcl-on-background);
  fill: currentColor;
  overflow: visible;
}

/* Beat 2: border pixels blink out of the bubble. Filled with the hero surface
   rather than an accent so they read at full contrast against the solid mark
   in either theme. */
.dlcl-anim-glitch rect {
  opacity: 0;
  fill: var(--dlcl-surface);
}

/* Chatbox 1, its pixels and the glitch squares are wiggled as one rigid body,
   so they must share a pivot. fill-box would give each group its own reference
   box - three different centres - and they visibly shear apart under rotation.
   view-box pins all three to the same point in the icon's own coordinates,
   just under the bubble's tail. */
.dlcl-anim-box1,
.dlcl-anim-pixels,
.dlcl-anim-glitch {
  transform-box: view-box;
  transform-origin: 81px 372px;
}

/* These transform independently, about their own centres. */
.dlcl-anim-box2,
.dlcl-anim-corner,
.dlcl-anim-px {
  transform-box: fill-box;
  transform-origin: center;
}

.dlcl-hero h1 {
  /* Capped for the two-column hero: the container maxes out at 1200px, so a
     purely viewport-based size keeps growing after the column has stopped and
     wraps "against Digital Deception". Restored larger once stacked. */
  font-size: clamp(2.1rem, 3.9vw, 2.95rem);
  line-height: 1.05;
  margin-block: 0.5rem 1.25rem;
  color: var(--dlcl-on-background);
}

.dlcl-hero-lede {
  max-width: 42rem;
  font-size: 1.15rem;
  line-height: 1.7;
  color: var(--dlcl-on-surface-variant);
}

.dlcl-hero-actions {
  display: flex;
  gap: 1rem;
  margin-top: 2rem;
  flex-wrap: wrap;
}

/* Sections */
.dlcl-section {
  padding-block: 4rem;
}

.dlcl-section-mission {
  background: var(--dlcl-surface-low);
  border-bottom: 1px solid var(--dlcl-border);
}

.dlcl-section-partners {
  background: var(--dlcl-surface);
  padding-block: 1.5rem;
  text-align: center;
  border-bottom: 1px solid var(--dlcl-border);
}

.dlcl-section-partners .dlcl-label {
  margin-bottom: 1rem;
}

.dlcl-partners-row {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 3.5rem;
  flex-wrap: wrap;
}

.dlcl-partners-row img {
  flex: 0 0 auto;
  height: auto;
  width: auto;
  max-height: 3rem;
  max-width: 100%;
  object-fit: contain;
  /* Partner marks are multi-colour dark line art, so in dark mode they sit on a
     light chip rather than being filtered (which would wreck their colours).
     content-box keeps max-height measuring the artwork, not the chip. */
  box-sizing: content-box;
  padding: 0.4rem 0.6rem;
  background: var(--dlcl-logo-chip);
  border-radius: 0.25rem;
}

/* Misinformation case cards ("The lies arrived before the facts").
   Every claim is flagged before it is stated, and the claim itself is set in a
   recessed, quoted style so a card can never be mistaken for an endorsement of
   the thing it debunks. */
.dlcl-section-cases {
  position: relative;
  isolation: isolate;
  overflow: hidden;
  background-color: rgb(var(--dlcl-band-rgb));
  border-block: 1px solid var(--dlcl-border);
}

/* Photo layer. Animated with transform + filter only, so it stays on the
   compositor and never triggers layout or paint. The inset bleed means the
   drift can never expose an edge. */
.dlcl-section-cases::before {
  content: "";
  position: absolute;
  inset: -14%;
  z-index: -2;
  background: url("/img/bondi-dark-clouds.jpg") 62% 45% / cover no-repeat;
  transform-origin: 62% 38%;
  animation:
    dlcl-cloud-drift 28s ease-in-out infinite alternate,
    dlcl-cloud-light 17s ease-in-out infinite alternate;
  will-change: transform, filter;
}

/* Scrim. Static, and sized from the photo's brightest pixel (pure white): at
   these alphas #f4f1f0 stays above 6:1 anywhere the photo can drift to. */
.dlcl-section-cases::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background: linear-gradient(
    180deg,
    rgb(var(--dlcl-band-rgb) / 0.62) 0%,
    rgb(var(--dlcl-band-rgb) / 0.76) 30%,
    rgb(var(--dlcl-band-rgb) / 0.86) 62%,
    rgb(var(--dlcl-band-rgb) / 0.94) 100%
  );
}

@keyframes dlcl-cloud-drift {
  from { transform: scale(1.06) translate3d(-3.2%, 1.4%, 0); }
  to   { transform: scale(1.22) translate3d(3.2%, -2.6%, 0); }
}

/* Weather passing over the sun, not a flash. */
@keyframes dlcl-cloud-light {
  from { filter: brightness(0.88); }
  to   { filter: brightness(1.10); }
}

@media (prefers-reduced-motion: reduce) {
  .dlcl-section-cases::before {
    animation: none;
    transform: scale(1.04);
  }
}

/* Text printed straight onto the photo (rather than onto a card) sits on the
   brightest part of the sky, so it takes a lighter tint than --dlcl-primary. */
.dlcl-section-cases .dlcl-eyebrow,
.dlcl-cases-stat-lead a {
  color: var(--dlcl-on-photo-accent);
}

.dlcl-cases-credit {
  margin: 2.5rem 0 0;
  text-align: right;
  font-size: 0.65rem;
  line-height: 1.45;
  /* No opacity dimming: at this size, over the pale light-mode scrim, it drops
     the credit to 3.8:1. Small and right-aligned is unobtrusive enough. */
  color: var(--dlcl-on-surface-variant);
}

.dlcl-cases-credit a {
  color: var(--dlcl-on-surface-variant);
  text-decoration: underline;
}

.dlcl-cases-credit a:hover {
  color: var(--dlcl-primary);
}

.dlcl-cases-heading {
  text-transform: uppercase;
  font-size: 2.25rem;
  line-height: 1.1;
  margin-block: 0.5rem 1rem;
}

.dlcl-cases-opener {
  max-width: 52rem;
  margin-top:2rem;
  margin-bottom: 2.5rem;
}

.dlcl-cases-lede {
  color: var(--dlcl-on-surface-variant);
  font-size: 1.05rem;
  line-height: 1.7;
  margin: 0;
}

/* The statistic leads the section, so it is set as a pull-quote rather than a
   footnote: oversized figure, rule down the side. */
/* The statistic leads the section, set as a pull-quote. The figure sits in its
   own column so both sentences share a left edge and the block reads as one
   unit rather than three competing pieces. */
.dlcl-cases-stat {
  display: flex;
  align-items: baseline;
  flex-wrap: wrap;
  column-gap: 1.1rem;
  margin: 0 0 2.25rem;
  padding: 1rem 0 1.1rem 1.5rem;
  border-left: 4px solid var(--dlcl-alert);
}

.dlcl-cases-stat-figure {
  flex: 0 0 auto;
  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
  font-weight: 700;
  font-size: 2.75rem;
  line-height: 1;
  color: var(--dlcl-alert);
}

.dlcl-cases-stat-text {
  flex: 1 1 22rem;
}

.dlcl-cases-stat-lead {
  margin: 0;
}

.dlcl-cases-stat-lead a {
  display: inline-flex;
  align-items: center;
  gap: 0.15rem;
  white-space: nowrap;
  font-size: 0.9rem;
  font-weight: 600;
  text-decoration: none;
}

.dlcl-cases-stat-lead a:hover {
  text-decoration: underline;
}

.dlcl-cases-stat-lead a .dlcl-icon {
  width: 0.95em;
  height: 0.95em;
}

/* Both sentences are the same voice, so the same size and colour. */
.dlcl-cases-stat-lead,
.dlcl-cases-stat-follow {
  font-size: 1.15rem;
  line-height: 1.5;
  color: var(--dlcl-on-background);
}

.dlcl-cases-stat-follow {
  margin: 0.5rem 0 0;
}

.dlcl-case-grid,
.dlcl-case-grid > li,
.dlcl-wider-list,
.dlcl-wider-list > li {
  list-style: none;
}

.dlcl-case-grid {
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}

.dlcl-case {
  display: flex;
  flex-direction: column;
  gap: 1rem;
  border-top: 4px solid var(--dlcl-alert);
}

.dlcl-case-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

/* Solid rather than outlined: a -webkit-text-stroke numeral has a transparent
   fill, which reads as 1:1 contrast to any checker and is genuinely thin to
   read at this size. */
.dlcl-case-num {
  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
  font-weight: 700;
  font-size: 0.95rem;
  line-height: 1;
  letter-spacing: 0.12em;
  color: var(--dlcl-on-surface-variant);
}

.dlcl-case-flag {
  display: inline-block;
  background: var(--dlcl-alert);
  color: var(--dlcl-on-alert);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 0.7rem;
  font-weight: 700;
  padding: 0.3rem 0.6rem;
  border-radius: 0.25rem;
}

.dlcl-case-claim {
  margin: 0;
  padding: 0.9rem 1rem;
  background: var(--dlcl-alert-surface);
  color: var(--dlcl-on-alert-surface);
  border-radius: 0.25rem;
  font-size: 1rem;
  font-style: italic;
  line-height: 1.5;
}

.dlcl-case-truth {
  margin: 0;
  font-size: 0.95rem;
  line-height: 1.6;
  color: var(--dlcl-on-surface-variant);
}

.dlcl-case-truth strong {
  display: block;
  color: var(--dlcl-on-background);
  text-transform: uppercase;
  letter-spacing: 0.04em;
  font-size: 0.75rem;
  margin-bottom: 0.35rem;
}

.dlcl-case-source {
  display: inline-flex;
  align-items: center;
  gap: 0.25rem;
  margin-top: auto;
  padding-top: 0.5rem;
  color: var(--dlcl-primary);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-size: 0.8rem;
  text-decoration: none;
}

.dlcl-case-source:hover {
  color: var(--dlcl-primary-hover);
  text-decoration: underline;
}

.dlcl-case-source .dlcl-icon {
  width: 1em;
  height: 1em;
}

/* Optional figure slot inside the band, for showing a debunked artefact itself. */
.dlcl-case-figure {
  margin: 2.5rem 0 0;
}

.dlcl-case-figure img {
  display: block;
  width: 100%;
  max-height: 420px;
  object-fit: contain;
  border-radius: 0.25rem;
}

.dlcl-case-figure figcaption {
  margin-top: 0.6rem;
  font-size: 0.8rem;
  line-height: 1.5;
  color: var(--dlcl-on-surface-variant);
}

.dlcl-case-figure figcaption a {
  color: var(--dlcl-on-surface-variant);
  text-decoration: underline;
}

.dlcl-case-figure figcaption a:hover {
  color: var(--dlcl-primary);
}

/* Variant for showing a debunked artefact itself (deepfake, manipulated still,
   fake article screenshot). Add .dlcl-case-figure-fabricated to the <figure>
   and give it a data-flag; the label is drawn over the image so the artefact
   can never be screenshotted or hotlinked without its verdict attached. */
.dlcl-case-figure-fabricated {
  position: relative;
}

.dlcl-case-figure-fabricated img {
  object-fit: contain;
  background: var(--dlcl-surface-low);
  border: 1px solid var(--dlcl-alert);
}

.dlcl-case-figure-fabricated::before {
  content: attr(data-flag);
  position: absolute;
  top: 0.75rem;
  left: 0.75rem;
  z-index: 1;
  background: var(--dlcl-alert);
  color: var(--dlcl-on-alert);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  font-weight: 700;
  font-size: 0.8rem;
  padding: 0.4rem 0.7rem;
  border-radius: 0.25rem;
}

/* Wider examples beneath the Bondi cards. */
.dlcl-cases-wider {
  margin-top: 2.5rem;
  padding-top: 2rem;
  border-top: 1px solid var(--dlcl-border);
}

.dlcl-cases-wider h3 {
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-size: 1.05rem;
  margin: 0 0 1.25rem;
}

.dlcl-wider-list {
  padding: 0;
  margin: 0;
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 1.25rem;
}

/* Same card treatment as the Bondi cases above, just denser. */
.dlcl-wider-item {
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  padding: 1.25rem;
}

.dlcl-wider-item p {
  margin: 0;
  font-size: 0.9rem;
  line-height: 1.55;
  color: var(--dlcl-on-surface-variant);
}

.dlcl-wider-place {
  display: block;
  color: var(--dlcl-alert);
  text-transform: uppercase;
  letter-spacing: 0.06em;
  font-size: 0.72rem;
  font-weight: 700;
}

.dlcl-wider-list a {
  display: flex;
  width: fit-content;
  align-items: center;
  gap: 0.2rem;
  margin-top: auto;
  padding-top: 0.5rem;
  color: var(--dlcl-primary);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-size: 0.75rem;
  text-decoration: none;
}

.dlcl-wider-list a:hover {
  color: var(--dlcl-primary-hover);
  text-decoration: underline;
}

.dlcl-wider-list a .dlcl-icon {
  width: 1em;
  height: 1em;
}

/* Call to action */
.dlcl-cases-actions {
  display: flex;
  align-items: center;
  gap: 1.5rem;
  flex-wrap: wrap;
  margin-top: 2.5rem;
}

/* Visible to screen readers only: labels the claim as debunked before it is read. */
.dlcl-sr-only {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
  border: 0;
}

.dlcl-section-activities {
  background: var(--dlcl-surface);
}

.dlcl-section-blog {
  background: var(--dlcl-surface-low);
  border-top: 1px solid var(--dlcl-border);
  border-bottom: 1px solid var(--dlcl-border);
}

.dlcl-section-people {
  background: var(--dlcl-surface);
  border-top: 1px solid var(--dlcl-border);
}

.dlcl-section-heading {
  text-align: center;
  text-transform: uppercase;
  margin-bottom: 3rem;
}

.dlcl-people-intro {
  max-width: 46rem;
  margin: -2rem auto 3rem;
  text-align: center;
  color: var(--dlcl-on-surface-variant);
  font-size: 1.05rem;
  line-height: 1.6;
}

.dlcl-section-blog .dlcl-section-heading {
  text-align: left;
}

/* Grid + cards */
.dlcl-section-mission h2 {
  text-transform: uppercase;
  margin-bottom: 1.5rem;
}

.dlcl-mission-intro {
  color: var(--dlcl-on-surface-variant);
}

.dlcl-card {
  background: var(--dlcl-surface);
  border: 1px solid var(--dlcl-border);
  border-radius: 0.25rem;
  padding: 2rem;
  box-shadow: 0 1px 2px rgba(27, 27, 27, 0.06);
}

.dlcl-accent-card {
  background: var(--dlcl-background);
  border: 1px solid var(--dlcl-border);
  border-left: 4px solid var(--dlcl-primary);
  border-radius: 0 0.25rem 0.25rem 0;
}

.dlcl-accent-card h3 {
  text-transform: uppercase;
  margin-bottom: 1rem;
}

.dlcl-accent-card p + p {
  margin-top: 1rem;
}

.dlcl-accent-card .dlcl-mission-intro {
  margin-top: 1.5rem;
}

.dlcl-icon-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-direction: column;
  gap: 0.85rem;
}

.dlcl-icon-list li {
  display: flex;
  align-items: flex-start;
  gap: 0.75rem;
}

.dlcl-icon-list .dlcl-icon {
  color: var(--dlcl-primary);
  width: 1.25em;
  height: 1.25em;
  margin-top: 0.15rem;
}

/* Core activities */
.dlcl-badge {
  display: inline-block;
  background: var(--dlcl-primary-container);
  color: var(--dlcl-on-primary-container);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 0.75rem;
  font-weight: 700;
  padding: 0.35rem 0.75rem;
  border-radius: 0.25rem;
}

.dlcl-activity-card {
  display: grid;
  grid-template-columns: 5fr 7fr;
  align-items: stretch;
  border: 1px solid var(--dlcl-border);
  border-radius: 0.25rem;
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(27, 27, 27, 0.06);
}

.dlcl-activity-body {
  padding: 2.5rem;
  display: flex;
  flex-direction: column;
  align-items: flex-start;
  gap: 1.5rem;
  justify-content: center;
}

.dlcl-activity-logo {
  flex: 0 0 auto;
  height: auto;
  width: auto;
  max-height: 6rem;
  max-width: 100%;
  object-fit: contain;
}

.dlcl-activity-media {
  position: relative;
  min-height: 400px;
}

.dlcl-activity-media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.dlcl-activity-caption {
  position: absolute;
  bottom: 1.5rem;
  right: 1.5rem;
  background: var(--dlcl-surface);
  color: var(--dlcl-on-background);
  padding: 0.5rem 1rem;
  border-radius: 0.25rem;
  font-weight: 600;
  font-size: 0.85rem;
  box-shadow: 0 1px 2px rgba(27, 27, 27, 0.15);
}

.dlcl-stat-strip {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 0.75rem 2.5rem;
  margin-top: -1rem;
  padding-top: 0rem;
  padding-bottom: 2rem;
  text-align: center;
  font-family: "Liberation Sans", Arial, Helvetica, sans-serif;
  font-weight: 700;
  color: var(--dlcl-primary);
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-size: 0.95rem;
}

/* Leadership */
.dlcl-people-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 2rem;
}

.dlcl-person-card {
  background: var(--dlcl-surface);
  border: 1px solid var(--dlcl-border);
  border-radius: 0.25rem;
  overflow: hidden;
  box-shadow: 0 1px 2px rgba(27, 27, 27, 0.06);
  display: flex;
  flex-direction: column;
}

.dlcl-person-photo-wrap {
  position: relative;
  height: 260px;
  background: var(--dlcl-surface-low);
}

.dlcl-person-photo-wrap img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

.dlcl-person-photo-wrap .dlcl-badge {
  position: absolute;
  top: 0.5rem;
  left: 1rem;
  background: var(--dlcl-primary);
  color: var(--dlcl-on-primary);
}

.dlcl-badge-primary { background: var(--dlcl-primary); color: var(--dlcl-on-primary); }
.dlcl-badge-tertiary { background: var(--dlcl-tertiary); color: var(--dlcl-on-tertiary); }
.dlcl-badge-secondary { background: var(--dlcl-secondary); color: var(--dlcl-on-secondary); }

.dlcl-person-body {
  padding: 1.5rem;
  display: flex;
  flex-direction: column;
  gap: 0.5rem;
  flex-grow: 1;
}

.dlcl-person-body h3 {
  margin-bottom: 0;
}

.dlcl-person-role {
  display: flex;
  align-items: center;
  gap: 0.4rem;
  font-weight: 600;
  margin-bottom: 0.5rem;
}

.dlcl-role-primary { color: var(--dlcl-primary); }
.dlcl-role-tertiary { color: var(--dlcl-tertiary); }
.dlcl-role-secondary { color: var(--dlcl-secondary); }

.dlcl-person-desc {
  color: var(--dlcl-on-surface-variant);
  font-size: 0.9rem;
  margin-top: auto;
}

/* Footer */
.dlcl-footer {
  background: var(--dlcl-inverse-surface);
  color: var(--dlcl-inverse-on-surface);
  border-top: 4px solid var(--dlcl-primary);
  padding-block: 3rem;
}

.dlcl-footer-inner {
  display: flex;
  justify-content: space-between;
  align-items: flex-start;
  gap: 2.5rem;
  flex-wrap: wrap;
}

.dlcl-footer-logo-wrap {
  display: inline-flex;
  flex: 0 0 auto;
}

.dlcl-footer-logo {
  flex: 0 0 auto;
  height: auto;
  width: auto;
  max-height: 2rem;
  max-width: 100%;
}

.dlcl-footer-copy {
  max-width: 26rem;
  margin-top: 1rem;
  font-size: 0.85rem;
  color: var(--dlcl-inverse-on-surface);
  opacity: 0.8;
}

.dlcl-footer-links {
  display: flex;
  gap: 3rem;
  flex-wrap: wrap;
}

.dlcl-footer-links h4 {
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 1rem;
  color: var(--dlcl-footer-heading);
  margin-bottom: 0.75rem;
}

.dlcl-footer-links a {
  display: block;
  color: var(--dlcl-inverse-on-surface);
  opacity: 0.85;
  text-decoration: none;
  font-size: 0.9rem;
  margin-bottom: 0.5rem;
}

.dlcl-footer-links a:hover {
  color: var(--dlcl-footer-link-hover);
  opacity: 1;
}

/* Contact / single page. No max-width of its own: it inherits .dlcl-container's
   1200px so these pages line up with the home and news pages. */
.dlcl-single h1 {
  text-transform: uppercase;
  margin-bottom: 1.5rem;
}

/* Taxonomy views */
.dlcl-term-count {
  color: var(--dlcl-on-surface-variant);
  margin: -0.5rem 0 2rem;
}

.dlcl-tag-list a {
  color: inherit;
  text-decoration: none;
}

.dlcl-tag:hover {
  border-color: var(--dlcl-primary);
}

.dlcl-tag-list a span {
  margin-left: 0.4rem;
  font-variant-numeric: tabular-nums;
}

/* Blog */
.dlcl-more-row {
  text-align: right;
  margin-top: 1.5rem;
}

.dlcl-more-link {
  color: var(--dlcl-primary);
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.02em;
  font-size: 0.9rem;
  text-decoration: none;
}

.dlcl-more-link:hover {
  color: var(--dlcl-primary-hover);
}

.dlcl-blog-grid {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 1.5rem;
}

.dlcl-blog-card-media {
  display: block;
  margin: -2rem -2rem 1rem;
}

.dlcl-blog-card-media img {
  width: 100%;
  height: 160px;
  object-fit: cover;
  border-radius: 0.25rem 0.25rem 0 0;
}

.dlcl-blog-card h3 {
  font-size: 1.1rem;
  margin: 0.5rem 0;
}

.dlcl-blog-card h3 a {
  color: inherit;
  text-decoration: none;
}

.dlcl-blog-card h3 a:hover {
  color: var(--dlcl-primary);
}

.dlcl-blog-date {
  text-transform: uppercase;
  letter-spacing: 0.05em;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--dlcl-primary);
  margin: 0;
}

.dlcl-blog-summary {
  color: var(--dlcl-on-surface-variant);
  font-size: 0.9rem;
  margin: 0;
}

.dlcl-blog-hero-image {
  width: 100%;
  max-height: 420px;
  object-fit: cover;
  border-radius: 0.25rem;
  margin-bottom: 2rem;
}

.dlcl-section-blog-single .dlcl-blog-date {
  margin-bottom: 0.5rem;
}

/* list-style-type is set on li itself by Pico, so clearing it on the ul alone
   leaves square bullets showing (same fix as .dlcl-case-grid / .dlcl-wider-list). */
.dlcl-tag-list,
.dlcl-tag-list > li {
  list-style: none;
}

.dlcl-tag-list {
  display: flex;
  flex-wrap: wrap;
  gap: 0.5rem;
  padding: 0;
  /* No top margin: the hero image above already carries a 2rem margin-bottom. */
  margin: 0 0 2rem;
}

.dlcl-tag {
  background: var(--dlcl-surface-low);
  border: 1px solid var(--dlcl-border);
  color: var(--dlcl-on-surface-variant);
  font-size: 0.8rem;
  font-weight: 600;
  padding: 0.3rem 0.75rem;
  border-radius: 999px;
}

.dlcl-blog-back {
  margin-top: 1.5rem;
}

.dlcl-blog-back a {
  color: var(--dlcl-primary);
  font-weight: 600;
  text-decoration: none;
}

@media (max-width: 1199px) {
  /* --- Collapsed navigation -------------------------------------------------
     A checkbox drives the panel so no JavaScript is required to open it. The
     checkbox is visually hidden but still focusable, so keyboard users tab to
     it and press Space; pointer users hit the <label> burger. Row 1 is
     brand / theme / burger, and the panel is a full-width second flex row. */
  .dlcl-navbar-inner {
    flex-wrap: wrap;
    column-gap: 0.5rem;
    row-gap: 0;
  }

  .dlcl-brand-group { order: 0; }
  .dlcl-theme-toggle { order: 1; margin-inline-start: auto; }
  .dlcl-nav-burger { order: 2; }
  .dlcl-navbar-menu { order: 3; }

  .dlcl-nav-toggle {
    display: block;
    position: absolute;
    width: 1px;
    height: 1px;
    margin: 0;
    padding: 0;
    border: 0;
    overflow: hidden;
    clip-path: inset(50%);
    white-space: nowrap;
  }

  .dlcl-nav-toggle ~ .dlcl-nav-burger {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: 2.75rem;
    height: 2.75rem;
    margin-inline-start: 0.25rem;
    border: 1px solid var(--dlcl-border);
    border-radius: 0.25rem;
    background: var(--dlcl-surface);
    color: var(--dlcl-on-background);
    cursor: pointer;
  }

  .dlcl-nav-burger .dlcl-nav-icon {
    width: 1.6rem;
    height: 1.6rem;
  }

  .dlcl-nav-icon-close { display: none; }
  .dlcl-nav-toggle:checked ~ .dlcl-nav-burger .dlcl-nav-icon-open { display: none; }
  .dlcl-nav-toggle:checked ~ .dlcl-nav-burger .dlcl-nav-icon-close { display: inline; }

  .dlcl-nav-toggle:focus-visible ~ .dlcl-nav-burger {
    outline: 2px solid var(--dlcl-primary);
    outline-offset: 2px;
  }

  .dlcl-navbar-menu {
    display: none;
    flex: 0 0 100%;
    flex-direction: column;
    align-items: stretch;
    justify-content: flex-start;
    gap: 0;
    max-height: calc(100vh - 8rem);
    overflow-y: auto;
  }

  .dlcl-nav-toggle:checked ~ .dlcl-navbar-menu {
    display: flex;
  }

  .dlcl-navbar-links {
    flex-direction: column;
    flex-wrap: nowrap;
    gap: 0;
    margin-top: 0.85rem;
    border-top: 1px solid var(--dlcl-border);
  }

  .dlcl-navbar-links a {
    padding-block: 0.9rem;
    border-bottom: 1px solid var(--dlcl-border);
  }

  .dlcl-navbar-actions {
    flex-direction: column;
    flex-wrap: nowrap;
    align-items: stretch;
    gap: 0.75rem;
    padding-block: 1.25rem 0.5rem;
  }

  .dlcl-navbar-actions .dlcl-btn {
    text-align: center;
  }

}

@media (max-width: 980px) {
  .dlcl-activity-card {
    grid-template-columns: 1fr;
  }

  .dlcl-activity-media {
    min-height: 280px;
  }

  .dlcl-people-grid {
    grid-template-columns: 1fr;
  }

  .dlcl-case-grid {
    grid-template-columns: 1fr;
  }

  .dlcl-wider-list {
    grid-template-columns: repeat(2, 1fr);
  }

  .dlcl-cases-stat-figure {
    font-size: 2.25rem;
  }

  .dlcl-cases-heading {
    font-size: 1.75rem;
  }

  .dlcl-cases-cta {
    align-items: flex-start;
  }

  .dlcl-cases-actions {
    width: 100%;
  }

  .dlcl-blog-grid {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 560px) {
  .dlcl-wider-list {
    grid-template-columns: 1fr;
  }
}

@media (max-width: 420px) {
  .dlcl-container {
    padding-inline: 1rem;
  }

  /* A wrapping flex row moves items to the next line before it shrinks them,
     so on very narrow phones the wordmark has to give up height for the
     brand / theme / burger row to stay on one line. */
  .dlcl-brand-logo {
    max-height: clamp(1.5rem, 7vw, 1.9rem);
  }

  .dlcl-nav-burger {
    width: 2.5rem;
    height: 2.5rem;
  }

  .dlcl-card {
    padding: 1.5rem;
  }

  .dlcl-blog-card-media {
    margin: -1.5rem -1.5rem 1rem;
  }

  .dlcl-activity-body {
    padding: 1.5rem;
  }
}

@media (max-width: 900px) {
  /* Stack: the mark drops below the copy and shrinks. */
  .dlcl-hero-grid {
    grid-template-columns: minmax(0, 1fr);
    gap: 2.5rem;
  }

  .dlcl-hero h1 {
    font-size: clamp(2rem, 7.5vw, 3rem);
  }

  .dlcl-logo-anim {
    max-width: 17rem;
  }
}

@media (max-width: 720px) {
  /* No room for the mark on a phone: drop it entirely rather than shrink it.
     The script checks its computed display and skips building the animation. */
  .dlcl-hero-figure {
    display: none;
  }

  .dlcl-hero {
    padding-block: 3rem;
  }

  .dlcl-hero h1 {
    font-size: 2.25rem;
  }

  .dlcl-footer-inner {
    flex-direction: column;
    align-items: flex-start;
  }
}
