/* ==QT-DIGITS-BEGIN== */
/* S40 (V167NL, Khalid 23 Oct) — THE ZERO IS DRAWN WITH A SLASH, IN EVERY LANGUAGE.
   The ten digits only (unicode-range U+0030-0039), cut from Inter (SIL OFL 1.1,
   docs/licences/OFL-Inter.txt) by tools/build-digits-face.py; every other character
   keeps the stack below. The first family of the stack, so inputs and buttons
   (font-family:inherit) have it too. ONE owner of this face (A5). */
@font-face{font-family:"QT Digits";font-style:normal;font-weight:400;font-display:block;unicode-range:U+0030-0039;src:url(data:font/woff2;base64,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) format("woff2")}
@font-face{font-family:"QT Digits";font-style:normal;font-weight:600;font-display:block;unicode-range:U+0030-0039;src:url(data:font/woff2;base64,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) format("woff2")}
@font-face{font-family:"QT Digits";font-style:normal;font-weight:700;font-display:block;unicode-range:U+0030-0039;src:url(data:font/woff2;base64,d09GMk9UVE8AAAfkAAwAAAAAD6gAAAeZAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAADZNcGigbIBx2BmAANAE2AiQDQgQGBYViByAb0Q5RlE1SjOKLAtsYNnrqKUYtTuZCaWl4+xt/8SnNnX3qp8d09hoyTZH5GDz/+Ufe92Zmzb8yQ1VEK7Vxm1SpVOv0roSK3PXQe/pXkCNZMVk74wHkd4jwdp6fKVmMSgzg///Xyg+95Kp25QKsgMGiIpRZrQO4gyCBFZDPqhCq7nxAB3z6zakZqO9vtDNr/EXKJAtyyqiA783c/981fXX5t0vbjbOxw5Lr5NzdlexAyBl1STkjSkFVDUgBkJ6anrCADt2EAtQTZsaILrGrXwB35T2kswWriEjgJ3KjQVdaUfiM1olBTGTLRE4QE7k6kWcmouz0E6r5P07FJveOzls4Nxd4Oyrh3l4PF+y5j+7/1dCFnv/TCF0PJ1TELyTK8/APjU3NyYfX7dj74sYhWGuzagQCu21sKHSZDpAOlDyDgAzdwGYCHdgENdB5TId4ZHBoe48rq/L+69AfZTZA7DwJvQbilBOyQMHdpDsCyUq9BhWYlQN/rexPogSwcBoDACH8yHF/EB0Ew34bzMkZeakD+lbnzE2bYY/b367Pfbzt7v3wZ3sMIizwbScebdBFzNn16AlBNu1n3EHLZYcOVVSiomCHD7FdQeWW3ftbVAItLpaxYtOaw9GS5Yvp9sTLBlgQ+O0gD7qQ8Jhqiuubvr9z4gZ6+xdSogKi5H2ObyDWKnY+2DN9KvwC/N59Ce9N+q2JdBbo6Yak61C7KiZF2w1AC1M7mcQ51CVn0nXtbyJylBBohbXK90P0bWp0CT4ROgXI65eviIKQiN/isCgwdUZNEx0X1bZqLNWeZZ96kbdkRAVoSaAiEyXy1pvBORR3R3iRq3IccKuKfANdtetx9gEvRWccj4n4/zPxy3n8mASEBymD45tFWE7C7qTQryuNf6MwIzBtYGxzCKsw+DIZbPgmHPdK9TtHr7Am6p/I+iKvIuH1SacBcVJx4WxyZZsuVZx0Xzumw5xyx4miKiFxnpZHDkznofY4B9aLvCCwTOhSoCOuV6s3o3kYu3xxh98euNeipSwloUWpQ0SaPbslacdq3NPy25FvTgUhYAyOCBzer9iPMJcBjYmQwufhpJcKcoFuYO1NTq1H5xWBZUGXA+1zrZq8Fh2DPaee5scuQGf+QfJVR4jMt/lX+ocuwY7/M25RqU9jhcZDvsieCaoTOupCXcVDmiyci1GiIp9A3nKiyZuQLwImYv/AgTYm2oeozfyfRaHHkNE9sZ8SWpY6tgNelLKWxC5q73Nwvcg7MqFsNBmo2J4qdtet4AwKuSuMJCgmUI8dSvFt9EVqczLuDRwjLFHF1mA3zt8xrXAxLg48qVFn6wsiV9FiBv8yF24g4f8f5UvIB4Ehc87LeYNWiwhyaNEohn83F0og6i/NWauczy/xEiU1LKaRZFcydxajdkO6zMw6t477mAp96egf+Xi0sO34cuB9qnGz1qNikEfzIcKLs4DP9vOgawmTmfAe+kv0FbjlObW4XGfwXJ7hCoAIEODoLyOSfJBfAco08KzxsTPtH2X2rxcTjCqXIlANFERVVEOVTLNbyvJN647O4OfT6crkc4ME4Dj8GeMm9zoNqLO4G0PfgVn3/09IknqJ5+aj66Pl5DW3He5CcAl3gJ7dmmmFMtTRniqp0EwpNXYpGliD7mCDxknj76rppMxit96geAUOWkw3pYPG0xkCrR+wzEsyeN1dvhE8XS1hNTtp70C9++VI0dAAs3wRlmEx2glP4EeBJhTuW82hf2MSXYBT2EnKnIheKyCogXVStOnA/1aR+C7/skeX8RWUo4F27QO+pNS0+hHeJmuKy+ynGFd7KNAe2VGBz+X1m+LxKykzTS1wFC5rf5DXlXk2H+D+mIIug+q75FZpuescdS5YyJ3s2Z/RCE5OECOKRURuwiKQQJkEE+IsQACe5CWd3YWVgIj9KDTHCeSqydYKPZ2+ZR1sBfS8XKU5umNblwXQ9/jbuFhOHTHFR2JxBX5Iav5/2hI996rUbAKIEPC8dUN6Dgeuwt4HLoUc9D63szGJn+kdsNK5d/wVVYBNStXtu3Ns8PfLt5wVdrV7Ek/lV8JUMEAUcJGJJRUsCK+jIVwK/fOP+8TyvA8ZN21RCyPxr5/xA+DdgYr5AHgv+pm2/4dg95HudsX629PpNvJm6cxc5bxdkGuVXKeheUI0lcy2+rOhBjSVcbDhrF47GWgUq2PeoIGsdNhBi6Rxa7DAMg3AKBAN/NnVq7j1JyEAFiHCqEXxY73F0M1osXiuWRzV7ll8SBhqCZZU8V4nhMo00sHGroeTgY4eTKlcqTLVUi3UQCP6WNOFhhPEKCcyYjR5B0a06QoJPVuqgJQh40qdZYJBQNLT55t1ilSs1G1rMO8Ksk6UcmUqTFKlzrHBuApFOxPqbg8qa71aOpQyr0YQiOEErJT1snJXSaYgSgE31MO7edrnyIIwaIVbm0kJYvl0lKNBBw3rVI1OSnvltk7i2vaQGVkgRwohPsKOWFX+7sFyIHDNXkEZ9bGJs37twTaJdVy8MDDL0E7T+f5ecn0eWns8TVmMgMUDnfwCZodIiRvfrWO24HZa4sF2l8iDJ/SQTogROPpCZA8Gp6W5W9wGAA==) format("woff2")}
@font-face{font-family:"QT Digits";font-style:normal;font-weight:800;font-display:block;unicode-range:U+0030-0039;src:url(data:font/woff2;base64,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) format("woff2")}
@font-face{font-family:"QT Digits";font-style:normal;font-weight:900;font-display:block;unicode-range:U+0030-0039;src:url(data:font/woff2;base64,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) format("woff2")}
/* ==QT-DIGITS-END== */

/* =====================================================================
   1810-3 STAGE 2 — ONE SKIN FOR EVERY PORTAL. THE PART BOTH APPS SHARE,
   HELD IN ONE FILE.
   =====================================================================
   Khalid, 18 Oct 10:20: *"The service-provider platform — I looked at it
   last night and found it very bad, not in the new-look style … I
   actually liked the customer portal theme; if you also like it,
   continue the same with the portals."*

   The order's rule 1: *"Tokens from the customer app, held once (extend
   QCALC.ui.brand156 or one shared stylesheet both pages load — no copy
   per page)."* This is that stylesheet.

   WHAT WAS MEASURED FIRST, because it changes what this file has to be.
   Rendered `portal.html` and `customer.html` side by side at 390 px and
   read the computed values off both:

     ink #0f172a · dim #64748b · line #e2e8f0 · bg #f1f5f9 · card #fff
     navy #02295A · teal #009A9C · card radius 14px

   EVERY ONE OF THOSE ALREADY AGREED. The palette was never the fault.
   What did not agree is the TYPE, which is V5, the finding QA named
   first and said had the widest reach:

     customer  -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
               "Helvetica Neue", Arial, "Noto Sans Arabic",
               "Segoe UI Historic", sans-serif
     portal    Inter, ui-sans-serif, system-ui, -apple-system,
               "Segoe UI", Arial, sans-serif

   `Inter` IS NEVER LOADED — there is no @font-face and no link to it
   anywhere in this repository — so every portal screen fell through to
   whatever `ui-sans-serif` happens to be on the device; and with no
   "Noto Sans Arabic" in the list at all, every ARABIC screen fell
   through to whatever the device had. Two apps, one product, two
   different letters, and nobody could see why.

   SO THIS FILE HOLDS THE TWO THINGS THAT MUST NOT DRIFT: the type stack
   and the palette. It holds nothing else. The components stay where they
   are, because a skin is colour, type, icon, radius and picture — not
   where a control sits (S39), and a stylesheet that restyled every
   component from the outside would be a second owner of all of them
   (A5).

   HOW IT REACHES EACH PAGE
   · `portal.html`, `customer.html` and `business.html` load it with a
     <link> in <head>, and each page's own copy of these values is
     DELETED (MSR-015) — otherwise the page's later rule wins on document
     order and this file does nothing at all.
   · `release-file.js` puts it INSIDE each attachment, exactly as it
     already does with qcalc.js, so the file Khalid opens from disk at
     the office needs no network (Standard 150, V110).
   · `preview/skin/index.html` loads it too, so the previews and the
     product cannot show different colours.

   THE TWO NAMES FOR ONE COLOUR. The portal has called the navy `--blue`
   since V42 and the customer app has called it `--brand`; both are read
   in hundreds of places. Renaming either would be a rewrite of two pages
   to no one's benefit and against A1. So the value is written ONCE below
   and both names point at it — one owner, two spellings, and a change
   here reaches both apps.
   ===================================================================== */

:root{
  /* ---- THE IDENTITY, under the names the product already uses ----
     These four are Khalid's identity from 1510-2 B1. `QCALC.ui.brand156`
     is their one owner and `tests/t-doors1510.js` CP-01 reads these very
     names off the page and fails the release if they differ from it — so
     the names are not mine to choose, and the first cut of this file got
     it wrong: it wrote `--qt-teal` for #009A9C, which is what this
     product calls `--qt-tealic`. The portal's own block held the right
     meaning, won on document order, and the measurement caught a teal
     that differed between the two apps. Written once, here, with the
     product's meanings. */
  --qt-navy:#02295A;      /* headings, the hero, the dark surface */
  --qt-teal:#00BABD;      /* actions, bands, lines */
  --qt-tealic:#009A9C;    /* the teal that is safe as INK on white (S22) */
  --qt-gold:#F8C537;      /* a highlighted word on navy, and step numbers */

  /* ---- the surfaces and the letters ----------------------------- */
  --qt-ink:#0f172a;       /* body text */
  --qt-dim:#64748b;       /* secondary text */
  --qt-line:#e2e8f0;      /* the hairline inside a card */
  --qt-edge:#7f8a9d;      /* the heavier rule BETWEEN two records (R-14) */
  --qt-bg:#f1f5f9;        /* the page */
  --qt-card:#ffffff;      /* a card */
  --qt-r:14px;            /* a card's radius */
  --qt-pad:12px;

  /* ---- the names the two apps already use, both pointing at it --- */
  --ink:var(--qt-ink);
  --dim:var(--qt-dim);
  --line:var(--qt-line);
  --edge:var(--qt-edge);
  --bg:var(--qt-bg);
  --card:var(--qt-card);
  --r:var(--qt-r);
  --pad:var(--qt-pad);
  /* the portal's spelling */
  --blue:var(--qt-navy);
  --blue2:var(--qt-tealic);
  /* the customer app's spelling */
  --brand:var(--qt-navy);
  --brand2:var(--qt-tealic);
}

/* ---------------------------------------------------------------------
   V5 — THE TYPE STACK, ONE LIST, BOTH APPS.
   It is the customer app's own, unchanged: the system letters with
   "Noto Sans Arabic" in the list so an Arabic screen is not left to
   whatever the device happens to carry (S02, S03). NOTHING IS FETCHED —
   V110's rule is that nothing on either page may need the network, so
   there is no @font-face and no web font here, and `Inter`, which the
   portal asked for and no file ever provided, is gone.
   --------------------------------------------------------------------- */
html, body{
  font-family:"QT Digits",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,
              "Helvetica Neue",Arial,"Noto Sans Arabic",
              "Segoe UI Historic",sans-serif;
  -webkit-text-size-adjust:100%;
}
/* a control inherits the page's letters rather than the browser's own,
   which is what both pages already said separately */
button, input, select, textarea{font-family:inherit}


/* ---------------------------------------------------------------------
   1910-5 — THE SHARED COMPONENT VOCABULARY, AND F161-7.
   ---------------------------------------------------------------------
   1910-5, 19 Oct: *"the pattern is applied on all platforms, mobile and
   web, for everyone — platform admin, service providers and the
   customer."* PART D's four components moved into `qcalc.js` so both
   apps draw the same ones; their rules move here for the same reason,
   because a page cannot read a stylesheet that lives inside another
   page.

   F161-7, A FAULT OF MY OWN, FOUND BY MEASURING RATHER THAN READING
   (Standard 108). The components asked for three class names the
   provider app does not have — `prim`, `soft`, `ic`. Measured on the
   real page at 390px, all three computed to EXACTLY a plain `.btn`:
   white face, #0f172a letters, a #e2e8f0 hairline. So the properties
   sheet's **OK looked identical to Cancel** (M04, J10), and the same
   name was on five approved Save buttons — "Save pricing", "Save the
   add-on price", "Add a package", "Set the plan", "Save the package" —
   which had been drawing as quiet buttons for as long as those screens
   have existed. Root cause: PART D was written from the class names I
   had in my head, three of which only the customer page has, instead of
   from the page's own stylesheet.

   The fix keeps ONE primary look rather than giving the product a
   second one (A5, A11): the name `prim` is RETIRED and all six call
   sites now say `pri`, which both apps already style. `soft` and `ic`
   become real here, once, for both apps — `soft` with the value the
   customer page already used, whose own copy is deleted (MSR-015).

   Everything in this section is defined for a page that does not define
   it itself: this file is a <link> in <head>, so a page's own later
   rule still wins at equal specificity and nothing approved moves
   (A1, A3, S39).
   --------------------------------------------------------------------- */
/* a quiet button: the same action everywhere, the same face (J10, M10) */
.btn.soft{background:#f1f5f9}
/* a square icon button, the shape `.icb` already has in the portal */
.btn.ic{width:44px;min-width:44px;padding:0}
/* S17 / Standard 159 — a problem is drawn where it happened, and it
   looks like a problem */
.err{margin-top:6px;font-size:12.5px;font-weight:800;color:var(--red,#be123c);
  line-height:1.4}

/* ---- the words and the marks the components use --------------------
   The customer page has `.btn`, `.card`, `.row`, `.grow`, `.name`,
   `.sub`, `.chip` and `.pill` already; it has never had `.h3`, `.meta`,
   a chosen chip or the pill's three states, because no screen of its
   own needed them. The values are the portal's own, so the two apps
   cannot disagree about what a heading or a badge looks like. */
.h3{font-size:15px;font-weight:900;margin:0 0 2px;line-height:1.3}
.meta{display:block;font-size:12px;font-weight:700;color:var(--dim);
  margin-top:2px;line-height:1.35}
.chip.on{background:#e0f5f6;border-color:#8fd6d8;color:#02295A}
/* F161-8 — the status badge on a D1 row, named so it cannot collide.
   `.pill` is the portal's small badge AND the customer page's full-width
   status plate (21px numeral, `.n`/`.u`/`.t` children): one name, two
   components, in two files. The values here are the portal's own, so the
   badge reads the same in both apps (J10, M10); neither page's `.pill`
   is touched (A1, A3). */
.bdg1910{font-size:12px;font-weight:900;padding:4px 8px;border-radius:999px;
  background:#f1f5f9;border:1px solid var(--line);white-space:nowrap;
  display:inline-block;flex:0 0 auto;line-height:1.35;color:var(--ink)}
.bdg1910.on{background:#dcfce7;border-color:#bbf7d0;color:#166534}
.bdg1910.off{background:#f1f5f9;border-color:var(--line);color:#475569}
.bdg1910.warn{background:#fef3c7;border-color:#fde68a;color:#92400e}
.btn.blue{background:linear-gradient(135deg,var(--blue),var(--blue2));
  border-color:transparent;color:#fff}
.btn.red{background:#fff;border-color:#fecaca;color:var(--red,#be123c)}
.btn.red:active{background:#fef2f2}

/* ---------------------------------------------------------------------
   1910-2 PART D — the four components' own rules, moved here by 1910-5.
   ---------------------------------------------------------------------
   Only the genuinely NEW structures are here. The chips are `.chip`, the
   status badge is `.pill`, the buttons are `.btn` and its variants, the
   rows are `.row`/`.grow`/`.name`/`.meta` — all of them the ones every
   other screen already uses, because J10 and M10 say the same action
   looks the same everywhere and a second copy is A11.

   The footer is a GRID and not a flex row, and that is F152-10 in one
   line: a wrapping flex row LINE-BREAKS BEFORE IT SHRINKS, so three
   buttons that do not quite fit put one of them on a row of its own —
   which is the fault S39 is named for. Three equal columns cannot.
   --------------------------------------------------------------------- */
/* STANDARD 107, AND THE ONE RISK OF MOVING THESE: this file is a <link>
   in <head>, so every rule below now comes BEFORE each page's own
   <style> blocks instead of after them. At EQUAL specificity document
   order decides, so a component rule composed on an existing class
   would have silently lost to it — `.ui1910n{align-items:flex-start}`
   to `.row{align-items:center}`, measurably, the moment it moved. Each
   rule that sits ON an existing class therefore NAMES that class, so it
   wins on specificity and not on where it happens to live. */
.card.ls1910head{padding-bottom:12px}
.ls1910bar{display:flex;align-items:center;gap:12px;margin-top:8px}
.ls1910n{flex:1 1 auto;min-width:0;font-size:13px;font-weight:900;color:var(--dim)}
.btn.ls1910new{flex:0 0 auto;width:auto;min-width:96px}
.field.ls1910find{margin-top:10px}
.chips.ls1910chips{margin-top:8px}
.card.ls1910list{padding:0}
.row.ls1910row{padding:8px 12px;border-top:1px solid var(--line);min-height:56px}
.card.ls1910list .row.ls1910row:first-child{border-top:0}
.ls1910ic{flex:0 0 auto;width:28px;height:28px;display:flex;align-items:center;
  justify-content:center}
.ls1910ic svg{width:28px;height:28px;display:block}
/* the whole name block is the tap target, so "tap = the thing you tapped"
   is true of the row and not only of a chevron at its end (M09, S10) */
.grow.ls1910tap{min-height:44px;display:flex;flex-direction:column;justify-content:center;
  align-items:flex-start;text-align:start;background:none;border:0;padding:0;
  font:inherit;color:inherit;cursor:pointer;width:100%}
.btn.ls1910more{flex:0 0 auto;width:44px;min-width:44px;height:44px;min-height:44px;
  padding:0;font-size:18px}
.card.ls1910empty{margin-top:12px}

.sub.ps1910sub{margin-bottom:10px}
/* the tabs scroll sideways INSIDE their own strip when there are more than
   fit, rather than squeezing each label until it is cut (S12, Standard
   136: a control off the edge does not exist, so the strip scrolls and
   every tab can still be reached) */
.ps1910tabs{display:flex;gap:6px;overflow-x:auto;-webkit-overflow-scrolling:touch;
  padding-bottom:6px;margin-bottom:10px;border-bottom:1px solid var(--line);
  scroll-behavior:smooth}
/* E1 (V162NL) — AND THE STRIP SAYS WHEN THERE IS MORE OF IT.
   The scroll above is right and stays: four tabs cannot fit across a
   390 px phone, and wrapping would put the fourth on a row of its own,
   which is the fault S39 is named for (F152-10). What was missing was
   the AFFORDANCE — the first screen with four tabs drew "Appointments"
   cut at the edge with nothing to say it could be reached, which reads
   exactly like the cut label Standard 144 forbids.
   This is the classic shadow-scroll: two white covers that scroll WITH
   the content (`local`) and two shadows pinned to the box (`scroll`), so
   a shadow is visible only while there is content past that edge, and it
   is correct in both directions without a line of script. `propsTab1910`
   scrolls the chosen tab into view, so pressing one never leaves it half
   off the edge (Standard 136). */
.ps1910tabs{
  background:
    linear-gradient(to right, var(--card,#fff) 30%, rgba(255,255,255,0)) left center,
    linear-gradient(to left,  var(--card,#fff) 30%, rgba(255,255,255,0)) right center,
    radial-gradient(farthest-side at 0 50%, rgba(2,41,90,.16), rgba(2,41,90,0)) left center,
    radial-gradient(farthest-side at 100% 50%, rgba(2,41,90,.16), rgba(2,41,90,0)) right center;
  background-repeat:no-repeat;
  background-size:26px 100%, 26px 100%, 13px 100%, 13px 100%;
  background-attachment:local, local, scroll, scroll}
/* Q162-3 (2010-2, V162NL) — A PARTIAL TAB FADES; IT IS NEVER SLICED.
   QA, reading the V162NL pictures: *"the fourth tab is cut: 'Documer' at
   390 (Standard 144: shrink, never cut)."*

   MEASURED BEFORE ANYTHING WAS CHANGED, which is what settles the shape of
   the fix. At 390 px the strip is 322 px wide; E1's four tabs need 376 and
   E6's five need 434. **Five tabs cannot be made to fit a phone** — not at
   12 px, which is S11's floor for readable text, and not by renaming a
   feature to suit a strip (Appointments and Documents are what the product
   calls those things, and a layout problem is not a reason to rename one).
   Wrapping is out: a wrapping flex row line-breaks before it shrinks and
   would put the last tab on a row of its own, which is the fault S39 is
   named for (F152-10). So the strip scrolls, as Standard 136 requires —
   every tab reachable — and QA's own words allow it: *"tabs scroll
   horizontally with a half-tab hint."*

   WHAT WAS ACTUALLY WRONG was the hint. A hard clip at the container edge
   stops mid-letter and reads as a cut word; the shadow beside it is 13 px
   of grey and too quiet to say "there is more". The mask fades the last
   28 px, so a partial tab is unmistakably partial — the same information
   the shadow carries, said where the eye already is. Nothing is deleted
   (Standard 144), nothing is renamed (A3), and `propsTab1910` still scrolls
   a pressed tab fully into view, so the tab a person is reading is never
   the faded one. The padding comes down 14 → 11 px, which buys 6 px a tab
   and makes E1's four fit at 412 and above without touching a label. */
.ps1910tab{flex:0 0 auto;min-height:44px;padding:0 11px;border-radius:12px;
  border:1px solid var(--line);background:#fff;font-size:13px;font-weight:900;
  color:var(--dim);cursor:pointer;white-space:nowrap}
.ps1910tabs{
  -webkit-mask-image:linear-gradient(to right, #000 0, #000 calc(100% - 28px), rgba(0,0,0,.08) 100%);
          mask-image:linear-gradient(to right, #000 0, #000 calc(100% - 28px), rgba(0,0,0,.08) 100%)}
/* and it fades at the END edge in Arabic too, which is the left one (S03) */
.rtl .ps1910tabs,[dir="rtl"] .ps1910tabs{
  -webkit-mask-image:linear-gradient(to left, #000 0, #000 calc(100% - 28px), rgba(0,0,0,.08) 100%);
          mask-image:linear-gradient(to left, #000 0, #000 calc(100% - 28px), rgba(0,0,0,.08) 100%)}
.ps1910tab.on{background:#e0f5f6;border-color:#8fd6d8;color:#02295A}
.ps1910body{min-height:60px}
.err.ps1910err{margin-top:10px}
.ps1910foot{display:grid;grid-template-columns:1fr 1fr 1fr;gap:8px;margin-top:14px}
/* E10 (V162NL) — a sheet that keeps nothing has ONE button, full width,
   and it is never left sitting on a third of the row with two empty
   columns beside it (F152-10: no control sits on a row of its own by
   accident, and none is a third of a row by accident either) */
.ps1910foot.one1910{grid-template-columns:1fr}
.ps1910foot .btn{width:100%;min-width:0}

.cl1910grp{margin-top:10px}
.cl1910gh{font-size:13px;font-weight:900;color:var(--dim);padding:0 2px 4px}
.row.cl1910row,.row.cl1910all{padding:6px 2px;min-height:44px}
.row.cl1910all{border-bottom:1px solid var(--line);margin-bottom:4px}
/* the label IS the target, so the words are as pressable as the box (S10) */
.cl1910lab{display:flex;align-items:flex-start;gap:10px;width:100%;min-height:44px;
  cursor:pointer}
.cl1910box{flex:0 0 auto;width:22px;height:22px;margin-top:10px}
.row.cl1910row.off{opacity:.62}
.row.cl1910row.off .cl1910lab{cursor:not-allowed}
.meta.cl1910why{margin-top:2px}

.ui1910{margin-top:10px}
.row.ui1910n{align-items:flex-start;padding:2px 0}
.ui1910acts{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:10px}
.ui1910acts .btn{width:100%;min-width:0}
/* one action alone takes the whole width rather than half of it with a gap
   where its neighbour would be (J12 — no empty space-filling) */
.ui1910acts .btn:only-child{grid-column:1 / -1}
@media (max-width:359px){
  /* 320px: three equal columns of a sheet 320 wide leave about 96px each,
     which still holds "Cancel" at 13px. The labels are never removed
     (Standard 144) — only the padding gives. */
  .ps1910foot{gap:6px}
  .ps1910foot .btn{padding:0 6px;font-size:12.5px}
  .btn.ls1910new{min-width:84px}
}

/* 1910-5 — the Filters button on the customer's Find a place. One 44px
   control where nine chips used to wrap onto two rows (J12), with the
   count of what is on as the shared badge, so a filter is never on
   without the screen saying so. */
.btn.filt1910{width:auto;min-width:120px;gap:8px}

/* 1910-5 — the "‹ Cities" step-back inside a place picker. It is in the
   shared sheet, so both the provider's Branch Profile picker and the
   customer's Where sheet use the one rule; the portal's own picker had
   the class and no rule at all, so it was a full-width button where a
   small one belongs. */
.btn.pl1910back{width:auto;min-width:96px;margin:4px 12px 2px}

/* ---------------------------------------------------------------------
   1910-5 — A PROPERTIES SHEET IS A SIDE PANEL ON A WIDE SCREEN.
   ---------------------------------------------------------------------
   His words: *"the 900/1440 layouts use the same components (a
   properties sheet becomes a side panel on wide screens, never a
   different design)."*

   So this is a PLACEMENT rule and nothing else. The markup is identical
   at every width — the same frame, the same tabs, the same Cancel ·
   Apply · OK grid in the same order — because a second layout written
   for wide screens is a second design, and the next change then has to
   be made twice (A5, A11). On a phone it is a bottom sheet (M06). From
   900px it is anchored to the END edge, full height, so the list it was
   opened from stays visible beside it, which is the whole point of a
   properties panel on a desktop.

   It mirrors in Arabic with no rule of its own, because `inset-inline`
   is written in logical edges and not in left and right (S03, J09).
   --------------------------------------------------------------------- */
@media (min-width:900px){
  .sheet.ps1910sheet{
    inset:0 auto 0 auto;
    inset-inline-end:0;
    inset-inline-start:auto;
    width:min(480px, 42vw);
    max-width:none;
    margin:0;
    max-height:100vh;
    height:100vh;
    border-radius:0;
    padding:12px 0 16px;
    box-shadow:-12px 0 40px rgba(15,23,42,.22);
  }
  /* the grab handle is for a thumb dragging a bottom sheet; a panel is
     not dragged, so it is not drawn (J12 — nothing decorative) */
  .sheet.ps1910sheet > .grab{display:none}
}

/* E9 (V162NL) — the picture inside the photo's own sheet. The list's
   thumbnail keeps the size it has had since Slice D; this is the same
   picture, big enough to look at before deciding to take it down. */
.a1pic156.big{width:100%;max-width:260px;height:auto;border-radius:12px}
