/*!
 * Wolf Cloud Style System
 * Canonical design baseline for Wolf Cloud frontend projects.
 *
 * Maintainer: Liam Wolf <liam@wolf-cloud.com>
 * Repository: git.wolf-cloud.com/liamwolf/wolf-cloud-style-system.git
 *
 * Copyright (C) 2026 Liam Wolf
 * Licensed under the GNU Affero General Public License v3.0 or later.
 * You should have received a copy of the AGPL along with this file.
 * If not, see <https://www.gnu.org/licenses/agpl-3.0.html>.
 *
 * Design principles:
 * - Dark, atmospheric, technical, premium.
 * - Strong blue brand accent with restrained status colors.
 * - Soft glass surfaces over a deep layered background.
 * - IBM Plex Sans for body copy, IBM Plex Mono for UI labels and controls.
 * - High clarity, low clutter, controlled glow.
 * - Rounded corners, thin translucent borders, soft depth.
 * - Motion should feel calm and precise, never playful or noisy.
 *
 * Theme:
 * - Default is dark mode.
 * - Light mode: set data-theme="light" on the <html> element.
 *
 * This file is generated by wolf-cloud/build.sh from the modular sources
 * under wolf-cloud/{tokens,base,components}/ — see manifest.json for the
 * concatenation order. Do not hand-edit the generated bundle; edit the
 * source modules and re-run build.sh.
 *
 */

/* -- Fonts (Wolf Cloud CDN) ----------------------------------- */
@import url("https://static.wolf-cloud.com/fonts/fonts.css");

:root {
  color-scheme: dark;

  /* Core palette */
  --ink:         #080c10;
  --ink-2:       #0d1420;
  --surface:     rgba(10, 16, 28, 0.80);
  --surface-2:   rgba(14, 20, 36, 0.60);
  --surface-3:   rgba(18, 28, 46, 0.72);
  --line:        rgba(255, 255, 255, 0.06);
  --line-hi:     rgba(255, 255, 255, 0.11);
  --line-strong: rgba(255, 255, 255, 0.16);

  /* Brand */
  --brand:       #2e7fff;
  --brand-2:     #1d6be0;
  --brand-soft:  #6eb8ff;
  --brand-pale:  #a8d8ff;
  --brand-dim:   rgba(46, 127, 255, 0.18);
  --brand-glow:  rgba(46, 127, 255, 0.30);
  --brand-ring:  rgba(46, 127, 255, 0.12);

  /* Text */
  --text:        #eef2ff;
  --muted:       rgba(238, 242, 255, 0.50);
  --subtle:      rgba(238, 242, 255, 0.25);
  --text-soft:   rgba(238, 242, 255, 0.78);

  /* Status */
  --ok:          #22c55e;
  --ok-bg:       rgba(34, 197, 94, 0.09);
  --ok-bdr:      rgba(34, 197, 94, 0.25);
  --deg:         #f59e0b;
  --deg-bg:      rgba(245, 158, 11, 0.09);
  --deg-bdr:     rgba(245, 158, 11, 0.25);
  --err:         #ef4444;
  --err-bg:      rgba(239, 68, 68, 0.09);
  --err-bdr:     rgba(239, 68, 68, 0.25);
  --info:        #38bdf8;
  --info-bg:     rgba(56, 189, 248, 0.10);
  --info-bdr:    rgba(56, 189, 248, 0.24);

  /* Neutral UI badge state */
  --chip-bdr:    rgba(238, 242, 255, 0.10);
  --chip-bg:     rgba(238, 242, 255, 0.04);
  --chip-text:   rgba(238, 242, 255, 0.35);

  /* Typography */
  --font-sans: "IBM Plex Sans", "Plex Sans", system-ui, sans-serif;
  --font-mono: "IBM Plex Mono", ui-monospace, monospace;

  /* Brand assets */
  --logo:          url("https://static.wolf-cloud.com/logos/wolf-cloud/logo.svg");
  --logo-full:     url("https://static.wolf-cloud.com/logos/wolf-cloud/full-logo.svg");
  --logo-png:      url("https://static.wolf-cloud.com/logos/wolf-cloud/logo.png");
  --logo-full-png: url("https://static.wolf-cloud.com/logos/wolf-cloud/full-logo.png");
  --favicon:       url("https://static.wolf-cloud.com/logos/wolf-cloud/favicon.ico");

  /* Sizing */
  --radius-sm:   6px;
  --radius-md:   10px;
  --radius-lg:   14px;
  --radius-xl:   16px;
  --radius-pill: 999px;

  /* Layout (narrow content pages — docs, forms, admin panels) */
  --page-width: 820px;
  --page-pad-x: 1.5rem;
  --page-pad-y: 4rem;

  /* Layout (wide marketing/landing pages) */
  --gutter: clamp(20px, 4.5vw, 64px);
  --shell:  min(1240px, 100vw - 2 * var(--gutter));
  --rhythm: clamp(96px, 13vw, 180px);

  /* Chrome surfaces (sticky headers, dropdown menus — blurred over content) */
  --nav-bg:  rgba(8, 12, 16, 0.62);
  --menu-bg: rgba(11, 16, 27, 0.97);

  /* Shadows */
  --shadow-card:      0 8px 40px rgba(4, 8, 20, 0.50);
  --shadow-card-soft: 0 4px 18px rgba(4, 8, 20, 0.30);
  --shadow-brand:     0 2px 12px rgba(46, 127, 255, 0.35);

  /* Motion */
  --ease-standard: cubic-bezier(.4, 0, .2, 1);
  --dur-fast: 150ms;
  --dur-mid:  220ms;
  --dur-slow: 450ms;

  /* Effects */
  --blur-card: 20px;
  --blur-soft: 16px;
  --grid-size: 48px;
}

/* -- Light mode ----------------------------------------------- */
[data-theme="light"] {
  color-scheme: light;

  /* Core palette */
  --ink:         #eef2ff;
  --ink-2:       #e2e8f7;
  --surface:     rgba(255, 255, 255, 0.88);
  --surface-2:   rgba(245, 248, 255, 0.80);
  --surface-3:   rgba(235, 240, 255, 0.90);
  --line:        rgba(46, 80, 200, 0.07);
  --line-hi:     rgba(46, 80, 200, 0.13);
  --line-strong: rgba(46, 80, 200, 0.20);

  /* Brand */
  --brand-dim:   rgba(46, 127, 255, 0.10);
  --brand-glow:  rgba(46, 127, 255, 0.20);
  --brand-ring:  rgba(46, 127, 255, 0.15);

  /* Text */
  --text:        #0d1420;
  --muted:       rgba(13, 20, 50, 0.58);
  --subtle:      rgba(13, 20, 50, 0.33);
  --text-soft:   rgba(13, 20, 50, 0.80);

  /* Status */
  --ok:          #16a34a;
  --ok-bg:       rgba(22, 163, 74, 0.08);
  --ok-bdr:      rgba(22, 163, 74, 0.25);
  --deg:         #d97706;
  --deg-bg:      rgba(217, 119, 6, 0.08);
  --deg-bdr:     rgba(217, 119, 6, 0.24);
  --err:         #dc2626;
  --err-bg:      rgba(220, 38, 38, 0.08);
  --err-bdr:     rgba(220, 38, 38, 0.22);
  --info:        #0284c7;
  --info-bg:     rgba(2, 132, 199, 0.08);
  --info-bdr:    rgba(2, 132, 199, 0.22);

  /* Neutral UI badge state */
  --chip-bdr:    rgba(13, 20, 50, 0.12);
  --chip-bg:     rgba(13, 20, 50, 0.04);
  --chip-text:   rgba(13, 20, 50, 0.45);

  /* Chrome surfaces */
  --nav-bg:  rgba(238, 242, 255, 0.78);
  --menu-bg: rgba(255, 255, 255, 0.97);

  /* Shadows */
  --shadow-card:      0 4px 24px rgba(13, 20, 80, 0.10);
  --shadow-card-soft: 0 2px 10px rgba(13, 20, 80, 0.07);
  --shadow-brand:     0 2px 12px rgba(46, 127, 255, 0.22);
}

/* -- Base reset ----------------------------------------------- */
*, *::before, *::after {
  box-sizing: border-box;
  margin: 0;
  padding: 0;
}

html {
  font-size: 100%;
  scroll-behavior: smooth;
  -webkit-text-size-adjust: 100%;
}

body {
  min-height: 100dvh;
  font-family: var(--font-sans);
  color: var(--text);
  background:
    radial-gradient(ellipse 1200px 500px at 15% 0%, rgba(46,127,255,0.22), transparent 60%),
    radial-gradient(ellipse 600px 600px at 85% 5%, rgba(14,165,233,0.16), transparent 55%),
    radial-gradient(ellipse 1000px 700px at 50% 100%, rgba(30,80,200,0.14), transparent 65%),
    var(--ink);
  overflow-x: hidden;
}

/* Fixed so it covers the viewport regardless of scroll position */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  background-image:
    linear-gradient(rgba(46,127,255,0.035) 1px, transparent 1px),
    linear-gradient(90deg, rgba(46,127,255,0.035) 1px, transparent 1px);
  background-size: var(--grid-size) var(--grid-size);
  pointer-events: none;
  z-index: 0;
}

[data-theme="light"] body {
  background:
    radial-gradient(ellipse 1200px 500px at 15% 0%, rgba(46,127,255,0.09), transparent 60%),
    radial-gradient(ellipse 600px 600px at 85% 5%, rgba(14,165,233,0.07), transparent 55%),
    radial-gradient(ellipse 1000px 700px at 50% 100%, rgba(30,80,200,0.05), transparent 65%),
    var(--ink);
}

[data-theme="light"] body::before {
  background-image:
    linear-gradient(rgba(46,127,255,0.055) 1px, transparent 1px),
    linear-gradient(90deg, rgba(46,127,255,0.055) 1px, transparent 1px);
}

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

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

button,
input,
select,
textarea {
  font: inherit;
}

/* -- Typography ----------------------------------------------- */
.wc-eyebrow,
.wc-label,
.wc-kicker,
.wc-mono {
  font-family: var(--font-mono);
  text-transform: uppercase;
  letter-spacing: .12em;
}

.wc-eyebrow {
  font-size: .72rem;
  color: var(--muted);
}

.wc-title {
  font-size: clamp(2rem, 5vw, 3.2rem);
  font-weight: 600;
  letter-spacing: -.035em;
  line-height: 1.1;
}

.wc-title em,
.wc-text-gradient {
  font-style: normal;
  background: linear-gradient(110deg, var(--brand-soft) 15%, var(--brand-pale) 85%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  background-clip: text;
}

.wc-lead {
  font-size: 1rem;
  line-height: 1.6;
  font-weight: 300;
  color: var(--muted);
}

.wc-text-muted  { color: var(--muted); }
.wc-text-subtle { color: var(--subtle); }
.wc-text-soft   { color: var(--text-soft); }

@media (max-width: 580px) {
  .wc-title {
    font-size: 1.85rem;
  }
}

/* -- Page shell (narrow content pages) ------------------------ */
.wc-page {
  position: relative;
  z-index: 1;
  max-width: var(--page-width);
  margin: 0 auto;
  padding: 0 var(--page-pad-x) var(--page-pad-y);
}

@media (max-width: 580px) {
  .wc-page {
    padding: 0 1rem 3rem;
  }
}

/* -- Shell sections (wide marketing/landing pages) ------------- */
.wc-shell-section {
  width: var(--shell);
  margin: 0 auto;
  padding-bottom: var(--rhythm);
}

.wc-section-heading {
  display: flex;
  flex-wrap: wrap;
  align-items: flex-end;
  justify-content: space-between;
  gap: 24px;
  border-top: 1px solid var(--line);
  padding: clamp(36px, 5vw, 64px) 0;
}

.wc-section-heading > div {
  display: flex;
  flex-direction: column;
  gap: 14px;
  max-width: 34ch;
}

.wc-section-eyebrow {
  font-family: var(--font-mono);
  font-size: .68rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--brand-soft);
}

.wc-section-title {
  font-size: clamp(1.7rem, 3.6vw, 2.6rem);
  font-weight: 600;
  letter-spacing: -.03em;
  line-height: 1.12;
  color: var(--text);
}

.wc-section-description {
  max-width: 38ch;
  font-size: .95rem;
  line-height: 1.65;
  color: var(--muted);
}

/* -- Skip link -------------------------------------------------- */
.wc-skip-link {
  position: fixed;
  top: -60px;
  left: 12px;
  z-index: 1000;
  padding: 12px 20px;
  border-radius: var(--radius-md);
  border: 1px solid var(--line-hi);
  background: var(--menu-bg);
  color: var(--text);
  font-family: var(--font-mono);
  font-size: .75rem;
  letter-spacing: .05em;
  text-transform: uppercase;
  box-shadow: var(--shadow-card);
  transition: top var(--dur-fast) var(--ease-standard);
}

.wc-skip-link:focus {
  top: 12px;
}

/* -- Header pattern (simple flex row) --------------------------- */
.wc-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
}

/* -- Site header (sticky, blurred, full-bleed marketing nav) ---- */
.wc-site-header {
  position: sticky;
  top: 0;
  z-index: 200;
  background: var(--nav-bg);
  backdrop-filter: blur(var(--blur-card));
  -webkit-backdrop-filter: blur(var(--blur-card));
  border-bottom: 1px solid var(--line);
  transition: background var(--dur-slow) var(--ease-standard);
}

.wc-site-header-inner {
  width: var(--shell);
  margin: 0 auto;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  height: clamp(64px, 7vh, 80px);
}

/* -- Logo components ------------------------------------------ */
.wc-logo {
  display: inline-block;
  width: 32px;
  height: 32px;
  background-image: var(--logo);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: center;
}

.wc-logo-full {
  display: inline-block;
  width: 180px;
  max-width: 100%;
  height: 36px;
  background-image: var(--logo-full);
  background-size: contain;
  background-repeat: no-repeat;
  background-position: left center;
}

.wc-logo-glow {
  filter: drop-shadow(0 4px 14px rgba(46,127,255,.28));
}

/* The mark is a saturated brand red (#ff0c19-ish) that already reads
   clearly on light backgrounds, so light mode renders it unfiltered
   instead of forcing it through an invert/brightness pass meant for
   monochrome (white) logo assets — that chain washed the red out to
   a pale pink/gray. */
[data-theme="light"] .wc-logo-glow {
  filter: drop-shadow(0 4px 14px rgba(46,127,255,.18));
}

/* -- Button system -------------------------------------------- */
.wc-btn-primary,
.wc-btn-primary-sm,
.wc-btn-primary-lg,
.wc-btn-ghost,
.wc-btn-chip,
.wc-icon-btn {
  border: none;
  cursor: pointer;
  transition:
    background var(--dur-mid),
    border-color var(--dur-mid),
    color var(--dur-mid),
    opacity var(--dur-mid),
    box-shadow var(--dur-mid),
    transform var(--dur-fast);
}

.wc-btn-primary {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  padding: .65rem 1.3rem;
  border-radius: var(--radius-md);
  color: #fff;
  font-family: var(--font-mono);
  font-size: .78rem;
  letter-spacing: .07em;
  text-transform: uppercase;
  background: linear-gradient(135deg, var(--brand), var(--brand-2));
  box-shadow: var(--shadow-brand);
}

.wc-btn-primary:hover {
  opacity: .88;
  box-shadow: 0 4px 18px rgba(46,127,255,.45);
}

.wc-btn-primary:active {
  opacity: .75;
}

.wc-btn-primary:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 3px;
}

/* Pill-shaped size variants, for sticky nav bars / hero CTAs */
.wc-btn-primary-sm,
.wc-btn-primary-lg {
  display: inline-flex;
  align-items: center;
  gap: .5rem;
  border-radius: var(--radius-pill);
  color: #fff;
  font-family: var(--font-mono);
  text-transform: uppercase;
  background: linear-gradient(135deg, var(--brand), var(--brand-2));
}

.wc-btn-primary-sm {
  height: 38px;
  padding: 0 18px;
  font-size: .68rem;
  letter-spacing: .1em;
  box-shadow: 0 2px 14px rgba(46,127,255,.32);
}

.wc-btn-primary-lg {
  height: 48px;
  padding: 0 24px;
  font-size: .7rem;
  letter-spacing: .1em;
  box-shadow: 0 4px 20px rgba(46,127,255,.28);
}

.wc-btn-primary-sm:hover,
.wc-btn-primary-lg:hover {
  opacity: .9;
  transform: translateY(-1px);
  box-shadow: 0 6px 22px rgba(46,127,255,.45);
}

.wc-btn-primary-lg:hover {
  box-shadow: 0 8px 30px rgba(46,127,255,.42);
}

.wc-btn-primary-sm:focus-visible,
.wc-btn-primary-lg:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 3px;
}

.wc-btn-ghost {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  padding: .28rem .6rem;
  border-radius: var(--radius-sm);
  background: none;
  color: rgba(110,184,255,.75);
  font-family: var(--font-mono);
  font-size: .68rem;
  letter-spacing: .07em;
  text-transform: uppercase;
}

.wc-btn-ghost:hover {
  color: #afd6ff;
  background: rgba(46,127,255,.1);
}

.wc-btn-ghost:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 3px;
}

/* Text-only ghost link, e.g. secondary hero CTA or footer links */
.wc-link-ghost {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-family: var(--font-mono);
  font-size: .7rem;
  letter-spacing: .1em;
  text-transform: uppercase;
  color: var(--muted);
  transition: color var(--dur-mid) var(--ease-standard);
}

.wc-link-ghost:hover {
  color: var(--brand-soft);
}

.wc-btn-chip,
.wc-chip {
  display: inline-flex;
  align-items: center;
  gap: .35rem;
  padding: .32rem .75rem;
  border-radius: var(--radius-pill);
  border: 1px solid var(--line-hi);
  background: rgba(46,127,255,.04);
  color: var(--muted);
  font-family: var(--font-mono);
  font-size: .7rem;
  letter-spacing: .04em;
}

.wc-btn-chip:hover,
.wc-chip:hover {
  background: rgba(46,127,255,.12);
  border-color: rgba(46,127,255,.3);
  color: #afd6ff;
}

.wc-btn-chip:focus-visible,
.wc-chip:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 3px;
}

/* Round icon-only button, e.g. theme toggle, launcher toggle */
.wc-icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: var(--radius-pill);
  border: 1px solid transparent;
  background: transparent;
  color: var(--muted);
}

.wc-icon-btn:hover {
  background: var(--brand-dim);
  color: var(--brand-soft);
}

.wc-icon-btn:focus-visible {
  outline: 2px solid var(--brand);
  outline-offset: 3px;
}

button:disabled,
.wc-disabled,
[aria-disabled="true"] {
  opacity: .45;
  cursor: not-allowed;
}

/* -- Form controls -------------------------------------------- */
.wc-input-wrap {
  display: flex;
  align-items: center;
  overflow: hidden;
  border-radius: var(--radius-lg);
  background: var(--surface);
  border: 1px solid var(--line-hi);
  box-shadow: var(--shadow-card), inset 0 1px 0 rgba(255,255,255,.05);
  backdrop-filter: blur(var(--blur-card));
  transition: border-color var(--dur-mid), box-shadow var(--dur-mid);
}

.wc-input-wrap:focus-within {
  border-color: rgba(46,127,255,.45);
  box-shadow:
    var(--shadow-card),
    0 0 0 3px var(--brand-ring),
    inset 0 1px 0 rgba(255,255,255,.05);
}

.wc-input,
.wc-select {
  width: 100%;
  border: none;
  outline: none;
  background: none;
  color: var(--text);
  caret-color: var(--brand);
}

.wc-input {
  padding: 1rem .5rem;
  font-family: var(--font-mono);
  font-size: .95rem;
}

.wc-input::placeholder {
  color: var(--subtle);
}

.wc-field-error {
  min-height: 1.1rem;
  margin-top: .55rem;
  text-align: center;
  color: rgba(239, 68, 68, .82);
  font-family: var(--font-mono);
  font-size: .68rem;
}

/* -- Badges and status ---------------------------------------- */
.wc-badge,
.wc-status {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  padding: .38rem .9rem;
  border-radius: var(--radius-pill);
  border: 1px solid var(--chip-bdr);
  background: var(--chip-bg);
  color: var(--chip-text);
  font-family: var(--font-mono);
  font-size: .75rem;
  letter-spacing: .06em;
  text-transform: uppercase;
  white-space: nowrap;
}

.wc-badge.ok,
.wc-status.ok {
  background: var(--ok-bg);
  border-color: var(--ok-bdr);
  color: var(--ok);
}

.wc-badge.deg,
.wc-status.deg {
  background: var(--deg-bg);
  border-color: var(--deg-bdr);
  color: var(--deg);
}

.wc-badge.err,
.wc-status.err {
  background: var(--err-bg);
  border-color: var(--err-bdr);
  color: var(--err);
}

.wc-badge.info,
.wc-status.info {
  background: var(--info-bg);
  border-color: var(--info-bdr);
  color: var(--info);
}

.wc-dot {
  width: 7px;
  height: 7px;
  border-radius: 50%;
  background: currentColor;
  flex-shrink: 0;
}

/* -- Surface primitives --------------------------------------- */
.wc-card,
.wc-panel,
.wc-surface {
  background: var(--surface);
  border: 1px solid var(--line-hi);
  border-radius: var(--radius-xl);
  box-shadow: var(--shadow-card), inset 0 1px 0 rgba(255,255,255,.05);
  backdrop-filter: blur(var(--blur-card));
}

.wc-surface-soft {
  background: var(--surface-2);
  border: 1px solid var(--line-hi);
  border-radius: var(--radius-xl);
  backdrop-filter: blur(var(--blur-soft));
}

.wc-divider {
  height: 1px;
  background: linear-gradient(90deg, transparent, var(--line-hi) 30%, var(--line-hi) 70%, transparent);
}

/* -- Service card (icon + title + description + meta footer) -- */
/* Note: deliberately a distinct class from .wc-card above rather than
   reusing it — .wc-card is the plain surface primitive already relied on
   by existing consumers (wc-admin-framework, docker-admin); this is a
   different, more opinionated composite pattern lifted from the marketing
   site's service grid. */
.wc-service-card {
  display: flex;
  flex-direction: column;
  gap: clamp(22px, 3vw, 38px);
  padding: clamp(24px, 2.6vw, 36px);
  min-height: clamp(200px, 22vw, 260px);
  border-radius: 20px;
  border: 1px solid var(--line-hi);
  background: var(--surface-2);
  backdrop-filter: blur(var(--blur-card));
  -webkit-backdrop-filter: blur(var(--blur-card));
  box-shadow: var(--shadow-card-soft), inset 0 1px 0 rgba(255,255,255,.05);
  color: inherit;
  transition:
    border-color var(--dur-mid) var(--ease-standard),
    transform var(--dur-mid) var(--ease-standard),
    box-shadow var(--dur-mid) var(--ease-standard);
}

.wc-service-card:hover {
  border-color: rgba(46,127,255,.34);
  transform: translateY(-3px);
  box-shadow: var(--shadow-card), 0 0 32px rgba(46,127,255,.10), inset 0 1px 0 rgba(255,255,255,.05);
}

.wc-card-icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 46px;
  height: 46px;
  border-radius: var(--radius-md);
  background: var(--brand-dim);
  border: 1px solid rgba(46,127,255,.18);
  flex-shrink: 0;
}

.wc-card-icon img {
  width: 30px;
  height: 30px;
  object-fit: contain;
  border-radius: var(--radius-sm);
}

.wc-card-body {
  display: flex;
  flex-direction: column;
  gap: 10px;
  margin-top: auto;
}

.wc-card-title {
  font-family: var(--font-mono);
  font-size: 1rem;
  font-weight: 500;
  letter-spacing: -.01em;
  color: var(--text);
}

.wc-card-description {
  font-size: .9rem;
  line-height: 1.6;
  color: var(--muted);
}

.wc-card-meta {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding-top: clamp(16px, 2vw, 22px);
  border-top: 1px solid var(--line);
  font-family: var(--font-mono);
  font-size: .65rem;
  letter-spacing: .07em;
  text-transform: uppercase;
}

.wc-card-host {
  color: var(--subtle);
}

.wc-card-open {
  color: var(--brand-soft);
}

/* -- Grid and tiles ------------------------------------------- */
.wc-grid {
  display: grid;
  gap: .75rem;
}

.wc-grid-cards {
  grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
}

/* Responsive grid sized for .wc-service-card tiles */
.wc-service-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 280px), 1fr));
  gap: clamp(14px, 1.6vw, 22px);
}

.wc-shortcut,
.wc-tile {
  padding: 1rem 1.1rem;
  border-radius: 12px;
  border: 1px solid var(--line-hi);
  background: var(--surface);
  backdrop-filter: blur(var(--blur-soft));
  transition: border-color var(--dur-mid), background var(--dur-mid), transform var(--dur-fast);
}

.wc-shortcut:hover,
.wc-tile:hover {
  border-color: rgba(46,127,255,.3);
  background: rgba(46,127,255,.05);
  transform: translateY(-1px);
}

.wc-shortcut-title {
  font-family: var(--font-mono);
  font-size: .78rem;
  font-weight: 500;
  color: var(--text);
  margin-bottom: .3rem;
}

.wc-shortcut-desc {
  font-size: .75rem;
  font-weight: 300;
  color: var(--muted);
}

/* -- Stat blocks ---------------------------------------------- */
.wc-stats {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  border: 1px solid var(--line-hi);
  border-top: none;
  background: var(--surface);
  backdrop-filter: blur(var(--blur-card));
}

.wc-stat {
  padding: 1.1rem 1.4rem;
  border-right: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
}

.wc-stat:nth-child(3n) {
  border-right: none;
}

.wc-stat-label {
  margin-bottom: .45rem;
  color: var(--subtle);
  font-family: var(--font-mono);
  font-size: .65rem;
  letter-spacing: .14em;
  text-transform: uppercase;
}

.wc-stat-value {
  color: var(--text);
  font-family: var(--font-mono);
  font-size: 1.05rem;
  font-weight: 500;
}

@media (max-width: 580px) {
  .wc-stats {
    grid-template-columns: repeat(2, 1fr);
  }

  .wc-stat:nth-child(3n) {
    border-right: 1px solid var(--line);
  }

  .wc-stat:nth-child(2n) {
    border-right: none;
  }
}

/* -- Architecture rows (numbered feature list) ----------------- */
.wc-architecture {
  display: flex;
  flex-direction: column;
}

.wc-architecture-row {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 300px), 1fr));
  gap: clamp(12px, 2.5vw, 48px);
  align-items: start;
  padding: clamp(24px, 3.2vw, 40px) 0;
  border-top: 1px solid var(--line-hi);
}

.wc-architecture-label {
  display: flex;
  align-items: center;
  gap: 16px;
}

.wc-architecture-number {
  width: 2.4ch;
  flex-shrink: 0;
  font-family: var(--font-mono);
  font-size: .68rem;
  letter-spacing: .1em;
  color: var(--subtle);
}

.wc-architecture-icon {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 38px;
  height: 38px;
  border-radius: var(--radius-md);
  background: var(--brand-dim);
  border: 1px solid rgba(46,127,255,.18);
  color: var(--brand-soft);
  flex-shrink: 0;
}

.wc-architecture-icon img {
  width: 24px;
  height: 24px;
  object-fit: contain;
  border-radius: 4px;
}

.wc-architecture-title {
  font-family: var(--font-mono);
  font-size: .8rem;
  font-weight: 500;
  letter-spacing: .05em;
  text-transform: uppercase;
  color: var(--text);
}

.wc-architecture-description {
  max-width: 52ch;
  font-size: .95rem;
  line-height: 1.7;
  color: var(--muted);
}

/* -- Footer ----------------------------------------------------- */
.wc-footer {
  border-top: 1px solid var(--line);
  padding: clamp(40px, 5vw, 64px) 0 clamp(28px, 3vw, 40px);
}

.wc-footer-main {
  width: var(--shell);
  margin: 0 auto;
  display: flex;
  flex-wrap: wrap;
  align-items: flex-start;
  justify-content: space-between;
  gap: 36px;
}

.wc-footer-brand {
  display: flex;
  align-items: flex-start;
  gap: 16px;
}

.wc-footer-copy {
  display: flex;
  flex-direction: column;
  gap: 12px;
}

.wc-footer-tags {
  display: flex;
  flex-wrap: wrap;
  gap: 8px;
}

.wc-footer-tag {
  padding: 4px 10px;
  border-radius: var(--radius-pill);
  border: 1px solid var(--line-hi);
  font-family: var(--font-mono);
  font-size: .6rem;
  letter-spacing: .08em;
  text-transform: uppercase;
  color: var(--subtle);
}

.wc-footer-nav {
  display: flex;
  flex-wrap: wrap;
  gap: clamp(18px, 3vw, 36px);
}

.wc-footer-link {
  font-family: var(--font-mono);
  font-size: .68rem;
  letter-spacing: .07em;
  text-transform: uppercase;
  color: var(--muted);
  transition: color var(--dur-mid) var(--ease-standard);
}

.wc-footer-link:hover {
  color: var(--brand-soft);
}

.wc-footer-bottom {
  width: var(--shell);
  margin: clamp(36px, 5vw, 56px) auto 0;
  padding-top: clamp(20px, 3vw, 28px);
  border-top: 1px solid var(--line);
}

.wc-footer-tagline {
  max-width: 64ch;
  font-size: .78rem;
  line-height: 1.6;
  color: var(--subtle);
}

/* -- App launcher ------------------------------------------------
   Markup contract (see js/launcher.js and ai.txt for the full example):

   <div class="wc-launcher">
     <button class="wc-icon-btn wc-launcher-toggle" aria-haspopup="true"
             aria-expanded="false" aria-controls="wc-launcher-menu">…</button>
     <div class="wc-launcher-menu" id="wc-launcher-menu">
       <a class="wc-menu-item" href="…" data-mobile-app-url="…(optional)">
         <span class="wc-menu-icon">
           <span class="wc-launcher-fallback">N</span>
           <img src="…" onerror="this.style.display='none'; this.previousElementSibling.style.display='flex';" />
         </span>
         Label
       </a>
       …
     </div>
   </div>
------------------------------------------------------------------ */
.wc-launcher {
  position: relative;
}

.wc-launcher-toggle svg {
  transition: transform .3s cubic-bezier(.34,1.56,.64,1);
}

.wc-launcher-toggle[aria-expanded="true"] svg {
  transform: rotate(90deg);
}

.wc-launcher-menu {
  position: absolute;
  top: calc(100% + 18px);
  right: -8px;
  z-index: 20;
  display: grid;
  grid-template-columns: repeat(3, minmax(74px, 1fr));
  gap: 6px;
  padding: 14px;
  width: min(300px, calc(100vw - 32px));
  border-radius: var(--radius-xl);
  border: 1px solid var(--line-hi);
  background: var(--menu-bg);
  backdrop-filter: blur(28px) saturate(1.4);
  -webkit-backdrop-filter: blur(28px) saturate(1.4);
  box-shadow: var(--shadow-card);
  transform-origin: top right;
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transform: translateY(-8px) scale(.94);
  transition: opacity .18s ease, transform .34s cubic-bezier(.34,1.56,.64,1), visibility .34s;
}

.wc-launcher-menu::before {
  content: "";
  position: absolute;
  top: -6px;
  right: 24px;
  width: 12px;
  height: 12px;
  background: var(--menu-bg);
  border-left: 1px solid var(--line-hi);
  border-top: 1px solid var(--line-hi);
  border-radius: 3px 0 0 0;
  transform: rotate(45deg);
}

.wc-launcher-menu.open {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transform: translateY(0) scale(1);
}

.wc-menu-item {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 8px;
  padding: 12px 4px;
  border-radius: var(--radius-md);
  color: var(--text-soft);
  font-family: var(--font-mono);
  font-size: .6rem;
  letter-spacing: .04em;
  text-align: center;
  opacity: 0;
  transform: translateY(6px) scale(.92);
  transition: background 150ms var(--ease-standard), color 150ms var(--ease-standard),
    transform .3s cubic-bezier(.34,1.56,.64,1), opacity .2s ease;
}

.wc-menu-item:hover,
.wc-menu-item:focus-visible {
  background: var(--brand-dim);
  color: var(--brand-soft);
}

.wc-launcher-menu.open .wc-menu-item {
  opacity: 1;
  transform: translateY(0) scale(1);
}

.wc-launcher-menu.open .wc-menu-item:nth-child(1) { transition-delay: .02s; }
.wc-launcher-menu.open .wc-menu-item:nth-child(2) { transition-delay: .05s; }
.wc-launcher-menu.open .wc-menu-item:nth-child(3) { transition-delay: .08s; }
.wc-launcher-menu.open .wc-menu-item:nth-child(4) { transition-delay: .11s; }
.wc-launcher-menu.open .wc-menu-item:nth-child(5) { transition-delay: .14s; }
.wc-launcher-menu.open .wc-menu-item:nth-child(6) { transition-delay: .17s; }
.wc-launcher-menu.open .wc-menu-item:nth-child(7) { transition-delay: .2s; }
.wc-launcher-menu.open .wc-menu-item:nth-child(8) { transition-delay: .23s; }

.wc-menu-icon {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: var(--radius-sm);
  background: var(--surface-2);
  border: 1px solid var(--line-hi);
  color: var(--brand-soft);
  font-family: var(--font-mono);
  font-size: .8rem;
  font-weight: 500;
}

.wc-menu-icon img {
  position: absolute;
  inset: 6px;
  width: 22px;
  height: 22px;
  object-fit: contain;
  border-radius: 4px;
}

/* Single-letter fallback glyph shown if the icon image 404s */
.wc-launcher-fallback {
  display: none;
  position: absolute;
  inset: 0;
  align-items: center;
  justify-content: center;
}

/* On mobile the 3-col icon grid is fiddly to tap — collapse it into a
   single-column dropdown list instead. */
@media (max-width: 640px) {
  .wc-launcher-menu {
    position: fixed !important;
    top: calc(env(safe-area-inset-top,0px) + clamp(64px,7vh,80px) + 10px) !important;
    left: 12px !important;
    right: 12px !important;
    width: auto !important;
    grid-template-columns: 1fr !important;
    gap: 2px !important;
    padding: 8px !important;
    max-height: calc(100vh - clamp(64px,7vh,80px) - env(safe-area-inset-top,0px) - env(safe-area-inset-bottom,0px) - 32px);
    overflow-y: auto;
    transform-origin: top center;
  }

  .wc-launcher-menu::before {
    display: none;
  }

  .wc-launcher-menu .wc-menu-item {
    flex-direction: row !important;
    justify-content: flex-start !important;
    text-align: left !important;
    gap: 14px !important;
    padding: 11px 10px !important;
    font-size: .78rem !important;
    letter-spacing: .02em !important;
    text-transform: none;
  }
}

/* -- Portal transition veil --------------------------------------
   Shown briefly while navigating away via a .wc-portal-link, so the
   jump to another Wolf Cloud subdomain doesn't feel like a hard cut.
   See js/portal-transition.js. */
.wc-portal-veil {
  position: fixed;
  inset: 0;
  z-index: 600;
  display: flex;
  align-items: center;
  justify-content: center;
  background:
    radial-gradient(ellipse 1000px 500px at 50% 34%, rgba(46,127,255,.16), transparent 62%),
    var(--ink);
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
  transition: opacity 260ms var(--ease-standard), visibility 0ms linear 260ms;
}

.wc-portal-veil.is-active {
  opacity: 1;
  visibility: visible;
  pointer-events: auto;
  transition: opacity 220ms var(--ease-standard);
}

.wc-portal-veil-inner {
  text-align: center;
}

.wc-portal-spinner {
  width: 30px;
  height: 30px;
  margin: 0 auto 18px;
  border-radius: 50%;
  border: 2px solid rgba(46,127,255,.22);
  border-top-color: var(--brand-soft);
  animation: wc-spin .8s linear infinite;
}

.wc-portal-veil-label {
  margin: 0;
  font-family: var(--font-mono);
  font-size: .72rem;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--text-soft);
}

@media (prefers-reduced-motion: reduce) {
  .wc-portal-spinner {
    animation: none;
  }
}

/* -- Intro overlay (full-logo splash on first paint) --------------
   Optional: a page can include this once, near the top of <body>, for
   a brief branded reveal before content settles. Purely decorative —
   removes itself once its animation ends (see js/portal-transition.js). */
.wc-intro-overlay {
  position: fixed;
  inset: 0;
  z-index: 400;
  display: flex;
  align-items: center;
  justify-content: center;
  background:
    radial-gradient(ellipse 1000px 500px at 50% 34%, rgba(46,127,255,.16), transparent 62%),
    var(--ink);
  pointer-events: none;
  animation: wc-veil 1.65s var(--ease-standard) both;
}

.wc-intro-overlay img {
  width: min(70vw, 460px);
  height: auto;
  animation: wc-intro-reveal 1.65s cubic-bezier(.16,1,.3,1) both;
}

@keyframes wc-veil {
  0%, 72% { opacity: 1; }
  100%    { opacity: 0; visibility: hidden; }
}

@keyframes wc-intro-reveal {
  0%         { opacity: 0; transform: scale(.95) translateY(10px); filter: blur(10px); }
  22%, 64%   { opacity: 1; transform: none; filter: blur(0); }
  100%       { opacity: 0; transform: scale(.92) translateY(-10px); filter: blur(4px); }
}

/* -- Motion --------------------------------------------------- */
.wc-fade-up {
  animation: wc-fade-up var(--dur-slow) ease-out both;
}

@keyframes wc-fade-up {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}

@keyframes wc-spin {
  to { transform: rotate(360deg); }
}

/* -- Particles -------------------------------------------------
   Container is styled here; individual dots get their randomized
   left/size/duration/delay set inline by js/particles.js, using the
   --pd (drift distance) and --po (peak opacity) custom properties
   consumed by @keyframes wc-drift below. */
#wc-particles,
.wc-particles {
  position: fixed;
  inset: 0;
  pointer-events: none;
  overflow: hidden;
  z-index: 0;
}

.wc-particle {
  position: absolute;
  top: 0;
  border-radius: 50%;
  background: rgba(46,127,255,.42);
  box-shadow: 0 0 18px rgba(46,127,255,.22);
  opacity: 0;
  animation-name: wc-drift;
  animation-timing-function: linear;
  animation-iteration-count: infinite;
}

@keyframes wc-drift {
  0%   { transform: translate3d(0, 110vh, 0); opacity: 0; }
  12%  { opacity: var(--po, .3); }
  100% { transform: translate3d(var(--pd, 0px), -12vh, 0); opacity: 0; }
}

/* -- Reduced motion ------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  *,
  *::before,
  *::after {
    animation-duration: .01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: .01ms !important;
  }

  html {
    scroll-behavior: auto;
  }

  .wc-fade-up {
    animation: none;
  }
}
