/* polish-canon.css: the redesign's shared parts on Books and Dispatch (feature_polish, html.nd-polish).
   Approved mockup: mockups/studio/polish.html. The same markup and data as canon.css, in new clothes:
   cards lose their outline and gain a soft lift, buttons become pills, labels lose their capitals,
   and hairlines thin to half a pixel.

   IN CANON'S OWN LAYER, AT A CHOSEN WEIGHT. This file used to be unlayered, and an unlayered rule beats
   every layered one whatever its weight, so a general ".btn" here overrode every special case a page had
   written: menu rows turned into pills (.lt-dd__panel--menu .btn-ghost), an icon button got its words back
   (#jobActionsBtn), and the quote's search field filled in (#v3AddIn).

   html:root.canon-v5:where(.nd-polish) weighs (0,3,1). That beats canon's plain rules, in any load order
   (a Books hop appends a page's sheets after this one), and loses to anything that adds a class or an id.
   When a page needs its own version of a part, it now gets it without touching this file.

   Colours are the --c-* names only, so a chosen look reaches all of this. */

/* Capitals stay unlayered. Tailwind's .uppercase is in the utilities layer, which outranks components,
   and no page has a special case that wants its capitals back. */
:root.canon-v5.nd-polish :is(th, .uppercase, .sched-allday-label, .cx-sortlbl, .catv2-c-part, .catv2-c-sup, .catv2-n, .cstat-l, .cx-showing, .cx-tag, .dw-prov, .tx-prov, .sched-rail-count, .sched-tg-dow, .sched-trade-tag) { text-transform: none; letter-spacing: 0; }
:root.canon-v5.nd-polish :is(.sched-app, [id$="CanonRoot"]) * { text-transform: none; }
:root.canon-v5.nd-polish .sched-app :is(.section-title, .rec-count, .rec-eyebrow, .sched-month-head > div, .sched-tg-dow, .sched-allday-label, .sched-list-date, .sched-rail-head, .sched-wx-head, .cr-head, .cr-sec, .cr-cap) { letter-spacing: 0; }

/* Two plain panels an unlayered Dispatch and Books rule still draws, so a layered rule can't reach them.
   Neither has a special case to protect. */
:root.canon-v5.nd-polish :is(.sb-chip-wrap, .sched-main) { border-color: transparent; border-radius: 16px; box-shadow: var(--lift); }
/* …except a connection in the Invoices quiet line (feature_polish_invoices), which is words, not a panel. */
:root.canon-v5.nd-polish .sb-chip-wrap.sb-quiet { border-radius: 6px; background: none; box-shadow: none; }
/* …and Dispatch's live dot in the two-row toolbar (feature_polish_dispatch): live-pip.js styles it unlayered, and on
   the grid it would sit alone after the views. The phone toolbar drops it the same way. */
@media (min-width: 1100px) {
  :root.canon-v5.nd-polish.sched-tb2 .sched-app .stoolbar-head > .nd-live-pip { display: none; }
}

@layer components {
  html:root.canon-v5:where(.nd-polish) {
    --pl-fill: rgba(120, 120, 128, .12);
    --pl-fill-2: rgba(120, 120, 128, .2);
    --pl-hover: rgba(120, 120, 128, .06);
    --pl-thumb: var(--c-card);
    --pl-thumb-lift: 0 0 0 .5px rgba(0, 0, 0, .06), 0 2px 6px rgba(0, 0, 0, .12);
  }
  html:root.canon-v5:where(.nd-polish)[data-theme="dark"] {
    --pl-fill: rgba(120, 120, 128, .24);
    --pl-fill-2: rgba(120, 120, 128, .36);
    --pl-hover: rgba(120, 120, 128, .12);
    --pl-thumb: var(--pl-thumb-dark);
    --pl-thumb-lift: none;
  }

  /* Cards */
  html:root.canon-v5:where(.nd-polish) .card { border-color: transparent; border-width: 0; border-radius: 16px; }

  /* Labels */
  html:root.canon-v5:where(.nd-polish) .cap { font-size: 12.5px; font-weight: 500; letter-spacing: 0; text-transform: none; color: var(--c-text-2); }

  /* Pills: a tint and a word, with no outline and no dot */
  html:root.canon-v5:where(.nd-polish) .pill { border-color: transparent; padding: var(--sp-0_5) var(--sp-2); font-size: 12px; }
  html:root.canon-v5:where(.nd-polish) .pill::before { display: none; }

  /* Buttons */
  html:root.canon-v5:where(.nd-polish) .btn { border-color: transparent; border-radius: 999px; background: var(--pl-fill); padding: 0 var(--sp-3_5); font-size: 13px; }
  html:root.canon-v5:where(.nd-polish) .btn:hover { border-color: transparent; background: var(--pl-fill-2); }
  html:root.canon-v5:where(.nd-polish) .btn:active { transform: scale(.97); }
  html:root.canon-v5:where(.nd-polish) .btn.primary:hover { background: var(--c-cta-h); }
  html:root.canon-v5:where(.nd-polish) .btn.sm { height: 28px; padding: 0 var(--sp-2_5); font-size: 12px; }

  /* Segmented controls */
  html:root.canon-v5:where(.nd-polish) .seg { border-color: transparent; border-width: 0; border-radius: 9px; background: var(--pl-fill); }
  html:root.canon-v5:where(.nd-polish) .seg button { border-radius: 7px; font-size: 12.5px; color: var(--c-text-2); }
  html:root.canon-v5:where(.nd-polish) .seg button:hover { color: var(--c-text); }
  html:root.canon-v5:where(.nd-polish) .seg button[aria-pressed="true"] { background: var(--pl-thumb); box-shadow: var(--pl-thumb-lift); color: var(--c-text); font-weight: 600; }
  html:root.canon-v5:where(.nd-polish) .seg button[aria-pressed="true"] * { color: inherit; }

  /* Tables */
  html:root.canon-v5:where(.nd-polish) .tbl th { font-size: 12px; font-weight: 500; letter-spacing: 0; text-transform: none; color: var(--c-text-2); border-bottom-width: .5px; }
  html:root.canon-v5:where(.nd-polish) .tbl td { border-bottom-width: .5px; }
  html:root.canon-v5:where(.nd-polish) .tbl tbody tr:hover { background: var(--pl-hover); }

  /* Fields on a page. .fld stays as it is: it's the invisible-until-hover field inside document lines. */
  html:root.canon-v5:where(.nd-polish) [id$="CanonRoot"] :is(input:not([type="checkbox"], [type="radio"], [type="range"], [type="color"], .fld), select, textarea:not(.fld)) {
    border-color: transparent; border-radius: 9px; background: var(--pl-fill);
  }
  html:root.canon-v5:where(.nd-polish) [id$="CanonRoot"] :is(input:not([type="checkbox"], [type="radio"], [type="range"], [type="color"], .fld), select, textarea:not(.fld)):hover { border-color: transparent; background: var(--pl-fill-2); }
  html:root.canon-v5:where(.nd-polish) [id$="CanonRoot"] :is(input:not([type="checkbox"], [type="radio"], [type="range"], [type="color"], .fld), select, textarea:not(.fld)):focus { border-color: var(--c-accent); background: var(--c-card); }
  html:root.canon-v5:where(.nd-polish) [id$="CanonRoot"] :is(input, textarea)::placeholder { color: var(--c-text-2); }

  /* Dispatch: its toolbars and the groups inside them */
  html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar, html:root.canon-v5:where(.nd-polish) .sched-app .sched-legend { border-bottom-width: .5px; }
  html:root.canon-v5:where(.nd-polish) .sched-app :is(.sviews, .sdatenav, .sched-td-seg) { border-color: transparent; border-radius: 9px; background: var(--pl-fill); }
  html:root.canon-v5:where(.nd-polish) .sched-app :is(.sviews button, .sched-td-seg button) { border-radius: 7px; color: var(--c-text-2); }
  html:root.canon-v5:where(.nd-polish) .sched-app :is(.sviews button.active, .sched-td-seg button.is-on) { background: var(--pl-thumb); box-shadow: var(--pl-thumb-lift); color: var(--c-text); }
  html:root.canon-v5:where(.nd-polish) .sched-app .spane-left > .card, html:root.canon-v5:where(.nd-polish) .sched-app .spane-right { border-color: transparent; }

  /* The page-level button families. scripts/polish-audit.js lists what's left. */
  html:root.canon-v5:where(.nd-polish) :is(.btn-ghost, .btn-rowact, .sq-btn, .stk-btn, .ts-btn, .fig-collapse__toggle, .sched-qa-btn, .cat-chip, .stk-chip, .ui-rail__seg, .lt-dd__trigger, .ui-actmenu__trigger) {
    border-color: transparent; border-radius: 999px; background: var(--pl-fill); box-shadow: none;
  }
  html:root.canon-v5:where(.nd-polish) :is(.btn-ghost, .btn-rowact, .sq-btn, .stk-btn, .ts-btn, .fig-collapse__toggle, .sched-qa-btn, .cat-chip, .stk-chip, .ui-rail__seg, .lt-dd__trigger, .ui-actmenu__trigger):hover { border-color: transparent; background: var(--pl-fill-2); }
  html:root.canon-v5:where(.nd-polish) :is(.btn-brand) { border-radius: 999px; }
  /* The filled button, under each of its names. Last, so a family above can't take its fill away. */
  html:root.canon-v5:where(.nd-polish) :is(.btn.primary, .btn-primary, .btn.pri, .bk-cta, .btn-rowact.primary, .sq-btn.primary, .stk-btn.primary, .ts-btn.primary) {
    border-color: transparent; border-radius: 999px; background: var(--c-cta); color: var(--c-cta-fg); box-shadow: none;
  }
  html:root.canon-v5:where(.nd-polish) :is(.btn.primary, .btn-primary, .btn.pri, .bk-cta, .btn-rowact.primary, .sq-btn.primary, .stk-btn.primary, .ts-btn.primary):hover { border-color: transparent; background: var(--c-cta-h); }
  /* A chip that's switched on keeps saying so */
  html:root.canon-v5:where(.nd-polish) :is(.cat-chip, .stk-chip, .ui-rail__seg):is(.on, .active, .is-on, .is-active, [aria-pressed="true"], [aria-selected="true"]) { border-color: transparent; background: var(--c-accent-soft); color: var(--c-on-wash-accent); }


  /* Panels: the same soft card as .card */
  html:root.canon-v5:where(.nd-polish) :is(.ret-card, .cx-list, .cx-pcard, .catv2-list, .sb-chip-wrap, .sb, .sched-main) { border-color: transparent; border-radius: 16px; box-shadow: var(--lift); }
  html:root.canon-v5:where(.nd-polish) .sched-unsched-card { border-color: transparent; border-radius: 12px; }
  /* Notes: a tint is enough, with no outline */
  html:root.canon-v5:where(.nd-polish) :is(.band, .tx-note, .stk-note, .dw-note, .wgt-intro) { border-color: transparent; border-radius: 12px; }

  /* Dispatch's figures along the top */
  html:root.canon-v5:where(.nd-polish) .sched-app .skpi { border-color: transparent; }

  /* Dialogs */
  html:root.canon-v5:where(.nd-polish) .bk-modal { border-color: transparent; border-radius: 18px; }
  html:root.canon-v5:where(.nd-polish) .bk-modal :is(input:not([type="checkbox"], [type="radio"]), select, textarea) { border-color: transparent; border-radius: 9px; background: var(--pl-fill); }
  html:root.canon-v5:where(.nd-polish) .bk-modal :is(input:not([type="checkbox"], [type="radio"]), select, textarea):focus { border-color: var(--c-accent); background: var(--c-card); }


  /* Dispatch on a phone. The board started 514px down an 844px screen. What's used all day stays: the date, the
     views and the job counts. The rest folds behind Options (js/scheduler/polish-phone.js), still one tap away. */
  .pl-more { display: none; }
  @media (max-width: 640px) {
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar { display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-2); padding: var(--sp-2) var(--sp-3); }
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar > .sdatenav-wrap { order: 1; flex: 1 1 0; min-width: 0; margin: 0; }
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar > .sdatenav-wrap .sdatenav { width: 100%; }
    html:root.canon-v5:where(.nd-polish) .sched-app .pl-more {
      order: 2; flex: none; display: grid; place-items: center; width: 44px; height: 44px; border: 0; border-radius: 50%;
      background: var(--pl-fill); color: var(--c-text); font-size: 18px; cursor: pointer; position: relative;
    }
    html:root.canon-v5:where(.nd-polish).pl-tools-open .sched-app .pl-more { background: var(--c-accent-soft); color: var(--c-on-wash-accent); }
    /* Something waiting in the Queue still shows while it's folded */
    html:root.canon-v5:where(.nd-polish):not(.pl-tools-open) .sched-app .stoolbar:has(#schedQueueBadge:not([hidden], :empty)) .pl-more::after {
      content: ""; position: absolute; top: var(--sp-2); right: var(--sp-2); width: 9px; height: 9px; border-radius: 50%;
      background: var(--c-danger); box-shadow: 0 0 0 2px var(--c-bg);
    }
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar > #schedulerViewSwitch { order: 3; flex: 1 1 100%; width: 100%; margin: 0; }
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar > .stoolbar-head { order: 4; flex: 1 1 100%; min-width: 0; margin: 0; }
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar-head .skpis { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; margin: 0; }
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar-head .skpis > * { flex: none; }
    html:root.canon-v5:where(.nd-polish) .sched-app .stoolbar-head .nd-live-pip { display: none; }
    /* The bottom bar's + is the Add here */
    html:root.canon-v5:where(.nd-polish).nd-tabbar .sched-app .stoolbar > .sched-add-job { display: none; }
    /* Folded */
    html:root.canon-v5:where(.nd-polish):not(.pl-tools-open) .sched-app :is(#schedTechDayTools, .sutil, #schedulerLegend) { display: none; }
    /* Open */
    html:root.canon-v5:where(.nd-polish).pl-tools-open .sched-app .stoolbar > #schedTechDayTools { order: 5; flex: 1 1 100%; min-width: 0; margin: 0; }
    html:root.canon-v5:where(.nd-polish).pl-tools-open .sched-app .stoolbar > .sutil { order: 6; flex: 1 1 100%; flex-wrap: wrap; min-width: 0; width: 100%; margin: 0; overflow: visible; }
    /* The alerts: one line that scrolls, not two stacked rows */
    html:root.canon-v5:where(.nd-polish) .sched-app .sched-attention.sched-dayflow { display: flex; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; padding: var(--sp-1_5) var(--sp-3); }
    html:root.canon-v5:where(.nd-polish) .sched-app .sched-attention.sched-dayflow > * { flex: none; }
  }

  /* Parts canon names more heavily than a general rule can reach */
  html:root.canon-v5:where(.nd-polish) :is(.stk-note.warn, .tx-note.tx-warn) { border-color: transparent; }
  html:root.canon-v5:where(.nd-polish) :is(#invCanonRoot, #quoCanonRoot) .inv-search { border-color: transparent; border-radius: 9px; background: var(--pl-fill); }
  html:root.canon-v5:where(.nd-polish) :is(#invCanonRoot, #quoCanonRoot) .inv-search:hover { border-color: transparent; background: var(--pl-fill-2); }
  html:root.canon-v5:where(.nd-polish) :is(#invCanonRoot, #quoCanonRoot) .inv-search:focus { border-color: var(--c-accent); background: var(--c-card); }

  /* The job sheet's address line: an icon sitting 2px from its words reads as touching */
  html:root.canon-v5:where(.nd-polish) .sched-app .jm2-meta i { margin-right: var(--sp-1); }

  /* A dialog's field labels read like the page's: no capitals */
  html:root.canon-v5:where(.nd-polish) .bk-modal .lbl { font-size: 12.5px; font-weight: 500; letter-spacing: 0; text-transform: none; color: var(--c-text-2); }
  html:root.canon-v5:where(.nd-polish) .bk-modal .lbl .hint { letter-spacing: 0; }

  /* Insight chips: a tint and a word, the same as a pill */
  html:root.canon-v5:where(.nd-polish) :is(.insight-chip, .insight-chip.is-good, .insight-chip.is-warn) { border-color: transparent; }

  /* Menus: a lifted sheet, and rows with no fill until they're pointed at */
  html:root.canon-v5:where(.nd-polish) :is(.lt-dd__panel, .ui-actmenu__panel) { border: 0; border-radius: 14px; box-shadow: 0 0 0 .5px var(--c-border), var(--float); }
  html:root.canon-v5:where(.nd-polish) .lt-dd__panel--menu { padding: var(--sp-1_5); }
  html:root.canon-v5:where(.nd-polish) .lt-dd__panel--menu .btn-ghost { border-radius: 9px; }
  html:root.canon-v5:where(.nd-polish) .lt-dd__panel--menu .btn-ghost:hover { background: var(--pl-fill); }

  /* ── Dispatch's toolbar in two rows (feature_polish_dispatch, html.sched-tb2) ──
     row 1: title, views, date; row 2: status chips, Colour by, Filter, More, Add job.
     A grid over the toolbar's own elements (polish-boardbar.js only adds More), from
     desktop width up; the phone keeps its own toolbar above. */
  @media (min-width: 1100px) {
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar {
      display: grid;
      grid-template-columns: auto auto minmax(0, 1fr) auto auto auto auto;
      grid-template-areas: "title views . . date date date" "kpis kpis . colour tools upd add";
      align-items: center; gap: var(--sp-2); padding: var(--sp-2_5) var(--sp-4) var(--sp-2);
    }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > .stoolbar-head { display: contents; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar-head .section-title { grid-area: title; display: block; margin-right: var(--sp-1_5); font-size: 22px; font-weight: 600; letter-spacing: -.02em; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar-head .skpis { grid-area: kpis; margin: 0; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > .stoolbar-sp { display: none; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > #schedulerViewSwitch { grid-area: views; justify-self: start; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > .sdatenav-wrap { grid-area: date; justify-self: end; margin: 0; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > #schedTechDayTools { grid-area: colour; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > .sutil { grid-area: tools; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > #schedSendUpd { grid-area: upd; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > .sched-add-job { grid-area: add; }
    html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-app .stoolbar > .pl-more { display: none; }
  }

  /* More: the board's less-used buttons, moved into a menu */
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-more { position: relative; }
  html:root.canon-v5:where(.nd-polish).sched-tb2 #schedMoreBtn { position: relative; }
  html:root.canon-v5:where(.nd-polish).sched-tb2 #schedMoreBtn.is-armed { color: var(--c-accent); }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-dot {
    position: absolute; top: calc(var(--sp-1) * -1); right: calc(var(--sp-1) * -1); min-width: 16px; height: 16px; padding: 0 var(--sp-1);
    border-radius: 999px; background: var(--c-danger); color: var(--c-on-accent, rgb(255 255 255));
    font-size: 10px; font-weight: 700; line-height: 16px; text-align: center;
  }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-dot[hidden] { display: none; }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu {
    position: absolute; z-index: 60; top: calc(100% + var(--sp-1_5)); right: 0; min-width: 220px;
    display: flex; flex-direction: column; gap: var(--sp-0_5); padding: var(--sp-1_5);
    border-radius: 14px; background: var(--c-card); box-shadow: var(--float, 0 12px 32px rgb(0 0 0 / 18%));
  }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu[hidden] { display: none; }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu > .sched-tb2-item {
    display: flex; align-items: center; justify-content: flex-start; gap: var(--sp-2_5); width: 100%; height: 34px; padding: 0 var(--sp-2_5);
    border: 0; border-radius: 9px; background: none; box-shadow: none; color: var(--c-text); font-weight: 500; text-align: left;
  }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu > .sched-tb2-item[hidden] { display: none; }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu > .sched-tb2-item:hover { background: var(--pl-fill); }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu > .sched-tb2-item[aria-pressed="true"] { color: var(--c-accent); }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu .sbtn-lbl { display: inline; }
  html:root.canon-v5:where(.nd-polish).sched-tb2 .sched-tb2-menu .sched-req-badge { position: static; margin-left: auto; }

  /* ── Rough edges (feature_polish_edges, html.nd-edges) ─────────────────────────────
     What scripts/polish-audit.js still found wearing the old design on office pages. The
     tech app is not here: it has no approved drawing yet. Left as they are on purpose: the
     Reconcile CSV drop zone (dashed means drop here), an unassigned job's outline on the
     board (it means nobody is on it), and the 1px separator above list rows that are buttons
     (Catalog, Customers, Purchase orders): the audit counts it as an outline, but it is the
     same faint rule every list draws, and Chromium rounds anything thinner back up to 1px. */
  /* Overview: the board's cards lift like every other card instead of wearing a line */
  html:root.canon-v5:where(.nd-polish.nd-edges) #ovGrid .card { border-color: transparent; border-radius: 16px; box-shadow: var(--lift); }
  /* Bars carry their colour on a plain well */
  html:root.canon-v5:where(.nd-polish.nd-edges) .track { border-color: transparent; }
  /* Mileage: the Business / Private toggle and the quiet notes are fills, not outlines */
  html:root.canon-v5:where(.nd-polish.nd-edges) .ml-chip:is(.is-biz, .is-accent, .is-warn, :not([class*="is-"])) { border-color: transparent; }
  html:root.canon-v5:where(.nd-polish.nd-edges) .ml-chip:is(.is-priv, .is-plain) { border-color: transparent; background: var(--c-sunken); }
  html:root.canon-v5:where(.nd-polish.nd-edges) .ml-mini { border-color: transparent; border-radius: 999px; background: var(--pl-fill); }
  html:root.canon-v5:where(.nd-polish.nd-edges) .ml-mini:hover { border-color: transparent; background: var(--pl-fill-2); }
  html:root.canon-v5:where(.nd-polish.nd-edges) :is(.ml-list, .ml-settings) { border-color: transparent; border-radius: 16px; box-shadow: var(--lift); }
  html:root.canon-v5:where(.nd-polish.nd-edges) .ml-day-pic { border-color: transparent; border-radius: 12px; }
  html:root.canon-v5:where(.nd-polish.nd-edges) .ml-note { border-color: transparent; border-radius: 12px; background: var(--c-sunken); }
  /* Dispatch: the crew filter is round faces, Everyone included, and the weather days are soft */
  html:root.canon-v5:where(.nd-polish.nd-edges) .sched-app .cr-av { border-radius: 999px; }
  html:root.canon-v5:where(.nd-polish.nd-edges) .sched-app .cr-av-all { border-color: transparent; }
  html:root.canon-v5:where(.nd-polish.nd-edges) .sched-app .cr-weather .sched-wx-row { border-radius: 12px; }
  /* Customers: a chosen or hovered customer is a rounded fill, not a band with a bar */
  html:root.canon-v5:where(.nd-polish.nd-edges) .cx-row { margin-inline: var(--sp-1_5); border-left-width: 0; border-radius: 12px; }
  /* Catalog: Rows / Cards / Compare is the same segmented control as everywhere else (.seg) */
  html:root.canon-v5:where(.nd-polish.nd-edges) .cat-viewtoggle { border-color: transparent; border-width: 0; border-radius: 9px; background: var(--pl-fill); }
  html:root.canon-v5:where(.nd-polish.nd-edges) .cat-viewtoggle button { border-radius: 7px; font-size: 12.5px; color: var(--c-text-2); }
  html:root.canon-v5:where(.nd-polish.nd-edges) .cat-viewtoggle button:hover { color: var(--c-text); }
  html:root.canon-v5:where(.nd-polish.nd-edges) .cat-viewtoggle button.is-active { background: var(--pl-thumb); box-shadow: var(--pl-thumb-lift); color: var(--c-text); font-weight: 600; }
}
