/* 
ODG · shared.css
Cross-page components & layout. Loaded by EVERY page after base.css.
 *//* ============================================================
   ODG Deliveries — landing page styles
   Structure:
     1. Reset & tokens
     2. Typography
     3. Layout primitives (.container, sections, flex/grid utils)
     4. Navigation
     5. Hero
     6. AI Match (browser mock)
     7. Feature cards / benefit grid
     8. Feature showcase (photo mock)
     9. Area grid
    10. Steps
    11. Quotes
    12. Roles
    13. Waitlist CTA
    14. Footer
    15. Mobile navigation drawer
    16. Responsive breakpoints
   ============================================================ *//* 1. Reset & tokens ----------------------------------------- *//* Style 02: 45° Diagonal Light Beam Sweep Skeleton Animation */.skeleton, .sk-view-wrap .skeleton {
  position: relative !important;
  background: #1a1a1a !important;
  border-radius: 6px !important;
  overflow: hidden !important;
  display: block !important
}.skeleton::after, .sk-view-wrap .skeleton::after {
  content: "" !important;
  position: absolute !important;
  inset: -50% !important;
  background: linear-gradient(110deg, transparent 35%, rgba(255, 255, 255, 0.22) 50%, transparent 65%) !important;
  animation: odg-shimmer 1.5s infinite linear !important
}/* ============================================================
   Universal Lucide Icon Styling (Icon-With-No-Box Pattern)
   ============================================================ */.lucide, svg.lucide {
  display: inline-block !important;
  vertical-align: middle !important;
  width: 15px !important;
  height: 15px !important;
  stroke: currentColor !important;
  fill: none !important;
  stroke-width: 1.8 !important;
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  margin-right: 6px !important;
  box-shadow: none !important
}/* Reset icons inside buttons, chips, and table rows */.button .lucide, .button svg, .btn .lucide, .btn svg, .chip .lucide, .chip svg, .set-row .lucide, .set-row svg {
  background: transparent !important;
  border: none !important;
  padding: 0 !important;
  width: 14px !important;
  height: 14px !important;
  box-shadow: none !important
}/* Reset wrappers so no double-padding occurs */.brand-mark-icon, .tile-ic, .app-icon-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background: transparent;
  border: none;
  padding: 0
}/* 2. Typography --------------------------------------------- */.mono-label {
  font:500 11px/1 var(--font-mono);
  color:var(--color-text-dim);
  letter-spacing:.12em;
  text-transform:uppercase;
  display:block
}.heading-lg {
  font-weight:700;
  letter-spacing:-.05em;
  line-height:1;
  color:var(--color-text-primary)
}.heading-lg {font-size:clamp(36px,5vw,64px);max-width:18ch;line-height:.95
}.body-copy {color:var(--color-text-muted);line-height:1.55
}/* 3. Layout primitives -------------------------------------- */.container {
  width:min(calc(100% - var(--container-pad)), var(--container-max));
  margin:0 auto
}.flex-row {display:flex;align-items:center;gap:16px;flex-wrap:wrap
}.grid-2col {display:grid;grid-template-columns:repeat(2,1fr);gap:12px
}.grid-3col {display:grid;grid-template-columns:repeat(3,1fr);gap:12px
}.grid-4col {display:grid;grid-template-columns:repeat(4,1fr);gap:10px
}/* Buttons ---------------------------------------------------
   .button remains the legacy production class. .btn and modifiers are the
   shared semantic API for future screens, so no existing route is rewritten. */
.button, .btn, .btn--primary {
  display:inline-flex;
  align-items:center;
  justify-content:center;
  gap:var(--space-2);
  min-height:2.5rem;
  padding:var(--space-2) var(--space-4);
  background:var(--color-brand);
  color:var(--color-brand-red-ink);
  border:1px solid transparent;
  border-radius:var(--radius-sm);
  font-size:.8125rem;
  font-weight:600;
  white-space:nowrap;
  transition:background-color var(--transition-fast),border-color var(--transition-fast),color var(--transition-fast),transform var(--transition-fast)
}.button:hover, .btn:hover {background:var(--color-brand-red-hover)
}.button:active, .btn:active {transform:translateY(1px)
}.button svg, .btn svg {width:14px;height:14px;display:block
}.button-variant-ghost, .btn--ghost {background:transparent;color:var(--color-text-primary);border-color:var(--color-border-strong)
}.button-variant-ghost:hover, .btn--ghost:hover {background:var(--color-bg-elevated-2);border-color:var(--color-border-strong)
}.button-variant-dark, .btn--secondary {background:var(--color-text-cream);color:var(--color-accent-cream)
}.button-variant-dark:hover, .btn--secondary:hover {background:#2a2724
}.btn--danger {background:var(--color-brand);color:#fff
}.btn--block {display:flex;width:100%
}.btn--sm {min-height:2.25rem;padding:var(--space-1) var(--space-3);font-size:.75rem
}.btn--lg {min-height:2.75rem;padding:.625rem var(--space-4)
}.btn--icon {width:2.5rem;padding:0
}/* Official ODG lockup — primary light variation on dark surfaces.
   The former Lucide truck/store/shield treatments are not logo substitutes. */
.brand-mark {
  display:inline-flex;align-items:center;gap:0;
  line-height:1;white-space:nowrap
}.brand-mark-icon {display:none !important
}.brand-mark-word {
  display:block;width:132px;height:38px;flex:0 0 132px;
  background:url('../images/odg-logo-light.png') center / contain no-repeat;
  color:transparent;font-size:0;line-height:0
}
@media (max-width:560px) {
  .brand-mark-word {width:116px;height:34px;flex-basis:116px
  }
}/* 7. Benefit cards ----------------------------------------- */.card {
  background:var(--color-bg-elevated);
  border:1px solid var(--color-border);
  border-radius:var(--radius-card);
  padding:20px;
  display:flex;flex-direction:column
}
/* Semantic card primitives for page-level adoption without duplicate shells. */
.card__media {aspect-ratio:4 / 3;overflow:hidden
}.card__media > img {width:100%;height:100%;object-fit:cover
}.card__body {display:grid;gap:var(--space-3);padding:var(--space-4)
}.card__title {color:var(--color-text);font-family:var(--font-display);font-weight:600;line-height:1.2
}.card__meta {color:var(--color-text-muted);font-size:.8125rem;line-height:1.45
}.card__actions {display:flex;align-items:center;justify-content:space-between;gap:var(--space-3);flex-wrap:wrap
}.food-card,.vendor-card,.order-card,.address-card {
  background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg)
}.form-field {display:grid;gap:var(--space-2)
}
/* Honest loading/empty/readiness states. These are intentionally compact:
   they direct the next action without pretending unavailable data is live. */
.state-panel {
  display:grid;
  justify-items:start;
  gap:var(--space-3);
  padding:var(--space-6);
  border:1px dashed var(--color-border-strong);
  border-radius:var(--radius-lg);
  background:var(--color-surface-muted);
}
.state-panel__icon {
  display:grid;
  place-items:center;
  width:2.5rem;
  height:2.5rem;
  border-radius:var(--radius-md);
  background:rgba(188,26,26,.12);
  color:var(--color-brand);
}
.state-panel__icon .lucide {width:1.25rem;height:1.25rem;margin:0
}
.state-panel__title {color:var(--color-text);font-family:var(--font-display);font-size:1.125rem;font-weight:600;letter-spacing:-.02em;line-height:1.2
}
.state-panel__copy {max-width:42ch;color:var(--color-text-muted);font-size:.875rem;line-height:1.5
}
.state-panel__action {margin-top:var(--space-1)
}
.state-panel--center {justify-items:center;text-align:center
}.state-panel--center .state-panel__copy {text-align:center
}.area-board-kicker-next {margin-top:40px
}.area-soon-list {
  display:grid;
  grid-template-columns:repeat(4,1fr);
  gap:12px 20px
}.area-soon-list li {
  display:flex;
  flex-direction:column;
  gap:6px;
  padding-top:12px;
  border-top:1px solid var(--color-border);
  text-align:left
}.area-soon-list span {font-size:15px;font-weight:500;letter-spacing:-.02em
}.area-soon-list em {
  font-style:normal;
  font:500 10px/1 var(--font-mono);
  letter-spacing:.1em;
  text-transform:uppercase;
  color:var(--color-text-dim)
}@media (max-width:900px) {

  /* Collapse multi-column layouts */

  .grid-2col, .grid-3col, .grid-4col {grid-template-columns:1fr;gap:10px
  }

  .area-soon-list {grid-template-columns:1fr 1fr
  }

  .area-soon-list li {text-align:left
  }

  /* Cards less vertical padding on mobile, center content */

  .card {
    padding:18px;
    text-align:center;
    align-items:center
  }

  /* Section headings tighten */

  .heading-lg {font-size:clamp(32px,9vw,48px);max-width:16ch;margin:0 auto
  }
}.auth-status {font-size:13px;min-height:1.2em;color:#3d6b3a;text-align:center
}.auth-status.is-error {color:var(--color-brand-red)
}/* Shared popover ------------------------------------------- */.odg-pop {
  position:fixed;inset:0;z-index:400;
  display:grid;place-items:center;
  padding:28px 20px
}.odg-pop[hidden] {display:none !important
}.odg-pop-scrim {
  position:absolute;inset:0;
  border:0;padding:0;margin:0;width:100%;height:100%;
  background:rgba(8,6,5,.72);
  -webkit-backdrop-filter:blur(8px);
  backdrop-filter:blur(8px);
  animation:odgPopScrim .32s ease both
}.odg-pop-card {
  position:relative;z-index:1;
  background:var(--color-brand-red);
  color:#fff;
  padding:.5rem .75rem;
  border-radius:.2rem;
  max-width:min(88vw,320px);
  width:max-content;
  box-shadow:none;
  outline:none;
  border:0;
}
.odg-pop-line {
  margin:0;
  font-size:14px;
  line-height:1.45;
  font-weight:500;
  letter-spacing:-.01em;
  opacity:0;
  transform:translateY(10px);
  text-align:center;
}.odg-pop-line + .odg-pop-line {margin-top:4px
}.odg-pop.is-on .odg-pop-line {
  animation:odgPopLine .42s cubic-bezier(.2,.8,.2,1) forwards
}body.odg-pop-open {overflow:hidden
}

/* Phase-3 polish — balance icon spacing inside flex+gap containers.
   The base .lucide rule sets margin-right:6px !important; in containers that
   already use flexbox `gap` that stacks (margin + gap) and pushes button/nav
   content off-center. Reset it ONLY for flex+gap contexts. .chip is excluded —
   it is not flex and its icons still need the margin. */
.button .lucide, .button svg,
.btn .lucide, .btn svg,
.set-row .lucide, .set-row svg,
.home-nav a .lucide, .home-nav a svg {
  margin-right: 0 !important;
}
/* ═══════════════════════════════════════════════════════════════════════
   ODG app runtime (React app additions — not part of the static site)
   Boot / loading UI: shown before and during hydration, route changes and
   auth transitions so the user never sees unstyled or half-drawn pages.
   ═══════════════════════════════════════════════════════════════════════ */
.odg-boot {
  min-height: 100vh;
  display: grid;
  place-items: center;
  background: radial-gradient(60% 50% at 50% 0%, #1a1414 0%, #0d0d0d 70%);
}
.odg-boot__box {
  display: grid;
  justify-items: center;
  gap: 14px;
  padding: 24px;
  text-align: center;
}
.odg-boot__mark {
  font: 700 16px/1 'Space Grotesk', ui-monospace, Menlo, monospace;
  letter-spacing: .34em;
  color: #f7f5f1;
  text-transform: uppercase;
}
.odg-boot__mark b { color: #bc1a1a; }
.odg-boot__bar {
  width: 132px;
  height: 3px;
  border-radius: 2px;
  background: #262626;
  overflow: hidden;
}
.odg-boot__bar i {
  display: block;
  height: 100%;
  width: 40%;
  border-radius: 2px;
  background: linear-gradient(90deg, #bc1a1a, #f1d323);
  animation: odg-boot-slide .9s infinite ease-in-out;
}
@keyframes odg-boot-slide {
  0% { transform: translateX(-110%); }
  100% { transform: translateX(340%); }
}
.odg-boot__label {
  font: 500 11px/1.4 ui-monospace, Menlo, monospace;
  color: #9c9c9c;
  letter-spacing: .06em;
}
.odg-boot--overlay {
  position: fixed;
  inset: 0;
  z-index: 2147483010;
  background: rgba(13, 13, 13, .94);
  backdrop-filter: blur(5px);
  opacity: 0;
  pointer-events: none;
  transition: opacity .18s ease;
}
.odg-boot--overlay.is-on { opacity: 1; pointer-events: auto; }
.odg-routebar {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  height: 3px;
  z-index: 2147483011;
  overflow: hidden;
  pointer-events: none;
}
.odg-routebar i {
  display: block;
  height: 100%;
  width: 35%;
  border-radius: 2px;
  background: linear-gradient(90deg, #bc1a1a, #f1d323);
  animation: odg-route-slide 1s infinite ease-in-out;
}
@keyframes odg-route-slide {
  0% { transform: translateX(-110%); }
  100% { transform: translateX(400%); }
}

/* ── Password strength meter (auth) ─────────────────────────────────────── */
.pw-strength { margin-top: 8px; }
.pw-bar { height: 6px; width: 100%; border-radius: 3px; background: rgba(0,0,0,0.12); overflow: hidden; }
.pw-bar-fill { height: 100%; border-radius: 3px; transition: width 0.15s ease, background-color 0.15s ease; }
.pw-strength-label { display: block; font-size: 12px; margin-top: 6px; font-weight: 600; }
.pw-rules { list-style: none; margin: 6px 0 0; padding: 0; display: grid; gap: 3px; font-size: 12px; }
.pw-rules li.ok { color: #1a9d4f; }
.pw-rules li.missing { color: #9b9b9b; }

/* Cloudflare Turnstile widget (optional CAPTCHA). The container just holds the
   widget iframe; Turnstile sizes itself. Hidden/absent when no site key is set. */
.turnstile-wrap { min-height: 65px; display: flex; justify-content: center; margin: 4px 0 2px; }
.turnstile-wrap iframe { border: 0; }

/* Reusable dish card — horizontal compact (thumb | name/tag/price | status + kebab).
   Themed with the project tokens (red brand + yellow accent). No green here. */
.dish-card {display:flex;align-items:stretch;gap:var(--space-3);padding:var(--space-3);border:1px solid var(--color-border);border-radius:var(--radius-lg);background:var(--color-surface);min-width:0}
.dish-card__thumb {position:relative;flex:0 0 4.5rem;width:4.5rem;min-height:4.5rem;align-self:center;overflow:hidden;border-radius:10px;background:var(--color-bg-elevated-2)}
.dish-card__thumb img {position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;display:block}
.dish-card__body {flex:1;min-width:0;display:grid;align-content:start;gap:2px;align-self:center}
.dish-card__name {font:600 .98rem/1.25 var(--font-display);letter-spacing:-.01em;color:var(--color-text);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dish-card__tag {display:flex;align-items:center;gap:.3rem;font-size:.72rem;color:var(--color-text-dim);margin:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dish-card__category {color:var(--color-brand-yellow);font-weight:600}
.dish-card__tag-sep {color:var(--color-text-dim);opacity:.7}
.dish-card__desc {font-size:.74rem;line-height:1.35;color:var(--color-text-muted);margin:2px 0 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.dish-card__price {display:flex;align-items:baseline;gap:.4rem;margin-top:.3rem}
.dish-card__price-current {font:700 .92rem/1.2 var(--font-mono);color:var(--color-brand)}
.dish-card__price-original {font:600 .75rem/1.2 var(--font-mono);color:var(--color-text-dim);text-decoration:line-through}
.dish-card__actions {flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;justify-content:space-between;gap:.4rem;padding:2px 0}
.dish-card__status {font:600 .7rem/1 var(--font-mono);letter-spacing:.02em;padding:.25rem .6rem;border-radius:999px;white-space:nowrap;border:1px solid transparent}
.dish-card__status.is-on {color:var(--color-brand-yellow);background:rgba(241,211,35,.12);border-color:rgba(241,211,35,.4)}
.dish-card__status.is-off {color:var(--color-text-dim);background:var(--color-bg-elevated-3);border-color:var(--color-border)}
.dish-card.is-sold .dish-card__name {color:var(--color-text-dim)}
.dish-card.is-sold .dish-card__desc {color:var(--color-text-dim)}
.dish-card.is-sold .dish-card__thumb img {filter:grayscale(.65) opacity(.7)}
.dish-card.dim {opacity:.35}
.dish-card__menu {display:grid;place-items:center;width:1.75rem;height:1.75rem;border:1px solid var(--color-border);border-radius:8px;background:transparent;color:var(--color-text-muted);cursor:pointer;transition:background var(--transition-fast),color var(--transition-fast)}
.dish-card__menu:hover {background:var(--color-bg-elevated-2);color:var(--color-text)}
.dish-card__menu .lucide {width:.9375rem;height:.9375rem;margin:0}
@media (max-width:560px){.dish-card__actions{flex-direction:row;align-items:center;justify-content:flex-end}}

/* Dish editor/composer — compact sheet form (approves mockup structure, ODG theme).
   Self-contained and reusable; red brand accent, yellow optional affordances, no green. */
.dish-editor {display:grid;gap:var(--space-4);width:100%;max-width:26rem;padding:var(--space-5);border:1px solid var(--color-border);border-radius:var(--radius-xl);background:var(--color-surface)}
.dish-editor__header {display:flex;align-items:flex-start;justify-content:space-between;gap:var(--space-3)}
.dish-editor__eyebrow {margin:0 0 2px;font:600 .6875rem/1 var(--font-mono);letter-spacing:.08em;text-transform:uppercase;color:var(--color-text-muted)}
.dish-editor__title {margin:0;font:800 1.25rem/1.15 var(--font-display);letter-spacing:-.02em;color:var(--color-text)}
.dish-editor__cancel {flex-shrink:0;margin-top:.15rem;padding:.4rem .85rem;border:1px solid var(--color-border-strong);border-radius:999px;background:transparent;color:var(--color-text-muted);font:600 .8rem/1 var(--font-body);cursor:pointer;transition:color var(--transition-fast),border-color var(--transition-fast)}
.dish-editor__cancel:hover:not(:disabled) {color:var(--color-text);border-color:var(--color-border-strong)}
.dish-editor__cancel:disabled {opacity:.5;cursor:default}
.dish-editor__photo {display:flex;align-items:center;gap:var(--space-3);padding:.65rem .85rem;border:1px dashed var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-surface-muted);cursor:pointer;transition:border-color var(--transition-fast)}
.dish-editor__photo:hover {border-color:var(--color-brand)}
.dish-editor__photo-icon {flex-shrink:0;display:grid;place-items:center;width:2.5rem;height:2.5rem;border-radius:9px;background:var(--color-bg-elevated-2);color:var(--color-brand);overflow:hidden}
.dish-editor__photo-icon .lucide {width:1.1rem;height:1.1rem;margin:0}
.dish-editor__photo-icon img {width:100%;height:100%;object-fit:cover;display:block}
.dish-editor__photo-text {display:grid;gap:1px;min-width:0}
.dish-editor__photo-title {font:700 .85rem/1.2 var(--font-display);color:var(--color-text)}
.dish-editor__photo-title em {font-weight:400;font-style:normal;color:var(--color-text-dim)}
.dish-editor__photo-hint {font-size:.68rem;color:var(--color-text-dim);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dish-editor__photo-clear {flex-shrink:0;display:grid;place-items:center;width:1.6rem;height:1.6rem;margin-left:auto;border:0;border-radius:999px;background:transparent;color:var(--color-text-muted);cursor:pointer}
.dish-editor__photo-clear:hover {background:var(--color-bg-elevated-2);color:var(--color-text)}
.dish-editor__photo-clear .lucide {width:.9rem;height:.9rem;margin:0}
.dish-editor__row {display:grid;grid-template-columns:1.3fr 1fr;gap:var(--space-3)}
.dish-editor__field {display:grid;gap:var(--space-2);min-width:0}
.dish-editor__label {font:600 .75rem/1 var(--font-body);color:var(--color-text-muted)}
.dish-editor__input {width:100%;min-height:2.75rem;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg-elevated-2);color:var(--color-text);font:500 .9rem var(--font-body);transition:border-color var(--transition-fast)}
.dish-editor__input:focus {outline:none;border-color:var(--color-brand)}
.dish-editor__input:disabled {opacity:.55}
.dish-editor__price {position:relative;display:block}
.dish-editor__price-symbol {position:absolute;left:var(--space-3);top:50%;transform:translateY(-50%);color:var(--color-text-muted);font-size:.9rem;pointer-events:none}
.dish-editor__price .dish-editor__input {padding-left:1.75rem}
.dish-editor__select {width:100%;min-height:2.75rem;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg-elevated-2);color:var(--color-text);font:500 .9rem var(--font-body);appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2377747b' stroke-width='1.5' fill='none' fill-rule='evenodd'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;padding-right:2rem;transition:border-color var(--transition-fast)}
.dish-editor__select:focus {outline:none;border-color:var(--color-brand)}
.dish-editor__select:disabled {opacity:.55}
.dish-editor__textarea {width:100%;min-height:2.6rem;padding:var(--space-2) var(--space-3);border:1px solid var(--color-border-strong);border-radius:var(--radius-md);background:var(--color-bg-elevated-2);color:var(--color-text);font:500 .9rem/1.4 var(--font-body);resize:none;transition:border-color var(--transition-fast)}
.dish-editor__textarea:focus {outline:none;border-color:var(--color-brand)}
.dish-editor__textarea:disabled {opacity:.55}
.dish-editor__note {display:flex;gap:var(--space-2);align-items:flex-start;margin:.2rem 0 0;font-size:.7rem;line-height:1.4;color:var(--color-text-dim)}
.dish-editor__note .lucide {flex-shrink:0;width:.875rem;height:.875rem;margin:.1rem 0 0;color:var(--color-brand)}
.dish-editor__save {display:inline-flex;align-items:center;justify-content:center;gap:var(--space-2);width:100%;min-height:2.75rem;padding:var(--space-2) var(--space-4);background:var(--color-brand);color:var(--color-brand-red-ink);border:0;border-radius:var(--radius-md);font:700 .95rem/1 var(--font-body);cursor:pointer;transition:background-color var(--transition-fast)}
.dish-editor__save:hover:not(:disabled) {background:var(--color-brand-red-hover)}
.dish-editor__save:disabled {opacity:.55;cursor:default}
.dish-editor__save .lucide {width:.9375rem;height:.9375rem;margin:0}
.dish-editor__save:disabled .lucide {display:none}
@media (max-width:560px){.dish-editor{padding:var(--space-4)}}

/* ========================================================================
   Reusable: TicketCard / AlertCard / Settings — ODG system tokens only.
   No green, no arbitrary hex. Warnings/attention = brand yellow, destructive
   = danger red, primary = brand red, neutral = muted/dim.
   ======================================================================== */

/* ---- TicketCard (kitchen operations) ---- */
.ticket-card {position:relative;overflow:hidden;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:0.95rem 1rem 0.95rem 1.1rem}
.ticket-card::before {content:"";position:absolute;left:0;top:0;bottom:0;width:3px;background:var(--color-border)}
.ticket-card--pending::before,.ticket-card--active::before {background:var(--color-brand-yellow)}
.ticket-card--delivered::before {background:var(--color-text-dim)}
.ticket-card--cancelled::before {background:var(--color-danger)}
.ticket-card__top {display:flex;align-items:center;gap:0.5rem;margin-bottom:0.5rem}
.ticket-card__id {font:700 0.85rem/1 var(--font-mono);color:var(--color-text);letter-spacing:.01em}
.ticket-card__item {font:800 1.05rem/1.25 var(--font-display);letter-spacing:-.02em;color:var(--color-text);margin:0 0 0.4rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ticket-card__meta {display:flex;gap:0.4rem;align-items:flex-start;font-size:.78rem;line-height:1.4;color:var(--color-text-muted);margin:0 0 0.6rem}
.ticket-card__meta .lucide {flex-shrink:0;width:.875rem;height:.875rem;margin:0;color:var(--color-text-dim);margin-top:1px}
.ticket-card__footer {display:flex;align-items:baseline;justify-content:space-between;gap:0.75rem}
.ticket-card__price {font:700 .88rem/1 var(--font-mono);color:var(--color-text)}
.ticket-card__time {font:500 .72rem/1 var(--font-mono);color:var(--color-text-dim)}
.ticket-card__actions {margin-top:0.75rem}

/* Status chip (shared by TicketCard and elsewhere) */
.status-chip {display:inline-flex;align-items:center;gap:.3rem;padding:0.3rem 0.5rem;border-radius:.2rem;border:0;outline:none;box-shadow:none;font:700 .65rem/1.4 var(--font-mono);letter-spacing:.03em;text-transform:uppercase;white-space:nowrap;background:var(--color-brand-red);color:#fff}
.status-chip__dot {width:5px;height:5px;border-radius:50%;background:#fff;opacity:.85;flex-shrink:0}

/* ---- AlertCard (notifications) ---- */
.alert-card {display:flex;gap:0.75rem;width:100%;text-align:left;align-items:flex-start;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:0.85rem 1rem;cursor:pointer;transition:border-color var(--transition-fast),background var(--transition-fast)}
.alert-card:hover {border-color:var(--color-border-strong)}
.alert-card--unread {background:var(--color-bg-elevated-2);border-color:var(--color-border-strong)}
.alert-card__icon {flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2.25rem;height:2.25rem;border-radius:8px;background:var(--color-bg-elevated-3);color:var(--color-text-muted)}
.alert-card--unread .alert-card__icon {background:rgba(188,26,26,.15);color:var(--color-brand-red)}
.alert-card__icon .lucide {width:1.05rem;height:1.05rem;margin:0}
.alert-card__body {flex:1;min-width:0;display:block}
.alert-card__top {display:flex;align-items:flex-start;justify-content:space-between;gap:0.5rem}
.alert-card__title {font:700 .88rem/1.3 var(--font-display);color:var(--color-text);margin:0}
.alert-card__msg {display:block;font-size:.8rem;line-height:1.35;color:var(--color-text-muted);margin:.15rem 0 .3rem}
.alert-card__time {display:block;font:500 .7rem/1 var(--font-mono);color:var(--color-text-dim)}
.unread-dot {width:7px;height:7px;border-radius:50%;background:var(--color-brand-red);flex-shrink:0;margin-top:.3rem}

/* ---- Settings ---- */
.settings-section {margin-bottom:1.5rem}
.settings-label {font:700 .72rem/1 var(--font-mono);letter-spacing:.06em;text-transform:uppercase;color:var(--color-text-muted);margin:0 0 .6rem}
.settings-card {background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-md);padding:0.9rem 1rem}
.settings-card + .settings-card {margin-top:0.6rem}
.settings-card--flush {padding:0 1rem}

.profile-card {display:flex;align-items:center;gap:0.9rem;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg);padding:1.1rem;margin-bottom:1.5rem}
.profile-avatar {flex-shrink:0;display:flex;align-items:center;justify-content:center;width:3.4rem;height:3.4rem;border-radius:50%;background:var(--color-brand);color:var(--color-brand-red-ink);font:800 1.1rem/1 var(--font-display)}
.profile-card__body {min-width:0}
.profile-name {font:800 1.15rem/1.2 var(--font-display);letter-spacing:-.02em;color:var(--color-text);margin:0 0 .15rem}
.profile-email {font-size:.78rem;color:var(--color-text-muted);margin:0 0 .3rem;word-break:break-word}
.profile-meta {display:inline-flex;align-items:center;gap:.35rem;font:600 .7rem/1 var(--font-mono);color:var(--color-brand-yellow);background:rgba(241,211,35,.12);border:1px solid rgba(241,211,35,.3);padding:.15rem .55rem;border-radius:999px}
.profile-meta .lucide {width:.75rem;height:.75rem;margin:0}

.link-row {display:flex;align-items:center;justify-content:space-between;gap:0.75rem;width:100%;padding:.85rem 0;border-bottom:1px solid var(--color-border);text-align:left;background:none;color:inherit;cursor:pointer}
.link-row:last-child {border-bottom:none}
.link-row__text {min-width:0;display:grid;gap:2px}
.link-row__title {font:700 .92rem/1.2 var(--font-display);color:var(--color-text);margin:0}
.link-row__title--danger {color:var(--color-danger)}
.link-row__sub {font-style:normal;font-size:.75rem;color:var(--color-text-dim);margin:0}
.link-row .lucide {flex-shrink:0;width:.9rem;height:.9rem;margin:0;color:var(--color-text-dim)}
.link-row:hover .link-row__title {color:var(--color-text)}

/* Danger zone card: danger-tinted border + rows */
.danger-zone {background:var(--color-surface);border:1px solid rgba(224,82,82,.3);border-radius:var(--radius-md);overflow:hidden;padding:0 1rem}
.danger-zone .link-row {border-bottom:1px solid rgba(224,82,82,.15)}
.danger-zone .link-row:last-child {border-bottom:none}

/* Alert list + mark-all (used by NotificationList across roles) */
.alert-list {display:flex;flex-direction:column;gap:0.6rem}
.alert-mark-all {display:flex;justify-content:flex-end;margin-bottom:0.5rem}

/* Settings page shell + inline form fields (shared across roles) */
.settings-page {max-width:40rem}
.settings-fields {display:grid;gap:0.85rem}
.settings-field {display:grid;gap:0.35rem;min-width:0}
.settings-field__label {font:600 .7rem/1 var(--font-mono);color:var(--color-text-muted)}
.settings-field__input {width:100%;background:var(--color-bg-elevated-2);border:1px solid var(--color-border-strong);border-radius:10px;color:var(--color-text);font-size:.88rem;padding:.6rem .75rem;transition:border-color var(--transition-fast)}
.settings-field__input:focus {outline:none;border-color:var(--color-brand)}
.settings-field__input:disabled {opacity:.55}
.settings-field__hint {font:500 .75rem/1.4 var(--font-mono);color:var(--color-text-dim);margin:0}
.settings-field__loc {justify-self:stretch;display:flex;align-items:center;justify-content:center;gap:.4rem;margin-top:.85rem}
.settings-field__save {width:100%;margin-top:.4rem}

/* ---- Global form controls: no outline, dark themed (not default grey/black) ---- */
input, select, textarea {
  outline: none !important;
  -webkit-appearance: none;
  appearance: none;
  background: var(--color-bg-elevated-2);
  border: 1px solid var(--color-border-strong);
  border-radius: var(--radius-control);
  color: var(--color-text);
  font: 500 14px var(--font-display);
  padding: 11px 12px;
}
input:focus, select:focus, textarea:focus {
  outline: none !important;
  box-shadow: none;
  border-color: var(--color-brand-red);
}
input::placeholder, textarea::placeholder { color: var(--color-text-dim); }
select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1l5 5 5-5' stroke='%2377747b' stroke-width='1.5' fill='none' fill-rule='evenodd'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right .75rem center; padding-right: 2rem; }
/* radio/checkbox keep native look so they stay usable */
input[type="radio"], input[type="checkbox"] { -webkit-appearance: auto; appearance: auto; }
