/* Hallmark · macrostructure: Map / Diagram · genre: modern-minimal · theme: Cobalt
 * tone: technical/utilitarian · audience: RTH ops · use: org portal + infra map
 * diversification: first Hallmark build in this project (no prior entries)
 * fonts: Vazirmatn (fa display+body, weights 300–800) + JetBrains Mono (latin/numerals outlier)
 * pre-emit critique: P4 H5 E5 S4 R5 V4
 */

:root {
  /* paper + ink */
  --color-paper: oklch(97.6% 0.004 250);
  --color-paper-2: oklch(94.8% 0.007 250);
  --color-paper-3: oklch(91% 0.010 250);
  --color-ink: oklch(23% 0.020 260);
  --color-ink-2: oklch(45% 0.020 260);
  --color-ink-3: oklch(62% 0.015 255);
  /* accent — cobalt blue */
  --color-accent: oklch(53% 0.180 255);
  --color-accent-deep: oklch(43% 0.160 258);
  --color-accent-soft: oklch(93% 0.030 250);
  --color-focus: oklch(53% 0.180 255);
  /* semantic */
  --color-up: oklch(58% 0.130 155);
  --color-up-soft: oklch(94% 0.040 155);
  /* fonts */
  --font-body: "Vazirmatn", "Segoe UI", Tahoma, sans-serif;
  --font-mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
  /* type scale — major third */
  --text-xs: 0.75rem;
  --text-sm: 0.875rem;
  --text-md: 1rem;
  --text-lg: 1.25rem;
  --text-xl: 1.56rem;
  --text-2xl: 1.95rem;
  --text-3xl: 2.44rem;
  --text-display: 3.05rem;
  /* 4-pt spacing */
  --space-2xs: 4px; --space-xs: 8px; --space-sm: 12px;
  --space-md: 16px; --space-lg: 24px; --space-xl: 32px;
  --space-2xl: 48px; --space-3xl: 64px; --space-4xl: 96px;
  /* rules + radius */
  --rule-hair: 1px solid color-mix(in oklch, var(--color-ink) 12%, transparent);
  --radius-sm: 6px; --radius-md: 10px; --radius-lg: 16px;
  /* motion */
  --ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ease-in: cubic-bezier(0.7, 0, 0.84, 0);
  --dur-fast: 140ms; --dur-med: 260ms;
}

*, *::before, *::after { box-sizing: border-box; }

html, body { overflow-x: clip; }

body {
  margin: 0;
  background: var(--color-paper);
  color: var(--color-ink);
  font-family: var(--font-body);
  font-size: var(--text-md);
  line-height: 1.75;
  direction: rtl;
}

/* ————— nav · N9 edge-aligned ————— */
.nav {
  position: sticky; top: 0; z-index: 50;
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--space-lg);
  padding: var(--space-md) var(--space-2xl);
  background: color-mix(in oklch, var(--color-paper) 88%, transparent);
  backdrop-filter: blur(8px);
  border-bottom: var(--rule-hair);
}
.nav__wordmark { font-weight: 800; font-size: var(--text-lg); text-decoration: none; color: var(--color-ink); white-space: nowrap; }
.nav__wordmark span { color: var(--color-accent); }
.nav__links { display: flex; gap: var(--space-lg); flex-wrap: wrap; }
.nav__links a {
  color: var(--color-ink-2); text-decoration: none; font-size: var(--text-sm);
  padding: var(--space-2xs) var(--space-xs); border-radius: var(--radius-sm);
  white-space: nowrap; transition: color var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out);
}
.nav__links a:hover, .nav__links a:focus-visible { color: var(--color-accent-deep); background: var(--color-accent-soft); }
.nav__links a:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }

/* ————— hero / orientation ————— */
.hero { padding: var(--space-4xl) var(--space-2xl) var(--space-xl); max-width: 1180px; margin-inline: auto; }
.hero__eyebrow { color: var(--color-ink-3); font-size: var(--text-sm); margin: 0 0 var(--space-sm); }
.hero h1 {
  margin: 0; font-size: var(--text-3xl); font-weight: 800; line-height: 1.3;
  overflow-wrap: anywhere; min-width: 0;
}
.hero h1 b { color: var(--color-accent); font-weight: 800; }
.hero__lede { max-width: 62ch; color: var(--color-ink-2); font-size: var(--text-lg); margin: var(--space-lg) 0 0; }

/* ————— the map ————— */
.map-wrap { max-width: 1180px; margin: 0 auto; padding: 0 var(--space-2xl) var(--space-2xl); }
.map-frame { border: var(--rule-hair); border-radius: var(--radius-lg); background: var(--color-paper); padding: var(--space-lg); overflow: hidden; }
.map { width: 100%; height: auto; display: block; }
.map .node { transition: opacity var(--dur-med) var(--ease-out); }
.map .node .shape { fill: var(--color-paper-2); stroke: color-mix(in oklch, var(--color-ink) 22%, transparent); stroke-width: 1; transition: fill var(--dur-fast) var(--ease-out), stroke var(--dur-fast) var(--ease-out); }
.map .node:hover .shape, .map .node:focus .shape { fill: var(--color-accent-soft); stroke: var(--color-accent); }
.map .node:focus { outline: none; }
.map .node:focus-visible .shape { stroke: var(--color-focus); stroke-width: 2; }
.map .node .label { font-family: var(--font-body); font-size: 11px; fill: var(--color-ink); }
.map .node .host { font-family: var(--font-mono); font-size: 9.5px; fill: var(--color-ink-3); direction: ltr; }
.map .plane-label { font-family: var(--font-body); font-size: 13px; font-weight: 800; fill: var(--color-accent-deep); }
.map .edge { stroke: color-mix(in oklch, var(--color-ink) 25%, transparent); stroke-width: 1.25; fill: none; marker-end: url(#arrow); }
.map .edge--dns { stroke-dasharray: 3 4; }
.map__legend {
  display: flex; flex-wrap: wrap; gap: var(--space-md) var(--space-xl);
  padding: var(--space-sm) var(--space-2xs) 0; color: var(--color-ink-2); font-size: var(--text-xs);
}
.map__legend span { display: inline-flex; align-items: center; gap: var(--space-2xs); }
.map__legend i { width: 18px; height: 0; border-top: 1.25px solid color-mix(in oklch, var(--color-ink) 30%, transparent); display: inline-block; }
.map__legend i.d { border-top-style: dashed; }

/* node-by-node ink-on reveal (cap 5 groups) */
@media (prefers-reduced-motion: no-preference) {
  .map .node { opacity: 0; }
  .map .node.in { opacity: 1; }
}

/* ————— sections ————— */
.section { max-width: 1180px; margin: 0 auto; padding: var(--space-3xl) var(--space-2xl); border-top: var(--rule-hair); }
.section > h2 { font-size: var(--text-xl); font-weight: 800; margin: 0 0 var(--space-xs); overflow-wrap: anywhere; min-width: 0; }
.section > .section__note { color: var(--color-ink-3); font-size: var(--text-sm); margin: 0 0 var(--space-xl); }

.cards { display: grid; grid-template-columns: repeat(auto-fill, minmax(0, 1fr)); gap: var(--space-md); }
@media (min-width: 700px) { .cards { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
.card {
  display: flex; flex-direction: column; gap: var(--space-2xs);
  padding: var(--space-lg); border: var(--rule-hair); border-radius: var(--radius-md);
  background: var(--color-paper); text-decoration: none; color: inherit;
  transition: border-color var(--dur-fast) var(--ease-out), transform var(--dur-fast) var(--ease-out), background var(--dur-fast) var(--ease-out);
}
.card:hover, .card:focus-visible {
  border-color: var(--color-accent); background: var(--color-paper);
  transform: translateY(-2px);
}
.card:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 3px; }
.card__url { font-family: var(--font-mono); font-size: var(--text-xs); color: var(--color-accent-deep); direction: ltr; text-align: right; unicode-bidi: plaintext; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.card__title { font-weight: 800; font-size: var(--text-md); }
.card__desc { color: var(--color-ink-2); font-size: var(--text-sm); line-height: 1.7; }
.card__meta { margin-top: auto; display: flex; gap: var(--space-sm); align-items: center; font-size: var(--text-xs); color: var(--color-ink-3); }
.dot { width: 8px; height: 8px; border-radius: 50%; background: var(--color-up); display: inline-block; flex: none; }

/* tables */
.table { width: 100%; border-collapse: collapse; font-size: var(--text-sm); }
.table th { text-align: right; font-weight: 800; color: var(--color-ink-2); padding: var(--space-sm) var(--space-md); border-bottom: 2px solid color-mix(in oklch, var(--color-ink) 20%, transparent); white-space: nowrap; }
.table td { padding: var(--space-sm) var(--space-md); border-bottom: var(--rule-hair); vertical-align: top; }
.table td.ltr { font-family: var(--font-mono); font-size: var(--text-xs); direction: ltr; text-align: right; unicode-bidi: plaintext; white-space: nowrap; }
.table a { color: var(--color-accent-deep); text-decoration: none; border-bottom: 1px solid color-mix(in oklch, var(--color-accent) 35%, transparent); }
.table a:hover, .table a:focus-visible { color: var(--color-accent); border-bottom-color: var(--color-accent); }
.table a:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; border-radius: 2px; }

/* callout */
.callout {
  border: 1px solid color-mix(in oklch, var(--color-accent) 30%, transparent);
  background: var(--color-accent-soft);
  border-radius: var(--radius-md);
  padding: var(--space-lg); margin-top: var(--space-xl);
  font-size: var(--text-sm);
}
.callout b { color: var(--color-accent-deep); }

/* footer · Ft5 statement */
.footer { border-top: var(--rule-hair); padding: var(--space-2xl) var(--space-2xl) var(--space-3xl); max-width: 1180px; margin: 0 auto; }
.footer__row { display: flex; flex-wrap: wrap; gap: var(--space-md) var(--space-2xl); justify-content: space-between; align-items: baseline; }
.footer p { margin: 0; color: var(--color-ink-2); font-size: var(--text-sm); }
.footer a { color: var(--color-accent-deep); text-decoration: none; border-bottom: 1px solid color-mix(in oklch, var(--color-accent) 35%, transparent); white-space: nowrap; }
.footer a:hover, .footer a:focus-visible { color: var(--color-accent); }
.footer a:focus-visible { outline: 2px solid var(--color-focus); outline-offset: 2px; }

@media (max-width: 767px) {
  .nav { padding: var(--space-md) var(--space-lg); }
  .hero, .map-wrap, .section, .footer { padding-inline: var(--space-lg); }
  .hero h1 { font-size: var(--text-2xl); }
  .cards { grid-template-columns: minmax(0, 1fr); }
  .table { display: block; overflow-x: auto; }
}
