/* =============================================================
   DTFtransfers portal styles
   Mobile-first, fluid (clamp/min/max), responsive across the
   full width continuum. Brand is the warm ramp #FF8A2B -> #FF394C;
   the --nod-blue* token NAMES are kept and resolve warm, see :root.
   ============================================================= */

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

/* authored display values (flex/grid) beat the UA [hidden] rule — re-assert it */
[hidden] { display: none !important; }

:root {
  /* ---- DTFtransfers brand palette (Justin 2026-07-29) ----
     Declared here because nod.css is the one stylesheet every surface loads, so this is the single
     source of truth. dtf-palette.css no longer redefines them; it only styles front-door
     components. Definitions alone paint nothing, so storefronts are unaffected by their presence. */
  --brand-orange: #FF8A2B;        /* gradient start */
  --brand-red: #FF394C;           /* gradient end, primary accent */
  --brand-pink: #FF2E86;
  --brand-link: #D9481A;          /* links and small text: the one warm value that clears AA on white */
  --brand-link-hover: #C25C05;
  --brand-eyebrow: #E4550A;
  --grad-brand: linear-gradient(135deg, #FF8A2B 0%, #FF394C 100%);
  --grad-heat: linear-gradient(100deg, #FF394C 0%, #FF2E86 100%);
  --glow-orange: 0 8px 24px rgba(255, 138, 43, 0.5);
  --glow-red: 0 10px 30px rgba(255, 57, 76, 0.35);
  /* Warm replacements for the pale-blue surfaces the portal used to fill selected chips, icon tiles
     and focus rings with (#eff6ff / var(--brand-tint) / var(--brand-tint)). Opaque rather than an alpha wash, because
     these sit on cards that are already tinted and a translucent layer muddies them. */
  /* Filled brand SURFACES (buttons, active nav, step dots) take the dtftransfers.com gradient
     rather than the flat red, so the portal matches the public site (Justin 2026-08-11). Kept
     separate from --nod-blue because that token is also used for borders, rings and icon color,
     where a gradient is not a legal value — and because store-theme.js overrides BOTH on a
     storefront so a reseller's own brand color still wins there. */
  --nod-cta: var(--grad-brand);
  --nod-cta-hover: var(--grad-heat);
  /* accent RULES (3px card tops, progress fills): a color, not a gradient */
  --nod-rule: var(--brand-orange);

  --brand-tint: #FFF3EC;
  --brand-ring: rgba(255, 138, 43, 0.38);

  /* The blue tokens now RESOLVE WARM. Keeping the names is deliberate: 339 references across the
     portal read them, including 94 in order-builder.css and 74 in order-page.css, so remapping the
     three of them recolours the whole dashboard and the power builder in one place instead of
     touching hundreds of call sites. Renaming would be a pointless mass edit with real risk. */
  /* Justin 2026-08-11: "make sure everything gets our orange." The accent resolves to the
     gradient's ORANGE end, not its red end, so every icon, dashed dropzone, selected chip,
     toggle track and soft wash in the portal reads warm. Text keeps --brand-link (#D9481A),
     the one warm value that clears AA on white — orange type on white would not. */
  --nod-blue: var(--brand-orange);
  --nod-blue-dark: var(--brand-link);
  /* stays translucent, not a flat tint: it is used as a hover wash over varied surfaces */
  --nod-blue-soft: rgba(255, 138, 43, 0.12);
  --nod-ink: #0f172a;
  --nod-ink-soft: #475569;
  --nod-line: #e2e8f0;
  --nod-bg: #f6f8fb;
  --nod-card: #ffffff;
  --nod-danger: #dc2626;
  --nod-radius: 14px;

  --fs-0: clamp(0.8125rem, 0.78rem + 0.2vw, 0.9375rem);
  --fs-1: clamp(0.9375rem, 0.9rem + 0.25vw, 1.0625rem);
  --fs-2: clamp(1.25rem, 1.05rem + 1vw, 1.9rem);
  --fs-3: clamp(1.6rem, 1.2rem + 2vw, 2.6rem);
  --sp: clamp(1rem, 0.8rem + 1vw, 1.75rem);
  /* The ONE page gutter for the order surfaces. Anything that spans the page — the shell, the
     masthead/stepper, the content column, the sticky bottom bar — insets by exactly this, so the
     left and right gutters match and stay consistent all the way down. Never nest two of them. */
  --nod-gutter: clamp(0.75rem, 0.5rem + 1.5vw, 1.75rem);
}

html, body { margin: 0; padding: 0; }
body {
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  color: var(--nod-ink);
  font-size: var(--fs-1);
  line-height: 1.5;
  -webkit-font-smoothing: antialiased;
}
img, svg { max-width: 100%; height: auto; display: block; }
a { color: inherit; }

/* ---------- brand logo ---------- */
.nod-logo {
  display: inline-flex; align-items: center; gap: 8px;
  font-weight: 900; letter-spacing: 0.02em;
  font-size: clamp(1.4rem, 1.2rem + 1vw, 1.9rem);
}
.nod-logo--light { color: #fff; }
.nod-logo--dark { color: var(--nod-ink); }
/* head-icon mark next to the NOD wordmark (white-bg surfaces) */
.nod-logo-img { height: clamp(34px, 2rem + 0.8vw, 44px); width: auto; flex: 0 0 auto; display: block; }
.auth-brand-logo .nod-logo-img { height: clamp(64px, 5rem + 1vw, 96px); }
.nod-mark-img { width: clamp(30px, 2rem + 0.6vw, 38px); height: auto; flex: 0 0 auto; display: block; }
/* stylized NOD wordmark image (replaces the plain "NOD" text on white surfaces) */
.nod-wordmark { height: clamp(20px, 1.1rem + 0.7vw, 26px); width: auto; flex: 0 0 auto; display: block; }
/* NOD lockup (head mark + wordmark) on the blue brand panel */
.auth-brand-logo { display: inline-flex; align-items: center; gap: 14px; margin-bottom: 2px; }
.auth-brand-logo .nod-mark-img { width: clamp(56px, 4.5rem + 1vw, 84px); }
.auth-brand-logo .nod-wordmark { height: clamp(34px, 2.4rem + 1vw, 52px); }

/* =============================================================
   AUTH (login / signup)
   ============================================================= */
/* ---------- shared address widget (NodAddress) — global so auth/admin/checkout all get it ---------- */
.nod-addr { display: grid; grid-template-columns: 1fr 1fr; gap: 0.8rem; }
.nod-addr-span { grid-column: 1 / -1; }
.nod-addr-field { display: flex; flex-direction: column; gap: 5px; min-width: 0; }
.nod-addr-field > span { font-size: var(--fs-0); font-weight: 700; color: var(--nod-ink); }
.nod-addr-field > span i { font-style: normal; font-weight: 600; color: var(--nod-ink-soft); font-size: 0.82em; }
.nod-addr-field input { min-height: 46px; padding: 10px 12px; border: 1px solid var(--nod-line); border-radius: 11px; font: inherit; font-size: var(--fs-0); background: var(--nod-card); color: var(--nod-ink); width: 100%; }
.nod-addr-field input:focus { outline: 2px solid var(--nod-blue-soft); border-color: var(--nod-blue); }
.nod-addr-row3 { grid-column: 1 / -1; display: grid; grid-template-columns: 1fr 1fr 1fr; gap: 0.8rem; }
@media (max-width: 560px) { .nod-addr, .nod-addr-row3 { grid-template-columns: 1fr; } }
.nod-co-country { position: relative; }
.nod-co-countrybtn { display: flex; align-items: center; gap: 9px; width: 100%; min-height: 46px; padding: 8px 12px; border: 1px solid var(--nod-line); border-radius: 11px; background: var(--nod-card); color: var(--nod-ink); font: inherit; font-size: var(--fs-0); cursor: pointer; text-align: left; }
.nod-co-countrybtn:focus { outline: 2px solid var(--nod-blue-soft); border-color: var(--nod-blue); }
.nod-co-flag { width: 26px; height: 18px; border-radius: 3px; flex: 0 0 auto; box-shadow: 0 0 0 1px rgba(15, 23, 42, 0.12); overflow: hidden; display: block; }
.nod-co-flag svg { width: 100%; height: 100%; display: block; }
.nod-co-cname { flex: 1 1 auto; font-weight: 600; }
.nod-co-cchev { width: 16px; height: 16px; color: var(--nod-ink-soft); flex: 0 0 auto; }
.nod-co-countrymenu { position: absolute; left: 0; right: 0; top: calc(100% + 4px); z-index: 20; background: var(--nod-card); border: 1px solid var(--nod-line); border-radius: 12px; box-shadow: 0 14px 34px rgba(15, 23, 42, 0.16); padding: 6px; }
.nod-co-countrymenu[hidden] { display: none; }
.nod-co-copt { display: flex; align-items: center; gap: 9px; width: 100%; padding: 9px 10px; border: none; background: none; border-radius: 8px; font: inherit; font-size: var(--fs-0); color: var(--nod-ink); cursor: pointer; text-align: left; min-height: 42px; }
.nod-co-copt:hover, .nod-co-copt.is-on { background: var(--nod-blue-soft); color: var(--nod-blue-dark); }
.nod-co-addr { position: relative; }
.nod-co-suggest { position: absolute; left: 0; right: 0; top: 100%; z-index: 25; margin: 4px 0 0; padding: 6px; list-style: none; background: var(--nod-card); border: 1px solid var(--nod-line); border-radius: 12px; box-shadow: 0 14px 34px rgba(15, 23, 42, 0.16); max-height: 260px; overflow-y: auto; }
.nod-co-suggest[hidden] { display: none; }
.nod-co-sopt { display: flex; flex-direction: column; gap: 1px; padding: 9px 10px; border-radius: 8px; cursor: pointer; }
.nod-co-sopt:hover { background: var(--nod-blue-soft); }
.nod-co-sopt strong { font-size: var(--fs-0); color: var(--nod-ink); font-weight: 700; }
.nod-co-sopt span { font-size: 0.78rem; color: var(--nod-ink-soft); }
.nod-co-suggest-note { padding: 4px 10px 6px; font-size: 0.68rem; font-weight: 700; text-transform: uppercase; letter-spacing: 0.03em; color: var(--nod-ink-soft); }

.auth-subhead { margin: 0.6rem 0 0.2rem; font-size: var(--fs-0); font-weight: 800; color: var(--nod-ink); }
.auth-subhead i { display: block; font-style: normal; font-weight: 600; color: var(--nod-ink-soft); font-size: 0.82em; margin-top: 2px; }

.auth-body { min-height: 100svh; background: var(--nod-bg); }
.auth-split {
  min-height: 100svh;
  display: grid;
  grid-template-columns: 1fr;
}
@media (min-width: 900px) {
  .auth-split { grid-template-columns: 1.05fr 1fr; }
  /* pin the brand panel: the (long) form scrolls, the left column stays put */
  .auth-brand { position: sticky; top: 0; align-self: start; height: 100svh; min-height: 0; overflow: hidden; }
}

/* brand panel — full-screen landing on mobile (with CTAs), left column on desktop */
.auth-brand {
  display: flex; flex-direction: column; align-items: flex-start;
  background: linear-gradient(150deg, var(--brand-orange) 0%, var(--brand-red) 55%, var(--brand-pink) 100%);
  color: #fff;
  padding: clamp(1.75rem, 1rem + 4vw, 4.5rem);
  position: relative; overflow: hidden;
  min-height: 100svh;
}
.auth-brand::after {
  content: ""; position: absolute; right: -120px; bottom: -120px;
  width: 360px; height: 360px; border-radius: 50%;
  background: rgba(255,255,255,0.08);
}
.auth-brand-inner { position: relative; z-index: 1; max-width: 30rem; }
/* mobile CTAs (shown only while the brand panel is the landing) */
.auth-brand-cta { display: flex; flex-direction: column; gap: 0.65rem; max-width: 30rem; margin: 0 0 1.75rem; }
/* Works as a <button> OR an <a> — the primary CTA is a real link to /create-account. Without the
   flex centering and text-decoration reset an anchor renders as underlined text pinned to the
   top-left of the pill (only visible under 990px, since .auth-brand-cta is hidden above that). */
.auth-brand-btn { display: inline-flex; align-items: center; justify-content: center; text-align: center; text-decoration: none; width: 100%; min-height: 52px; border-radius: 12px; border: none; font: inherit; font-weight: 800; font-size: var(--fs-1); cursor: pointer; }
.auth-brand-btn--primary { background: #fff; color: var(--nod-blue-dark); }
.auth-brand-btn--ghost { background: rgba(255, 255, 255, 0.14); color: #fff; border: 1.5px solid rgba(255, 255, 255, 0.65); }
.auth-back { display: inline-flex; align-items: center; gap: 6px; margin: 0 0 0.9rem; padding: 0; background: none; border: none; font: inherit; font-size: var(--fs-0); font-weight: 700; color: var(--nod-blue-dark); cursor: pointer; }
@media (min-width: 900px) { .auth-brand-cta, .auth-back { display: none; } }
.auth-brand-tag { margin: 6px 0 0; font-weight: 600; opacity: 0.85; letter-spacing: 0.08em; text-transform: uppercase; font-size: var(--fs-0); }
.auth-brand-h { font-size: var(--fs-3); line-height: 1.1; margin: clamp(1.5rem, 1rem + 2vw, 2.5rem) 0 0.75rem; }
.auth-brand-sub { font-size: var(--fs-1); opacity: 0.92; margin: 0 0 1.75rem; }
.auth-brand-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 0.7rem; }
.auth-brand-list li { display: flex; align-items: center; gap: 10px; opacity: 0.95; }
.auth-brand-list li svg { flex: 0 0 auto; }
/* reseller value props (signed-out marketing panel) */
.auth-brand-feats { list-style: none; margin: 0 0 1.5rem; padding: 0; display: flex; flex-direction: column; gap: 1rem; }
.auth-brand-feats li { display: flex; align-items: flex-start; gap: 12px; }
.auth-brand-feat-ic { width: 40px; height: 40px; border-radius: 11px; background: rgba(255, 255, 255, 0.16); display: grid; place-items: center; flex: 0 0 auto; }
.auth-brand-feats strong { display: block; font-size: var(--fs-1); font-weight: 800; }
.auth-brand-feats div span { display: block; margin-top: 2px; font-size: var(--fs-0); opacity: 0.85; line-height: 1.45; }
/* desktop: three benefit tags side by side in one row; stack on narrow widths */
.auth-brand-list--compact { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.55rem 0.85rem; }
.auth-brand-list--compact li { align-items: flex-start; font-size: 0.8rem; gap: 7px; line-height: 1.3; }
.auth-brand-list--compact li svg { margin-top: 2px; }
@media (max-width: 700px) { .auth-brand-list--compact { grid-template-columns: 1fr; } }

/* auth form pane */
.auth-pane {
  display: flex; align-items: center; justify-content: center;
  padding: var(--sp);
  min-height: 100svh;
}
/* mobile: land on the brand panel; a CTA reveals the matching auth form */
@media (max-width: 899.98px) {
  .auth-pane { display: none; }
  body.nod-show-form .auth-brand { display: none; }
  body.nod-show-form .auth-pane { display: flex; }
}
.auth-card {
  width: 100%; max-width: 30rem;
  background: var(--nod-card);
  border: 1px solid var(--nod-line);
  border-radius: 18px;
  padding: clamp(1.5rem, 1rem + 2.5vw, 2.5rem);
  box-shadow: 0 20px 50px rgba(15, 23, 42, 0.08);
}
.auth-card-logo { margin-bottom: clamp(1.25rem, 1rem + 1vw, 1.75rem); }

.auth-tabs {
  display: flex; gap: 4px; padding: 4px;
  background: var(--nod-bg); border-radius: 12px; margin-bottom: 1.25rem;
}
/* Usually a <button>; the front door's second tab is an <a> to /create-account, so this has
   to hold up as a link too — hence the centring and text-decoration:none. */
.auth-tab {
  flex: 1 1 0; padding: 10px; min-height: 44px;
  display: inline-flex; align-items: center; justify-content: center;
  border: none; background: transparent; border-radius: 9px;
  font: inherit; font-weight: 700; color: var(--nod-ink-soft); cursor: pointer;
  text-align: center; text-decoration: none;
  transition: background 0.15s ease, color 0.15s ease;
}
.auth-tab.is-on { background: var(--nod-card); color: var(--nod-ink); box-shadow: 0 1px 3px rgba(15,23,42,0.1); }

.auth-error {
  margin: 0 0 1rem; padding: 10px 14px;
  background: #fef2f2; border: 1px solid #fecaca; color: #b91c1c;
  border-radius: 10px; font-size: var(--fs-0); font-weight: 600;
}

.auth-form { display: flex; flex-direction: column; }
.auth-h { margin: 0 0 4px; font-size: var(--fs-2); }
.auth-p { margin: 0 0 1.25rem; color: var(--nod-ink-soft); font-size: var(--fs-0); }
.auth-field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 1rem; }
.auth-field span { font-size: var(--fs-0); font-weight: 700; color: var(--nod-ink-soft); }
.auth-field input {
  width: 100%; min-height: 48px; padding: 12px 14px;
  border: 1px solid var(--nod-line); border-radius: 10px;
  font: inherit; font-size: var(--fs-1); color: var(--nod-ink); background: #fff;
}
.auth-field input:focus { outline: none; border-color: var(--nod-blue); box-shadow: 0 0 0 3px var(--nod-blue-soft); }

.auth-btn {
  width: 100%; min-height: 50px; margin-top: 0.5rem;
  border: none; border-radius: 11px;
  background: var(--nod-cta); color: #fff;
  font: inherit; font-weight: 800; font-size: var(--fs-1); cursor: pointer;
  transition: background 0.15s ease;
}
.auth-btn:hover { background: var(--nod-cta-hover); }
.auth-btn:disabled { opacity: 0.6; cursor: default; }
.auth-btn:focus-visible { outline: 2px solid var(--nod-blue); outline-offset: 2px; }

.auth-foot { margin: 1.5rem 0 0; text-align: center; font-size: var(--fs-0); color: #94a3b8; }

/* ===== Create-account form (wide, two-column) ===== */
/* widen the card only while the signup form is showing */
.auth-card:has(form[data-form="signup"]:not([hidden])) { max-width: 40rem; }
.auth-section { margin: 0 0 0.75rem; font-size: 0.7rem; font-weight: 800; letter-spacing: 0.04em; text-transform: uppercase; color: var(--nod-ink-soft); }
.auth-grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 0 1rem; }
@media (max-width: 560px) { .auth-grid2 { grid-template-columns: 1fr; } }
.auth-field span i { font-style: normal; font-weight: 600; color: var(--nod-ink-soft); }
.auth-hint { margin: -2px 0 2px; font-size: 0.82em; font-weight: 400; color: var(--nod-ink-soft); }
/* forgot-password link + reset notice (sign-in) */
.auth-forgot { align-self: flex-end; margin: -2px 0 1rem; padding: 0; border: none; background: none; font: inherit; font-size: var(--fs-0); font-weight: 700; color: var(--nod-blue-dark); cursor: pointer; }
.auth-forgot:hover { text-decoration: underline; }
.auth-note { margin: 0 0 1rem; padding: 0.7rem 0.9rem; border-radius: 10px; background: #ecfdf3; border: 1px solid #bbf7d0; color: #15803d; font-size: var(--fs-0); line-height: 1.45; }
/* return-address card */
.auth-addrcard { margin: 0.25rem 0 1.25rem; padding: 1.1rem; border-radius: 16px; background: var(--nod-blue-soft); border: 1px solid var(--brand-tint); }
.auth-addrcard-title { display: block; color: var(--nod-ink); font-size: var(--fs-1); font-weight: 800; }
.auth-addrcard-desc { margin: 4px 0 0.95rem; font-size: var(--fs-0); font-weight: 400; color: var(--nod-ink-soft); line-height: 1.45; }

/* =============================================================
   APP (dashboard)
   ============================================================= */
.app-body { background: var(--nod-bg); min-height: 100svh; }

.app-topbar {
  display: flex; align-items: center; gap: var(--sp);
  padding: 0.75rem var(--sp);
  background: #fff; border-bottom: 1px solid var(--nod-line);
  position: sticky; top: 0; z-index: 20;
}
.app-burger { display: none; border: none; background: none; cursor: pointer; color: var(--nod-ink); padding: 4px; }
.app-top-right { margin-left: auto; display: flex; align-items: center; gap: clamp(0.5rem, 1vw, 1rem); }
.app-user { font-size: var(--fs-0); font-weight: 600; color: var(--nod-ink-soft); }
@media (max-width: 520px) { .app-user { display: none; } }
.app-avatar {
  width: 38px; height: 38px; border-radius: 50%;
  background: var(--nod-cta); color: #fff;
  display: grid; place-items: center; font-weight: 800; flex: 0 0 auto;
}
.app-logout {
  text-decoration: none; font-size: var(--fs-0); font-weight: 700;
  color: var(--nod-ink-soft); padding: 8px 12px; border: 1px solid var(--nod-line); border-radius: 9px;
}
.app-logout:hover { border-color: var(--nod-blue); color: var(--nod-blue); }
/* persistent "Start a new order" button in the header (data-new-order → order-builder panel) */
.app-newbtn {
  display: inline-flex; align-items: center; gap: 0.4rem;
  text-decoration: none; font-size: var(--fs-0); font-weight: 700; line-height: 1;
  color: #fff; background: var(--grad-brand); border: none; border-radius: 9px;
  padding: 9px 14px; cursor: pointer; white-space: nowrap;
}
.app-newbtn:hover { background: var(--grad-heat); }
.app-newbtn svg { flex: 0 0 auto; }
.app-newbtn .nb-short { display: none; }
@media (pointer: coarse) { .app-newbtn { min-height: 44px; } }
/* the header gets crowded on small screens: shorten the label, then go icon-only */
@media (max-width: 640px) { .app-newbtn .nb-full { display: none; } .app-newbtn .nb-short { display: inline; } }
@media (max-width: 460px) { .app-newbtn .nb-short { display: none; } .app-newbtn { padding: 9px 11px; } }


/* Topbar controls sit on the right edge of the PAGE'S CONTENT COLUMN, not the window edge.
   On a wide screen the content is a centred column, so a right-pinned cart floated far off on
   its own with a lake of white between (Justin 2026-08-12). Each page declares the column it
   uses and the rule works the offset out:

     inset = colpad + max(0, (mainInnerWidth - colmax) / 2)

   where mainInnerWidth is the window minus the 300px sidebar and the column's own gutters.
   --nod-coloff covers a column that carries its own inner padding (the power builder does),
   so the glyph lands on the CONTENT edge rather than the column's border edge. Unset,
   --nod-colmax falls back to 100vw so max() yields 0 and nothing moves. Below 860 the sidebar
   is gone and the column already spans the page, so the rule stays out of it. */
@media (min-width: 860px) {
  .app-topbar {
    padding-right: calc(
      var(--nod-coloff, 0px)
      + var(--nod-colpad, var(--sp))
      + max(0px, ((100vw - 300px - 2 * var(--nod-colpad, var(--sp))) - var(--nod-colmax, 100vw)) / 2)
    );
  }
}

.app-shell { display: grid; grid-template-columns: 1fr; }
@media (min-width: 860px) {
  .app-shell { grid-template-columns: 300px minmax(0, 1fr); }
  /* keep the left menu in view while the page scrolls (header is already sticky) */
  .app-sidebar { position: sticky; top: 63px; align-self: start; max-height: calc(100svh - 63px); overflow-y: auto; }
}

.app-sidebar {
  display: flex; flex-direction: column; gap: 2px;
  padding: var(--sp);
  background: #fff; border-right: 1px solid var(--nod-line);
}
/* drawer on small screens */
@media (max-width: 859.98px) {
  .app-burger { display: inline-flex; align-items: center; }
  .app-sidebar {
    position: fixed; top: 0; left: 0; bottom: 0; width: min(82vw, 280px); z-index: 40;
    transform: translateX(-100%); transition: transform 0.2s ease;
    box-shadow: 0 0 60px rgba(15,23,42,0.25); padding-top: 1.25rem;
  }
  .app-sidebar.is-open { transform: translateX(0); }
}
.app-nav {
  display: flex; align-items: center; gap: 11px;
  text-decoration: none; padding: 11px 14px; border-radius: 10px;
  color: var(--nod-ink-soft); font-weight: 700; font-size: var(--fs-0);
}
.app-nav svg { flex: 0 0 auto; }
.app-nav-badge { margin-left: auto; min-width: 20px; height: 20px; border-radius: 999px; background: #f79009; color: #fff; font-size: 11px; font-weight: 800; display: inline-grid; place-items: center; padding: 0 6px; line-height: 1; }
.app-nav:hover { background: var(--nod-bg); color: var(--nod-ink); }
.app-nav.is-on { background: var(--nod-blue-soft); color: var(--nod-blue-dark); }

/* ---- multi-store switcher (top of sidebar) ---- */
.nod-ss { position: relative; margin: 0 0 6px; padding: 0 0 8px; border-bottom: 1px solid var(--nod-line); }
.nod-ss-btn { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 1px solid var(--nod-line); border-radius: 12px; background: var(--nod-card); cursor: pointer; text-align: left; font: inherit; }
.nod-ss-btn:hover { border-color: #cdd7e5; background: var(--nod-bg); }
.nod-ss-btn:focus-visible { outline: 2px solid var(--nod-blue); outline-offset: 2px; }
.nod-ss-ava { flex: 0 0 auto; width: 34px; height: 34px; border-radius: 9px; background: var(--nod-blue-soft); color: var(--nod-blue-dark); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 0.95rem; overflow: hidden; }
.nod-ss-ava.has-img, .nod-ss-optava.has-img { background: #fff; }
.nod-ss-ava img, .nod-ss-optava img { width: 100%; height: 100%; object-fit: contain; }
.nod-ss-meta { display: flex; flex-direction: column; min-width: 0; line-height: 1.2; }
.nod-ss-k { font-size: 0.62rem; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; color: var(--nod-ink-soft); }
.nod-ss-name { font-size: var(--fs-0); font-weight: 800; color: var(--nod-ink); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nod-ss-chev { flex: 0 0 auto; margin-left: auto; color: var(--nod-ink-soft); }
.nod-ss-menu { margin: 6px 0 2px; padding: 6px; background: var(--nod-card); border: 1px solid var(--nod-line); border-radius: 12px; box-shadow: 0 12px 30px rgba(15,23,42,0.12); display: flex; flex-direction: column; gap: 1px; }
.nod-ss-menu[hidden] { display: none; }
.nod-ss-head { padding: 4px 8px 6px; font-size: 0.62rem; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; color: var(--nod-ink-soft); }
.nod-ss-opt { display: flex; align-items: center; gap: 9px; width: 100%; padding: 7px 8px; border: none; background: none; border-radius: 9px; cursor: pointer; text-align: left; font: inherit; color: var(--nod-ink); }
.nod-ss-opt:hover { background: var(--nod-bg); }
.nod-ss-opt.is-on { background: var(--nod-blue-soft); }
.nod-ss-optava { flex: 0 0 auto; width: 26px; height: 26px; border-radius: 7px; background: var(--nod-blue-soft); color: var(--nod-blue-dark); display: flex; align-items: center; justify-content: center; font-weight: 800; font-size: 0.78rem; overflow: hidden; }
.nod-ss-optname { flex: 1 1 auto; min-width: 0; font-size: var(--fs-0); font-weight: 700; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.nod-ss-optname i { font-style: normal; font-weight: 700; font-size: 0.68rem; text-transform: uppercase; letter-spacing: 0.03em; color: var(--nod-ink-soft); margin-left: 4px; }
.nod-ss-check { flex: 0 0 auto; color: var(--nod-blue); }
.nod-ss-sep { height: 1px; background: var(--nod-line); margin: 5px 2px; }
.nod-ss-new { display: flex; align-items: center; gap: 9px; width: 100%; padding: 8px; border: none; background: none; border-radius: 9px; cursor: pointer; font: inherit; font-size: var(--fs-0); font-weight: 800; color: var(--nod-blue-dark); }
.nod-ss-new:hover { background: var(--nod-blue-soft); }
.nod-ss-new svg { flex: 0 0 auto; }
/* no stores yet: the switcher becomes the invitation to make one */
.nod-ss-add { display: flex; align-items: center; gap: 10px; width: 100%; padding: 9px 10px; border: 1px dashed var(--nod-blue); border-radius: 12px; background: var(--nod-blue-soft); color: var(--nod-blue-dark); text-decoration: none; font-weight: 800; font-size: var(--fs-0); line-height: 1.25; }
.nod-ss-add:hover { background: rgba(1,119,196,0.16); border-style: solid; }
.nod-ss-add:focus-visible { outline: 2px solid var(--nod-blue); outline-offset: 2px; }
.nod-ss-addic { flex: 0 0 auto; width: 30px; height: 30px; border-radius: 9px; display: flex; align-items: center; justify-content: center; background: var(--nod-cta); color: #fff; }
.nod-ss-addtx { min-width: 0; }

/* ---- new-store onboarding page ---- */
.ns-wrap { min-height: 100svh; display: flex; align-items: flex-start; justify-content: center; padding: clamp(1.25rem, 0.8rem + 3vw, 3rem) 1.25rem; }
.ns-card { width: 100%; max-width: 40rem; }
.ns-back { display: inline-flex; align-items: center; gap: 6px; margin: 0 0 1rem; padding: 0; background: none; border: none; font: inherit; font-size: var(--fs-0); font-weight: 700; color: var(--nod-blue-dark); text-decoration: none; cursor: pointer; }
.ns-back:hover { text-decoration: underline; }
.ns-profhead { display: flex; align-items: baseline; gap: 8px; }
.ns-profhead i { font-style: normal; font-weight: 600; text-transform: none; letter-spacing: 0; font-size: 0.82em; color: var(--nod-ink-soft); }
.ns-profile { border: 1px solid var(--nod-line); border-radius: 12px; overflow: hidden; }
.ns-prow { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 10px 14px; font-size: var(--fs-0); }
.ns-prow + .ns-prow { border-top: 1px solid var(--nod-line); }
.ns-prow span { color: var(--nod-ink-soft); font-weight: 600; }
.ns-prow b { color: var(--nod-ink); font-weight: 700; text-align: right; word-break: break-word; }

.app-main { padding: clamp(1.25rem, 0.8rem + 2vw, 2.5rem); min-width: 0; }
.app-welcome { margin-bottom: var(--sp); }
.app-welcome-head { display: flex; align-items: center; flex-wrap: wrap; gap: clamp(0.6rem, 2vw, 1.1rem); }
.app-h1 { margin: 0 0 4px; font-size: var(--fs-2); }
.app-sub { margin: 0; color: var(--nod-ink-soft); font-size: var(--fs-0); }
/* "View your store" — link by the greeting to the current store's branded guest storefront */
.app-viewstore {
  display: inline-flex; align-items: center; gap: 0.4rem; margin-bottom: 4px;
  text-decoration: none; font-size: var(--fs-0); font-weight: 700; white-space: nowrap;
  color: var(--nod-blue); background: #fff; border: 1px solid var(--nod-line); border-radius: 9px;
  padding: 7px 13px;
}
.app-viewstore:hover { border-color: var(--nod-blue); background: var(--brand-tint); }
.app-viewstore svg { flex: 0 0 auto; }
@media (pointer: coarse) { .app-viewstore { min-height: 44px; } }

.app-cards {
  display: grid; gap: var(--sp);
  grid-template-columns: repeat(auto-fit, minmax(min(12rem, 100%), 1fr));
  margin-bottom: var(--sp);
}
.app-card {
  background: var(--nod-card); border: 1px solid var(--nod-line); border-radius: var(--nod-radius);
  padding: clamp(1rem, 0.8rem + 1vw, 1.5rem);
  display: flex; flex-direction: column; gap: 4px;
}
.app-card-k { font-size: var(--fs-0); font-weight: 700; color: var(--nod-ink-soft); }
.app-card-v { font-size: clamp(1.6rem, 1.3rem + 1.5vw, 2.2rem); font-weight: 900; line-height: 1.1; }
.app-card-v--sm { font-size: var(--fs-1); font-weight: 800; overflow-wrap: anywhere; }
.app-card-note { font-size: var(--fs-0); color: #94a3b8; }
.app-card--accent { background: var(--grad-brand); color: #fff; border-color: transparent; }
.app-card--accent .app-card-k, .app-card--accent .app-card-note { color: rgba(255,255,255,0.85); }

.app-panel {
  background: var(--nod-card); border: 1px solid var(--nod-line); border-radius: var(--nod-radius);
  padding: clamp(1.25rem, 1rem + 1.5vw, 2rem); margin-bottom: var(--sp);
}
.app-panel-h { margin: 0 0 0.5rem; font-size: var(--fs-1); font-weight: 800; }
.app-panel-p { margin: 0 0 1.25rem; color: var(--nod-ink-soft); font-size: var(--fs-0); max-width: 46ch; }
.app-cta {
  display: inline-flex; align-items: center; gap: 8px;
  border: none; border-radius: 11px; background: var(--nod-cta); color: #fff;
  font: inherit; font-weight: 800; padding: 13px 22px; min-height: 48px; cursor: pointer;
}
.app-cta:hover { background: var(--grad-heat); }
.app-panel-soon { margin: 0.75rem 0 0; color: var(--nod-blue-dark); font-weight: 700; font-size: var(--fs-0); }

.app-empty { text-align: center; padding: clamp(1.5rem, 1rem + 3vw, 3rem) 1rem; color: var(--nod-ink-soft); }
.app-empty-t { margin: 0 0 4px; font-weight: 800; }
.app-empty-s { margin: 0; font-size: var(--fs-0); color: #94a3b8; }

/* scrim behind the mobile drawer */
.app-scrim { position: fixed; inset: 0; background: rgba(15,23,42,0.4); z-index: 35; border: none; }

@media (prefers-reduced-motion: reduce) {
  .auth-tab, .auth-btn, .app-sidebar { transition: none; }
}

/* ===== shared confirm dialog (delete / delete all / clear cart) ===== */
.nod-confirm-scrim { position: fixed; inset: 0; z-index: 200; display: grid; place-items: center; padding: 1.2rem; background: rgba(15, 23, 42, 0.5); backdrop-filter: blur(2px); }
.nod-confirm { width: min(380px, 100%); background: var(--nod-card, #fff); border-radius: 16px; padding: 1.4rem 1.4rem 1.2rem; box-shadow: 0 24px 60px rgba(15, 23, 42, 0.3); }
.nod-confirm-h { margin: 0 0 0.4rem; font-size: 1.15rem; font-weight: 800; color: var(--nod-ink, #0f172a); }
.nod-confirm-body { margin: 0 0 1.1rem; font-size: 0.92rem; line-height: 1.5; color: var(--nod-ink-soft, #64748b); }
.nod-confirm-btns { display: flex; gap: 0.6rem; justify-content: flex-end; }
.nod-confirm-btns button { border-radius: 11px; padding: 9px 16px; font: inherit; font-weight: 700; font-size: 0.9rem; cursor: pointer; border: 1px solid var(--nod-line, #e2e8f0); }
.nod-confirm-cancel { background: var(--nod-card, #fff); color: var(--nod-ink, #0f172a); }
.nod-confirm-cancel:hover { background: var(--nod-bg, #f1f5f9); }
/* border-color cannot hold a gradient: leave it set and you get a flat --brand-red ring around a
   ramp that starts orange, so it goes transparent. */
.nod-confirm-ok { background: var(--grad-brand); border-color: transparent; color: #fff; }
.nod-confirm-ok.is-danger { background: var(--nod-danger, #dc2626); border-color: var(--nod-danger, #dc2626); }
.nod-confirm-ok:hover { filter: brightness(0.94); }

/* ===== Edit with AI modal (Ideogram edit-lite via server proxy) ===== */
.nod-ai-scrim { position: fixed; inset: 0; z-index: 210; display: grid; place-items: center; padding: 1rem; background: rgba(15, 23, 42, 0.55); backdrop-filter: blur(2px); overflow-y: auto; }
.nod-ai-modal { width: min(560px, 100%); background: var(--nod-card, #fff); border-radius: 20px; box-shadow: 0 30px 70px rgba(15, 23, 42, 0.35); overflow: hidden; }
.nod-ai-head { display: flex; align-items: center; justify-content: space-between; padding: 1.1rem 1.3rem 0.5rem; }
.nod-ai-head h2 { margin: 0; font-size: 1.15rem; font-weight: 800; color: var(--nod-ink, #0f172a); }
.nod-ai-x { border: none; background: none; cursor: pointer; color: var(--nod-ink, #0f172a); width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; }
.nod-ai-x:hover { background: var(--nod-bg, #f1f5f9); }
.nod-ai-x svg { width: 20px; height: 20px; }
.nod-ai-body { padding: 0.5rem 1.3rem 1.4rem; display: flex; flex-direction: column; gap: 0.9rem; }
.nod-ai-stage { position: relative; border-radius: 16px; overflow: hidden; aspect-ratio: 1 / 1; display: grid; place-items: center; padding: 10px; }
.nod-ai-stage img { max-width: 100%; max-height: 100%; object-fit: contain; display: block; }
.nod-ai-stage.is-loading { background: var(--nod-bg, #f1f5f9); gap: 0.7rem; color: var(--nod-ink-soft, #64748b); font-weight: 700; grid-auto-flow: row; }
.nod-ai-stage.is-loading .nod-ob-spin { width: 30px; height: 30px; border-width: 3px; }
.nod-ai-help { margin: 0; text-align: center; font-size: 0.95rem; line-height: 1.45; color: var(--nod-ink-soft, #64748b); }
.nod-ai-promptbox { position: relative; }
.nod-ai-input { width: 100%; min-height: 110px; resize: vertical; padding: 14px 56px 14px 16px; border: 2px solid var(--nod-blue, #FF394C); border-radius: 16px; font: inherit; font-size: 1rem; color: var(--nod-ink, #0f172a); line-height: 1.5; }
.nod-ai-input:focus { outline: none; box-shadow: 0 0 0 3px var(--nod-blue-soft, #FFF3EC); }
.nod-ai-send { position: absolute; right: 12px; bottom: 12px; width: 44px; height: 44px; border: none; border-radius: 50%; cursor: pointer; display: grid; place-items: center; color: #fff; background: var(--grad-brand); box-shadow: 0 4px 12px rgba(255, 57, 76, 0.35); }
.nod-ai-send:hover { filter: brightness(1.05); }
.nod-ai-send svg { width: 20px; height: 20px; }
.nod-ai-toggle { display: flex; gap: 4px; align-self: center; background: var(--nod-bg, #f1f5f9); border-radius: 999px; padding: 4px; }
.nod-ai-tg { border: none; background: none; border-radius: 999px; padding: 9px 22px; font: inherit; font-weight: 800; font-size: 0.92rem; color: var(--nod-ink-soft, #64748b); cursor: pointer; }
.nod-ai-tg[data-ai-show="ai"].is-on { background: var(--brand-red); color: #fff; }
.nod-ai-tg[data-ai-show="original"].is-on { background: var(--nod-blue, #FF394C); color: #fff; }
.nod-ai-apply, .nod-ai-useorig { width: 100%; }
.nod-ai-redo { margin: 0.1rem 0 0; text-align: center; font-size: 0.9rem; color: var(--nod-ink-soft, #64748b); }
.nod-ai-startover { border: none; background: none; padding: 0; font: inherit; font-weight: 800; font-size: 0.95rem; color: var(--nod-blue, #FF394C); cursor: pointer; }
.nod-ai-startover:hover { text-decoration: underline; }

/* Catalog category sections (each spans the old grid and holds its own card grid) */
.nod-cat-section { grid-column: 1 / -1; margin-bottom: clamp(1rem, 2.5vw, 1.8rem); }
.nod-cat-secth { margin: 0 0 0.8rem; font-size: calc(var(--fs-2) * 0.9); font-weight: 800; color: var(--nod-ink); }
.nod-cat-cards { display: grid; gap: 1rem; grid-template-columns: repeat(auto-fill, minmax(min(17rem, 100%), 1fr)); }

/* "Start a new order" store picker (multi-store) */
.nod-orderpick { position: fixed; z-index: 70; min-width: 250px; background: #fff; border: 1px solid var(--nod-line); border-radius: 13px; box-shadow: 0 14px 44px rgba(15, 23, 42, 0.16); padding: 7px; }
.nod-orderpick-h { font-size: 11px; font-weight: 800; text-transform: uppercase; letter-spacing: 0.04em; color: var(--nod-ink-soft); padding: 6px 9px 5px; }
.nod-orderpick-opt { display: flex; align-items: center; gap: 9px; width: 100%; border: none; background: none; padding: 8px 9px; border-radius: 9px; cursor: pointer; font-size: var(--fs-0); font-weight: 700; color: var(--nod-ink); text-align: left; min-height: 44px; }
.nod-orderpick-opt:hover { background: var(--brand-tint); }
.nod-orderpick-ava { width: 26px; height: 26px; border-radius: 50%; background: var(--nod-cta); color: #fff; display: grid; place-items: center; font-size: 12px; font-weight: 800; flex: 0 0 auto; overflow: hidden; }
.nod-orderpick-ava.has-img { background: #fff; border: 1px solid var(--nod-line); }
.nod-orderpick-ava img { width: 100%; height: 100%; object-fit: contain; }
.nod-orderpick-name { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ===================== portal shell v2: DARK SIDEBAR ===================== */
.app-sidebar { background: #14161c; border-right: 1px solid #23262e; }
@media (min-width: 860px) { .app-sidebar { min-height: calc(100svh - 63px); } }
.app-sidebar .app-nav { color: #98a2b3; }
.app-sidebar .app-nav:hover { background: rgba(255,255,255,0.07); color: #fff; }
.app-sidebar .app-nav.is-on { background: var(--nod-cta); color: #fff; }
.app-nav--logout { margin-top: auto; }

/* ---- collapsible sidebar groups (Support, and Place an Order's sub-links) ----
   One shared mechanism: a parent .app-nav that owns a chevron plus an .app-subnav
   sibling. Collapsed is the default; .is-open reveals it. The subnav is a real
   list of .app-nav rows so hover/active styling comes for free, just indented and
   a size down so the hierarchy reads at a glance. */
/* Support is a <button> (it has no page of its own) while every sibling is an <a>,
   so it needs the UA button chrome stripped or it renders as a light pill with a
   border in the dark sidebar. */
.app-nav--group { cursor: pointer; }
button.app-nav { background: none; border: 0; width: 100%; text-align: left; color: inherit;
  /* font-FAMILY only. `font: inherit` (and `font-size: inherit`) would also override the
     font-weight:700 / font-size:var(--fs-0) that .app-nav sets, because element+class
     outranks class — which is what made Support render lighter and smaller than every
     sibling row. .app-nav's own size/weight already beat the UA button defaults. */
  font-family: inherit; }
button.app-nav::-moz-focus-inner { border: 0; }
.app-nav-caret { margin-left: auto; flex: 0 0 auto; opacity: .6; transition: transform .16s ease; }
.app-nav--group.is-open .app-nav-caret { transform: rotate(180deg); }
.app-subnav { display: none; flex-direction: column; gap: 2px; margin: 2px 0 4px; }
.app-subnav.is-open { display: flex; }
.app-subnav .app-nav { padding-left: 2.35rem; font-size: 0.86rem; min-height: 34px; }
.app-sidebar .app-subnav .app-nav { color: #8b95a5; }
.app-sidebar .app-subnav .app-nav:hover { color: #fff; }
.app-sidebar .app-subnav .app-nav.is-on { background: rgba(255, 138, 43, 0.20); color: #ffe6d2; }
@media (prefers-reduced-motion: reduce) { .app-nav-caret { transition: none; } }
.app-sidebar .nod-ss { border-bottom: 1px solid #23262e; }
.app-sidebar .nod-ss-btn { background: #1b1e26; border-color: #2b2f39; }
.app-sidebar .nod-ss-btn:hover { background: #21252f; border-color: #3a4150; }
.app-sidebar .nod-ss-k { color: #7d8697; }
.app-sidebar .nod-ss-name { color: #fff; }
.app-sidebar .nod-ss-chev { color: #7d8697; }
.app-sidebar .nod-ss-ava { background: #2a2f3a; color: #cbd5e1; }
.app-sidebar .nod-ss-ava.has-img { background: #fff; }

/* ===================== dashboard v2 ===================== */
.dash-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; flex-wrap: wrap; }
.dash-eyebrow { font-size: 12.5px; font-weight: 800; letter-spacing: 0.07em; text-transform: uppercase; color: var(--nod-blue); margin-bottom: 10px; }
.dash-eyebrow .dash-eyesep { color: #94a3b8; margin: 0 2px; }
.dash-h1 { margin: 0 0 8px; font-size: clamp(1.9rem, 1.2rem + 2.8vw, 3rem); line-height: 0.98; letter-spacing: -0.02em; font-weight: 900; text-transform: uppercase; }
.dash-sub { color: var(--nod-ink-soft); margin: 0; font-size: 15px; }
.dash-sub a { color: var(--nod-blue); font-weight: 700; text-decoration: none; white-space: nowrap; display: inline-flex; align-items: center; gap: 5px; vertical-align: bottom; }
.dash-sub a:hover { text-decoration: underline; }
.dash-newbtn { font-size: 15px; padding: 13px 20px; border-radius: 11px; box-shadow: 0 12px 26px -10px rgba(255,57,76,0.55); margin-top: 26px; }
@media (max-width: 700px) { .dash-newbtn { margin-top: 0; } }
.dash-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(min(200px, 100%), 1fr)); gap: 16px; margin: 22px 0; }
.dash-card { position: relative; background: #fff; border: 1px solid var(--nod-line); border-top: 3px solid transparent; border-radius: 14px; padding: 17px 18px 15px; overflow: hidden; }
.dash-card--blue { border-top-color: var(--brand-red); }
.dash-card--green { border-top-color: #12b76a; }
.dash-card--orange { border-top-color: #f79009; }
.dash-k { display: block; font-size: 11px; font-weight: 800; letter-spacing: 0.06em; text-transform: uppercase; color: var(--nod-ink-soft); }
.dash-v { display: block; font-size: clamp(1.7rem, 1.4rem + 1.2vw, 2.3rem); font-weight: 900; letter-spacing: -0.02em; margin: 8px 0 3px; font-variant-numeric: tabular-nums; }
.dash-note { font-size: 13px; color: #94a3b8; }
/* --ink-inverse-bg is the palette's dark band, which is what this card is; a warm ramp here
   would fight the orange stat card two along. */
.dash-card--navy { background: linear-gradient(135deg, #1B1B1D, #101011); border-color: transparent; }
.dash-card--navy .dash-k, .dash-card--navy .dash-note { color: rgba(255,255,255,0.66); }
.dash-card--navy .dash-v { color: #fff; }
.dash-card--navy .dash-note a { color: #fff; font-weight: 700; }
.dash-spark { position: absolute; right: 16px; bottom: 16px; width: 104px; height: 32px; pointer-events: none; }
.dash-card--orange .dash-note { display: block; max-width: calc(100% - 112px); }
.dash-grid { display: grid; gap: 16px; grid-template-columns: minmax(0, 1fr); align-items: start; margin-top: 2px; }
@media (min-width: 1020px) { .dash-grid { grid-template-columns: minmax(0, 1.85fr) minmax(280px, 1fr); } }
.dash-recent-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 10px; }
.dash-recent-head .app-sub { margin: 2px 0 10px; }
.dash-all { color: var(--nod-blue); font-weight: 700; font-size: 14px; text-decoration: none; white-space: nowrap; display: inline-flex; align-items: center; gap: 5px; margin-top: 4px; }
.dash-all:hover { text-decoration: underline; }
.dash-orders { list-style: none; margin: 0; padding: 0; }
.dash-row { display: grid; grid-template-columns: 42px minmax(0, 1.35fr) minmax(0, 1.15fr) 100px 36px; gap: 12px; align-items: center; padding: 14px 2px; border-top: 1px solid #eef2f7; text-decoration: none; color: inherit; cursor: pointer; }
.dash-oprice { text-align: right; }
.dash-trackcol .dash-pill { margin-top: 5px; align-self: flex-start; }
.dash-row .app-order-menu { justify-self: end; }
/* the Orders page li carries the legacy .app-order card class (order-builder.css loads AFTER
   nod.css) — the .app-order.dash-row pair outranks it so the flat grid row wins everywhere */
.app-order.dash-row { display: grid; padding: 14px 2px; border: 0; border-top: 1px solid #eef2f7; border-radius: 0; background: transparent; }
.app-order.dash-row:hover { border-color: transparent; border-top-color: #eef2f7; box-shadow: none; background: var(--brand-tint); }
ul.app-orders { gap: 0; }
.dash-orders > .dash-row:first-child, .app-orders > .dash-row:first-child, .app-orders > .app-order.dash-row:first-child { border-top: none; }
.dash-orders li:first-child .dash-row { border-top: none; }
.dash-row:hover { background: var(--brand-tint); }
.dash-oic { flex: none; width: 42px; height: 42px; border-radius: 11px; background: var(--brand-tint); color: var(--brand-red); display: grid; place-items: center; }
.dash-ocol { min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.dash-oid { font-weight: 800; font-size: 14.5px; letter-spacing: -0.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-omut { font-size: 12.5px; color: #94a3b8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-track { color: var(--nod-blue); font-weight: 650; font-size: 13px; font-family: ui-monospace, Menlo, monospace; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.dash-pill { display: inline-flex; align-items: center; font-size: 10.5px; font-weight: 800; letter-spacing: 0.04em; padding: 4px 10px; border-radius: 999px; white-space: nowrap; }
.dash-pill--green { color: #067647; background: #ecfdf3; }
.dash-pill--blue { color: var(--brand-link); background: var(--brand-tint); }
.dash-pill--amber { color: #b54708; background: #fffaeb; }
.dash-oprice { font-weight: 800; font-variant-numeric: tabular-nums; white-space: nowrap; }
.dash-chev { color: #cbd5e1; flex: none; }
@media (max-width: 760px) {
  .dash-row, .app-order.dash-row { grid-template-columns: 42px minmax(0, 1fr) auto 32px; }
  .dash-row .dash-trackcol { grid-row: 2; grid-column: 2 / -1; margin-top: 2px; }
  .dash-row .dash-oprice { grid-row: 1; grid-column: 3; }
  .dash-row .app-order-menu, .dash-row .dash-chev { grid-row: 1; grid-column: 4; }
}
/* Orders page variant: extra "Your margin" column + header row (the dashboard's
   Recent orders keeps the base .dash-row grid) */
.dash-row--wm, .app-order.dash-row--wm { grid-template-columns: 42px minmax(0, 1.35fr) minmax(0, 1.15fr) 100px 110px 36px; }
.dash-omargin { color: #0b8a4e; }
.dash-orowhead { display: grid; grid-template-columns: 42px minmax(0, 1.35fr) minmax(0, 1.15fr) 100px 110px 36px; gap: 12px; align-items: center; padding: 2px 2px 10px; font-size: 11px; font-weight: 700; letter-spacing: 0.04em; text-transform: uppercase; color: #94a3b8; list-style: none; }
@media (max-width: 760px) {
  .dash-orowhead { display: none; }
  .dash-row--wm, .app-order.dash-row--wm { grid-template-columns: 42px minmax(0, 1fr) auto 32px; }
  .dash-row--wm .dash-omargin { display: none; } /* margin lives in the order details on mobile */
}
.dash-rail { display: grid; gap: 16px; }
.dash-place-ic { width: 46px; height: 46px; border-radius: 12px; background: var(--brand-tint); color: var(--brand-red); display: grid; place-items: center; margin-bottom: 12px; }
.dash-cta { display: flex; align-items: center; justify-content: center; gap: 8px; width: 100%; margin-top: 14px; background: var(--grad-brand); color: #fff; font-weight: 700; font-size: 14.5px; text-decoration: none; border-radius: 11px; padding: 12px; }
.dash-cta:hover { background: var(--grad-heat); }
.dash-links { padding: 8px; }
.dash-link { display: flex; align-items: center; gap: 12px; padding: 12px; border-radius: 11px; text-decoration: none; color: var(--nod-ink); font-weight: 700; font-size: 14.5px; }
.dash-link:hover { background: var(--nod-bg); }
.dash-link + .dash-link { border-top: 1px solid #f4f7fb; border-radius: 0 0 11px 11px; }
.dash-lic { flex: none; width: 36px; height: 36px; border-radius: 10px; display: grid; place-items: center; }
.dash-lic--y { background: #fff6e0; color: #b98900; }
.dash-lic--r { background: #ffeef2; color: #e0316e; }
.dash-lic--g { background: #e8f9f0; color: #0b8a4e; }
.dash-link .dash-chev { margin-left: auto; }

/* dark-sidebar switcher DROPDOWN (matches the v2 shell) */
.app-sidebar .nod-ss-menu { background: #1b1e26; border-color: #2b2f39; box-shadow: 0 16px 36px rgba(0,0,0,0.45); }
.app-sidebar .nod-ss-head { color: #7d8697; }
.app-sidebar .nod-ss-opt { color: #e6e9ef; }
.app-sidebar .nod-ss-opt:hover { background: rgba(255,255,255,0.07); }
.app-sidebar .nod-ss-opt.is-on { background: rgba(255,57,76,0.22); }
.app-sidebar .nod-ss-optname i { color: #7d8697; }
.app-sidebar .nod-ss-optava { background: #2a2f3a; color: #cbd5e1; }
.app-sidebar .nod-ss-optava.has-img { background: #fff; }
.app-sidebar .nod-ss-check { color: var(--brand-orange); }
.app-sidebar .nod-ss-sep { background: #2b2f39; }
.app-sidebar .nod-ss-new { color: var(--brand-orange); }
.app-sidebar .nod-ss-new:hover { background: rgba(255,138,43,0.16); }
.app-sidebar .nod-ss-add { border-color: rgba(255,138,43,0.55); background: rgba(255,138,43,0.14); color: var(--brand-orange); }
.app-sidebar .nod-ss-add:hover { background: rgba(255,138,43,0.22); border-color: var(--brand-orange); }
.app-sidebar .nod-ss-addic { background: var(--brand-red); color: #fff; }

/* the own-order builder inside the portal shell */
.nod-op-shellmain { padding: 0 var(--nod-gutter) 2rem; }   /* the one page gutter — see --nod-gutter */

/* Nodi live-chat bubble (portal pages, bottom right) */
.nod-nodi-fab { position: fixed; right: 22px; bottom: 22px; z-index: 90; width: 56px; height: 56px; border-radius: 50%; border: none; background: var(--nod-blue, #FF394C); color: #fff; display: grid; place-items: center; cursor: pointer; box-shadow: 0 12px 30px rgba(1, 119, 196, .38); }
.nod-nodi-fab:hover { filter: brightness(0.94); }
@media (max-width: 700px) { .nod-nodi-fab { right: 14px; bottom: 14px; width: 50px; height: 50px; } }

/* sidebar count badges (open orders / open customer issues) */
.app-navbadge { margin-left: auto; background: var(--nod-blue-soft, #FFF3EC); color: var(--nod-blue-dark, #D9481A); font-size: 11px; font-weight: 800; border-radius: 999px; padding: 2px 8px; min-width: 20px; text-align: center; font-variant-numeric: tabular-nums; line-height: 1.5; }
.app-sidebar .app-navbadge { background: rgba(255, 255, 255, .14); color: #fff; }
.app-sidebar .app-nav.is-on .app-navbadge { background: rgba(255, 255, 255, .22); }
.app-navbadge.is-urgent, .app-sidebar .app-navbadge.is-urgent { background: #ef4444; color: #fff; }

/* incomplete-profile banner */
.app-profilenag { background: #fff8e6; border: 1px solid #f3d98b; color: #7a5b0e; border-radius: 12px; padding: 12px 16px; font-size: 13.5px; margin-bottom: 16px; }
.app-profilenag a { color: var(--brand-link); font-weight: 700; text-decoration: none; margin-left: 6px; }
.app-profilenag a:hover { text-decoration: underline; }
