/* ============================================================
   Dossier — Dan Gruskin portfolio
   ============================================================ */

:root {
  /* Studio — warm cream paper, cobalt primary, coral secondary */
  --paper:   oklch(0.965 0.010 80);
  --paper-2: oklch(0.930 0.012 80);
  --paper-3: oklch(0.895 0.014 80);
  --ink:     oklch(0.180 0.015 60);
  --ink-2:   oklch(0.360 0.015 60);
  --ink-3:   oklch(0.560 0.014 60);
  --rule:    oklch(0.850 0.014 80);
  --rule-2:  oklch(0.750 0.014 80);
  --mark:    oklch(0.520 0.220 254);
  --mark-soft: oklch(0.520 0.220 254 / 0.10);
  --mark-ink: oklch(0.420 0.180 254);
  --hot:     oklch(0.500 0.120 152);
  --hot-soft: oklch(0.500 0.120 152 / 0.14);

  --serif: "Geist", "Inter", system-ui, -apple-system, sans-serif;
  --sans:  "Geist", "Inter", system-ui, -apple-system, sans-serif;
  --mono:  "JetBrains Mono", ui-monospace, Menlo, monospace;

  --pad:   clamp(20px, 4vw, 64px);
}

/* Alternate palettes (set on <html data-theme="..."> by Tweaks panel) */
[data-theme="cream"] {
  --paper:   oklch(0.965 0.008 85);
  --paper-2: oklch(0.935 0.010 85);
  --paper-3: oklch(0.905 0.012 85);
  --ink:     oklch(0.170 0.012 60);
  --ink-2:   oklch(0.350 0.012 60);
  --ink-3:   oklch(0.560 0.010 60);
  --rule:    oklch(0.840 0.010 60);
  --rule-2:  oklch(0.760 0.010 60);
  --mark:    oklch(0.620 0.180 38);
  --mark-soft: oklch(0.620 0.180 38 / 0.10);
  --mark-ink: oklch(0.420 0.150 35);
  --hot:     oklch(0.500 0.150 220);
  --hot-soft: oklch(0.500 0.150 220 / 0.12);
}

[data-theme="plasma"] {
  --paper:   oklch(0.16 0.030 270);
  --paper-2: oklch(0.21 0.038 270);
  --paper-3: oklch(0.26 0.042 270);
  --ink:     oklch(0.97 0.008 85);
  --ink-2:   oklch(0.78 0.020 85);
  --ink-3:   oklch(0.58 0.025 270);
  --rule:    oklch(0.30 0.030 270);
  --rule-2:  oklch(0.40 0.035 270);
  --mark:    oklch(0.88 0.22 130);
  --mark-soft: oklch(0.88 0.22 130 / 0.14);
  --mark-ink: oklch(0.70 0.18 130);
  --hot:     oklch(0.72 0.22 25);
  --hot-soft: oklch(0.72 0.22 25 / 0.16);
}

[data-theme="acid"] {
  --paper:   oklch(0.13 0.005 0);
  --paper-2: oklch(0.18 0.008 0);
  --paper-3: oklch(0.23 0.010 0);
  --ink:     oklch(0.97 0.005 0);
  --ink-2:   oklch(0.78 0.010 0);
  --ink-3:   oklch(0.55 0.012 0);
  --rule:    oklch(0.28 0.010 0);
  --rule-2:  oklch(0.40 0.012 0);
  --mark:    oklch(0.88 0.24 110);
  --mark-soft: oklch(0.88 0.24 110 / 0.16);
  --mark-ink: oklch(0.70 0.20 110);
  --hot:     oklch(0.65 0.25 320);
  --hot-soft: oklch(0.65 0.25 320 / 0.18);
}

[data-theme="cobalt"] {
  --paper:   oklch(0.20 0.10 260);
  --paper-2: oklch(0.26 0.10 260);
  --paper-3: oklch(0.32 0.10 260);
  --ink:     oklch(0.97 0.015 90);
  --ink-2:   oklch(0.82 0.020 90);
  --ink-3:   oklch(0.60 0.030 260);
  --rule:    oklch(0.34 0.060 260);
  --rule-2:  oklch(0.45 0.070 260);
  --mark:    oklch(0.82 0.20 80);
  --mark-soft: oklch(0.82 0.20 80 / 0.16);
  --mark-ink: oklch(0.70 0.18 80);
  --hot:     oklch(0.72 0.22 25);
  --hot-soft: oklch(0.72 0.22 25 / 0.18);
}

[data-theme="ember"] {
  --paper:   oklch(0.96 0.012 70);
  --paper-2: oklch(0.92 0.018 70);
  --paper-3: oklch(0.88 0.020 70);
  --ink:     oklch(0.18 0.020 30);
  --ink-2:   oklch(0.35 0.030 30);
  --ink-3:   oklch(0.55 0.030 30);
  --rule:    oklch(0.82 0.018 70);
  --rule-2:  oklch(0.72 0.020 70);
  --mark:    oklch(0.58 0.24 28);
  --mark-soft: oklch(0.58 0.24 28 / 0.12);
  --mark-ink: oklch(0.45 0.20 28);
  --hot:     oklch(0.45 0.20 270);
  --hot-soft: oklch(0.45 0.20 270 / 0.14);
}

* { box-sizing: border-box; margin: 0; padding: 0; }

html, body {
  background: var(--paper);
  color: var(--ink);
  font-family: var(--sans);
  font-feature-settings: "ss01", "cv11";
  font-size: 16px;
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  scroll-behavior: smooth;
}

::selection { background: var(--mark); color: var(--paper); }

a { color: inherit; text-decoration: none; }
button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }

/* ============== Type primitives ============== */

.mono     { font-family: var(--mono); font-size: 11px; letter-spacing: 0.06em; text-transform: uppercase; }
.mono-sm  { font-family: var(--mono); font-size: 10px; letter-spacing: 0.08em; text-transform: uppercase; color: var(--ink-3); }
.mono-md  { font-family: var(--mono); font-size: 12px; letter-spacing: 0.04em; }
.serif    { font-family: var(--serif); font-weight: 400; letter-spacing: -0.025em; line-height: 1.0; }
.italic   { font-style: normal; font-weight: 500; }
.muted    { color: var(--ink-3); }
.mark     { color: var(--mark); }

/* hairline */
.hr { height: 1px; background: var(--rule); width: 100%; }
.hr-strong { height: 1px; background: var(--ink); width: 100%; }

/* ============== Layout shell ============== */

.shell {
  max-width: 1480px;
  margin: 0 auto;
  padding: 0 var(--pad);
  position: relative;
}

/* Decorative side-rules — magazine gutter */
.shell::before, .shell::after {
  content: "";
  position: absolute;
  top: 0; bottom: 0;
  width: 1px;
  background: var(--rule);
  opacity: 0.5;
}
.shell::before { left: calc(var(--pad) - 1px); }
.shell::after  { right: calc(var(--pad) - 1px); }

/* ============== Top status bar ============== */

.topbar {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 50;
  background: color-mix(in oklch, var(--paper) 88%, transparent);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--rule);
}
.topbar-inner {
  max-width: 1480px;
  margin: 0 auto;
  padding: 10px var(--pad);
  display: grid;
  grid-template-columns: 1fr auto 1fr;
  align-items: center;
  gap: 24px;
}
.topbar-left, .topbar-right {
  display: flex;
  align-items: center;
  gap: 18px;
}
.topbar-right { justify-content: flex-end; }
.topbar-mid {
  display: flex; gap: 24px; justify-content: center;
}
.topbar-mid a {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  color: var(--ink-2);
  position: relative;
  padding: 4px 2px;
  transition: color .2s;
}
.topbar-mid a:hover { color: var(--ink); }
.topbar-mid a::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 1px; background: var(--ink);
  transform: scaleX(0);
  transform-origin: left center;
  transition: transform .35s cubic-bezier(.22,1,.36,1);
}
.topbar-mid a:hover::after { transform: scaleX(1); }

.avail-dot {
  width: 8px; height: 8px;
  border-radius: 50%;
  background: var(--mark);
  display: inline-block;
  position: relative;
}
.avail-dot::after {
  content: "";
  position: absolute;
  inset: -3px;
  border-radius: 50%;
  border: 1px solid var(--mark);
  opacity: 0.7;
  animation: pulse 1.8s ease-out infinite;
}
@keyframes pulse {
  0% { transform: scale(0.8); opacity: 0.7; }
  100% { transform: scale(2.2); opacity: 0; }
}

.timestamp { font-family: var(--mono); font-size: 11px; color: var(--ink-3); letter-spacing: 0.05em; }
.brand-mark {
  font-family: var(--sans);
  font-weight: 500;
  font-size: 15px;
  letter-spacing: -0.015em;
}

.resume-btn {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 8px 14px;
  border: 1px solid var(--ink);
  background: var(--ink);
  color: var(--paper);
  border-radius: 999px;
  transition: background .2s, color .2s, transform .2s;
}
.resume-btn:hover { background: var(--mark); border-color: var(--mark); transform: translateY(-1px); }

/* ============== Progress bar ============== */
.scroll-progress {
  position: fixed;
  top: 0; left: 0;
  height: 2px;
  background: var(--mark);
  z-index: 60;
  transform-origin: left center;
  transform: scaleX(0);
}

/* ============== Burger button ============== */
.topbar-burger {
  display: none;
  flex-direction: column;
  justify-content: center;
  gap: 5px;
  width: 32px;
  height: 32px;
  padding: 4px;
  cursor: pointer;
  background: none;
  border: 0;
  flex-shrink: 0;
}
.topbar-burger span {
  display: block;
  height: 1.5px;
  background: var(--ink);
  transition: transform .28s cubic-bezier(.22,1,.36,1), opacity .2s;
  transform-origin: center;
}
.topbar-burger[aria-expanded="true"] span:nth-child(1) { transform: translateY(6.5px) rotate(45deg); }
.topbar-burger[aria-expanded="true"] span:nth-child(2) { opacity: 0; transform: scaleX(0); }
.topbar-burger[aria-expanded="true"] span:nth-child(3) { transform: translateY(-6.5px) rotate(-45deg); }

/* ============== Mobile nav panel ============== */
.topbar-nav-mobile {
  border-top: 1px solid var(--rule);
  display: flex;
  flex-direction: column;
}
.topbar-nav-mobile[hidden] { display: none; }
.topbar-nav-mobile a {
  font-family: var(--mono);
  font-size: 12px;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--ink-2);
  padding: 18px var(--pad);
  border-bottom: 1px solid var(--rule);
  transition: color .2s, background .2s;
}
.topbar-nav-mobile a:hover { color: var(--ink); background: var(--paper-2); }
.topbar-nav-mobile-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px var(--pad);
}

.topbar-avail { display: inline-flex; align-items: center; gap: 8px; }

/* ============== Responsive topbar ============== */
@media (max-width: 860px) {
  .topbar-mid { display: none; }
  .topbar-inner { grid-template-columns: 1fr auto; }
  .topbar-avail { display: none; }
  .topbar-right .resume-btn { display: none; }
  .topbar-burger { display: flex; }
  /* Hide the role subtitle — brand mark + style-switcher + burger already fills the row */
  .topbar-left .mono-sm { display: none; }
}

@media (max-width: 480px) {
  .topbar-inner { gap: 12px; padding: 8px var(--pad); }
  .brand-mark { font-size: 14px; }
  .resume-btn { padding: 6px 12px; font-size: 10px; }
}

/* ============== Section frame ============== */
section { padding: 80px 0; position: relative; }
.section-eyebrow {
  display: flex;
  align-items: center;
  gap: 16px;
  margin-bottom: 56px;
}
.section-eyebrow .num {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.1em;
  color: var(--mark);
  text-transform: uppercase;
}
.section-eyebrow .label {
  font-family: var(--mono);
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--ink);
}
.section-eyebrow .rule {
  flex: 1;
  height: 1px;
  background: var(--ink);
}

/* ============================================================
   Closer / footer — shared across all pages
   ============================================================ */
.closer {
  max-width: 1480px;
  margin: 80px auto 0;
  padding: 48px var(--pad);
  background: var(--ink);
  color: var(--paper);
  border-top-left-radius: 24px;
  border-top-right-radius: 24px;
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: end;
  gap: 32px;
}
.closer h2 {
  font-family: var(--sans);
  font-weight: 300;
  font-size: clamp(40px, 6vw, 92px);
  line-height: 0.95;
  letter-spacing: -0.05em;
}
.closer h2 em { font-style: normal; font-weight: 500; color: var(--mark); }
.closer .right { display: flex; flex-direction: column; gap: 14px; align-items: flex-end; }
.closer .right a { font-family: var(--mono); font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase; padding: 14px 22px; border-radius: 999px; border: 1px solid color-mix(in oklch, var(--paper) 30%, transparent); color: var(--paper); text-decoration: none; }
.closer .right a.primary { background: var(--mark); border-color: var(--mark); }

@media (max-width: 900px) {
  .closer { grid-template-columns: 1fr; gap: 28px; border-top-left-radius: 16px; border-top-right-radius: 16px; }
  .closer .right { align-items: flex-start; flex-direction: row; flex-wrap: wrap; gap: 10px; }
}
@media (max-width: 600px) {
  .closer { padding: 36px var(--pad); margin-top: 48px; }
  .closer h2 { font-size: clamp(36px, 9vw, 60px); }
  .closer .right { flex-direction: column; align-items: flex-start; }
  .closer .right a { font-size: 10px; padding: 12px 18px; }
}
