/* Lambda-Phi component layer.
 *
 * Every value here comes from tokens.css variables — never raw hexes — so
 * whole screens re-theme via data-lp-theme / data-lp-accent without redesign.
 * Specs mirror design/canvas/Lambda-Phi Design System.dc.html; the living
 * reference is design/index.html.
 *
 * All classes are lp-prefixed so the sheet can be dropped into an existing
 * page without collisions. Page-level styles apply only inside .lp-page.
 */

/* ── page ground ─────────────────────────────────────────────────────────── */

.lp-page {
  margin: 0;
  background: var(--lp-bg);
  color: var(--lp-paper);
  font: 400 16px/1.6 var(--lp-sans);
  -webkit-font-smoothing: antialiased;
  color-scheme: dark;
}
[data-lp-theme="light"] .lp-page,
.lp-page[data-lp-theme="light"] { color-scheme: light; }

.lp-page, .lp-page *, .lp-page *::before, .lp-page *::after { box-sizing: border-box; }
.lp-page a { color: inherit; text-decoration: none; }
.lp-page ::selection { background: color-mix(in srgb, var(--lp-accent) 30%, transparent); }
.lp-page :focus-visible { outline: 2px solid var(--lp-accent-300); outline-offset: 2px; }

/* ── type ────────────────────────────────────────────────────────────────── */

.lp-display {
  font: 500 clamp(42px, 5.4vw, 72px)/1.03 var(--lp-serif);
  letter-spacing: -.01em;
  color: var(--lp-paper);
  text-wrap: balance;
  margin: 0;
}
.lp-h1 { font: 500 40px/1.05 var(--lp-serif); color: var(--lp-paper); margin: 0; }
.lp-h2 { font: 600 28px/1.15 var(--lp-sans); color: var(--lp-paper); margin: 0; }
.lp-lead { font: 400 17px/1.6 var(--lp-sans); color: var(--lp-mist); margin: 0; }
.lp-eyebrow {
  font: 600 12px var(--lp-sans);
  letter-spacing: .24em;
  text-transform: uppercase;
  color: var(--lp-accent-300);
}
.lp-muted { color: var(--lp-muted); }

.lp-quote {
  border-left: 2px solid var(--lp-brass);
  padding: var(--lp-space-2) 0 var(--lp-space-2) 28px;
  margin: 0;
}
.lp-quote__text { font: italic 500 30px/1.35 var(--lp-serif); color: var(--lp-paper); max-width: 36ch; }
.lp-quote__cite {
  font: 600 12px var(--lp-sans);
  letter-spacing: .18em;
  text-transform: uppercase;
  color: var(--lp-muted);
  margin-top: 14px;
}

/* ── rules & marks — long dividers fade at both ends; short marks stay solid */

.lp-rule {
  height: 1px;
  border: 0;
  margin: 0;
  background: linear-gradient(90deg, transparent, var(--lp-line) 10%, var(--lp-line) 90%, transparent);
}
.lp-rule--strong {
  background: linear-gradient(90deg, transparent, var(--lp-line2) 10%, var(--lp-line2) 90%, transparent);
}
.lp-mark { height: 2px; width: 40px; background: var(--lp-brass); border-radius: 2px; }

/* ── brand — the φ monogram and tracked wordmark ─────────────────────────── */

.lp-monogram {
  --size: 42px;
  width: var(--size);
  height: var(--size);
  flex: none;
  border-radius: 50%;
  border: 1px solid var(--lp-line2);
  display: grid;
  place-items: center;
  background: radial-gradient(circle at 50% 30%, var(--lp-hero-tint), transparent 70%);
}
.lp-monogram__phi {
  display: inline-block;
  transform: translateY(-.07em); /* optical centring of the φ */
  /* --size fallback keeps the serif when used outside .lp-monogram —
     without it the shorthand is invalid and the φ falls back to the sans,
     whose glyph reads as a capital Φ */
  font: 500 calc(var(--size, 42px) * .6)/1 var(--lp-serif);
  color: var(--lp-paper);
}
.lp-wordmark {
  font: 600 14px var(--lp-sans);
  letter-spacing: .2em;
  color: var(--lp-paper);
}

/* ── buttons ─────────────────────────────────────────────────────────────── */

.lp-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  padding: 12px 22px;
  border-radius: var(--lp-radius-md);
  border: 1px solid transparent;
  background: transparent;
  color: var(--lp-paper);
  font: 600 14px var(--lp-sans);
  cursor: pointer;
  text-decoration: none;
  transition: background var(--lp-motion) var(--lp-ease), color var(--lp-motion) var(--lp-ease),
    border-color var(--lp-motion) var(--lp-ease), box-shadow var(--lp-motion) var(--lp-ease),
    transform var(--lp-motion) var(--lp-ease);
}
.lp-btn:disabled { opacity: .4; cursor: not-allowed; }

.lp-btn--primary {
  background: var(--lp-accent);
  color: var(--lp-on-accent);
  box-shadow: 0 8px 22px var(--lp-accent-glow);
}
.lp-btn--primary:hover:not(:disabled) { background: var(--lp-accent-strong); transform: translateY(-1px); }
.lp-btn--primary:active:not(:disabled) { background: var(--lp-accent-strong); transform: none; }

.lp-btn--secondary { border-color: var(--lp-line2); }
.lp-btn--secondary:hover:not(:disabled) { border-color: var(--lp-paper); background: var(--lp-hover-tint); }

.lp-btn--ghost { color: var(--lp-mist); padding: 12px 16px; }
.lp-btn--ghost:hover:not(:disabled) { color: var(--lp-paper); background: var(--lp-hover-tint); }

.lp-btn--brass { color: var(--lp-brass-300); border-color: var(--lp-brass); }
.lp-btn--brass:hover:not(:disabled) { background: color-mix(in srgb, var(--lp-brass) 10%, transparent); }

.lp-btn--icon { width: 44px; height: 44px; padding: 0; border-color: var(--lp-line2); color: var(--lp-mist); }
.lp-btn--icon:hover:not(:disabled) { color: var(--lp-paper); border-color: var(--lp-paper); }

.lp-btn--sm { padding: 8px 14px; font-size: 12px; border-radius: 6px; }
.lp-btn--lg { padding: 15px 28px; font-size: 16px; }

/* ── forms ───────────────────────────────────────────────────────────────── */

.lp-label {
  display: block;
  font: 600 11px var(--lp-sans);
  letter-spacing: .14em;
  text-transform: uppercase;
  color: var(--lp-mist);
  margin-bottom: 8px;
}

.lp-input {
  width: 100%;
  padding: 12px 14px;
  background: var(--lp-surface2);
  border: 1px solid var(--lp-line2);
  border-radius: var(--lp-radius-md);
  font: 400 15px/1.5 var(--lp-sans);
  color: var(--lp-paper);
  caret-color: var(--lp-accent);
  transition: border-color var(--lp-motion) var(--lp-ease), box-shadow var(--lp-motion) var(--lp-ease);
}
.lp-input::placeholder { color: var(--lp-muted); }
.lp-input:focus-visible {
  outline: none;
  border-color: var(--lp-accent);
  box-shadow: 0 0 0 3px var(--lp-accent-glow);
}
textarea.lp-input { min-height: 72px; resize: vertical; }

/* segmented control — radios inside a pill container */
.lp-seg {
  display: inline-flex;
  background: var(--lp-surface2);
  border: 1px solid var(--lp-line2);
  border-radius: var(--lp-radius-md);
  padding: 3px;
}
.lp-seg__opt {
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 8px 16px;
  border-radius: 6px;
  font: 600 13px var(--lp-sans);
  color: var(--lp-mist);
  cursor: pointer;
  transition: background var(--lp-motion) var(--lp-ease), color var(--lp-motion) var(--lp-ease);
}
.lp-seg__opt input { position: absolute; opacity: 0; width: 0; height: 0; pointer-events: none; }
.lp-seg__opt:has(input:checked) { background: var(--lp-accent); color: var(--lp-on-accent); }
.lp-seg__opt:not(:has(input:checked)):hover { color: var(--lp-paper); }
.lp-seg__opt:has(input:focus-visible) { outline: 2px solid var(--lp-accent-300); outline-offset: -2px; }

/* toggle — a checkbox styled as a 46×26 switch */
.lp-switch { display: inline-flex; align-items: center; gap: 12px; cursor: pointer; }
.lp-switch input { position: absolute; opacity: 0; width: 0; height: 0; pointer-events: none; }
.lp-switch__track {
  width: 46px;
  height: 26px;
  flex: none;
  border-radius: var(--lp-radius-pill);
  padding: 3px;
  display: inline-flex;
  justify-content: flex-start;
  background: var(--lp-line2);
  transition: background var(--lp-motion) var(--lp-ease);
}
.lp-switch__knob {
  width: 20px;
  height: 20px;
  border-radius: 50%;
  background: var(--lp-mist);
  transition: transform var(--lp-motion) var(--lp-ease), background var(--lp-motion) var(--lp-ease);
}
.lp-switch input:checked + .lp-switch__track { background: var(--lp-accent); }
.lp-switch input:checked + .lp-switch__track .lp-switch__knob {
  transform: translateX(20px);
  background: var(--lp-on-accent);
}
.lp-switch input:focus-visible + .lp-switch__track { outline: 2px solid var(--lp-accent-300); outline-offset: 2px; }
.lp-switch__text { font: 500 14px var(--lp-sans); color: var(--lp-mist); }

/* radio */
.lp-radio { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; font: 500 14px var(--lp-sans); color: var(--lp-mist); }
.lp-radio input { position: absolute; opacity: 0; width: 0; height: 0; pointer-events: none; }
.lp-radio__dot {
  width: 18px;
  height: 18px;
  flex: none;
  border-radius: 50%;
  border: 1px solid var(--lp-line2);
  display: grid;
  place-items: center;
  transition: border-color var(--lp-motion) var(--lp-ease);
}
.lp-radio__dot::after {
  content: '';
  width: 8px;
  height: 8px;
  border-radius: 50%;
  background: var(--lp-accent);
  opacity: 0;
  transition: opacity var(--lp-motion) var(--lp-ease);
}
.lp-radio:hover .lp-radio__dot { border-color: var(--lp-accent); }
.lp-radio input:checked ~ .lp-radio__dot { border-color: var(--lp-accent); }
.lp-radio input:checked ~ .lp-radio__dot::after { opacity: 1; }
.lp-radio input:checked ~ .lp-radio__text { color: var(--lp-paper); }
.lp-radio input:focus-visible ~ .lp-radio__dot { outline: 2px solid var(--lp-accent-300); outline-offset: 2px; }

/* ── cards ───────────────────────────────────────────────────────────────── */

.lp-card {
  background: var(--lp-surface);
  border: 1px solid var(--lp-line);
  border-radius: var(--lp-radius-lg);
  padding: var(--lp-space-6);
  box-shadow: var(--lp-sh-card);
  transition: border-color var(--lp-motion) var(--lp-ease), transform var(--lp-motion) var(--lp-ease);
}
.lp-card--hover:hover { border-color: var(--lp-line2); transform: translateY(-2px); }
.lp-card__kicker {
  font: 600 11px var(--lp-sans);
  letter-spacing: .2em;
  text-transform: uppercase;
  color: var(--lp-accent-300);
  margin-bottom: 14px;
}
.lp-card__title { font: 600 19px var(--lp-sans); color: var(--lp-paper); margin: 0 0 8px; }
.lp-card__body { font: 400 14px/1.6 var(--lp-sans); color: var(--lp-mist); margin: 0; }
.lp-card__meta {
  display: flex;
  align-items: center;
  gap: 6px;
  font: 500 12px var(--lp-sans);
  color: var(--lp-muted);
  margin-top: 14px;
}

/* stat card — serif figure, one accent glow */
.lp-card--stat {
  background: linear-gradient(160deg, var(--lp-surface2), var(--lp-surface));
  border-color: var(--lp-line2);
  position: relative;
  overflow: hidden;
}
.lp-card--stat::before {
  content: '';
  position: absolute;
  right: -30px;
  top: -30px;
  width: 120px;
  height: 120px;
  border-radius: 50%;
  background: radial-gradient(circle, var(--lp-accent-glow), transparent 70%);
}
.lp-stat__figure { font: 500 44px/1 var(--lp-serif); color: var(--lp-paper); }

/* elevation utilities */
.lp-elev-rest { box-shadow: var(--lp-sh-rest); }
.lp-elev-raised { box-shadow: var(--lp-sh-raised); }
.lp-elev-overlay { box-shadow: var(--lp-sh-overlay); }

/* ── navigation — a quiet top bar ────────────────────────────────────────── */

.lp-nav {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 16px 24px;
  border-bottom: 1px solid var(--lp-line);
}
.lp-nav__brand { display: flex; align-items: center; gap: 12px; }
.lp-nav__brand .lp-monogram__phi { font-size: 26px; } /* bare φ next to the wordmark */
.lp-nav__links { display: flex; align-items: center; gap: 26px; }
.lp-nav__links a { font: 500 14px var(--lp-sans); color: var(--lp-mist); transition: color var(--lp-motion) var(--lp-ease); }
.lp-nav__links a:hover, .lp-nav__links a[aria-current="page"] { color: var(--lp-paper); }

/* ── tables ──────────────────────────────────────────────────────────────── */

.lp-table { width: 100%; border-collapse: collapse; }
.lp-table th {
  text-align: left;
  font: 600 11px var(--lp-sans);
  letter-spacing: .16em;
  text-transform: uppercase;
  color: var(--lp-muted);
  background: var(--lp-surface2);
  padding: 14px 20px;
  border-bottom: 1px solid var(--lp-line);
}
.lp-table td {
  font: 400 14px var(--lp-sans);
  color: var(--lp-mist);
  padding: 15px 20px;
  border-bottom: 1px solid var(--lp-line);
}
.lp-table tbody tr:last-child td { border-bottom: 0; }
.lp-table tbody tr { transition: background var(--lp-motion) var(--lp-ease); }
.lp-table tbody tr:hover { background: var(--lp-surface2); }
.lp-table .lp-strong { font-weight: 500; color: var(--lp-paper); }
.lp-num { text-align: right; font-variant-numeric: tabular-nums; }

/* ── tags & status ───────────────────────────────────────────────────────── */

.lp-tag {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  padding: 6px 12px;
  border-radius: var(--lp-radius-pill);
  font: 600 12px var(--lp-sans);
  border: 1px solid transparent;
}
.lp-tag__dot { width: 6px; height: 6px; border-radius: 50%; background: currentColor; }
.lp-tag--accent { background: var(--lp-accent-tint-bg); color: var(--lp-accent-300); border-color: var(--lp-accent-tint-border); }
.lp-tag--brass { background: var(--lp-brass-tint-bg); color: var(--lp-brass-300); border-color: var(--lp-brass-tint-border); }
.lp-tag--neutral { background: var(--lp-surface2); color: var(--lp-mist); border-color: var(--lp-line2); }
.lp-tag--outline { color: var(--lp-mist); border-color: var(--lp-line2); }
.lp-tag--ok { background: var(--lp-ok-tag-bg); color: var(--lp-ok-text); border-color: var(--lp-ok-tag-border); }
.lp-tag--ok .lp-tag__dot { background: var(--lp-ok); }
.lp-tag--warn { background: var(--lp-warn-tag-bg); color: var(--lp-warn-text); border-color: var(--lp-warn-tag-border); }
.lp-tag--warn .lp-tag__dot { background: var(--lp-warn); }
.lp-tag--bad { background: var(--lp-bad-tag-bg); color: var(--lp-bad-text); border-color: var(--lp-bad-tag-border); }
.lp-tag--bad .lp-tag__dot { background: var(--lp-bad); }

/* do / don't panels */
.lp-panel--ok { border: 1px solid var(--lp-ok-border); background: var(--lp-ok-bg); border-radius: 12px; padding: 20px; }
.lp-panel--ok .lp-panel__head { color: var(--lp-ok-text); }
.lp-panel--warn { border: 1px solid var(--lp-warn-border); background: var(--lp-warn-bg); border-radius: 12px; padding: 20px; }
.lp-panel--warn .lp-panel__head { color: var(--lp-warn-text); }
.lp-panel--bad { border: 1px solid var(--lp-bad-border); background: var(--lp-bad-bg); border-radius: 12px; padding: 20px; }
.lp-panel--bad .lp-panel__head { color: var(--lp-bad-text); }
.lp-panel__head { display: flex; align-items: center; gap: 8px; font: 600 13px var(--lp-sans); margin-bottom: 8px; }
.lp-panel__body { font: 400 14px/1.6 var(--lp-sans); color: var(--lp-mist); }

/* ── dialog ──────────────────────────────────────────────────────────────── */

.lp-dialog-backdrop {
  position: fixed;
  inset: 0;
  z-index: 50;
  display: grid;
  place-items: center;
  padding: var(--lp-space-6);
  background: var(--lp-backdrop);
  backdrop-filter: blur(4px);
}
.lp-dialog {
  width: min(440px, 100%);
  background: var(--lp-surface2);
  border: 1px solid var(--lp-line2);
  border-radius: 16px;
  padding: 28px;
  box-shadow: var(--lp-sh-overlay);
}
.lp-dialog__title { font: 500 26px/1.15 var(--lp-serif); color: var(--lp-paper); margin: 0 0 8px; }
.lp-dialog__body { font: 400 15px/1.6 var(--lp-sans); color: var(--lp-mist); margin: 0 0 24px; }
.lp-dialog__actions { display: flex; justify-content: flex-end; gap: 12px; }

/* ── patterns ────────────────────────────────────────────────────────────── */

/* chat bubbles — the concierge console surface */
.lp-bubble {
  max-width: 80%;
  padding: 12px 14px;
  font: 400 14px/1.5 var(--lp-sans);
  border-radius: 12px;
}
.lp-bubble--in {
  align-self: flex-start;
  background: var(--lp-surface2);
  border: 1px solid var(--lp-line);
  border-bottom-left-radius: 4px;
  color: var(--lp-mist);
}
.lp-bubble--out {
  align-self: flex-end;
  background: var(--lp-accent-tint-bg);
  border: 1px solid var(--lp-accent-tint-border);
  border-bottom-right-radius: 4px;
  color: var(--lp-paper);
}

/* marketing hero — one radial accent tint on the void */
.lp-hero {
  border: 1px solid var(--lp-line);
  border-radius: 16px;
  padding: 56px 44px;
  position: relative;
  overflow: hidden;
  background: radial-gradient(120% 90% at 80% 0%, var(--lp-hero-tint), transparent 55%), var(--lp-void);
}

/* ── reduced motion ──────────────────────────────────────────────────────── */

@media (prefers-reduced-motion: reduce) {
  .lp-page *, .lp-page *::before, .lp-page *::after { transition-duration: 0s !important; }
}
