/*
 * ONE STYLE AUTHORITY.
 *
 * Four layers, in cascade order, and nothing else styles the portal:
 *
 *   1. ow_foundation    tokens + typography + base element rules
 *   2. ow_components    the shared component layer (the design deliverable),
 *                       with the shared table (layer 3) folded into it
 *   3. billing          composed ON ow_components, namespaced .billing-page
 *   4. kept third-party sheets (see KEPT, below)
 *
 * Bootstrap is gone. This is the decision that makes the rest possible: its
 * global selectors (`.btn`, `.form-control`, `.nav`, `.table`, the grid, the
 * `.navbar`) fought the token layer on every screen, and every one of the
 * removed page sheets below existed largely to win that fight back.
 *
 * The page-by-page retirement sequencing is deliberately NOT followed here.
 * That rule protected screens still running on legacy CSS in production — and
 * this branch does not ship until every screen is redesigned on the design
 * system, so there is nothing to protect and a half-retired cascade is worse
 * than a fully retired one. An unmigrated screen renders unstyled until it is
 * rebuilt. That is the intended, visible signal of what is left to do.
 *
 * KEPT, and each for a stated reason — none of these style the portal chrome:
 *   fontawesome/solid/regular/v4-shims         the icon set the design uses.
 *                                              The brands sheet is NOT
 *                                              required: no screen uses
 *                                              `fab`, `fa-brands` or a brand
 *                                              glyph, so its 19.5KB of
 *                                              `content:` rules shipped to
 *                                              every page for nothing. Its
 *                                              webfont stays in
 *                                              `public/webfonts`, unrequested.
 *   lightbox, flatpickr                        third-party widget CSS, still
 *                                              mounted by live screens
 *   billing                                    layer 4, own contract, composed
 *











 */

/*!
 * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com
 * License - https://fontawesome.com/license (Commercial License)
 * Copyright 2024 Fonticons, Inc.
 */

.fa{font-family:var(--fa-style-family,"Font Awesome 6 Pro");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-duotone,.fa-light,.fa-regular,.fa-sharp,.fa-sharp-solid,.fa-solid,.fa-thin,.fab,.fad,.fal,.far,.fas,.fasl,.fasr,.fass,.fast,.fat{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-light,.fa-regular,.fa-solid,.fa-thin,.fal,.far,.fas,.fat{font-family:"Font Awesome 6 Pro"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-classic.fa-duotone,.fa-duotone,.fad{font-family:"Font Awesome 6 Duotone"}.fa-sharp,.fasl,.fasr,.fass,.fast{font-family:"Font Awesome 6 Sharp"}.fa-sharp,.fass{font-weight:900}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,0));transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)}

.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-wagon-covered:before{content:"\f8ee"}.fa-line-height:before{content:"\f871"}.fa-bagel:before{content:"\e3d7"}.fa-transporter-7:before{content:"\e2a8"}.fa-at:before{content:"\40"}.fa-rectangles-mixed:before{content:"\e323"}.fa-phone-arrow-up-right:before,.fa-phone-arrow-up:before,.fa-phone-outgoing:before{content:"\e224"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-circle-l:before{content:"\e114"}.fa-head-side-goggles:before,.fa-head-vr:before{content:"\f6ea"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-face-hand-yawn:before{content:"\e379"}.fa-gauge-simple-min:before,.fa-tachometer-slowest:before{content:"\f62d"}.fa-stethoscope:before{content:"\f0f1"}.fa-coffin:before{content:"\f6c6"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-bowl-salad:before,.fa-salad:before{content:"\f81e"}.fa-info:before{content:"\f129"}.fa-robot-astromech:before{content:"\e2d2"}.fa-ring-diamond:before{content:"\e5ab"}.fa-fondue-pot:before{content:"\e40d"}.fa-theta:before{content:"\f69e"}.fa-face-hand-peeking:before{content:"\e481"}.fa-square-user:before{content:"\e283"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-tire-pressure-warning:before{content:"\f633"}.fa-wifi-2:before,.fa-wifi-fair:before{content:"\f6ab"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-mp3-player:before{content:"\f8ce"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-tally-4:before{content:"\e297"}.fa-rectangle-history:before{content:"\e4a2"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-sun-haze:before{content:"\f765"}.fa-text-size:before{content:"\f894"}.fa-ufo:before{content:"\e047"}.fa-fork:before,.fa-utensil-fork:before{content:"\f2e3"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-mobile-signal:before{content:"\e1ef"}.fa-barcode-scan:before{content:"\f465"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-folder-arrow-down:before,.fa-folder-download:before{content:"\e053"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-face-icicles:before{content:"\e37c"}.fa-shovel:before{content:"\f713"}.fa-door-open:before{content:"\f52b"}.fa-films:before{content:"\e17a"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-face-glasses:before{content:"\e377"}.fa-nfc:before{content:"\e1f7"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-closed-captioning-slash:before{content:"\e135"}.fa-calculator-alt:before,.fa-calculator-simple:before{content:"\f64c"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-sliders-up:before,.fa-sliders-v:before{content:"\f3f1"}.fa-location-minus:before,.fa-map-marker-minus:before{content:"\f609"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-ski-boot:before{content:"\e3cc"}.fa-rectangle-sd:before,.fa-standard-definition:before{content:"\e28a"}.fa-h1:before{content:"\f313"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-message-bot:before{content:"\e3b8"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-light-ceiling:before{content:"\e016"}.fa-comment-alt-exclamation:before,.fa-message-exclamation:before{content:"\f4a5"}.fa-bowl-scoop:before,.fa-bowl-shaved-ice:before{content:"\e3de"}.fa-square-x:before{content:"\e286"}.fa-building-memo:before{content:"\e61e"}.fa-utility-pole-double:before{content:"\e2c4"}.fa-flag-checkered:before{content:"\f11e"}.fa-chevron-double-up:before,.fa-chevrons-up:before{content:"\f325"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-user-vneck:before{content:"\e461"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-arrow-square-right:before,.fa-square-arrow-right:before{content:"\f33b"}.fa-location-plus:before,.fa-map-marker-plus:before{content:"\f60a"}.fa-lightbulb-exclamation-on:before{content:"\e1ca"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-crate-empty:before{content:"\e151"}.fa-diagram-predecessor:before{content:"\e477"}.fa-transporter:before{content:"\e042"}.fa-calendar-circle-user:before{content:"\e471"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-person-carry-box:before,.fa-person-carry:before{content:"\f4cf"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-union:before{content:"\f6a2"}.fa-chevron-double-left:before,.fa-chevrons-left:before{content:"\f323"}.fa-circle-heart:before,.fa-heart-circle:before{content:"\f4c7"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-bring-forward:before{content:"\f856"}.fa-square-p:before{content:"\e279"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-sigma:before{content:"\f68b"}.fa-camera-movie:before{content:"\f8a9"}.fa-bong:before{content:"\f55c"}.fa-clarinet:before{content:"\f8ad"}.fa-truck-flatbed:before{content:"\e2b6"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-arrows-rotate-reverse:before{content:"\e630"}.fa-leaf-heart:before{content:"\f4cb"}.fa-house-building:before{content:"\e1b1"}.fa-cheese-swiss:before{content:"\f7f0"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-bow-arrow:before{content:"\f6b9"}.fa-cart-xmark:before{content:"\e0dd"}.fa-hexagon-xmark:before,.fa-times-hexagon:before,.fa-xmark-hexagon:before{content:"\f2ee"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-merge:before{content:"\e526"}.fa-pager:before{content:"\f815"}.fa-cart-minus:before{content:"\e0db"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-pan-frying:before{content:"\e42c"}.fa-grid-3:before,.fa-grid:before{content:"\e195"}.fa-football-helmet:before{content:"\f44f"}.fa-hand-love:before{content:"\e1a5"}.fa-trees:before{content:"\f724"}.fa-strikethrough:before{content:"\f0cc"}.fa-page:before{content:"\e428"}.fa-k:before{content:"\4b"}.fa-diagram-previous:before{content:"\e478"}.fa-gauge-min:before,.fa-tachometer-alt-slowest:before{content:"\f628"}.fa-folder-grid:before{content:"\e188"}.fa-eggplant:before{content:"\e16c"}.fa-excavator:before{content:"\e656"}.fa-ram:before{content:"\f70a"}.fa-landmark-flag:before{content:"\e51c"}.fa-lips:before{content:"\f600"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-desktop-arrow-down:before{content:"\e155"}.fa-code-pull-request:before{content:"\e13c"}.fa-pumpkin:before{content:"\f707"}.fa-clipboard-list:before{content:"\f46d"}.fa-pen-field:before{content:"\e211"}.fa-blueberries:before{content:"\e2e8"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-note:before{content:"\e1ff"}.fa-arrow-down-to-square:before{content:"\e096"}.fa-user-check:before{content:"\f4fc"}.fa-cloud-xmark:before{content:"\e35f"}.fa-vial-virus:before{content:"\e597"}.fa-book-alt:before,.fa-book-blank:before{content:"\f5d9"}.fa-golf-flag-hole:before{content:"\e3ac"}.fa-comment-alt-arrow-down:before,.fa-message-arrow-down:before{content:"\e1db"}.fa-face-unamused:before{content:"\e39f"}.fa-sheet-plastic:before{content:"\e571"}.fa-circle-9:before{content:"\e0f6"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-pencil-slash:before{content:"\e215"}.fa-bowling-pins:before{content:"\f437"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-down-right:before{content:"\e16b"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-webhook:before{content:"\e5d5"}.fa-blinds-open:before{content:"\f8fc"}.fa-fence:before{content:"\e303"}.fa-arrow-alt-up:before,.fa-up:before{content:"\f357"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-drumstick:before{content:"\f6d6"}.fa-square-v:before{content:"\e284"}.fa-face-awesome:before,.fa-gave-dandy:before{content:"\e409"}.fa-dial-off:before{content:"\e162"}.fa-toggle-off:before{content:"\f204"}.fa-face-smile-horns:before{content:"\e391"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-grapes:before{content:"\e306"}.fa-person-drowning:before{content:"\e545"}.fa-dial-max:before{content:"\e15e"}.fa-circle-m:before{content:"\e115"}.fa-calendar-image:before{content:"\e0d4"}.fa-caret-circle-down:before,.fa-circle-caret-down:before{content:"\f32d"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-shish-kebab:before{content:"\f821"}.fa-spray-can:before{content:"\f5bd"}.fa-alarm-snooze:before{content:"\f845"}.fa-scarecrow:before{content:"\f70d"}.fa-truck-monster:before{content:"\f63b"}.fa-gift-card:before{content:"\f663"}.fa-w:before{content:"\57"}.fa-code-pull-request-draft:before{content:"\e3fa"}.fa-square-b:before{content:"\e264"}.fa-elephant:before{content:"\f6da"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-message-question:before{content:"\e1e3"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-square-3:before{content:"\e258"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-microwave:before{content:"\e01b"}.fa-chf-sign:before{content:"\e602"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-cart-circle-arrow-up:before{content:"\e3f0"}.fa-trash-clock:before{content:"\e2b0"}.fa-reflect-both:before{content:"\e66f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-sprinkler-ceiling:before{content:"\e44c"}.fa-browsers:before{content:"\e0cb"}.fa-trillium:before{content:"\e588"}.fa-music-slash:before{content:"\f8d1"}.fa-truck-ramp:before{content:"\f4e0"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-circle-c:before{content:"\e101"}.fa-star-christmas:before{content:"\f7d4"}.fa-chart-bullet:before{content:"\e0e1"}.fa-motorcycle:before{content:"\f21c"}.fa-tree-christmas:before{content:"\f7db"}.fa-tire-flat:before{content:"\f632"}.fa-sunglasses:before{content:"\f892"}.fa-badge:before{content:"\f335"}.fa-comment-alt-edit:before,.fa-message-edit:before,.fa-message-pen:before{content:"\f4a4"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-file-mp3:before{content:"\e648"}.fa-arrow-progress:before{content:"\e5df"}.fa-chess-rook-alt:before,.fa-chess-rook-piece:before{content:"\f448"}.fa-square-root:before{content:"\f697"}.fa-album-collection-circle-plus:before{content:"\e48e"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-sign-post:before{content:"\e624"}.fa-face-angry-horns:before{content:"\e368"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-tombstone:before{content:"\f720"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-list-music:before{content:"\f8c9"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-mustache:before{content:"\e5bc"}.fa-hyphen:before{content:"\2d"}.fa-table:before{content:"\f0ce"}.fa-user-chef:before{content:"\e3d2"}.fa-comment-alt-image:before,.fa-message-image:before{content:"\e1e0"}.fa-users-medical:before{content:"\f830"}.fa-sensor-alert:before,.fa-sensor-triangle-exclamation:before{content:"\e029"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-face-mask:before{content:"\e37f"}.fa-pickleball:before{content:"\e435"}.fa-star-sharp-half:before{content:"\e28c"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-meat:before{content:"\f814"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-empty-set:before{content:"\f656"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-bird:before{content:"\e469"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-heart-half-alt:before,.fa-heart-half-stroke:before{content:"\e1ac"}.fa-file-circle-question:before{content:"\e4ef"}.fa-truck-utensils:before{content:"\e628"}.fa-laptop-code:before{content:"\f5fc"}.fa-joystick:before{content:"\f8c5"}.fa-grill-fire:before{content:"\e5a4"}.fa-rectangle-vertical-history:before{content:"\e237"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-keyboard-left:before{content:"\e1c3"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-face-beam-hand-over-mouth:before{content:"\e47c"}.fa-droplet-percent:before,.fa-humidity:before{content:"\f750"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-corn:before{content:"\f6c7"}.fa-roller-coaster:before{content:"\e324"}.fa-photo-film-music:before{content:"\e228"}.fa-radar:before{content:"\e024"}.fa-sickle:before{content:"\f822"}.fa-film:before{content:"\f008"}.fa-coconut:before{content:"\e2f6"}.fa-ruler-horizontal:before{content:"\f547"}.fa-shield-cross:before{content:"\f712"}.fa-cassette-tape:before{content:"\f8ab"}.fa-square-terminal:before{content:"\e32a"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-comment-middle:before{content:"\e149"}.fa-trash-can-list:before{content:"\e2ab"}.fa-block:before{content:"\e46a"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-face-frown-slight:before{content:"\e376"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-sidebar-flip:before{content:"\e24f"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-temperature-list:before{content:"\e299"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-pipe-section:before{content:"\e438"}.fa-space-station-moon-alt:before,.fa-space-station-moon-construction:before{content:"\e034"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-face-sleeping:before{content:"\e38d"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-squirrel:before{content:"\f71a"}.fa-arrow-to-top:before,.fa-arrow-up-to-line:before{content:"\f341"}.fa-flag:before{content:"\f024"}.fa-face-cowboy-hat:before{content:"\e36e"}.fa-hanukiah:before{content:"\f6e6"}.fa-chart-scatter-3d:before{content:"\e0e8"}.fa-display-chart-up:before{content:"\e5e3"}.fa-square-code:before{content:"\e267"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-times-to-slot:before,.fa-vote-nay:before,.fa-xmark-to-slot:before{content:"\f771"}.fa-box-alt:before,.fa-box-taped:before{content:"\f49a"}.fa-comment-slash:before{content:"\f4b3"}.fa-swords:before{content:"\f71d"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-album:before{content:"\f89f"}.fa-circle-n:before{content:"\e118"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-key-skeleton-left-right:before{content:"\e3b4"}.fa-comment-lines:before{content:"\f4b0"}.fa-luchador-mask:before,.fa-luchador:before,.fa-mask-luchador:before{content:"\f455"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-shredder:before{content:"\f68a"}.fa-book-open-alt:before,.fa-book-open-cover:before{content:"\e0c0"}.fa-sandwich:before{content:"\f81f"}.fa-peseta-sign:before{content:"\e221"}.fa-parking-slash:before,.fa-square-parking-slash:before{content:"\f617"}.fa-train-tunnel:before{content:"\e454"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-face-anguished:before{content:"\e369"}.fa-hockey-sticks:before{content:"\f454"}.fa-abacus:before{content:"\f640"}.fa-film-alt:before,.fa-film-simple:before{content:"\f3a0"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-tree-palm:before{content:"\f82b"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-border-center-v:before{content:"\f89d"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-clipboard-medical:before{content:"\e133"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-arrow-alt-to-top:before,.fa-up-to-line:before{content:"\f34d"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-watch-fitness:before{content:"\f63e"}.fa-clock-nine-thirty:before{content:"\e34d"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-jug:before{content:"\f8c6"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-snow-blowing:before{content:"\f761"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-arrow-down-from-line:before,.fa-arrow-from-top:before{content:"\f345"}.fa-gas-pump:before{content:"\f52f"}.fa-signal-alt-slash:before,.fa-signal-bars-slash:before{content:"\f694"}.fa-monkey:before{content:"\f6fb"}.fa-pro:before,.fa-rectangle-pro:before{content:"\e235"}.fa-house-night:before{content:"\e010"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-globe-pointer:before{content:"\e60e"}.fa-blanket:before{content:"\f498"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-comments-question-check:before{content:"\e14f"}.fa-tree:before{content:"\f1bb"}.fa-arrows-cross:before{content:"\e0a2"}.fa-backpack:before{content:"\f5d4"}.fa-square-small:before{content:"\e27e"}.fa-folder-arrow-up:before,.fa-folder-upload:before{content:"\e054"}.fa-bridge-lock:before{content:"\e4cc"}.fa-crosshairs-simple:before{content:"\e59f"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-sliders-h-square:before,.fa-square-sliders:before{content:"\f3f0"}.fa-car-side:before{content:"\f5e4"}.fa-comment-middle-top-alt:before,.fa-message-middle-top:before{content:"\e1e2"}.fa-lightbulb-on:before{content:"\f672"}.fa-knife:before,.fa-utensil-knife:before{content:"\f2e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-display-chart-up-circle-dollar:before{content:"\e5e6"}.fa-wave-sine:before{content:"\f899"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-circle-w:before{content:"\e12c"}.fa-calendar-circle:before,.fa-circle-calendar:before{content:"\e102"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sunset:before{content:"\f767"}.fa-sink:before{content:"\e06d"}.fa-calendar-exclamation:before{content:"\f334"}.fa-truck-container-empty:before{content:"\e2b5"}.fa-hand-heart:before{content:"\f4bc"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-reply-clock:before,.fa-reply-time:before{content:"\e239"}.fa-person-rays:before{content:"\e54d"}.fa-arrow-alt-right:before,.fa-right:before{content:"\f356"}.fa-circle-f:before{content:"\e10e"}.fa-users:before{content:"\f0c0"}.fa-face-pleading:before{content:"\e386"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-police-box:before{content:"\e021"}.fa-cucumber:before{content:"\e401"}.fa-head-side-brain:before{content:"\f808"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-biking-mountain:before,.fa-person-biking-mountain:before{content:"\f84b"}.fa-utensils-slash:before{content:"\e464"}.fa-print-magnifying-glass:before,.fa-print-search:before{content:"\f81a"}.fa-turn-right:before{content:"\e639"}.fa-folder-bookmark:before{content:"\e186"}.fa-arrow-turn-left-down:before{content:"\e633"}.fa-om:before{content:"\f679"}.fa-pi:before{content:"\f67e"}.fa-flask-potion:before,.fa-flask-round-potion:before{content:"\f6e1"}.fa-face-shush:before{content:"\e38c"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-calendar-circle-exclamation:before{content:"\e46e"}.fa-square-i:before{content:"\e272"}.fa-chevron-up:before{content:"\f077"}.fa-face-saluting:before{content:"\e484"}.fa-gauge-simple-low:before,.fa-tachometer-slow:before{content:"\f62c"}.fa-face-persevering:before{content:"\e385"}.fa-camera-circle:before,.fa-circle-camera:before{content:"\e103"}.fa-hand-spock:before{content:"\f259"}.fa-spider-web:before{content:"\f719"}.fa-circle-microphone:before,.fa-microphone-circle:before{content:"\e116"}.fa-book-arrow-up:before{content:"\e0ba"}.fa-popsicle:before{content:"\e43e"}.fa-command:before{content:"\e142"}.fa-blinds:before{content:"\f8fb"}.fa-stopwatch:before{content:"\f2f2"}.fa-saxophone:before{content:"\f8dc"}.fa-square-2:before{content:"\e257"}.fa-field-hockey-stick-ball:before,.fa-field-hockey:before{content:"\f44c"}.fa-arrow-up-square-triangle:before,.fa-sort-shapes-up-alt:before{content:"\f88b"}.fa-face-scream:before{content:"\e38b"}.fa-square-m:before{content:"\e276"}.fa-camera-web:before,.fa-webcam:before{content:"\f832"}.fa-comment-arrow-down:before{content:"\e143"}.fa-lightbulb-cfl:before{content:"\e5a6"}.fa-window-frame-open:before{content:"\e050"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-period:before{content:"\2e"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-up-to-dotted-line:before{content:"\e457"}.fa-thought-bubble:before{content:"\e32e"}.fa-skeleton-ribs:before{content:"\e5cb"}.fa-raygun:before{content:"\e025"}.fa-flute:before{content:"\f8b9"}.fa-acorn:before{content:"\f6ae"}.fa-video-arrow-up-right:before{content:"\e2c9"}.fa-grate-droplet:before{content:"\e194"}.fa-seal-exclamation:before{content:"\e242"}.fa-chess-bishop:before{content:"\f43a"}.fa-message-sms:before{content:"\e1e5"}.fa-coffee-beans:before{content:"\e13f"}.fa-hat-witch:before{content:"\f6e7"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-clock-three-thirty:before{content:"\e357"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-alarm-clock:before{content:"\f34e"}.fa-eclipse:before{content:"\f749"}.fa-face-relieved:before{content:"\e389"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-minus-octagon:before,.fa-octagon-minus:before{content:"\f308"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-face-zany:before{content:"\e3a4"}.fa-tricycle:before{content:"\e5c3"}.fa-land-mine-on:before{content:"\e51b"}.fa-square-arrow-up-left:before{content:"\e263"}.fa-i-cursor:before{content:"\f246"}.fa-chart-mixed-up-circle-dollar:before{content:"\e5d9"}.fa-salt-shaker:before{content:"\e446"}.fa-stamp:before{content:"\f5bf"}.fa-file-plus:before{content:"\f319"}.fa-draw-square:before{content:"\f5ef"}.fa-toilet-paper-reverse-slash:before,.fa-toilet-paper-under-slash:before{content:"\e2a1"}.fa-stairs:before{content:"\e289"}.fa-drone-alt:before,.fa-drone-front:before{content:"\f860"}.fa-glass-empty:before{content:"\e191"}.fa-dial-high:before{content:"\e15c"}.fa-user-construction:before,.fa-user-hard-hat:before,.fa-user-helmet-safety:before{content:"\f82c"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-arrow-down-left-and-arrow-up-right-to-center:before{content:"\e092"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-basketball-hoop:before{content:"\f435"}.fa-objects-align-bottom:before{content:"\e3bb"}.fa-v:before{content:"\56"}.fa-sparkles:before{content:"\f890"}.fa-squid:before{content:"\e450"}.fa-leafy-green:before{content:"\e41d"}.fa-circle-arrow-up-right:before{content:"\e0fc"}.fa-calendars:before{content:"\e0d7"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-hammer-war:before{content:"\f6e4"}.fa-circle-d:before{content:"\e104"}.fa-spider-black-widow:before{content:"\f718"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-pear:before{content:"\e20c"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-file-mov:before{content:"\e647"}.fa-triangle:before{content:"\f2ec"}.fa-apartment:before{content:"\e468"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-pepper:before{content:"\e432"}.fa-piano:before{content:"\f8d4"}.fa-gun-squirt:before{content:"\e19d"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-user-alien:before{content:"\e04a"}.fa-shield-check:before{content:"\f2f7"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-chart-candlestick:before{content:"\e0e2"}.fa-briefcase-blank:before{content:"\e0c8"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-bracket-round:before,.fa-parenthesis:before{content:"\28"}.fa-joint:before{content:"\f595"}.fa-horse-saddle:before{content:"\f8c3"}.fa-mug-marshmallows:before{content:"\f7b7"}.fa-filters:before{content:"\e17e"}.fa-bell-on:before{content:"\f8fa"}.fa-angle-right:before{content:"\f105"}.fa-dial-med:before{content:"\e15f"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-monitor-heart-rate:before,.fa-monitor-waveform:before{content:"\f611"}.fa-link-simple:before{content:"\e1cd"}.fa-whistle:before{content:"\f460"}.fa-g:before{content:"\47"}.fa-fragile:before,.fa-wine-glass-crack:before{content:"\f4bb"}.fa-slot-machine:before{content:"\e3ce"}.fa-notes-medical:before{content:"\f481"}.fa-car-wash:before{content:"\f5e6"}.fa-escalator:before{content:"\e171"}.fa-comment-image:before{content:"\e148"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-donut:before,.fa-doughnut:before{content:"\e406"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-tally-1:before{content:"\e294"}.fa-file-vector:before{content:"\e64c"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-square-dashed:before{content:"\e269"}.fa-bag-shopping-plus:before{content:"\e651"}.fa-square-j:before{content:"\e273"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-arrow-up-big-small:before,.fa-sort-size-up:before{content:"\f88e"}.fa-barcode-read:before{content:"\f464"}.fa-baguette:before{content:"\e3d8"}.fa-bowl-soft-serve:before{content:"\e46b"}.fa-face-holding-back-tears:before{content:"\e482"}.fa-arrow-alt-square-up:before,.fa-square-up:before{content:"\f353"}.fa-subway-tunnel:before,.fa-train-subway-tunnel:before{content:"\e2a3"}.fa-exclamation-square:before,.fa-square-exclamation:before{content:"\f321"}.fa-semicolon:before{content:"\3b"}.fa-bookmark:before{content:"\f02e"}.fa-fan-table:before{content:"\e004"}.fa-align-justify:before{content:"\f039"}.fa-battery-1:before,.fa-battery-low:before{content:"\e0b1"}.fa-credit-card-front:before{content:"\f38a"}.fa-brain-arrow-curved-right:before,.fa-mind-share:before{content:"\f677"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-location-smile:before,.fa-map-marker-smile:before{content:"\f60d"}.fa-arrow-left-to-line:before,.fa-arrow-to-left:before{content:"\f33e"}.fa-bullseye:before{content:"\f140"}.fa-nigiri:before,.fa-sushi:before{content:"\e48a"}.fa-comment-alt-captions:before,.fa-message-captions:before{content:"\e1de"}.fa-trash-list:before{content:"\e2b1"}.fa-bacon:before{content:"\f7e5"}.fa-option:before{content:"\e318"}.fa-raccoon:before{content:"\e613"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-head-side-gear:before{content:"\e611"}.fa-trash-plus:before{content:"\e2b2"}.fa-file-cad:before{content:"\e672"}.fa-objects-align-top:before{content:"\e3c0"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-face-anxious-sweat:before{content:"\e36a"}.fa-credit-card-blank:before{content:"\f389"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-microchip-ai:before{content:"\e1ec"}.fa-mug:before{content:"\f874"}.fa-plane-up-slash:before{content:"\e22e"}.fa-radiation:before{content:"\f7b9"}.fa-pen-circle:before{content:"\e20e"}.fa-bag-seedling:before{content:"\e5f2"}.fa-chart-simple:before{content:"\e473"}.fa-crutches:before{content:"\f7f8"}.fa-circle-parking:before,.fa-parking-circle:before{content:"\f615"}.fa-mars-stroke:before{content:"\f229"}.fa-leaf-oak:before{content:"\f6f7"}.fa-square-bolt:before{content:"\e265"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-lambda:before{content:"\f66e"}.fa-e:before{content:"\45"}.fa-pizza:before{content:"\f817"}.fa-bowl-chopsticks-noodles:before{content:"\e2ea"}.fa-h3:before{content:"\f315"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-badge-percent:before{content:"\f646"}.fa-rotate-reverse:before{content:"\e631"}.fa-user:before{content:"\f007"}.fa-sensor:before{content:"\e028"}.fa-comma:before{content:"\2c"}.fa-school-circle-check:before{content:"\e56b"}.fa-toilet-paper-reverse:before,.fa-toilet-paper-under:before{content:"\e2a0"}.fa-light-emergency:before{content:"\e41f"}.fa-arrow-down-to-arc:before{content:"\e4ae"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-light-switch:before{content:"\e017"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-heart-rate:before,.fa-wave-pulse:before{content:"\f5f8"}.fa-key:before{content:"\f084"}.fa-arrow-left-to-bracket:before{content:"\e669"}.fa-hat-santa:before{content:"\f7a7"}.fa-tamale:before{content:"\e451"}.fa-box-check:before{content:"\f467"}.fa-bullhorn:before{content:"\f0a1"}.fa-steak:before{content:"\f824"}.fa-location-crosshairs-slash:before,.fa-location-slash:before{content:"\f603"}.fa-person-dolly:before{content:"\f4d0"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-file-chart-column:before,.fa-file-chart-line:before{content:"\f659"}.fa-person-half-dress:before{content:"\e548"}.fa-folder-image:before{content:"\e18a"}.fa-calendar-edit:before,.fa-calendar-pen:before{content:"\f333"}.fa-road-bridge:before{content:"\e563"}.fa-face-smile-tear:before{content:"\e393"}.fa-comment-alt-plus:before,.fa-message-plus:before{content:"\f4a8"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-person-dress-fairy:before{content:"\e607"}.fa-rectangle-history-circle-user:before{content:"\e4a4"}.fa-building-lock:before{content:"\e4d6"}.fa-chart-line-up:before{content:"\e0e5"}.fa-mailbox:before{content:"\f813"}.fa-sign-posts:before{content:"\e625"}.fa-truck-bolt:before{content:"\e3d0"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-circle-three-quarters-stroke:before{content:"\e5d4"}.fa-person-circle-minus:before{content:"\e540"}.fa-scalpel:before{content:"\f61d"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-bell-exclamation:before{content:"\f848"}.fa-bookmark-circle:before,.fa-circle-bookmark:before{content:"\e100"}.fa-egg-fried:before{content:"\f7fc"}.fa-face-weary:before{content:"\e3a1"}.fa-uniform-martial-arts:before{content:"\e3d1"}.fa-camera-rotate:before{content:"\e0d8"}.fa-sun-dust:before{content:"\f764"}.fa-comment-text:before{content:"\e14d"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-signal-alt-4:before,.fa-signal-alt:before,.fa-signal-bars-strong:before,.fa-signal-bars:before{content:"\f690"}.fa-diamond-exclamation:before{content:"\e405"}.fa-star:before{content:"\f005"}.fa-dial-min:before{content:"\e161"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-file-caret-down:before,.fa-page-caret-down:before{content:"\e429"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-clock-seven-thirty:before{content:"\e351"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-clock-four-thirty:before{content:"\e34b"}.fa-signal-alt-3:before,.fa-signal-bars-good:before{content:"\f693"}.fa-cactus:before{content:"\f8a7"}.fa-lightbulb-gear:before{content:"\e5fd"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-plane-tail:before{content:"\e22c"}.fa-gauge-simple-max:before,.fa-tachometer-fastest:before{content:"\f62b"}.fa-circle-u:before{content:"\e127"}.fa-shield-slash:before{content:"\e24b"}.fa-phone-square-down:before,.fa-square-phone-hangup:before{content:"\e27a"}.fa-arrow-up-left:before{content:"\e09d"}.fa-transporter-1:before{content:"\e043"}.fa-peanuts:before{content:"\e431"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-bin-bottles-recycle:before{content:"\e5f6"}.fa-arrow-up-from-square:before{content:"\e09c"}.fa-file-dashed-line:before,.fa-page-break:before{content:"\f877"}.fa-bracket-curly-right:before{content:"\7d"}.fa-spider:before{content:"\f717"}.fa-clock-three:before{content:"\e356"}.fa-hands-bound:before{content:"\e4f9"}.fa-scalpel-line-dashed:before,.fa-scalpel-path:before{content:"\f61e"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-pipe-smoking:before{content:"\e3c4"}.fa-face-astonished:before{content:"\e36b"}.fa-window:before{content:"\f40e"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-ear:before{content:"\f5f0"}.fa-file-lock:before{content:"\e3a6"}.fa-diagram-venn:before{content:"\e15a"}.fa-arrow-down-from-bracket:before{content:"\e667"}.fa-x-ray:before{content:"\f497"}.fa-goal-net:before{content:"\e3ab"}.fa-coffin-cross:before{content:"\e051"}.fa-spell-check:before{content:"\f891"}.fa-location-xmark:before,.fa-map-marker-times:before,.fa-map-marker-xmark:before{content:"\f60e"}.fa-circle-quarter-stroke:before{content:"\e5d3"}.fa-lasso:before{content:"\f8c8"}.fa-slash:before{content:"\f715"}.fa-person-to-portal:before,.fa-portal-enter:before{content:"\e022"}.fa-calendar-star:before{content:"\f736"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-pegasus:before{content:"\f703"}.fa-files-medical:before{content:"\f7fd"}.fa-cannon:before{content:"\e642"}.fa-nfc-lock:before{content:"\e1f8"}.fa-person-ski-lift:before,.fa-ski-lift:before{content:"\f7c8"}.fa-square-6:before{content:"\e25b"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-wind-turbine:before{content:"\f89b"}.fa-sliders-simple:before{content:"\e253"}.fa-grid-round:before{content:"\e5da"}.fa-badge-sheriff:before{content:"\f8a2"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-intersection:before{content:"\f668"}.fa-shop-lock:before{content:"\e4a5"}.fa-family:before{content:"\e300"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-user-hair-buns:before{content:"\e3d3"}.fa-blender-phone:before{content:"\f6b6"}.fa-hourglass-clock:before{content:"\e41b"}.fa-person-seat-reclined:before{content:"\e21f"}.fa-paper-plane-alt:before,.fa-paper-plane-top:before,.fa-send:before{content:"\e20a"}.fa-comment-alt-arrow-up:before,.fa-message-arrow-up:before{content:"\e1dc"}.fa-lightbulb-exclamation:before{content:"\f671"}.fa-layer-group-minus:before,.fa-layer-minus:before{content:"\f5fe"}.fa-chart-pie-simple-circle-currency:before{content:"\e604"}.fa-circle-e:before{content:"\e109"}.fa-building-wheat:before{content:"\e4db"}.fa-gauge-max:before,.fa-tachometer-alt-fastest:before{content:"\f626"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-apostrophe:before{content:"\27"}.fa-file-png:before{content:"\e666"}.fa-fire-hydrant:before{content:"\e17f"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-video-plus:before{content:"\f4e1"}.fa-arrow-alt-square-right:before,.fa-square-right:before{content:"\f352"}.fa-comment-smile:before{content:"\f4b4"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-inbox-arrow-down:before,.fa-inbox-in:before{content:"\f310"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-circle-8:before{content:"\e0f5"}.fa-clouds-moon:before{content:"\f745"}.fa-clock-ten-thirty:before{content:"\e355"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-folder-user:before{content:"\e18e"}.fa-trash-can-xmark:before{content:"\e2ae"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-left-long-to-line:before{content:"\e41e"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-table-cells-lock:before{content:"\e679"}.fa-calendar-range:before{content:"\e0d6"}.fa-flower-daffodil:before{content:"\f800"}.fa-hand-back-point-up:before{content:"\e1a2"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-arrow-up-to-arc:before{content:"\e617"}.fa-star-exclamation:before{content:"\f2f3"}.fa-books:before{content:"\f5db"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-layer-group-plus:before,.fa-layer-plus:before{content:"\f5ff"}.fa-play-pause:before{content:"\e22f"}.fa-block-question:before{content:"\e3dd"}.fa-snooze:before,.fa-zzz:before{content:"\f880"}.fa-scanner-image:before{content:"\f8f3"}.fa-tv-retro:before{content:"\f401"}.fa-square-t:before{content:"\e280"}.fa-barn-silo:before,.fa-farm:before{content:"\f864"}.fa-chess-knight:before{content:"\f441"}.fa-bars-sort:before{content:"\e0ae"}.fa-palette-boxes:before,.fa-pallet-alt:before,.fa-pallet-boxes:before{content:"\f483"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-code-simple:before{content:"\e13d"}.fa-bolt-slash:before{content:"\e0b8"}.fa-panel-fire:before{content:"\e42f"}.fa-binary-circle-check:before{content:"\e33c"}.fa-comment-minus:before{content:"\f4b1"}.fa-burrito:before{content:"\f7ed"}.fa-violin:before{content:"\f8ed"}.fa-objects-column:before{content:"\e3c1"}.fa-chevron-square-down:before,.fa-square-chevron-down:before{content:"\f329"}.fa-comment-plus:before{content:"\f4b2"}.fa-triangle-instrument:before,.fa-triangle-music:before{content:"\f8e2"}.fa-wheelchair:before{content:"\f193"}.fa-user-pilot-tie:before{content:"\e2c1"}.fa-piano-keyboard:before{content:"\f8d5"}.fa-bed-empty:before{content:"\f8f9"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-rectangle-portrait:before,.fa-rectangle-vertical:before{content:"\f2fb"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-signal-stream:before{content:"\f8dd"}.fa-down-to-bracket:before{content:"\e4e7"}.fa-circle-z:before{content:"\e130"}.fa-stars:before{content:"\f762"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-house-day:before{content:"\e00e"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-shirt-long-sleeve:before{content:"\e3c7"}.fa-chart-pie-alt:before,.fa-chart-pie-simple:before{content:"\f64e"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-album-collection-circle-user:before{content:"\e48f"}.fa-candy:before{content:"\e3e7"}.fa-bowl-hot:before,.fa-soup:before{content:"\f823"}.fa-flatbread:before{content:"\e40b"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-signal-alt-1:before,.fa-signal-bars-weak:before{content:"\f691"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-clock-twelve:before{content:"\e358"}.fa-pepper-hot:before{content:"\f816"}.fa-citrus-slice:before{content:"\e2f5"}.fa-sheep:before{content:"\f711"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-badger-honey:before{content:"\f6b4"}.fa-h4:before{content:"\f86a"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-signal-slash:before{content:"\f695"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-taco:before{content:"\f826"}.fa-hexagon-plus:before,.fa-plus-hexagon:before{content:"\f300"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-comments-alt:before,.fa-messages:before{content:"\f4b6"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-umbrella-alt:before,.fa-umbrella-simple:before{content:"\e2bc"}.fa-rectangle-history-circle-plus:before{content:"\e4a3"}.fa-underline:before{content:"\f0cd"}.fa-prescription-bottle-pill:before{content:"\e5c0"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-binary-slash:before{content:"\e33e"}.fa-square-o:before{content:"\e278"}.fa-caduceus:before{content:"\e681"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-transporter-3:before{content:"\e045"}.fa-engine-exclamation:before,.fa-engine-warning:before{content:"\f5f2"}.fa-circle-down-right:before{content:"\e108"}.fa-square-k:before{content:"\e274"}.fa-manat-sign:before{content:"\e1d5"}.fa-money-check-edit:before,.fa-money-check-pen:before{content:"\f872"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-tilde:before{content:"\7e"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-arrow-down-square-triangle:before,.fa-sort-shapes-down-alt:before{content:"\f889"}.fa-mug-hot:before{content:"\f7b6"}.fa-dog-leashed:before{content:"\f6d4"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-face-downcast-sweat:before{content:"\e371"}.fa-mailbox-flag-up:before{content:"\e5bb"}.fa-memo-circle-info:before{content:"\e49a"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-volume-medium:before,.fa-volume:before{content:"\f6a8"}.fa-transporter-5:before{content:"\e2a6"}.fa-gauge-circle-bolt:before{content:"\e496"}.fa-coin-front:before{content:"\e3fc"}.fa-file-slash:before{content:"\e3a7"}.fa-message-arrow-up-right:before{content:"\e1dd"}.fa-treasure-chest:before{content:"\f723"}.fa-chess-queen:before{content:"\f445"}.fa-paint-brush-alt:before,.fa-paint-brush-fine:before,.fa-paintbrush-alt:before,.fa-paintbrush-fine:before{content:"\f5a9"}.fa-glasses:before{content:"\f530"}.fa-hood-cloak:before{content:"\f6ef"}.fa-square-quote:before{content:"\e329"}.fa-up-left:before{content:"\e2bd"}.fa-bring-front:before{content:"\f857"}.fa-chess-board:before{content:"\f43c"}.fa-burger-cheese:before,.fa-cheeseburger:before{content:"\f7f1"}.fa-building-circle-check:before{content:"\e4d2"}.fa-repeat-1:before{content:"\f365"}.fa-arrow-down-to-line:before,.fa-arrow-to-bottom:before{content:"\f33d"}.fa-grid-5:before{content:"\e199"}.fa-swap-arrows:before{content:"\e60a"}.fa-right-long-to-line:before{content:"\e444"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-grid-round-5:before{content:"\e5de"}.fa-tally-5:before,.fa-tally:before{content:"\f69c"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-up-from-dotted-line:before{content:"\e456"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-traffic-light-go:before{content:"\f638"}.fa-face-exhaling:before{content:"\e480"}.fa-sensor-fire:before{content:"\e02a"}.fa-user-unlock:before{content:"\e058"}.fa-hexagon-divide:before{content:"\e1ad"}.fa-00:before{content:"\e467"}.fa-crow:before{content:"\f520"}.fa-betamax:before,.fa-cassette-betamax:before{content:"\f8a4"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-nfc-magnifying-glass:before{content:"\e1f9"}.fa-file-binary:before{content:"\e175"}.fa-circle-v:before{content:"\e12a"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-bowl-scoops:before{content:"\e3df"}.fa-mistletoe:before{content:"\f7b4"}.fa-custard:before{content:"\e403"}.fa-lacrosse-stick:before{content:"\e3b5"}.fa-hockey-mask:before{content:"\f6ee"}.fa-sunrise:before{content:"\f766"}.fa-subtitles:before{content:"\e60f"}.fa-panel-ews:before{content:"\e42e"}.fa-torii-gate:before{content:"\f6a1"}.fa-cloud-exclamation:before{content:"\e491"}.fa-comment-alt-lines:before,.fa-message-lines:before{content:"\f4a6"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-floppy-disk-pen:before{content:"\e182"}.fa-image:before{content:"\f03e"}.fa-window-frame:before{content:"\e04f"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-file-zip:before{content:"\e5ee"}.fa-square-ring:before{content:"\e44f"}.fa-arrow-alt-from-top:before,.fa-down-from-line:before{content:"\f349"}.fa-caret-up:before{content:"\f0d8"}.fa-shield-times:before,.fa-shield-xmark:before{content:"\e24c"}.fa-screwdriver:before{content:"\f54a"}.fa-circle-sort-down:before,.fa-sort-circle-down:before{content:"\e031"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-forklift:before{content:"\f47a"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-bracket-square-right:before{content:"\5d"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-square-a:before{content:"\e25f"}.fa-tick:before{content:"\e32f"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-refrigerator:before{content:"\e026"}.fa-monument:before{content:"\f5a6"}.fa-octagon-xmark:before,.fa-times-octagon:before,.fa-xmark-octagon:before{content:"\f2f0"}.fa-align-slash:before{content:"\f846"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-truck-couch:before,.fa-truck-ramp-couch:before{content:"\f4dd"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-arrow-up-right-and-arrow-down-left-from-center:before{content:"\e0a0"}.fa-location-arrow-up:before{content:"\e63a"}.fa-tablets:before{content:"\f490"}.fa-360-degrees:before{content:"\e2dc"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-square-dashed-circle-plus:before{content:"\e5c2"}.fa-hand-holding-circle-dollar:before{content:"\e621"}.fa-money-simple-from-bracket:before{content:"\e313"}.fa-bat:before{content:"\f6b5"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-head-side-headphones:before{content:"\f8c2"}.fa-phone-rotary:before{content:"\f8d3"}.fa-arrow-up-to-bracket:before{content:"\e66a"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-calendar-circle-minus:before{content:"\e46f"}.fa-chopsticks:before{content:"\e3f7"}.fa-car-mechanic:before,.fa-car-wrench:before{content:"\f5e3"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-kazoo:before{content:"\f8c7"}.fa-marker:before{content:"\f5a1"}.fa-bin-bottles:before{content:"\e5f5"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-square-arrow-down-left:before{content:"\e261"}.fa-battery-bolt:before{content:"\f376"}.fa-tree-large:before{content:"\f7dd"}.fa-helicopter-symbol:before{content:"\e502"}.fa-aperture:before{content:"\e2df"}.fa-universal-access:before{content:"\f29a"}.fa-gear-complex:before{content:"\e5e9"}.fa-file-magnifying-glass:before,.fa-file-search:before{content:"\f865"}.fa-up-right:before{content:"\e2be"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-user-police:before{content:"\e333"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-teddy-bear:before{content:"\e3cf"}.fa-stocking:before{content:"\f7d5"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-image-slash:before{content:"\e1b7"}.fa-mask-snorkel:before{content:"\e3b7"}.fa-smoke:before{content:"\f760"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-battery-exclamation:before{content:"\e0b0"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-up-to-bracket:before{content:"\e66e"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-crystal-ball:before{content:"\e362"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-star-shooting:before{content:"\e036"}.fa-binary-lock:before{content:"\e33d"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-comment-edit:before,.fa-comment-pen:before{content:"\f4ae"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-banjo:before{content:"\f8a3"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-light-emergency-on:before{content:"\e420"}.fa-kerning:before{content:"\f86f"}.fa-box-open:before{content:"\f49e"}.fa-square-f:before{content:"\e270"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-arrow-from-right:before,.fa-arrow-left-from-line:before{content:"\f344"}.fa-strawberry:before{content:"\e32b"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-clock-eight-thirty:before{content:"\e346"}.fa-plane-alt:before,.fa-plane-engines:before{content:"\f3de"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-gauge-low:before,.fa-tachometer-alt-slow:before{content:"\f627"}.fa-registered:before{content:"\f25d"}.fa-trash-can-plus:before{content:"\e2ac"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-globe-snow:before{content:"\f7a3"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-integral:before{content:"\f667"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-blinds-raised:before{content:"\f8fd"}.fa-smog:before{content:"\f75f"}.fa-ufo-beam:before{content:"\e048"}.fa-caret-circle-up:before,.fa-circle-caret-up:before{content:"\f331"}.fa-user-vneck-hair-long:before{content:"\e463"}.fa-square-a-lock:before{content:"\e44d"}.fa-crutch:before{content:"\f7f7"}.fa-gas-pump-slash:before{content:"\f5f4"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-transporter-4:before{content:"\e2a5"}.fa-chart-mixed-up-circle-currency:before{content:"\e5d8"}.fa-objects-align-right:before{content:"\e3bf"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-pig:before{content:"\f706"}.fa-inbox-full:before{content:"\e1ba"}.fa-circle-envelope:before,.fa-envelope-circle:before{content:"\e10c"}.fa-construction:before,.fa-triangle-person-digging:before{content:"\f85d"}.fa-ferry:before{content:"\e4ea"}.fa-bullseye-arrow:before{content:"\f648"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-clock-seven:before{content:"\e350"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-flashlight:before{content:"\f8b8"}.fa-file-jpg:before{content:"\e646"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-square-9:before{content:"\e25e"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-dollar-square:before,.fa-square-dollar:before,.fa-usd-square:before{content:"\f2e9"}.fa-phone-arrow-right:before{content:"\e5be"}.fa-hand-holding-seedling:before{content:"\f4bf"}.fa-comment-alt-check:before,.fa-message-check:before{content:"\f4a2"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-chart-line-up-down:before{content:"\e5d7"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-watch:before{content:"\f2e1"}.fa-circle-down-left:before{content:"\e107"}.fa-text:before{content:"\f893"}.fa-projector:before{content:"\f8d6"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-tombstone-alt:before,.fa-tombstone-blank:before{content:"\f721"}.fa-chess-king-alt:before,.fa-chess-king-piece:before{content:"\f440"}.fa-circle-6:before{content:"\e0f3"}.fa-waves-sine:before{content:"\e65d"}.fa-arrow-alt-left:before,.fa-left:before{content:"\f355"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrow-alt-square-down:before,.fa-square-down:before{content:"\f350"}.fa-objects-align-center-vertical:before{content:"\e3bd"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-wreath:before{content:"\f7e2"}.fa-children:before{content:"\e4e1"}.fa-meter-droplet:before{content:"\e1ea"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-signal-4:before,.fa-signal-strong:before{content:"\f68f"}.fa-lollipop:before,.fa-lollypop:before{content:"\e424"}.fa-list-tree:before{content:"\e1d2"}.fa-envelope-open:before{content:"\f2b6"}.fa-draw-circle:before{content:"\f5ed"}.fa-cat-space:before{content:"\e001"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-rabbit-fast:before,.fa-rabbit-running:before{content:"\f709"}.fa-memo-pad:before{content:"\e1da"}.fa-mattress-pillow:before{content:"\e525"}.fa-alarm-plus:before{content:"\f844"}.fa-alicorn:before{content:"\f6b0"}.fa-comment-question:before{content:"\e14b"}.fa-gingerbread-man:before{content:"\f79d"}.fa-guarani-sign:before{content:"\e19a"}.fa-burger-fries:before{content:"\e0cd"}.fa-mug-tea:before{content:"\f875"}.fa-border-top:before{content:"\f855"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-book-circle:before,.fa-circle-book-open:before{content:"\e0ff"}.fa-arrows-to-dotted-line:before{content:"\e0a6"}.fa-fire-extinguisher:before{content:"\f134"}.fa-magnifying-glass-arrows-rotate:before{content:"\e65e"}.fa-garage-open:before{content:"\e00b"}.fa-shelves-empty:before{content:"\e246"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-watch-apple:before{content:"\e2cb"}.fa-watch-calculator:before{content:"\f8f0"}.fa-list-dropdown:before{content:"\e1cf"}.fa-cabinet-filing:before{content:"\f64b"}.fa-burger-soda:before{content:"\f858"}.fa-arrow-square-up:before,.fa-square-arrow-up:before{content:"\f33c"}.fa-greater-than-equal:before{content:"\f532"}.fa-pallet-box:before{content:"\e208"}.fa-face-confounded:before{content:"\e36c"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-truck-plow:before{content:"\f7de"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-grid-round-2:before{content:"\e5db"}.fa-comment-middle-top:before{content:"\e14a"}.fa-wave:before{content:"\e65b"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-restroom-simple:before{content:"\e23a"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-border-outer:before{content:"\f851"}.fa-hashtag-lock:before{content:"\e415"}.fa-clock-two-thirty:before{content:"\e35b"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-ticket-perforated:before{content:"\e63e"}.fa-heart-half:before{content:"\e1ab"}.fa-comment-check:before{content:"\f4ac"}.fa-square:before{content:"\f0c8"}.fa-memo:before{content:"\e1d8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-glass-citrus:before{content:"\f869"}.fa-calendar-lines-pen:before{content:"\e472"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-person-snowmobiling:before,.fa-snowmobile:before{content:"\f7d1"}.fa-face-hushed:before{content:"\e37b"}.fa-comments-dollar:before{content:"\f653"}.fa-tickets-simple:before{content:"\e659"}.fa-pickaxe:before{content:"\e5bf"}.fa-link-simple-slash:before{content:"\e1ce"}.fa-democrat:before{content:"\f747"}.fa-face-confused:before{content:"\e36d"}.fa-pinball:before{content:"\e229"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-deer:before{content:"\f78e"}.fa-input-pipe:before{content:"\e1be"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-bookmark-slash:before{content:"\e0c2"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-mace:before{content:"\f6f8"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-sausage:before{content:"\f820"}.fa-trash-can-clock:before{content:"\e2aa"}.fa-p:before{content:"\50"}.fa-broom-wide:before{content:"\e5d1"}.fa-snowflake:before{content:"\f2dc"}.fa-stomach:before{content:"\f623"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-guitar-electric:before{content:"\f8be"}.fa-arrow-turn-down-right:before{content:"\e3d6"}.fa-moon-cloud:before{content:"\f754"}.fa-bread-slice-butter:before{content:"\e3e1"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-user-group-crown:before,.fa-users-crown:before{content:"\f6a5"}.fa-circle-i:before{content:"\e111"}.fa-toilet-paper-check:before{content:"\e5b2"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-chart-waterfall:before{content:"\e0eb"}.fa-sparkle:before{content:"\e5d6"}.fa-face-party:before{content:"\e383"}.fa-kidneys:before{content:"\f5fb"}.fa-wifi-exclamation:before{content:"\e2cf"}.fa-chart-network:before{content:"\f78a"}.fa-person-dress-burst:before{content:"\e544"}.fa-dice-d4:before{content:"\f6d0"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-wheat-awn-slash:before{content:"\e338"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-dagger:before{content:"\f6cb"}.fa-podium:before{content:"\f680"}.fa-memo-circle-check:before{content:"\e1d9"}.fa-route-highway:before{content:"\f61a"}.fa-arrow-alt-to-bottom:before,.fa-down-to-line:before{content:"\f34a"}.fa-filter:before{content:"\f0b0"}.fa-square-g:before{content:"\e271"}.fa-circle-phone:before,.fa-phone-circle:before{content:"\e11b"}.fa-clipboard-prescription:before{content:"\f5e8"}.fa-user-nurse-hair:before{content:"\e45d"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-toggle-large-on:before{content:"\e5b1"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-dryer-alt:before,.fa-dryer-heat:before{content:"\f862"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-arrow-up-small-big:before,.fa-sort-size-up-alt:before{content:"\f88f"}.fa-train-track:before{content:"\e453"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-file-exclamation:before{content:"\f31a"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-moon-stars:before{content:"\f755"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-clothes-hanger:before{content:"\e136"}.fa-mobile-iphone:before,.fa-mobile-notch:before{content:"\e1ee"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-images-user:before{content:"\e1b9"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-image-polaroid-user:before{content:"\e1b6"}.fa-virus-covid:before{content:"\e4a8"}.fa-square-ellipsis:before{content:"\e26e"}.fa-pie:before{content:"\f705"}.fa-chess-knight-alt:before,.fa-chess-knight-piece:before{content:"\f442"}.fa-austral-sign:before{content:"\e0a9"}.fa-cloud-plus:before{content:"\e35e"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-bed-bunk:before{content:"\f8f8"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-clock-eight:before{content:"\e345"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-xls:before{content:"\e64d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-circle-q:before{content:"\e11e"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-face-disguise:before{content:"\e370"}.fa-circle-arrow-down-right:before{content:"\e0fa"}.fa-alien-8bit:before,.fa-alien-monster:before{content:"\f8f6"}.fa-hand-point-ribbon:before{content:"\e1a6"}.fa-poop:before{content:"\f619"}.fa-object-exclude:before{content:"\e49c"}.fa-telescope:before{content:"\e03e"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-square-list:before{content:"\e489"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-comment-code:before{content:"\e147"}.fa-sim-cards:before{content:"\e251"}.fa-starship:before{content:"\e039"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-seal:before{content:"\e241"}.fa-user-cowboy:before{content:"\f8ea"}.fa-hexagon-vertical-nft:before{content:"\e505"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-bread-loaf:before{content:"\f7eb"}.fa-rings-wedding:before{content:"\f81b"}.fa-object-group:before{content:"\f247"}.fa-french-fries:before{content:"\f803"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-calendar-arrow-down:before,.fa-calendar-download:before{content:"\e0d0"}.fa-send-back:before{content:"\f87e"}.fa-mask-ventilator:before{content:"\e524"}.fa-tickets:before{content:"\e658"}.fa-signature-lock:before{content:"\e3ca"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-octagon-plus:before,.fa-plus-octagon:before{content:"\f301"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-melon-slice:before{content:"\e311"}.fa-space-station-moon:before{content:"\e033"}.fa-comment-alt-smile:before,.fa-message-smile:before{content:"\f4aa"}.fa-cup-straw:before{content:"\e363"}.fa-arrow-alt-from-right:before,.fa-left-from-line:before{content:"\f348"}.fa-h:before{content:"\48"}.fa-basket-shopping-simple:before,.fa-shopping-basket-alt:before{content:"\e0af"}.fa-hands-heart:before,.fa-hands-holding-heart:before{content:"\f4c3"}.fa-clock-nine:before{content:"\e34c"}.fa-hammer-brush:before{content:"\e620"}.fa-tarp:before{content:"\e57b"}.fa-face-sleepy:before{content:"\e38e"}.fa-hand-horns:before{content:"\e1a9"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-circle-three-quarters:before{content:"\e125"}.fa-trophy-alt:before,.fa-trophy-star:before{content:"\f2eb"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-face-thermometer:before{content:"\e39a"}.fa-grid-round-4:before{content:"\e5dd"}.fa-sign-posts-wrench:before{content:"\e626"}.fa-shirt-running:before{content:"\e3c8"}.fa-book-circle-arrow-up:before{content:"\e0bd"}.fa-face-nauseated:before{content:"\e381"}.fa-heart:before{content:"\f004"}.fa-file-chart-pie:before{content:"\f65a"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-circle-arrow-down-left:before{content:"\e0f9"}.fa-dumpster-fire:before{content:"\f794"}.fa-hexagon-minus:before,.fa-minus-hexagon:before{content:"\f307"}.fa-arrow-alt-to-left:before,.fa-left-to-line:before{content:"\f34b"}.fa-house-crack:before{content:"\e3b1"}.fa-paw-alt:before,.fa-paw-simple:before{content:"\f701"}.fa-arrow-left-long-to-line:before{content:"\e3d4"}.fa-brackets-round:before,.fa-parentheses:before{content:"\e0c5"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-user-shakespeare:before{content:"\e2c2"}.fa-arrow-right-to-arc:before{content:"\e4b2"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-gauge-circle-plus:before{content:"\e498"}.fa-folders:before{content:"\f660"}.fa-angel:before{content:"\f779"}.fa-value-absolute:before{content:"\f6a6"}.fa-rabbit:before{content:"\f708"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-circle-euro:before{content:"\e5ce"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-diamond-half:before{content:"\e5b7"}.fa-lock-alt:before,.fa-lock-keyhole:before{content:"\f30d"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-info-square:before,.fa-square-info:before{content:"\f30f"}.fa-wifi-slash:before{content:"\f6ac"}.fa-toilet-paper-xmark:before{content:"\e5b3"}.fa-hands-holding-dollar:before,.fa-hands-usd:before{content:"\f4c5"}.fa-cube:before{content:"\f1b2"}.fa-arrow-down-triangle-square:before,.fa-sort-shapes-down:before{content:"\f888"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shutters:before{content:"\e449"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-table-tree:before{content:"\e293"}.fa-house-chimney-heart:before{content:"\e1b2"}.fa-tally-3:before{content:"\e296"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-left-to-bracket:before{content:"\e66d"}.fa-cart-circle-exclamation:before{content:"\e3f2"}.fa-sword:before{content:"\f71c"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-interrobang:before{content:"\e5ba"}.fa-plane-slash:before{content:"\e069"}.fa-circle-dashed:before{content:"\e105"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-fork-knife:before,.fa-utensils-alt:before{content:"\f2e6"}.fa-satellite-dish:before{content:"\f7c0"}.fa-badge-check:before{content:"\f336"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-slider:before{content:"\e252"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-clock-one-thirty:before{content:"\e34f"}.fa-inbox-arrow-up:before,.fa-inbox-out:before{content:"\f311"}.fa-cloud-slash:before{content:"\e137"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-octagon-check:before{content:"\e426"}.fa-flatbread-stuffed:before{content:"\e40c"}.fa-clipboard-check:before{content:"\f46c"}.fa-cart-circle-plus:before{content:"\e3f3"}.fa-shipping-timed:before,.fa-truck-clock:before{content:"\f48c"}.fa-pool-8-ball:before{content:"\e3c5"}.fa-file-audio:before{content:"\f1c7"}.fa-turn-down-left:before{content:"\e331"}.fa-lock-hashtag:before{content:"\e423"}.fa-chart-radar:before{content:"\e0e7"}.fa-staff:before{content:"\f71b"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-utility-pole:before{content:"\e2c3"}.fa-transporter-6:before{content:"\e2a7"}.fa-arrow-turn-left:before{content:"\e632"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-vector-polygon:before{content:"\e2c7"}.fa-diagram-nested:before{content:"\e157"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-tickets-perforated:before{content:"\e63f"}.fa-image-user:before{content:"\e1b8"}.fa-buoy:before{content:"\e5b5"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-border-center-h:before{content:"\f89c"}.fa-can-food:before{content:"\e3e6"}.fa-typewriter:before{content:"\f8e7"}.fa-arrow-right-from-arc:before{content:"\e4b1"}.fa-circle-k:before{content:"\e113"}.fa-face-hand-over-mouth:before{content:"\e378"}.fa-popcorn:before{content:"\f819"}.fa-house-flood:before,.fa-house-water:before{content:"\f74f"}.fa-object-subtract:before{content:"\e49e"}.fa-code-branch:before{content:"\f126"}.fa-warehouse-alt:before,.fa-warehouse-full:before{content:"\f495"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-arrow-down-from-dotted-line:before{content:"\e090"}.fa-file-doc:before{content:"\e5ed"}.fa-square-quarters:before{content:"\e44e"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-trash-xmark:before{content:"\e2b4"}.fa-caret-circle-left:before,.fa-circle-caret-left:before{content:"\f32e"}.fa-files:before{content:"\e178"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-face-clouds:before{content:"\e47d"}.fa-user-crown:before{content:"\f6a4"}.fa-basket-shopping-plus:before{content:"\e653"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-cart-circle-check:before{content:"\e3f1"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-user-tie-hair-long:before{content:"\e460"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-head-side-medical:before{content:"\f809"}.fa-arrow-turn-right:before{content:"\e635"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-user-robot:before{content:"\e04b"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-card-diamond:before{content:"\e3ea"}.fa-face-zipper:before{content:"\e3a5"}.fa-face-raised-eyebrow:before{content:"\e388"}.fa-house-signal:before{content:"\e012"}.fa-chevron-square-up:before,.fa-square-chevron-up:before{content:"\f32c"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-arrows-to-line:before{content:"\e0a7"}.fa-dolphin:before{content:"\e168"}.fa-arrow-up-right:before{content:"\e09f"}.fa-circle-r:before{content:"\e120"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-circle-sort-up:before,.fa-sort-circle-up:before{content:"\e032"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-chestnut:before{content:"\e3f6"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-heat:before{content:"\e00c"}.fa-ticket-airline:before,.fa-ticket-perforated-plane:before,.fa-ticket-plane:before{content:"\e29a"}.fa-boot-heeled:before{content:"\e33f"}.fa-arrows-minimize:before,.fa-compress-arrows:before{content:"\e0a5"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-hexagon:before{content:"\f312"}.fa-manhole:before{content:"\e1d6"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-floppy-disks:before{content:"\e183"}.fa-toilet-paper-blank-under:before,.fa-toilet-paper-reverse-alt:before{content:"\e29f"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-pump:before{content:"\e442"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-arrow-up-left-from-circle:before{content:"\e09e"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-dryer:before{content:"\f861"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-chess-bishop-alt:before,.fa-chess-bishop-piece:before{content:"\f43b"}.fa-shirt-tank-top:before{content:"\e3c9"}.fa-diploma:before,.fa-scroll-ribbon:before{content:"\f5ea"}.fa-screencast:before{content:"\e23e"}.fa-walker:before{content:"\f831"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-face-kiss-closed-eyes:before{content:"\e37d"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-file-user:before{content:"\f65c"}.fa-user-police-tie:before{content:"\e334"}.fa-face-tongue-money:before{content:"\e39d"}.fa-tennis-ball:before{content:"\f45e"}.fa-square-l:before{content:"\e275"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-calendar-arrow-up:before,.fa-calendar-upload:before{content:"\e0d1"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-scarf:before{content:"\f7c1"}.fa-album-circle-plus:before{content:"\e48c"}.fa-user-nurse-hair-long:before{content:"\e45e"}.fa-diamond:before{content:"\f219"}.fa-arrow-alt-square-left:before,.fa-square-left:before{content:"\f351"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-circle-ellipsis-vertical:before{content:"\e10b"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-grid-dividers:before{content:"\e3ad"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-face-pensive:before{content:"\e384"}.fa-user-music:before{content:"\f8eb"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-comments-alt-dollar:before,.fa-messages-dollar:before{content:"\f652"}.fa-sensor-on:before{content:"\e02b"}.fa-balloon:before{content:"\e2e3"}.fa-biohazard:before{content:"\f780"}.fa-chess-queen-alt:before,.fa-chess-queen-piece:before{content:"\f446"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-left-from-bracket:before{content:"\e66c"}.fa-house-leave:before,.fa-house-person-depart:before,.fa-house-person-leave:before{content:"\e00f"}.fa-ruler-triangle:before{content:"\f61c"}.fa-card-club:before{content:"\e3e9"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-spinner-third:before{content:"\f3f4"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-computer-mouse-scrollwheel:before,.fa-mouse-alt:before{content:"\f8cd"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-table-layout:before{content:"\e290"}.fa-narwhal:before{content:"\f6fe"}.fa-ramp-loading:before{content:"\f4d4"}.fa-calendar-circle-plus:before{content:"\e470"}.fa-toothbrush:before{content:"\f635"}.fa-border-inner:before{content:"\f84e"}.fa-paw-claws:before{content:"\f702"}.fa-kiwi-fruit:before{content:"\e30c"}.fa-traffic-light-slow:before{content:"\f639"}.fa-rectangle-code:before{content:"\e322"}.fa-head-side-virus:before{content:"\e064"}.fa-keyboard-brightness:before{content:"\e1c0"}.fa-books-medical:before{content:"\f7e8"}.fa-lightbulb-slash:before{content:"\f673"}.fa-home-blank:before,.fa-house-blank:before{content:"\e487"}.fa-square-5:before{content:"\e25a"}.fa-heart-square:before,.fa-square-heart:before{content:"\f4c8"}.fa-puzzle:before{content:"\e443"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-pipe-circle-check:before{content:"\e436"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-octagon-exclamation:before{content:"\e204"}.fa-dial-low:before{content:"\e15d"}.fa-door-closed:before{content:"\f52a"}.fa-laptop-mobile:before,.fa-phone-laptop:before{content:"\f87a"}.fa-conveyor-belt-alt:before,.fa-conveyor-belt-boxes:before{content:"\f46f"}.fa-shield-virus:before{content:"\e06c"}.fa-starfighter-alt-advanced:before,.fa-starfighter-twin-ion-engine-advanced:before{content:"\e28e"}.fa-dice-six:before{content:"\f526"}.fa-starfighter-alt:before,.fa-starfighter-twin-ion-engine:before{content:"\e038"}.fa-rocket-launch:before{content:"\e027"}.fa-mosquito-net:before{content:"\e52c"}.fa-vent-damper:before{content:"\e465"}.fa-bridge-water:before{content:"\e4ce"}.fa-ban-bug:before,.fa-debug:before{content:"\f7f9"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-garage-car:before{content:"\e00a"}.fa-square-kanban:before{content:"\e488"}.fa-hat-wizard:before{content:"\f6e8"}.fa-chart-kanban:before{content:"\e64f"}.fa-pen-fancy:before{content:"\f5ac"}.fa-coffee-pot:before{content:"\e002"}.fa-mouse-field:before{content:"\e5a8"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-shower-alt:before,.fa-shower-down:before{content:"\e24d"}.fa-box-circle-check:before{content:"\e0c4"}.fa-brightness:before{content:"\e0c9"}.fa-car-side-bolt:before{content:"\e344"}.fa-file-xml:before{content:"\e654"}.fa-ornament:before{content:"\f7b8"}.fa-phone-arrow-down-left:before,.fa-phone-arrow-down:before,.fa-phone-incoming:before{content:"\e223"}.fa-cloud-word:before{content:"\e138"}.fa-hand-fingers-crossed:before{content:"\e1a3"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-arrow-down-small-big:before,.fa-sort-size-down-alt:before{content:"\f88d"}.fa-book-medical:before{content:"\f7e6"}.fa-face-melting:before{content:"\e483"}.fa-poo:before{content:"\f2fe"}.fa-pen-alt-slash:before,.fa-pen-clip-slash:before{content:"\e20f"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-scroll-old:before{content:"\f70f"}.fa-guitars:before{content:"\f8bf"}.fa-phone-xmark:before{content:"\e227"}.fa-hose:before{content:"\e419"}.fa-clock-six:before{content:"\e352"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-billboard:before{content:"\e5cd"}.fa-square-r:before{content:"\e27c"}.fa-cubes:before{content:"\f1b3"}.fa-envelope-open-dollar:before{content:"\f657"}.fa-divide:before{content:"\f529"}.fa-sun-cloud:before{content:"\f763"}.fa-lamp-floor:before{content:"\e015"}.fa-square-7:before{content:"\e25c"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-campfire:before{content:"\f6ba"}.fa-circle-ampersand:before{content:"\e0f8"}.fa-snowflakes:before{content:"\f7cf"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-leaf-maple:before{content:"\f6f6"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-arrow-left-from-bracket:before{content:"\e668"}.fa-cup-straw-swoosh:before{content:"\e364"}.fa-temperature-hot:before,.fa-temperature-sun:before{content:"\f76a"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-high-definition:before,.fa-rectangle-hd:before{content:"\e1ae"}.fa-j:before{content:"\4a"}.fa-galaxy:before{content:"\e008"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-cherries:before{content:"\e0ec"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-circle-sort:before,.fa-sort-circle:before{content:"\e030"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-bag-shopping-minus:before{content:"\e650"}.fa-file-pdf:before{content:"\f1c1"}.fa-siren:before{content:"\e02d"}.fa-arrow-up-to-dotted-line:before{content:"\e0a1"}.fa-image-landscape:before,.fa-landscape:before{content:"\e1b5"}.fa-tank-water:before{content:"\e452"}.fa-curling-stone:before,.fa-curling:before{content:"\f44a"}.fa-gamepad-alt:before,.fa-gamepad-modern:before{content:"\e5a2"}.fa-messages-question:before{content:"\e1e7"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-briefcase-arrow-right:before{content:"\e2f2"}.fa-expand-wide:before{content:"\f320"}.fa-clock-eleven-thirty:before{content:"\e348"}.fa-rv:before{content:"\f7be"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-dreidel:before{content:"\f792"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-flower-tulip:before{content:"\f801"}.fa-people-pants-simple:before{content:"\e21a"}.fa-cloud-drizzle:before{content:"\f738"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-solar-system:before{content:"\e02f"}.fa-seal-question:before{content:"\e243"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-disc-drive:before{content:"\f8b5"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-rows:before,.fa-table-rows:before{content:"\e292"}.fa-location-exclamation:before,.fa-map-marker-exclamation:before{content:"\f608"}.fa-face-fearful:before{content:"\e375"}.fa-clipboard-user:before{content:"\f7f3"}.fa-bus-school:before{content:"\f5dd"}.fa-film-slash:before{content:"\e179"}.fa-square-arrow-down-right:before{content:"\e262"}.fa-book-sparkles:before,.fa-book-spells:before{content:"\f6b8"}.fa-washer:before,.fa-washing-machine:before{content:"\f898"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-user-visor:before{content:"\e04c"}.fa-file-plus-minus:before{content:"\e177"}.fa-chess-clock-alt:before,.fa-chess-clock-flip:before{content:"\f43e"}.fa-satellite:before{content:"\f7bf"}.fa-truck-fire:before{content:"\e65a"}.fa-plane-lock:before{content:"\e558"}.fa-steering-wheel:before{content:"\f622"}.fa-tag:before{content:"\f02b"}.fa-stretcher:before{content:"\f825"}.fa-book-law:before,.fa-book-section:before{content:"\e0c1"}.fa-inboxes:before{content:"\e1bb"}.fa-coffee-bean:before{content:"\e13e"}.fa-circle-yen:before{content:"\e5d0"}.fa-brackets-curly:before{content:"\f7ea"}.fa-ellipsis-stroke-vertical:before,.fa-ellipsis-v-alt:before{content:"\f39c"}.fa-comment:before{content:"\f075"}.fa-square-1:before{content:"\e256"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-head-side:before{content:"\f6e9"}.fa-truck-ladder:before{content:"\e657"}.fa-envelope:before{content:"\f0e0"}.fa-dolly-empty:before{content:"\f473"}.fa-face-tissue:before{content:"\e39c"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-bin-recycle:before{content:"\e5f7"}.fa-paperclip:before{content:"\f0c6"}.fa-chart-line-down:before{content:"\f64d"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-lock-a:before{content:"\e422"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-person-pinball:before{content:"\e21d"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-apple-core:before{content:"\e08f"}.fa-circle-y:before{content:"\e12f"}.fa-h6:before{content:"\e413"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-bottle-baby:before{content:"\e673"}.fa-circle-small:before{content:"\e122"}.fa-border-none:before{content:"\f850"}.fa-arrow-turn-down-left:before{content:"\e2e1"}.fa-circle-wifi-circle-wifi:before,.fa-circle-wifi-group:before{content:"\e67e"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-reflect-horizontal:before{content:"\e664"}.fa-comment-alt-medical:before,.fa-message-medical:before{content:"\f7f4"}.fa-rugby-ball:before{content:"\e3c6"}.fa-comment-music:before{content:"\f8b0"}.fa-indent:before{content:"\f03c"}.fa-tree-alt:before,.fa-tree-deciduous:before{content:"\f400"}.fa-puzzle-piece-alt:before,.fa-puzzle-piece-simple:before{content:"\e231"}.fa-truck-field-un:before{content:"\e58e"}.fa-nfc-trash:before{content:"\e1fd"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-file-times:before,.fa-file-xmark:before{content:"\f317"}.fa-home-heart:before,.fa-house-heart:before{content:"\f4c9"}.fa-house-chimney-blank:before{content:"\e3b0"}.fa-meter-bolt:before{content:"\e1e9"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-slash-back:before{content:"\5c"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-fishing-rod:before{content:"\e3a8"}.fa-hammer-crash:before{content:"\e414"}.fa-message-heart:before{content:"\e5c9"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-polaroid:before{content:"\f8aa"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-cart-arrow-up:before{content:"\e3ee"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-buoy-mooring:before{content:"\e5b6"}.fa-square-4:before{content:"\e259"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-file-eps:before{content:"\e644"}.fa-tricycle-adult:before{content:"\e5c4"}.fa-waveform:before{content:"\f8f1"}.fa-water:before{content:"\f773"}.fa-star-sharp-half-alt:before,.fa-star-sharp-half-stroke:before{content:"\e28d"}.fa-nfc-signal:before{content:"\e1fb"}.fa-plane-prop:before{content:"\e22b"}.fa-calendar-check:before{content:"\f274"}.fa-clock-desk:before{content:"\e134"}.fa-calendar-clock:before,.fa-calendar-time:before{content:"\e0d2"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-plate-utensils:before{content:"\e43b"}.fa-family-pants:before{content:"\e302"}.fa-hose-reel:before{content:"\e41a"}.fa-house-window:before{content:"\e3b3"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-music-magnifying-glass:before{content:"\e662"}.fa-crosshairs:before{content:"\f05b"}.fa-cloud-rainbow:before{content:"\f73e"}.fa-person-cane:before{content:"\e53c"}.fa-alien:before{content:"\f8f5"}.fa-tent:before{content:"\e57d"}.fa-laptop-binary:before{content:"\e5e7"}.fa-vest-patches:before{content:"\e086"}.fa-people-dress-simple:before{content:"\e218"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-bowling-ball-pin:before{content:"\e0c3"}.fa-bell-school-slash:before{content:"\f5d6"}.fa-plus-large:before{content:"\e59e"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-camera-viewfinder:before,.fa-screenshot:before{content:"\e0da"}.fa-comment-alt-music:before,.fa-message-music:before{content:"\f8af"}.fa-car-building:before{content:"\f859"}.fa-border-bottom-right:before,.fa-border-style-alt:before{content:"\f854"}.fa-octagon:before{content:"\f306"}.fa-comment-arrow-up-right:before{content:"\e145"}.fa-octagon-divide:before{content:"\e203"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-tv-music:before{content:"\f8e6"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-reel:before{content:"\e238"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-alarm-exclamation:before{content:"\f843"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-traffic-cone:before{content:"\f636"}.fa-grate:before{content:"\e193"}.fa-arrow-down-right:before{content:"\e093"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-person-from-portal:before,.fa-portal-exit:before{content:"\e023"}.fa-plane-arrival:before{content:"\f5af"}.fa-cowbell-circle-plus:before,.fa-cowbell-more:before{content:"\f8b4"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-distribute-spacing-vertical:before{content:"\e366"}.fa-signal-alt-2:before,.fa-signal-bars-fair:before{content:"\f692"}.fa-sportsball:before{content:"\e44b"}.fa-game-console-handheld-crank:before{content:"\e5b9"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-face-smile-upside-down:before{content:"\e395"}.fa-ball-pile:before{content:"\f77e"}.fa-badge-dollar:before{content:"\f645"}.fa-money-bills-alt:before,.fa-money-bills-simple:before{content:"\e1f4"}.fa-list-timeline:before{content:"\e1d1"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-keyboard-down:before{content:"\e1c2"}.fa-circle-up-right:before{content:"\e129"}.fa-cloud-bolt-moon:before,.fa-thunderstorm-moon:before{content:"\f76d"}.fa-turn-left-up:before{content:"\e638"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-bracket-round-right:before{content:"\29"}.fa-circle-sterling:before{content:"\e5cf"}.fa-circle-5:before{content:"\e0f2"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-fire-flame:before,.fa-flame:before{content:"\f6df"}.fa-arrow-alt-to-right:before,.fa-right-to-line:before{content:"\f34c"}.fa-gif:before{content:"\e190"}.fa-chess:before{content:"\f439"}.fa-trash-slash:before{content:"\e2b3"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-font-case:before{content:"\f866"}.fa-street-view:before{content:"\f21d"}.fa-arrow-down-left:before{content:"\e091"}.fa-franc-sign:before{content:"\e18f"}.fa-flask-poison:before,.fa-flask-round-poison:before{content:"\f6e0"}.fa-volume-off:before{content:"\f026"}.fa-book-circle-arrow-right:before{content:"\e0bc"}.fa-chart-user:before,.fa-user-chart:before{content:"\f6a3"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-presentation-screen:before,.fa-presentation:before{content:"\f685"}.fa-circle-bolt:before{content:"\e0fe"}.fa-face-smile-halo:before{content:"\e38f"}.fa-cart-circle-arrow-down:before{content:"\e3ef"}.fa-house-person-arrive:before,.fa-house-person-return:before,.fa-house-return:before{content:"\e011"}.fa-comment-alt-times:before,.fa-message-times:before,.fa-message-xmark:before{content:"\f4ab"}.fa-file-award:before,.fa-file-certificate:before{content:"\f5f3"}.fa-user-doctor-hair-long:before{content:"\e459"}.fa-camera-home:before,.fa-camera-security:before{content:"\f8fe"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-book-heart:before{content:"\f499"}.fa-mosque:before{content:"\f678"}.fa-duck:before{content:"\f6d8"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-flag-alt:before,.fa-flag-swallowtail:before{content:"\f74c"}.fa-person-military-rifle:before{content:"\e54b"}.fa-car-garage:before{content:"\f5e2"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-book-font:before{content:"\e0bf"}.fa-shield-plus:before{content:"\e24a"}.fa-vials:before{content:"\f493"}.fa-eye-dropper-full:before{content:"\e172"}.fa-distribute-spacing-horizontal:before{content:"\e365"}.fa-tablet-rugged:before{content:"\f48f"}.fa-temperature-frigid:before,.fa-temperature-snow:before{content:"\f768"}.fa-moped:before{content:"\e3b9"}.fa-face-smile-plus:before,.fa-smile-plus:before{content:"\f5b9"}.fa-radio-alt:before,.fa-radio-tuner:before{content:"\f8d8"}.fa-face-swear:before{content:"\e399"}.fa-water-arrow-down:before,.fa-water-lower:before{content:"\f774"}.fa-scanner-touchscreen:before{content:"\f48a"}.fa-circle-7:before{content:"\e0f4"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-person-ski-jumping:before,.fa-ski-jump:before{content:"\f7c7"}.fa-place-of-worship:before{content:"\f67f"}.fa-water-arrow-up:before,.fa-water-rise:before{content:"\f775"}.fa-waveform-lines:before,.fa-waveform-path:before{content:"\f8f2"}.fa-split:before{content:"\e254"}.fa-film-canister:before,.fa-film-cannister:before{content:"\f8b7"}.fa-folder-times:before,.fa-folder-xmark:before{content:"\f65f"}.fa-toilet-paper-alt:before,.fa-toilet-paper-blank:before{content:"\f71f"}.fa-tablet-android-alt:before,.fa-tablet-screen:before{content:"\f3fc"}.fa-hexagon-vertical-nft-slanted:before{content:"\e506"}.fa-folder-music:before{content:"\e18d"}.fa-desktop-medical:before,.fa-display-medical:before{content:"\e166"}.fa-share-all:before{content:"\f367"}.fa-peapod:before{content:"\e31c"}.fa-chess-clock:before{content:"\f43d"}.fa-axe:before{content:"\f6b2"}.fa-square-d:before{content:"\e268"}.fa-grip-vertical:before{content:"\f58e"}.fa-mobile-signal-out:before{content:"\e1f0"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-arrow-up-from-dotted-line:before{content:"\e09b"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-light-switch-on:before{content:"\e019"}.fa-arrow-down-arrow-up:before,.fa-sort-alt:before{content:"\f883"}.fa-raindrops:before{content:"\f75c"}.fa-dash:before,.fa-minus-large:before{content:"\e404"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-input-numeric:before{content:"\e1bd"}.fa-truck-tow:before{content:"\e2b8"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-car-bolt:before{content:"\e341"}.fa-arrows-maximize:before,.fa-expand-arrows:before{content:"\f31d"}.fa-faucet:before{content:"\e005"}.fa-cloud-sleet:before{content:"\f741"}.fa-lamp-street:before{content:"\e1c5"}.fa-list-radio:before{content:"\e1d0"}.fa-pen-nib-slash:before{content:"\e4a1"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-square-up-left:before{content:"\e282"}.fa-overline:before{content:"\f876"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-arrows-from-dotted-line:before{content:"\e0a3"}.fa-usb-drive:before{content:"\f8e9"}.fa-ballot:before{content:"\f732"}.fa-caret-down:before{content:"\f0d7"}.fa-location-dot-slash:before,.fa-map-marker-alt-slash:before{content:"\f605"}.fa-cards:before{content:"\e3ed"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-boxing-glove:before,.fa-glove-boxing:before{content:"\f438"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-bell-school:before{content:"\f5d5"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-folder-heart:before{content:"\e189"}.fa-circle-location-arrow:before,.fa-location-circle:before{content:"\f602"}.fa-face-head-bandage:before{content:"\e37a"}.fa-maki-roll:before,.fa-makizushi:before,.fa-sushi-roll:before{content:"\e48b"}.fa-car-bump:before{content:"\f5e0"}.fa-piggy-bank:before{content:"\f4d3"}.fa-racquet:before{content:"\f45a"}.fa-car-mirrors:before{content:"\e343"}.fa-industry-alt:before,.fa-industry-windows:before{content:"\f3b3"}.fa-bolt-auto:before{content:"\e0b6"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-flux-capacitor:before{content:"\f8ba"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-honey-pot:before{content:"\e418"}.fa-olive:before{content:"\e316"}.fa-khanda:before{content:"\f66d"}.fa-filter-list:before{content:"\e17c"}.fa-outlet:before{content:"\e01c"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-cauldron:before{content:"\f6bf"}.fa-people:before{content:"\e216"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-croissant:before{content:"\f7f6"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-swords-laser:before{content:"\e03d"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-square-u:before{content:"\e281"}.fa-wand-sparkles:before{content:"\f72b"}.fa-router:before{content:"\f8da"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-sword-laser-alt:before{content:"\e03c"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-coin:before{content:"\f85c"}.fa-laptop-slash:before{content:"\e1c7"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-circle-b:before{content:"\e0fd"}.fa-person-dress-simple:before{content:"\e21c"}.fa-pipe-collar:before{content:"\e437"}.fa-lights-holiday:before{content:"\f7b2"}.fa-citrus:before{content:"\e2f4"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-chart-tree-map:before{content:"\e0ea"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-clock-five-thirty:before{content:"\e34a"}.fa-pipe-valve:before{content:"\e439"}.fa-arrow-up-from-arc:before{content:"\e4b4"}.fa-face-spiral-eyes:before{content:"\e485"}.fa-compress-wide:before{content:"\f326"}.fa-circle-phone-hangup:before,.fa-phone-circle-down:before{content:"\e11d"}.fa-gear-complex-code:before{content:"\e5eb"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-badminton:before{content:"\e33a"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-arrow-alt-from-left:before,.fa-right-from-line:before{content:"\f347"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-shuttlecock:before{content:"\f45b"}.fa-user-hair:before{content:"\e45a"}.fa-eye-evil:before{content:"\f6db"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-swap:before{content:"\e609"}.fa-garage:before{content:"\e009"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-shovel-snow:before{content:"\f7c3"}.fa-cloud-rain:before{content:"\f73d"}.fa-face-lying:before{content:"\e37e"}.fa-sprinkler:before{content:"\e035"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-person-sledding:before,.fa-sledding:before{content:"\f7cb"}.fa-game-console-handheld:before{content:"\f8bb"}.fa-ship:before{content:"\f21a"}.fa-clock-six-thirty:before{content:"\e353"}.fa-battery-slash:before{content:"\f377"}.fa-tugrik-sign:before{content:"\e2ba"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-angles-up-down:before{content:"\e60d"}.fa-inventory:before,.fa-shelves:before{content:"\f480"}.fa-cloud-snow:before{content:"\f742"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-oven:before{content:"\e01d"}.fa-cloud-binary:before{content:"\e601"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-comment-captions:before{content:"\e146"}.fa-comments-question:before{content:"\e14e"}.fa-scribble:before{content:"\e23f"}.fa-rotate-exclamation:before{content:"\e23c"}.fa-file-circle-check:before{content:"\e5a0"}.fa-glass:before{content:"\f804"}.fa-loader:before{content:"\e1d4"}.fa-forward:before{content:"\f04e"}.fa-user-pilot:before{content:"\e2c0"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-code-pull-request-closed:before{content:"\e3f9"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-face-dotted:before{content:"\e47f"}.fa-face-worried:before{content:"\e3a3"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-court-sport:before{content:"\e643"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-vector-circle:before{content:"\e2c6"}.fa-car-circle-bolt:before{content:"\e342"}.fa-calendar-week:before{content:"\f784"}.fa-flying-disc:before{content:"\e3a9"}.fa-laptop-medical:before{content:"\f812"}.fa-square-down-right:before{content:"\e26c"}.fa-b:before{content:"\42"}.fa-seat-airline:before{content:"\e244"}.fa-eclipse-alt:before,.fa-moon-over-sun:before{content:"\f74a"}.fa-pipe:before{content:"\7c"}.fa-file-medical:before{content:"\f477"}.fa-potato:before{content:"\e440"}.fa-dice-one:before{content:"\f525"}.fa-circle-a:before{content:"\e0f7"}.fa-helmet-battle:before{content:"\f6eb"}.fa-butter:before{content:"\e3e4"}.fa-blanket-fire:before{content:"\e3da"}.fa-kiwi-bird:before{content:"\f535"}.fa-castle:before{content:"\e0de"}.fa-golf-club:before{content:"\f451"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-chart-pie-simple-circle-dollar:before{content:"\e605"}.fa-balloons:before{content:"\e2e4"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-timeline-arrow:before{content:"\e29d"}.fa-skull:before{content:"\f54c"}.fa-game-board-alt:before,.fa-game-board-simple:before{content:"\f868"}.fa-circle-video:before,.fa-video-circle:before{content:"\e12b"}.fa-chart-scatter-bubble:before{content:"\e0e9"}.fa-house-turret:before{content:"\e1b4"}.fa-banana:before{content:"\e2e5"}.fa-hand-holding-skull:before{content:"\e1a4"}.fa-people-dress:before{content:"\e217"}.fa-couch-small:before,.fa-loveseat:before{content:"\f4cc"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-block-quote:before{content:"\e0b5"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-money-check-dollar-pen:before,.fa-money-check-edit-alt:before{content:"\f873"}.fa-arrow-alt-from-bottom:before,.fa-up-from-line:before{content:"\f346"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-grid-round-2-plus:before{content:"\e5dc"}.fa-people-pants:before{content:"\e219"}.fa-mound:before{content:"\e52d"}.fa-windsock:before{content:"\f777"}.fa-circle-half:before{content:"\e110"}.fa-brake-warning:before{content:"\e0c7"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-sax-hot:before,.fa-saxophone-fire:before{content:"\f8db"}.fa-camera-web-slash:before,.fa-webcam-slash:before{content:"\f833"}.fa-folder-medical:before{content:"\e18c"}.fa-folder-cog:before,.fa-folder-gear:before{content:"\e187"}.fa-hand-wave:before{content:"\e1a7"}.fa-arrow-up-arrow-down:before,.fa-sort-up-down:before{content:"\e099"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-comment-alt-slash:before,.fa-message-slash:before{content:"\f4a9"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-trash-can-check:before{content:"\e2a9"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-person-simple:before{content:"\e220"}.fa-arrow-turn-left-up:before{content:"\e634"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-gear-code:before{content:"\e5e8"}.fa-notes:before{content:"\e202"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-trash-arrow-turn-left:before,.fa-trash-undo:before{content:"\f895"}.fa-champagne-glass:before,.fa-glass-champagne:before{content:"\f79e"}.fa-objects-align-center-horizontal:before{content:"\e3bc"}.fa-sun:before{content:"\f185"}.fa-trash-alt-slash:before,.fa-trash-can-slash:before{content:"\e2ad"}.fa-screen-users:before,.fa-users-class:before{content:"\f63d"}.fa-guitar:before{content:"\f7a6"}.fa-arrow-square-left:before,.fa-square-arrow-left:before{content:"\f33a"}.fa-square-8:before{content:"\e25d"}.fa-face-smile-hearts:before{content:"\e390"}.fa-brackets-square:before,.fa-brackets:before{content:"\f7e9"}.fa-laptop-arrow-down:before{content:"\e1c6"}.fa-hockey-stick-puck:before{content:"\e3ae"}.fa-house-tree:before{content:"\e1b3"}.fa-signal-2:before,.fa-signal-fair:before{content:"\f68d"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-circle-dollar:before,.fa-dollar-circle:before,.fa-usd-circle:before{content:"\f2e8"}.fa-horse-head:before{content:"\f7ab"}.fa-arrows-repeat:before,.fa-repeat-alt:before{content:"\f364"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-image-polaroid:before{content:"\f8c4"}.fa-wave-triangle:before{content:"\f89a"}.fa-turn-left-down:before{content:"\e637"}.fa-person-running-fast:before{content:"\e5ff"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-grill:before{content:"\e5a3"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-analytics:before,.fa-chart-mixed:before{content:"\f643"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-desktop-code:before,.fa-display-code:before{content:"\e165"}.fa-face-drooling:before{content:"\e372"}.fa-oil-temp:before,.fa-oil-temperature:before{content:"\f614"}.fa-question-square:before,.fa-square-question:before{content:"\f2fd"}.fa-air-conditioner:before{content:"\f8f4"}.fa-angle-down:before{content:"\f107"}.fa-mountains:before{content:"\f6fd"}.fa-omega:before{content:"\f67a"}.fa-car-tunnel:before{content:"\e4de"}.fa-person-dolly-empty:before{content:"\f4d1"}.fa-pan-food:before{content:"\e42b"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-tickets-airline:before,.fa-tickets-perforated-plane:before,.fa-tickets-plane:before{content:"\e29b"}.fa-tent-double-peak:before{content:"\e627"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-nfc-slash:before{content:"\e1fc"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-grid-2-plus:before{content:"\e197"}.fa-bells:before{content:"\f77f"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-envelope-badge:before,.fa-envelope-dot:before{content:"\e16f"}.fa-magnifying-glass-waveform:before{content:"\e661"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-bowl-chopsticks:before{content:"\e2e9"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-circle-s:before{content:"\e121"}.fa-box-ballot:before{content:"\f735"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-user-tie-hair:before{content:"\e45f"}.fa-podium-star:before{content:"\f758"}.fa-business-front:before,.fa-party-back:before,.fa-trian-balbot:before,.fa-user-hair-mullet:before{content:"\e45c"}.fa-microphone-stand:before{content:"\f8cb"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-family-dress:before{content:"\e301"}.fa-circle-x:before{content:"\e12e"}.fa-cabin:before{content:"\e46d"}.fa-mountain-sun:before{content:"\e52f"}.fa-chart-simple-horizontal:before{content:"\e474"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-hand-back-point-left:before{content:"\e19f"}.fa-comment-alt-dots:before,.fa-message-dots:before,.fa-messaging:before{content:"\f4a3"}.fa-file-heart:before{content:"\e176"}.fa-beer-foam:before,.fa-beer-mug:before{content:"\e0b3"}.fa-dice-d20:before{content:"\f6cf"}.fa-drone:before{content:"\f85f"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-person-fairy:before{content:"\e608"}.fa-bed:before{content:"\f236"}.fa-book-copy:before{content:"\e0be"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-square-c:before{content:"\e266"}.fa-clock-two:before{content:"\e35a"}.fa-square-ellipsis-vertical:before{content:"\e26f"}.fa-calendar-users:before{content:"\e5e2"}.fa-podcast:before{content:"\f2ce"}.fa-bee:before{content:"\e0b2"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-candy-bar:before,.fa-chocolate-bar:before{content:"\e3e8"}.fa-xmark-large:before{content:"\e59b"}.fa-pinata:before{content:"\e3c3"}.fa-file-ppt:before{content:"\e64a"}.fa-arrows-from-line:before{content:"\e0a4"}.fa-superscript:before{content:"\f12b"}.fa-bowl-spoon:before{content:"\e3e0"}.fa-hexagon-check:before{content:"\e416"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-traffic-light-stop:before{content:"\f63a"}.fa-paint-roller:before{content:"\f5aa"}.fa-accent-grave:before{content:"\60"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-circle-0:before{content:"\e0ed"}.fa-dial-med-low:before{content:"\e160"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-crab:before{content:"\e3ff"}.fa-box-full:before,.fa-box-open-full:before{content:"\f49c"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-quotes:before{content:"\e234"}.fa-pretzel:before{content:"\e441"}.fa-t-rex:before{content:"\e629"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-user-robot-xmarks:before{content:"\e4a7"}.fa-comment-alt-quote:before,.fa-message-quote:before{content:"\e1e4"}.fa-candy-corn:before{content:"\f6bd"}.fa-folder-magnifying-glass:before,.fa-folder-search:before{content:"\e18b"}.fa-notebook:before{content:"\e201"}.fa-circle-wifi:before{content:"\e67d"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-bullseye-pointer:before{content:"\f649"}.fa-eraser:before{content:"\f12d"}.fa-hexagon-image:before{content:"\e504"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-file-svg:before{content:"\e64b"}.fa-crate-apple:before{content:"\f6b1"}.fa-apple-crate:before{content:"\f6b1"}.fa-person-burst:before{content:"\e53b"}.fa-game-board:before{content:"\f867"}.fa-hat-chef:before{content:"\f86b"}.fa-hand-back-point-right:before{content:"\e1a1"}.fa-dove:before{content:"\f4ba"}.fa-snowflake-droplets:before{content:"\e5c1"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-grid-4:before{content:"\e198"}.fa-socks:before{content:"\f696"}.fa-face-sunglasses:before{content:"\e398"}.fa-inbox:before{content:"\f01c"}.fa-square-0:before{content:"\e255"}.fa-section:before{content:"\e447"}.fa-box-up:before,.fa-square-this-way-up:before{content:"\f49f"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-square-ampersand:before{content:"\e260"}.fa-envelope-open-text:before{content:"\f658"}.fa-lamp-desk:before{content:"\e014"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-poll-people:before{content:"\f759"}.fa-glass-whiskey-rocks:before,.fa-whiskey-glass-ice:before{content:"\f7a1"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-user-bounty-hunter:before{content:"\e2bf"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-diagram-sankey:before{content:"\e158"}.fa-cloud-hail-mixed:before{content:"\f73a"}.fa-circle-up-left:before{content:"\e128"}.fa-dharmachakra:before{content:"\f655"}.fa-objects-align-left:before{content:"\e3be"}.fa-oil-can-drip:before{content:"\e205"}.fa-face-smiling-hands:before{content:"\e396"}.fa-broccoli:before{content:"\e3e2"}.fa-route-interstate:before{content:"\f61b"}.fa-ear-muffs:before{content:"\f795"}.fa-hotdog:before{content:"\f80f"}.fa-transporter-empty:before{content:"\e046"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-angle-90:before{content:"\e08d"}.fa-rectangle-terminal:before{content:"\e236"}.fa-kite:before{content:"\f6f4"}.fa-drum:before{content:"\f569"}.fa-scrubber:before{content:"\f2f8"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fish-bones:before{content:"\e304"}.fa-deer-rudolph:before{content:"\f78f"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-head-side-heart:before{content:"\e1aa"}.fa-square-e:before{content:"\e26d"}.fa-meter-fire:before{content:"\e1eb"}.fa-cloud-hail:before{content:"\f739"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-money-from-bracket:before{content:"\e312"}.fa-star-half:before{content:"\f089"}.fa-car-bus:before{content:"\f85a"}.fa-speaker:before{content:"\f8df"}.fa-timer:before{content:"\e29e"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-landmark-magnifying-glass:before{content:"\e622"}.fa-grill-hot:before{content:"\e5a5"}.fa-ballot-check:before{content:"\f733"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-file-minus:before{content:"\f318"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-coffee-togo:before,.fa-cup-togo:before{content:"\f6c5"}.fa-square-down-left:before{content:"\e26b"}.fa-burger-lettuce:before{content:"\e3e3"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-chevron-double-down:before,.fa-chevrons-down:before{content:"\f322"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-signal-3:before,.fa-signal-good:before{content:"\f68e"}.fa-location-question:before,.fa-map-marker-question:before{content:"\f60b"}.fa-floppy-disk-circle-xmark:before,.fa-floppy-disk-times:before,.fa-save-circle-xmark:before,.fa-save-times:before{content:"\e181"}.fa-naira-sign:before{content:"\e1f6"}.fa-peach:before{content:"\e20b"}.fa-taxi-bus:before{content:"\e298"}.fa-bracket-curly-left:before,.fa-bracket-curly:before{content:"\7b"}.fa-lobster:before{content:"\e421"}.fa-cart-flatbed-empty:before,.fa-dolly-flatbed-empty:before{content:"\f476"}.fa-colon:before{content:"\3a"}.fa-cart-arrow-down:before{content:"\f218"}.fa-wand:before{content:"\f72a"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-table-picnic:before{content:"\e32d"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-circle-microphone-lines:before,.fa-microphone-circle-alt:before{content:"\e117"}.fa-desktop-slash:before,.fa-display-slash:before{content:"\e2fa"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-transporter-2:before{content:"\e044"}.fa-hand-receiving:before,.fa-hands-holding-diamond:before{content:"\f47c"}.fa-money-bill-simple-wave:before{content:"\e1f2"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-bell-plus:before{content:"\f849"}.fa-book-arrow-right:before{content:"\e0b9"}.fa-hospitals:before{content:"\f80e"}.fa-club:before{content:"\f327"}.fa-skull-crossbones:before{content:"\f714"}.fa-dewpoint:before,.fa-droplet-degree:before{content:"\f748"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-hand-holding-magic:before{content:"\f6e5"}.fa-watermelon-slice:before{content:"\e337"}.fa-circle-ellipsis:before{content:"\e10a"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-sd-cards:before{content:"\e240"}.fa-jug-bottle:before{content:"\e5fb"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-envelopes:before{content:"\e170"}.fa-phone-office:before{content:"\f67d"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-nfc-pen:before{content:"\e1fa"}.fa-person-harassing:before{content:"\e549"}.fa-magnifying-glass-play:before{content:"\e660"}.fa-hat-winter:before{content:"\f7a8"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-bone-break:before{content:"\f5d8"}.fa-arrow-up:before{content:"\f062"}.fa-down-from-dotted-line:before{content:"\e407"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-border-left:before{content:"\f84f"}.fa-circle-divide:before{content:"\e106"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-diagram-subtask:before{content:"\e479"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-square-y:before{content:"\e287"}.fa-user-doctor-hair:before{content:"\e458"}.fa-planet-ringed:before{content:"\e020"}.fa-mushroom:before{content:"\e425"}.fa-user-shield:before{content:"\f505"}.fa-megaphone:before{content:"\f675"}.fa-wreath-laurel:before{content:"\e5d2"}.fa-circle-exclamation-check:before{content:"\e10d"}.fa-wind:before{content:"\f72e"}.fa-box-dollar:before,.fa-box-usd:before{content:"\f4a0"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-user-headset:before{content:"\f82d"}.fa-arrows-retweet:before,.fa-retweet-alt:before{content:"\f361"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-chevron-square-right:before,.fa-square-chevron-right:before{content:"\f32b"}.fa-lacrosse-stick-ball:before{content:"\e3b6"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-user-magnifying-glass:before{content:"\e5c5"}.fa-star-sharp:before{content:"\e28b"}.fa-comment-heart:before{content:"\e5c8"}.fa-circle-1:before{content:"\e0ee"}.fa-circle-star:before,.fa-star-circle:before{content:"\e123"}.fa-fish:before{content:"\f578"}.fa-cloud-fog:before,.fa-fog:before{content:"\f74e"}.fa-waffle:before{content:"\e466"}.fa-music-alt:before,.fa-music-note:before{content:"\f8cf"}.fa-hexagon-exclamation:before{content:"\e417"}.fa-cart-shopping-fast:before{content:"\e0dc"}.fa-object-union:before{content:"\e49f"}.fa-user-graduate:before{content:"\f501"}.fa-starfighter:before{content:"\e037"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-arrow-right-long-to-line:before{content:"\e3d5"}.fa-arrow-square-down:before,.fa-square-arrow-down:before{content:"\f339"}.fa-diamond-half-stroke:before{content:"\e5b8"}.fa-clapperboard:before{content:"\e131"}.fa-chevron-square-left:before,.fa-square-chevron-left:before{content:"\f32a"}.fa-phone-intercom:before{content:"\e434"}.fa-chain-horizontal:before,.fa-link-horizontal:before{content:"\e1cb"}.fa-mango:before{content:"\e30f"}.fa-music-alt-slash:before,.fa-music-note-slash:before{content:"\f8d0"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-face-tongue-sweat:before{content:"\e39e"}.fa-globe-stand:before{content:"\f5f6"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-circle-p:before{content:"\e11a"}.fa-award-simple:before{content:"\e0ab"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-pedestal:before{content:"\e20d"}.fa-chart-pyramid:before{content:"\e0e6"}.fa-sidebar:before{content:"\e24e"}.fa-frosty-head:before,.fa-snowman-head:before{content:"\f79b"}.fa-copy:before{content:"\f0c5"}.fa-burger-glass:before{content:"\e0ce"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-bars-filter:before{content:"\e0ad"}.fa-paintbrush-pencil:before{content:"\e206"}.fa-party-bell:before{content:"\e31a"}.fa-user-vneck-hair:before{content:"\e462"}.fa-jack-o-lantern:before{content:"\f30e"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-keynote:before{content:"\f66c"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-hat-beach:before{content:"\e606"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-fort:before{content:"\e486"}.fa-cloud-check:before{content:"\e35c"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-face-smirking:before{content:"\e397"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-rhombus:before{content:"\e23b"}.fa-claw-marks:before{content:"\f6c2"}.fa-peso-sign:before{content:"\e222"}.fa-face-smile-tongue:before{content:"\e394"}.fa-cart-circle-xmark:before{content:"\e3f4"}.fa-building-shield:before{content:"\e4d8"}.fa-circle-phone-flip:before,.fa-phone-circle-alt:before{content:"\e11c"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-down-from-bracket:before{content:"\e66b"}.fa-key-skeleton:before{content:"\f6f3"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-arrow-down-to-bracket:before{content:"\e094"}.fa-lines-leaning:before{content:"\e51e"}.fa-square-q:before{content:"\e27b"}.fa-ruler-combined:before{content:"\f546"}.fa-icons-alt:before,.fa-symbols:before{content:"\f86e"}.fa-copyright:before{content:"\f1f9"}.fa-flask-gear:before{content:"\e5f1"}.fa-highlighter-line:before{content:"\e1af"}.fa-bracket-left:before,.fa-bracket-square:before,.fa-bracket:before{content:"\5b"}.fa-island-tree-palm:before,.fa-island-tropical:before{content:"\f811"}.fa-arrow-from-left:before,.fa-arrow-right-from-line:before{content:"\f343"}.fa-h2:before{content:"\f314"}.fa-equals:before{content:"\3d"}.fa-cake-slice:before,.fa-shortcake:before{content:"\e3e5"}.fa-building-magnifying-glass:before{content:"\e61c"}.fa-peanut:before{content:"\e430"}.fa-wrench-simple:before{content:"\e2d1"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-tally-2:before{content:"\e295"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-cars:before{content:"\f85b"}.fa-axe-battle:before{content:"\f6b3"}.fa-user-hair-long:before{content:"\e45b"}.fa-map:before{content:"\f279"}.fa-arrow-left-from-arc:before{content:"\e615"}.fa-file-circle-info:before{content:"\e493"}.fa-face-disappointed:before{content:"\e36f"}.fa-lasso-sparkles:before{content:"\e1c9"}.fa-clock-eleven:before{content:"\e347"}.fa-rocket:before{content:"\f135"}.fa-siren-on:before{content:"\e02e"}.fa-clock-ten:before{content:"\e354"}.fa-candle-holder:before{content:"\f6bc"}.fa-video-arrow-down-left:before{content:"\e2c8"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-floppy-disk-circle-arrow-right:before,.fa-save-circle-arrow-right:before{content:"\e180"}.fa-folder-minus:before{content:"\f65d"}.fa-planet-moon:before{content:"\e01f"}.fa-face-eyes-xmarks:before{content:"\e374"}.fa-chart-scatter:before{content:"\f7ee"}.fa-circle-gf:before{content:"\e67f"}.fa-display-arrow-down:before{content:"\e164"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-olive-branch:before{content:"\e317"}.fa-angle:before{content:"\e08c"}.fa-vacuum-robot:before{content:"\e04e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-square-divide:before{content:"\e26a"}.fa-folder-check:before{content:"\e64e"}.fa-signal-stream-slash:before{content:"\e250"}.fa-bezier-curve:before{content:"\f55b"}.fa-eye-dropper-half:before{content:"\e173"}.fa-store-lock:before{content:"\e4a6"}.fa-bell-slash:before{content:"\f1f6"}.fa-cloud-bolt-sun:before,.fa-thunderstorm-sun:before{content:"\f76e"}.fa-camera-slash:before{content:"\e0d9"}.fa-comment-quote:before{content:"\e14c"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-message-code:before{content:"\e1df"}.fa-glass-half-empty:before,.fa-glass-half-full:before,.fa-glass-half:before{content:"\e192"}.fa-fill:before{content:"\f575"}.fa-comment-alt-minus:before,.fa-message-minus:before{content:"\f4a7"}.fa-angle-up:before{content:"\f106"}.fa-dinosaur:before{content:"\e5fe"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-chain-horizontal-slash:before,.fa-link-horizontal-slash:before{content:"\e1cc"}.fa-holly-berry:before{content:"\f7aa"}.fa-nose:before{content:"\e5bd"}.fa-arrow-left-to-arc:before{content:"\e616"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-clouds:before{content:"\f744"}.fa-money-bill-simple:before{content:"\e1f1"}.fa-hand-lizard:before{content:"\f258"}.fa-table-pivot:before{content:"\e291"}.fa-filter-slash:before{content:"\e17d"}.fa-trash-can-arrow-turn-left:before,.fa-trash-can-undo:before,.fa-trash-undo-alt:before{content:"\f896"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-person-to-door:before{content:"\e433"}.fa-turntable:before{content:"\f8e4"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-signal-1:before,.fa-signal-weak:before{content:"\f68c"}.fa-clock-five:before{content:"\e349"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-computer-classic:before{content:"\f8b1"}.fa-frame:before{content:"\e495"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-ellipsis-h-alt:before,.fa-ellipsis-stroke:before{content:"\f39b"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-face-expressionless:before{content:"\e373"}.fa-down-to-dotted-line:before{content:"\e408"}.fa-cloud-music:before{content:"\f8ae"}.fa-traffic-light:before{content:"\f637"}.fa-cloud-minus:before{content:"\e35d"}.fa-thermometer:before{content:"\f491"}.fa-shield-minus:before{content:"\e249"}.fa-vr-cardboard:before{content:"\f729"}.fa-car-tilt:before{content:"\f5e5"}.fa-gauge-circle-minus:before{content:"\e497"}.fa-brightness-low:before{content:"\e0ca"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-conveyor-belt:before{content:"\f46e"}.fa-location-check:before,.fa-map-marker-check:before{content:"\f606"}.fa-coin-vertical:before{content:"\e3fd"}.fa-display:before{content:"\e163"}.fa-person-sign:before{content:"\f757"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-phone-hangup:before{content:"\e225"}.fa-signature-slash:before{content:"\e3cb"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-wheat-slash:before{content:"\e339"}.fa-trophy:before{content:"\f091"}.fa-clouds-sun:before{content:"\f746"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-face-vomit:before{content:"\e3a0"}.fa-speakers:before{content:"\f8e0"}.fa-teletype-answer:before,.fa-tty-answer:before{content:"\e2b9"}.fa-mug-tea-saucer:before{content:"\e1f5"}.fa-diagram-lean-canvas:before{content:"\e156"}.fa-alt:before{content:"\e08a"}.fa-dial-med-high:before,.fa-dial:before{content:"\e15b"}.fa-hand-peace:before{content:"\f25b"}.fa-circle-trash:before,.fa-trash-circle:before{content:"\e126"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-circle-quarters:before{content:"\e3f8"}.fa-spinner:before{content:"\f110"}.fa-tower-control:before{content:"\e2a2"}.fa-arrow-up-triangle-square:before,.fa-sort-shapes-up:before{content:"\f88a"}.fa-whale:before{content:"\f72c"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-party-horn:before{content:"\e31b"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-sun-alt:before,.fa-sun-bright:before{content:"\e28f"}.fa-warehouse:before{content:"\f494"}.fa-conveyor-belt-arm:before{content:"\e5f8"}.fa-lock-keyhole-open:before,.fa-lock-open-alt:before{content:"\f3c2"}.fa-box-fragile:before,.fa-square-fragile:before,.fa-square-wine-glass-crack:before{content:"\f49b"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-square-n:before{content:"\e277"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-meter:before{content:"\e1e8"}.fa-mandolin:before{content:"\f6f9"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-up-from-bracket:before{content:"\e590"}.fa-knife-kitchen:before{content:"\f6f5"}.fa-border-right:before{content:"\f852"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-spade:before{content:"\f2f4"}.fa-card-spade:before{content:"\e3ec"}.fa-line-columns:before{content:"\f870"}.fa-ant:before{content:"\e680"}.fa-arrow-right-to-line:before,.fa-arrow-to-right:before{content:"\f340"}.fa-person-falling-burst:before{content:"\e547"}.fa-flag-pennant:before,.fa-pennant:before{content:"\f456"}.fa-conveyor-belt-empty:before{content:"\e150"}.fa-user-group-simple:before{content:"\e603"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-camcorder:before,.fa-video-handheld:before{content:"\f8a8"}.fa-pancakes:before{content:"\e42d"}.fa-album-circle-user:before{content:"\e48d"}.fa-subtitles-slash:before{content:"\e610"}.fa-qrcode:before{content:"\f029"}.fa-dice-d10:before{content:"\f6cd"}.fa-fireplace:before{content:"\f79a"}.fa-browser:before{content:"\f37e"}.fa-pen-paintbrush:before,.fa-pencil-paintbrush:before{content:"\f618"}.fa-fish-cooked:before{content:"\f7fe"}.fa-chair-office:before{content:"\f6c1"}.fa-magnifying-glass-music:before{content:"\e65f"}.fa-nesting-dolls:before{content:"\e3ba"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-trumpet:before{content:"\f8e3"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-fire-smoke:before{content:"\f74b"}.fa-phone-missed:before{content:"\e226"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-arrows-repeat-1:before,.fa-repeat-1-alt:before{content:"\f366"}.fa-gun-slash:before{content:"\e19c"}.fa-avocado:before{content:"\e0aa"}.fa-binary:before{content:"\e33b"}.fa-glasses-alt:before,.fa-glasses-round:before{content:"\f5f5"}.fa-phone-plus:before{content:"\f4d2"}.fa-ditto:before{content:"\22"}.fa-person-seat:before{content:"\e21e"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-scythe:before{content:"\f710"}.fa-pen-nib:before{content:"\f5ad"}.fa-ban-parking:before,.fa-parking-circle-slash:before{content:"\f616"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-face-diagonal-mouth:before{content:"\e47e"}.fa-diagram-cells:before{content:"\e475"}.fa-cricket-bat-ball:before,.fa-cricket:before{content:"\f449"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-pen-line:before{content:"\e212"}.fa-atom-alt:before,.fa-atom-simple:before{content:"\f5d3"}.fa-ampersand:before{content:"\26"}.fa-carrot:before{content:"\f787"}.fa-arrow-from-bottom:before,.fa-arrow-up-from-line:before{content:"\f342"}.fa-moon:before{content:"\f186"}.fa-pen-slash:before{content:"\e213"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-square-star:before{content:"\e27f"}.fa-cheese:before{content:"\f7ef"}.fa-send-backward:before{content:"\f87f"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-compass-slash:before{content:"\f5e9"}.fa-clock-one:before{content:"\e34e"}.fa-file-music:before{content:"\f8b6"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-display-chart-up-circle-currency:before{content:"\e5e5"}.fa-skeleton:before{content:"\f620"}.fa-circle-g:before{content:"\e10f"}.fa-circle-arrow-up-left:before{content:"\e0fb"}.fa-coin-blank:before{content:"\e3fb"}.fa-broom:before{content:"\f51a"}.fa-vacuum:before{content:"\e04d"}.fa-shield-heart:before{content:"\e574"}.fa-card-heart:before{content:"\e3eb"}.fa-lightbulb-cfl-on:before{content:"\e5a7"}.fa-melon:before{content:"\e310"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-container-storage:before{content:"\f4b7"}.fa-face-pouting:before{content:"\e387"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-exploding-head:before,.fa-face-explode:before{content:"\e2fe"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-transformer-bolt:before{content:"\e2a4"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-cassette-vhs:before,.fa-vhs:before{content:"\f8ec"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-chimney:before{content:"\f78b"}.fa-object-intersect:before{content:"\e49d"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-block-brick:before,.fa-wall-brick:before{content:"\e3db"}.fa-fan:before{content:"\f863"}.fa-bags-shopping:before{content:"\f847"}.fa-paragraph-left:before,.fa-paragraph-rtl:before{content:"\f878"}.fa-person-walking-luggage:before{content:"\e554"}.fa-caravan-alt:before,.fa-caravan-simple:before{content:"\e000"}.fa-turtle:before{content:"\f726"}.fa-pencil-mechanical:before{content:"\e5ca"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-booth-curtain:before{content:"\f734"}.fa-calendar:before{content:"\f133"}.fa-box-heart:before{content:"\f49d"}.fa-trailer:before{content:"\e041"}.fa-user-doctor-message:before,.fa-user-md-chat:before{content:"\f82e"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-lighthouse:before{content:"\e612"}.fa-amp-guitar:before{content:"\f8a1"}.fa-sd-card:before{content:"\f7c2"}.fa-volume-slash:before{content:"\f2e2"}.fa-border-bottom:before{content:"\f84d"}.fa-wifi-1:before,.fa-wifi-weak:before{content:"\f6aa"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-delete-right:before{content:"\e154"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-circle-quarter:before{content:"\e11f"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-function:before{content:"\f661"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-people-simple:before{content:"\e21b"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-face-monocle:before{content:"\e380"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-calendar-lines:before,.fa-calendar-note:before{content:"\e0d5"}.fa-arrow-down-big-small:before,.fa-sort-size-down:before{content:"\f88c"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-do-not-enter:before{content:"\f5ec"}.fa-shower:before{content:"\f2cc"}.fa-dice-d8:before{content:"\f6d2"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-spinner-scale:before{content:"\e62a"}.fa-grip-dots-vertical:before{content:"\e411"}.fa-face-viewfinder:before{content:"\e2ff"}.fa-creemee:before,.fa-soft-serve:before{content:"\e400"}.fa-h5:before{content:"\e412"}.fa-hand-back-point-down:before{content:"\e19e"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-basket-shopping-minus:before{content:"\e652"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-rectangle-landscape:before,.fa-rectangle:before{content:"\f2fa"}.fa-clipboard-list-check:before{content:"\f737"}.fa-turkey:before{content:"\f725"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-ice-skate:before{content:"\f7ac"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-tomato:before{content:"\e330"}.fa-sword-laser:before{content:"\e03b"}.fa-house-circle-check:before{content:"\e509"}.fa-buildings:before{content:"\e0cc"}.fa-angle-left:before{content:"\f104"}.fa-cart-flatbed-boxes:before,.fa-dolly-flatbed-alt:before{content:"\f475"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-square-w:before{content:"\e285"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-lamp:before{content:"\f4ca"}.fa-airplay:before{content:"\e089"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-shield-quartered:before{content:"\e575"}.fa-slash-forward:before{content:"\2f"}.fa-location-pen:before,.fa-map-marker-edit:before{content:"\f607"}.fa-cloud-moon:before{content:"\f6c3"}.fa-pot-food:before{content:"\e43f"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-print-slash:before{content:"\f686"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-hand-back-point-ribbon:before{content:"\e1a0"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-tire-rugged:before{content:"\f634"}.fa-lightbulb-dollar:before{content:"\f670"}.fa-cowbell:before{content:"\f8b3"}.fa-baht-sign:before{content:"\e0ac"}.fa-corner:before{content:"\e3fe"}.fa-chevron-double-right:before,.fa-chevrons-right:before{content:"\f324"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-inhaler:before{content:"\f5f9"}.fa-handcuffs:before{content:"\e4f8"}.fa-snake:before{content:"\f716"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-note-medical:before{content:"\e200"}.fa-database:before{content:"\f1c0"}.fa-down-left:before{content:"\e16a"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-face-thinking:before{content:"\e39b"}.fa-turn-down-right:before{content:"\e455"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-scanner-keyboard:before{content:"\f489"}.fa-circle-o:before{content:"\e119"}.fa-grid-horizontal:before{content:"\e307"}.fa-comment-alt-dollar:before,.fa-message-dollar:before{content:"\f650"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-columns-3:before{content:"\e361"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-hand-holding-box:before{content:"\f47b"}.fa-input-text:before{content:"\e1bf"}.fa-window-alt:before,.fa-window-flip:before{content:"\f40f"}.fa-align-right:before{content:"\f038"}.fa-scanner-gun:before,.fa-scanner:before{content:"\f488"}.fa-tire:before{content:"\f631"}.fa-engine:before{content:"\e16e"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-caret-circle-right:before,.fa-circle-caret-right:before{content:"\f330"}.fa-turn-left:before{content:"\e636"}.fa-wheat:before{content:"\f72d"}.fa-file-spreadsheet:before{content:"\f65b"}.fa-audio-description-slash:before{content:"\e0a8"}.fa-bell-ring:before{content:"\e62c"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-chess-pawn-alt:before,.fa-chess-pawn-piece:before{content:"\f444"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-square-s:before{content:"\e27d"}.fa-barcode-alt:before,.fa-rectangle-barcode:before{content:"\f463"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-unicorn:before{content:"\f727"}.fa-bowling-ball:before{content:"\f436"}.fa-pompebled:before{content:"\e43d"}.fa-brain:before{content:"\f5dc"}.fa-watch-smart:before{content:"\e2cc"}.fa-book-user:before{content:"\f7e7"}.fa-sensor-cloud:before,.fa-sensor-smoke:before{content:"\e02c"}.fa-clapperboard-play:before{content:"\e132"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-circle-4:before{content:"\e0f1"}.fa-gifts:before{content:"\f79c"}.fa-album-collection:before{content:"\f8a0"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-cloud-showers:before{content:"\f73f"}.fa-user-clock:before{content:"\f4fd"}.fa-onion:before{content:"\e427"}.fa-clock-twelve-thirty:before{content:"\e359"}.fa-arrow-down-to-dotted-line:before{content:"\e095"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-rectangle-wide:before{content:"\f2fc"}.fa-comment-arrow-up:before{content:"\e144"}.fa-garlic:before{content:"\e40e"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-tree-decorated:before{content:"\f7dc"}.fa-mask:before{content:"\f6fa"}.fa-calendar-heart:before{content:"\e0d3"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-flower:before{content:"\f7ff"}.fa-arrow-down-from-arc:before{content:"\e614"}.fa-right-left-large:before{content:"\e5e1"}.fa-ruler-vertical:before{content:"\f548"}.fa-circles-overlap:before{content:"\e600"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-starship-freighter:before{content:"\e03a"}.fa-train-tram:before{content:"\e5b4"}.fa-bridge-suspension:before{content:"\e4cd"}.fa-trash-check:before{content:"\e2af"}.fa-user-nurse:before{content:"\f82f"}.fa-boombox:before{content:"\f8a5"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-shield-exclamation:before{content:"\e247"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-grip-dots:before{content:"\e410"}.fa-comment-exclamation:before{content:"\f4af"}.fa-pen-swirl:before{content:"\e214"}.fa-falafel:before{content:"\e40a"}.fa-circle-2:before{content:"\e0ef"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-gramophone:before{content:"\f8bd"}.fa-dice-d12:before{content:"\f6ce"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-arrow-alt-down:before,.fa-down:before{content:"\f354"}.fa-100:before,.fa-hundred-points:before{content:"\e41c"}.fa-paperclip-vertical:before{content:"\e3c2"}.fa-wind-circle-exclamation:before,.fa-wind-warning:before{content:"\f776"}.fa-location-pin-slash:before,.fa-map-marker-slash:before{content:"\f60c"}.fa-face-sad-sweat:before{content:"\e38a"}.fa-bug-slash:before{content:"\e490"}.fa-cupcake:before{content:"\e402"}.fa-light-switch-off:before{content:"\e018"}.fa-toggle-large-off:before{content:"\e5b0"}.fa-pen-fancy-slash:before{content:"\e210"}.fa-truck-container:before{content:"\f4dc"}.fa-boot:before{content:"\f782"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-file-check:before{content:"\f316"}.fa-bone:before{content:"\f5d7"}.fa-cards-blank:before{content:"\e4df"}.fa-circle-3:before{content:"\e0f0"}.fa-bench-tree:before{content:"\e2e7"}.fa-keyboard-brightness-low:before{content:"\e1c1"}.fa-ski-boot-ski:before{content:"\e3cd"}.fa-brain-circuit:before{content:"\e0c6"}.fa-user-injured:before{content:"\f728"}.fa-block-brick-fire:before,.fa-firewall:before{content:"\e3dc"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-face-smile-relaxed:before{content:"\e392"}.fa-comment-times:before,.fa-comment-xmark:before{content:"\f4b5"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-face-nose-steam:before{content:"\e382"}.fa-circle-waveform-lines:before,.fa-waveform-circle:before{content:"\e12d"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-ferris-wheel:before{content:"\e174"}.fa-computer-speaker:before{content:"\f8b2"}.fa-skull-cow:before{content:"\f8de"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-circle-t:before{content:"\e124"}.fa-sack:before{content:"\f81c"}.fa-grid-2:before{content:"\e196"}.fa-camera-cctv:before,.fa-cctv:before{content:"\f8ac"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-horizontal-rule:before{content:"\f86c"}.fa-bed-alt:before,.fa-bed-front:before{content:"\f8f7"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-file-gif:before{content:"\e645"}.fa-kip-sign:before{content:"\e1c4"}.fa-face-woozy:before{content:"\e3a2"}.fa-cloud-question:before{content:"\e492"}.fa-pineapple:before{content:"\e31f"}.fa-hand-point-left:before{content:"\f0a5"}.fa-gallery-thumbnails:before{content:"\e3aa"}.fa-circle-j:before{content:"\e112"}.fa-eyes:before{content:"\e367"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-file-caret-up:before,.fa-page-caret-up:before{content:"\e42a"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-comet:before{content:"\e003"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-reflect-vertical:before{content:"\e665"}.fa-shield-keyhole:before{content:"\e248"}.fa-file-mp4:before{content:"\e649"}.fa-barcode:before{content:"\f02a"}.fa-bulldozer:before{content:"\e655"}.fa-plus-minus:before{content:"\e43c"}.fa-sliders-v-square:before,.fa-square-sliders-vertical:before{content:"\f3f2"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-comment-middle-alt:before,.fa-message-middle:before{content:"\e1e1"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-square-z:before{content:"\e288"}.fa-comment-alt-text:before,.fa-message-text:before{content:"\e1e6"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"}
.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}
/*!
 * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com
 * License - https://fontawesome.com/license (Commercial License)
 * Copyright 2024 Fonticons, Inc.
 */

:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}
/*!
 * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com
 * License - https://fontawesome.com/license (Commercial License)
 * Copyright 2024 Fonticons, Inc.
 */

:host,:root{--fa-style-family-classic:"Font Awesome 6 Pro";--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Pro"}@font-face{font-family:"Font Awesome 6 Pro";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}
/*!
 * Font Awesome Pro 6.5.2 by @fontawesome - https://fontawesome.com
 * License - https://fontawesome.com/license (Commercial License)
 * Copyright 2024 Fonticons, Inc.
 */

.fa.fa-glass:before{content:"\f000"}.fa.fa-envelope-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-envelope-o:before{content:"\f0e0"}.fa.fa-star-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-star-o:before{content:"\f005"}.fa.fa-close:before,.fa.fa-remove:before{content:"\f00d"}.fa.fa-gear:before{content:"\f013"}.fa.fa-trash-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-trash-o:before{content:"\f2ed"}.fa.fa-home:before{content:"\f015"}.fa.fa-file-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-o:before{content:"\f15b"}.fa.fa-clock-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-clock-o:before{content:"\f017"}.fa.fa-arrow-circle-o-down{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-arrow-circle-o-down:before{content:"\f358"}.fa.fa-arrow-circle-o-up{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-arrow-circle-o-up:before{content:"\f35b"}.fa.fa-play-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-play-circle-o:before{content:"\f144"}.fa.fa-repeat:before,.fa.fa-rotate-right:before{content:"\f01e"}.fa.fa-refresh:before{content:"\f021"}.fa.fa-list-alt{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-list-alt:before{content:"\f022"}.fa.fa-dedent:before{content:"\f03b"}.fa.fa-video-camera:before{content:"\f03d"}.fa.fa-picture-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-picture-o:before{content:"\f03e"}.fa.fa-photo{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-photo:before{content:"\f03e"}.fa.fa-image{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-image:before{content:"\f03e"}.fa.fa-map-marker:before{content:"\f3c5"}.fa.fa-pencil-square-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-pencil-square-o:before{content:"\f044"}.fa.fa-edit{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-edit:before{content:"\f044"}.fa.fa-share-square-o:before{content:"\f14d"}.fa.fa-check-square-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-check-square-o:before{content:"\f14a"}.fa.fa-arrows:before{content:"\f0b2"}.fa.fa-times-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-times-circle-o:before{content:"\f057"}.fa.fa-check-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-check-circle-o:before{content:"\f058"}.fa.fa-mail-forward:before{content:"\f064"}.fa.fa-expand:before{content:"\f424"}.fa.fa-compress:before{content:"\f422"}.fa.fa-eye,.fa.fa-eye-slash{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-warning:before{content:"\f071"}.fa.fa-calendar:before{content:"\f073"}.fa.fa-arrows-v:before{content:"\f338"}.fa.fa-arrows-h:before{content:"\f337"}.fa.fa-bar-chart-o:before,.fa.fa-bar-chart:before{content:"\e0e3"}.fa.fa-twitter-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-twitter-square:before{content:"\f081"}.fa.fa-facebook-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-square:before{content:"\f082"}.fa.fa-gears:before{content:"\f085"}.fa.fa-thumbs-o-up{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-thumbs-o-up:before{content:"\f164"}.fa.fa-thumbs-o-down{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-thumbs-o-down:before{content:"\f165"}.fa.fa-heart-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-heart-o:before{content:"\f004"}.fa.fa-sign-out:before{content:"\f2f5"}.fa.fa-linkedin-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin-square:before{content:"\f08c"}.fa.fa-thumb-tack:before{content:"\f08d"}.fa.fa-external-link:before{content:"\f35d"}.fa.fa-sign-in:before{content:"\f2f6"}.fa.fa-github-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-github-square:before{content:"\f092"}.fa.fa-lemon-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-lemon-o:before{content:"\f094"}.fa.fa-square-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-square-o:before{content:"\f0c8"}.fa.fa-bookmark-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-bookmark-o:before{content:"\f02e"}.fa.fa-facebook,.fa.fa-twitter{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook:before{content:"\f39e"}.fa.fa-facebook-f{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-f:before{content:"\f39e"}.fa.fa-github{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-feed:before{content:"\f09e"}.fa.fa-hdd-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hdd-o:before{content:"\f0a0"}.fa.fa-hand-o-right{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-o-right:before{content:"\f0a4"}.fa.fa-hand-o-left{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-o-left:before{content:"\f0a5"}.fa.fa-hand-o-up{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-o-up:before{content:"\f0a6"}.fa.fa-hand-o-down{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-o-down:before{content:"\f0a7"}.fa.fa-globe:before{content:"\f57d"}.fa.fa-tasks:before{content:"\f828"}.fa.fa-arrows-alt:before{content:"\f31e"}.fa.fa-group:before{content:"\f0c0"}.fa.fa-chain:before{content:"\f0c1"}.fa.fa-cut:before{content:"\f0c4"}.fa.fa-files-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-files-o:before{content:"\f0c5"}.fa.fa-floppy-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-floppy-o:before{content:"\f0c7"}.fa.fa-save{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-save:before{content:"\f0c7"}.fa.fa-navicon:before,.fa.fa-reorder:before{content:"\f0c9"}.fa.fa-magic:before{content:"\e2ca"}.fa.fa-pinterest,.fa.fa-pinterest-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pinterest-square:before{content:"\f0d3"}.fa.fa-google-plus-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-square:before{content:"\f0d4"}.fa.fa-google-plus{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus:before{content:"\f0d5"}.fa.fa-money:before{content:"\f3d1"}.fa.fa-unsorted:before{content:"\f0dc"}.fa.fa-sort-desc:before{content:"\f0dd"}.fa.fa-sort-asc:before{content:"\f0de"}.fa.fa-linkedin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-linkedin:before{content:"\f0e1"}.fa.fa-rotate-left:before{content:"\f0e2"}.fa.fa-legal:before{content:"\f0e3"}.fa.fa-dashboard:before,.fa.fa-tachometer:before{content:"\f625"}.fa.fa-comment-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-comment-o:before{content:"\f075"}.fa.fa-comments-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-comments-o:before{content:"\f086"}.fa.fa-flash:before{content:"\f0e7"}.fa.fa-clipboard:before{content:"\f0ea"}.fa.fa-lightbulb-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-lightbulb-o:before{content:"\f0eb"}.fa.fa-exchange:before{content:"\f362"}.fa.fa-cloud-download:before{content:"\f0ed"}.fa.fa-cloud-upload:before{content:"\f0ee"}.fa.fa-bell-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-bell-o:before{content:"\f0f3"}.fa.fa-cutlery:before{content:"\f2e7"}.fa.fa-file-text-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-text-o:before{content:"\f15c"}.fa.fa-building-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-building-o:before{content:"\f1ad"}.fa.fa-hospital-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hospital-o:before{content:"\f0f8"}.fa.fa-tablet:before{content:"\f3fa"}.fa.fa-mobile-phone:before,.fa.fa-mobile:before{content:"\f3cd"}.fa.fa-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-circle-o:before{content:"\f111"}.fa.fa-mail-reply:before{content:"\f3e5"}.fa.fa-github-alt{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-folder-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-folder-o:before{content:"\f07b"}.fa.fa-folder-open-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-folder-open-o:before{content:"\f07c"}.fa.fa-smile-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-smile-o:before{content:"\f118"}.fa.fa-frown-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-frown-o:before{content:"\f119"}.fa.fa-meh-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-meh-o:before{content:"\f11a"}.fa.fa-keyboard-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-keyboard-o:before{content:"\f11c"}.fa.fa-flag-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-flag-o:before{content:"\f024"}.fa.fa-mail-reply-all:before{content:"\f122"}.fa.fa-star-half-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-star-half-o:before{content:"\f5c0"}.fa.fa-star-half-empty{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-star-half-empty:before{content:"\f5c0"}.fa.fa-star-half-full{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-star-half-full:before{content:"\f5c0"}.fa.fa-code-fork:before{content:"\f126"}.fa.fa-chain-broken:before,.fa.fa-unlink:before{content:"\f127"}.fa.fa-calendar-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-calendar-o:before{content:"\f133"}.fa.fa-css3,.fa.fa-html5,.fa.fa-maxcdn{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-unlock-alt:before{content:"\f09c"}.fa.fa-minus-square-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-minus-square-o:before{content:"\f146"}.fa.fa-level-up:before{content:"\f3bf"}.fa.fa-level-down:before{content:"\f3be"}.fa.fa-pencil-square:before{content:"\f14b"}.fa.fa-external-link-square:before{content:"\f360"}.fa.fa-compass{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-caret-square-o-down{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-caret-square-o-down:before{content:"\f150"}.fa.fa-toggle-down{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-toggle-down:before{content:"\f150"}.fa.fa-caret-square-o-up{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-caret-square-o-up:before{content:"\f151"}.fa.fa-toggle-up{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-toggle-up:before{content:"\f151"}.fa.fa-caret-square-o-right{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-caret-square-o-right:before{content:"\f152"}.fa.fa-toggle-right{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-toggle-right:before{content:"\f152"}.fa.fa-eur:before,.fa.fa-euro:before{content:"\f153"}.fa.fa-gbp:before{content:"\f154"}.fa.fa-dollar:before,.fa.fa-usd:before{content:"\24"}.fa.fa-inr:before,.fa.fa-rupee:before{content:"\e1bc"}.fa.fa-cny:before,.fa.fa-jpy:before,.fa.fa-rmb:before,.fa.fa-yen:before{content:"\f157"}.fa.fa-rouble:before,.fa.fa-rub:before,.fa.fa-ruble:before{content:"\f158"}.fa.fa-krw:before,.fa.fa-won:before{content:"\f159"}.fa.fa-bitcoin,.fa.fa-btc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitcoin:before{content:"\f15a"}.fa.fa-file-text:before{content:"\f15c"}.fa.fa-sort-alpha-asc:before{content:"\f15d"}.fa.fa-sort-alpha-desc:before{content:"\f881"}.fa.fa-sort-amount-asc:before{content:"\f884"}.fa.fa-sort-amount-desc:before{content:"\f160"}.fa.fa-sort-numeric-asc:before{content:"\f162"}.fa.fa-sort-numeric-desc:before{content:"\f886"}.fa.fa-youtube-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-square:before{content:"\f431"}.fa.fa-xing,.fa.fa-xing-square,.fa.fa-youtube{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-xing-square:before{content:"\f169"}.fa.fa-youtube-play{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-youtube-play:before{content:"\f167"}.fa.fa-adn,.fa.fa-bitbucket,.fa.fa-bitbucket-square,.fa.fa-dropbox,.fa.fa-flickr,.fa.fa-instagram,.fa.fa-stack-overflow{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bitbucket-square:before{content:"\f171"}.fa.fa-tumblr,.fa.fa-tumblr-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-tumblr-square:before{content:"\f174"}.fa.fa-long-arrow-down:before{content:"\f309"}.fa.fa-long-arrow-up:before{content:"\f30c"}.fa.fa-long-arrow-left:before{content:"\f30a"}.fa.fa-long-arrow-right:before{content:"\f30b"}.fa.fa-android,.fa.fa-apple,.fa.fa-dribbble,.fa.fa-foursquare,.fa.fa-gittip,.fa.fa-gratipay,.fa.fa-linux,.fa.fa-skype,.fa.fa-trello,.fa.fa-windows{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-gittip:before{content:"\f184"}.fa.fa-sun-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-sun-o:before{content:"\f185"}.fa.fa-moon-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-moon-o:before{content:"\f186"}.fa.fa-pagelines,.fa.fa-renren,.fa.fa-stack-exchange,.fa.fa-vk,.fa.fa-weibo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-arrow-circle-o-right{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-arrow-circle-o-right:before{content:"\f35a"}.fa.fa-arrow-circle-o-left{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-arrow-circle-o-left:before{content:"\f359"}.fa.fa-caret-square-o-left{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-caret-square-o-left:before{content:"\f191"}.fa.fa-toggle-left{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-toggle-left:before{content:"\f191"}.fa.fa-dot-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-dot-circle-o:before{content:"\f192"}.fa.fa-vimeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo-square:before{content:"\f194"}.fa.fa-try:before,.fa.fa-turkish-lira:before{content:"\e2bb"}.fa.fa-plus-square-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-plus-square-o:before{content:"\f0fe"}.fa.fa-openid,.fa.fa-slack,.fa.fa-wordpress{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bank:before,.fa.fa-institution:before{content:"\f19c"}.fa.fa-mortar-board:before{content:"\f19d"}.fa.fa-google,.fa.fa-reddit,.fa.fa-reddit-square,.fa.fa-yahoo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-reddit-square:before{content:"\f1a2"}.fa.fa-behance,.fa.fa-behance-square,.fa.fa-delicious,.fa.fa-digg,.fa.fa-drupal,.fa.fa-joomla,.fa.fa-pied-piper-alt,.fa.fa-pied-piper-pp,.fa.fa-stumbleupon,.fa.fa-stumbleupon-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-behance-square:before{content:"\f1b5"}.fa.fa-steam,.fa.fa-steam-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-steam-square:before{content:"\f1b7"}.fa.fa-automobile:before{content:"\f1b9"}.fa.fa-cab:before{content:"\f1ba"}.fa.fa-deviantart,.fa.fa-soundcloud,.fa.fa-spotify{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-file-pdf-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-pdf-o:before{content:"\f1c1"}.fa.fa-file-word-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-word-o:before{content:"\f1c2"}.fa.fa-file-excel-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-excel-o:before{content:"\f1c3"}.fa.fa-file-powerpoint-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-powerpoint-o:before{content:"\f1c4"}.fa.fa-file-image-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-image-o:before{content:"\f1c5"}.fa.fa-file-photo-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-photo-o:before{content:"\f1c5"}.fa.fa-file-picture-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-picture-o:before{content:"\f1c5"}.fa.fa-file-archive-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-archive-o:before{content:"\f1c6"}.fa.fa-file-zip-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-zip-o:before{content:"\f1c6"}.fa.fa-file-audio-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-audio-o:before{content:"\f1c7"}.fa.fa-file-sound-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-sound-o:before{content:"\f1c7"}.fa.fa-file-video-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-video-o:before{content:"\f1c8"}.fa.fa-file-movie-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-movie-o:before{content:"\f1c8"}.fa.fa-file-code-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-file-code-o:before{content:"\f1c9"}.fa.fa-codepen,.fa.fa-jsfiddle,.fa.fa-vine{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-life-bouy:before,.fa.fa-life-buoy:before,.fa.fa-life-saver:before,.fa.fa-support:before{content:"\f1cd"}.fa.fa-circle-o-notch:before{content:"\f1ce"}.fa.fa-ra,.fa.fa-rebel{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ra:before{content:"\f1d0"}.fa.fa-resistance{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-resistance:before{content:"\f1d0"}.fa.fa-empire,.fa.fa-ge{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-ge:before{content:"\f1d1"}.fa.fa-git-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-git-square:before{content:"\f1d2"}.fa.fa-git,.fa.fa-hacker-news,.fa.fa-y-combinator-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-y-combinator-square:before{content:"\f1d4"}.fa.fa-yc-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc-square:before{content:"\f1d4"}.fa.fa-qq,.fa.fa-tencent-weibo,.fa.fa-wechat,.fa.fa-weixin{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wechat:before{content:"\f1d7"}.fa.fa-send:before{content:"\f1d8"}.fa.fa-paper-plane-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-paper-plane-o:before{content:"\f1d8"}.fa.fa-send-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-send-o:before{content:"\f1d8"}.fa.fa-circle-thin{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-circle-thin:before{content:"\f111"}.fa.fa-header:before{content:"\f1dc"}.fa.fa-futbol-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-futbol-o:before{content:"\f1e3"}.fa.fa-soccer-ball-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-soccer-ball-o:before{content:"\f1e3"}.fa.fa-slideshare,.fa.fa-twitch,.fa.fa-yelp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-newspaper-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-newspaper-o:before{content:"\f1ea"}.fa.fa-cc-amex,.fa.fa-cc-discover,.fa.fa-cc-mastercard,.fa.fa-cc-paypal,.fa.fa-cc-stripe,.fa.fa-cc-visa,.fa.fa-google-wallet,.fa.fa-paypal{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-bell-slash-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-bell-slash-o:before{content:"\f1f6"}.fa.fa-trash:before{content:"\f2ed"}.fa.fa-copyright{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-eyedropper:before{content:"\f1fb"}.fa.fa-area-chart:before{content:"\f1fe"}.fa.fa-pie-chart:before{content:"\f200"}.fa.fa-line-chart:before{content:"\f201"}.fa.fa-lastfm,.fa.fa-lastfm-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-lastfm-square:before{content:"\f203"}.fa.fa-angellist,.fa.fa-ioxhost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-cc{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-cc:before{content:"\f20a"}.fa.fa-ils:before,.fa.fa-shekel:before,.fa.fa-sheqel:before{content:"\f20b"}.fa.fa-buysellads,.fa.fa-connectdevelop,.fa.fa-dashcube,.fa.fa-forumbee,.fa.fa-leanpub,.fa.fa-sellsy,.fa.fa-shirtsinbulk,.fa.fa-simplybuilt,.fa.fa-skyatlas{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-diamond{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-diamond:before{content:"\f3a5"}.fa.fa-intersex:before,.fa.fa-transgender:before{content:"\f224"}.fa.fa-transgender-alt:before{content:"\f225"}.fa.fa-facebook-official{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-facebook-official:before{content:"\f09a"}.fa.fa-pinterest-p,.fa.fa-whatsapp{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-hotel:before{content:"\f236"}.fa.fa-medium,.fa.fa-viacoin,.fa.fa-y-combinator,.fa.fa-yc{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-yc:before{content:"\f23b"}.fa.fa-expeditedssl,.fa.fa-opencart,.fa.fa-optin-monster{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-battery-4:before,.fa.fa-battery:before{content:"\f240"}.fa.fa-battery-3:before{content:"\f241"}.fa.fa-battery-2:before{content:"\f242"}.fa.fa-battery-1:before{content:"\f243"}.fa.fa-battery-0:before{content:"\f244"}.fa.fa-object-group,.fa.fa-object-ungroup,.fa.fa-sticky-note-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-sticky-note-o:before{content:"\f249"}.fa.fa-cc-diners-club,.fa.fa-cc-jcb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-clone{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hourglass-o:before{content:"\f254"}.fa.fa-hourglass-1:before{content:"\f251"}.fa.fa-hourglass-2:before{content:"\f252"}.fa.fa-hourglass-3:before{content:"\f253"}.fa.fa-hand-rock-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-rock-o:before{content:"\f255"}.fa.fa-hand-grab-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-grab-o:before{content:"\f255"}.fa.fa-hand-paper-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-paper-o:before{content:"\f256"}.fa.fa-hand-stop-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-stop-o:before{content:"\f256"}.fa.fa-hand-scissors-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-scissors-o:before{content:"\f257"}.fa.fa-hand-lizard-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-lizard-o:before{content:"\f258"}.fa.fa-hand-spock-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-spock-o:before{content:"\f259"}.fa.fa-hand-pointer-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-pointer-o:before{content:"\f25a"}.fa.fa-hand-peace-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-hand-peace-o:before{content:"\f25b"}.fa.fa-registered{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-creative-commons,.fa.fa-gg,.fa.fa-gg-circle,.fa.fa-odnoklassniki,.fa.fa-odnoklassniki-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-odnoklassniki-square:before{content:"\f264"}.fa.fa-chrome,.fa.fa-firefox,.fa.fa-get-pocket,.fa.fa-internet-explorer,.fa.fa-opera,.fa.fa-safari,.fa.fa-wikipedia-w{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-television:before{content:"\f26c"}.fa.fa-500px,.fa.fa-amazon,.fa.fa-contao{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-calendar-plus-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-calendar-plus-o:before{content:"\f271"}.fa.fa-calendar-minus-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-calendar-minus-o:before{content:"\f272"}.fa.fa-calendar-times-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-calendar-times-o:before{content:"\f273"}.fa.fa-calendar-check-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-calendar-check-o:before{content:"\f274"}.fa.fa-map-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-map-o:before{content:"\f279"}.fa.fa-commenting:before{content:"\f4ad"}.fa.fa-commenting-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-commenting-o:before{content:"\f4ad"}.fa.fa-houzz,.fa.fa-vimeo{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-vimeo:before{content:"\f27d"}.fa.fa-black-tie,.fa.fa-edge,.fa.fa-fonticons,.fa.fa-reddit-alien{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-credit-card-alt:before{content:"\f09d"}.fa.fa-codiepie,.fa.fa-fort-awesome,.fa.fa-mixcloud,.fa.fa-modx,.fa.fa-product-hunt,.fa.fa-scribd,.fa.fa-usb{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-pause-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-pause-circle-o:before{content:"\f28b"}.fa.fa-stop-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-stop-circle-o:before{content:"\f28d"}.fa.fa-bluetooth,.fa.fa-bluetooth-b,.fa.fa-envira,.fa.fa-gitlab,.fa.fa-wheelchair-alt,.fa.fa-wpbeginner,.fa.fa-wpforms{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-wheelchair-alt:before{content:"\f368"}.fa.fa-question-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-question-circle-o:before{content:"\f059"}.fa.fa-volume-control-phone:before{content:"\f2a0"}.fa.fa-asl-interpreting:before{content:"\f2a3"}.fa.fa-deafness:before,.fa.fa-hard-of-hearing:before{content:"\f2a4"}.fa.fa-glide,.fa.fa-glide-g{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-signing:before{content:"\f2a7"}.fa.fa-viadeo,.fa.fa-viadeo-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-viadeo-square:before{content:"\f2aa"}.fa.fa-snapchat,.fa.fa-snapchat-ghost{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-ghost:before{content:"\f2ab"}.fa.fa-snapchat-square{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-snapchat-square:before{content:"\f2ad"}.fa.fa-first-order,.fa.fa-google-plus-official,.fa.fa-pied-piper,.fa.fa-themeisle,.fa.fa-yoast{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-official:before{content:"\f2b3"}.fa.fa-google-plus-circle{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-google-plus-circle:before{content:"\f2b3"}.fa.fa-fa,.fa.fa-font-awesome{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-fa:before{content:"\f2b4"}.fa.fa-handshake-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-handshake-o:before{content:"\f2b5"}.fa.fa-envelope-open-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-envelope-open-o:before{content:"\f2b6"}.fa.fa-linode{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-address-book-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-address-book-o:before{content:"\f2b9"}.fa.fa-vcard:before{content:"\f2bb"}.fa.fa-address-card-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-address-card-o:before{content:"\f2bb"}.fa.fa-vcard-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-vcard-o:before{content:"\f2bb"}.fa.fa-user-circle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-user-circle-o:before{content:"\f2bd"}.fa.fa-user-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-user-o:before{content:"\f007"}.fa.fa-id-badge{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-drivers-license:before{content:"\f2c2"}.fa.fa-id-card-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-id-card-o:before{content:"\f2c2"}.fa.fa-drivers-license-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-drivers-license-o:before{content:"\f2c2"}.fa.fa-free-code-camp,.fa.fa-quora,.fa.fa-telegram{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-thermometer-4:before,.fa.fa-thermometer:before{content:"\f2c7"}.fa.fa-thermometer-3:before{content:"\f2c8"}.fa.fa-thermometer-2:before{content:"\f2c9"}.fa.fa-thermometer-1:before{content:"\f2ca"}.fa.fa-thermometer-0:before{content:"\f2cb"}.fa.fa-bathtub:before,.fa.fa-s15:before{content:"\f2cd"}.fa.fa-window-maximize,.fa.fa-window-restore{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-times-rectangle:before{content:"\f410"}.fa.fa-window-close-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-window-close-o:before{content:"\f410"}.fa.fa-times-rectangle-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-times-rectangle-o:before{content:"\f410"}.fa.fa-bandcamp,.fa.fa-eercast,.fa.fa-etsy,.fa.fa-grav,.fa.fa-imdb,.fa.fa-ravelry{font-family:"Font Awesome 6 Brands";font-weight:400}.fa.fa-eercast:before{content:"\f2da"}.fa.fa-snowflake-o{font-family:"Font Awesome 6 Pro";font-weight:400}.fa.fa-snowflake-o:before{content:"\f2dc"}.fa.fa-meetup,.fa.fa-superpowers,.fa.fa-wpexplorer{font-family:"Font Awesome 6 Brands";font-weight:400}
@charset "UTF-8";
/*
 * LAYER 1 — tokens, typography, base.
 *
 * Loads before layer 2
 * (`ow_components.css.scss`), which reads every custom property declared here.
 *
 * The reset below is not decoration. Bootstrap supplied `box-sizing: border-box`
 * globally and painted the page background; both left with it, and every width
 * and padding in the design layer is written assuming border-box.
 */
/*
 * THE TOKEN LAYER — layer 1, and the only place a value is decided.
 *
 * Every colour, radius, spacing,
 * control height, duration and easing in the portal resolves to a custom
 * property declared here. A literal in a component sheet or a view is a
 * defect, not a shortcut.
 *
 * Dark mode is a redeclaration of these same properties on `.theme-dark`,
 * never a second rule set and never a per-component dark rule. A component
 * that needs one is reading a literal. `color-scheme` is declared beside the
 * tokens in both themes so scrollbars, form-control chrome and the caret
 * follow too.
 *
 * The theme class is server-rendered on <html> from the `ow_theme` cookie, so
 * the first paint is already correct; see `layouts/application.html.erb`.
 *
 * Typography lives in `_ow_typography.scss`, which is the only file in the app
 * that names a font file. One family: Geist, plus Geist Mono for strings a
 * person transcribes or compares character by character.
 */
/* line 23, app/assets/stylesheets/_ow_tokens.scss */
:root {
  color-scheme: light;
  /* Surfaces, text and chrome */
  --ow-color-page-bg: #f8fafc;
  --ow-color-surface: #ffffff;
  --ow-color-surface-alt: #fafbfc;
  --ow-color-border: #e5e7eb;
  --ow-color-border-soft: #f1f5f9;
  --ow-color-text: #111827;
  --ow-color-muted: #6b7280;
  --ow-color-faint: #94a3b8;
  --ow-color-heading: #111827;
  /* Links keep the design system's blue — a link should not look like a
   * button in a system whose only accent is orange. */
  --ow-color-link: #0b63ce;
  --ow-color-link-hover: #074fa4;
  --ow-color-nav: #404040;
  --ow-color-nav-dark: #1d2633;
  --ow-color-nav-text: #c8d0da;
  --ow-color-nav-label: #7c8798;
  --ow-color-thead-bg: #f1f5f9;
  --ow-color-row-hover: #f9fafb;
  --ow-color-selected-bg: #fffaf6;
  --ow-color-selected-row: #fff7ed;
  /* Brand — orange is the single accent */
  --ow-color-brand: #f58220;
  --ow-color-brand-strong: #f45b20;
  --ow-color-brand-deep: #d9480f;
  --ow-color-brand-tint: rgba(245, 130, 32, 0.1);
  --ow-color-brand-tint-strong: rgba(245, 130, 32, 0.14);
  --ow-orange: var(--ow-color-brand);
  /* Legacy accent — defined for unmigrated screens, not for new work. */
  --ow-legacy-red: #b20305;
  --ow-legacy-blue: #428bca;
  /* Status */
  --ow-color-success: #28a745;
  --ow-color-warning: #ffb703;
  --ow-color-danger: #d9534f;
  /* Info / On Contract — the one non-brand hue in the system. */
  --ow-color-info: #2463ff;
  --ow-status-pass-bg: #ecfdf5;
  --ow-status-pass-fg: #047857;
  --ow-status-due-bg: #fffbeb;
  --ow-status-due-fg: #b45309;
  --ow-status-fail-bg: #fef2f2;
  --ow-status-fail-fg: #dc2626;
  --ow-status-warning-bg: #fef3c7;
  --ow-status-warning-fg: #92400e;
  --ow-status-info-bg: #dbeafe;
  --ow-status-info-fg: #1e40af;
  --ow-color-confirm: #1a7a37;
  --ow-color-confirm-bg: #e7f6ec;
  /* Notice-stack tones — the four kinds of thing the shell's notice stack says,
   * each with one fixed meaning. Per tone: `edge` is the left rule and the
   * countdown bar, `tile` the solid icon ground with its `ink`, `fg` the kind
   * label, `surface` the row's wash and `border` its edge. Every tile/ink pair
   * and every label on its own surface clears 4.5:1. */
  --ow-notice-fail-edge: #dc2626;
  --ow-notice-fail-tile: #dc2626;
  --ow-notice-fail-ink: #ffffff;
  --ow-notice-fail-fg: #b91c1c;
  --ow-notice-fail-surface: color-mix(in srgb, #dc2626 5%, var(--ow-color-surface));
  --ow-notice-fail-border: rgba(220, 38, 38, 0.30);
  --ow-notice-warn-edge: #d97706;
  --ow-notice-warn-tile: #b45309;
  --ow-notice-warn-ink: #ffffff;
  --ow-notice-warn-fg: #92400e;
  --ow-notice-warn-surface: color-mix(in srgb, #f59e0b 7%, var(--ow-color-surface));
  --ow-notice-warn-border: rgba(217, 119, 6, 0.32);
  --ow-notice-update-edge: #f58220;
  --ow-notice-update-tile: #d9480f;
  --ow-notice-update-ink: #ffffff;
  --ow-notice-update-fg: #c2410c;
  --ow-notice-update-surface: color-mix(in srgb, #f58220 6%, var(--ow-color-surface));
  --ow-notice-update-border: rgba(245, 130, 32, 0.34);
  --ow-notice-soon-edge: #2463ff;
  --ow-notice-soon-tile: #2463ff;
  --ow-notice-soon-ink: #ffffff;
  --ow-notice-soon-fg: #1e40af;
  --ow-notice-soon-surface: color-mix(in srgb, #2463ff 5%, var(--ow-color-surface));
  --ow-notice-soon-border: rgba(36, 99, 255, 0.28);
  /* Worksheet status hues — the five families every one of the 12 statuses
   * maps to, as upstream defines them. */
  --ow-wsstatus-blocked: #d9534f;
  --ow-wsstatus-waiting: #f0ad4e;
  --ow-wsstatus-active: #5bc0de;
  --ow-wsstatus-done: #5cb85c;
  --ow-wsstatus-neutral: #6b7280;
  --ow-wsstatus-parts: #6366f1;
  /* Spacing — 4px base scale */
  --ow-space-1: 4px;
  --ow-space-2: 8px;
  --ow-space-3: 12px;
  --ow-space-4: 16px;
  --ow-space-5: 20px;
  --ow-space-6: 24px;
  --ow-space-7: 32px;
  --ow-space-8: 48px;
  --ow-gutter-page: 24px;
  --ow-gutter-page-mobile: 12px;
  --ow-page-max: 1440px;
  --ow-page-max-wide: 1520px;
  --ow-mobile-max: 430px;
  /* Radii */
  --ow-radius-sm: 6px;
  --ow-radius-md: 8px;
  --ow-radius-lg: 12px;
  --ow-radius-xl: 16px;
  --ow-radius-2xl: 20px;
  --ow-radius-card: 14px;
  --ow-radius-pill: 999px;
  /* Control sizing and chrome heights */
  --ow-tap-min: 44px;
  --ow-tap-min-touch: 56px;
  --ow-control-h: 40px;
  --ow-control-h-lg: 44px;
  --ow-control-h-cta: 48px;
  --ow-control-h-touch: 56px;
  --ow-icon-tile: 40px;
  --ow-nav-height: 60px;
  --ow-nav-height-compact: 52px;
  --ow-nav-height-app: 64px;
  /* Elevation */
  --ow-shadow-card: 0 1px 2px rgba(15, 23, 42, 0.04), 0 8px 24px rgba(15, 23, 42, 0.05);
  --ow-shadow-table: 0 1px 2px rgba(15, 23, 42, 0.04), 0 12px 32px rgba(15, 23, 42, 0.06);
  --ow-shadow-mobile-card: 0 4px 14px rgba(33, 52, 79, 0.08);
  --ow-shadow-raise: 0 12px 26px rgba(15, 23, 42, 0.09);
  --ow-shadow-menu: 0 12px 30px rgba(0, 0, 0, 0.22);
  --ow-shadow-modal: 0 24px 60px rgba(15, 23, 42, 0.28), 0 2px 8px rgba(15, 23, 42, 0.08);
  --ow-shadow-brand: 0 4px 12px rgba(245, 130, 32, 0.3);
  --ow-shadow-brand-lg: 0 14px 24px rgba(244, 91, 32, 0.28);
  --ow-seam-sticky: -6px 0 10px rgba(15, 23, 42, 0.05);
  /* Three roles the screens had been writing out longhand. Everything else
   * snaps to card / table / raise / menu / modal / brand above. */
  --ow-shadow-contact: 0 1px 2px rgba(15, 23, 42, 0.04);
  --ow-shadow-dot: 0 1px 3px rgba(15, 23, 42, 0.25);
  --ow-shadow-drawer: -24px 0 60px rgba(15, 23, 42, 0.25);
  /* Weighing console: the capture deck on the ticket screen. It follows the
   * theme like every other surface — these are the light values and
   * `.theme-dark` carries the deck's dark ones. Named so the deck's tints are
   * tokens, not literals. The status hues are chosen for the surface they sit
   * on rather than inverted, so stable, settling and warning stay apart on
   * white as they do on anthracite. */
  --ow-console-bg: var(--ow-color-page-bg);
  --ow-console-surface: rgba(15, 23, 42, 0.04);
  --ow-console-surface-soft: rgba(15, 23, 42, 0.02);
  --ow-console-surface-strong: rgba(15, 23, 42, 0.07);
  --ow-console-border: var(--ow-color-border);
  --ow-console-border-soft: var(--ow-color-border-soft);
  --ow-console-border-strong: #cbd5e1;
  --ow-console-text: var(--ow-color-text);
  /* Two steps below the deck's ink, both dark enough to read on it in a
   * sunlit cab: the page's own muted and faint are pitched for a white card,
   * not for small labels on a working console. */
  --ow-console-muted: #475569;
  --ow-console-faint: #59636f;
  --ow-console-detail-bg: rgba(15, 23, 42, 0.04);
  --ow-console-brand-edge: rgba(245, 130, 32, 0.45);
  --ow-console-brand-tint: rgba(245, 130, 32, 0.1);
  --ow-console-brand-tint-strong: rgba(245, 130, 32, 0.16);
  --ow-console-ok: #15803d;
  --ow-console-ok-bg: rgba(21, 128, 61, 0.12);
  --ow-console-ok-seg: #16a34a;
  --ow-console-warn: #b45309;
  --ow-console-warn-bg: rgba(180, 83, 9, 0.12);
  --ow-console-motion: #c2410c;
  --ow-console-rest: rgba(15, 23, 42, 0.2);
  --ow-console-figure: 32px;
  --ow-console-figure-sm: 28px;
  /* THE INSTRUMENT DECK — the one-device pages under Hardware (a weighbridge,
   * an agent PC): a near-black command console with an amber accent, a teal
   * link tone and a green ready tone. It is its own family because it is
   * darker and warmer than the ticket console and does not swap with the
   * theme: the deck is dark in both. */
  --ow-deck-bg: #0b0d10;
  --ow-deck-surface: #12151a;
  --ow-deck-surface-deep: #0f1115;
  --ow-deck-surface-log: #0a0b0d;
  --ow-deck-chip: #1a1d23;
  --ow-deck-border: #242832;
  --ow-deck-border-soft: #202329;
  --ow-deck-border-chip: #2a2e36;
  --ow-deck-border-strong: #3a3f47;
  --ow-deck-text: #f4f1ec;
  --ow-deck-text-soft: #dcdde0;
  --ow-deck-mono: #c7c8cb;
  --ow-deck-muted: #9b9c9f;
  --ow-deck-label: #8b8d92;
  --ow-deck-faint: #6f7278;
  --ow-deck-accent: #e1a94c;
  --ow-deck-accent-soft: #f0c583;
  --ow-deck-accent-ink: #1a1408;
  --ow-deck-accent-tint: rgba(225, 169, 76, 0.12);
  --ow-deck-accent-edge: rgba(225, 169, 76, 0.35);
  --ow-deck-accent-glow: rgba(225, 169, 76, 0.3);
  --ow-deck-link: #2dd4bf;
  --ow-deck-link-tint: rgba(45, 212, 191, 0.12);
  --ow-deck-link-glow: rgba(45, 212, 191, 0.22);
  --ow-deck-ok: #4ade80;
  --ow-deck-ok-dim: #2f9e64;
  --ow-deck-ok-tint: rgba(74, 222, 128, 0.12);
  --ow-deck-ok-edge: rgba(74, 222, 128, 0.35);
  --ow-deck-warn: #fbbf24;
  --ow-deck-warn-tint: rgba(251, 191, 36, 0.12);
  --ow-deck-warn-edge: rgba(251, 191, 36, 0.35);
  --ow-deck-danger: #f87171;
  --ow-deck-danger-tint: rgba(248, 113, 113, 0.12);
  --ow-deck-danger-edge: rgba(248, 113, 113, 0.35);
  --ow-deck-orb: radial-gradient(circle at 35% 30%, #232016, #0f0d09);
  --ow-deck-grid-line: rgba(255, 255, 255, 0.015);
  --ow-deck-inset: inset 0 1px 0 rgba(255, 255, 255, 0.04);
  --ow-deck-radius: 16px;
  --ow-deck-radius-panel: 10px;
  --ow-deck-title: 42px;
  --ow-deck-figure: 26px;
  --ow-deck-orb-size: 112px;
  --ow-deck-max: 1180px;
  /* Scrim and blur */
  --ow-scrim: rgba(15, 23, 42, 0.45);
  --ow-scrim-strong: rgba(17, 24, 39, 0.55);
  --ow-scrim-nav: rgba(9, 14, 23, 0.5);
  --ow-blur-modal: blur(8px);
  --ow-blur-nav: blur(14px);
  --ow-scrim-modal: radial-gradient(120% 90% at 50% 40%, rgba(15, 23, 42, 0.42) 0%, rgba(9, 14, 23, 0.72) 100%);
  --ow-scrim-blur: blur(18px) saturate(0.85);
  /* Motion */
  --ow-ease: ease;
  --ow-ease-out: cubic-bezier(0.16, 1, 0.3, 1);
  --ow-dur-hover: 0.18s;
  --ow-dur-state: 0.2s;
  --ow-dur-panel: 0.3s;
  /* The notice stack's exit, entry and height moves, which are longer than a
   * state change because a row travels a whole row pitch. */
  --ow-dur-move: 0.5s;
  /* The 3px gradient hairline above the app header and dialogs */
  --ow-brand-rule: linear-gradient(90deg, #f58220, #f45b20 60%, #d9480f);
  --ow-brand-rule-height: 3px;
  /* One focus ring everywhere: a brand border plus this colour at 2px */
  --ow-focus-ring: rgba(245, 130, 32, 0.25);
  /* Type */
  --ow-font-family: "Geist", "Segoe UI", "Helvetica Neue", Arial, sans-serif;
  --ow-font-mono: "Geist Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
  --ow-type-page-title: 26px;
  --ow-type-page-title-weight: 800;
  --ow-type-view-title: 22px;
  --ow-type-view-title-weight: 800;
  --ow-type-section-title: 20px;
  --ow-type-section-title-weight: 700;
  --ow-type-card-title: 18px;
  --ow-type-card-title-weight: 600;
  --ow-type-body: 16px;
  --ow-type-body-weight: 400;
  --ow-type-meta: 14px;
  --ow-type-label: 13px;
  --ow-type-label-weight: 700;
  --ow-type-micro: 12px;
  /* One step below micro, for the smallest badge and glyph type. The screens
   * had been drawing this at 9, 9.5, 10 and 10.5px; 10px is the decision. */
  --ow-type-nano: 10px;
  --ow-type-data: 20px;
  --ow-type-data-weight: 800;
  --ow-type-touch-input: 24px;
  --ow-type-touch-input-weight: 600;
  /* A button is its own role. It sat on `meta`, which also sets helper text
   * and table cells; once body moved to 16px those three wanted different
   * sizes and one token could not answer all of them. */
  --ow-type-button: 15px;
  /* The rail is chrome, not page text: it keeps the denser size so the 248px
   * rail still holds the longest nav label without widening. */
  --ow-nav-item-size: 13px;
  --ow-tracking-tight: -0.01em;
  /* Titles and big figures were tracked at -0.015, -0.02 and -0.03em; one step. */
  --ow-tracking-tighter: -0.02em;
  --ow-tracking-label: 0.04em;
  /* Sentence-case type that still wants air (buttons, tabs) — was 0.02/0.03em. */
  --ow-tracking-wide: 0.02em;
  --ow-line-height: 1.5;
  /* Table header tracking, and the family numeric cells set in. Both are
   * tokens so a typeface swap can buy back set width without touching a
   * component: --ow-font-numeric stays `inherit` while the UI face has real
   * tabular figures, and points at the mono face when it doesn't. */
  --ow-thead-tracking: var(--ow-tracking-label);
  --ow-font-numeric: inherit;
  /* EDITORIAL TYPE — a second scale, for reading rather than for operating.
   *
   * The scale above is an operational one: 14px body and a 26px page title are
   * right for a weighbridge screen that has to show a lot of records at once,
   * and wrong for an article somebody reads. These are the sizes for prose —
   * release notes now, and the Help Centre and onboarding guidance the same
   * components are meant to carry later.
   *
   * THEY ARE OPT-IN AND CHANGE NOTHING ON THEIR OWN. Nothing reads them
   * outside `.ow-editorial` (ow_editorial.css), so no operational screen moves
   * because they exist, and no element selector is restyled anywhere.
   *
   * Each size is a clamp between its phone value and its desktop value, so the
   * scale is continuous rather than stepping at a breakpoint. The family is the
   * application's own; no second typeface is loaded.
   */
  --ow-editorial-title: clamp(28px, 1.5rem + 2.2vw, 42px);
  --ow-editorial-title-weight: 800;
  --ow-editorial-title-line: 1.1;
  --ow-editorial-lead: clamp(18px, 1rem + 0.7vw, 22px);
  --ow-editorial-lead-line: 1.45;
  --ow-editorial-heading: clamp(21px, 1.15rem + 1vw, 28px);
  --ow-editorial-heading-weight: 700;
  --ow-editorial-heading-line: 1.2;
  --ow-editorial-subheading: clamp(17px, 1rem + 0.35vw, 20px);
  --ow-editorial-subheading-weight: 700;
  --ow-editorial-body: clamp(16px, 0.95rem + 0.2vw, 18px);
  --ow-editorial-body-line: 1.62;
  --ow-editorial-caption: clamp(14px, 0.85rem + 0.1vw, 15px);
  --ow-editorial-caption-line: 1.45;
  /* MEASURE. Prose is held to roughly 68 characters; a full-width column of
   * 16px text on a 1440px screen is about 180 and is genuinely hard to read.
   * The wide measure is for figures and step rows, which carry an image. */
  --ow-editorial-measure: 68ch;
  --ow-editorial-measure-wide: 1040px;
  /* VERTICAL RHYTHM. An article's spacing is looser than a form's, so these
   * are their own values rather than the operational --ow-space-* steps. */
  --ow-editorial-gap-section: clamp(40px, 5vw, 72px);
  --ow-editorial-gap-block: clamp(20px, 2.2vw, 28px);
  --ow-editorial-gap-tight: 12px;
  --ow-editorial-gap-figure: clamp(24px, 3vw, 40px);
  /* Restrained colour: the article borrows the application's own ink and
   * brand rather than introducing an editorial palette. */
  --ow-editorial-ink: var(--ow-color-text);
  --ow-editorial-ink-soft: var(--ow-color-muted);
  --ow-editorial-rule: var(--ow-color-border-soft);
  --ow-editorial-figure-bg: var(--ow-color-surface-alt);
  /* Semantic aliases the design system ships */
  --surface-page: var(--ow-color-page-bg);
  --surface-card: var(--ow-color-surface);
  --surface-sunken: var(--ow-color-surface-alt);
  --text-body: var(--ow-color-text);
  --text-meta: var(--ow-color-muted);
  --text-label: var(--ow-color-faint);
  --text-link: var(--ow-color-link);
  --text-link-hover: var(--ow-color-link-hover);
  --border-default: var(--ow-color-border);
  --border-hairline: var(--ow-color-border-soft);
  --accent: var(--ow-color-brand);
  --font-core: var(--ow-font-family);
  --text-title: var(--ow-type-page-title);
  --text-size-body: var(--ow-type-body);
  /* Previous CardiffCC names, kept alive as references for unmigrated screens */
  --ow-primary: var(--ow-color-brand);
  --ow-primary-strong: var(--ow-color-brand-strong);
  --ow-secondary: var(--ow-color-nav-dark);
  --ow-shell-sidebar-bg: var(--ow-color-nav-dark);
  --ow-shell-sidebar-bg-strong: var(--ow-color-nav-dark);
  --ow-shell-sidebar-text: var(--ow-color-nav-text);
  --ow-shell-sidebar-muted: var(--ow-color-nav-label);
  --ow-shell-sidebar-active-bg: var(--ow-color-brand);
  --ow-shell-sidebar-active-text: var(--ow-color-surface);
  --ow-shell-header-bg: rgba(255, 255, 255, 0.92);
  --ow-shell-page-bg: var(--ow-color-page-bg);
  --ow-shell-surface-bg: var(--ow-color-surface);
  --ow-shell-background: var(--ow-color-surface);
  --ow-shell-border: var(--ow-color-border);
  --ow-text-primary: var(--ow-color-heading);
  --ow-text-strong: var(--ow-color-heading);
  --ow-text-body: var(--ow-color-text);
  --ow-text-muted: var(--ow-color-muted);
  --ow-text-secondary: var(--ow-color-muted);
  --ow-success: var(--ow-color-success);
  --ow-danger: var(--ow-color-danger);
  --ow-shadow-soft: var(--ow-shadow-card);
  --ow-shadow-shell: var(--ow-shadow-raise);
  --ow-shadow-dialog: var(--ow-shadow-modal);
  --ow-shadow: var(--ow-shadow-card);
  --ow-transition-fast: var(--ow-dur-hover) var(--ow-ease);
  --ow-transition-base: var(--ow-dur-state) var(--ow-ease);
  --ow-navbar-height: 72px;
  --ow-sidebar-width: 248px;
  --ow-sidebar-width-wide: 280px;
  --ow-control-height: var(--ow-control-h-lg);
  --ow-card-padding: var(--ow-space-5);
  --ow-z-sidebar: 1030;
  --ow-z-overlay: 1020;
  --ow-z-header: 1040;
  --ow-z-dropdown: 1050;
  --ow-breakpoint-xs: 480px;
  --ow-breakpoint-sm: 768px;
  --ow-breakpoint-md: 992px;
  --ow-breakpoint-lg: 1200px;
  --ow-font-family-sans: var(--ow-font-family);
  --ow-font-family-heading: var(--ow-font-family);
  --ow-font-family-sidebar: var(--ow-font-family);
  --ow-font-family-nav: var(--ow-font-family);
  --ow-type-page-title-size: var(--ow-type-page-title);
  --ow-type-page-title-line: 32px;
  --ow-type-page-title-tracking: var(--ow-tracking-tight);
  --ow-type-section-title-size: var(--ow-type-section-title);
  --ow-type-section-title-line: 26px;
  --ow-type-section-title-tracking: var(--ow-tracking-tight);
  --ow-type-body-size: var(--ow-type-body);
  --ow-type-body-line: 24px;
  --ow-type-body-strong-size: var(--ow-type-body);
  --ow-type-body-strong-line: 24px;
  --ow-type-body-strong-weight: 600;
  --ow-type-small-size: var(--ow-type-meta);
  --ow-type-small-line: 20px;
  --ow-type-small-weight: 400;
  --ow-type-caption-size: var(--ow-type-label);
  --ow-type-caption-line: 18px;
  --ow-type-caption-weight: 400;
  --ow-font-size-page-title: var(--ow-type-page-title);
  --ow-font-line-page-title: var(--ow-type-page-title-line);
  --ow-font-weight-page-title: var(--ow-type-page-title-weight);
  --ow-font-size-sidebar: var(--ow-type-body);
  --ow-font-line-sidebar: var(--ow-type-body-line);
  --ow-font-weight-sidebar: 500;
  --ow-font-weight-sidebar-active: 600;
  --ow-font-size-breadcrumb: var(--ow-type-meta);
  --ow-font-line-breadcrumb: var(--ow-type-small-line);
  --ow-font-weight-breadcrumb: 400;
  --ow-font-size-account: var(--ow-type-meta);
  --ow-font-line-account: var(--ow-type-small-line);
  --ow-font-weight-account: 600;
  --ow-font-weight-medium: 500;
  --ow-font-weight-semibold: 600;
  --ow-font-weight-bold: 700;
  --ow-font-header: var(--ow-type-body);
  --ow-font-body: var(--ow-type-body);
  --ow-row-height: 48px;
  --ow-padding-x: var(--ow-space-4);
  --ow-padding-y: var(--ow-space-3);
  --ow-bg-light: var(--ow-color-surface);
  --ow-bg-dark: var(--ow-color-nav-dark);
  --ow-header-light: var(--ow-color-thead-bg);
  --ow-header-dark: var(--ow-color-nav);
  --ow-border-light: var(--ow-color-border);
  --ow-border-dark: var(--ow-color-nav);
  --ow-border-strong: var(--ow-color-border);
  --ow-hover-light: var(--ow-color-row-hover);
  --ow-hover-dark: var(--ow-color-nav);
  --ow-selected-light: var(--ow-color-selected-row);
  --ow-selected-dark: var(--ow-color-brand-strong);
  --ow-selected-bg: var(--ow-color-selected-bg);
  --ow-selected-bg-strong: var(--ow-color-selected-row);
  --ow-surface-sunken: var(--ow-color-surface-alt);
  --ow-radius: var(--ow-radius-md);
  --ow-input-surface: var(--ow-color-surface);
  --ow-input-border: var(--ow-color-border);
  --ow-period-surface: var(--ow-color-brand-tint-strong);
  --ow-toolbar-divider: var(--ow-color-border);
  --ow-pill-unselected-bg: var(--ow-color-brand-tint);
  --ow-pill-unselected-hover-bg: var(--ow-color-brand-tint-strong);
  --ow-pill-selected-bg: var(--ow-color-brand);
  --ow-pill-selected-border: var(--ow-color-brand);
  --ow-pill-border: var(--ow-color-brand-tint-strong);
  --ow-pill-hover-border: var(--ow-color-brand);
  --ow-pill-unselected-text: var(--ow-color-muted);
  --ow-pill-unselected-hover-text: var(--ow-color-text);
  --ow-pill-selected-text: var(--ow-color-surface);
  --ow-button-secondary-bg: var(--ow-color-surface);
  --ow-button-secondary-border: var(--ow-color-border);
  --ow-button-secondary-hover-bg: var(--ow-color-page-bg);
  --ow-button-filter-bg: var(--ow-color-brand-tint);
  --ow-button-filter-border: var(--ow-color-brand-tint-strong);
  --ow-button-danger-hover-bg: #b62626;
  /* Names the screens invented for values the token layer already carried.
   * Kept as references, never literals, so there is one source per value:
   * glass = the translucent header, card-shadow = the table/card elevation,
   * selected-* = the warm selection tints, hover-glyph = brand deep.
   * --ow-hover-tint is the only genuinely new value (the warm row-icon wash). */
  --ow-glass: var(--ow-shell-header-bg);
  --ow-card-shadow: var(--ow-shadow-table);
  --ow-selected-row: var(--ow-color-selected-row);
  --ow-selected-card: var(--ow-color-selected-bg);
  --ow-hover-tint: #fff2e6;
  --ow-hover-glyph: var(--ow-color-brand-deep);
  /* Slate body copy one step darker than muted — annotation and artboard voice.
   * The screens had been writing #475569 out longhand. */
  --ow-color-text-soft: #475569;
  /* Live device: the online dot, its label colour and its tint */
  --ow-color-online: #22c55e;
  --ow-color-online-fg: #0f7a4a;
  --ow-color-online-bg: #f5fbf7;
  /* Outlined destructive: a softer red than --ow-color-danger, plus its edge */
  --ow-color-danger-solid: #c53b37;
  --ow-color-danger-edge: rgba(217, 83, 79, 0.5);
  /* Brand at the strength a selected surface's border and lift need */
  --ow-color-brand-edge: rgba(245, 130, 32, 0.35);
  --ow-shadow-brand-soft: 0 6px 18px rgba(245, 130, 32, 0.18);
  /* Two steps above --ow-space-8, for specimen and artboard rhythm */
  --ow-space-9: 56px;
  --ow-space-10: 64px;
  /* Style-reference page: its own title role and measure */
  --ow-type-doc-title: 34px;
  --ow-doc-max: 1200px;
  /* Artboard canvas: desk ground, prose measures, frame chrome, breakpoints */
  --ow-canvas-bg: #eceff3;
  --ow-canvas-prose: 900px;
  --ow-canvas-prose-narrow: 820px;
  --ow-frame-gap: 40px;
  --ow-frame-sidebar: var(--ow-sidebar-width);
  --ow-frame-sidebar-collapsed: 76px;
  --ow-frame-rail: 236px;
  --ow-frame-band-label: 210px;
  --ow-type-frame-title: 18px;
  --ow-type-frame-page-title: 24px;
  --ow-type-canvas-title: 32px;
  --ow-icon-tile-sm: 38px;
  --ow-icon-tile-xs: 34px;
  --ow-kind-min-h: 132px;
  --ow-kind-min-h-touch: 104px;
  --ow-choice-min-h: 72px;
  --ow-choice-min-h-touch: 64px;
  --ow-bp-desktop-w: 1440px;
  --ow-bp-desktop-h: 1024px;
  --ow-bp-tablet-w: 768px;
  --ow-bp-tablet-h: 1024px;
  --ow-bp-mobile-w: 390px;
  --ow-bp-mobile-h: 844px;
  /* Simulated scroll offsets the `.ow-frame__col--scroll-*` mock-shell rules
   * read. They are artboard values, but the
   * rules that consume them were ported into layer 2, so the tokens have to
   * come with them: without a definition `calc(var(...) * -1)` is invalid at
   * computed-value time and the declaration drops silently. */
  --ow-frame-scroll-installer: 820px;
  --ow-frame-scroll-fact: 940px;
  --ow-frame-scroll-nudge: 60px;
  /* Four values that were literals in the design layer, tokenised on the port.
   * A literal colour anywhere is a defect. Two of them are
   * the always-dark chrome (the `.ow-nav--dark` rail, the sign-in hero panel),
   * which is why they have no `.theme-dark` counterpart below — they are dark
   * in both themes by design. `--ow-color-border-strong` does: as a literal it
   * painted a light-grey hover border on a dark input. */
  --ow-color-border-strong: #cbd5e1;
  --ow-color-nav-surface: #11151c;
  --ow-color-nav-heading: #ffffff;
  --ow-color-on-dark: #e6e6e6;
}

/* Dark mode is a token swap only — no per-component rules.
 *
 * `color-scheme` is declared with the tokens rather than left out: it is what
 * makes the things CSS does not own follow the theme — form control chrome,
 * scrollbars, the caret, spellcheck underlines, and the canvas behind an
 * overscroll. Without it a dark page keeps light scrollbars. */
/* line 587, app/assets/stylesheets/_ow_tokens.scss */
.theme-dark {
  color-scheme: dark;
  /* Notice-stack tones, dark. */
  --ow-notice-fail-edge: #f87171;
  --ow-notice-fail-tile: #f87171;
  --ow-notice-fail-ink: #450a0a;
  --ow-notice-fail-fg: #fca5a5;
  --ow-notice-fail-surface: color-mix(in srgb, #dc2626 14%, var(--ow-color-surface));
  --ow-notice-fail-border: rgba(248, 113, 113, 0.38);
  --ow-notice-warn-edge: #fbbf24;
  --ow-notice-warn-tile: #fbbf24;
  --ow-notice-warn-ink: #451a03;
  --ow-notice-warn-fg: #fcd34d;
  --ow-notice-warn-surface: color-mix(in srgb, #f59e0b 12%, var(--ow-color-surface));
  --ow-notice-warn-border: rgba(251, 191, 36, 0.36);
  --ow-notice-update-edge: #fb923c;
  --ow-notice-update-tile: #fb923c;
  --ow-notice-update-ink: #431407;
  --ow-notice-update-fg: #fdba74;
  --ow-notice-update-surface: color-mix(in srgb, #f58220 14%, var(--ow-color-surface));
  --ow-notice-update-border: rgba(251, 146, 60, 0.40);
  --ow-notice-soon-edge: #7fb2f0;
  --ow-notice-soon-tile: #7fb2f0;
  --ow-notice-soon-ink: #0c1e4a;
  --ow-notice-soon-fg: #a8cbf7;
  --ow-notice-soon-surface: color-mix(in srgb, #2463ff 14%, var(--ow-color-surface));
  --ow-notice-soon-border: rgba(127, 178, 240, 0.36);
  --ow-color-page-bg: #121417;
  --ow-color-surface: #1a1d21;
  --ow-color-surface-alt: #1f2327;
  --ow-color-border: #3a3f45;
  --ow-color-border-soft: #2a2e33;
  --ow-color-border-strong: #4b525a;
  --ow-color-text: #e6e6e6;
  --ow-color-muted: #aab2bb;
  --ow-color-heading: #ffffff;
  --ow-color-row-hover: rgba(255, 255, 255, 0.06);
  --ow-color-thead-bg: #1f2327;
  --ow-color-selected-bg: rgba(245, 130, 32, 0.10);
  --ow-color-selected-row: rgba(245, 130, 32, 0.14);
  --ow-shell-header-bg: rgba(20, 24, 31, 0.9);
  --ow-shadow-table: 0 1px 2px rgba(0, 0, 0, 0.5), 0 14px 34px rgba(0, 0, 0, 0.42);
  --ow-shadow-card: 0 1px 2px rgba(0, 0, 0, 0.5), 0 10px 26px rgba(0, 0, 0, 0.4);
  --ow-shadow-contact: 0 1px 2px rgba(0, 0, 0, 0.45);
  --ow-shadow-dot: 0 1px 3px rgba(0, 0, 0, 0.5);
  --ow-shadow-drawer: -24px 0 60px rgba(0, 0, 0, 0.5);
  --ow-hover-tint: rgba(245, 130, 32, 0.18);
  /* The weighing console's own deck in dark mode: anthracite, with the
   * translucent whites and instrument hues that read on it. */
  --ow-console-bg: var(--ow-color-nav-dark);
  --ow-console-surface: rgba(255, 255, 255, 0.05);
  --ow-console-surface-soft: rgba(255, 255, 255, 0.03);
  --ow-console-surface-strong: rgba(255, 255, 255, 0.08);
  --ow-console-border: rgba(255, 255, 255, 0.1);
  --ow-console-border-soft: rgba(255, 255, 255, 0.07);
  --ow-console-border-strong: rgba(255, 255, 255, 0.18);
  --ow-console-text: #ffffff;
  --ow-console-muted: var(--ow-color-nav-text);
  /* A step above the rail's label grey, which is pitched for the navigation
   * and reads short of AA on the deck. */
  --ow-console-faint: #8a94a3;
  --ow-console-detail-bg: rgba(0, 0, 0, 0.16);
  --ow-console-brand-edge: rgba(245, 130, 32, 0.4);
  --ow-console-brand-tint: rgba(245, 130, 32, 0.12);
  --ow-console-brand-tint-strong: rgba(245, 130, 32, 0.22);
  --ow-console-ok: #6ee7a0;
  --ow-console-ok-bg: rgba(47, 158, 68, 0.18);
  --ow-console-ok-seg: #3fbf6f;
  --ow-console-warn: #fbbf24;
  --ow-console-warn-bg: rgba(245, 158, 11, 0.18);
  --ow-console-motion: #ffb37a;
  --ow-console-rest: rgba(255, 255, 255, 0.2);
  --ow-hover-glyph: var(--ow-color-brand);
  --ow-color-text-soft: #c3ccd6;
  --ow-color-online: #22c55e;
  --ow-color-online-fg: #4ade80;
  --ow-color-online-bg: rgba(34, 197, 94, 0.12);
  --ow-color-brand-edge: rgba(245, 130, 32, 0.45);
  --ow-canvas-bg: #0f1114;
  --ow-color-link: #7fb2f0;
  --ow-color-link-hover: #a8cbf7;
  --ow-status-info-bg: rgba(36, 99, 255, 0.16);
  --ow-status-info-fg: #a8cbf7;
}

/*
 * ONE FAMILY, ONE PLACE.
 *
 * This is the only file in the app that names a font file. Geist for the whole
 * UI, Geist Mono for strings a person transcribes or compares character by
 * character (API keys, endpoints, enrolment links, EWC codes). Both OFL 1.1,
 * both self-hosted from app/assets/fonts/geist/.
 *
 * Inter is gone entirely — not kept as a fallback. Two families loaded for one
 * UI compete for the same weights, double the font payload on a weighbridge
 * tablet, and make `document.fonts.check` meaningless. If a screen looks wrong
 * without Inter, that screen has a hardcoded font stack and the stack is the
 * defect.
 *
 * VENDOR THESE FOUR FILES (from vercel/geist-font, releases → assets):
 *   app/assets/fonts/geist/Geist-Variable.woff2     (upstream Geist[wght].woff2)
 *   app/assets/fonts/geist/GeistMono-Variable.woff2 (upstream GeistMono[wght].woff2)
 * Renamed on vendoring: sassc's `font-url()` rejects the square brackets in
 * the released filenames as an invalid URI, so the asset pipeline cannot
 * resolve them under their upstream names.
 * Both are variable, so five static weights become one request each. The
 * `font-weight: 100 900` range is what lets 800 — the weight the data and
 * title roles ask for — actually resolve, which is the bug the old Google
 * Fonts pull had.
 *
 * TWO THINGS TO STRIP FROM THE TOKEN LAYER when folding `ow-globals.css` into
 * `ow_foundation`, or this file's "one family" claim is only half true:
 *   1. `"Inter"` in `--ow-font-family`'s stack — no Inter face is declared
 *      here, so the entry falls through to Segoe/Helvetica rather than Inter.
 *   2. the `.theme-inter` rule — a design-time migration-comparison theme that
 *      cannot work downstream for the same reason. Both are marked
 *      design-time-only at their definitions.
 *
 * `font-display: swap` so text paints immediately in the fallback rather than
 * sitting invisible while the file loads.
 */
@font-face {
  font-family: "Geist";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(/assets/geist/Geist-Variable-2ffebe993e969069a9789d15164b7715d42491b5835516c5e3b935d5f81b05f1.woff2) format("woff2-variations");
}

@font-face {
  font-family: "Geist Mono";
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url(/assets/geist/GeistMono-Variable-afaacc4c5fbba89d2ebf7a02dc4070208540874592a5504d57175782fe893101.woff2) format("woff2-variations");
}

/* Base ------------------------------------------------------------------- */
/* line 56, app/assets/stylesheets/_ow_typography.scss */
body,
input,
select,
textarea,
button {
  font-family: var(--ow-font-family);
}

/* line 64, app/assets/stylesheets/_ow_typography.scss */
body {
  color: var(--ow-color-text);
  font-size: var(--ow-type-body);
  font-weight: var(--ow-type-body-weight);
  line-height: var(--ow-line-height);
}

/* With Bootstrap gone these are the whole heading treatment, not a partial
 * statement layered over its sizes. Size and weight come from the type roles
 * below; a heading with neither is a body-sized heading, which is a markup bug
 * worth being able to see. */
/* line 75, app/assets/stylesheets/_ow_typography.scss */
h1, h2, h3, h4, h5, h6 {
  color: var(--ow-color-heading);
  font-family: var(--ow-font-family);
  letter-spacing: var(--ow-tracking-tight);
  margin: 0;
}

/* `text-decoration: none` is part of the contract, not a preference.
 * Nearly every link in this design is a
 * control - a filter pill, a nav row, a table action - and the UA underline
 * drew a line under all of them. `.ow-linklike` puts the underline back on
 * hover for the few links that are genuinely prose links. */
/* line 87, app/assets/stylesheets/_ow_typography.scss */
a {
  color: var(--ow-color-link);
  text-decoration: none;
}

/* line 92, app/assets/stylesheets/_ow_typography.scss */
a:hover,
a:focus {
  color: var(--ow-color-link-hover);
}

/* One focus ring everywhere, stated once. Deliberately not scoped to `.ow-*`:
 * a focus indicator missing from a control is an accessibility defect, not a
 * styling preference. */
/* line 100, app/assets/stylesheets/_ow_typography.scss */
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus,
[tabindex]:focus {
  border-color: var(--ow-color-brand);
  box-shadow: 0 0 0 2px var(--ow-focus-ring);
  outline: 0;
}

/* A mouse click focuses a link or button too, and ringing every clicked
 * control is noise. Keyboard focus keeps the ring; pointer focus drops it.
 * Text inputs are excluded — a caret alone is a weak indicator of which field
 * is live on a bright weighbridge screen. */
/* line 115, app/assets/stylesheets/_ow_typography.scss */
a:focus:not(:focus-visible),
button:focus:not(:focus-visible),
[tabindex]:focus:not(:focus-visible) {
  box-shadow: none;
}

/* Type roles -------------------------------------------------------------- */
/* line 123, app/assets/stylesheets/_ow_typography.scss */
.ow-type-page-title {
  font-size: var(--ow-type-page-title);
  font-weight: var(--ow-type-page-title-weight);
  letter-spacing: var(--ow-tracking-tight);
  line-height: var(--ow-type-page-title-line);
}

/* line 130, app/assets/stylesheets/_ow_typography.scss */
.ow-type-view-title {
  font-size: var(--ow-type-view-title);
  font-weight: var(--ow-type-view-title-weight);
  letter-spacing: var(--ow-tracking-tight);
  line-height: 28px;
}

/* line 137, app/assets/stylesheets/_ow_typography.scss */
.ow-type-section-title {
  font-size: var(--ow-type-section-title);
  font-weight: var(--ow-type-section-title-weight);
  letter-spacing: var(--ow-tracking-tight);
  line-height: var(--ow-type-section-title-line);
}

/* line 144, app/assets/stylesheets/_ow_typography.scss */
.ow-type-card-title {
  font-size: var(--ow-type-card-title);
  font-weight: var(--ow-type-card-title-weight);
  line-height: 24px;
}

/* line 150, app/assets/stylesheets/_ow_typography.scss */
.ow-type-body {
  font-size: var(--ow-type-body);
  font-weight: var(--ow-type-body-weight);
  line-height: var(--ow-type-body-line);
}

/* line 156, app/assets/stylesheets/_ow_typography.scss */
.ow-type-body-strong {
  font-size: var(--ow-type-body);
  font-weight: var(--ow-type-body-strong-weight);
  line-height: var(--ow-type-body-line);
}

/* line 162, app/assets/stylesheets/_ow_typography.scss */
.ow-type-small,
.ow-type-meta {
  font-size: var(--ow-type-meta);
  font-weight: var(--ow-type-small-weight);
  line-height: var(--ow-type-small-line);
}

/* line 169, app/assets/stylesheets/_ow_typography.scss */
.ow-type-caption {
  font-size: var(--ow-type-caption-size);
  font-weight: var(--ow-type-caption-weight);
  line-height: var(--ow-type-caption-line);
}

/* line 175, app/assets/stylesheets/_ow_typography.scss */
.ow-type-micro {
  font-size: var(--ow-type-micro);
  line-height: 16px;
}

/* An eyebrow or a table header is structural, so it is uppercase, heavy and
 * tracked out. Sentence case everywhere else. */
/* line 182, app/assets/stylesheets/_ow_typography.scss */
.ow-type-label {
  font-size: var(--ow-type-label);
  font-weight: var(--ow-type-label-weight);
  letter-spacing: var(--ow-tracking-label);
  line-height: 18px;
  text-transform: uppercase;
}

/* A figure the operator reads at a glance — a weight, a total, a KPI. Tabular
 * figures so digits do not shift column as they change. Deliberately NO
 * family of its own: it inherits `--ow-font-family` (Geist), which is what the
 * design layer defines. Mono is reserved for strings a person transcribes or
 * compares character by character — setting it here would put every weight,
 * total, KPI tile and console readout in Geist Mono. */
/* line 196, app/assets/stylesheets/_ow_typography.scss */
.ow-type-data {
  font-feature-settings: "tnum" 1;
  font-size: var(--ow-type-data);
  font-variant-numeric: tabular-nums;
  font-weight: var(--ow-type-data-weight);
  line-height: 26px;
}

/* Tabular figures WITHOUT the data role's size and weight, for a number that
 * sits in running text or a table cell: a quantity column, a price, a count.
 * `ow-globals.css` §6 declares it beside `.ow-type-data`; the port kept the
 * role and dropped the alias, so five artboards' number columns lost their
 * tabular figures and digits shifted column as values changed. */
/* line 209, app/assets/stylesheets/_ow_typography.scss */
.ow-numeric {
  font-feature-settings: "tnum" 1;
  font-variant-numeric: tabular-nums;
}

/* Below 768px every real input is a touch target: 56px tall with 24px/600
 * text. Global, not per-screen — the same form is used on a weighbridge tablet
 * as on a desk. Type-restricted so it cannot catch checkboxes, radios, hidden
 * fields or file pickers. */
/* `select.ow-select` and `textarea.ow-textarea` are spelled with their class
 * because a bare type selector loses to one. `.ow-select` (0,1,0) sets
 * `font-size: var(--ow-type-body)` in layer 2 and outranked the `select`
 * (0,0,1) below, so a select kept body type in a 56px box while the text input
 * beside it took 24px — the type selector raised the height and the class held
 * the size. `input[type="text"]` is (0,1,1) and already wins, which is why
 * inputs were never affected and why this went unseen. Qualifying the two by
 * type AND class makes them (0,1,1) too, so they win wherever they sit in the
 * cascade rather than by file order. */
@media (max-width: 767px) {
  /* line 228, app/assets/stylesheets/_ow_typography.scss */
  input[type="text"],
input[type="search"],
input[type="email"],
input[type="password"],
input[type="number"],
input[type="tel"],
input[type="url"],
input[type="date"],
input[type="datetime-local"],
select,
select.ow-select,
textarea,
textarea.ow-textarea {
    font-size: var(--ow-type-touch-input);
    font-weight: var(--ow-type-touch-input-weight);
    min-height: var(--ow-control-h-touch);
  }
  /* line 246, app/assets/stylesheets/_ow_typography.scss */
  textarea,
textarea.ow-textarea {
    min-height: calc(var(--ow-control-h-touch) * 2);
  }
}

/* Base reset ------------------------------------------------------------- */
/* line 18, app/assets/stylesheets/ow_foundation.css.scss */
* {
  box-sizing: border-box;
}

/* line 20, app/assets/stylesheets/ow_foundation.css.scss */
html, body {
  background: var(--ow-color-page-bg);
  margin: 0;
  padding: 0;
}

/*
  `hidden` must actually hide.

  The UA rule behind the attribute is `[hidden] { display: none }` at zero
  specificity, so ANY class that sets `display` beats it - and layer 2 is full
  of them. The drawer host is `.ow-overlay`, which is `display: flex`, so a
  `hidden` host rendered as a full-screen scrim over every page until this rule
  existed. Found in the browser, invisibly to the tests.

  This belongs in the base layer rather than beside any one component: the next
  thing built on a `display`-setting primitive would hit exactly the same trap.
*/
/* line 38, app/assets/stylesheets/ow_foundation.css.scss */
[hidden] {
  display: none !important;
}

/* ── 4. Shared primitives the screens had each re-declared ─────────────── */
/* line 42, app/assets/stylesheets/ow_foundation.css.scss */
.ow-surface {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-card);
  box-shadow: var(--ow-shadow-table);
}

/* line 49, app/assets/stylesheets/ow_foundation.css.scss */
.ow-input {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  font-family: inherit;
  font-size: var(--ow-type-body);
  height: var(--ow-control-h-lg);
  padding: 0 var(--ow-space-3);
  transition: border-color var(--ow-dur-hover) var(--ow-ease), box-shadow var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}

/* line 61, app/assets/stylesheets/ow_foundation.css.scss */
.ow-input:hover {
  border-color: var(--ow-color-border-strong);
}

/* line 62, app/assets/stylesheets/ow_foundation.css.scss */
.ow-input:disabled {
  background: var(--ow-color-surface-alt);
  color: var(--ow-color-faint);
  cursor: not-allowed;
}

/* line 68, app/assets/stylesheets/ow_foundation.css.scss */
.ow-field {
  display: flex;
  flex-direction: column;
  gap: 6px;
  min-width: 0;
}

/* The field label is a label, and now says so: it sat on `micro`, which also
 * sets table headings, and the approved scale pulls those two apart (13 and
 * 12). */
/* line 72, app/assets/stylesheets/ow_foundation.css.scss */
.ow-field__label {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-label);
  font-weight: 800;
  letter-spacing: 0.05em;
  text-transform: uppercase;
}

/* line 79, app/assets/stylesheets/ow_foundation.css.scss */
.ow-field__hint {
  color: var(--ow-color-muted);
  font-size: var(--ow-type-meta);
  line-height: var(--ow-line-height);
}

/* ── Status vocabulary ─────────────────────────────────────────────────────
 * The canonical tone set. These seven names are the ONLY status words in the
 * project; every screen, every fixture tone map and the design-system
 * `Badge` component's `tone` prop use exactly these, and nothing else is
 * defined. Reaching for a name that is not on this list renders unstyled.
 *
 *   --pass     a good, settled state: Active, Approved, Valid, Closed, In list,
 *              Connected, Enabled, seen recently, presence confirmed
 *   --warning  attention, still fine: Open, Awaiting Pair, Expiring, Invited,
 *              Tipping, direction/weight warnings
 *   --fail     wrong or absent when it should not be: Archived-with-cause,
 *              Check failed, Expired, Offline, Never seen, Suspended
 *   --due      an action is owed, nothing is broken yet: Unverified,
 *              Revalidation due, override in force
 *   --info     a classification, not a state: role names, Primary, Partial Pair
 *   --neutral  no state, or a deliberately weightless one: Archived, Disabled,
 *              Cancelled, Unlinked, codes, "None needed", absence of presence
 *   --brand    the one configured default per owning role — nothing else
 *
 * Two rules that outrank the styling. Status is icon-only in dense table
 * cells, carrying its label in a tooltip. Derived states (expired, expiring,
 * stale) are computed at read time and never persisted.
 *
 * Layer note for the Rails port: this whole block is layer 1. Keep it here —
 * a tone declared per screen or per page stylesheet is the defect this set
 * exists to remove. --fixed is the only modifier that is not a tone. */
/* line 107, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge {
  align-items: center;
  border-radius: var(--ow-radius-pill);
  display: inline-flex;
  font-size: var(--ow-type-micro);
  font-weight: 700;
  gap: 6px;
  line-height: 22px;
  min-height: 22px;
  padding: 0 var(--ow-space-2);
  white-space: nowrap;
}

/* line 119, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge i {
  font-size: 10px;
}

/* line 120, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--pass {
  background: var(--ow-status-pass-bg);
  color: var(--ow-status-pass-fg);
}

/* line 121, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--warning {
  background: var(--ow-status-warning-bg);
  color: var(--ow-status-warning-fg);
}

/* line 122, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--fail {
  background: var(--ow-status-fail-bg);
  color: var(--ow-status-fail-fg);
}

/* line 123, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--info {
  background: var(--ow-status-info-bg);
  color: var(--ow-status-info-fg);
}

/* line 124, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--neutral {
  background: var(--ow-color-border-soft);
  color: var(--ow-color-muted);
}

/* line 125, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--brand {
  background: var(--ow-color-brand-tint);
  color: var(--ow-color-brand-deep);
}

/* line 126, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--due {
  background: var(--ow-status-due-bg);
  color: var(--ow-status-due-fg);
}

/* Equal-width badge for a run of parallel yes/no flags (1st / 2nd / Tip), so
 * the row reads as a set rather than as ragged pills. Not a tone. */
/* line 129, app/assets/stylesheets/ow_foundation.css.scss */
.ow-badge--fixed {
  justify-content: center;
  letter-spacing: var(--ow-tracking-wide);
  width: 52px;
}

/* line 131, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill {
  align-items: center;
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-text);
  display: inline-flex;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-2);
  min-height: 28px;
  padding: 0 var(--ow-space-3);
  white-space: nowrap;
}

/* line 145, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill i {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-micro);
}

/* line 146, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill--brand {
  background: var(--ow-color-brand-tint);
  border-color: var(--ow-color-brand-tint-strong);
  color: var(--ow-color-brand-deep);
}

/* line 151, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill--brand i {
  color: var(--ow-color-brand);
}

/* line 152, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill--pass {
  background: var(--ow-status-pass-bg);
  border-color: transparent;
  color: var(--ow-status-pass-fg);
}

/* line 153, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill--pass i {
  color: var(--ow-status-pass-fg);
}

/* line 154, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill--warning {
  background: var(--ow-status-warning-bg);
  border-color: transparent;
  color: var(--ow-status-warning-fg);
}

/* line 155, app/assets/stylesheets/ow_foundation.css.scss */
.ow-pill--warning i {
  color: var(--ow-status-warning-fg);
}

/* The shared panel/detail entrance, used by every expandable row and drawer. */
@keyframes ow-in {
  from {
    opacity: 0;
    transform: translateY(-4px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}
/*
 * LAYER 2 — THE COMPONENT LAYER, AND THE DELIVERABLE.
 *
 * The classes here are the contract, not an illustration of one: a screen is
 * markup over these class names and declares no styles of its own. Copy the
 * classes; do not restate their rules in a view or a page stylesheet.
 *
 * Everything resolves to a token in `_ow_tokens.scss`; there is no literal
 * colour in this file. Dark mode is the token swap and nothing here has a dark
 * rule of its own.
 *
 * FILE EXTENSION: plain `.css`, deliberately. This layer is preprocessor-free
 * CSS and uses modern CSS functions — `min()`, `max()`, `clamp()` — that sassc
 * parses as its own legacy Sass functions and rejects ("Incompatible units:
 * 'px' and 'vw'"). Running it through Sass buys nothing and breaks the build,
 * so it is served as written.
 *
 * The table section is `ow-data-table.css` folded in: one table in the portal,
 * one card shell, one sticky header, one sticky-right Actions column. There is no second table and no per-screen table
 * styling.
 *
 * NAMING, decided 2026-08-21 by the operator: this file's vocabulary is
 * canonical. `.ow-card`, `.ow-btn-*`, `.ow-chip`, `.ow-actionbar`, `.ow-empty`,
 * `.ow-stat` and `.ow-data-table__footer` are first-class primitives, not
 * compatibility aliases. The competing set once named in
 * the retired UI vocabulary (`ow-surface__*`, `ow-button--primary`,
 * `ow-pill--success`, `ow-empty-state`, `ow-record-card`, `ow-summary-card`,
 * `ow-data-table__pagination`) is retired; that doc now points here.
 *
 * If a screen needs something this file does not have, use the nearest
 * primitive it does have. If nothing is close, add it HERE as a token-only
 * rule so every screen gets it. Never a per-page fix, and never a legacy
 * selector reintroduced as a bridge.
 */

/* OpenWeigh — shared component layer.
 *
 * Second and last stylesheet every screen links, after ow-globals.css:
 *
 *   <link rel="stylesheet" href="./ow-globals.css">      tokens + base + type roles
 *   <link rel="stylesheet" href="./ow-components.css">   the classes below
 *   <link rel="stylesheet" href="./ow-data-table.css">   only if the page has a data table
 *
 * Rules for authoring screens against this file:
 *   1. No inline `style` attributes on a screen. If a value is presentational,
 *      it belongs to a class here. If it is state, it is a modifier class
 *      (`.is-active`, `.is-open`, `.ow-nav--collapsed`) that this file styles.
 *   2. No literals. Every value is a `var(--ow-*)` from ow-globals.css.
 *      A value that isn't a token yet gets a token there first.
 *   3. Never restate a rule a design-system bundle component already carries —
 *      mount OpenWeighDesignSystem_5c935f.Button / IconButton / Badge / etc.
 *      `.ow-btn` below exists for the plain-markup cases the bundle can't reach
 *      (anchors, template-driven lists) and is the same treatment by design.
 *   4. Dark mode is never handled here. It is a token swap in ow-globals.css.
 *
 * Sections: 1 layout · 2 type + text · 3 shell nav · 4 top bar + menus
 * 5 buttons · 6 forms · 7 cards + panels · 8 status · 9 overlays · 10 states
 * 11 record hero + form bands + docks · 12 sign-in · 13 record search
 * 14 profile · 15 ticket card · 16 log cells · 17 weighing activities
 * 18 style-reference specimens · 19 artboard canvas + mock portal frames
 */

/* ── 1. Layout ─────────────────────────────────────────────────────────── */


.ow-shell { background: var(--ow-color-page-bg); min-height: 100vh; }
/* The rail is `position: fixed`, so the content column is inset by margin.
 * Two widths only, and none below the mobile breakpoint. */
.ow-shell__main {
  display: flex;
  flex-direction: column;
  margin-left: var(--ow-sidebar-width);
  min-height: 100vh;
  min-width: 0;
  transition: margin-left var(--ow-dur-state) var(--ow-ease-out);
}
.ow-shell__main--rail { margin-left: 76px; }
/* Fixed-height shell: the results surface scrolls internally instead of the
 * page. Desktop only — mobile keeps normal document flow. */
@media (min-width: 768px) {
  .ow-shell--fixed, .ow-shell--fixed .ow-shell__main { height: 100vh; overflow: hidden; }
  /* The body scrolls rather than clips: on a short window the results surface
   * keeps its floor and the page gives way instead of hiding the footer. */
  .ow-shell--fixed .ow-shell__body { display: flex; flex: 1 1 auto; flex-direction: column; min-height: 0; overflow: auto; }
}
.ow-shell--fixed .ow-shell__body > .ow-stack { flex: 1 1 auto; min-height: 0; }
/* A section stack nested one level down (a screen that switches between
 * sections) passes the height on, so its results table still fills the page. */
.ow-shell--fixed .ow-shell__body > .ow-stack > .ow-stack { flex: 1 1 auto; min-height: 0; }
@media (max-width: 767px) { .ow-shell__main, .ow-shell__main--rail { margin-left: 0; } }
.ow-shell__body {
  flex: 1 1 auto;
  margin: 0 auto;
  max-width: var(--ow-page-max);
  padding: var(--ow-space-6) var(--ow-gutter-page) var(--ow-space-8);
  width: 100%;
}
.ow-shell__body--wide { max-width: var(--ow-page-max-wide); }
.ow-shell__body--flush { padding-top: var(--ow-space-4); }
/* Signed-out pages own the whole viewport: the auth split (`.ow-auth`) is a
 * full-bleed two-column layout, so the content column's page measure and
 * gutters have to come off rather than be worked around per screen. */
.ow-shell__body--bare { max-width: none; padding: 0; }
@media (max-width: 767px) {
  .ow-shell__body { padding: var(--ow-space-4) var(--ow-gutter-page-mobile) var(--ow-space-7); }
  .ow-shell__body--bare { padding: 0; }
}

/* The one gradient in the system: the 3px rule above header and dialog chrome. */
/* Brand-coloured inline mark (icon or word inside body copy). */
.ow-brand { color: var(--ow-color-brand); }

.ow-brand-rule { background: var(--ow-brand-rule); flex: none; height: var(--ow-brand-rule-height); }

/* Flex/grid helpers. Everything laid out as siblings uses one of these,
 * never source whitespace or per-element margins. */
.ow-row { align-items: center; display: flex; gap: var(--ow-space-3); min-width: 0; }
.ow-row--tight { gap: var(--ow-space-2); }
.ow-row--loose { gap: var(--ow-space-4); }
.ow-row--wrap { flex-wrap: wrap; }
.ow-row--between { justify-content: space-between; }
.ow-row--end { justify-content: flex-end; }
.ow-row--baseline { align-items: baseline; }
.ow-row--top { align-items: flex-start; }
/* TEXT LEFT, ONE ACTION RIGHT, and the action drops beneath it on a phone
 * instead of being squeezed. A plain wrapping row decides where the action
 * lands from how long the text happens to be, so two cards in one list
 * disagree with each other; this settles it by width alone. */
.ow-row--action { flex-wrap: nowrap; }
.ow-row--action > .ow-fill { flex: 1 1 0; }
@media (max-width: 767px) {
  .ow-row--action { flex-wrap: wrap; }
  .ow-row--action > .ow-fill { flex: 1 1 100%; }
}
.ow-stack { display: flex; flex-direction: column; gap: var(--ow-space-3); min-width: 0; }
.ow-stack--tight { gap: var(--ow-space-2); }
.ow-stack--hair { gap: var(--ow-space-1); }
.ow-stack--loose { gap: var(--ow-space-5); }
.ow-stack--section { gap: var(--ow-space-6); }
.ow-grid { display: grid; gap: var(--ow-space-4); }
.ow-grid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ow-grid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-grid--4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ow-grid--auto { grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
.ow-grid--auto-wide { grid-template-columns: repeat(auto-fill, minmax(300px, 1fr)); }
@media (max-width: 991px) {
  .ow-grid--3, .ow-grid--4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767px) {
  .ow-grid--2, .ow-grid--3, .ow-grid--4 { grid-template-columns: minmax(0, 1fr); }
}
.ow-fill { flex: 1 1 auto; min-width: 0; }
/* Shrinkable flex column — the parent a scrolling child needs to size against. */
.ow-flexcol { display: flex; flex: 1 1 auto; flex-direction: column; min-height: 0; min-width: 0; }
/* A results surface should never collapse to nothing when the chrome above it
 * is tall; it keeps a floor and scrolls internally. */
.ow-flexcol--results { min-height: 340px; }
.ow-push { margin-left: auto; }
/* Pushes a flex column's last part to the bottom, so cards sitting side by
 * side in a grid end their actions on the same line whatever their content. */
.ow-pushdown { margin-top: auto; }
.ow-span-all { grid-column: 1 / -1; }
/* Record page: content column plus a 324px rail. */
.ow-page-grid { align-items: start; display: grid; gap: var(--ow-space-4); grid-template-columns: minmax(0, 1fr) 324px; }
@media (max-width: 991px) { .ow-page-grid { grid-template-columns: minmax(0, 1fr); gap: var(--ow-space-3); } }
/* Two-column field grid, one column on mobile. */
.ow-formgrid { display: grid; gap: var(--ow-space-4); grid-template-columns: repeat(2, minmax(0, 1fr)); padding: var(--ow-space-4); }
@media (max-width: 767px) { .ow-formgrid { grid-template-columns: minmax(0, 1fr); } }
.ow-fixed { flex: none; }
/* A FIXED ITEM ON A WRAPPING ROW STILL HAS TO FIT THE ROW.
 *
 * `flex: none` keeps an item at its own natural width, and a `.ow-select`
 * wrapped in one is as wide as its longest option: left to hold it, the audit
 * toolbar's "Changed by" select stands at 471px and carries a 390px page
 * 106px past its own viewport, with no narrower line for the wrap to find.
 *
 * A wrapping row has already said its items may be laid out as they fit, so
 * one of them is allowed to give rather than take the page sideways. This only
 * bites where a line overflows: wherever the row has room the item is still at
 * its natural width, so the desktop measures are unchanged. */
.ow-row--wrap > .ow-fixed { flex-shrink: 1; min-width: 0; }
.ow-divider { background: var(--ow-color-border); border: 0; flex: none; height: 1px; margin: 0; width: 100%; }
.ow-divider--v { height: 26px; width: 1px; }
.ow-divider--soft { background: var(--ow-color-border-soft); }
/* Full-bleed band inside the padded content column (page head, hero). */
.ow-bleed { margin: calc(var(--ow-space-4) * -1) calc(var(--ow-gutter-page) * -1) 0; }
@media (max-width: 767px) { .ow-bleed { margin: calc(var(--ow-gutter-page-mobile) * -1) calc(var(--ow-gutter-page-mobile) * -1) 0; } }
.ow-pagehead { background: var(--ow-color-surface); border-bottom: 1px solid var(--ow-color-border); }
.ow-pagehead__body { display: flex; flex-direction: column; gap: var(--ow-space-3); padding: 14px var(--ow-gutter-page); }
@media (max-width: 767px) { .ow-pagehead__body { padding: 14px var(--ow-gutter-page-mobile); } }
.ow-hide-mobile { display: initial; }
.ow-only-mobile { display: none; }
@media (max-width: 767px) {
  .ow-hide-mobile { display: none; }
  .ow-only-mobile { display: initial; }
}

/* ── 2. Type and text ──────────────────────────────────────────────────── */
/* The px type roles live in ow-globals.css as .ow-type-*. These are the
 * recurring text treatments built on top of them. */

.ow-eyebrow {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-micro);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-label);
  text-transform: uppercase;
}
.ow-eyebrow--nano { font-size: var(--ow-type-nano); }
.ow-eyebrow--brand { color: var(--ow-color-brand); }
.ow-title { font-size: var(--ow-type-view-title); font-weight: 800; letter-spacing: var(--ow-tracking-tighter); margin: 0; }
.ow-title--page { font-size: var(--ow-type-page-title); }
.ow-title--section { font-size: var(--ow-type-section-title); font-weight: 700; letter-spacing: var(--ow-tracking-tight); }
.ow-title--card { font-size: var(--ow-type-card-title); font-weight: 600; letter-spacing: 0; }
.ow-lede { color: var(--ow-color-muted); font-size: var(--ow-type-body); line-height: var(--ow-line-height); margin: 0; max-width: 68ch; }
.ow-meta { color: var(--ow-color-muted); font-size: var(--ow-type-meta); }
.ow-meta--strong { color: var(--ow-color-text); font-weight: 700; }
.ow-meta--label { font-size: var(--ow-type-label); line-height: var(--ow-line-height); }
.ow-muted { color: var(--ow-color-muted); }
.ow-faint { color: var(--ow-color-faint); }
.ow-strong { font-weight: 700; }
.ow-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* `.ow-truncate`'s multi-line counterpart, for a text cell that carries a
 * sentence rather than a name: two lines, then an ellipsis. A table row is
 * sized by its tallest cell, so one long free-text column sets the height of
 * every row in the board; clamping it holds the row rhythm without hiding
 * anything, because the cell that uses it sits in a row that expands.
 * Needs a block container of its own, so it goes on a span inside the cell
 * rather than on the `td`, which must stay `display: table-cell`. */
.ow-clamp-2 {
  -webkit-box-orient: vertical;
  -webkit-line-clamp: 2;
  display: -webkit-box;
  overflow: hidden;
}
/* A button that reads as a record link — table name cells whose click opens an editor rather than navigating. */
.ow-linklike { background: none; border: 0; padding: 0; font: inherit; text-align: left; color: var(--ow-color-link); cursor: pointer; }
.ow-linklike:hover { color: var(--ow-color-link-hover); text-decoration: underline; }
.ow-nowrap { white-space: nowrap; }
.ow-mono { color: var(--ow-color-muted); font-family: var(--ow-font-mono); font-size: var(--ow-type-label); }
.ow-mono--faint { color: var(--ow-color-faint); }
.ow-mono--text { color: var(--ow-color-text); font-weight: 700; }
/* Money, weights, serials and counts: tabular 800-weight figures. */
.ow-figure {
  font-feature-settings: "tnum" 1;
  font-size: var(--ow-type-data);
  font-variant-numeric: tabular-nums;
  font-weight: var(--ow-type-data-weight);
  letter-spacing: var(--ow-tracking-tighter);
}
.ow-figure--lg { font-size: 27px; }
.ow-figure--sm { font-size: var(--ow-type-card-title); }
/* A record number: orange hash, 700 digits. */
.ow-recno { font-variant-numeric: tabular-nums; font-weight: 700; }
.ow-recno::before { color: var(--ow-color-brand); content: "#"; }

/* ── 3. Shell navigation ───────────────────────────────────────────────── */

.ow-nav {
  --nav-bg: var(--ow-color-surface);
  --nav-border: var(--ow-color-border);
  --nav-text: var(--ow-color-text);
  --nav-idle: var(--ow-color-muted);
  --nav-label: var(--ow-color-faint);
  --nav-sub: var(--ow-color-page-bg);
  --nav-hover-bg: var(--ow-color-brand-tint);
  --nav-hover-text: var(--ow-color-brand-deep);
  --nav-item-h: 42px;
  --nav-child-h: 38px;
  background: var(--nav-bg);
  border-right: 1px solid var(--nav-border);
  bottom: 0;
  display: flex;
  flex-direction: column;
  left: 0;
  overflow: hidden;
  padding-bottom: env(safe-area-inset-bottom);
  position: fixed;
  top: 0;
  transition: width var(--ow-dur-state) var(--ow-ease-out), transform var(--ow-dur-panel) var(--ow-ease-out);
  width: var(--ow-sidebar-width);
  z-index: var(--ow-z-sidebar);
}
.ow-nav--dark {
  --nav-bg: var(--ow-color-nav-surface);
  --nav-border: rgba(255, 255, 255, 0.07);
  --nav-text: var(--ow-color-nav-heading);
  --nav-idle: var(--ow-color-nav-text);
  --nav-label: var(--ow-color-nav-label);
  --nav-sub: rgba(255, 255, 255, 0.05);
  --nav-hover-bg: var(--ow-color-brand-tint-strong);
  --nav-hover-text: var(--ow-color-nav-heading);
}
.ow-nav--collapsed { width: 76px; }
.ow-nav--mobile {
  transform: translateX(-105%);
  width: min(86vw, 300px);
  z-index: 1060;
}
.ow-nav--mobile.is-open { box-shadow: 0 24px 60px var(--ow-scrim-nav); transform: translateX(0); }
.ow-nav--mobile { --nav-item-h: 48px; --nav-child-h: var(--ow-tap-min); }

.ow-nav__brand {
  align-items: center;
  display: flex;
  flex: none;
  gap: var(--ow-space-3);
  justify-content: center;
  min-height: 61px;
  padding: 14px var(--ow-space-4) var(--ow-space-3);
}
.ow-nav--collapsed .ow-nav__brand { padding: 14px 0 var(--ow-space-3); }
.ow-nav__brand img { display: block; height: auto; max-width: 170px; width: 100%; }
.ow-nav__mark {
  align-items: center;
  background: var(--ow-color-brand);
  border-radius: var(--ow-radius-lg);
  color: var(--ow-color-surface);
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-body);
  font-weight: 800;
  height: var(--ow-control-h-lg);
  justify-content: center;
  letter-spacing: var(--ow-tracking-tighter);
  width: 38px;
}
.ow-nav__block { flex: none; padding: 0 var(--ow-space-3) var(--ow-space-3); }
.ow-nav--collapsed .ow-nav__block { display: flex; justify-content: center; }

/* Site picker trigger */
.ow-nav__site {
  align-items: center;
  background: var(--nav-sub);
  border: 1px solid var(--nav-border);
  border-radius: var(--ow-radius-lg);
  color: var(--nav-text);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  gap: var(--ow-space-3);
  min-height: 48px;
  padding: 0 var(--ow-space-2);
  text-align: left;
  transition: background var(--ow-dur-hover) var(--ow-ease), border-color var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-nav__site:hover { background: var(--ow-color-brand-tint-strong); border-color: var(--ow-color-brand); }

/* Section mode: the rail carries one section's own menu in place of the portal
 * menu, so the way back has to live in the rail rather than on the page. Same
 * geometry as the site trigger, quieter surface — it is a way out, not a
 * primary control. */
.ow-nav__back {
  align-items: center;
  background: transparent;
  border: 1px solid var(--nav-border);
  border-radius: var(--ow-radius-lg);
  color: var(--nav-text);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  gap: var(--ow-space-3);
  min-height: 48px;
  padding: 0 var(--ow-space-2);
  text-align: left;
  transition: background var(--ow-dur-hover) var(--ow-ease), border-color var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-nav__back:hover { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand); }
.ow-nav__back-icon {
  align-items: center;
  color: var(--nav-label);
  display: flex;
  flex: none;
  font-size: var(--ow-type-body);
  justify-content: center;
  width: 28px;
}
.ow-nav__site-icon {
  align-items: center;
  background: var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-brand);
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-label);
  height: 28px;
  justify-content: center;
  width: 28px;
}
.ow-nav__site-label { color: var(--nav-label); display: block; font-size: var(--ow-type-nano); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-nav__site-name { color: var(--nav-text); display: block; font-size: var(--ow-type-meta); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-nav__site-caret { color: var(--nav-label); flex: none; font-size: var(--ow-type-label); }
.ow-nav__site--icon {
  align-items: center;
  background: var(--nav-sub);
  border: 1px solid var(--nav-border);
  border-radius: var(--ow-radius-lg);
  color: var(--ow-color-brand);
  cursor: pointer;
  display: inline-flex;
  font-size: var(--ow-type-body);
  height: var(--ow-tap-min);
  justify-content: center;
  width: var(--ow-tap-min);
}
.ow-nav__site--icon:hover { background: var(--ow-color-brand-tint-strong); }

.ow-nav__scroll { flex: 1 1 auto; overflow-x: hidden; overflow-y: auto; padding: 0 0 var(--ow-space-2); }
.ow-nav__group { margin-bottom: var(--ow-space-3); padding: 0 var(--ow-space-3); }
.ow-nav__legend {
  color: var(--nav-label);
  font-size: var(--ow-type-nano);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-label);
  margin: 0 0 6px;
  padding: 0 var(--ow-space-2);
  text-transform: uppercase;
}
.ow-nav__rule { background: var(--nav-border); height: 1px; margin: 0 6px 10px; }
.ow-nav__list { display: flex; flex-direction: column; gap: var(--ow-space-1); list-style: none; margin: 0; padding: 0; }
.ow-nav__li { margin: 0; position: relative; }

.ow-nav__item {
  align-items: center;
  background: transparent;
  border: none;
  border-radius: var(--ow-radius-md);
  color: var(--nav-idle);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  font-size: var(--ow-nav-item-size);
  font-weight: 600;
  gap: var(--ow-space-3);
  line-height: 20px;
  min-height: var(--nav-item-h);
  padding: 0 11px;
  position: relative;
  text-align: left;
  text-decoration: none;
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-nav__item:hover { background: var(--nav-hover-bg); color: var(--nav-hover-text); }
.ow-nav__item.is-active {
  background: var(--ow-color-brand);
  box-shadow: var(--ow-shadow-brand);
  color: var(--ow-color-surface);
  font-weight: 700;
}
.ow-nav__item.is-active:hover { background: var(--ow-color-brand); color: var(--ow-color-surface); }
.ow-nav--collapsed .ow-nav__item { justify-content: center; padding: 0; }
.ow-nav__icon { flex: none; font-size: var(--ow-type-body); text-align: center; width: 18px; }
.ow-nav__label { flex: 1 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-nav__caret { flex: none; font-size: var(--ow-type-micro); opacity: 0.75; }
.ow-nav__count {
  align-items: center;
  background: var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-brand);
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-micro);
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  height: 20px;
  justify-content: center;
  min-width: 22px;
  padding: 0 var(--ow-space-2);
}
.is-active > .ow-nav__count { background: rgba(255, 255, 255, 0.22); color: var(--ow-color-surface); }
.ow-nav__dot {
  background: var(--ow-color-brand);
  border-radius: 50%;
  height: 7px;
  position: absolute;
  right: 9px;
  top: 7px;
  width: 7px;
}
.ow-nav__children {
  border-left: 1px solid var(--nav-border);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-1);
  list-style: none;
  margin: 3px 0 var(--ow-space-1) 19px;
  padding: 0 0 0 var(--ow-space-4);
}
.ow-nav__child {
  align-items: center;
  background: transparent;
  border-radius: var(--ow-radius-md);
  color: var(--nav-idle);
  display: flex;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-3);
  line-height: 19px;
  min-height: var(--nav-child-h);
  padding: 0 var(--ow-space-2);
  text-decoration: none;
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
}
.ow-nav__child:hover { background: var(--nav-hover-bg); color: var(--nav-hover-text); }
.ow-nav__child.is-active { background: var(--ow-color-brand-tint-strong); color: var(--ow-color-brand); font-weight: 700; }
.ow-nav__child .ow-nav__icon { font-size: var(--ow-type-meta); width: 16px; }

.ow-nav__user {
  align-items: center;
  border-top: 1px solid var(--nav-border);
  display: flex;
  flex: none;
  gap: var(--ow-space-3);
  padding: var(--ow-space-2) var(--ow-space-3);
}
.ow-nav--collapsed .ow-nav__user { justify-content: center; }
.ow-nav__user-name { color: var(--nav-text); display: block; font-size: var(--ow-type-meta); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-nav__user-role { color: var(--nav-label); display: block; font-size: var(--ow-type-micro); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-nav__collapse {
  align-items: center;
  background: var(--nav-sub);
  border: none;
  border-top: 1px solid var(--nav-border);
  color: var(--nav-label);
  cursor: pointer;
  display: flex;
  flex: none;
  font-family: inherit;
  font-size: var(--ow-type-label);
  font-weight: 700;
  gap: var(--ow-space-2);
  justify-content: center;
  letter-spacing: var(--ow-tracking-label);
  min-height: var(--ow-tap-min);
  text-transform: uppercase;
}
.ow-nav__collapse:hover { background: var(--nav-hover-bg); color: var(--nav-hover-text); }
.ow-nav__collapse i { font-size: var(--ow-type-meta); }
.ow-nav__close {
  align-items: center;
  background: var(--nav-sub);
  border: none;
  border-radius: var(--ow-radius-md);
  color: var(--nav-text);
  cursor: pointer;
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-body);
  height: var(--ow-control-h-lg);
  justify-content: center;
  margin-left: auto;
  width: 38px;
}
.ow-nav__close:hover { background: var(--ow-color-brand); color: var(--ow-color-surface); }

/* ── 3b. Server-rendered rail state ────────────────────────────────────── */

/* The rail is rendered whole by `shared/_ow_side_nav.html.erb` — every part of
 * it is in the DOM on every request — so the three states are a CSS problem,
 * not a rendering one. The design components achieve the same thing by not
 * rendering the parts they do not need; a server-rendered rail cannot, and
 * branching in ERB on a state the user can change without a reload would put
 * the rail one navigation behind the user. These rules are what make one
 * markup tree read as all three states. */

/* Two lockups, one per theme; CSS picks, so a theme toggle needs no reload. */
.ow-nav__logo { display: block; min-width: 0; }
.ow-nav__logo img { display: block; height: auto; max-width: 170px; width: 100%; }
.ow-nav__logo--dark { display: none; }
.theme-dark .ow-nav__logo--light, .ow-nav--dark .ow-nav__logo--light { display: none; }
.theme-dark .ow-nav__logo--dark, .ow-nav--dark .ow-nav__logo--dark { display: block; }

/* Collapsed: the mark replaces the lockup, and every label goes. Labels are
 * hidden rather than removed so the `title` attribute and the accessible name
 * survive — an icon rail with no accessible names is not a rail. */
.ow-nav__mark { display: none; }
.ow-nav--collapsed .ow-nav__mark { display: flex; }
.ow-nav--collapsed .ow-nav__logo { display: none; }
.ow-nav--collapsed .ow-nav__label,
.ow-nav--collapsed .ow-nav__legend,
.ow-nav--collapsed .ow-nav__collapse span,
.ow-nav--collapsed .ow-nav__user .ow-fill,
.ow-nav--collapsed .ow-nav__user-caret,
.ow-nav--collapsed .ow-nav__site { display: none; }

/* A rule stands in for the group legend, so groups stay distinguishable
 * without labels. It is the only element that is hidden in the full rail. */
.ow-nav__rule { display: none; }
.ow-nav--collapsed .ow-nav__rule { display: block; }

/* The site picker has two forms: the full trigger, and an icon-only button at
 * 44px. Exactly one is ever shown. */
.ow-nav__site--icon { display: none; }
.ow-nav--collapsed .ow-nav__site--icon { display: flex; }

/* Mobile drawer: the close button and the top bar's burger exist only here;
 * the collapse toggle does not, because a drawer has one width. */
.ow-nav__close, .ow-topbar__burger { display: none; }
.ow-nav--mobile .ow-nav__close { display: flex; }
.ow-nav--mobile .ow-nav__collapse { display: none; }
.ow-nav--mobile .ow-nav__label,
.ow-nav--mobile .ow-nav__legend,
.ow-nav--mobile .ow-nav__site,
.ow-nav--mobile .ow-nav__user .ow-fill,
.ow-nav--mobile .ow-nav__user-caret { display: revert; }
/* Port deviation: the source restores `.ow-nav__logo` wholesale here, which is
 * fine for the React rail (one lockup in the DOM) but shows both lockups in
 * the ERB rail, which renders one per theme and lets the theme pick. */
.ow-nav--mobile .ow-nav__logo--light { display: block; }
.theme-dark .ow-nav--mobile .ow-nav__logo--light, .ow-nav--dark.ow-nav--mobile .ow-nav__logo--light { display: none; }
.theme-dark .ow-nav--mobile .ow-nav__logo--dark, .ow-nav--dark.ow-nav--mobile .ow-nav__logo--dark { display: block; }
.ow-nav--mobile .ow-nav__mark,
.ow-nav--mobile .ow-nav__rule,
.ow-nav--mobile .ow-nav__site--icon { display: none; }
@media (max-width: 767px) { .ow-topbar__burger { display: flex; } }

/* The demo tour trigger, which the legacy shell pinned over the content with
 * `position: fixed`. It is a shell control and sits with the others. */
.ow-topbar__tour { align-items: center; display: flex; }

/* Visually hidden, still announced. */
.ow-sr {
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  height: 1px;
  overflow: hidden;
  position: absolute;
  white-space: nowrap;
  width: 1px;
}

/* Mobile drawer scrim, shared with any off-canvas panel. */
.ow-scrim {
  backdrop-filter: blur(2px);
  background: var(--ow-scrim-nav);
  inset: 0;
  opacity: 0;
  pointer-events: none;
  position: fixed;
  transition: opacity var(--ow-dur-state) var(--ow-ease);
  z-index: 1050;
}
.ow-scrim.is-open { opacity: 1; pointer-events: auto; }

/* ── 4. Top bar, breadcrumb and menus ──────────────────────────────────── */

.ow-topbar {
  backdrop-filter: var(--ow-blur-nav);
  -webkit-backdrop-filter: var(--ow-blur-nav);
  background: var(--ow-glass);
  border-bottom: 1px solid var(--ow-color-border);
  position: sticky;
  top: 0;
  z-index: var(--ow-z-header);
}
.ow-topbar.is-scrolled { box-shadow: var(--ow-shadow-raise); }
.ow-topbar__inner {
  align-items: center;
  display: flex;
  gap: var(--ow-space-4);
  min-height: 72px;
  padding: 10px var(--ow-gutter-page);
}
@media (max-width: 767px) {
  .ow-topbar__inner { gap: var(--ow-space-3); min-height: var(--ow-nav-height); padding: var(--ow-space-2) var(--ow-gutter-page-mobile); }
}
.ow-topbar__titles { display: flex; flex: 1 1 auto; flex-direction: column; justify-content: center; min-width: 0; }
.ow-topbar__title {
  color: var(--ow-color-text);
  font-size: var(--ow-type-view-title);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-tighter);
  line-height: 1.15;
  margin: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
@media (max-width: 1199px) { .ow-topbar__title { font-size: var(--ow-type-section-title); } }
.ow-topbar__subtitle { color: var(--ow-color-faint); font-size: var(--ow-type-meta); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* THE TITLE OUTRANKS THE SUBTITLE FOR THE ROOM THEY SHARE.
 *
 * Both sit in one `.ow-row`, and the default shrink factor divides the
 * shortfall in proportion to width — so the subtitle, the longer of the two,
 * kept most of its text while the name of the screen was clipped. Measured on
 * Addresses at 1440px: a 114px title given 104px beside a 336px subtitle.
 *
 * The subtitle is the line that gives, down to its own ellipsis. The title
 * still shrinks last rather than never, so a title too long for the bar on its
 * own ellipsises instead of pushing the row sideways. */
.ow-topbar__title { flex: 0 1 auto; }
.ow-topbar__subtitle { flex: 0 100 auto; min-width: 0; }

/* THE SUBTITLE IS A DESKTOP LINE, AND IT IS NOT DRAWN IN THE DRAWER BAND.
 *
 * It describes a screen the title beside it has already named, and at this
 * width that second reading costs the first one. Drawn on Reports at 390px it
 * measures 277px against a 77px title — the whole of the title column — which
 * is enough to break the title onto a line of its own beneath the burger and
 * stand the bar at 156px, three rows, before a record is on screen.
 *
 * The screen still declares it and the markup still carries it, so nothing a
 * screen states is lost and the desktop line is untouched; it is this width
 * that has no room to spend on it. */
@media (max-width: 767px) { .ow-topbar__subtitle { display: none; } }

.ow-topbar__actions { align-items: center; display: flex; flex: none; gap: var(--ow-space-2); }

/* THE ACTION CLUSTER HAS TO FIT THE BAR.
 *
 * `flex: none` above means this cluster never gives ground, so whatever it
 * contains sets a floor on the width of the whole shell. Measured at a 390px
 * viewport it came to 570px — and the single biggest part of that was the
 * account button, 224px of it the email address, which is the whole reason
 * this bar used to hide that address below 1200px and shrink the rest.
 *
 * THAT CONTROL IS NO LONGER HERE. The signed-in identity is the rail's
 * footer and the account menu hangs off it, so the bar carries no copy of
 * either and there is nothing left in the cluster that is decoration: the
 * theme toggle, the three ways out of being stuck, the bell and the screen's
 * own actions each do something no other control here does. Nothing is
 * hidden at any width, which is why the rules below let the row wrap rather
 * than drop a control.
 *
 * The rules that gave the cluster its room are kept, measured rather than
 * assumed — see the two blocks below. */

/* ABOVE THE DRAWER BAND THE CLUSTER GIVES GROUND, AND THE TITLE HAS A FLOOR.
 *
 * `flex: none` is why the title was unreadable on a tablet: the cluster took
 * its full natural width and the title column lived on the remainder. Measured
 * on Addresses at 768px that remainder was 0px, with the bar 13px past the
 * viewport; on the ticket screens, whose cluster carries a primary action and
 * runs to 611px, the title was still being clipped at 992px and 1200px.
 *
 * The phone band answers this by letting the cluster drop onto a row of its
 * own. Repeating that here was measurably worse, not better: a second row
 * appears at widths where the bar already fits, and a cluster that is
 * `flex: none` on its own row does not shrink to it either — on the ticket
 * screens it hung 114px off the side of a 768px viewport with three controls
 * off-screen.
 *
 * So the cluster shrinks instead. The screen's own action label ellipsises
 * first, then the icon controls wrap within the cluster — none of them is
 * dropped, which is the rule the comment above sets out.
 *
 * The floor is the title's. Where the bar is tight the column sits exactly on
 * it, so it is sized to the thing that has to stay readable: 200px takes the
 * longest title these screens carry, "Completed Tickets", at both the section
 * and the view type size. A trail longer than that clips, as `.ow-crumbs` is
 * built to — it has no ellipsis and never had one — and it clips from a
 * 200px column now rather than from nothing. Buying the last few characters
 * of a trail back would cost the cluster another row on the screens that
 * carry two primary actions, which is the worse trade.
 *
 * RE-MEASURED WITH THE ACCOUNT BUTTON GONE, and kept because the measurement
 * says to keep them. The cluster lost 231px on a plain screen (612 to 381 at
 * 1440px) and the 768px bar now fits on one row again — 72px tall where it
 * was 108px. It still wraps where a screen carries its own primary action and
 * the rail is pinned open: Organisations at 991px is 385x88, two rows, which
 * is this block doing its job rather than a rule left behind. */
@media (min-width: 768px) {
  /* Above the band the four are inline and the overflow has nothing to hold. */
  .ow-topbar__actions > .ow-topbar__overflow { display: none; }
  .ow-topbar__titles { min-width: 200px; }
  .ow-topbar__actions {
    flex: 0 1 auto;
    flex-wrap: wrap;
    justify-content: flex-end;
    min-width: 0;
  }
  /* A long primary-action label truncates rather than setting the floor. */
  .ow-topbar__actions > .ow-btn {
    max-width: 100%;
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
}
@media (max-width: 767px) {
  /* Rows the bar has broken into sit closer together than controls sitting
     side by side on one of them, so the break reads as one bar and not two. */
  .ow-topbar__inner { flex-wrap: wrap; row-gap: var(--ow-space-2); }
  /* THE CLUSTER TAKES A ROW OF ITS OWN ONLY WHEN IT NEEDS ONE.
   *
   * A basis of `100%` would claim one unconditionally, and most screens have
   * nothing to put on it: where the only actions are the shell's own, the
   * overflow and the bell are 96px against the 366 a 390px bar has, and the
   * row beneath the title would carry those two alone. Reports is the whole
   * shape of it — a one-word title and no actions of its own.
   *
   * Basing the cluster on its content leaves that to the line break. Flex
   * places an item on the current line by its natural width, so those two
   * stay beside the title, and a screen carrying its own primary actions —
   * Ticketing offers two — breaks them beneath it, which is where they belong
   * at this width. `flex-grow: 1` then fills whichever line the cluster lands
   * on, so `justify-content` holds it against the right edge on both rather
   * than leaving it trailing the title. */
  .ow-topbar__actions {
    flex: 1 1 auto;
    flex-wrap: nowrap;
    gap: var(--ow-space-1);
    justify-content: flex-end;
    min-width: 0;
  }
  /* THE SHELL'S OWN CONTROLS MOVE INTO THE OVERFLOW HERE.
   *
   * A primary action and five 44px icon controls need about 490px; the band
   * starts at 320. The cluster used to answer that by wrapping to a second
   * row, which is how the bar reached 229px with two rows of actions stacked
   * above the content. The four shell utilities go into the menu instead and
   * the row stops wrapping, so what is left — burger, title, the screen's own
   * action, the overflow and the bell — sits on one row.
   *
   * Child selectors, not `.ow-hide-mobile`: that utility is a single class and
   * `.ow-iconbtn` declares `display: inline-flex` later in this file, so it
   * would lose to it and hide nothing. */
  .ow-topbar__actions > .ow-topbar__util { display: none; }
  /* A long primary-action label truncates rather than setting the floor.
   *
   * `flex: none` is the button's own default and it has to give here: the row
   * no longer wraps, so a screen carrying two actions — Ticketing offers both
   * "New product ticket" and "New ticket" — put 106px past the right edge of a
   * 390px viewport until these could shrink. The shell's own controls keep
   * `flex: none`: the overflow and the bell are 44px targets and are the last
   * things that should narrow. */
  /* A BUTTON IN THIS BAR SPENDS ITS ROOM ON ITS LABEL, NOT ITS PADDING.
   *
   * At 320px the row has 296px for two of a screen's own actions and the two
   * shell controls that never narrow, which leaves the pair about 184px
   * between them. A button's own 16px side padding and the gap to its icon
   * take 40px of that before a word is drawn, and the shortfall lands on the
   * label: "New ticket" loses its last letter against the button's edge.
   * Tightening both hands that back. The 44px target is the height, which is
   * untouched. */
  /* WHERE A SCREEN OFFERS TWO ACTIONS, THE LESSER ONE SPENDS ITS ICON FIRST.
   *
   * Four screens carry two of these, and at 320px their labels are still
   * about 8px longer than the row has. A secondary action's icon is
   * decorative — every one of them is `aria-hidden` beside a word that says
   * the same thing — so it is the cheapest thing on the row to give up, and
   * giving it up keeps both labels whole rather than truncating the longer.
   * The primary action keeps its own: it is the one the screen is for. */
  .ow-topbar__actions > .ow-btn--secondary > i { display: none; }
  .ow-topbar__actions > .ow-btn {
    flex: 0 1 auto;
    gap: var(--ow-space-1);
    max-width: 100%;
    min-width: 0;
    padding: 0 var(--ow-space-2);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
}
/* THIS BLOCK DOES NOT DECLARE `display`, AND MUST NOT.
 *
 * The burger opens the mobile drawer and has nothing to open in either rail
 * state, so which widths show it is decided once, above: `display: none` with
 * `.ow-nav__close`, and `display: flex` in the drawer band. A `display` here
 * is a later rule of equal specificity and silently beats both — which is
 * exactly what happened, and the button sat in every tablet and desktop bar
 * doing nothing, taking 44px and a gap out of the title's room. The painted
 * state below is safe to keep: `align-items` and `justify-content` apply only
 * once one of those rules has made it a flex container. */
.ow-topbar__burger {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  cursor: pointer;
  flex: none;
  font-size: var(--ow-type-card-title);
  height: var(--ow-tap-min);
  justify-content: center;
  width: var(--ow-tap-min);
}
.ow-topbar__burger:hover { border-color: var(--ow-color-brand); color: var(--ow-color-brand); }

.ow-crumbs {
  align-items: center;
  color: var(--ow-color-faint);
  display: flex;
  font-size: var(--ow-type-micro);
  font-weight: 700;
  gap: var(--ow-space-2);
  letter-spacing: var(--ow-tracking-label);
  margin-bottom: 3px;
  overflow: hidden;
  text-transform: uppercase;
  white-space: nowrap;
}
/* THE TRAIL IS NOT DRAWN IN THE DRAWER BAND.
 *
 * Its last step is the name of the screen, which the title repeats directly
 * beneath it, so on a phone it spent a line of a bar that had none to spare
 * saying the same word twice. The steps above it are the rail's own
 * destinations and the rail is one tap away behind the burger, which is where
 * somebody on this width navigates from — the trail is a desktop affordance
 * here, not the only way back. */
@media (max-width: 767px) { .ow-crumbs { display: none; } }
.ow-crumbs i { font-size: var(--ow-type-nano); opacity: 0.7; }
.ow-crumbs__section { color: var(--ow-color-muted); }
.ow-crumbs__leaf { color: var(--ow-color-brand); }

.ow-avatar {
  align-items: center;
  background: var(--ow-color-brand);
  border-radius: 50%;
  color: var(--ow-color-surface);
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-label);
  font-weight: 800;
  height: 34px;
  justify-content: center;
  width: 34px;
}
.ow-avatar--sm { font-size: var(--ow-type-micro); height: 27px; letter-spacing: var(--ow-tracking-wide); width: 27px; }
.ow-avatar--lg { font-size: var(--ow-type-card-title); height: 48px; width: 48px; }

.ow-menu-anchor { flex: none; position: relative; }
.ow-menu {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-table);
  min-width: 254px;
  padding: var(--ow-space-1);
  position: absolute;
  right: 0;
  top: calc(100% + var(--ow-space-2));
  z-index: var(--ow-z-dropdown);
}
/* THE RAIL'S MENU OPENS UPWARD. Its anchor is the foot of a fixed rail, so a
   downward panel opens past the bottom of the viewport. This must follow
   `.ow-menu` in source order — equal specificity throughout — or `top: auto`
   never wins and the panel keeps the downward geometry. The rail's own three
   widths are in the rail footer's block further down. */
.ow-menu.ow-menu--up { bottom: calc(100% + var(--ow-space-2)); left: 0; right: auto; top: auto; }

.ow-menu__head {
  border-bottom: 1px solid var(--ow-color-border);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-1);
  margin-bottom: 6px;
  padding: var(--ow-space-2) var(--ow-space-3) var(--ow-space-3);
}
.ow-menu__name { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-menu__sub { color: var(--ow-color-muted); font-size: var(--ow-type-label); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* The account menu's head carries the full identity — avatar, name, address —
   so the menu reads as "who you are" before "what you can do". It is the one
   head that is a row rather than a stack. */
.ow-menu__head--account { align-items: center; flex-direction: row; gap: var(--ow-space-3); }
.ow-menu__head--account .ow-avatar { flex: none; font-size: var(--ow-type-body); height: 40px; width: 40px; }
.ow-menu__headtext { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ow-menu__list { display: flex; flex-direction: column; gap: 1px; }
/* A menu row the band decides. Same reason as the notice bar: `.ow-menu__item`
 * declares `display: flex` below, so the one-class utility would lose to it
 * and a desktop-hidden row would show on every width. */
@media (min-width: 768px) {
  .ow-menu__item.ow-only-mobile { display: none; }
}
@media (max-width: 767px) {
  .ow-menu__item.ow-hide-mobile { display: none; }
}
.ow-menu__item {
  align-items: center;
  background: none;
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-3);
  padding: var(--ow-space-2) var(--ow-space-3);
  text-align: left;
  text-decoration: none;
  width: 100%;
}
.ow-menu__item:hover { background: var(--ow-hover-tint); color: var(--ow-color-text); }
.ow-menu__item i { font-size: var(--ow-type-meta); opacity: 0.9; text-align: center; width: 16px; }
.ow-menu__item--danger { color: var(--ow-status-fail-fg); }
.ow-menu__item--danger:hover { color: var(--ow-status-fail-fg); }
.ow-menu__divider { background: var(--ow-color-border); height: 1px; margin: 6px; }

/* ---- The outstanding-work bell -----------------------------------------
   The bell is the shared
   outstanding-work surface, so its panel is the account menu's panel with a
   wider column and a stacked item — one primitive extended, never a second
   menu implementation. The count is derived on every page load from the
   records themselves (`Organisations::OutstandingWork`); there is no saved
   to-do list and so nothing to mark read. */
.ow-bell { position: relative; }
.ow-bell__count {
  align-items: center;
  background: var(--ow-color-brand);
  border: 2px solid var(--ow-color-surface);
  border-radius: 999px;
  color: #fff;
  display: flex;
  font-size: 10px;
  font-weight: 700;
  height: 17px;
  justify-content: center;
  line-height: 1;
  min-width: 17px;
  padding: 0 3px;
  position: absolute;
  right: -2px;
  top: -2px;
}
/* Wide enough for a company name and the sentence under it, and capped so a
   long list scrolls inside the panel rather than running off the viewport. */
.ow-menu--wide { max-height: min(70vh, 520px); min-width: 340px; overflow-y: auto; width: 340px; }
.ow-menu__item--stack { align-items: flex-start; gap: var(--ow-space-3); }
.ow-menu__item--stack i { margin-top: 2px; }
.ow-menu__item--stack .ow-strong { font-weight: 700; }
/* A company name and an address are both long; neither may push the panel
   wider or spill out of it. */
.ow-menu__item--stack .ow-strong,
.ow-menu__item--stack .ow-meta { overflow-wrap: anywhere; white-space: normal; }
.ow-brandtext { color: var(--ow-color-brand-deep); font-weight: 700; }

/* A labelled group inside a menu panel, for a panel that holds two kinds of
   row and has to say which is which. It is not a row: it takes the panel's own
   head padding and never a hover or a focus ring. */
.ow-menu__group {
  display: flex;
  flex-direction: column;
  gap: 1px;
  padding: var(--ow-space-2) var(--ow-space-3) var(--ow-space-1);
}
.ow-menu__group-name {
  color: var(--ow-color-text);
  font-size: var(--ow-type-label);
  font-weight: 700;
  letter-spacing: .04em;
  text-transform: uppercase;
}
.ow-menu__group-sub { color: var(--ow-color-muted); font-size: var(--ow-type-label); white-space: normal; }

/* A stacked row with its own control beside it. The row stays one link and the
   control is a sibling rather than a child, because a button inside a link is
   not a thing a browser or a screen reader can resolve. */
.ow-menu__row { align-items: flex-start; display: flex; gap: 1px; }
.ow-menu__row .ow-menu__item { flex: 1 1 auto; min-width: 0; }
.ow-menu__dismiss {
  align-items: center;
  align-self: stretch;
  background: none;
  border: 0;
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: flex;
  flex: none;
  justify-content: center;
  padding: 0;
  width: var(--ow-control-h);
}
.ow-menu__dismiss:hover { background: var(--ow-hover-tint); color: var(--ow-color-text); }
.ow-menu__dismiss:focus-visible { box-shadow: 0 0 0 3px var(--ow-focus-ring); outline: none; }
/* The dismiss form is a layout no-op: it exists so the control works without
   script, and must not become a row of its own. */
.ow-menu__dismiss-form { display: flex; flex: none; }
@media (max-width: 767px) {
  .ow-menu__dismiss { width: var(--ow-tap-min); }
}

/* RELEASE CONTENT. Operator prose rendered from plain text — paragraphs and
   bullets and nothing else — so the rules are element rules scoped to this one
   container rather than classes a template has to remember. */
.ow-prose { color: var(--ow-color-text); display: flex; flex-direction: column; gap: var(--ow-space-3); }
.ow-prose p { margin: 0; }
.ow-prose ul { display: flex; flex-direction: column; gap: var(--ow-space-1); margin: 0; padding-left: var(--ow-space-5); }
.ow-prose li { margin: 0; }

/* At phone widths the panel is the width of the bar rather than a 340px card
   overhanging its right edge. */
@media (max-width: 767px) {
  .ow-menu--wide {
    left: var(--ow-space-3);
    min-width: 0;
    right: var(--ow-space-3);
    width: auto;
  }
}

/* ── 5. Buttons ────────────────────────────────────────────────────────── */
/* Prefer the bundle's Button/IconButton. These match it for plain markup. */

.ow-btn {
  align-items: center;
  background: var(--ow-color-brand);
  border: 1px solid transparent;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-surface);
  cursor: pointer;
  display: inline-flex;
  flex: none;
  font-family: inherit;
  font-size: var(--ow-type-button);
  font-weight: 700;
  gap: var(--ow-space-2);
  height: var(--ow-control-h-lg);
  justify-content: center;
  letter-spacing: var(--ow-tracking-wide);
  padding: 0 var(--ow-space-4);
  text-decoration: none;
  transition: filter var(--ow-dur-hover) var(--ow-ease), background var(--ow-dur-hover) var(--ow-ease),
              border-color var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease),
              transform var(--ow-dur-hover) var(--ow-ease);
  white-space: nowrap;
}
.ow-btn:hover { color: var(--ow-color-surface); filter: brightness(0.94); }
.ow-btn:active { transform: scale(0.98); }
.ow-btn:disabled, .ow-btn.is-disabled { cursor: not-allowed; filter: none; opacity: 0.45; }
.ow-btn i { font-size: var(--ow-type-label); }
/* A control working on what it was just asked to do. The spinner is drawn in
   the control itself rather than over the screen, so the rest of the page
   stays readable and only the thing that was pressed says it is busy. An
   `<input type="submit">` can hold no pseudo-element, so there it is the
   wording alone that changes. */
.ow-btn--busy { cursor: progress; opacity: 0.75; }
.ow-btn--busy > i { display: none; }
.ow-btn--busy:not(input)::before {
  animation: ow-spin 0.9s linear infinite;
  border: 2px solid currentColor;
  border-radius: 50%;
  border-top-color: transparent;
  content: '';
  display: inline-block;
  height: var(--ow-type-label);
  width: var(--ow-type-label);
}
@media (prefers-reduced-motion: reduce) {
  .ow-btn--busy:not(input)::before { animation: none; }
}
.ow-btn--secondary { background: var(--ow-color-surface); border-color: var(--ow-color-border); color: var(--ow-color-text); }
.ow-btn--secondary:hover { border-color: var(--ow-color-brand); color: var(--ow-color-brand); filter: none; }
.ow-btn--ghost { background: transparent; border-color: transparent; color: var(--ow-color-muted); }
.ow-btn--ghost:hover { background: var(--ow-hover-tint); color: var(--ow-color-brand-deep); filter: none; }
.ow-btn--danger { background: var(--ow-color-danger); }
.ow-btn--danger:hover { background: var(--ow-button-danger-hover-bg); filter: none; }
.ow-btn--commit:active { background: var(--ow-color-brand-deep); }
.ow-btn--cta { font-size: var(--ow-type-body); height: var(--ow-control-h-cta); padding: 0 var(--ow-space-5); }
.ow-btn--sm { font-size: var(--ow-type-label); height: var(--ow-control-h); padding: 0 var(--ow-space-3); }
.ow-btn--block { width: 100%; }
.ow-btn--touch { font-size: var(--ow-type-card-title); height: var(--ow-control-h-touch); }

.ow-iconbtn {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-body);
  height: var(--ow-control-h-lg);
  justify-content: center;
  transition: border-color var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease),
              background var(--ow-dur-hover) var(--ow-ease);
  width: var(--ow-control-h-lg);
}
.ow-iconbtn:hover { border-color: var(--ow-color-brand); color: var(--ow-color-brand); }
.ow-iconbtn--bare { background: transparent; border-color: transparent; height: 34px; width: 34px; }
.ow-iconbtn--bare:hover { background: var(--ow-hover-tint); border-color: transparent; color: var(--ow-hover-glyph); }
.ow-iconbtn--touch { height: var(--ow-tap-min); width: var(--ow-tap-min); }
@media (max-width: 767px) {
  .ow-iconbtn { height: var(--ow-tap-min); width: var(--ow-tap-min); }
}

/* Icon in a tinted container — never loose on the page. */
.ow-icontile {
  align-items: center;
  background: var(--ow-color-brand-tint);
  border-radius: 11px;
  color: var(--ow-color-brand);
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-card-title);
  height: var(--ow-icon-tile);
  justify-content: center;
  width: var(--ow-icon-tile);
}
.ow-icontile--sm { border-radius: var(--ow-radius-md); font-size: var(--ow-type-meta); height: 28px; width: 28px; }
.ow-icontile--circle { border-radius: 50%; }
.ow-icontile--neutral { background: var(--ow-color-border-soft); color: var(--ow-color-muted); }
.ow-icontile--danger { background: var(--ow-status-fail-bg); color: var(--ow-color-danger-solid); }
.ow-icontile--warning { background: var(--ow-status-warning-bg); color: var(--ow-status-warning-fg); }

/* ── 6. Forms ──────────────────────────────────────────────────────────── */
/* .ow-field / .ow-field__label / .ow-input live in ow-globals.css. */

.ow-select {
  appearance: none;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-text);
  cursor: pointer;
  font-family: inherit;
  font-size: var(--ow-type-body);
  height: var(--ow-control-h-lg);
  padding: 0 var(--ow-space-6) 0 var(--ow-space-3);
  width: 100%;
}
.ow-textarea {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  font-family: inherit;
  font-size: var(--ow-type-body);
  line-height: var(--ow-line-height);
  min-height: calc(var(--ow-type-body-line) * 4);
  padding: var(--ow-space-3);
  resize: vertical;
  width: 100%;
}
.ow-input--invalid, .ow-textarea--invalid, .ow-select--invalid { border-color: var(--ow-color-danger); }
.ow-field__error { color: var(--ow-status-fail-fg); font-size: var(--ow-type-meta); }
/* A field note that advises rather than refuses: what is entered is accepted,
   and the operator is told to check it. */
.ow-field__warning { color: var(--ow-status-warning-fg); font-size: var(--ow-type-meta); font-weight: 600; }
.ow-field--readonly .ow-input, .ow-input[readonly] { background: var(--ow-color-surface-alt); color: var(--ow-color-muted); }
.ow-fieldset { border: 0; display: grid; gap: var(--ow-space-4); margin: 0; padding: 0; }

.ow-label { color: var(--ow-color-text); display: block; font-size: var(--ow-type-meta); font-weight: 600; }
/* Input with a trailing affix button (password reveal, unit, clear). */
.ow-affix { position: relative; }
.ow-affix .ow-input { padding-right: var(--ow-space-8); }
.ow-affix__btn {
  align-items: center;
  background: none;
  border: 0;
  color: var(--ow-color-faint);
  cursor: pointer;
  display: flex;
  font-size: var(--ow-type-body);
  height: 100%;
  justify-content: center;
  position: absolute;
  right: 0;
  top: 0;
  width: var(--ow-tap-min);
}
.ow-affix__btn:hover { color: var(--ow-color-brand); }

.ow-search { flex: 1 1 auto; min-width: 0; position: relative; }
/* Beside a row of filter pills rather than owning the row: wide enough for a
 * street or a postcode, and the first thing to give way when the row wraps. */
.ow-search--inline { flex: 0 1 260px; }
.ow-search__icon {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-meta);
  left: var(--ow-space-3);
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
.ow-search .ow-input { padding-left: var(--ow-space-7); }

.ow-switch {
  background: var(--ow-color-border);
  border: 0;
  border-radius: var(--ow-radius-pill);
  cursor: pointer;
  flex: none;
  height: 22px;
  padding: 0;
  position: relative;
  transition: background var(--ow-dur-hover) var(--ow-ease);
  width: 38px;
}
.ow-switch::after {
  background: var(--ow-color-surface);
  border-radius: 50%;
  box-shadow: var(--ow-shadow-dot);
  content: "";
  height: 18px;
  left: 2px;
  position: absolute;
  top: 2px;
  transition: transform var(--ow-dur-hover) var(--ow-ease);
  width: 18px;
}
.ow-switch.is-on { background: var(--ow-color-brand); }
.ow-switch.is-on::after { transform: translateX(16px); }
.ow-switch:disabled { cursor: not-allowed; opacity: 0.45; }

.ow-check {
  accent-color: var(--ow-color-brand);
  height: 16px;
  margin: 0;
  width: 16px;
}
.ow-checkline { align-items: center; cursor: pointer; display: flex; font-size: var(--ow-type-body); gap: var(--ow-space-2); }

/* Toolbar above a list: search, filters, counts. */
.ow-toolbar {
  align-items: center;
  border-bottom: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-toolbar__count { color: var(--ow-color-muted); font-size: var(--ow-type-meta); font-variant-numeric: tabular-nums; white-space: nowrap; }
.ow-filters { display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }
.ow-filter {
  align-items: center;
  background: var(--ow-pill-unselected-bg);
  border: 1px solid var(--ow-pill-border);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-pill-unselected-text);
  cursor: pointer;
  display: inline-flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-2);
  min-height: 30px;
  padding: 0 var(--ow-space-3);
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease),
              border-color var(--ow-dur-hover) var(--ow-ease);
  white-space: nowrap;
}
.ow-filter:hover { background: var(--ow-pill-unselected-hover-bg); border-color: var(--ow-pill-hover-border); color: var(--ow-pill-unselected-hover-text); }
.ow-filter.is-active { background: var(--ow-pill-selected-bg); border-color: var(--ow-pill-selected-border); color: var(--ow-pill-selected-text); }
/* Plain variant: reads as a control, not a tint — used in overlays. */
.ow-filter--plain { background: var(--ow-color-surface); border-color: var(--ow-color-border); border-radius: var(--ow-radius-md); min-height: var(--ow-control-h-lg); }
.ow-filter--plain:hover { background: var(--ow-color-surface); border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }
.ow-filter--plain.is-active { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }
.ow-filter--sort { border-radius: var(--ow-radius-pill); font-size: var(--ow-type-label); font-weight: 700; min-height: 32px; }
.ow-filter--sort i { font-size: var(--ow-type-nano); opacity: 0.4; }
.ow-filter--sort.is-active i { opacity: 1; }
@media (max-width: 860px) {
  .ow-filter--plain { min-height: var(--ow-control-h-touch); font-size: var(--ow-type-card-title); justify-content: center; }
  .ow-filter--sort { font-size: var(--ow-type-label); min-height: var(--ow-tap-min); }
}
.ow-filter__count { font-variant-numeric: tabular-nums; opacity: 0.8; }

/* A pill whose state is a FORM INPUT rather than a press.
 *
 * A submit button carries its name and value only when it is the one
 * activated, so a row of them answers one question and silently resets every
 * other question on the form. A choice pill holds a radio, so every criterion
 * the form holds is carried by every submission it makes, and nothing is
 * applied until the form is submitted.
 *
 * The radio covers the pill so the whole pill is the hit area; it stays
 * focusable, and `:focus-within` draws the ring the hidden control would
 * have drawn. */
.ow-filter--choice { position: relative; }
.ow-filter__input {
  cursor: pointer;
  height: 100%;
  left: 0;
  margin: 0;
  opacity: 0;
  position: absolute;
  top: 0;
  width: 100%;
}
.ow-filter__tick { display: none; }
.ow-filter--choice:focus-within { border-color: var(--ow-pill-selected-border); box-shadow: 0 0 0 3px var(--ow-focus-ring); }
/* APPLIED is the answer the run on screen was actually read under. It is the
 * server's own and is marked in the markup, so it is drawn with no script and
 * with no `:has()` — a browser that supports neither still shows the state
 * that is true. */
.ow-filter--choice.is-applied {
  background: var(--ow-pill-selected-bg);
  border-color: var(--ow-pill-selected-border);
  color: var(--ow-pill-selected-text);
}
/* SELECTED is what the band now holds. It is the only state that carries the
 * tick, so a selection is never read as the report already on screen. */
.ow-filter--choice:has(.ow-filter__input:checked) {
  background: var(--ow-pill-selected-bg);
  border-color: var(--ow-pill-selected-border);
  color: var(--ow-pill-selected-text);
}
.ow-filter--choice:has(.ow-filter__input:checked) .ow-filter__tick { display: inline-block; }
/* Once the band holds a selection that has not been run, the answer the run
 * WAS read under gives up its fill and keeps a dashed edge: exactly one pill
 * reads as chosen — the selection — and the applied answer is still named. */
.ow-criteria.is-dirty .ow-filter--choice.is-applied:not(:has(.ow-filter__input:checked)) {
  background: var(--ow-pill-unselected-bg);
  border-color: var(--ow-pill-selected-border);
  border-style: dashed;
  color: var(--ow-pill-unselected-text);
}
/* A chosen value staged in a picker but not yet applied, told apart from one
 * the run was read under the same way. */
.ow-chip.is-staged { border-style: dashed; cursor: pointer; font-family: inherit; }
@media (max-width: 860px) {
  .ow-filter--choice { min-height: var(--ow-tap-min); }
}

/* ── 7. Cards and panels ───────────────────────────────────────────────── */

.ow-card {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-card);
  box-shadow: var(--ow-shadow-card);
}
.ow-card--flat { box-shadow: none; }
.ow-card--contact { box-shadow: var(--ow-shadow-contact); }
.ow-card--table { box-shadow: var(--ow-shadow-table); }
.ow-card--clip { overflow: hidden; }
.ow-card--pad { padding: var(--ow-space-5); }
.ow-card--tap {
  cursor: pointer;
  transition: border-color var(--ow-dur-hover) var(--ow-ease), box-shadow var(--ow-dur-hover) var(--ow-ease),
              transform var(--ow-dur-hover) var(--ow-ease);
}
.ow-card--tap:hover { border-color: var(--ow-color-brand); box-shadow: var(--ow-shadow-raise); }
.ow-card.is-selected { background: var(--ow-color-selected-bg); border-color: var(--ow-color-brand); }
@media (max-width: 767px) { .ow-card { border-radius: var(--ow-radius-xl); box-shadow: var(--ow-shadow-mobile-card); } }

.ow-card__header {
  align-items: center;
  background: linear-gradient(180deg, var(--ow-color-surface), var(--ow-color-surface-alt));
  border-bottom: 1px solid var(--ow-color-border-soft);
  border-radius: var(--ow-radius-card) var(--ow-radius-card) 0 0;
  display: flex;
  gap: var(--ow-space-3);
  padding: var(--ow-space-4) var(--ow-space-5);
}
.ow-card__body { padding: var(--ow-space-5); }
.ow-card__header--stack { align-items: stretch; flex-direction: column; }
.ow-card__header--tight { padding: var(--ow-space-3) var(--ow-space-4); }
.ow-card__header--wrap { flex-wrap: wrap; }
.ow-card__body--tight { padding: var(--ow-space-4); }
.ow-card__footer {
  align-items: center;
  border-top: 1px solid var(--ow-color-border-soft);
  display: flex;
  gap: var(--ow-space-3);
  justify-content: flex-end;
  padding: var(--ow-space-3) var(--ow-space-5);
}
/* Save bar: state on the left, actions on the right, sunken ground. */
.ow-card__footer--bar {
  background: var(--ow-color-surface-alt);
  border-top-color: var(--ow-color-border);
  flex-wrap: wrap;
  justify-content: space-between;
  padding: var(--ow-space-3) var(--ow-space-4);
}
/* COMMIT BAR
 *
 * One floating bar carrying a surface's status line and its primary and
 * secondary actions, for a form whose commit belongs at the end of a long
 * single-column surface (doc/UI_ARCHITECTURE.md, "Shared control rules").
 *
 * It is `sticky`, not `fixed`, deliberately: a sticky bar stays in the normal
 * flow, so it reserves its own space at the foot of the stack, can never
 * permanently cover a field, and is clipped by the scrolling body it lives in
 * rather than floating over the shell's navigation. It must be the last child
 * of the column it sits in.
 *
 * It is NOT `.ow-actionbar`, which is this layer's fixed, full-width
 * mobile bar pinned to the viewport. This one stays inside its column and
 * scrolls with the surface it commits.
 *
 * The bar owns appearance, placement and responsive behaviour only. What the
 * status says, which actions are offered and every rule behind them belong to
 * the surface that renders it.
 *
 * `z-index: 3` is deliberately BELOW the named scale (`--ow-z-overlay` and
 * above), so the shell's navigation, header and dropdowns always win. It ties
 * with the sticky table header, which sits at the opposite edge and comes
 * earlier in the document, so the bar paints above it where they meet.
 *
 * Do not put this and `.ow-actionbar` on one surface: that one is fixed to the
 * viewport floor at phone width and the two would land on top of each other.
 */
.ow-commitbar {
  align-items: center;
  /* It has to read as floating ABOVE the form rather than as another card in
   * it, and it has to do so in both themes. The three values below are the
   * tokens that are redeclared for dark: `--ow-shadow-raise` is not, so in
   * dark it would keep its light rgba and the bar would read flat. */
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border-strong);
  border-radius: var(--ow-radius-card);
  bottom: var(--ow-space-3);
  box-shadow: var(--ow-shadow-table);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-3);
  justify-content: space-between;
  padding: var(--ow-space-3) var(--ow-space-4);
  position: sticky;
  z-index: 3;
}
.ow-commitbar__status {
  align-items: center;
  display: flex;
  flex: 1 1 auto;
  gap: var(--ow-space-2);
  min-width: 0;
}
.ow-commitbar__text {
  font-size: var(--ow-type-label);
  font-weight: 600;
  margin: 0;
  text-wrap: pretty;
}
.ow-commitbar__actions {
  display: flex;
  flex: none;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
}
.ow-commitbar__note {
  color: var(--ow-color-muted);
  flex: 1 0 100%;
  font-size: var(--ow-type-label);
  margin: 0;
  text-wrap: pretty;
}
/* At phone width the bar spans the body and sits on its floor, and the
 * actions stack in source order, which puts the primary commit last and so
 * nearest the thumb. Touch targets are the shared 44px. */
@media (max-width: 767px) {
  .ow-commitbar {
    align-items: stretch;
    border-radius: var(--ow-radius-card) var(--ow-radius-card) 0 0;
    bottom: 0;
    flex-direction: column;
  }
  .ow-commitbar__actions {
    flex-direction: column;
  }
  .ow-commitbar__actions .ow-btn {
    min-height: 44px;
    width: 100%;
  }
}
.ow-card__footer--note {
  background: var(--ow-color-surface-alt);
  border-top-color: var(--ow-color-border-soft);
  color: var(--ow-color-muted);
  display: block;
  font-size: var(--ow-type-label);
  font-weight: 600;
  line-height: 18px;
  padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-dirty { align-items: center; color: var(--ow-color-brand-deep); display: inline-flex; font-size: var(--ow-type-label); font-weight: 700; gap: var(--ow-space-2); }
.ow-dirty.is-clean { color: var(--ow-color-faint); }

.ow-panel { background: var(--ow-color-surface-alt); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); padding: var(--ow-space-4); }
.ow-panel--brand { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand-tint-strong); }
.ow-panel--warning { background: var(--ow-status-warning-bg); border-color: transparent; color: var(--ow-status-warning-fg); }
.ow-panel--danger { background: var(--ow-status-fail-bg); border-color: transparent; color: var(--ow-status-fail-fg); }
.ow-panel--pass { background: var(--ow-status-pass-bg); border-color: transparent; color: var(--ow-status-pass-fg); }

/* Label/value pair — the system's densest and most repeated unit. */
.ow-pair { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ow-pair__label { color: var(--ow-color-faint); font-size: var(--ow-type-nano); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-pair__value { color: var(--ow-color-text); font-size: var(--ow-type-body); font-weight: 600; overflow-wrap: anywhere; }
.ow-pair__value--figure { font-size: var(--ow-type-data); font-variant-numeric: tabular-nums; font-weight: var(--ow-type-data-weight); letter-spacing: var(--ow-tracking-tighter); }
.ow-pairs { display: grid; gap: var(--ow-space-4); grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); }

/* KPI tile */
.ow-stat {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-contact);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  overflow: hidden;
  padding: var(--ow-space-4);
}
.ow-stat::after {
  background: radial-gradient(80% 80% at 100% 0%, var(--ow-color-brand-tint) 0%, transparent 70%);
  content: "";
  inset: 0;
  pointer-events: none;
  position: absolute;
}
/* A KPI figure never breaks inside itself. `overflow-wrap: anywhere` here used
 * to split a thousands-separated number across two lines ("18,26" / "0") the
 * moment a tile fell below the string's width — a wrong-looking number on the
 * one element of the tile that has to be read at a glance. Long figures now
 * stay whole; the row gives them room instead (see `.ow-statrow` below). */
.ow-stat__figure { font-size: 27px; font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: var(--ow-tracking-tighter); line-height: 1.1; overflow-wrap: normal; }
.ow-stat > * { position: relative; z-index: 1; }
/* Inline variant: icon tile beside the label and figure. */
.ow-stat--inline { align-items: center; flex-direction: row; gap: var(--ow-space-3); padding: var(--ow-space-3); }
.ow-stat--inline .ow-stat__figure { font-size: var(--ow-type-view-title); line-height: 1.2; }
/* KPI tile as the control that selects the view it counts. Added 2026-08-26
 * for DWT Submissions, where the five operational counts ARE the queue picker
 * — a tile and a filter pill carrying the same number is the duplication this
 * removes. Selected state matches `.ow-filter.is-active` so a chosen tile and
 * a chosen pill read alike. */
button.ow-stat { cursor: pointer; font: inherit; text-align: left; width: 100%; }
button.ow-stat:hover { border-color: var(--ow-color-brand); }
button.ow-stat.is-active { background: var(--ow-color-selected-bg); border-color: var(--ow-color-brand); box-shadow: inset 0 0 0 1px var(--ow-color-brand); }
button.ow-stat.is-active .ow-eyebrow { color: var(--ow-color-brand-deep); }
@media (max-width: 767px) { button.ow-stat { min-height: var(--ow-tap-min); } }
.ow-statrow { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ow-statrow--5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
.ow-statrow--6 { grid-template-columns: repeat(6, minmax(0, 1fr)); }
.ow-statrow--7 { grid-template-columns: repeat(7, minmax(0, 1fr)); }
@media (max-width: 1279px) {
  .ow-statrow--5, .ow-statrow--6, .ow-statrow--7 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
/* The base 4-up row had no fallback and stayed 4-up to the mobile breakpoint,
 * so between ~900px and 1200px each tile left about 72px for its figure —
 * narrower than a five-digit weight. Two-up from 1199px down; `--5`/`--6` keep
 * their own 3-up step above. */
@media (max-width: 1199px) {
  .ow-statrow:not(.ow-statrow--5):not(.ow-statrow--6):not(.ow-statrow--7) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767px) { .ow-statrow { grid-template-columns: repeat(2, minmax(0, 1fr)); } }

/* Section nav — the 216px record-page rail, a scrolling pill row on mobile. */
.ow-sectionnav { display: flex; flex-direction: column; gap: var(--ow-space-1); flex: none; position: sticky; top: 96px; width: 216px; }
.ow-sectionnav__item {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-3);
  min-height: var(--ow-control-h-lg);
  padding: 0 var(--ow-space-3);
  text-align: left;
  text-decoration: none;
  width: 100%;
}
.ow-sectionnav__item:hover { background: var(--ow-hover-tint); color: var(--ow-color-brand-deep); }
.ow-sectionnav__item.is-active { background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); font-weight: 700; }
.ow-sectionnav__item i { text-align: center; width: 16px; }
@media (max-width: 991px) {
  .ow-sectionnav {
    flex-direction: row;
    overflow-x: auto;
    padding-bottom: var(--ow-space-2);
    position: static;
    width: 100%;
  }
  .ow-sectionnav__item { border-radius: var(--ow-radius-pill); flex: none; padding: 0 var(--ow-space-4); width: auto; }
}

/* ── 8. Status ─────────────────────────────────────────────────────────── */
/* .ow-badge, its seven canonical tones and .ow-badge--fixed all live in
 * ow-globals.css, documented there. Nothing in this file may declare a badge
 * tone. Status is icon-only in dense tables — the name goes on the title
 * attribute. What belongs here instead: the containers status sits in
 * (.ow-cell__badges, .ow-statebtn) and the badge-shaped pieces that are not
 * status at all (.ow-countbadge, .ow-railitem__badge, .ow-subnav__badge). */

.ow-status {
  align-items: center;
  border-radius: 50%;
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-label);
  height: 26px;
  justify-content: center;
  width: 26px;
}
.ow-status--pass { background: var(--ow-status-pass-bg); color: var(--ow-status-pass-fg); }
.ow-status--due { background: var(--ow-status-due-bg); color: var(--ow-status-due-fg); }
.ow-status--fail { background: var(--ow-status-fail-bg); color: var(--ow-status-fail-fg); }
.ow-status--warning { background: var(--ow-status-warning-bg); color: var(--ow-status-warning-fg); }
.ow-status--info { background: var(--ow-status-info-bg); color: var(--ow-status-info-fg); }
.ow-status--neutral { background: var(--ow-color-border-soft); color: var(--ow-color-muted); }
.ow-status--lg { font-size: var(--ow-type-card-title); height: var(--ow-icon-tile); width: var(--ow-icon-tile); }

/* A version number in place of an icon, on the amendment history's own rail.
   It is the fact that tells one row from the next, so it is set tabular and
   tight enough that two digits sit in the same circle one does. */
.ow-versionmark {
  font-feature-settings: "tnum" 1;
  font-size: var(--ow-type-label);
  font-weight: var(--ow-type-label-weight);
  letter-spacing: var(--ow-tracking-tight);
}

/* ── 9. Overlays: modal, confirm, drawer ───────────────────────────────── */

.ow-overlay {
  align-items: center;
  backdrop-filter: var(--ow-blur-modal);
  background: var(--ow-scrim);
  display: flex;
  inset: 0;
  justify-content: center;
  padding: var(--ow-space-6);
  position: fixed;
  z-index: 1200;
}
.ow-overlay--confirm { background: var(--ow-scrim-strong); }
/* The site/record picker scrim: radial vignette plus a heavier blur. */
.ow-overlay--glass {
  animation: ow-scrim-in 0.28s var(--ow-ease) both;
  backdrop-filter: var(--ow-scrim-blur);
  background: var(--ow-scrim-modal);
}
@keyframes ow-scrim-in { from { opacity: 0; } to { opacity: 1; } }
.ow-overlay--right { justify-content: flex-end; padding: 0; }
/* Scoped to a mock frame rather than the viewport (artboards). */
.ow-overlay--inframe { position: absolute; z-index: 20; }
@media (max-width: 767px) { .ow-overlay { align-items: flex-end; padding: 0; } }

.ow-modal {
  animation: ow-modal-in 0.28s var(--ow-ease-out);
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-2xl);
  box-shadow: var(--ow-shadow-modal);
  display: flex;
  flex-direction: column;
  max-height: min(88vh, 780px);
  overflow: hidden;
  width: min(560px, 100%);
}
.ow-modal--lg { width: min(880px, 100%); }
/* A step that wraps the body in a form keeps the flex chain intact, so the
   body still scrolls inside the modal's bounded height rather than being
   clipped by it. */
.ow-modal > form { display: flex; flex: 1 1 auto; flex-direction: column; min-height: 0; overflow: hidden; }
.ow-modal--wide { max-height: 100%; width: min(860px, 100%); }
.ow-modal--sm { width: min(440px, 100%); }
.ow-modal--inframe { max-height: 100%; }
@media (max-width: 767px) {
  .ow-modal { border-radius: var(--ow-radius-2xl) var(--ow-radius-2xl) 0 0; max-height: 92vh; width: 100%; }
}
@keyframes ow-modal-in { from { opacity: 0; transform: translateY(8px) scale(0.98); } to { opacity: 1; transform: none; } }

.ow-modal__header {
  align-items: flex-start;
  border-bottom: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex: none;
  gap: var(--ow-space-3);
  padding: var(--ow-space-5) var(--ow-space-5) var(--ow-space-4);
}
.ow-modal__body { flex: 1 1 auto; overflow-y: auto; padding: var(--ow-space-5); }
.ow-modal__body--flush { padding: 0; }
.ow-modal__footer {
  align-items: center;
  border-top: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex: none;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
  justify-content: flex-end;
  padding: var(--ow-space-4) var(--ow-space-5);
}

/* A footer carrying both a sentence and several actions gives the sentence its
 * own row: squeezed into the space three buttons leave, it wraps to five lines
 * and the buttons lose the room they need for their own labels. */
.ow-modal__footer--stated > .ow-meta { flex: 1 0 100%; }

/* At phone width a dialog's actions stack and take the full width. A commit
 * label states what it will do — "Save amendment and prepare the correction" —
 * and a button that keeps that on one line is wider than the dialog, so it
 * would be pushed off the edge by the footer's own right alignment. They stack
 * in source order, which puts the primary last and so nearest the thumb, and
 * the touch target is the shared 44px. */
@media (max-width: 479px) {
  .ow-modal__footer { justify-content: stretch; }
  .ow-modal__footer > .ow-btn {
    flex: 1 1 100%;
    height: auto;
    min-height: 44px;
    padding-bottom: var(--ow-space-2);
    padding-top: var(--ow-space-2);
    white-space: normal;
  }
}
.ow-modal__close {
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-faint);
  cursor: pointer;
  flex: none;
  font-size: var(--ow-type-card-title);
  height: var(--ow-control-h);
  margin-left: auto;
  width: var(--ow-control-h);
}
.ow-modal__close:hover { background: var(--ow-hover-tint); color: var(--ow-hover-glyph); }

/* Guided walk: one question per step inside the shared modal. The step rail
   is a segmented progress bar; the footer holds Back on the left and the one
   primary action on the right. At phone width the sheet fills the screen. */
.ow-modal--wizard { max-height: min(92vh, 860px); width: min(640px, 100%); }
.ow-wizard__header { align-items: flex-start; border-bottom: 0; padding-bottom: var(--ow-space-2); }
.ow-wizard__question { text-wrap: pretty; }
/* The heading takes focus on each step so the step is announced; it is not
   a control, so it draws no focus ring. */
.ow-wizard__question:focus, .ow-wizard__question:focus-visible { box-shadow: none; outline: none; }
.ow-wizard__steps { display: flex; flex: none; gap: var(--ow-space-1); list-style: none; margin: 0; padding: 0 var(--ow-space-5) var(--ow-space-4); }
.ow-wizard__step { background: var(--ow-color-border-soft); border-radius: var(--ow-radius-pill); flex: 1 1 0; height: 4px; transition: background var(--ow-dur-state) var(--ow-ease); }
.ow-wizard__step.is-done { background: var(--ow-color-brand); }
.ow-wizard__step.is-current { background: var(--ow-color-brand); opacity: 0.45; }
.ow-wizard__complete { display: flex; flex: none; padding: 0 var(--ow-space-5) var(--ow-space-4); }
.ow-wizard__footer { justify-content: flex-start; }
.ow-wizard__footer-end { display: flex; gap: var(--ow-space-2); margin-left: auto; }
.ow-wizard__list { display: grid; gap: var(--ow-space-2); margin: 0; padding-left: var(--ow-space-5); }
.ow-wizard__list li { color: var(--ow-color-text); font-size: var(--ow-type-body); line-height: var(--ow-line-height); text-wrap: pretty; }
.ow-wizard__wait { align-items: center; color: var(--ow-color-muted); display: flex; font-size: var(--ow-type-body); gap: var(--ow-space-3); }
.ow-wizard__wait.is-done { color: var(--ow-status-pass-fg); }
.ow-wizard__wait .fa { flex: none; font-size: var(--ow-type-card-title); }
.ow-wizard__done { align-items: center; display: flex; gap: var(--ow-space-4); }
.ow-wizard__done p { margin: 0; }
.ow-modal[aria-busy="true"] .ow-modal__body { opacity: 0.6; transition: opacity var(--ow-dur-state) var(--ow-ease); }
/* Each step's content settles in once, top to bottom: the modal is replaced
   on every step, so the reveal runs on arrival and never on a poll. */
.ow-modal--wizard .ow-modal__body > * { animation: ow-wizard-reveal 0.32s var(--ow-ease-out) both; }
.ow-modal--wizard .ow-modal__body > :nth-child(2) { animation-delay: 0.04s; }
.ow-modal--wizard .ow-modal__body > :nth-child(3) { animation-delay: 0.08s; }
.ow-modal--wizard .ow-modal__body > :nth-child(4) { animation-delay: 0.12s; }
.ow-modal--wizard .ow-modal__body > :nth-child(5) { animation-delay: 0.16s; }
.ow-modal--wizard .ow-modal__body > :nth-child(n+6) { animation-delay: 0.2s; }
@keyframes ow-wizard-reveal { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }

/* The live weight as the walk reads it: one large figure and its state. */
.ow-livefigure { align-items: center; background: var(--ow-console-bg); border-radius: var(--ow-radius-card); display: flex; flex-direction: column; gap: var(--ow-space-1); padding: var(--ow-space-4); }
.ow-livefigure__row { align-items: baseline; display: flex; gap: var(--ow-space-2); }
.ow-livefigure__figure { color: var(--ow-color-muted); font-size: 44px; transition: color var(--ow-dur-state) var(--ow-ease); }
.ow-livefigure.is-live .ow-livefigure__figure { color: var(--ow-color-text); }
.ow-livefigure.is-stable .ow-livefigure__figure { color: var(--ow-color-brand-deep); }
.ow-livefigure__state { color: var(--ow-color-muted); font-size: var(--ow-type-meta); font-weight: 700; }
.ow-livefigure.is-stable .ow-livefigure__state { color: var(--ow-status-pass-fg); }

/* The physical check: one large digits-only input, touch first. */
.ow-digits {
  background: var(--ow-color-surface);
  border: 2px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  color: var(--ow-color-text);
  font-family: inherit;
  font-feature-settings: "tnum" 1;
  font-size: 40px;
  font-variant-numeric: tabular-nums;
  font-weight: var(--ow-type-data-weight);
  height: 72px;
  letter-spacing: var(--ow-tracking-tighter);
  padding: 0 var(--ow-space-4);
  text-align: center;
  transition: border-color var(--ow-dur-hover) var(--ow-ease), box-shadow var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-digits:focus { border-color: var(--ow-color-brand); box-shadow: 0 0 0 4px var(--ow-color-brand-tint); outline: none; }
.ow-digits--match { border-color: var(--ow-color-success); }
.ow-digits--mismatch { border-color: var(--ow-color-danger); }

@media (max-width: 767px) {
  .ow-modal--wizard { border-radius: 0; height: 100%; max-height: 100%; }
  .ow-wizard__footer { flex-wrap: wrap; }
  .ow-wizard__footer .ow-btn { min-height: var(--ow-control-h-touch); }
}
@media (prefers-reduced-motion: reduce) {
  .ow-modal, .ow-overlay--glass, .ow-modal--wizard .ow-modal__body > * { animation: none; }
  .ow-spin { animation: none; }
}

.ow-drawer {
  animation: ow-drawer-in var(--ow-dur-panel) var(--ow-ease-out);
  background: var(--ow-color-surface);
  box-shadow: var(--ow-shadow-drawer);
  display: flex;
  flex-direction: column;
  height: 100%;
  max-width: 100%;
  width: 560px;
}
.ow-drawer--wide { width: 720px; }
@keyframes ow-drawer-in { from { opacity: 0; transform: translateX(24px); } to { opacity: 1; transform: translateX(0); } }
@media (max-width: 767px) {
  .ow-drawer { border-radius: var(--ow-radius-2xl) var(--ow-radius-2xl) 0 0; height: 92vh; width: 100%; }
}
.ow-drawer__header {
  align-items: flex-start;
  border-bottom: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex: none;
  gap: var(--ow-space-3);
  padding: var(--ow-space-5);
}
.ow-drawer__body { flex: 1 1 auto; overflow-y: auto; padding: var(--ow-space-5); }
.ow-drawer__footer {
  align-items: center;
  background: var(--ow-color-surface);
  border-top: 1px solid var(--ow-color-border);
  display: flex;
  flex: none;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
  justify-content: flex-end;
  padding: var(--ow-space-4) var(--ow-space-5);
}
/* The drawer is the full width of a phone, so a footer note sharing a row with
   the actions is squeezed to one word a line. The note takes its own row and
   the actions keep theirs. */
@media (max-width: 767px) {
  .ow-drawer__footer > .ow-fill { flex-basis: 100%; }
}

/* Fixed mobile action bar with the white fade above it. */
.ow-actionbar {
  background: var(--ow-color-surface);
  border-top: 1px solid var(--ow-color-border);
  bottom: 0;
  display: flex;
  gap: var(--ow-space-2);
  left: 0;
  padding: var(--ow-space-3) var(--ow-gutter-page-mobile) calc(var(--ow-space-3) + env(safe-area-inset-bottom));
  position: fixed;
  right: 0;
  z-index: var(--ow-z-overlay);
}
.ow-actionbar > * { flex: 1 1 auto; }

/* Bulk-selection bar */
.ow-bulkbar {
  align-items: center;
  background: var(--ow-color-brand);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-brand-lg);
  color: var(--ow-color-surface);
  display: flex;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-bulkbar__count { font-size: var(--ow-type-body); font-weight: 700; font-variant-numeric: tabular-nums; }
.ow-bulkbar .ow-btn--secondary { background: rgba(255, 255, 255, 0.16); border-color: rgba(255, 255, 255, 0.4); color: var(--ow-color-surface); }
.ow-bulkbar .ow-btn--secondary:hover { background: rgba(255, 255, 255, 0.26); border-color: var(--ow-color-surface); color: var(--ow-color-surface); }

/* ── 10. Empty, loading and notice states ──────────────────────────────── */

.ow-empty {
  align-items: center;
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  padding: var(--ow-space-8) var(--ow-space-5);
  text-align: center;
}
.ow-empty__icon {
  align-items: center;
  background: var(--ow-color-brand-tint);
  border-radius: 50%;
  color: var(--ow-color-brand);
  display: inline-flex;
  font-size: var(--ow-type-view-title);
  height: 56px;
  justify-content: center;
  width: 56px;
}
.ow-empty__icon--neutral { background: var(--ow-color-border-soft); color: var(--ow-color-faint); }
.ow-empty__title { font-size: var(--ow-type-card-title); font-weight: 700; }
.ow-empty__copy { color: var(--ow-color-muted); font-size: var(--ow-type-body); max-width: 46ch; }

/* The customer-note style notice: uppercase, structural, never decorative. */
.ow-notice {
  align-items: flex-start;
  background: var(--ow-status-warning-bg);
  border-radius: var(--ow-radius-md);
  color: var(--ow-status-warning-fg);
  display: flex;
  font-size: var(--ow-type-meta);
  gap: var(--ow-space-3);
  padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-notice__label { font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-notice--warning { background: var(--ow-status-warning-bg); color: var(--ow-status-warning-fg); }
.ow-notice--info { background: var(--ow-status-info-bg); color: var(--ow-status-info-fg); }
.ow-notice--pass { background: var(--ow-status-pass-bg); color: var(--ow-status-pass-fg); }
.ow-notice--danger { background: var(--ow-status-fail-bg); color: var(--ow-status-fail-fg); }
.ow-notice--brand { background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); }

/* PROGRESS. A determinate bar only: where the end is unknown, say so in words
 * rather than animate. The figure beside it carries the meaning and the bar
 * pictures it, so the bar is never the only thing that says how far the work
 * has got. */
.ow-progress { background: var(--ow-color-border-soft); border-radius: var(--ow-radius-pill); height: 6px; overflow: hidden; width: 100%; }
.ow-progress__fill { background: var(--ow-brand-rule); height: 100%; transition: width var(--ow-dur-state) var(--ow-ease); }
/* STEP PROGRESS. The fill's width is a step COUNT, passed as `--ow-bar` (the
 * `--seg-w` / `--ow-bar` precedent: the view supplies the number, this rule uses
 * it). No transition, deliberately: a stepped bar's element is re-rendered on
 * every step, and a width transition restarts from zero on each render — which
 * renders as an empty track for the whole run and then a jump to full. */
.ow-progress__fill--steps { transition: none; width: var(--ow-bar, 0%); }

/* NOTICE STACK — the shell's own notices, between the top bar and the page.
 *
 * A separate component from `.ow-notice` above, which is the one-line
 * customer-note surface a screen uses. This is a stack of rows the whole
 * application carries, one shown at a time, and it is a grid rather than a
 * flex line, so it cannot share that block's declarations.
 *
 * Four tones, each with one fixed meaning, all four drawn from the
 * `--ow-notice-<tone>-*` tokens and declaring no colour of their own. Dark mode
 * is the token swap, so there is not one dark rule here. */
.ow-notices {
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: var(--ow-space-3) var(--ow-gutter-page) 0;
}
/* THE BOX HOLDS ITS HEIGHT THROUGH EVERY MOVE, so the page beneath never
 * shifts while a row leaves or rotates. The height is the row count, which the
 * view states as `--ow-notices-h`; `perspective` is what gives the exit and
 * entry their depth. */
.ow-notices__list {
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  height: var(--ow-notices-h, 104px);
  overflow: hidden;
  perspective: 900px;
  transition: height var(--ow-dur-move) cubic-bezier(0.4, 0, 0.2, 1);
}
.ow-notice-wrap { display: grid; grid-template-rows: 1fr; }
.ow-notice-card {
  align-items: center;
  border-radius: var(--ow-radius-md);
  box-sizing: border-box;
  display: grid;
  gap: var(--ow-space-4);
  grid-template-columns: auto minmax(0, 1fr) auto;
  height: 104px;
  min-height: 0;
  overflow: hidden;
  padding: var(--ow-space-3) var(--ow-space-3) var(--ow-space-3) var(--ow-space-4);
  position: relative;
}
.ow-notice-card--fail {
  background: var(--ow-notice-fail-surface);
  border: 1px solid var(--ow-notice-fail-border);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 18px -8px var(--ow-notice-fail-border);
}
.ow-notice-card--warn {
  background: var(--ow-notice-warn-surface);
  border: 1px solid var(--ow-notice-warn-border);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 18px -8px var(--ow-notice-warn-border);
}
.ow-notice-card--update {
  background: var(--ow-notice-update-surface);
  border: 1px solid var(--ow-notice-update-border);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 18px -8px var(--ow-notice-update-border);
}
.ow-notice-card--soon {
  background: var(--ow-notice-soon-surface);
  border: 1px solid var(--ow-notice-soon-border);
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.05), 0 6px 18px -8px var(--ow-notice-soon-border);
}
.ow-notice-card__edge { bottom: 0; left: 0; position: absolute; top: 0; width: 4px; }
.ow-notice-card--fail .ow-notice-card__edge { background: var(--ow-notice-fail-edge); }
.ow-notice-card--warn .ow-notice-card__edge { background: var(--ow-notice-warn-edge); }
.ow-notice-card--update .ow-notice-card__edge { background: var(--ow-notice-update-edge); }
.ow-notice-card--soon .ow-notice-card__edge { background: var(--ow-notice-soon-edge); }
/* The countdown to the next rotation. It pictures a timer the script owns and
 * is never what advances it, so a bar that cannot run leaves the rotation
 * working. */
.ow-notice-card__progress { bottom: 0; height: 2px; left: 4px; opacity: 0.55; position: absolute; width: 0; }
.ow-notice-card--fail .ow-notice-card__progress { background: var(--ow-notice-fail-edge); }
.ow-notice-card--warn .ow-notice-card__progress { background: var(--ow-notice-warn-edge); }
.ow-notice-card--update .ow-notice-card__progress { background: var(--ow-notice-update-edge); }
.ow-notice-card--soon .ow-notice-card__progress { background: var(--ow-notice-soon-edge); }
.ow-notice-card__tile {
  border-radius: 11px;
  display: grid;
  flex: none;
  font-size: 17px;
  height: 40px;
  place-items: center;
  width: 40px;
}
.ow-notice-card--fail .ow-notice-card__tile {
  background: var(--ow-notice-fail-tile);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.28), inset 0 -1px 0 rgba(0, 0, 0, 0.12),
              0 4px 10px -4px var(--ow-notice-fail-tile);
  color: var(--ow-notice-fail-ink);
}
.ow-notice-card--warn .ow-notice-card__tile {
  background: var(--ow-notice-warn-tile);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.28), inset 0 -1px 0 rgba(0, 0, 0, 0.12),
              0 4px 10px -4px var(--ow-notice-warn-tile);
  color: var(--ow-notice-warn-ink);
}
.ow-notice-card--update .ow-notice-card__tile {
  background: var(--ow-notice-update-tile);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.28), inset 0 -1px 0 rgba(0, 0, 0, 0.12),
              0 4px 10px -4px var(--ow-notice-update-tile);
  color: var(--ow-notice-update-ink);
}
.ow-notice-card--soon .ow-notice-card__tile {
  background: var(--ow-notice-soon-tile);
  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.28), inset 0 -1px 0 rgba(0, 0, 0, 0.12),
              0 4px 10px -4px var(--ow-notice-soon-tile);
  color: var(--ow-notice-soon-ink);
}
.ow-notice-card__body { display: flex; flex-direction: column; gap: 3px; min-width: 0; }
.ow-notice-card__kind {
  align-items: center;
  display: flex;
  font-size: var(--ow-type-micro);
  font-weight: 800;
  gap: var(--ow-space-2);
  letter-spacing: var(--ow-tracking-label);
  line-height: 14px;
  text-transform: uppercase;
  white-space: nowrap;
}
.ow-notice-card--fail .ow-notice-card__label { color: var(--ow-notice-fail-fg); }
.ow-notice-card--warn .ow-notice-card__label { color: var(--ow-notice-warn-fg); }
.ow-notice-card--update .ow-notice-card__label { color: var(--ow-notice-update-fg); }
.ow-notice-card--soon .ow-notice-card__label { color: var(--ow-notice-soon-fg); }
.ow-notice-card__sep {
  background: var(--ow-color-border-strong);
  border-radius: var(--ow-radius-pill);
  flex: none;
  height: 3px;
  width: 3px;
}
.ow-notice-card__meta { color: var(--ow-color-muted); letter-spacing: 0.04em; overflow: hidden; text-overflow: ellipsis; }
.ow-notice-card__title {
  color: var(--ow-color-text);
  font-size: var(--ow-type-body);
  font-weight: 700;
  line-height: 20px;
  text-wrap: pretty;
}
.ow-notice-card__why { color: var(--ow-color-text-soft); font-size: var(--ow-type-meta); line-height: 18px; text-wrap: pretty; }
/* One line each on a desktop row 104px tall: a third line of either would push
 * the row past its own height, and the box clips. */
.ow-notice-card__title, .ow-notice-card__why { overflow: hidden; }
.ow-notice-card__actions { align-items: center; display: flex; gap: var(--ow-space-2); }
.ow-notice-card__act {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-text);
  display: inline-flex;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  gap: var(--ow-space-2);
  height: 36px;
  padding: 0 var(--ow-space-3);
  text-decoration: none;
  transition: border-color var(--ow-dur-state) var(--ow-ease), background var(--ow-dur-state) var(--ow-ease);
  white-space: nowrap;
}
.ow-notice-card__act:hover, .ow-notice-card__act:focus {
  background: var(--ow-color-surface-alt);
  border-color: var(--ow-color-border-strong);
  color: var(--ow-color-text);
  text-decoration: none;
}
.ow-notice-card__act i { color: var(--ow-color-muted); }
.ow-notice-card__dismiss {
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: grid;
  font-size: var(--ow-type-body);
  height: 36px;
  place-items: center;
  transition: background var(--ow-dur-state) var(--ow-ease), color var(--ow-dur-state) var(--ow-ease);
  width: 36px;
}
.ow-notice-card__dismiss:hover, .ow-notice-card__dismiss:focus {
  background: var(--ow-hover-tint);
  color: var(--ow-hover-glyph);
}
.ow-notices__dismiss-form { display: contents; }

/* The footer: what is hidden on the left, where the rotation is on the right.
 * Present only while something rotates or something is hidden. */
.ow-notices__foot {
  align-items: center;
  display: flex;
  justify-content: space-between;
  min-height: 28px;
  padding: 0 var(--ow-space-1);
}
.ow-notices__restore {
  align-items: center;
  background: transparent;
  border: 0;
  color: var(--ow-color-muted);
  cursor: pointer;
  display: inline-flex;
  font-size: var(--ow-type-micro);
  font-weight: 700;
  gap: var(--ow-space-2);
  padding: var(--ow-space-2) var(--ow-space-1);
}
.ow-notices__restore:hover, .ow-notices__restore:focus { color: var(--ow-color-text); }
.ow-notices__pager { align-items: center; display: flex; gap: var(--ow-space-3); }
.ow-notices__count {
  color: var(--ow-color-muted);
  font-feature-settings: 'tnum' 1;
  font-size: var(--ow-type-micro);
  font-weight: 700;
}
.ow-notices__dots { align-items: center; display: flex; gap: 5px; }
.ow-notices__dot {
  background: var(--ow-color-border-strong);
  border-radius: var(--ow-radius-pill);
  height: 5px;
  transition: width var(--ow-dur-panel) var(--ow-ease-out), background var(--ow-dur-panel);
  width: 5px;
}
.ow-notices__dot--on { background: var(--ow-color-brand); width: 18px; }
.ow-notices__next {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-text);
  cursor: pointer;
  display: grid;
  font-size: var(--ow-type-micro);
  height: 28px;
  place-items: center;
  transition: border-color var(--ow-dur-state) var(--ow-ease), color var(--ow-dur-state) var(--ow-ease);
  width: 28px;
}
.ow-notices__next:hover, .ow-notices__next:focus {
  border-color: var(--ow-color-brand);
  color: var(--ow-color-brand-deep);
}

/* THE PAGE-LOAD REVEAL: the row, then its tile and edge, staggered per row.
 * The delay is the row's own, stated by the view as `--ow-notice-delay`. */
@keyframes ow-notice-in { from { opacity: 0; transform: translateY(-10px); } to { opacity: 1; transform: none; } }
@keyframes ow-notice-tile { from { opacity: 0; transform: scale(0.6); } to { opacity: 1; transform: none; } }
@keyframes ow-notice-edge { from { transform: scaleY(0); } to { transform: none; } }
.ow-notice-card {
  animation: ow-notice-in var(--ow-dur-move) var(--ow-ease-out) both;
  animation-delay: var(--ow-notice-delay, 0s);
}
.ow-notice-card .ow-notice-card__tile {
  animation: ow-notice-tile 0.45s var(--ow-ease-out) both;
  animation-delay: inherit;
}
.ow-notice-card .ow-notice-card__edge {
  animation: ow-notice-edge var(--ow-dur-move) var(--ow-ease-out) both;
  animation-delay: inherit;
  transform-origin: top;
}

/* ROTATION AND EXIT. Transform and opacity only, so every move is composited:
 * the top row lifts away, the rows beneath ride up one pitch (104px row + 8px
 * gap), and the newcomer — rendered a slot below the box while the move plays
 * — rises into view in the same curve. */
@keyframes ow-notice-out {
  from { opacity: 1; transform: none; }
  to { opacity: 0; transform: translateY(-40px) rotateX(18deg) scale(0.97); }
}
@keyframes ow-notice-up {
  from { transform: none; }
  to { transform: translateY(calc(-1 * var(--ow-notice-pitch, 112px))); }
}
@keyframes ow-notice-rise {
  from { transform: translateY(0) rotateX(-12deg) scale(0.97); }
  to { transform: translateY(calc(-1 * var(--ow-notice-pitch, 112px))) rotateX(0) scale(1); }
}
@keyframes ow-notice-leave { from { opacity: 1; transform: none; } to { opacity: 0; transform: translateX(32px); } }
@keyframes ow-notice-fade { from { opacity: 0; } to { opacity: 1; } }
@keyframes ow-notice-progress { from { width: 0; } to { width: calc(100% - 4px); } }
.ow-notice-wrap--out {
  animation: ow-notice-out 0.55s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  transform-origin: 50% 0;
  will-change: transform, opacity;
}
.ow-notice-wrap--up {
  animation: ow-notice-up 0.55s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  will-change: transform;
}
.ow-notice-wrap--rise {
  animation: ow-notice-rise 0.55s cubic-bezier(0.22, 1, 0.36, 1) forwards,
             ow-notice-fade 0.45s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  transform-origin: 50% 100%;
  will-change: transform, opacity;
}
.ow-notice-wrap--rise .ow-notice-card,
.ow-notice-wrap--rise .ow-notice-card__tile,
.ow-notice-wrap--rise .ow-notice-card__edge { animation: none; }
.ow-notice-wrap--leave {
  animation: ow-notice-leave 0.5s cubic-bezier(0.4, 0, 0.2, 1) forwards;
  will-change: transform, opacity;
}
/* The countdown runs for the rotation interval the view states. It is paused
 * with the rotation itself, so a bar never finishes while the stack is held. */
.ow-notice-card__progress--run {
  animation: ow-notice-progress var(--ow-notices-rotate, 6s) linear forwards;
}
.ow-notices.is-paused .ow-notice-card__progress--run { animation-play-state: paused; }

/* NARROW SCREENS. The action label and the countdown go, the row grows to fit
 * two lines of real sentence, and the tile and the dismiss control stay: at
 * 390px the title and the reason are the notice, and a 104px row would clip
 * both. The box is told the taller pitch by the view through the same
 * `--ow-notices-h`, so nothing here has to agree with it twice. */
@media (max-width: 767px) {
  .ow-notices { padding: var(--ow-space-2) var(--ow-gutter-page-mobile) 0; }
  .ow-notice-card {
    align-items: start;
    gap: var(--ow-space-3);
    height: auto;
    min-height: 104px;
    padding: var(--ow-space-3);
  }
  .ow-notice-card__title, .ow-notice-card__why { overflow: visible; }
  /* The kind and its detail wrap onto a second line rather than ellipsising:
   * "RELEAS…" tells a person nothing, and the detail is often the count of
   * sites the notice is about. */
  .ow-notice-card__kind { flex-wrap: wrap; white-space: normal; }
  .ow-notice-card__meta { overflow: visible; text-overflow: clip; }
  .ow-notice-card__act span { display: none; }
  .ow-notice-card__act { padding: 0 var(--ow-space-2); }
  .ow-notice-card__progress { display: none; }
  .ow-notices__count { display: none; }
}

/* REDUCED MOTION. Every move collapses to effectively nothing, but the exit
 * and rotation animations keep a duration: the script commits the DOM change
 * when they END, so a cancelled animation would leave a row that never
 * leaves. The countdown bar stops animating and the rotation carries on,
 * because the script's own timer is what advances it. */
@media (prefers-reduced-motion: reduce) {
  .ow-notice-card,
  .ow-notice-card .ow-notice-card__tile,
  .ow-notice-card .ow-notice-card__edge { animation: none; }
  .ow-notice-wrap--out,
  .ow-notice-wrap--up,
  .ow-notice-wrap--rise,
  .ow-notice-wrap--leave { animation-duration: 0.01s; }
  .ow-notice-card__progress--run { animation: none; }
  .ow-notices__list { transition: none; }
  .ow-notices__dot { transition: none; }
}

/* Uppercase count / code chip. */
.ow-tag {
  background: var(--ow-color-border-soft);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-muted);
  font-size: var(--ow-type-micro);
  font-weight: 700;
  letter-spacing: var(--ow-tracking-label);
  padding: var(--ow-space-1) var(--ow-space-2);
  text-transform: uppercase;
  white-space: nowrap;
}
.ow-tag--pill { border-radius: var(--ow-radius-pill); font-size: var(--ow-type-label); font-weight: 800; padding: var(--ow-space-1) var(--ow-space-3); }
.ow-tag--brand { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand-tint-strong); color: var(--ow-color-brand-deep); }
.ow-tag--faint { background: var(--ow-color-page-bg); color: var(--ow-color-faint); }
/* A fact that changes what the row means — a company no longer trading, say.
 * A tag states; this one states something the reader must not skim past, so it
 * carries the warning tone rather than a second weight of grey. */
.ow-tag--warning { background: var(--ow-status-warning-bg); border-color: var(--ow-status-warning-bg); color: var(--ow-status-warning-fg); }
/* A tag that is also a control (a chip you can follow). Carries the pointer and
 * a hover tint a bare tag has no business implying. */
.ow-tag--action { cursor: pointer; font: inherit; font-size: var(--ow-type-label); font-weight: 800; }
.ow-tag--action:hover { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand-tint-strong); color: var(--ow-color-brand-deep); }
/* THE BOX YOU NEED TO FILL IN. A guided flow points at one field at a time:
 * the wrapper is tinted, the label reads in brand, and the input carries the
 * brand edge — so "what do I do now" is answered by looking, not reading. */
.ow-field--next {
  background: var(--ow-color-brand-tint);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-lg);
  margin: calc(var(--ow-space-2) * -1);
  padding: var(--ow-space-2);
}
.ow-field--next > .ow-field__label { color: var(--ow-color-brand); }
.ow-field--next .ow-input { border-color: var(--ow-color-brand); }
.ow-field__cue {
  align-items: center;
  color: var(--ow-color-brand);
  display: inline-flex;
  font-size: var(--ow-type-meta);
  font-weight: 800;
  gap: var(--ow-space-2);
  line-height: var(--ow-line-height);
}
.ow-field__cue i { font-size: var(--ow-type-body); }

/* Pick-one list inside a modal: sites, records, waste types. */
.ow-picklist {
  background: var(--ow-color-surface-alt);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  max-height: 60vh;
  overflow-y: auto;
  padding: var(--ow-space-3);
}
.ow-picklist__row {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-left-width: 3px;
  border-radius: var(--ow-radius-sm);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  gap: var(--ow-space-4);
  min-height: 68px;
  padding: var(--ow-space-4);
  text-align: left;
  transition: background var(--ow-dur-hover) var(--ow-ease), border-color var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-picklist__row:hover, .ow-picklist__row:focus {
  background: var(--ow-color-selected-bg);
  border-color: var(--ow-color-brand);
}
.ow-picklist__row:active { background: var(--ow-color-selected-row); }
.ow-picklist__name {
  color: var(--ow-color-text);
  flex: 1 1 auto;
  font-size: var(--ow-type-data);
  font-weight: 700;
  letter-spacing: var(--ow-tracking-tight);
  min-width: 0;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}
.ow-picklist__chev { color: var(--ow-color-faint); flex: none; font-size: var(--ow-type-meta); }
@media (max-width: 767px) {
  .ow-picklist__row { min-height: 76px; padding: var(--ow-space-5) 18px; }
  .ow-picklist__name { font-size: var(--ow-type-section-title); }
}

.ow-progress { background: var(--ow-color-border-soft); border-radius: var(--ow-radius-pill); height: 6px; overflow: hidden; width: 100%; }
.ow-progress__fill { background: var(--ow-brand-rule); height: 100%; transition: width var(--ow-dur-state) var(--ow-ease); }
/* STEP PROGRESS. The fill's width is a step COUNT, passed as `--ow-bar` (the
 * `--seg-w` / `--ow-bar` precedent: the view supplies the number, this rule uses
 * it). No transition, deliberately: a stepped bar's element is re-rendered on
 * every step, and a width transition restarts from zero on each render — which
 * renders as an empty track for the whole run and then a jump to full. */
.ow-progress__fill--steps { transition: none; width: var(--ow-bar, 0%); }

.ow-skeleton-row { align-items: center; display: flex; gap: var(--ow-space-3); padding: var(--ow-space-3) var(--ow-space-4); }

/* Skeleton list: a header band of bars, then rows of bars. */
.ow-sk-band {
  background: var(--ow-color-surface-alt);
  border-bottom: 1px solid var(--ow-color-border);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-4);
  padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-sk-row {
  border-bottom: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-4);
  padding: var(--ow-space-4);
}
.ow-sk-bar { animation: ow-pulse 1.4s ease-in-out infinite; background: var(--ow-color-border-soft); border-radius: var(--ow-radius-sm); height: 12px; width: 120px; }
.ow-sk-bar--xs { width: 70px; }
.ow-sk-bar--sm { width: 90px; }
.ow-sk-bar--md { width: 130px; }
.ow-sk-bar--lg { width: 150px; }
.ow-sk-bar--xl { width: 220px; }
.ow-sk-band .ow-sk-bar { background: var(--ow-color-border); height: 11px; }
.ow-sk-foot {
  align-items: center;
  background: var(--ow-color-surface-alt);
  color: var(--ow-color-faint);
  display: flex;
  font-size: var(--ow-type-label);
  font-weight: 700;
  gap: var(--ow-space-2);
  justify-content: center;
  padding: var(--ow-space-3);
}
.ow-sk-foot i { color: var(--ow-color-brand); }
@keyframes ow-pulse { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } }

/* ── 11. Record page: hero, form bands, floating docks ─────────────────── */

.ow-hero { background: var(--ow-color-surface); border-bottom: 1px solid var(--ow-color-border); overflow: hidden; }
.ow-hero__top {
  align-items: flex-start;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-4);
  justify-content: space-between;
  padding: var(--ow-space-4) var(--ow-space-6);
}
.ow-hero__name { color: var(--ow-color-text); font-size: var(--ow-type-view-title); font-weight: 800; letter-spacing: var(--ow-tracking-tighter); overflow-wrap: anywhere; }
/* Container-driven, not viewport-driven. A record screen's rail is pinned open
 * at 248px whenever a section menu is active, so the same viewport can give the
 * hero a ~628px column or an ~800px one — a viewport media query cannot tell
 * the difference. auto-fit collapses to at most the number of stats present,
 * and the 210px floor is set by the widest unbreakable value a stat holds (a
 * date at 27px plus the cell's own padding). Separators stay on the cell rather
 * than being drawn as grid gaps, so a row with fewer cells than tracks leaves
 * plain surface rather than a filled empty block. */
.ow-hero__stats {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
}
.ow-hero__stat { border-right: 1px solid var(--ow-color-border-soft); border-top: 1px solid var(--ow-color-border-soft); min-width: 0; padding: var(--ow-space-3) var(--ow-space-6); }
.ow-hero__stat:last-child { border-right: 0; }
.ow-hero__nav { background: var(--ow-color-surface); border-top: 1px solid var(--ow-color-border-soft); padding: var(--ow-space-2) var(--ow-space-4); }
@media (max-width: 767px) {
  .ow-hero__top { padding: var(--ow-space-4); }
  .ow-hero__stats { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ow-hero__stat { padding: var(--ow-space-3) var(--ow-space-4); }
}
/* Form band: a labelled section beside its field grid. */
.ow-formband {
  align-items: start;
  border-bottom: 1px solid var(--ow-color-border-soft);
  display: grid;
  gap: var(--ow-space-4) var(--ow-space-6);
  grid-template-columns: 210px minmax(0, 1fr);
  padding: var(--ow-space-4);
}
.ow-formband__head { align-items: flex-start; display: flex; gap: var(--ow-space-3); min-width: 0; }
.ow-formband__title { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 800; letter-spacing: var(--ow-tracking-wide); text-transform: uppercase; }
.ow-formband__hint { color: var(--ow-color-faint); font-size: var(--ow-type-label); font-weight: 600; line-height: 17px; }
.ow-formband__fields { display: grid; gap: var(--ow-space-4) var(--ow-space-5); grid-template-columns: repeat(3, minmax(0, 1fr)); min-width: 0; }
.ow-formband__fields > .ow-span-all { grid-column: 1 / -1; }
@media (max-width: 1199px) {
  .ow-formband { grid-template-columns: minmax(0, 1fr); }
  .ow-formband__fields { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 767px) {
  .ow-formband__fields { grid-template-columns: minmax(0, 1fr); }
}

/* Bottom-centre floating dock: selection bar, screen switcher. */
.ow-dock {
  bottom: var(--ow-space-6);
  display: flex;
  justify-content: center;
  left: 0;
  padding: 0 var(--ow-space-4);
  pointer-events: none;
  position: fixed;
  right: 0;
  z-index: 200;
}
.ow-dock > * { pointer-events: auto; }
.ow-selbar {
  align-items: center;
  background: var(--ow-color-nav-dark);
  border-radius: var(--ow-radius-pill);
  box-shadow: var(--ow-shadow-modal);
  color: var(--ow-color-on-dark);
  display: inline-flex;
  gap: var(--ow-space-3);
  padding: var(--ow-space-2) var(--ow-space-2) var(--ow-space-2) var(--ow-space-5);
}
.ow-selbar__count { font-size: var(--ow-type-meta); font-weight: 700; white-space: nowrap; }
.ow-selbar__divider { background: rgba(255, 255, 255, 0.18); height: 22px; width: 1px; }
.ow-selbar__btn {
  align-items: center;
  background: rgba(255, 255, 255, 0.1);
  border: 0;
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-surface);
  cursor: pointer;
  display: inline-flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  gap: var(--ow-space-2);
  height: var(--ow-control-h);
  padding: 0 var(--ow-space-3);
}
.ow-selbar__btn--primary { background: var(--ow-color-brand); padding: 0 var(--ow-space-4); }
.ow-selbar__btn--primary:hover { filter: brightness(0.94); }
.ow-selbar__close {
  background: transparent;
  border: 0;
  border-radius: 50%;
  color: rgba(255, 255, 255, 0.7);
  cursor: pointer;
  font-size: var(--ow-type-meta);
  height: var(--ow-control-h);
  width: 34px;
}

/* Prototype-only: the screen-state switcher on the demo layouts. */
.ow-switcher {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-pill);
  bottom: var(--ow-space-4);
  box-shadow: var(--ow-shadow-raise);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-1);
  padding: var(--ow-space-1);
  position: fixed;
  right: var(--ow-space-4);
  z-index: 300;
}
.ow-switcher__label { align-self: center; color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); padding: 0 var(--ow-space-2) 0 var(--ow-space-3); text-transform: uppercase; white-space: nowrap; }
.ow-switcher__btn {
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-muted);
  cursor: pointer;
  font-family: inherit;
  font-size: var(--ow-type-label);
  font-weight: 700;
  height: var(--ow-control-h);
  padding: 0 var(--ow-space-3);
  transition: background var(--ow-dur-hover) var(--ow-ease);
}
.ow-switcher__btn:hover { background: var(--ow-color-page-bg); }
.ow-switcher__btn.is-active { background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); }

/* ── 12. Sign-in screen ────────────────────────────────────────────────── */

.ow-auth { display: flex; min-height: 100vh; width: 100%; }
@media (max-width: 991px) { .ow-auth { flex-direction: column; } }

.ow-auth__hero {
  background: var(--ow-color-nav-dark);
  color: var(--ow-color-on-dark);
  display: flex;
  flex: 1.05 1 0;
  flex-direction: column;
  /* A real gap, not just space-between: with no gap, a hero whose children fill
   * the box distributes negative free space and adjacent blocks overlap instead
   * of the column growing. space-between still pins the legal line to the floor
   * whenever there is room to spare. */
  gap: var(--ow-space-6);
  justify-content: space-between;
  min-width: 0;
  overflow: hidden;
  padding: 56px 64px;
  position: relative;
}
.ow-auth__hero .ow-brand-rule { height: 4px; left: 0; position: absolute; right: 0; top: 0; }
.ow-auth__glow {
  background: radial-gradient(circle at center, var(--ow-color-brand-tint-strong), rgba(245, 130, 32, 0) 68%);
  border-radius: 50%;
  height: 520px;
  pointer-events: none;
  position: absolute;
  right: -140px;
  top: 50%;
  transform: translateY(-50%);
  width: 520px;
}
.ow-auth__hero > *:not(.ow-auth__glow):not(.ow-brand-rule) { position: relative; z-index: 1; }
.ow-auth__lockup { animation: ow-auth-in 0.6s var(--ow-ease-out); }
.ow-auth__lockup img { display: block; height: 52px; width: auto; }
.ow-auth__eyebrow {
  align-items: center;
  display: flex;
  gap: var(--ow-space-4);
  margin-top: 14px;
  max-width: 340px;
}
.ow-auth__eyebrow span:first-child { background: var(--ow-color-brand); flex: none; height: 2px; width: 40px; }
.ow-auth__eyebrow span:last-child {
  color: var(--ow-color-on-dark);
  font-size: var(--ow-type-body);
  font-weight: 800;
  letter-spacing: 0.28em;
  text-transform: uppercase;
  white-space: nowrap;
}
.ow-auth__pitch { animation: ow-auth-in 0.8s var(--ow-ease-out); max-width: 460px; }
/* The hero is always-dark chrome, so its heading takes the dark-chrome token:
 * the base `h1..h6 { color: var(--ow-color-heading) }` rule in `_ow_typography`
 * is more specific than the hero's inherited white and was painting the
 * headline near-black on navy (~1.1:1). Same reason the eyebrow below takes the
 * nav text colour rather than --ow-color-faint. */
.ow-auth__pitch h1 { color: var(--ow-color-nav-heading); font-size: 34px; font-weight: 800; letter-spacing: var(--ow-tracking-tight); line-height: 1.18; margin: 0 0 var(--ow-space-4); }
.ow-auth__hero .ow-eyebrow { color: var(--ow-color-nav-text); }
.ow-auth__pitch p { color: var(--ow-color-muted); font-size: var(--ow-type-card-title); line-height: 1.55; margin: 0 0 36px; }
.ow-auth__features { display: flex; flex-direction: column; gap: 18px; }
.ow-auth__feature { align-items: center; color: var(--ow-color-on-dark); display: flex; font-size: var(--ow-type-body); font-weight: 600; gap: 14px; }
.ow-auth__feature .ow-icontile { background: var(--ow-color-brand-tint-strong); }
.ow-auth__legal { animation: ow-auth-in 1s var(--ow-ease-out); color: var(--ow-color-muted); font-size: var(--ow-type-meta); margin: 0; }

.ow-auth__panel {
  align-items: center;
  background: var(--ow-color-page-bg);
  display: flex;
  flex: 1 1 0;
  justify-content: center;
  min-width: 0;
  padding: 56px var(--ow-space-7);
}
.ow-auth__form { animation: ow-auth-in 1s var(--ow-ease-out); max-width: 400px; width: 100%; }
.ow-auth__form h2 { color: var(--ow-color-text); font-size: var(--ow-type-page-title); font-weight: 800; letter-spacing: var(--ow-tracking-tight); margin: 0 0 var(--ow-space-2); }
.ow-auth__form > p:first-of-type { color: var(--ow-color-muted); font-size: var(--ow-type-body); margin: 0 0 var(--ow-space-7); }
.ow-auth__foot { color: var(--ow-color-muted); font-size: var(--ow-type-body); margin: var(--ow-space-6) 0 0; text-align: center; }
@keyframes ow-auth-in { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
@media (max-width: 991px) {
  /* Stacked, the hero is a block of content, not a column that shares the
   * viewport: `flex: 1.05 1 0` plus `overflow: hidden` resolves its automatic
   * minimum size to 0, so the whole lockup, pitch and legal line clipped to the
   * 4px brand rule. The glow is clipped by the panel below instead. */
  .ow-auth__hero { flex: none; justify-content: flex-start; overflow: visible; padding: var(--ow-space-7) var(--ow-space-6); }
  .ow-auth__glow { display: none; }
  .ow-auth__panel { padding: var(--ow-space-7) var(--ow-space-6) var(--ow-space-8); }
}

/* ── 13. Record search overlay ─────────────────────────────────── */

.ow-reslist { background: var(--ow-color-surface-alt); display: flex; flex-direction: column; gap: var(--ow-space-2); padding: var(--ow-space-3); }
.ow-reslist__row {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-left-width: 3px;
  border-radius: var(--ow-radius-lg);
  column-gap: var(--ow-space-5);
  cursor: pointer;
  display: grid;
  font-family: inherit;
  grid-template-columns: minmax(0, 1fr) auto 28px;
  padding: var(--ow-space-3) var(--ow-space-4);
  text-align: left;
  transition: background var(--ow-dur-hover) var(--ow-ease), border-color var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-reslist__row:hover, .ow-reslist__row:focus, .ow-reslist__row.is-active {
  background: var(--ow-color-selected-bg);
  border-color: var(--ow-color-brand);
}
.ow-reslist__row.is-selected { background: var(--ow-color-selected-row); border-color: var(--ow-color-brand); border-left-color: var(--ow-color-brand-deep); }
.ow-reslist__row.is-inactive { opacity: 0.62; }
.ow-reslist__primary { color: var(--ow-color-text); font-size: var(--ow-type-data); font-weight: 700; letter-spacing: var(--ow-tracking-tight); }
.ow-reslist__meta { align-items: center; color: var(--ow-color-muted); display: flex; flex-wrap: wrap; font-size: var(--ow-type-meta); gap: var(--ow-space-4); }
.ow-reslist__meta i { color: var(--ow-color-faint); font-size: var(--ow-type-micro); width: 12px; }
.ow-reslist__value { display: flex; flex-direction: column; gap: var(--ow-space-1); text-align: right; }
.ow-reslist__figure { color: var(--ow-color-text); font-size: var(--ow-type-section-title); font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: var(--ow-tracking-tight); }
.ow-reslist__go {
  align-items: center;
  background: var(--ow-color-brand-tint);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-brand-deep);
  display: inline-flex;
  font-size: var(--ow-type-micro);
  height: 26px;
  justify-content: center;
  opacity: 0;
  transform: translateX(-5px);
  transition: opacity var(--ow-dur-hover) var(--ow-ease), transform var(--ow-dur-hover) var(--ow-ease);
  width: 26px;
}
.ow-reslist__row:hover .ow-reslist__go,
.ow-reslist__row:focus .ow-reslist__go,
.ow-reslist__row.is-active .ow-reslist__go { opacity: 1; transform: none; }
@media (max-width: 860px) {
  .ow-reslist__row { grid-template-columns: minmax(0, 1fr); padding: var(--ow-space-4); row-gap: var(--ow-space-3); }
  .ow-reslist__value { text-align: left; }
  .ow-reslist__go { display: none; }
}

.ow-kbd { align-items: center; color: var(--ow-color-faint); display: inline-flex; font-size: var(--ow-type-micro); gap: var(--ow-space-2); }
.ow-kbd kbd {
  background: var(--ow-color-border-soft);
  border: 1px solid var(--ow-color-border);
  border-bottom-width: 2px;
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-muted);
  font-family: inherit;
  font-size: var(--ow-type-nano);
  font-weight: 700;
  padding: var(--ow-space-1);
}
@media (max-width: 860px) { .ow-kbd { display: none; } }

/* ── 14. Profile screen: password strength, rule list, row lists ───────── */

.ow-strength { align-items: center; display: flex; gap: var(--ow-space-2); }
.ow-strength__bar { background: var(--ow-color-border); border-radius: var(--ow-radius-pill); flex: 1 1 auto; height: 5px; transition: background var(--ow-dur-state) var(--ow-ease); }
.ow-strength__label { color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); min-width: 74px; text-align: right; text-transform: uppercase; }
.ow-strength--weak .ow-strength__bar.is-on, .ow-strength--weak .ow-strength__label { background: var(--ow-status-fail-fg); }
.ow-strength--fair .ow-strength__bar.is-on, .ow-strength--fair .ow-strength__label { background: var(--ow-color-warning); }
.ow-strength--good .ow-strength__bar.is-on, .ow-strength--good .ow-strength__label { background: var(--ow-color-brand); }
.ow-strength--strong .ow-strength__bar.is-on, .ow-strength--strong .ow-strength__label { background: var(--ow-color-success); }
.ow-strength--weak .ow-strength__label { background: none; color: var(--ow-status-fail-fg); }
.ow-strength--fair .ow-strength__label { background: none; color: var(--ow-color-warning); }
.ow-strength--good .ow-strength__label { background: none; color: var(--ow-color-brand); }
.ow-strength--strong .ow-strength__label { background: none; color: var(--ow-color-success); }

.ow-rulelist { display: flex; flex-wrap: wrap; gap: var(--ow-space-2) 18px; }
.ow-rule { align-items: center; color: var(--ow-color-faint); display: inline-flex; font-size: var(--ow-type-label); font-weight: 600; gap: var(--ow-space-2); }
.ow-rule i { font-size: var(--ow-type-micro); }
.ow-rule.is-ok { color: var(--ow-color-success); }

/* Stacked label/value rows inside a rail card. */
.ow-rowlist { display: flex; flex-direction: column; }
.ow-rowlist__row {
  border-bottom: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-1);
  padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-rowlist__row:last-child { border-bottom: 0; }
.ow-rowlist--split .ow-rowlist__row { align-items: baseline; flex-direction: row; gap: var(--ow-space-3); justify-content: space-between; }
.ow-rowlist__value { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 600; line-height: 19px; }
.ow-rowlist--split .ow-rowlist__value { font-variant-numeric: tabular-nums; font-weight: 700; text-align: right; }

/* Signature preview box on the profile screen. */
.ow-signature {
  align-items: center;
  background: var(--ow-color-surface-alt);
  border: 1px dashed var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  display: flex;
  flex: none;
  height: var(--ow-control-h-touch);
  justify-content: center;
  overflow: hidden;
  width: 112px;
}
.ow-signature__mark { color: var(--ow-color-text); font-family: Georgia, serif; font-size: var(--ow-type-section-title); font-style: italic; opacity: 0.8; }
.ow-signature__empty { color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 700; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }

.ow-pin { color: var(--ow-color-text); font-size: var(--ow-type-view-title); font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: 0.14em; min-width: 88px; }

/* ── 15. Ticket card (mobile ticketing list) ───────────────────────────── */

.ow-tcard {
  --tcard-accent: var(--ow-color-brand);
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-xl);
  box-shadow: var(--ow-shadow-mobile-card);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  overflow: hidden;
  padding: var(--ow-space-3);
  position: relative;
}
.ow-tcard.is-draft { --tcard-accent: var(--ow-color-border); }
.ow-tcard.is-done { --tcard-accent: var(--ow-color-faint); }
.ow-tcard__accent { background: var(--tcard-accent); bottom: 0; left: 0; position: absolute; top: 0; width: 4px; }
.ow-tcard__stage {
  background: var(--ow-color-brand-tint);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-brand-deep);
  flex: none;
  font-size: var(--ow-type-micro);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-label);
  padding: var(--ow-space-1) var(--ow-space-2);
  text-transform: uppercase;
  white-space: nowrap;
}
.ow-tcard.is-draft .ow-tcard__stage { background: var(--ow-color-page-bg); border-color: var(--ow-color-border); color: var(--ow-color-faint); }
.ow-tcard.is-done .ow-tcard__stage { background: var(--ow-color-border-soft); border-color: var(--ow-color-border); color: var(--ow-color-muted); }
.ow-tcard__grid {
  border-top: 1px solid var(--ow-color-border-soft);
  display: grid;
  gap: 9px var(--ow-space-3);
  grid-template-columns: 1fr 1fr;
  padding-top: var(--ow-space-3);
}
.ow-tcard__net { color: var(--ow-color-brand); font-size: var(--ow-type-data); font-variant-numeric: tabular-nums; font-weight: 800; line-height: 1.15; }
.ow-tcard.is-done .ow-tcard__net { color: var(--ow-color-text); }
.ow-weightile { background: var(--ow-color-page-bg); border-radius: var(--ow-radius-lg); min-width: 0; padding: var(--ow-space-2); }
.ow-weightile--pending { background: var(--ow-color-selected-row); }
.ow-weightile__figure { color: var(--ow-color-text); font-size: var(--ow-type-data); font-variant-numeric: tabular-nums; font-weight: 800; }
.ow-weightile--pending .ow-weightile__figure { color: var(--ow-color-faint); }
.ow-weightile__time { color: var(--ow-color-muted); font-size: var(--ow-type-micro); font-variant-numeric: tabular-nums; margin-top: 2px; }
.ow-weightile--pending .ow-weightile__time { color: var(--ow-color-faint); }
.ow-iconbtn--danger:hover { background: var(--ow-status-fail-bg); border-color: var(--ow-status-fail-bg); color: var(--ow-color-danger); }
.ow-iconbtn--lg { border-radius: var(--ow-radius-lg); font-size: var(--ow-type-card-title); height: 48px; width: 48px; }

/* ── 16. Log screens: cells, filter chips, detail cards, image strips ──── */

/* Table cell wrappers used by the shared DataTable's render functions. */
.ow-cell { padding: 13px var(--ow-space-3); }
.ow-cell--compact { padding: var(--ow-space-2) var(--ow-space-3); }
.ow-cell--nowrap { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-cell__time { font-size: var(--ow-type-meta); font-weight: 700; white-space: nowrap; }
.ow-cell__date { color: var(--ow-color-faint); font-size: var(--ow-type-label); margin-top: 1px; }
.ow-cell__reg { font-size: var(--ow-type-body); font-weight: 800; letter-spacing: var(--ow-tracking-wide); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-cell__body { font-size: var(--ow-type-meta); }
.ow-cell__weight {
  color: var(--ow-color-text);
  font-size: var(--ow-type-data);
  font-weight: var(--ow-type-data-weight);
  letter-spacing: var(--ow-tracking-tight);
  text-align: right;
  white-space: nowrap;
}
.ow-cell__weight.is-unknown { color: var(--ow-color-faint); }
.ow-cell__stack { display: flex; flex-direction: column; }
.ow-cell__badges { align-items: center; display: flex; flex-wrap: wrap; gap: 5px; }
.ow-cell__sub { align-items: center; color: var(--ow-color-muted); display: inline-flex; font-size: var(--ow-type-label); font-weight: 400; gap: var(--ow-space-2); letter-spacing: 0; margin-top: 5px; }
.ow-cell__sub i { color: var(--ow-color-faint); font-size: var(--ow-type-nano); }

/* Direction tag: an icon plus its label, never a bare glyph. */
.ow-dirtag { align-items: center; color: var(--ow-color-text); display: inline-flex; font-size: var(--ow-type-meta); font-weight: 700; gap: var(--ow-space-2); white-space: nowrap; }
.ow-dirtag i { font-size: var(--ow-type-micro); opacity: 0.85; }
.ow-dirtag.is-unknown { color: var(--ow-color-faint); }
.ow-dirtag--chip { background: var(--ow-color-surface-alt); border-radius: var(--ow-radius-pill); font-size: var(--ow-type-label); padding: var(--ow-space-1) var(--ow-space-2); }

/* Applied-filter chips. */
.ow-chiprow { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2); padding: 0 var(--ow-space-1); }
.ow-chip {
  align-items: center;
  background: var(--ow-color-brand-tint);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-brand-deep);
  display: inline-flex;
  font-size: var(--ow-type-label);
  font-weight: 700;
  gap: var(--ow-space-2);
  height: 28px;
  padding: 0 var(--ow-space-1) 0 var(--ow-space-3);
}
.ow-chip__x {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: 50%;
  color: var(--ow-color-brand-deep);
  cursor: pointer;
  display: inline-flex;
  font-size: var(--ow-type-nano);
  height: 18px;
  justify-content: center;
  width: 18px;
}
.ow-chip__x:hover { background: var(--ow-color-brand-tint-strong); }
/* Count badge inside a button label. */
.ow-countbadge {
  align-items: center;
  background: var(--ow-color-brand);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-surface);
  display: inline-flex;
  font-size: var(--ow-type-micro);
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  height: 18px;
  justify-content: center;
  margin-left: 6px;
  min-width: 18px;
  padding: 0 var(--ow-space-1);
}

/* Expanded-row detail: cards of definition lists plus an image strip. */
.ow-detailgrid { display: grid; gap: var(--ow-space-4); grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); }
.ow-detailcard {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: 14px var(--ow-space-4);
}
.ow-detailcard__figure { align-items: baseline; display: flex; gap: 7px; }
.ow-detailcard__figure b { color: var(--ow-color-text); font-size: 24px; font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: var(--ow-tracking-tight); }
.ow-detailcard__figure span { color: var(--ow-color-muted); font-size: var(--ow-type-label); font-weight: 700; }
.ow-deflist { display: grid; gap: 7px 14px; grid-template-columns: auto 1fr; margin: 0; }
.ow-deflist dt { color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: 0.05em; text-align: left; text-transform: uppercase; }
.ow-deflist dd { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 600; margin: 0; overflow-wrap: anywhere; text-align: right; }

.ow-imgstrip { display: flex; flex-wrap: wrap; gap: 14px; }
.ow-imgcard { display: flex; flex-direction: column; gap: 6px; margin: 0; width: 150px; }
.ow-imgframe {
  align-items: center;
  background: var(--ow-color-brand-tint);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-md);
  display: flex;
  flex-direction: column;
  gap: 5px;
  height: 96px;
  justify-content: center;
  overflow: hidden;
}
.ow-imgframe i { color: var(--ow-color-brand); font-size: var(--ow-type-data); }
.ow-imgframe span { color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 600; }
.ow-imgframe--broken { background: var(--ow-color-surface-alt); border-color: var(--ow-color-border); }
.ow-imgframe--broken i { color: var(--ow-color-faint); }
.ow-imgframe--broken span { color: var(--ow-color-muted); }
.ow-imgcard figcaption { color: var(--ow-color-text); font-size: var(--ow-type-label); font-weight: 700; }
.ow-imgmeta { color: var(--ow-color-faint); font-size: var(--ow-type-micro); line-height: 15px; overflow-wrap: anywhere; }
@media (max-width: 767px) {
  .ow-imgcard { width: 140px; }
  .ow-imgframe { height: 92px; }
}

/* Scrolling card list (mobile log views) inside a fixed-height surface. */
.ow-cardscroll {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--ow-space-3);
  min-height: 0;
  overflow-y: auto;
  padding: var(--ow-space-3);
}
.ow-logcard {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-mobile-card);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3);
}
.ow-logcard.is-expanded { border-color: var(--ow-color-brand-tint-strong); }
.ow-loadmore { color: var(--ow-color-muted); font-size: var(--ow-type-label); font-weight: 600; padding: var(--ow-space-3); text-align: center; }
.ow-loadmore i { margin-right: var(--ow-space-2); }
.ow-loadmore--end { color: var(--ow-color-faint); font-weight: 400; }
/* What automatic loading watches for, at the end of the records it belongs to.
 * It needs real area to be reported as crossing the scroll container's edge: a
 * zero-size inline element has an empty box and is unreliable as an
 * IntersectionObserver target. One pixel, no margin, nothing to see. */
.ow-scroll-sentinel { display: block; height: 1px; }

/* A batch that did not arrive. It says so and keeps the control that asks
 * again, rather than hiding the spinner and leaving the list looking finished. */
.ow-loadmore--error { color: var(--ow-status-fail-fg); font-weight: 600; }

/* ── 17. Weighing Activities: tabs, quick filters, weigh cells, sections ── */

.ow-tabs {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  display: inline-flex;
  gap: var(--ow-space-1);
  padding: var(--ow-space-1);
}
.ow-tab {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: inline-flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-2);
  height: var(--ow-control-h);
  padding: 0 var(--ow-space-3);
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease),
              box-shadow var(--ow-dur-hover) var(--ow-ease);
  white-space: nowrap;
}
.ow-tab i { color: var(--ow-color-faint); font-size: var(--ow-type-label); }
.ow-tab.is-active { background: var(--ow-color-surface); box-shadow: var(--ow-shadow-contact); color: var(--ow-color-text); font-weight: 800; }
.ow-tab.is-active i { color: var(--ow-color-brand); }
.ow-tab__count {
  align-items: center;
  background: var(--ow-color-border-soft);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-muted);
  display: inline-flex;
  font-size: var(--ow-type-micro);
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  height: 20px;
  padding: 0 var(--ow-space-2);
}
.ow-tab.is-active .ow-tab__count { background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); }
@media (max-width: 767px) { .ow-tab { height: var(--ow-tap-min); } }

.ow-quickfilters { display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); overflow: hidden; }
.ow-quickfilter {
  border-left: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  min-width: 0;
  padding: var(--ow-space-3);
}
.ow-quickfilter:first-child { border-left-color: transparent; }
.ow-quickfilter__title { align-items: center; display: flex; gap: var(--ow-space-2); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-quickfilter__title i { font-size: var(--ow-type-micro); }
.ow-quickfilter__title.is-open i { color: var(--ow-status-warning-fg); }
.ow-quickfilter__title.is-closed i { color: var(--ow-status-pass-fg); }
.ow-quickfilter__title.is-all i { color: var(--ow-color-brand); }
.ow-quickfilter__title.is-review i { color: var(--ow-status-fail-fg); }
.ow-minipills { display: flex; flex-wrap: wrap; gap: var(--ow-space-1); }
.ow-minipill {
  align-items: center;
  background: var(--ow-color-brand-tint);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: inline-flex;
  flex: 0 0 auto;
  font-family: inherit;
  font-size: var(--ow-type-micro);
  font-weight: 700;
  gap: var(--ow-space-2);
  height: 26px;
  min-width: max-content;
  padding: 0 var(--ow-space-2);
  transition: background var(--ow-dur-hover) var(--ow-ease), border-color var(--ow-dur-hover) var(--ow-ease),
              color var(--ow-dur-hover) var(--ow-ease);
  white-space: nowrap;
}
.ow-minipill:hover { border-color: var(--ow-color-brand); color: var(--ow-color-text); }
.ow-minipill.is-active { background: var(--ow-color-brand); border-color: var(--ow-color-brand); color: var(--ow-color-surface); }
.ow-minipill strong { font-size: var(--ow-type-label); font-variant-numeric: tabular-nums; font-weight: 800; }

/* Weigh / net table cells: the figure is the fact, the time sits under it. */
.ow-weighcell { display: flex; flex-direction: column; gap: 2px; }
.ow-weighcell__row { align-items: baseline; display: inline-flex; gap: var(--ow-space-1); white-space: nowrap; }
.ow-weighcell__value { color: var(--ow-color-text); font-size: var(--ow-type-card-title); font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: var(--ow-tracking-tight); }
.ow-weighcell__unit { color: var(--ow-color-muted); font-size: var(--ow-type-micro); font-weight: 700; }
.ow-weighcell__time { color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-variant-numeric: tabular-nums; white-space: nowrap; }
.ow-weighcell__dir { align-items: center; color: var(--ow-color-muted); display: inline-flex; font-size: var(--ow-type-micro); font-weight: 700; gap: 5px; }
.ow-weighcell__dir i { color: var(--ow-color-faint); font-size: var(--ow-type-nano); }
.ow-netcell { align-items: flex-end; display: flex; flex-direction: column; gap: 2px; text-align: right; white-space: nowrap; }
.ow-netcell__row { align-items: baseline; display: inline-flex; gap: var(--ow-space-1); }
.ow-netcell__value { color: var(--ow-color-text); font-size: 18px; font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: var(--ow-tracking-tight); }
.ow-awaiting { color: var(--ow-color-faint); font-size: var(--ow-type-meta); }

/* State cell: badges act as the trigger for the meaning popover. */
.ow-statebtn {
  align-items: center;
  background: transparent;
  border: 0;
  cursor: pointer;
  display: flex;
  flex-wrap: wrap;
  font: inherit;
  gap: 5px;
  padding: 0;
  text-align: left;
}
.ow-statebtn > i { color: var(--ow-color-faint); font-size: var(--ow-type-micro); }
.ow-statebtn[aria-expanded="true"] > i { color: var(--ow-color-brand); }
.ow-popover {
  animation: ow-in 0.16s var(--ow-ease);
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-menu);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  max-width: calc(100vw - 24px);
  padding: var(--ow-space-3) 14px;
  position: fixed;
  white-space: normal;
  width: 280px;
  z-index: 60;
}
.ow-popover__sec { display: flex; flex-direction: column; gap: 3px; }
.ow-popover__title { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 700; }
.ow-popover__body { color: var(--ow-color-muted); font-size: var(--ow-type-label); line-height: 17px; text-wrap: pretty; }

/* Expanded detail sections (transaction card / activity detail panel). */
.ow-section {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: 14px var(--ow-space-4);
}
.ow-section__head { align-items: center; display: flex; gap: var(--ow-space-3); justify-content: space-between; }
.ow-section__head h4 {
  color: var(--ow-color-muted);
  font-size: var(--ow-type-label);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-label);
  margin: 0;
  text-transform: uppercase;
}
.ow-section__note { color: var(--ow-color-muted); font-size: var(--ow-type-meta); margin: 0; }
.ow-pillrow { display: flex; flex-wrap: wrap; gap: 7px; }
.ow-subgrid { display: grid; gap: 14px; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }
.ow-subcard {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: 10px;
  display: flex;
  flex-direction: column;
  gap: 9px;
  padding: var(--ow-space-3) 13px;
}
.ow-subcard__head { align-items: center; color: var(--ow-color-text); display: inline-flex; font-size: var(--ow-type-meta); font-weight: 800; gap: var(--ow-space-2); }
.ow-subcard__head i { color: var(--ow-color-brand); font-size: var(--ow-type-label); }
/* Step / progress states on a subcard, and the system's one dim treatment for
 * a row that is present but not in play (archived, not held, not yet reachable).
 * Defined once here so a badge is never the only thing carrying hierarchy. */
.ow-subcard.is-current { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand-tint-strong); }
.ow-subcard.is-attention { border-color: var(--ow-status-fail-fg); }
.ow-subcard.is-attention .ow-subcard__head, .ow-subcard.is-attention .ow-subcard__head i { color: var(--ow-status-fail-fg); }
.ow-subcard.is-dim, .ow-option.is-dim { opacity: 0.6; }
.ow-subcard.is-dim .ow-subcard__head i { color: var(--ow-color-faint); }
.ow-netbox {
  background: var(--ow-color-brand-tint);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: 10px;
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: var(--ow-space-3) 13px;
}
.ow-netbox__head {
  align-items: center;
  color: var(--ow-color-brand-deep);
  display: inline-flex;
  font-size: var(--ow-type-label);
  font-weight: 800;
  gap: var(--ow-space-2);
  letter-spacing: var(--ow-tracking-label);
  text-transform: uppercase;
}
.ow-netcalc { display: grid; gap: var(--ow-space-1) var(--ow-space-3); grid-template-columns: 1fr auto; margin: 0; }
.ow-netcalc dt { color: var(--ow-color-muted); font-size: var(--ow-type-label); font-weight: 600; }
.ow-netcalc dd { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-variant-numeric: tabular-nums; font-weight: 700; margin: 0; text-align: right; }
.ow-netbox__rule { background: var(--ow-color-brand-tint-strong); height: 1px; }
.ow-netbox__total { align-items: baseline; display: flex; gap: var(--ow-space-2); justify-content: space-between; }
.ow-netbox__total b { color: var(--ow-color-text); font-size: 27px; font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: var(--ow-tracking-tight); }
.ow-netbox__total span { color: var(--ow-color-brand-deep); font-size: var(--ow-type-label); font-weight: 700; }
.ow-tiprow { border-top: 1px solid var(--ow-color-border-soft); display: flex; flex-direction: column; gap: var(--ow-space-2); padding-top: var(--ow-space-2); }
.ow-metagrid { display: grid; gap: var(--ow-space-2) 18px; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); margin: 0; }
.ow-metagrid dt { color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: 0.05em; text-transform: uppercase; }
.ow-metagrid dd { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 600; margin: 0 0 var(--ow-space-1); overflow-wrap: anywhere; }

/* Gallery disclosure button, with its own count badge. */
.ow-imgtoggle {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  cursor: pointer;
  display: inline-flex;
  font: inherit;
  font-size: var(--ow-type-label);
  font-weight: 700;
  gap: var(--ow-space-2);
  height: 32px;
  padding: 0 var(--ow-space-3);
}
.ow-imgtoggle.is-open { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }
.ow-imgtoggle i { font-size: var(--ow-type-label); }
.ow-spin { animation: ow-spin 0.9s linear infinite; display: inline-block; }
@keyframes ow-spin { to { transform: rotate(360deg); } }
.ow-fade-in { animation: ow-in var(--ow-dur-state) var(--ow-ease-out); }

/* ── 18. Style reference: document shell and specimens ─────────────────── */
/* Used by OpenWeigh Waste, the live token/component reference. A specimen's
 * value is carried by a class, not an inline style, so the page it documents
 * is also the cleanest example of the rules. */

.ow-doc { display: flex; flex-direction: column; gap: var(--ow-space-9); margin: 0 auto; max-width: var(--ow-doc-max); padding: var(--ow-space-7) var(--ow-space-7) var(--ow-space-8); }
@media (max-width: 767px) { .ow-doc { padding: var(--ow-space-5) var(--ow-gutter-page-mobile) var(--ow-space-7); } }
.ow-doc__head { border-bottom: 1px solid var(--ow-color-border); display: flex; flex-direction: column; gap: var(--ow-space-2); padding-bottom: var(--ow-space-6); }
.ow-doc__title { color: var(--ow-color-heading); font-size: var(--ow-type-doc-title); font-weight: var(--ow-type-page-title-weight); letter-spacing: var(--ow-tracking-tighter); margin: 0; }
.ow-doc__foot { border-top: 1px solid var(--ow-color-border); color: var(--ow-color-muted); font-size: var(--ow-type-label); padding-top: var(--ow-space-5); }

.ow-specsection { display: flex; flex-direction: column; gap: var(--ow-space-5); }
.ow-specgroup { display: flex; flex-direction: column; gap: var(--ow-space-3); }
.ow-specgrid { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); }
.ow-specgrid--tiles { gap: var(--ow-space-4); grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.ow-specgrid--wide { gap: var(--ow-space-4); grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
.ow-specgrid--cards { gap: var(--ow-space-4); grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); }
.ow-specgrid--cards-wide { gap: var(--ow-space-4); grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); }

/* Colour swatch: a 56px chip over its name, token and value. */
.ow-swatch { background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); overflow: hidden; }
.ow-swatch__chip { border-bottom: 1px solid var(--ow-color-border-soft); height: var(--ow-control-h-touch); }
.ow-swatch__meta { display: flex; flex-direction: column; padding: var(--ow-space-2) var(--ow-space-3); }
.ow-specname { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 700; }
.ow-specflex { flex: 1 1 220px; min-width: 0; }
.ow-chip--page-bg { background: var(--ow-color-page-bg); }
.ow-chip--surface { background: var(--ow-color-surface); }
.ow-chip--surface-alt { background: var(--ow-color-surface-alt); }
.ow-chip--border { background: var(--ow-color-border); }
.ow-chip--border-soft { background: var(--ow-color-border-soft); }
.ow-chip--text { background: var(--ow-color-text); }
.ow-chip--muted { background: var(--ow-color-muted); }
.ow-chip--faint { background: var(--ow-color-faint); }
.ow-chip--link { background: var(--ow-color-link); }
.ow-chip--nav { background: var(--ow-color-nav); }
.ow-chip--nav-dark { background: var(--ow-color-nav-dark); }
.ow-chip--selected-row { background: var(--ow-color-selected-row); }
.ow-chip--brand { background: var(--ow-color-brand); }
.ow-chip--brand-strong { background: var(--ow-color-brand-strong); }
.ow-chip--brand-deep { background: var(--ow-color-brand-deep); }
.ow-chip--brand-tint { background: var(--ow-color-brand-tint); }
.ow-chip--focus-ring { background: var(--ow-focus-ring); }
.ow-chip--success { background: var(--ow-color-success); }
.ow-chip--warning { background: var(--ow-color-warning); }
.ow-chip--danger { background: var(--ow-color-danger); }
.ow-chip--info { background: var(--ow-color-info); }
.ow-chip--ws-blocked { background: var(--ow-wsstatus-blocked); }
.ow-chip--ws-waiting { background: var(--ow-wsstatus-waiting); }
.ow-chip--ws-active { background: var(--ow-wsstatus-active); }
.ow-chip--ws-done { background: var(--ow-wsstatus-done); }
.ow-chip--ws-neutral { background: var(--ow-wsstatus-neutral); }
.ow-chip--ws-parts { background: var(--ow-wsstatus-parts); }

/* Specimen rows: type roles, spacing steps, usage map. */
.ow-speclist { padding: var(--ow-space-2) var(--ow-space-6); }
.ow-speclist--pad { padding: var(--ow-space-5) var(--ow-space-6); }
.ow-specrow { align-items: baseline; border-bottom: 1px solid var(--ow-color-border-soft); display: grid; gap: var(--ow-space-6); grid-template-columns: 220px minmax(0, 1fr) 220px; padding: var(--ow-space-3) 0; }
.ow-specrow:last-child { border-bottom: 0; }
.ow-specrow__spec { text-align: right; }
.ow-specrow--space { align-items: center; border-bottom: 0; gap: var(--ow-space-4); grid-template-columns: 180px minmax(0, 1fr) 120px; padding: var(--ow-space-1) 0; }
.ow-specrow--usage { align-items: baseline; gap: var(--ow-space-4); grid-template-columns: 220px minmax(0, 1fr); padding: var(--ow-space-3) var(--ow-space-5); }
.ow-specrow--head { background: var(--ow-color-surface-alt); border-bottom: 1px solid var(--ow-color-border); padding: var(--ow-space-2) var(--ow-space-5); }
@media (max-width: 767px) {
  .ow-specrow, .ow-specrow--space, .ow-specrow--usage, .ow-specrow--head { gap: var(--ow-space-2); grid-template-columns: minmax(0, 1fr); }
  .ow-specrow__spec { text-align: left; }
}
/* Two type roles the globals layer has no class for, only tokens. */
.ow-specsample--meta { font-size: var(--ow-type-meta); font-weight: var(--ow-font-weight-medium); }
.ow-specsample--micro { font-size: var(--ow-type-micro); font-weight: var(--ow-font-weight-semibold); letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-specsample--touch { font-size: var(--ow-type-touch-input); font-variant-numeric: tabular-nums; font-weight: var(--ow-type-touch-input-weight); }

.ow-specbar { background: var(--ow-color-brand-tint); border-left: 3px solid var(--ow-color-brand); height: 20px; }
.ow-specbar--1 { width: var(--ow-space-1); }
.ow-specbar--2 { width: var(--ow-space-2); }
.ow-specbar--3 { width: var(--ow-space-3); }
.ow-specbar--4 { width: var(--ow-space-4); }
.ow-specbar--5 { width: var(--ow-space-5); }
.ow-specbar--6 { width: var(--ow-space-6); }
.ow-specbar--7 { width: var(--ow-space-7); }
.ow-specbar--8 { width: var(--ow-space-8); }

.ow-spectile { background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); display: flex; flex-direction: column; gap: var(--ow-space-1); padding: var(--ow-space-4); text-align: center; }
.ow-specradius { background: var(--ow-color-brand-tint); border: 1px solid var(--ow-color-brand); height: 64px; margin: var(--ow-space-1) auto var(--ow-space-3); width: 64px; }
.ow-specradius--sm { border-radius: var(--ow-radius-sm); }
.ow-specradius--md { border-radius: var(--ow-radius-md); }
.ow-specradius--card { border-radius: var(--ow-radius-card); }
.ow-specradius--lg { border-radius: var(--ow-radius-lg); }
.ow-specradius--xl { border-radius: var(--ow-radius-xl); }
.ow-specradius--2xl { border-radius: var(--ow-radius-2xl); }
.ow-specradius--pill { border-radius: var(--ow-radius-pill); }

/* Shadow specimens sit on the page tint so the elevation reads. */
.ow-specshadow { background: var(--ow-color-page-bg); border-radius: var(--ow-radius-lg); padding: var(--ow-space-5) var(--ow-space-4); }
.ow-specshadow__box { background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); display: flex; flex-direction: column; padding: var(--ow-space-5); text-align: center; }
.ow-specshadow__box--card { box-shadow: var(--ow-shadow-card); }
.ow-specshadow__box--table { box-shadow: var(--ow-shadow-table); }
.ow-specshadow__box--raise { box-shadow: var(--ow-shadow-raise); }
.ow-specshadow__box--menu { box-shadow: var(--ow-shadow-menu); }
.ow-specshadow__box--modal { box-shadow: var(--ow-shadow-modal); }
.ow-specshadow__box--brand { box-shadow: var(--ow-shadow-brand); }

.ow-specicon { align-items: center; background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); display: flex; gap: var(--ow-space-3); padding: var(--ow-space-3); }
/* A results surface inside a flowing document: fixed height so the table
 * scrolls internally and loads the next page on reach, as it does in an app. */
.ow-specresults { height: 440px; }
.ow-specrule { background: var(--ow-brand-rule); border-radius: 2px; height: var(--ow-brand-rule-height); }

/* ── 19. Artboard canvas: mock portal frames (Hardware Devices) ─────────── */
/* A review canvas of the same screen at three breakpoints. Everything that
 * varies by breakpoint is a .ow-frame--* rule, never a per-frame inline value. */

.ow-canvas { background: var(--ow-canvas-bg); display: flex; flex-direction: column; gap: var(--ow-space-10); min-width: min-content; padding: var(--ow-space-8) var(--ow-space-9) calc(var(--ow-space-8) * 2); }
.ow-canvas__intro { display: flex; flex-direction: column; gap: var(--ow-space-3); max-width: var(--ow-canvas-prose); }
.ow-canvas__title { color: var(--ow-color-heading); font-size: var(--ow-type-canvas-title); font-weight: var(--ow-type-page-title-weight); letter-spacing: var(--ow-tracking-tighter); margin: 0; }
.ow-canvas__prose { color: var(--ow-color-text-soft); font-size: var(--ow-type-body); line-height: var(--ow-line-height); margin: 0; text-wrap: pretty; }
.ow-canvas__prose--meta { font-size: var(--ow-type-meta); }
.ow-canvas__prose strong { color: var(--ow-color-text); }
.ow-canvas__section { display: flex; flex-direction: column; gap: var(--ow-space-5); }
.ow-canvas__brief { display: flex; flex-direction: column; gap: var(--ow-space-2); max-width: var(--ow-canvas-prose-narrow); }
.ow-canvas__n { align-items: center; background: var(--ow-color-text); border-radius: var(--ow-radius-md); color: var(--ow-color-surface); display: inline-flex; flex: none; font-size: var(--ow-type-label); font-variant-numeric: tabular-nums; font-weight: 800; height: 26px; justify-content: center; min-width: 26px; padding: 0 var(--ow-space-2); }
.ow-canvas__heading { color: var(--ow-color-heading); font-size: var(--ow-type-section-title); font-weight: 800; letter-spacing: var(--ow-tracking-tight); margin: 0; }
.ow-canvas__row { align-items: flex-start; display: flex; gap: var(--ow-frame-gap); }
.ow-canvas__slot { display: flex; flex: none; flex-direction: column; gap: var(--ow-space-3); }
.ow-canvas__bp { color: var(--ow-color-text); font-size: var(--ow-type-label); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-canvas__legend { align-items: center; background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-pill); color: var(--ow-color-text-soft); display: inline-flex; font-size: var(--ow-type-label); font-weight: 700; gap: var(--ow-space-2); height: 28px; padding: 0 var(--ow-space-3); }
.ow-canvas__legend i { color: var(--ow-color-brand); font-size: var(--ow-type-micro); }

.ow-frame {
  background: var(--ow-color-page-bg);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-card);
  box-shadow: var(--ow-shadow-raise);
  display: flex;
  flex: none;
  overflow: hidden;
  position: relative;
}
.ow-frame--desktop { height: var(--ow-bp-desktop-h); width: var(--ow-bp-desktop-w); }
.ow-frame--tablet { height: var(--ow-bp-tablet-h); width: var(--ow-bp-tablet-w); }
.ow-frame--mobile { height: var(--ow-bp-mobile-h); width: var(--ow-bp-mobile-w); }

/* Mock shell rail */
.ow-frame__nav { background: var(--ow-color-surface); border-right: 1px solid var(--ow-color-border); display: flex; flex: none; flex-direction: column; width: var(--ow-frame-sidebar); }
.ow-frame--tablet .ow-frame__nav { width: var(--ow-frame-sidebar-collapsed); }
.ow-frame__navrow { align-items: center; display: flex; flex: none; min-height: var(--ow-control-h-touch); padding: var(--ow-space-3); }
.ow-frame__navrow--site { align-items: stretch; min-height: 0; padding: 0 var(--ow-space-3) var(--ow-space-3); }
.ow-frame--tablet .ow-frame__navrow { justify-content: center; }
.ow-frame__logo { display: block; height: auto; max-width: 160px; width: 100%; }
.ow-frame__mark { align-items: center; background: var(--ow-color-brand); border-radius: var(--ow-radius-lg); color: var(--ow-color-surface); display: inline-flex; flex: none; font-size: var(--ow-type-body); font-weight: 800; height: var(--ow-control-h-lg); justify-content: center; letter-spacing: var(--ow-tracking-tighter); width: var(--ow-icon-tile-sm); }
.ow-frame__site { align-items: center; background: var(--ow-color-page-bg); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); display: flex; gap: var(--ow-space-3); min-height: var(--ow-row-height); padding: 0 var(--ow-space-2); width: 100%; }
.ow-frame__site--icon { color: var(--ow-color-brand); font-size: var(--ow-type-body); justify-content: center; min-height: var(--ow-tap-min); width: var(--ow-tap-min); }
.ow-frame__nav-groups { display: flex; flex: 1; flex-direction: column; gap: var(--ow-space-3); overflow: hidden; padding: 0 var(--ow-space-3); }
.ow-frame__nav-group { display: flex; flex-direction: column; gap: var(--ow-space-1); }
.ow-frame__navlegend { padding: 0 var(--ow-space-2) var(--ow-space-1); }
.ow-frame__raillegend { padding: var(--ow-space-1) var(--ow-space-2); }
.ow-frame__navitem { align-items: center; border-radius: var(--ow-radius-md); color: var(--ow-color-text-soft); display: flex; font-size: var(--ow-type-meta); font-weight: 600; gap: var(--ow-space-3); min-height: var(--ow-control-h-lg); padding: 0 var(--ow-space-2); }
.ow-frame__navitem i { flex: none; font-size: var(--ow-type-body); text-align: center; width: 18px; }
.ow-frame__navitem.is-active { background: var(--ow-color-brand); box-shadow: var(--ow-shadow-brand); color: var(--ow-color-surface); font-weight: 700; }
.ow-frame--tablet .ow-frame__navitem { justify-content: center; }
.ow-frame__user { align-items: center; border-top: 1px solid var(--ow-color-border); display: flex; flex: none; gap: var(--ow-space-3); padding: var(--ow-space-2) var(--ow-space-3); }
.ow-frame--tablet .ow-frame__user { justify-content: center; }
.ow-frame__avatar { align-items: center; background: var(--ow-color-brand); border-radius: 50%; color: var(--ow-color-surface); display: inline-flex; flex: none; font-size: var(--ow-type-label); font-weight: 800; height: var(--ow-control-h); justify-content: center; width: var(--ow-icon-tile-xs); }

/* Mock header and content column */
.ow-frame__main { display: flex; flex: 1; flex-direction: column; min-width: 0; }
.ow-frame__header { align-items: center; backdrop-filter: var(--ow-blur-nav); background: var(--ow-glass); border-bottom: 1px solid var(--ow-color-border); display: flex; flex: none; gap: var(--ow-space-3); height: var(--ow-navbar-height); padding: 0 var(--ow-gutter-page); }
.ow-frame--mobile .ow-frame__header { height: var(--ow-nav-height); padding: 0 var(--ow-gutter-page-mobile); }
.ow-frame__title { color: var(--ow-color-text); display: block; font-size: var(--ow-type-frame-title); font-weight: 800; letter-spacing: var(--ow-tracking-tighter); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-frame--mobile .ow-frame__title { font-size: var(--ow-type-card-title); }
.ow-frame__body { flex: 1; min-height: 0; overflow: hidden; padding: var(--ow-gutter-page); }
.ow-frame--mobile .ow-frame__body { padding: var(--ow-gutter-page-mobile); }
.ow-frame__shell { align-items: start; display: grid; gap: var(--ow-space-4); grid-template-columns: var(--ow-frame-rail) minmax(0, 1fr); }
.ow-frame--mobile .ow-frame__shell { gap: var(--ow-space-3); grid-template-columns: minmax(0, 1fr); }
.ow-frame__col { display: flex; flex-direction: column; gap: var(--ow-space-3); min-width: 0; }
/* Simulated scroll: the column is pulled up so a lower surface is in frame. */
.ow-frame__col--scroll-installer { margin-top: calc(var(--ow-frame-scroll-installer) * -1); }
.ow-frame__col--scroll-fact { margin-top: calc(var(--ow-frame-scroll-fact) * -1); }
.ow-frame__col--scroll-nudge { margin-top: calc(var(--ow-frame-scroll-nudge) * -1); }
.ow-frame__crumb { align-items: center; color: var(--ow-color-faint); display: inline-flex; font-size: var(--ow-type-label); font-weight: 700; gap: var(--ow-space-2); }
.ow-frame__pagetitle { color: var(--ow-color-text); font-size: var(--ow-type-frame-page-title); font-weight: 800; letter-spacing: var(--ow-tracking-tighter); }
.ow-frame--mobile .ow-frame__pagetitle { font-size: var(--ow-type-section-title); }

/* Settings rail and its mobile pill row */
.ow-frame__rail { background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-card); box-shadow: var(--ow-shadow-table); display: flex; flex-direction: column; gap: var(--ow-space-3); padding: var(--ow-space-2); }
.ow-railitem { align-items: center; border-radius: var(--ow-radius-md); color: var(--ow-color-text-soft); display: flex; font-size: var(--ow-type-meta); font-weight: 600; gap: var(--ow-space-3); min-height: var(--ow-control-h-lg); padding: 0 var(--ow-space-2); }
.ow-railitem i { color: var(--ow-color-faint); flex: none; font-size: var(--ow-type-meta); width: 16px; }
.ow-railitem.is-active { background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); font-weight: 700; }
.ow-railitem.is-active i { color: var(--ow-color-brand); }
.ow-railitem__badge { background: var(--ow-color-border-soft); border-radius: var(--ow-radius-pill); color: var(--ow-color-text-soft); font-size: var(--ow-type-micro); font-weight: 800; padding: 1px var(--ow-space-2); }
.ow-railitem.is-active .ow-railitem__badge { background: var(--ow-color-brand); color: var(--ow-color-surface); }
.ow-railpills { display: flex; gap: var(--ow-space-2); overflow: hidden; padding: var(--ow-space-1) 0; }
.ow-railpill { align-items: center; background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-pill); color: var(--ow-color-text-soft); display: inline-flex; flex: none; font-size: var(--ow-type-meta); font-weight: 700; gap: var(--ow-space-2); height: var(--ow-control-h-lg); padding: 0 var(--ow-space-3); white-space: nowrap; }
.ow-railpill i { font-size: var(--ow-type-label); }
.ow-railpill.is-active { background: var(--ow-color-selected-bg); border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }

/* Form bands inside a device surface */
.ow-band { align-items: start; border-bottom: 1px solid var(--ow-color-border-soft); display: grid; gap: var(--ow-space-3) var(--ow-space-6); grid-template-columns: var(--ow-frame-band-label) minmax(0, 1fr); padding: var(--ow-space-4); }
.ow-frame--tablet .ow-band, .ow-frame--mobile .ow-band { grid-template-columns: minmax(0, 1fr); }
.ow-band__head { align-items: flex-start; display: flex; gap: var(--ow-space-3); min-width: 0; }
.ow-band__title { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 800; letter-spacing: var(--ow-tracking-wide); text-transform: uppercase; }
.ow-band__hint { color: var(--ow-color-faint); font-size: var(--ow-type-label); font-weight: 600; text-wrap: pretty; }
.ow-band__body { display: flex; flex-direction: column; gap: var(--ow-space-3); min-width: 0; }
.ow-fieldgrid { display: grid; gap: var(--ow-space-4); grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-frame--tablet .ow-fieldgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ow-frame--mobile .ow-fieldgrid { grid-template-columns: minmax(0, 1fr); }

/* Device-type cards: the type is the first and most consequential choice. */
.ow-kindgrid { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-frame--tablet .ow-kindgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ow-frame--mobile .ow-kindgrid { grid-template-columns: minmax(0, 1fr); }
@media (max-width: 1199px) { .ow-kindgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 767px) { .ow-kindgrid { grid-template-columns: minmax(0, 1fr); } }
.ow-kind {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-contact);
  cursor: pointer;
  display: flex;
  flex-direction: column;
  font-family: inherit;
  gap: var(--ow-space-2);
  min-height: var(--ow-kind-min-h);
  padding: var(--ow-space-3);
  position: relative;
  text-align: left;
  transition: background var(--ow-dur-hover) var(--ow-ease), border-color var(--ow-dur-hover) var(--ow-ease);
}
.ow-frame--mobile .ow-kind { min-height: var(--ow-kind-min-h-touch); }
.ow-kind:hover { border-color: var(--ow-color-brand); }
.ow-kind.is-selected { background: var(--ow-color-selected-bg); border-color: var(--ow-color-brand); box-shadow: var(--ow-shadow-brand-soft); }
.ow-kind__icon { align-items: center; background: var(--ow-color-border-soft); border-radius: var(--ow-radius-md); color: var(--ow-color-text-soft); display: inline-flex; flex: none; font-size: var(--ow-type-body); height: var(--ow-control-h); justify-content: center; width: var(--ow-icon-tile-xs); }
.ow-kind.is-selected .ow-kind__icon { background: var(--ow-color-brand-tint-strong); color: var(--ow-color-brand); }
.ow-kind__label { color: var(--ow-color-text); font-size: var(--ow-type-body); font-weight: 700; }
.ow-kind__body { color: var(--ow-color-text-soft); font-size: var(--ow-type-label); }
.ow-kind__cred { align-items: center; color: var(--ow-color-text-soft); display: inline-flex; font-size: var(--ow-type-micro); font-weight: 800; gap: var(--ow-space-2); letter-spacing: var(--ow-tracking-wide); margin-top: auto; }
.ow-kind__cred i { font-size: var(--ow-type-micro); }
.ow-kind.is-selected .ow-kind__cred { color: var(--ow-color-brand-deep); }
.ow-kind__cred--none { color: var(--ow-color-faint); }
.ow-kind.is-selected .ow-kind__cred--none { color: var(--ow-color-faint); }
.ow-kind__tick { align-items: center; background: var(--ow-color-brand); border-radius: 50%; box-shadow: var(--ow-shadow-brand); color: var(--ow-color-surface); display: inline-flex; font-size: var(--ow-type-micro); height: var(--ow-space-6); justify-content: center; position: absolute; right: calc(var(--ow-space-2) * -1); top: calc(var(--ow-space-2) * -1); width: var(--ow-space-6); }

/* Choice list: radio or multi-select, one visual unit either way. */
.ow-choicegrid { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ow-choicegrid--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-frame--tablet .ow-choicegrid--3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.ow-frame--mobile .ow-choicegrid, .ow-frame--mobile .ow-choicegrid--3 { grid-template-columns: minmax(0, 1fr); }
/* Works as a label or as a button; buttons need the UA centring undone. */
.ow-choice { align-items: flex-start; background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); display: flex; font: inherit; gap: var(--ow-space-3); min-height: var(--ow-choice-min-h); padding: var(--ow-space-3); text-align: left; width: 100%; }
button.ow-choice { cursor: pointer; }
.ow-frame--mobile .ow-choice { min-height: var(--ow-choice-min-h-touch); }
@media (max-width: 767px) {
  .ow-choicegrid, .ow-choicegrid--3 { grid-template-columns: minmax(0, 1fr); }
  .ow-choice { min-height: var(--ow-choice-min-h-touch); }
}
.ow-choice.is-selected { background: var(--ow-color-selected-bg); border-color: var(--ow-color-brand); }
.ow-choice__mark { align-items: center; background: var(--ow-color-surface); border: 2px solid var(--ow-color-border); border-radius: 50%; color: var(--ow-color-surface); display: inline-flex; flex: none; font-size: var(--ow-type-nano); height: 18px; justify-content: center; margin-top: 2px; width: 18px; }
.ow-choice__mark--multi { border-radius: var(--ow-radius-sm); }
.ow-choice.is-selected .ow-choice__mark { background: var(--ow-color-brand); border-color: var(--ow-color-brand); box-shadow: inset 0 0 0 3px var(--ow-color-surface); }
.ow-choice.is-selected .ow-choice__mark--multi { box-shadow: none; }
.ow-choice__title { color: var(--ow-color-text); font-size: var(--ow-type-body); font-weight: 700; }
.ow-choice__body { color: var(--ow-color-text-soft); font-size: var(--ow-type-label); text-wrap: pretty; }

/* Read-only toggle specimen (the artboards never toggle it) */
.ow-toggle { background: var(--ow-color-brand); border-radius: var(--ow-radius-pill); flex: none; height: 26px; position: relative; width: var(--ow-tap-min); }
.ow-toggle::after { background: var(--ow-color-surface); border-radius: 50%; box-shadow: var(--ow-shadow-dot); content: ""; height: 20px; left: 21px; position: absolute; top: 3px; width: 20px; }
.ow-switchrow { align-items: flex-start; background: var(--ow-color-surface-alt); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); display: flex; gap: var(--ow-space-3); padding: var(--ow-space-3); }
.ow-headertoggle { align-items: center; border-left: 1px solid var(--ow-color-border-soft); display: inline-flex; gap: var(--ow-space-2); padding-left: var(--ow-space-2); }
.ow-statusline { align-items: center; color: var(--ow-color-online-fg); display: inline-flex; font-size: var(--ow-type-meta); font-weight: 700; gap: var(--ow-space-2); }
.ow-statusline::before { background: var(--ow-color-online); border-radius: 50%; content: ""; flex: none; height: 7px; width: 7px; }

/* A brand-tinted note strip: the consequence stated inline, not a banner. */
.ow-notestrip { align-items: flex-start; background: var(--ow-color-selected-bg); border: 1px solid var(--ow-color-brand-edge); border-radius: var(--ow-radius-lg); color: var(--ow-color-text-soft); display: flex; font-size: var(--ow-type-label); gap: var(--ow-space-3); padding: var(--ow-space-3); text-wrap: pretty; }
.ow-notestrip--stack { flex-direction: column; }
.ow-notestrip i { color: var(--ow-color-brand-deep); flex: none; font-size: var(--ow-type-meta); margin-top: 2px; }
.ow-notestrip__lead { color: var(--ow-color-text); font-size: var(--ow-type-body); font-weight: 800; letter-spacing: var(--ow-tracking-tight); }

/* Installer configuration panel — values a person transcribes into hardware. */
.ow-installer { display: flex; flex-direction: column; gap: var(--ow-space-3); padding: var(--ow-space-4); }
.ow-frame--mobile .ow-installer { padding: var(--ow-space-3); }
.ow-instrow { background: var(--ow-color-surface-alt); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-lg); display: flex; flex-direction: column; gap: var(--ow-space-2); padding: var(--ow-space-3); }
.ow-instrow.is-copied { background: var(--ow-color-online-bg); border-color: var(--ow-color-online-fg); }
.ow-instrow__n { align-items: center; background: var(--ow-color-text); border-radius: var(--ow-radius-md); color: var(--ow-color-surface); display: inline-flex; flex: none; font-size: var(--ow-type-label); font-variant-numeric: tabular-nums; font-weight: 800; height: var(--ow-space-6); justify-content: center; width: var(--ow-space-6); }
.ow-instrow__label { color: var(--ow-color-text); font-size: var(--ow-type-body); font-weight: 800; letter-spacing: var(--ow-tracking-tight); }
.ow-frame--mobile .ow-instrow__label { font-size: var(--ow-type-card-title); }
.ow-instrow__controls { align-items: stretch; display: flex; gap: var(--ow-space-2); }
.ow-frame--mobile .ow-instrow__controls { flex-direction: column; }
.ow-instrow__value {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  display: flex;
  flex: 1 1 auto;
  font-family: var(--ow-font-mono);
  font-size: var(--ow-type-label);
  font-weight: 600;
  letter-spacing: var(--ow-tracking-wide);
  min-height: var(--ow-tap-min);
  min-width: 0;
  overflow-wrap: anywhere;
  padding: var(--ow-space-2) var(--ow-space-3);
}
.ow-frame--mobile .ow-instrow__value { font-size: var(--ow-type-card-title); min-height: var(--ow-tap-min-touch); }
.ow-instrow__note { color: var(--ow-color-faint); font-size: var(--ow-type-label); font-weight: 600; text-wrap: pretty; }
.ow-instrow__actions { display: flex; flex: none; gap: var(--ow-space-2); }
.ow-installer__foot { align-items: flex-start; background: var(--ow-color-surface-alt); border-top: 1px solid var(--ow-color-border-soft); color: var(--ow-color-text-soft); display: flex; font-size: var(--ow-type-label); font-weight: 600; gap: var(--ow-space-3); padding: var(--ow-space-3) var(--ow-space-4); text-wrap: pretty; }
.ow-installer__foot i { color: var(--ow-color-faint); flex: none; font-size: var(--ow-type-meta); margin-top: 2px; }
.ow-frame--mobile .ow-instrow__actions > * { flex: 1 1 auto; }
.ow-copybtn {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text-soft);
  cursor: pointer;
  display: inline-flex;
  flex: none;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  gap: var(--ow-space-2);
  justify-content: center;
  min-height: var(--ow-tap-min);
  padding: 0 var(--ow-space-4);
  white-space: nowrap;
}
.ow-copybtn:hover { border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }
.ow-copybtn.is-copied { background: var(--ow-color-online-fg); border-color: var(--ow-color-online-fg); color: var(--ow-color-surface); }
.ow-copybtn--block { flex: 1 1 auto; min-height: var(--ow-row-height); width: 100%; }
.ow-copybtn--brand { background: var(--ow-color-brand); border-color: var(--ow-color-brand); color: var(--ow-color-surface); font-size: var(--ow-type-body); }
.ow-copybtn--brand:hover { color: var(--ow-color-surface); filter: brightness(0.94); }
.ow-copybtn--brand.is-copied { background: var(--ow-color-online-fg); border-color: var(--ow-color-online-fg); }
.ow-keyvalue { display: flex; font-size: var(--ow-type-frame-title); font-weight: 700; line-height: var(--ow-line-height); min-height: 58px; }
.ow-frame--mobile .ow-keyvalue { font-size: var(--ow-type-card-title); min-height: 76px; }

/* Plain fact and destructive-zone rows */
.ow-factrow { align-items: flex-start; display: flex; gap: var(--ow-space-3); padding: var(--ow-space-4); }
.ow-dangerrow { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-3); padding: var(--ow-space-4); }
.ow-btn--danger-outline { background: var(--ow-color-surface); border-color: var(--ow-color-danger-edge); color: var(--ow-color-danger-solid); }
.ow-btn--danger-outline:hover { background: var(--ow-status-fail-bg); border-color: var(--ow-color-danger); color: var(--ow-color-danger-solid); filter: none; }
.ow-btn--danger-solid { background: var(--ow-color-danger-solid); border-color: var(--ow-color-danger-solid); }
.ow-factgrid { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-frame--mobile .ow-factgrid { grid-template-columns: minmax(0, 1fr); }
.ow-fact { background: var(--ow-color-surface-alt); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-md); min-width: 0; padding: var(--ow-space-2) var(--ow-space-3); }
.ow-fact__value { color: var(--ow-color-text); font-size: var(--ow-type-body); font-weight: 700; overflow-wrap: anywhere; }
.ow-frame--mobile .ow-modal { width: 100%; }
.ow-frame--mobile .ow-overlay { padding: var(--ow-gutter-page-mobile); }

/* ── 20. Tooltip, toast, form sections, segments (Waste Types) ──────────── */
/* Hover/focus tooltip. Icon-only controls carry their name here as well as on
 * aria-label — the design system's rule for dense tables. */
.ow-tip { position: relative; }
.ow-tip--block { display: block; }
.ow-tip--inline { display: inline-flex; }
.ow-tip__bubble {
  background: var(--ow-color-nav-dark);
  border-radius: var(--ow-radius-sm);
  bottom: calc(100% + 7px);
  color: var(--ow-color-on-dark);
  font-size: var(--ow-type-micro);
  font-weight: 600;
  left: 50%;
  opacity: 0;
  padding: var(--ow-space-1) var(--ow-space-2);
  pointer-events: none;
  position: absolute;
  transform: translateX(-50%);
  transition: opacity var(--ow-dur-hover) var(--ow-ease);
  white-space: nowrap;
  z-index: var(--ow-z-dropdown);
}
.ow-tip__bubble::after {
  border: 5px solid transparent;
  border-top-color: var(--ow-color-nav-dark);
  content: "";
  left: 50%;
  position: absolute;
  top: 100%;
  transform: translateX(-50%);
}
.ow-tip:hover > .ow-tip__bubble, .ow-tip:focus-within > .ow-tip__bubble { opacity: 1; }
/* A TOOLTIP THAT CANNOT BE HOVERED IS NOT A TOOLTIP.
 *
 * On a touch device there is no hover, so the bubble can never be shown — but
 * being absolutely positioned it still occupies layout, and a bubble on the
 * last row action sits past the right edge and makes the whole page scroll
 * sideways by a few pixels. `display: none` rather than a visibility change,
 * because only removal takes it out of the scroll width.
 *
 * Nothing is lost: every control carrying one also carries the `aria-label`
 * the bubble repeats, which is what a screen reader was using anyway. */
@media (hover: none), (max-width: 767px) {
  .ow-tip__bubble { display: none; }
}
/* THE SAME REMOVAL, FOR THE SAME REASON, INSIDE A SCROLLING TABLE.
 *
 * The rule above takes the bubble out of layout where it can never be shown.
 * A pointer device keeps it, and on the last action column of a board that
 * scrolls horizontally the hidden bubble — 117px wide, centred on a 34px
 * button hard against the right edge — sat past the end of the scroller and
 * added ~29px to its `scrollWidth`. The board then scrolled sideways with
 * every column already visible.
 *
 * Only removal takes an absolutely positioned box out of a scroll width, so
 * this is `display`, matching the touch rule rather than inventing a second
 * mechanism. It is scoped to `.ow-data-table`: tooltips elsewhere keep their
 * fade. Shown on hover AND on `:focus-within`, so the keyboard path is
 * unchanged, and every control carrying one still carries its `aria-label`. */
.ow-data-table .ow-tip__bubble { display: none; }
/* Showing it again is scoped to exactly where a tooltip is a tooltip: the
 * inverse of the rule above this one. Without that, this pair would undo it —
 * `.ow-data-table .ow-tip:focus-within > .ow-tip__bubble` is (0,3,0) and the
 * touch rule's `.ow-tip__bubble` is (0,1,0), and a media query carries no
 * specificity. Tapping an icon button focuses it, `:focus-within` would match,
 * and the bubble a touch device can never dismiss would appear past the right
 * edge of the board. */
@media (hover: hover) and (min-width: 768px) {
  .ow-data-table .ow-tip:hover > .ow-tip__bubble,
  .ow-data-table .ow-tip:focus-within > .ow-tip__bubble { display: block; }
}
.ow-tip__bubble--below { bottom: auto; top: calc(100% + 7px); }
.ow-tip__bubble--below::after { border-bottom-color: var(--ow-color-nav-dark); border-top-color: transparent; bottom: 100%; top: auto; }
.ow-tip__bubble--start { left: 0; max-width: 260px; transform: none; white-space: normal; }
.ow-tip__bubble--start::after { left: var(--ow-space-4); }

/* Transient confirmation, top-centre. Never carries an action. */
/* TEXT ON ALWAYS-DARK CHROME IS `--ow-color-on-dark`, NEVER `--ow-color-surface`.
 *
 * `--ow-color-nav-dark` is one of the few tokens deliberately NOT redeclared
 * for dark mode: this chrome is dark in both themes by design. `--ow-color-surface`
 * IS redeclared — that is the whole point of it — so in dark mode it went from
 * white to #1a1d21 and landed on a #1d2633 background: two near-blacks, about
 * 1.05:1, and the toast simply could not be read.
 *
 * `--ow-color-on-dark` exists for exactly this and is likewise not redeclared,
 * so it stays legible in both themes (about 12:1 here). The same mistake was in
 * `.ow-selbar`, `.ow-auth__hero` and `.ow-tip__bubble`; all four now read the
 * right token. No component gains a dark-mode rule — the fix is a token, which
 * is what `doc/UI_ARCHITECTURE.md` requires. */
.ow-toast {
  align-items: center;
  animation: ow-toast-in var(--ow-dur-state) var(--ow-ease-out);
  background: var(--ow-color-nav-dark);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-raise);
  color: var(--ow-color-on-dark);
  display: flex;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  gap: var(--ow-space-2);
  left: 50%;
  padding: var(--ow-space-3) var(--ow-space-4);
  position: fixed;
  top: var(--ow-space-4);
  transform: translateX(-50%);
  z-index: 1300;
}
.ow-toast i { color: var(--ow-color-online); }
@keyframes ow-toast-in {
  from { opacity: 0; transform: translate(-50%, -8px); }
  to { opacity: 1; transform: translate(-50%, 0); }
}

/* Labelled group inside a drawer or form: brand glyph, uppercase label, rule. */
.ow-formsec { display: flex; flex-direction: column; gap: var(--ow-space-4); }
.ow-formsec__head { align-items: center; display: flex; gap: var(--ow-space-2); }
.ow-formsec__head i { color: var(--ow-color-brand); font-size: var(--ow-type-label); }
.ow-formsec__head span {
  color: var(--ow-color-muted);
  font-size: var(--ow-type-micro);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-label);
  text-transform: uppercase;
}
.ow-formsec__head::after { background: var(--ow-color-border-soft); content: ""; flex: 1 1 auto; height: 1px; }

/* Two/three-way segmented control (lifecycle, direction). */
.ow-seg {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  display: flex;
  gap: var(--ow-space-1);
  padding: var(--ow-space-1);
}
.ow-seg__btn {
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-muted);
  cursor: pointer;
  flex: 1 1 0;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  min-height: var(--ow-control-h);
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
}
.ow-seg__btn:hover { color: var(--ow-color-brand-deep); }
.ow-seg__btn.is-active { background: var(--ow-color-brand); color: var(--ow-color-surface); }

/* The same control as a form value: real radio buttons under the segment's
 * appearance, so the answer submits, works from the keyboard and survives a
 * render with no script. The input is taken out of the layout rather than
 * hidden, so focus still lands on it and the focus ring is drawn on the
 * segment the operator is actually on. */
/* It wraps rather than breaking its own words: an answer split over two lines
 * reads as two answers. Where the column is too narrow for both side by side,
 * the second drops below the first and each stays on one line. */
.ow-seg--radio { display: flex; flex-wrap: wrap; max-width: 100%; }

.ow-seg__opt {
  align-items: center;
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: inline-flex;
  flex: 1 1 auto;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  justify-content: center;
  min-height: var(--ow-control-h);
  padding: 0 var(--ow-space-4);
  position: relative;
  text-align: center;
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
  white-space: nowrap;
}

.ow-seg__opt:hover { color: var(--ow-color-brand-deep); }
.ow-seg__opt.is-active { background: var(--ow-color-brand); color: var(--ow-color-surface); }

.ow-seg__input {
  height: 100%;
  left: 0;
  margin: 0;
  opacity: 0;
  position: absolute;
  top: 0;
  width: 100%;
}

.ow-seg__input:focus-visible + .ow-seg__optlabel { box-shadow: var(--ow-focus-ring); }
.ow-seg__optlabel { border-radius: var(--ow-radius-sm); padding: 2px 4px; }

/* On a phone each answer takes the full width, so neither is the narrower of
 * the two and both are a full touch target. */
@media (max-width: 479px) {
  .ow-seg--radio { width: 100%; }
  .ow-seg__opt { flex: 1 1 100%; }
}

/* Switch row as a control: the whole row is the hit target, and its tone
 * follows the flag it sets. */
button.ow-switchrow { cursor: pointer; font-family: inherit; text-align: left; width: 100%; }
button.ow-switchrow:hover { border-color: var(--ow-color-brand); }
.ow-switchrow__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ow-switchrow__title {
  align-items: center;
  color: var(--ow-color-text);
  display: flex;
  flex-wrap: wrap;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  gap: var(--ow-space-2);
}
.ow-switchrow__note { color: var(--ow-color-faint); font-size: var(--ow-type-label); line-height: 17px; text-wrap: pretty; }
.ow-switchrow--danger.is-on { background: var(--ow-status-fail-bg); border-color: var(--ow-color-danger-edge); }
.ow-switchrow--danger.is-on .ow-switch { background: var(--ow-color-danger); }
.ow-switchrow--danger.is-on .ow-switchrow__title,
.ow-switchrow--danger.is-on .ow-switchrow__note { color: var(--ow-status-fail-fg); }
.ow-switchrow--warning.is-on { background: var(--ow-status-warning-bg); border-color: transparent; }
.ow-switchrow--warning.is-on .ow-switch { background: var(--ow-color-warning); }
.ow-switchrow--warning.is-on .ow-switchrow__title,
.ow-switchrow--warning.is-on .ow-switchrow__note { color: var(--ow-status-warning-fg); }

/* Hazard flags: the table cell cluster and the legend that explains it. */
.ow-flagcell { align-items: center; display: flex; gap: var(--ow-space-2); justify-content: center; }
.ow-flagcell__none { color: var(--ow-color-faint); font-size: var(--ow-type-label); }
.ow-flaglegend { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2) var(--ow-space-5); padding: 0 var(--ow-space-1); }
.ow-flaglegend__item { align-items: center; color: var(--ow-color-muted); display: inline-flex; font-size: var(--ow-type-label); gap: var(--ow-space-2); }

/* ── 21. Weighbridge Ticket: capture header, weighing console, lookup fields ─ */
/* Every per-breakpoint value on this screen is a rule here, never data. */

.ow-tickethead {
  backdrop-filter: var(--ow-blur-nav);
  background: var(--ow-glass);
  border-bottom: 1px solid var(--ow-color-border);
  position: sticky;
  top: 0;
  z-index: var(--ow-z-header);
}
.ow-tickethead.is-scrolled { box-shadow: var(--ow-shadow-shell); }
.ow-tickethead__bar {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-4);
  padding: var(--ow-space-3) var(--ow-gutter-page);
}
.ow-tickethead__id { flex: 1 1 260px; min-width: 0; }
.ow-tickethead__no {
  color: var(--ow-color-text);
  font-size: var(--ow-type-page-title);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-tighter);
  margin: 0;
  white-space: nowrap;
}
.ow-tickethead__no span { color: var(--ow-color-brand); }
.ow-tickethead__sub { color: var(--ow-color-faint); font-size: var(--ow-type-meta); font-weight: 600; }
@media (max-width: 767px) {
  .ow-tickethead__bar { padding: var(--ow-space-2) var(--ow-gutter-page-mobile); }
  .ow-tickethead__no { font-size: var(--ow-type-view-title); }
}

/* Segmented control, pill form — used on the header and inside the console. */
.ow-seg--pill { border-radius: var(--ow-radius-pill); }
.ow-seg--pill .ow-seg__btn {
  border-radius: var(--ow-radius-pill);
  font-size: var(--ow-type-label);
  font-weight: 800;
  gap: var(--ow-space-2);
  letter-spacing: var(--ow-tracking-label);
  padding: 0 var(--ow-space-4);
  text-transform: uppercase;
}
.ow-seg__btn { align-items: center; display: inline-flex; gap: var(--ow-space-2); justify-content: center; white-space: nowrap; }
/* The count badge is a filter-pill part; inside a seg button it needs its own
 * chrome, since the pill's spacing does not come with it. */
.ow-seg__btn .ow-filter__count {
  background: var(--ow-color-surface-alt);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-muted);
  font-size: var(--ow-type-nano);
  padding: 1px var(--ow-space-2);
}
.ow-seg__btn.is-active .ow-filter__count { background: rgba(255, 255, 255, .22); color: var(--ow-color-surface); }
.ow-seg__btn i { font-size: var(--ow-type-micro); }
.ow-seg--dark { background: var(--ow-console-surface); border-color: var(--ow-console-border); }
.ow-seg--dark .ow-seg__btn { color: var(--ow-color-muted); }
.ow-seg--dark .ow-seg__btn:hover { color: var(--ow-console-text); }
.ow-seg--dark .ow-seg__btn.is-active { background: var(--ow-color-brand); color: var(--ow-color-surface); }
@media (max-width: 767px) { .ow-seg__btn { min-height: var(--ow-tap-min); } }

/* The console: one dark band, everything inside it reads off these tokens. */
.ow-console { background: var(--ow-console-bg); }
.ow-console__body {
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  padding: var(--ow-space-4) var(--ow-gutter-page) 18px;
}
@media (max-width: 767px) { .ow-console__body { padding: var(--ow-gutter-page-mobile); } }
.ow-console__title { color: var(--ow-console-text); font-size: var(--ow-type-meta); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-console__note { color: var(--ow-console-faint); font-size: var(--ow-type-micro); font-weight: 700; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; white-space: nowrap; }
.ow-console__grid { align-items: start; display: grid; gap: var(--ow-space-3); }
.ow-console__grid--two { grid-template-columns: 536px minmax(0, 1fr); }
.ow-console__grid--one { grid-template-columns: 300px minmax(0, 1fr); }
@media (max-width: 1279px) {
  .ow-console__grid--two, .ow-console__grid--one { grid-template-columns: minmax(0, 1fr); }
}
.ow-console__col { display: flex; flex-direction: column; gap: var(--ow-space-3); min-width: 0; }
.ow-console__empty { align-items: center; display: flex; flex-direction: column; gap: var(--ow-space-2); padding: var(--ow-space-7) var(--ow-space-5); text-align: center; }
.ow-console__empty-title { color: var(--ow-console-text); font-size: var(--ow-type-body); font-weight: 700; }
.ow-console__empty-copy { color: var(--ow-console-faint); font-size: var(--ow-type-meta); font-weight: 600; max-width: 44ch; text-wrap: pretty; }
.ow-icontile--console { background: var(--ow-console-brand-tint-strong); color: var(--ow-color-brand); }

/* Console top: the bridges with the next thing to do between them */
.ow-consoletop { align-items: start; display: grid; gap: var(--ow-space-3); grid-template-columns: minmax(0, 1fr); }
.ow-consoletop--pair { grid-template-columns: minmax(260px, 1fr) minmax(0, 1.3fr); }
.ow-consoletop--between { grid-template-columns: minmax(240px, 1fr) minmax(0, 1.4fr) minmax(240px, 1fr); }
@media (max-width: 1199px) {
  .ow-consoletop--pair, .ow-consoletop--between { grid-template-columns: minmax(0, 1fr); }
}

/* The next thing this ticket needs */
.ow-ticketnext {
  align-items: center;
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: var(--ow-space-4) var(--ow-space-3);
  text-align: center;
}
.ow-ticketnext__eyebrow { color: var(--ow-console-faint); font-size: var(--ow-type-micro); font-weight: 700; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-ticketnext__title { color: var(--ow-console-text); font-size: 24px; font-weight: 800; letter-spacing: -0.02em; line-height: 1.2; text-wrap: pretty; }
.ow-ticketnext__action {
  background: var(--ow-color-brand);
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-surface);
  cursor: pointer;
  font-size: var(--ow-type-body);
  font-weight: 700;
  min-height: 48px;
  padding: 0 var(--ow-space-6);
}
.ow-ticketnext__action:hover { background: var(--ow-color-brand-deep); }
.ow-ticketnext__action[disabled] { background: var(--ow-console-surface-strong); color: var(--ow-console-faint); cursor: not-allowed; }
.ow-ticketnext__action--quiet { background: var(--ow-console-surface-strong); color: var(--ow-console-text); }
.ow-ticketnext__action--quiet:hover { background: var(--ow-console-border-strong); }
.ow-ticketnext__hint { color: var(--ow-console-faint); font-size: var(--ow-type-label); }
@media (max-width: 767px) {
  .ow-ticketnext { padding: var(--ow-space-3) 0; }
  .ow-ticketnext__title { font-size: 19px; }
  .ow-ticketnext__action { width: 100%; }
}

/* Bridge readout card */
.ow-bridge {
  background: var(--ow-console-surface-soft);
  border: 1px solid var(--ow-console-border);
  border-radius: var(--ow-radius-card);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  min-width: 0;
  padding: var(--ow-space-3);
  transition: border-color var(--ow-dur-hover) var(--ow-ease);
}
.ow-bridge.is-stable { background: var(--ow-console-surface); }
.ow-bridge.is-live { border-color: var(--ow-console-brand-edge); }
.ow-bridge__top { align-items: flex-end; display: flex; gap: var(--ow-space-3); min-width: 0; }
.ow-bridge__ident { align-items: flex-start; display: flex; flex: none; flex-direction: column; gap: var(--ow-space-1); }
.ow-bridge__name { color: var(--ow-console-muted); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; white-space: nowrap; }
.ow-bridge__status {
  align-items: center;
  background: var(--ow-console-ok-bg);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-console-ok);
  display: inline-flex;
  font-size: var(--ow-type-nano);
  font-weight: 800;
  gap: var(--ow-space-1);
  height: 20px;
  letter-spacing: var(--ow-tracking-label);
  padding: 0 var(--ow-space-2);
  text-transform: uppercase;
  white-space: nowrap;
}
.ow-bridge__status::before { background: currentColor; border-radius: 50%; content: ""; height: 5px; width: 5px; }
.ow-bridge__status.is-motion { background: var(--ow-console-brand-tint-strong); color: var(--ow-console-motion); }
.ow-bridge__status.is-motion::before { animation: ow-motion 0.9s ease-in-out infinite; }
@keyframes ow-motion { 0%, 100% { opacity: 0.45; } 50% { opacity: 1; } }
.ow-bridge__read { align-items: baseline; display: flex; gap: var(--ow-space-1); margin-left: auto; min-width: 0; }
.ow-bridge__role { color: var(--ow-console-faint); font-size: var(--ow-type-label); font-weight: 700; }
/* Console readouts only — scoped so `.ow-figure` on a light surface keeps the
   §2 primitive (inherited colour, --ow-type-data size) instead of console anthracite. */
.ow-console .ow-figure, .ow-readout .ow-figure {
  color: var(--ow-console-text);
  font-size: var(--ow-console-figure);
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  letter-spacing: var(--ow-tracking-tighter);
  line-height: 1;
  white-space: nowrap;
}
.ow-console .ow-figure.is-motion, .ow-readout .ow-figure.is-motion { color: var(--ow-color-muted); }
.ow-console .ow-figure.is-empty, .ow-readout .ow-figure.is-empty { color: var(--ow-console-faint); }
.ow-console .ow-figure--sm, .ow-readout .ow-figure--sm { font-size: 21px; line-height: 1.05; }
.ow-console .ow-figure--md, .ow-readout .ow-figure--md { font-size: 30px; line-height: 1.05; }
.ow-figure--brand { color: var(--ow-color-brand); }
.ow-figure.is-flash { animation: ow-figure-pop 0.35s ease both; }
@keyframes ow-figure-pop { 0% { transform: scale(0.86); } 60% { transform: scale(1.06); } 100% { transform: scale(1); } }
.ow-unit { color: var(--ow-console-faint); flex: none; font-size: var(--ow-type-meta); font-weight: 800; }
.ow-unit--sm { font-size: var(--ow-type-micro); }
@media (max-width: 767px) {
  .ow-console .ow-figure, .ow-readout .ow-figure { font-size: var(--ow-console-figure-sm); }
}
.ow-bridge__actions { display: flex; gap: var(--ow-space-2); }
.ow-bridge__capture {
  align-items: center;
  background: var(--ow-color-brand);
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-surface);
  cursor: pointer;
  display: inline-flex;
  flex: 1;
  font-family: inherit;
  font-size: var(--ow-type-body);
  font-weight: 800;
  gap: var(--ow-space-2);
  justify-content: center;
  min-height: 46px;
  min-width: 0;
  padding: 0 var(--ow-space-3);
  transition: filter var(--ow-dur-hover) var(--ow-ease);
}
.ow-bridge__capture span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-bridge__capture:hover { filter: brightness(0.94); }
.ow-bridge__capture:active { transform: scale(0.98); }
.ow-bridge__capture.is-idle { background: var(--ow-console-surface-strong); color: var(--ow-color-muted); cursor: not-allowed; opacity: 0.6; }
.ow-consoleicon {
  align-items: center;
  background: transparent;
  border: 1px solid var(--ow-console-border-strong);
  border-radius: var(--ow-radius-md);
  color: var(--ow-console-muted);
  cursor: pointer;
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-body);
  height: 46px;
  justify-content: center;
  transition: border-color var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
  width: 46px;
}
.ow-consoleicon:hover { border-color: var(--ow-color-brand); color: var(--ow-color-brand); }
.ow-consoleicon--round { border-radius: var(--ow-radius-pill); font-size: var(--ow-type-micro); height: 30px; width: 30px; }
@media (max-width: 767px) {
  .ow-bridge__capture { min-height: var(--ow-control-h-touch); }
  .ow-consoleicon { height: var(--ow-control-h-touch); width: var(--ow-control-h-touch); }
  .ow-consoleicon--round { height: var(--ow-tap-min); width: var(--ow-tap-min); }
}

/* Staged-unload banner */
.ow-stagebar {
  align-items: center;
  background: var(--ow-console-brand-tint-strong);
  border: 1px solid var(--ow-console-brand-edge);
  border-radius: var(--ow-radius-card);
  display: flex;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3);
}
.ow-stagebar--choose { background: var(--ow-console-surface-soft); border-style: dashed; }
.ow-stagebar__body { display: flex; flex: 1; flex-direction: column; gap: var(--ow-space-1); min-width: 0; }
.ow-stagebar__label { color: var(--ow-color-brand); font-size: var(--ow-type-nano); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-stagebar__name { color: var(--ow-console-text); font-size: var(--ow-type-card-title); font-weight: 800; letter-spacing: var(--ow-tracking-tight); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-stagebar__copy { color: var(--ow-console-text); font-size: var(--ow-type-body); font-weight: 700; text-wrap: pretty; }
.ow-stagebar__meta { color: var(--ow-console-muted); font-size: var(--ow-type-micro); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-stagebar__progress { color: var(--ow-color-muted); flex: none; font-size: var(--ow-type-micro); font-weight: 700; max-width: 120px; text-align: right; text-wrap: pretty; }

/* Weight ledger */
.ow-ledger {
  background: var(--ow-console-surface);
  border: 1px solid var(--ow-console-border-soft);
  border-radius: var(--ow-radius-card);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: var(--ow-space-2);
}
.ow-ledger__cell {
  align-items: center;
  background: var(--ow-console-surface-strong);
  border: 1px solid var(--ow-console-border);
  border-radius: var(--ow-radius-lg);
  display: flex;
  gap: var(--ow-space-3);
  min-width: 0;
  padding: var(--ow-space-2) var(--ow-space-3);
}
.ow-ledger__cell.is-empty { background: var(--ow-console-surface-soft); border-color: var(--ow-console-border-soft); }
.ow-ledger__cell.is-total { background: var(--ow-console-brand-tint); border-color: var(--ow-console-brand-edge); }
.ow-ledger__body { display: flex; flex: 1; flex-direction: column; gap: var(--ow-space-1); min-width: 0; }
.ow-ledger__label { color: var(--ow-console-muted); font-size: var(--ow-type-nano); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; white-space: nowrap; }
.ow-ledger__cell.is-empty .ow-ledger__label { color: var(--ow-console-faint); }
.ow-ledger__cell.is-total .ow-ledger__label { color: var(--ow-console-text); }
.ow-ledger__label i { color: var(--ow-console-faint); font-size: var(--ow-type-nano); }
.ow-ledger__slot { color: var(--ow-console-faint); display: block; font-size: var(--ow-type-nano); font-weight: 700; letter-spacing: 0; margin-top: 2px; text-transform: none; white-space: nowrap; }
.ow-ledger__tag { display: inline-block; margin-top: 2px; max-width: 100%; white-space: normal; }
.ow-ledger__source { align-items: center; color: var(--ow-color-muted); display: flex; font-size: var(--ow-type-micro); font-weight: 700; gap: var(--ow-space-1); min-width: 0; }
.ow-ledger__source span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
/* A weighing's provenance is evidence: which vehicle record a stored tare came
   from, and the day the account stated the figure. So it wraps and is read in
   full wherever the column is too narrow for one line, rather than ellipsising
   behind a hover — a weighbridge is worked by touch, where there is no hover
   to give. It fits on one line at desktop width and wraps only where it must.
   The total row restates what its figures already say and keeps its one line. */
.ow-ledger__cell:not(.is-total) .ow-ledger__source span { overflow-wrap: anywhere; white-space: normal; }
.ow-ledger__source i { flex: none; font-size: var(--ow-type-nano); }
.ow-ledger__cell.is-empty .ow-ledger__source { color: var(--ow-console-faint); }
.ow-ledger__source.is-manual { color: var(--ow-console-motion); }
.ow-ledger__read { align-items: baseline; display: flex; flex: none; gap: var(--ow-space-1); }

/* Chargeable summary */
.ow-charge {
  background: var(--ow-console-brand-tint);
  border: 1px solid var(--ow-console-brand-edge);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: var(--ow-space-3);
}
.ow-charge__label { color: var(--ow-console-muted); font-size: var(--ow-type-nano); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-charge__basis { color: var(--ow-console-faint); font-size: var(--ow-type-micro); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-charge__total { color: var(--ow-color-brand); flex: none; font-size: var(--ow-type-page-title); font-variant-numeric: tabular-nums; font-weight: 800; letter-spacing: var(--ow-tracking-tighter); }
.ow-charge__lines { border-top: 1px solid var(--ow-console-brand-edge); display: flex; flex-direction: column; gap: var(--ow-space-2); padding-top: var(--ow-space-2); }
.ow-charge__line { align-items: baseline; display: flex; gap: var(--ow-space-3); min-width: 0; }
.ow-charge__name { color: var(--ow-console-muted); flex: 1; font-size: var(--ow-type-label); font-weight: 700; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-charge__meta { color: var(--ow-console-faint); flex: none; font-size: var(--ow-type-micro); font-variant-numeric: tabular-nums; font-weight: 700; white-space: nowrap; }
.ow-charge__amount { color: var(--ow-console-text); flex: none; font-size: var(--ow-type-meta); font-variant-numeric: tabular-nums; font-weight: 800; text-align: right; width: 78px; }
.ow-charge__sum { align-items: baseline; border-top: 1px solid var(--ow-console-brand-edge); display: flex; gap: var(--ow-space-3); padding-top: var(--ow-space-2); }
.ow-charge__sum .ow-charge__label { flex: 1; }
.ow-charge__sum .ow-charge__amount { color: var(--ow-color-brand); font-size: var(--ow-type-body); }

/* Waste-on-ticket panel */
.ow-wastepanel {
  background: var(--ow-console-surface-soft);
  border: 1px solid var(--ow-console-border);
  border-radius: var(--ow-radius-card);
  display: flex;
  flex-direction: column;
  min-width: 0;
}
.ow-wastepanel__head {
  align-items: center;
  border-bottom: 1px solid var(--ow-console-border-soft);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3);
}
.ow-wastepanel__count {
  align-items: center;
  background: var(--ow-console-surface-strong);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-console-muted);
  display: inline-flex;
  font-size: var(--ow-type-nano);
  font-weight: 800;
  height: 20px;
  letter-spacing: var(--ow-tracking-label);
  padding: 0 var(--ow-space-2);
  text-transform: uppercase;
}
.ow-wastepanel__tools { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2); margin-left: auto; }
.ow-wastepanel__body { display: flex; flex-direction: column; gap: var(--ow-space-2); padding: var(--ow-space-2); }
.ow-consolebtn {
  align-items: center;
  background: transparent;
  border: 1px solid var(--ow-console-border-strong);
  border-radius: var(--ow-radius-md);
  color: var(--ow-console-muted);
  cursor: pointer;
  display: inline-flex;
  flex: none;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  gap: var(--ow-space-2);
  min-height: var(--ow-control-h);
  padding: 0 var(--ow-space-3);
  transition: border-color var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
  white-space: nowrap;
}
.ow-consolebtn i { font-size: var(--ow-type-micro); }
.ow-consolebtn:hover { border-color: var(--ow-color-brand); color: var(--ow-color-brand); }
.ow-consolebtn.is-disabled, .ow-consolebtn:disabled { cursor: not-allowed; opacity: 0.45; }
.ow-consolebtn--brand { background: var(--ow-console-brand-tint-strong); border-color: transparent; color: var(--ow-color-brand); font-weight: 800; }
.ow-consolebtn--brand:hover { background: var(--ow-color-brand); color: var(--ow-color-surface); }
.ow-consolebtn--lg { min-height: var(--ow-control-h-lg); }
@media (max-width: 767px) { .ow-consolebtn { min-height: var(--ow-tap-min); } }

/* Allocation bar */
.ow-alloc { border-bottom: 1px solid var(--ow-console-border-soft); display: flex; flex-direction: column; gap: var(--ow-space-2); padding: var(--ow-space-3); }
.ow-alloc__title { color: var(--ow-console-muted); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-alloc__status { color: var(--ow-color-brand); font-size: var(--ow-type-label); font-variant-numeric: tabular-nums; font-weight: 800; margin-left: auto; }
.ow-alloc__status.is-ok { color: var(--ow-console-ok); }
.ow-alloc__status.is-warn { color: var(--ow-console-warn); }
.ow-alloc__status.is-idle { color: var(--ow-console-faint); }
.ow-alloc__track { background: var(--ow-console-surface-strong); border-radius: var(--ow-radius-pill); display: flex; gap: var(--ow-space-1); height: 10px; overflow: hidden; }
/* The segment's width is a live measurement, so it is the one value in the
 * project that cannot be a class. It arrives as a custom property
 * (`--seg-w`), not as a `width:` declaration: the declaration stays here in
 * the design layer, and the view only supplies the number. */
.ow-alloc__seg { background: var(--ow-color-brand); transition: width var(--ow-dur-state) var(--ow-ease-out); width: var(--seg-w, 0%); }
.ow-alloc__seg--measured { background: var(--ow-console-ok-seg); }
.ow-alloc__seg--manual { background: var(--ow-console-warn); }
.ow-alloc__seg--rest { background: var(--ow-console-rest); }
.ow-alloc__legend { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2) var(--ow-space-4); }
.ow-alloc__key { align-items: center; color: var(--ow-color-muted); display: inline-flex; font-size: var(--ow-type-micro); font-weight: 700; gap: var(--ow-space-2); }
.ow-alloc__key::before { background: var(--ow-color-brand); border-radius: 2px; content: ""; height: 8px; width: 8px; }
.ow-alloc__key--measured::before { background: var(--ow-console-ok-seg); }
.ow-alloc__key--manual::before { background: var(--ow-console-warn); }
.ow-alloc__key--rest::before { background: var(--ow-console-rest); }

/* Waste row */
.ow-wasterow {
  background: var(--ow-console-brand-tint);
  border: 1px solid var(--ow-console-brand-edge);
  border-radius: var(--ow-radius-lg);
  overflow: hidden;
  transition: border-color var(--ow-dur-hover) var(--ow-ease);
}
.ow-wasterow.is-weighed { background: var(--ow-console-surface); border-color: var(--ow-console-border-strong); }
.ow-wasterow.is-active { background: var(--ow-console-brand-tint-strong); border-color: var(--ow-color-brand); }
.ow-wasterow.is-clickable { cursor: pointer; }
.ow-wasterow__grid {
  align-items: center;
  column-gap: var(--ow-space-4);
  display: grid;
  grid-template-columns: 30px minmax(190px, 1.4fr) minmax(140px, 1fr) 140px 288px;
  padding: var(--ow-space-3);
  row-gap: var(--ow-space-3);
}
@media (max-width: 1519px) {
  .ow-wasterow__grid { grid-template-columns: 30px minmax(150px, 1fr) 0 120px 250px; }
}
@media (max-width: 1023px) { .ow-wasterow__grid { grid-template-columns: minmax(0, 1fr); } }
.ow-wasterow__main { display: flex; flex-direction: column; gap: var(--ow-space-1); min-width: 0; }
.ow-wasterow__title { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2); min-width: 0; }
.ow-wasterow__name { color: var(--ow-console-text); font-size: var(--ow-type-body); font-weight: 800; letter-spacing: var(--ow-tracking-tight); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-wasterow__ewc { color: var(--ow-console-faint); font-size: var(--ow-type-micro); font-variant-numeric: tabular-nums; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-wasterow__chips { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2); min-width: 0; }
/* Between 1024 and 1519 the row drops its chips column rather than crush the figures. */
@media (min-width: 1024px) and (max-width: 1519px) { .ow-wasterow__chips { display: none; } }
.ow-wasterow__end { align-items: center; display: flex; gap: var(--ow-space-2); justify-content: flex-end; min-width: 0; }
.ow-consoletag {
  align-items: center;
  background: var(--ow-console-surface-strong);
  border: 1px solid var(--ow-console-border);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-console-muted);
  display: inline-flex;
  font-size: var(--ow-type-micro);
  font-weight: 700;
  gap: var(--ow-space-1);
  height: 22px;
  padding: 0 var(--ow-space-2);
  white-space: nowrap;
}
.ow-consoletag i { font-size: var(--ow-type-nano); }
.ow-consoletag--now { background: var(--ow-color-brand); border-color: transparent; color: var(--ow-color-surface); font-weight: 800; height: 19px; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-consoletag--flag { background: var(--ow-console-warn-bg); border-color: transparent; color: var(--ow-console-warn); font-weight: 800; height: 19px; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-srcbadge {
  align-items: center;
  background: var(--ow-console-surface-strong);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-muted);
  display: inline-flex;
  font-size: var(--ow-type-nano);
  font-weight: 800;
  gap: var(--ow-space-2);
  height: 24px;
  letter-spacing: var(--ow-tracking-label);
  padding: 0 var(--ow-space-2);
  text-transform: uppercase;
  white-space: nowrap;
}
.ow-srcbadge--measured { background: var(--ow-console-ok-bg); color: var(--ow-console-ok); }
.ow-srcbadge--allocated { background: var(--ow-console-brand-tint-strong); color: var(--ow-color-brand); }
.ow-srcbadge--manual { background: var(--ow-console-warn-bg); color: var(--ow-console-warn); }
.ow-allocinput { align-items: center; display: flex; position: relative; }
.ow-allocinput input {
  background: var(--ow-console-surface-strong);
  border: 1px solid var(--ow-console-border-strong);
  border-radius: var(--ow-radius-md);
  color: var(--ow-console-text);
  font-family: inherit;
  font-size: var(--ow-type-body);
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  height: var(--ow-control-h-lg);
  outline: none;
  padding: 0 var(--ow-space-7) 0 var(--ow-space-3);
  text-align: right;
  transition: border-color var(--ow-dur-hover) var(--ow-ease), box-shadow var(--ow-dur-hover) var(--ow-ease);
  width: 112px;
}
.ow-allocinput input:focus { border-color: var(--ow-color-brand); box-shadow: 0 0 0 2px var(--ow-focus-ring); }
.ow-allocinput__unit { color: var(--ow-console-faint); font-size: var(--ow-type-label); font-weight: 800; pointer-events: none; position: absolute; right: 11px; }
@media (max-width: 767px) {
  .ow-allocinput input { font-size: var(--ow-type-card-title); height: 52px; width: 128px; }
}
.ow-stagebtn {
  align-items: center;
  background: var(--ow-color-brand);
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-surface);
  cursor: pointer;
  display: inline-flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 800;
  gap: var(--ow-space-2);
  justify-content: center;
  min-height: var(--ow-tap-min);
  padding: 0 var(--ow-space-4);
  white-space: nowrap;
}
.ow-stagebtn:hover { filter: brightness(0.94); }
.ow-stagebtn.is-idle { background: var(--ow-console-surface-strong); color: var(--ow-color-muted); cursor: not-allowed; opacity: 0.6; }
.ow-stagebtn--pick { background: transparent; border: 1px solid var(--ow-console-brand-edge); color: var(--ow-color-brand); }
.ow-stagebtn--pick:hover { background: var(--ow-color-brand); color: var(--ow-color-surface); filter: none; }
.ow-wasterow__waiting { color: var(--ow-console-faint); font-size: var(--ow-type-label); font-weight: 700; white-space: nowrap; }
.ow-wasterow__detail {
  animation: ow-in var(--ow-dur-hover) var(--ow-ease) both;
  background: var(--ow-console-detail-bg);
  border-top: 1px solid var(--ow-console-border-soft);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3);
}
.ow-consolepairs { display: grid; gap: var(--ow-space-3) var(--ow-space-5); grid-template-columns: repeat(4, minmax(0, 1fr)); }
@media (max-width: 1023px) { .ow-consolepairs { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 767px) { .ow-consolepairs { grid-template-columns: minmax(0, 1fr); } }
.ow-consolepair { display: flex; flex-direction: column; gap: var(--ow-space-1); min-width: 0; }
.ow-consolepair__label { color: var(--ow-console-faint); font-size: var(--ow-type-nano); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-consolepair__value { color: var(--ow-console-muted); font-size: var(--ow-type-meta); font-weight: 700; text-wrap: pretty; }
.ow-consolepair__value--strong { color: var(--ow-console-text); }
.ow-consolepair__value--flag { color: var(--ow-console-warn); }
.ow-wasterow__chargeline { color: var(--ow-console-faint); font-size: var(--ow-type-label); font-variant-numeric: tabular-nums; font-weight: 700; margin-left: auto; }

/* Next-step hint bar */
.ow-hintbar {
  align-items: center;
  background: var(--ow-console-brand-tint);
  border: 1px solid var(--ow-console-brand-edge);
  border-radius: var(--ow-radius-lg);
  display: flex;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3);
}
.ow-hintbar__icon {
  align-items: center;
  background: var(--ow-console-brand-tint-strong);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-brand);
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-meta);
  height: 30px;
  justify-content: center;
  width: 30px;
}
.ow-hintbar__title { color: var(--ow-console-text); font-size: var(--ow-type-body); font-weight: 700; }
.ow-hintbar__body { color: var(--ow-color-muted); font-size: var(--ow-type-label); font-weight: 600; line-height: 18px; text-wrap: pretty; }
.ow-hintbar--warn { background: var(--ow-console-warn-bg); border-color: var(--ow-console-warn); }
.ow-hintbar--warn .ow-hintbar__icon { background: var(--ow-console-warn-bg); color: var(--ow-console-warn); }
.ow-hintbar--ok { background: var(--ow-console-ok-bg); border-color: var(--ow-console-ok); }
.ow-hintbar--ok .ow-hintbar__icon { background: var(--ow-console-ok-bg); color: var(--ow-console-ok); }

/* Light form area below the console */
.ow-ticketbody { display: flex; flex-direction: column; gap: var(--ow-space-3); padding: 0 var(--ow-gutter-page) var(--ow-space-7); }
@media (max-width: 767px) { .ow-ticketbody { padding: 0 var(--ow-gutter-page-mobile) var(--ow-space-6); } }
.ow-ticketgrid { align-items: start; display: grid; gap: var(--ow-space-4); grid-template-columns: repeat(2, minmax(0, 1fr)) minmax(0, 0.9fr); }
@media (max-width: 1279px) { .ow-ticketgrid { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 1023px) { .ow-ticketgrid { grid-template-columns: minmax(0, 1fr); } }
.ow-movebar { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-4); padding: var(--ow-space-3) var(--ow-space-4); }
.ow-movebar__kind { align-items: center; display: inline-flex; flex: none; gap: var(--ow-space-2); }
.ow-movebar__kind span { color: var(--ow-color-muted); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; white-space: nowrap; }
.ow-movebar__leg { display: flex; flex: 1 1 240px; flex-direction: column; gap: var(--ow-space-1); min-width: 0; }
.ow-movebar__label { color: var(--ow-color-faint); font-size: var(--ow-type-nano); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-movebar__value { align-items: center; color: var(--ow-color-text); display: flex; font-size: var(--ow-type-body); font-weight: 700; gap: var(--ow-space-2); min-width: 0; }
.ow-movebar__value i { color: var(--ow-color-brand); flex: none; font-size: var(--ow-type-micro); }
.ow-movebar__value span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-movebar__value.is-empty { color: var(--ow-color-faint); }
.ow-movebar__sub { color: var(--ow-color-faint); font-size: var(--ow-type-label); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-movebar__arrow { color: var(--ow-color-brand); flex: none; font-size: var(--ow-type-card-title); }
.ow-formgrid--single { grid-template-columns: minmax(0, 1fr); }
.ow-field__flag { color: var(--ow-color-brand); font-size: var(--ow-type-micro); font-weight: 800; }
.ow-field__tick { color: var(--ow-status-pass-fg); font-size: var(--ow-type-label); margin-left: auto; }
.ow-field__head { align-items: center; display: flex; gap: var(--ow-space-2); }
.ow-field--filled .ow-field__label { color: var(--ow-color-text); }
/* A field whose staged value differs from the one the completed version
 * recorded. The comparison is the server's, so the mark survives a validation
 * failure, a search that re-renders the form and a browser with no script. */
.ow-field.is-amended > .ow-field__label { color: var(--ow-color-brand-deep); }
.ow-field.is-amended > .ow-input,
.ow-field.is-amended > .ow-select,
.ow-field.is-amended > .ow-textarea { border-color: var(--ow-color-brand); }
.ow-field__hint.is-todo { color: var(--ow-color-brand-deep); font-weight: 700; }
.ow-field__hint.is-done { color: var(--ow-status-pass-fg); font-weight: 700; }
/* The field a panel opens on, and the registration typed into it */
.ow-field--lead { margin-bottom: var(--ow-space-3); }
.ow-input--reg { font-family: var(--ow-font-mono); font-size: 22px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; }

/* Lookup field: input plus a browse button, warm-filled when it holds a record */
.ow-lookup { display: flex; position: relative; }
.ow-lookup__icon { color: var(--ow-color-faint); font-size: var(--ow-type-meta); left: 13px; pointer-events: none; position: absolute; top: 50%; transform: translateY(-50%); z-index: 2; }
.ow-lookup .ow-input { border-radius: var(--ow-radius-md); flex: 1; min-width: 0; padding-left: var(--ow-space-7); }
.ow-lookup--browse .ow-input { border-radius: var(--ow-radius-md) 0 0 var(--ow-radius-md); border-right: 0; }
.ow-lookup__browse {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-left: 0;
  border-radius: 0 var(--ow-radius-md) var(--ow-radius-md) 0;
  color: var(--ow-color-muted);
  cursor: pointer;
  flex: none;
  font-size: var(--ow-type-body);
  height: var(--ow-control-h-lg);
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
  width: var(--ow-control-h-lg);
}
.ow-lookup__browse:hover { background: var(--ow-hover-tint); color: var(--ow-color-brand-deep); }
.ow-lookup.is-filled .ow-lookup__icon { color: var(--ow-color-brand); }
.ow-lookup.is-filled .ow-input { background: var(--ow-selected-card); border-color: var(--ow-color-brand); }
.ow-lookup.is-filled .ow-lookup__browse { background: var(--ow-hover-tint); border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }
@media (max-width: 767px) {
  .ow-lookup__browse { height: var(--ow-control-h-touch); width: var(--ow-control-h-touch); }
}
/* Wrapper for a free-text field that offers suggestions under it. */
.ow-suggestfield { position: relative; }
.ow-suggest {
  animation: ow-in var(--ow-dur-hover) var(--ow-ease) both;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-raise);
  left: 0;
  max-height: 288px;
  overflow-y: auto;
  padding: var(--ow-space-1);
  position: absolute;
  right: 0;
  top: calc(100% + 6px);
  z-index: 40;
}
.ow-suggest__item {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  gap: var(--ow-space-3);
  padding: var(--ow-space-2);
  text-align: left;
  transition: background var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-suggest__item:hover { background: var(--ow-color-selected-row); }
.ow-suggest__body { flex: 1; min-width: 0; }
.ow-suggest__primary { color: var(--ow-color-text); display: block; font-size: var(--ow-type-body); font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-suggest__secondary { color: var(--ow-color-muted); display: block; font-size: var(--ow-type-label); font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-suggest__trailing { color: var(--ow-color-text); flex: none; font-size: var(--ow-type-label); font-variant-numeric: tabular-nums; font-weight: 800; white-space: nowrap; }
.ow-suggest__empty { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-3); justify-content: space-between; padding: var(--ow-space-3); }
.ow-suggest__empty span { color: var(--ow-color-muted); font-size: var(--ow-type-meta); font-weight: 600; }
.ow-linkbtn { background: transparent; border: 0; color: var(--ow-color-brand-deep); cursor: pointer; font-family: inherit; font-size: var(--ow-type-meta); font-weight: 800; }

/* Audit trail */
.ow-auditrow { align-items: center; border-top: 1px solid var(--ow-color-border-soft); display: flex; gap: var(--ow-space-3); min-width: 0; padding: var(--ow-space-2) 0; }
.ow-auditrow__body { flex: 1; min-width: 0; }
.ow-auditrow__title { color: var(--ow-color-text); display: block; font-size: var(--ow-type-meta); font-weight: 700; }
.ow-auditrow__detail { color: var(--ow-color-faint); display: block; font-size: var(--ow-type-label); font-weight: 600; overflow-wrap: anywhere; }
.ow-auditrow__time { color: var(--ow-color-muted); flex: none; font-size: var(--ow-type-label); font-variant-numeric: tabular-nums; font-weight: 700; }

/* Manual-weight keypad */
.ow-readout {
  align-items: baseline;
  background: var(--ow-console-bg);
  border-radius: var(--ow-radius-card);
  display: flex;
  gap: var(--ow-space-3);
  justify-content: flex-end;
  padding: var(--ow-space-4);
}
.ow-readout .ow-figure { font-size: 44px; }
.ow-readout .ow-unit { font-size: var(--ow-type-card-title); }
.ow-keypad { display: grid; gap: var(--ow-space-2); grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-key {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  color: var(--ow-color-text);
  cursor: pointer;
  font-family: inherit;
  font-size: 22px;
  font-weight: 800;
  min-height: 54px;
  transition: background var(--ow-dur-hover) var(--ow-ease), border-color var(--ow-dur-hover) var(--ow-ease);
}
.ow-key:hover { background: var(--ow-color-selected-row); border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }
.ow-key:active { transform: scale(0.97); }
.ow-key--del { background: var(--ow-color-page-bg); color: var(--ow-color-muted); font-size: var(--ow-type-card-title); }
@media (max-width: 767px) { .ow-key { min-height: 62px; } }
.ow-modal--xl { width: min(1280px, 100%); }
.ow-modal--form { width: min(760px, 100%); }
.ow-modal--sheet { max-height: 100%; }
.ow-counter { align-items: center; display: flex; gap: var(--ow-space-2); }
.ow-counter__value { color: var(--ow-color-text); font-size: var(--ow-type-view-title); font-variant-numeric: tabular-nums; font-weight: 800; min-width: var(--ow-tap-min); text-align: center; }

/* The ticket screen: the capture header over one console band holding the
   bridges, the weighings and charges docks, the waste on the ticket and the
   fact tiles. Panels are the shared modal. */
.ow-ticketscreen { display: flex; flex-direction: column; min-height: 100%; }
.ow-ticketscreen__form { display: flex; flex-direction: column; }
.ow-ticketscreen__side { display: none; }
.ow-tickethead__trail { align-items: center; color: var(--ow-color-faint); display: flex; font-size: var(--ow-type-label); font-weight: 700; gap: var(--ow-space-2); letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-tickethead__trail a { border-bottom: 1px solid var(--ow-color-border); color: var(--ow-color-faint); text-decoration: none; }
.ow-tickethead__mode { color: var(--ow-color-brand); }

.ow-ticketdocks { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(auto-fit, minmax(min(380px, 100%), 1fr)); }
.ow-ticketdock__head { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-1) var(--ow-space-2); padding: var(--ow-space-1) var(--ow-space-1) 0; }
.ow-ticketdock__head .ow-console__note { margin-left: auto; }
.ow-charge__line--action { background: transparent; border: 0; border-radius: var(--ow-radius-md); cursor: pointer; font-family: inherit; padding: var(--ow-space-1) 0; text-align: left; width: 100%; }
.ow-charge__line--action:hover .ow-charge__name { color: var(--ow-console-text); }
.ow-charge__line--action:disabled { cursor: default; }
@media (max-width: 767px) {
  .ow-charge__line--action { flex-wrap: wrap; row-gap: var(--ow-space-1); }
  .ow-charge__line--action .ow-charge__name { flex: 1 0 100%; white-space: normal; }
  .ow-charge__line--action .ow-charge__meta { flex: 1 1 0; min-width: 0; white-space: normal; }
}
.ow-charge__amount.is-blocked { color: var(--ow-console-warn); font-size: var(--ow-type-label); }

.ow-hintbar__list { color: var(--ow-color-muted); font-size: var(--ow-type-label); font-weight: 600; line-height: 18px; margin: var(--ow-space-1) 0 0; padding-left: var(--ow-space-4); }
.ow-hintbar--warn .ow-hintbar__list { color: var(--ow-console-text); }

.ow-alloc__note { color: var(--ow-console-faint); font-size: var(--ow-type-micro); font-weight: 600; margin-left: auto; text-align: right; }
.ow-wasterow__pos {
  align-items: center; background: var(--ow-console-surface-strong); border-radius: var(--ow-radius-pill); color: var(--ow-console-muted);
  display: inline-flex; font-size: var(--ow-type-micro); font-weight: 800; height: 26px; justify-content: center; width: 26px;
}
.ow-wasterow__price { color: var(--ow-console-ok); font-family: var(--ow-font-mono); font-size: var(--ow-type-body); font-variant-numeric: tabular-nums; font-weight: 800; min-width: 74px; text-align: right; }
/* A ticket's waste item: position, what it is, its charge, then its weight
   and actions. Its flags sit under the name, so no column is dropped. */
.ow-wasterow__grid--item { grid-template-columns: 30px minmax(0, 1fr) auto auto; }
@media (max-width: 1023px) { .ow-wasterow__grid--item { grid-template-columns: minmax(0, 1fr); } }
.ow-wasterow__weight { align-items: baseline; display: inline-flex; flex: none; gap: var(--ow-space-1); }
.ow-wastepanel__foot { align-items: center; border-top: 1px solid var(--ow-console-border-soft); display: flex; flex-wrap: wrap; gap: var(--ow-space-3); padding: var(--ow-space-3); }
.ow-wastepanel__total-label { color: var(--ow-console-faint); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); margin-left: auto; text-transform: uppercase; }
.ow-wastepanel__total { color: var(--ow-console-text); font-family: var(--ow-font-mono); font-size: var(--ow-type-card-title); font-variant-numeric: tabular-nums; font-weight: 800; }

.ow-ticketsection__head { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-3); margin-bottom: var(--ow-space-3); }
.ow-ticketsection__rule { background: var(--ow-console-border-soft); flex: 1 1 auto; height: 1px; }

/* Fact tiles: one per fact of the transaction, each opening its panel. */
.ow-tiles { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(7, minmax(0, 1fr)); }
@media (max-width: 1420px) { .ow-tiles { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
@media (max-width: 900px) { .ow-tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (max-width: 479px) { .ow-tiles { grid-template-columns: minmax(0, 1fr); } }
.ow-tile {
  background: var(--ow-console-surface-soft); border: 1px solid var(--ow-console-border); border-radius: var(--ow-radius-card);
  color: var(--ow-console-text); cursor: pointer; display: flex; flex-direction: column; font-family: inherit; min-height: 148px;
  min-width: 0; overflow: hidden; padding: 0; text-align: left;
  transition: border-color var(--ow-dur-hover) var(--ow-ease), background var(--ow-dur-hover) var(--ow-ease), transform var(--ow-dur-hover) var(--ow-ease);
}
.ow-tile:hover { border-color: var(--ow-console-brand-edge); transform: translateY(-2px); }
.ow-tile:disabled { cursor: default; transform: none; }
.ow-tile:focus-visible { box-shadow: 0 0 0 3px var(--ow-focus-ring); outline: none; }
.ow-tile.is-filled { background: var(--ow-console-surface); }
.ow-tile__head { align-items: center; display: flex; gap: var(--ow-space-2); padding: var(--ow-space-3) var(--ow-space-3) var(--ow-space-2); width: 100%; }
.ow-tile__badge {
  align-items: center; background: var(--ow-console-brand-tint-strong); border-radius: var(--ow-radius-md); color: var(--ow-color-brand); display: inline-flex;
  flex: none; font-family: var(--ow-font-mono); font-size: var(--ow-type-micro); font-weight: 800; height: 30px; justify-content: center; width: 30px;
}
.ow-tile:not(.is-filled) .ow-tile__badge { background: var(--ow-console-surface-strong); color: var(--ow-console-faint); }
.ow-tile__label { color: var(--ow-console-muted); flex: 1 1 auto; font-size: var(--ow-type-micro); font-weight: 700; letter-spacing: var(--ow-tracking-label); min-width: 0; overflow: hidden; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; }
.ow-tile__body { display: flex; flex: 1 1 auto; flex-direction: column; gap: 2px; min-width: 0; padding: 0 var(--ow-space-3) var(--ow-space-3); }
.ow-tile__value { color: var(--ow-console-text); font-size: var(--ow-type-body); font-weight: 800; overflow-wrap: anywhere; }
.ow-tile:not(.is-filled) .ow-tile__value { color: var(--ow-console-faint); font-weight: 700; }
.ow-tile__sub { color: var(--ow-console-muted); font-size: var(--ow-type-micro); font-weight: 600; overflow-wrap: anywhere; }
.ow-tile__foot { align-items: center; border-top: 1px solid var(--ow-console-border-soft); display: flex; gap: var(--ow-space-2); padding: var(--ow-space-2) var(--ow-space-3); }
.ow-tile__foot-label { color: var(--ow-console-faint); flex: 1 1 auto; font-size: var(--ow-type-nano); font-weight: 700; letter-spacing: var(--ow-tracking-label); min-width: 0; overflow: hidden; text-overflow: ellipsis; text-transform: uppercase; white-space: nowrap; }
.ow-tile__foot-value { color: var(--ow-console-text); flex: none; font-size: var(--ow-type-micro); font-variant-numeric: tabular-nums; font-weight: 800; max-width: 60%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* The completed ticket. */
.ow-ticketdone { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(auto-fit, minmax(min(400px, 100%), 1fr)); }
.ow-ticketdone__card { background: var(--ow-console-surface-soft); border: 1px solid var(--ow-console-border); border-radius: var(--ow-radius-card); display: flex; flex-direction: column; gap: var(--ow-space-3); padding: var(--ow-space-4); }
.ow-ticketdone__card:first-child { background: var(--ow-console-ok-bg); border-color: var(--ow-console-ok); }
.ow-ticketdone__head { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-3); }
.ow-ticketdone__mark { align-items: center; background: var(--ow-console-ok-seg); border-radius: var(--ow-radius-pill); color: var(--ow-console-bg); display: inline-flex; flex: none; height: 30px; justify-content: center; width: 30px; }
.ow-ticketdone__title { color: var(--ow-console-text); flex: 1 1 auto; font-size: var(--ow-type-card-title); font-weight: 800; }
.ow-ticketdone__body { color: var(--ow-console-muted); font-size: var(--ow-type-meta); margin: 0; text-wrap: pretty; }
.ow-ticketdone__versions { display: flex; flex-direction: column; gap: var(--ow-space-2); list-style: none; margin: 0; padding: 0; }
.ow-ticketdone__versions li { align-items: baseline; border-top: 1px solid var(--ow-console-border-soft); color: var(--ow-console-muted); display: flex; flex-wrap: wrap; font-size: var(--ow-type-label); gap: var(--ow-space-2); padding-top: var(--ow-space-2); }
.ow-ticketdone__version { color: var(--ow-console-text); font-weight: 800; }
.ow-ticketdone__digest { color: var(--ow-console-faint); font-family: var(--ow-font-mono); margin-left: auto; }

/* Panels: the shared modal with the ticket's badge, grouped choices and
   sections. */
.ow-ticketpanel__badge {
  align-items: center; background: var(--ow-color-brand-tint); border-radius: var(--ow-radius-md); color: var(--ow-color-brand-deep); display: inline-flex;
  flex: none; font-family: var(--ow-font-mono); font-size: var(--ow-type-meta); font-weight: 800; height: 40px; justify-content: center; width: 40px;
}
.ow-ticketpanel .ow-modal__body { display: flex; flex-direction: column; gap: var(--ow-space-4); }
/* The body scrolls; a section inside it never shrinks to fit, which would clip
   a scrolling option list down to a sliver. */
.ow-ticketpanel .ow-modal__body > * { flex-shrink: 0; }
.ow-ticketpanel__search { margin-bottom: 0; }
/* The vehicle a ticket has just named, summarised where it was chosen. The
   script rewrites its parts as the choice is made, so it never disagrees with
   the option list or the weighing dock. */
.ow-ticketpanel__vehicle {
  align-self: stretch;
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border-soft);
  border-radius: var(--ow-radius-md);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: var(--ow-space-3);
  width: 100%;
}
.ow-ticketpanel__vehicle > [hidden] { display: none; }
.ow-ticketpanel__vehicle p { margin: 0; }
.ow-ticketpanel__vehiclereg {
  font-family: var(--ow-font-mono);
  font-size: var(--ow-type-card-title);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-tight);
}
.ow-ticketpanel__vehicle .ow-srcbadge { align-self: flex-start; }
.ow-ticketpanel__group { border: 0; margin: 0; min-width: 0; padding: 0; }
.ow-ticketpanel__group legend { margin-bottom: var(--ow-space-2); }
.ow-ticketpanel__section { border-top: 1px solid var(--ow-color-border-soft); display: flex; flex-direction: column; gap: var(--ow-space-3); padding-top: var(--ow-space-4); }
.ow-ticketpanel__section.is-quiet { opacity: 0.7; }
.ow-ticketpanel__section summary { cursor: pointer; }
/* Changing a fact that is already answered. A `<details>` rather than a
   scripted disclosure, so the control opens without script as well as with
   it; the server sends it open when the fact is missing or already in use. */
.ow-ticketpanel__change { display: grid; gap: var(--ow-space-3); }
.ow-ticketpanel__change > summary { color: var(--ow-color-brand); cursor: pointer; font-size: var(--ow-type-meta); }
.ow-ticketpanel__change[open] > summary { margin-bottom: var(--ow-space-2); }
.ow-ticketchoices { display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }
.ow-ticketchoice {
  align-items: center; border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-pill); color: var(--ow-color-text); cursor: pointer;
  display: inline-flex; font-size: var(--ow-type-meta); font-weight: 700; gap: var(--ow-space-2); min-height: var(--ow-control-h); padding: 0 var(--ow-space-3);
  transition: border-color var(--ow-dur-hover) var(--ow-ease), background var(--ow-dur-hover) var(--ow-ease);
}
.ow-ticketchoice .ow-option__input { margin: 0; }
.ow-ticketchoice:hover { border-color: var(--ow-color-brand); }
/* An answer the catalogue has taken away: still readable, plainly not for
   choosing, and saying so through more than its colour — the control itself is
   disabled, so it is out of the tab order and announced as unavailable. */
.ow-ticketchoice:has(input:disabled) {
  background: var(--ow-color-surface-alt);
  border-color: var(--ow-color-border-soft);
  color: var(--ow-color-muted);
  cursor: not-allowed;
}
.ow-ticketchoice:has(input:disabled):hover { border-color: var(--ow-color-border-soft); }
.ow-ticketchoice:has(input:checked) { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand); color: var(--ow-color-brand-deep); }
.ow-ticketchoice:has(input:focus-visible) { box-shadow: 0 0 0 3px var(--ow-focus-ring); }
@media (max-width: 767px) { .ow-ticketchoice { min-height: var(--ow-tap-min); } }
.ow-ticketpick { background: transparent; border: 0; font-family: inherit; text-align: left; width: 100%; }
.ow-ticketpick.is-refused { cursor: not-allowed; opacity: 0.6; }
.ow-ticketpick.is-refused:hover { background: transparent; }
.ow-readout__input {
  background: transparent; border: 0; color: var(--ow-console-text); flex: 1 1 auto; font-family: inherit; font-size: 44px;
  font-variant-numeric: tabular-nums; font-weight: 800; min-width: 0; outline: none; text-align: right; width: 100%;
}
.ow-readout__input::placeholder { color: var(--ow-console-faint); }
.ow-readout:focus-within { box-shadow: 0 0 0 3px var(--ow-focus-ring); }

/* ── 22. Account Settings: sub-nav rail, option lists, credential reveal ── */
/* Mirrors the app's own `settings/_nav` + `_switch` + credential partials. */

.ow-settings { align-items: start; display: grid; gap: var(--ow-space-4); grid-template-columns: 236px minmax(0, 1fr); }

/* Rail layout inside a fixed shell: the content column, and the section stack
 * inside it, pass the remaining height down so a results table fills the page
 * instead of leaving the viewport half empty. The rail itself stays top-aligned
 * so its sticky offset still works. */
.ow-shell--fixed .ow-shell__body > .ow-settings { flex: 1 1 auto; min-height: 0; }
.ow-settings--fill { align-items: stretch; }
.ow-settings--fill > .ow-subnav { align-self: start; }
.ow-settings--fill > .ow-stack { min-height: 0; }
.ow-settings--fill > .ow-stack > .ow-stack { flex: 1 1 auto; min-height: 0; }
@media (max-width: 991px) { .ow-settings { grid-template-columns: minmax(0, 1fr); } }

.ow-subnav { display: flex; flex-direction: column; gap: var(--ow-space-4); position: sticky; top: var(--ow-space-4); }
.ow-subnav__group { display: flex; flex-direction: column; gap: var(--ow-space-1); }
.ow-subnav__legend {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-nano);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-label);
  padding: 0 var(--ow-space-3);
  text-transform: uppercase;
}
.ow-subnav__item {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-muted);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-3);
  min-height: var(--ow-control-h-lg);
  padding: 0 var(--ow-space-3);
  text-align: left;
  text-decoration: none;
  transition: background var(--ow-dur-hover) var(--ow-ease), color var(--ow-dur-hover) var(--ow-ease);
  width: 100%;
}
.ow-subnav__item:hover { background: var(--ow-hover-tint); color: var(--ow-color-brand-deep); }
.ow-subnav__item.is-active { background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); font-weight: 700; }
.ow-subnav__icon { color: var(--ow-color-faint); flex: none; font-size: var(--ow-type-label); text-align: center; width: 16px; }
.ow-subnav__item.is-active .ow-subnav__icon { color: var(--ow-color-brand); }
.ow-subnav__label { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-subnav__badge {
  align-items: center;
  background: var(--ow-color-border-soft);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-muted);
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-micro);
  font-variant-numeric: tabular-nums;
  font-weight: 800;
  height: 20px;
  justify-content: center;
  min-width: 20px;
  padding: 0 var(--ow-space-1);
}
.ow-subnav__item.is-active .ow-subnav__badge { background: var(--ow-color-brand-tint-strong); color: var(--ow-color-brand-deep); }
/* Tone words match the canonical set in ow-globals.css, so a subnav badge and
 * a status badge never disagree about what "fail" looks like. */
.ow-subnav__badge--fail { background: var(--ow-status-fail-bg); color: var(--ow-status-fail-fg); }
/* A device that has stopped reporting is a warning, not a failure: the section
 * still works and the count is a prompt to look, so it takes the amber status
 * tokens rather than borrowing the red `--fail` above. Token-only, added here
 * rather than in the view, so every sub-nav gets the tone. */
.ow-subnav__badge--warn { background: var(--ow-status-warning-bg); color: var(--ow-status-warning-fg); }

/* Tab strip — second-level navigation INSIDE a record, where ow-subnav is
 * second-level navigation beside a page. Used by the Organisation workspace's
 * role sections (a Customer's Locations, Waste Types, approved relationships).
 * Same tokens as ow-subnav so the two never disagree about what "active" looks
 * like; horizontal, scrollable, and no sticky positioning because it sits in a
 * card rather than a column. */
.ow-tabstrip {
  display: flex;
  gap: var(--ow-space-1);
  overflow-x: auto;
  padding: var(--ow-space-1) 0;
  scrollbar-width: thin;
}
.ow-tabstrip__item {
  align-items: center;
  background: transparent;
  border: 0;
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-text);
  cursor: pointer;
  display: flex;
  flex: none;
  font: inherit;
  font-size: var(--ow-type-label);
  gap: var(--ow-space-2);
  padding: var(--ow-space-2) var(--ow-space-3);
  text-align: left;
  transition: background var(--ow-dur-state) var(--ow-ease), color var(--ow-dur-state) var(--ow-ease);
  white-space: nowrap;
}
/* THE SAME STRIP, USED TO SAY WHERE YOU ARE RATHER THAN TO OFFER A CHOICE.
 * Tabs may scroll out of sight because the tab you want is the one you reach
 * for; steps may not, because "3 of 4" cannot be read when the fourth is off
 * the edge. So the steps wrap and tighten instead of scrolling. */
.ow-tabstrip--steps { flex-wrap: wrap; overflow-x: visible; }
@media (max-width: 767px) {
  .ow-tabstrip--steps { gap: 2px; }
  .ow-tabstrip--steps .ow-tabstrip__item { padding: var(--ow-space-1) var(--ow-space-2); }
}
.ow-tabstrip__item:hover { background: var(--ow-hover-tint); color: var(--ow-color-brand-deep); }
.ow-tabstrip__item.is-active { background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); font-weight: 700; }
.ow-tabstrip__item > i { color: var(--ow-color-faint); font-size: var(--ow-type-label); }
.ow-tabstrip__item.is-active > i { color: var(--ow-color-brand); }
.ow-tabstrip__count {
  align-items: center;
  background: var(--ow-color-border-soft);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-faint);
  display: inline-flex;
  font-size: var(--ow-type-nano);
  font-weight: 700;
  justify-content: center;
  min-width: 20px;
  padding: 0 var(--ow-space-1);
}
.ow-tabstrip__item.is-active .ow-tabstrip__count { background: var(--ow-color-brand-tint-strong); color: var(--ow-color-brand-deep); }
@media (max-width: 991px) {
  .ow-subnav { flex-direction: row; gap: var(--ow-space-4); overflow-x: auto; padding-bottom: var(--ow-space-2); position: static; }
  .ow-subnav__group { flex: none; flex-direction: row; }
  .ow-subnav__legend { align-self: center; padding: 0 var(--ow-space-1) 0 0; }
  .ow-subnav__item { border-radius: var(--ow-radius-pill); flex: none; padding: 0 var(--ow-space-4); width: auto; }
  .ow-subnav__label { overflow: visible; }
}

/* A setting as a tick with a title and a line saying what it does. */
.ow-optionlist { display: flex; flex-direction: column; list-style: none; margin: 0; padding: 0; }
.ow-option { border-top: 1px solid var(--ow-color-border-soft); }
.ow-option:first-child { border-top: 0; }
.ow-option__label { align-items: flex-start; cursor: pointer; display: flex; gap: var(--ow-space-3); padding: var(--ow-space-3) 0; }
/* The same row shape with no control in it — a read-only list item (a readiness
 * check, a logged attempt, a state per submission kind). `.ow-option__label` is
 * the interactive form and must not be used for these: it carries a pointer
 * cursor and a 44px tap floor for something that cannot be pressed. Added
 * 2026-08-27 for Site Waste Tracking; token-only, no new tokens. */
.ow-option__row { align-items: center; display: flex; gap: var(--ow-space-3); padding: var(--ow-space-3) 0; }
.ow-option__row--top { align-items: flex-start; }
.ow-option__input { accent-color: var(--ow-color-brand); flex: none; height: 17px; margin: 2px 0 0; width: 17px; }
.ow-option__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.ow-option__title { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 700; }
.ow-option__description { color: var(--ow-color-muted); font-size: var(--ow-type-label); line-height: 18px; text-wrap: pretty; }
.ow-option--suggested .ow-option__title { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }
.ow-option--added .ow-option__title { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }
.ow-option--added { background: var(--ow-color-selected-bg); }
.ow-optionlist--compact .ow-option__label { padding: var(--ow-space-2) 0; }
/* A long option list held to a fixed height and scrolled, such as the EWC
 * picker's several hundred codes. */
.ow-optionlist--scroll { border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-sm); max-height: 280px; overflow-y: auto; padding: 0 var(--ow-space-3); }
@media (max-width: 767px) { .ow-option__label { min-height: var(--ow-tap-min); } }

/* The rest of a modal's controls meet the same tap floor at the mobile
 * boundary: its footer actions and its close, which are how a panel is
 * operated on a tablet at the gate. */
@media (max-width: 767px) {
  .ow-btn { min-height: var(--ow-tap-min); }
  .ow-modal__close { min-height: var(--ow-tap-min); min-width: var(--ow-tap-min); }
}

/* The same option row as a button — a tick you press rather than a label with
 * a hidden input. Used where the choice is the whole row (drawer defaults,
 * location-specific carrier lists). Tokens match .ow-option so a pressed row
 * and a checked row read the same. */
.ow-option--pick {
  align-items: flex-start;
  background: transparent;
  border: 0;
  border-top: 1px solid var(--ow-color-border-soft);
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-text);
  cursor: pointer;
  display: flex;
  font: inherit;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3);
  text-align: left;
  transition: background var(--ow-dur-state) var(--ow-ease);
  width: 100%;
}
.ow-option--pick:first-child { border-top: 0; }
.ow-option--pick:hover { background: var(--ow-hover-tint); }
.ow-option--pick > i { color: var(--ow-color-faint); flex: none; font-size: 17px; line-height: 20px; }
.ow-option--pick.is-active { background: var(--ow-color-brand-tint); }
.ow-option--pick.is-active > i { color: var(--ow-color-brand); }
@media (max-width: 767px) { .ow-option--pick { min-height: var(--ow-tap-min); } }

/* A credential shown once: it exists to be transcribed, so it gets the copy row. */
.ow-credential {
  background: var(--ow-color-brand-tint);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  padding: var(--ow-space-4);
}
.ow-credential__label { color: var(--ow-color-brand-deep); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-credential__row { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-3); }
.ow-credential__value {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-brand-tint-strong);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  flex: 1 1 260px;
  font-family: var(--ow-font-mono);
  font-size: var(--ow-type-meta);
  min-width: 0;
  overflow-wrap: anywhere;
  padding: var(--ow-space-2) var(--ow-space-3);
  user-select: all;
}
.ow-credential__note { color: var(--ow-color-text-soft); font-size: var(--ow-type-label); line-height: 18px; text-wrap: pretty; }

/* COMPANY LOGO MANAGEMENT.
 *
 * A drop target, a crop stage and a mock of the printed masthead. The mock's
 * badge carries the SAME PROPORTIONS the A4 document gives the logo
 * (.ow-printdoc__logo: 42mm wide by 16mm tall), so what the card shows is
 * what the ticket will do rather than an impression of it. */
.ow-logodrop {
  align-items: center;
  background: var(--ow-color-surface-alt);
  border: 1px dashed var(--ow-color-border-strong);
  border-radius: var(--ow-radius-md);
  cursor: pointer;
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-1);
  padding: var(--ow-space-5) var(--ow-space-4);
  text-align: center;
  transition: background 120ms ease, border-color 120ms ease;
}
.ow-logodrop:hover,
.ow-logodrop.is-over { background: var(--ow-color-surface); border-color: var(--ow-color-brand); }
/* Focus belongs to the input the label owns, and has to be visible on the
 * label because the input itself is not drawn. */
.ow-logodrop:focus-within { border-color: var(--ow-color-brand); box-shadow: var(--ow-focus-ring); outline: none; }
.ow-logodrop__input { height: 0.1px; opacity: 0; overflow: hidden; position: absolute; width: 0.1px; }
.ow-logodrop__icon { color: var(--ow-color-text-soft); font-size: 20px; }
.ow-logodrop__lead { color: var(--ow-color-text); font-weight: 600; }
.ow-logodrop__hint { color: var(--ow-color-text-soft); font-size: var(--ow-type-label); line-height: 18px; max-width: 54ch; text-wrap: pretty; }

.ow-logostatus { color: var(--ow-color-text-soft); font-size: var(--ow-type-label); }
.ow-logostatus--error { color: var(--ow-color-danger); }

.ow-logoeditor__grid { display: grid; gap: var(--ow-space-4); grid-template-columns: repeat(2, minmax(0, 1fr)); }

/* The stage sizes itself to the image, so the crop box's percentages are
 * percentages OF THE PICTURE and never of a box with letterboxing in it. */
.ow-logostage {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  display: inline-block;
  line-height: 0;
  max-width: 100%;
  position: relative;
}
.ow-logostage__image { display: block; max-height: 220px; max-width: 100%; }
.ow-logostage__box {
  border: 2px solid var(--ow-color-brand);
  box-shadow: 0 0 0 9999px var(--ow-scrim);
  cursor: move;
  position: absolute;
  touch-action: none;
}
.ow-logostage__box:focus { outline: none; box-shadow: 0 0 0 9999px var(--ow-scrim), var(--ow-focus-ring); }
.ow-logostage__handle {
  background: var(--ow-color-surface);
  border: 2px solid var(--ow-color-brand);
  border-radius: 50%;
  height: 18px;
  position: absolute;
  touch-action: none;
  width: 18px;
}
.ow-logostage__handle--nw { cursor: nwse-resize; left: -10px; top: -10px; }
.ow-logostage__handle--ne { cursor: nesw-resize; right: -10px; top: -10px; }
.ow-logostage__handle--sw { bottom: -10px; cursor: nesw-resize; left: -10px; }
.ow-logostage__handle--se { bottom: -10px; cursor: nwse-resize; right: -10px; }

.ow-logoticket {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  padding: var(--ow-space-4);
}
.ow-logoticket__brand { align-items: flex-start; display: flex; gap: var(--ow-space-3); min-width: 0; }
/* 42mm by 16mm, the printed region, as a ratio. */
.ow-logoticket__badge { aspect-ratio: 42 / 16; flex: none; overflow: hidden; width: 42%; }
.ow-logoticket__image { display: block; height: 100%; object-fit: contain; object-position: left top; width: 100%; }
.ow-logoticket__site { display: flex; flex-direction: column; min-width: 0; }
.ow-logoticket__eyebrow { color: var(--ow-color-text-soft); font-size: var(--ow-type-label); text-transform: uppercase; }
.ow-logoticket__name { font-weight: 600; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-logoticket__rule { background: var(--ow-color-border); height: 1px; margin: var(--ow-space-3) 0; }
.ow-logoticket__lines { display: flex; flex-direction: column; gap: var(--ow-space-2); }
.ow-logoticket__lines span { background: var(--ow-color-border); border-radius: var(--ow-radius-sm); display: block; height: 6px; }
.ow-logoticket__lines span:nth-child(2) { width: 72%; }
.ow-logoticket__lines span:nth-child(3) { width: 48%; }

@media (max-width: 720px) {
  .ow-logoeditor__grid { grid-template-columns: minmax(0, 1fr); }
  .ow-logoticket__badge { width: 52%; }
}

/* Account logo preview on Company details. */
.ow-logopreview {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  display: block;
  max-height: 72px;
  object-fit: contain;
  padding: var(--ow-space-2);
  width: 100%;
}


/* ---------------------------------------------------------------------------
   Picker — the redesigned dropdown (ow-picker.jsx / OWShared.Picker).
   Replaces every native <select> and the design system's Select across the
   portal: a trigger stating the current value plus an anchored popup list with
   a tick on the current option, and a filter field once the list is long.
   --------------------------------------------------------------------------- */
.ow-picker { min-width: 0; position: relative; }
.ow-picker__trigger {
  align-items: center;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  color: var(--ow-color-text);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  font-weight: 600;
  gap: var(--ow-space-3);
  height: var(--ow-control-h);
  justify-content: space-between;
  padding: 0 var(--ow-space-3);
  text-align: left;
  transition: border-color 0.15s var(--ow-ease), background 0.15s var(--ow-ease);
  width: 100%;
}
.ow-picker__trigger:hover { border-color: var(--ow-color-brand); }
.ow-picker.is-open .ow-picker__trigger { border-color: var(--ow-color-brand); box-shadow: 0 0 0 2px var(--ow-focus-ring); }
.ow-picker__value { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-picker__value.is-placeholder { color: var(--ow-color-faint); font-weight: 600; }
.ow-picker__caret { color: var(--ow-color-faint); flex: none; font-size: var(--ow-type-micro); transition: transform 0.16s var(--ow-ease); }
.ow-picker.is-open .ow-picker__caret { color: var(--ow-color-brand); transform: rotate(180deg); }
.ow-picker.is-disabled .ow-picker__trigger { background: var(--ow-color-surface-alt); color: var(--ow-color-muted); cursor: not-allowed; }
.ow-picker--touch .ow-picker__trigger { font-size: var(--ow-type-body); height: var(--ow-control-h-touch); }
/* Form-band variant: same height, type and radius as .ow-input beside it. */
.ow-picker--field .ow-picker__trigger { border-radius: var(--ow-radius-md); font-size: var(--ow-type-body); font-weight: 400; height: var(--ow-control-h-lg); }

.ow-picker__pop {
  animation: ow-in 0.16s var(--ow-ease);
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-drawer);
  left: 0;
  max-width: min(360px, 92vw);
  min-width: 100%;
  overflow: hidden;
  position: absolute;
  top: calc(100% + 6px);
  z-index: 60;
}
.ow-picker__pop--end { left: auto; right: 0; }
.ow-picker__search { align-items: center; border-bottom: 1px solid var(--ow-color-border-soft); display: flex; gap: var(--ow-space-2); padding: var(--ow-space-2) var(--ow-space-3); }
.ow-picker__search > i { color: var(--ow-color-faint); font-size: var(--ow-type-micro); }
.ow-picker__searchinput { background: none; border: 0; color: var(--ow-color-text); flex: 1; font-family: inherit; font-size: var(--ow-type-meta); min-width: 0; outline: none; padding: var(--ow-space-1) 0; }
.ow-picker__list { list-style: none; margin: 0; max-height: 280px; overflow-y: auto; padding: var(--ow-space-1); }
.ow-picker__opt {
  align-items: center;
  background: none;
  border: 0;
  border-radius: var(--ow-radius-sm);
  color: var(--ow-color-text);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  font-size: var(--ow-type-meta);
  gap: var(--ow-space-3);
  justify-content: space-between;
  padding: var(--ow-space-2) var(--ow-space-3);
  text-align: left;
  width: 100%;
}
.ow-picker__opt.is-cursor { background: var(--ow-color-page-bg); }
.ow-picker__opt.is-selected { background: var(--ow-hover-tint); color: var(--ow-color-brand-deep); font-weight: 700; }
.ow-picker__opt.is-disabled { color: var(--ow-color-faint); cursor: not-allowed; }
.ow-picker__optbody { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ow-picker__optlabel { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-picker__opthint { color: var(--ow-color-muted); font-size: var(--ow-type-label); font-weight: 500; }
.ow-picker__tick { color: var(--ow-color-brand); flex: none; font-size: var(--ow-type-micro); }
.ow-picker__none { color: var(--ow-color-muted); font-size: var(--ow-type-label); padding: var(--ow-space-3); }
@media (max-width: 767px) {
  .ow-picker__trigger { font-size: var(--ow-type-body); height: var(--ow-control-h-touch); }
  .ow-picker__opt { min-height: var(--ow-tap-min); }
}

/* THE RAIL FOOTER IS THE ACCOUNT MENU'S TRIGGER, AND THE ONLY ONE.
 *
 * The block used to be a link to My Details with a sign-out icon beside it.
 * It is now one real button: a block that navigated on click could not also
 * open a menu, and both of those destinations are rows inside the panel.
 * `shared/_ow_side_nav.html.erb` draws it. */
.ow-nav__userlink {
  align-items: center;
  background: transparent;
  border: 0;
  color: inherit;
  cursor: pointer;
  display: flex;
  flex: 1;
  font-family: inherit;
  gap: var(--ow-space-3);
  min-width: 0;
  padding: 0;
  text-align: left;
  text-decoration: none;
  width: 100%;
}
.ow-nav__userlink:hover .ow-nav__user-name { color: var(--ow-color-brand-deep); }
/* Port deviation: the design rings the ring against `--ow-color-nav-dark`,
   which is right for a rail that is always dark. This rail follows the theme,
   so the inner ring is the rail's own surface in whichever theme is on. */
.ow-nav__userlink:focus-visible {
  border-radius: var(--ow-radius-md);
  box-shadow: 0 0 0 2px var(--nav-bg), 0 0 0 4px var(--ow-color-brand);
  outline: none;
}
.ow-nav--collapsed .ow-nav__userlink { justify-content: center; }
/* The subtle indicator that there is a menu here. It turns over while the
   panel is open, and the two label-less rail states hide it with the labels. */
.ow-nav__user-caret { color: var(--nav-label); flex: none; font-size: var(--ow-type-meta); transition: transform var(--ow-dur-hover) var(--ow-ease); }
.ow-nav__userlink.is-open .ow-nav__user-caret { transform: rotate(180deg); }

/* THE PANEL HAS TO LEAVE THE FOOTER, AND THE RAIL CLIPS EVERYTHING.
 *
 * `.ow-nav` is `overflow: hidden` — it has to be, because the rail animates
 * its own width and its scroll area must not spill while it does. A panel
 * anchored inside it is clipped by that, and in the 76px icon rail there is
 * nothing left of it to see. The design screen has the same `overflow: hidden`
 * and renders the panel inside the footer too, so this is the Rails shell's
 * own answer rather than a port of one: the rail stops clipping for exactly
 * as long as the menu is open, and `ow_shell.js` owns the class. */
.ow-nav.is-menu-open { overflow: visible; }

/* THREE RAIL WIDTHS, ONE PANEL, AND IT STAYS ON SCREEN IN ALL OF THEM.
 *
 * Expanded rail and drawer: the panel is the width of the footer it hangs
 * off, inset to the same gutter as the block above it, so it never overhangs
 * the rail or the drawer. `min-width` goes, because `.ow-menu`'s own 254px
 * floor is wider than the 248px rail.
 *
 * It is capped and scrolls: seven rows and an identity head come to ~400px,
 * which is most of a landscape phone, and a panel that opens upward off the
 * top of the viewport is no more usable than one that opens off the bottom.
 *
 * These follow `.ow-menu.ow-menu--up` above — equal specificity again, so
 * source order is what makes them win. */
.ow-nav .ow-menu--up {
  left: var(--ow-space-3);
  max-height: min(70vh, 460px);
  min-width: 0;
  overflow-y: auto;
  right: var(--ow-space-3);
  width: auto;
}
/* Icon rail: the footer is 76px of avatar, so the panel opens BESIDE the rail
   at its own readable width, bottom-aligned with the block that opened it. */
.ow-nav--collapsed .ow-menu--up {
  bottom: var(--ow-space-2);
  left: calc(100% + var(--ow-space-2));
  right: auto;
  width: 254px;
}


/* ══ Layer 3, folded in: the shared table (ow-data-table.css) ══════════ */

/* OW Data Table — shared table styles for OpenWeigh screens.
   Mirrors the list-view table look from Shared Layout (Customers/Records index):
   card shell, uppercase sticky header, horizontal-rule rows, sticky-right
   Actions column with a seam shadow, and a count/scroll footer.
   Slated for upstream promotion into the OpenWeigh Design System's own
   components.css layer. Consumers load this alongside ow-data-table.jsx. */

.ow-data-table__wrap {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-card);
  box-shadow: var(--ow-shadow-table);
  display: flex; flex-direction: column;
  overflow: hidden;
}
.ow-data-table__wrap--fill { flex: 1 1 auto; min-height: 0; }

.ow-data-table__scroll { overflow: auto; max-height: calc(100vh - 320px); }
.ow-data-table__scroll--fill { max-height: none; flex: 1 1 auto; min-height: 0; overflow-y: auto; }

/* The desktop results region of a board that fills the height the shell left
 * it (`.ow-shell--fixed`). It is a shrinkable flex column, so the table inside
 * sizes against the space remaining rather than a guessed pixel height, and it
 * owns its own breakpoint: at card width it is gone and the mobile cards keep
 * normal document flow, so there is no nested scroll on a phone.
 *
 * It is one class rather than `.ow-hide-mobile` plus a flex utility, because
 * those two both set `display` at the same specificity and the later one would
 * decide which won. */
.ow-data-table__region { display: flex; flex: 1 1 auto; flex-direction: column; min-height: 0; min-width: 0; }
@media (max-width: 767px) { .ow-data-table__region { display: none; } }


.ow-data-table {
  width: 100%;
  border-collapse: collapse;
  background: var(--ow-color-surface);
  font-family: inherit;
}

/* HEADER — uppercase, sticky, muted, one horizontal rule. */
.ow-data-table thead th {
  position: sticky; top: 0; z-index: 3;
  background: var(--ow-color-surface-alt);
  color: var(--ow-color-muted);
  font-size: var(--ow-type-micro); font-weight: 700;
  letter-spacing: var(--ow-thead-tracking); text-transform: uppercase;
  padding:var(--ow-space-3) var(--ow-space-3); text-align: left;
  border-bottom: 1px solid var(--ow-color-border);
  white-space: nowrap; user-select: none;
}
.ow-data-table thead th[aria-sort="ascending"],
.ow-data-table thead th[aria-sort="descending"] {
  background: var(--ow-color-border-soft);
  color: var(--ow-color-text);
}

.ow-data-table th button.ow-data-table__sort {
  align-items: center; background: transparent; border: 0; color: inherit;
  cursor: pointer; display: inline-flex; font: inherit; gap: var(--ow-space-2);
  letter-spacing: inherit; padding:0; text-transform: inherit; white-space: nowrap;
}
.ow-data-table th button.ow-data-table__sort:hover { color: var(--ow-color-brand-deep); }
.ow-data-table th[aria-sort="ascending"] button.ow-data-table__sort,
.ow-data-table th[aria-sort="descending"] button.ow-data-table__sort { color: var(--ow-color-brand); }
.ow-data-table__sort-icon { font-size: var(--ow-type-nano); opacity: .32; color: currentColor; }
.ow-data-table th[aria-sort="ascending"] .ow-data-table__sort-icon,
.ow-data-table th[aria-sort="descending"] .ow-data-table__sort-icon { opacity: 1; color: var(--ow-color-brand); }

/* BODY — horizontal rules only, warm hover. */
.ow-data-table tbody tr { transition: background .16s ease; }
.ow-data-table tbody tr + tr td { border-top: 1px solid var(--ow-color-border-soft); }
.ow-data-table tbody tr:hover { background: var(--ow-color-row-hover); }
.ow-data-table tbody td {
  padding:var(--ow-space-2) var(--ow-space-3);
  font-size: var(--ow-type-meta);
  color: var(--ow-color-text);
  vertical-align: middle;
  background: inherit;
}

.ow-data-table tbody tr.is-clickable { cursor: pointer; }
.ow-data-table tbody tr.is-selected,
.ow-data-table tbody tr.is-expanded { background: var(--ow-color-selected-row); }
.ow-data-table tbody tr.is-expanded .ow-data-table__actions,
.ow-data-table tbody tr.is-selected .ow-data-table__actions { background: var(--ow-color-selected-row); }

/* STICKY-RIGHT actions column with the seam shadow. */
.ow-data-table th.ow-data-table__actions,
.ow-data-table td.ow-data-table__actions {
  position: sticky; right: 0; z-index: 2;
  background: var(--ow-color-surface-alt);
  box-shadow: var(--ow-seam-sticky);
  text-align: center;
  width: 64px; padding:var(--ow-space-2) var(--ow-space-3);
}
.ow-data-table thead th.ow-data-table__actions { z-index: 4; }
.ow-data-table tbody td.ow-data-table__actions { background: var(--ow-color-surface); }
.ow-data-table tbody tr:hover td.ow-data-table__actions { background: var(--ow-color-row-hover); }

/* EXPANDED DETAIL ROW */
.ow-data-table__detail-row td {
  background: var(--ow-color-selected-bg);
  border-top: 0 !important;
  border-bottom: 1px solid var(--ow-color-border);
  padding:0;
  box-shadow: none;
}
.ow-data-table__detail-inner {
  animation: ow-data-table-detail-in .18s ease;
  padding:var(--ow-space-4) var(--ow-space-5) var(--ow-space-5);
}
/* A table inside an expanded detail row states one record's own facts; it is
 * not a list that scrolls on its own. Its header has nothing to stick to, and
 * left sticky it would collide with the header of the table it sits inside,
 * both pinned to the same scrolling container. */
.ow-data-table__detail-inner .ow-data-table thead th { position: static; }
@keyframes ow-data-table-detail-in {
  from { opacity: 0; transform: translateY(-4px); }
  to { opacity: 1; transform: translateY(0); }
}

.ow-data-table__loader-row td {
  background: var(--ow-color-surface-alt); color: var(--ow-color-muted);
  font-size: var(--ow-type-label); font-weight: 600; padding:var(--ow-space-3); text-align: center;
  border-top: 0 !important;
}
.ow-data-table__loader-inner { align-items: center; display: inline-flex; gap: var(--ow-space-2); }
.ow-data-table__loader-inner .fa { color: var(--ow-color-brand); }

.ow-data-table__empty-row td {
  color: var(--ow-color-muted); font-size: var(--ow-type-body); padding:var(--ow-space-8) var(--ow-space-4); text-align: center;
  border-top: 0 !important;
}
.ow-data-table__end-row td {
  border-top: 0 !important; border-bottom: 0;
  color: var(--ow-color-faint);
  font-size: var(--ow-type-label); padding:var(--ow-space-3); text-align: center;
}

/* CHEVRON — same treatment as row-menu buttons in Shared Layout. */
.ow-data-table__chev {
  align-items: center; background: transparent; border: 0; border-radius: var(--ow-radius-md);
  color: var(--ow-color-faint); cursor: pointer; display: inline-flex;
  height:var(--ow-control-h); width: var(--ow-control-h); justify-content: center; padding:0;
  transition: background .16s ease, color .16s ease, transform .18s ease;
}
.ow-data-table__chev:hover { background: var(--ow-hover-tint); color: var(--ow-color-brand-deep); }
/* Expanded reads from either place: the row carries `is-expanded` in the React
 * table, the button carries `aria-expanded` in the template ones. Both rotate,
 * so a screen never needs a rule of its own for it. */
.ow-data-table__chev[aria-expanded="true"] {
  background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); transform: rotate(180deg);
}
/* The hover nudge, promoted out of Weighing Activities — it was the last
 * per-page style block in the project. Suppressed once expanded (the rotation
 * is the state) and for reduced-motion users. */
@keyframes ow-chev-nudge { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(3px); } }
.ow-data-table__chev i { transition: transform .18s ease, color .18s ease; }
.ow-data-table__chev:hover i { animation: ow-chev-nudge .7s ease-in-out infinite; }
.ow-data-table__chev[aria-expanded="true"]:hover i { animation: none; }
@media (prefers-reduced-motion: reduce) { .ow-data-table__chev:hover i { animation: none; } }
.ow-data-table tbody tr.is-expanded .ow-data-table__chev {
  background: var(--ow-color-brand-tint); color: var(--ow-color-brand-deep); transform: rotate(180deg);
}

/* A MANY-COLUMN TABLE, SCROLLED RATHER THAN CRUSHED.
 *
 * The minimum was a flat 1180px, which is wider than the content area at every
 * width the shell actually offers below about 1500px — so the table was ALWAYS
 * wider than its scroller, and the sticky Actions column ALWAYS painted over
 * the column beside it. A permanent overlap is not "scroll it rather than
 * crush it"; it is the last column sliced in half on first paint.
 *
 * The minimum now stands down with the columns that carry it (`ow-col--drop-*`),
 * so the table scrolls where it genuinely needs the room and fits where the
 * columns have stood down. */
.ow-data-table--wide { min-width: 1180px; }
@media (max-width: 1519px) { .ow-data-table--wide { min-width: 1040px; } }
@media (max-width: 1279px) { .ow-data-table--wide { min-width: 0; } }
/* Content-sized table inside a narrow shell: scroll it rather than crush the
 * name column to an ellipsis. */
/* Settings tables: the shell leaves ~800px, and these carry six or seven
 * columns, so the table scrolls. A sticky Actions cell in that situation pins
 * over the last data column at scrollLeft 0 — State on Users, Enabled on
 * Hardware — which is the trap app/views/settings/users.html.erb documents. The
 * pin is what has to go here, not the column: the row's actions scroll with the
 * row and nothing is ever covered. */
.ow-data-table--fit { min-width: 940px; }
.ow-data-table--fit th.ow-data-table__actions,
.ow-data-table--fit td.ow-data-table__actions {
  box-shadow: none;
  position: static;
  width: auto;
}
/* A transcribed token never wraps: a device ID is read character by character. */
.ow-data-table .ow-mono { white-space: nowrap; }
.ow-data-table th.ow-data-table__actions--lg,
.ow-data-table td.ow-data-table__actions--lg { text-align: right; width: 210px; }

/* Archived / inactive record: dimmed content, live chrome.
 * The dim stops at 0.88: below that, muted body text falls under the contrast
 * an operator can comfortably read — and an archived row is exactly the one
 * somebody is peering at to work out whether to bring it back. The row reads
 * as archived through its Archived badge and its lighter chrome, not by being
 * hard to read. */
.ow-data-table tbody tr.is-dim td { opacity: 0.88; }
.ow-data-table tbody tr.is-dim .is-muted,
.ow-data-table tbody tr.is-dim .ow-faint { color: var(--ow-color-muted); }

/* COLUMNS THAT STAND DOWN RATHER THAN OVERFLOW.
 *
 * The Actions column is `position: sticky; right: 0`, so when a table is
 * wider than its scroller the sticky cell PAINTS OVER whatever is beneath it.
 * The column to its left then reads as cut off mid-word — which is what
 * happens between roughly 960 and 1200px, where the shell has already given
 * the content area back 172px of rail but the table has not given anything
 * up in return.
 *
 * Scrolling reaches the covered content, but a list whose last column is
 * sliced in half at rest reads as broken, so the answer is for the table to
 * be narrower rather than for the operator to discover a scrollbar. A column
 * carrying `ow-col--drop-*` is DELIBERATELY stood down at that width: nothing
 * it shows is unavailable, it is on the record and in the row's own detail.
 *
 * Set the class on the `th` AND its `td` — a colgroup does not survive the
 * template layer.
 *
 * THE TWO WIDTHS ARE MEASURED, NOT PICKED. The content area is the viewport
 * less the rail (248px, or 76px at 1199 and below) and the page gutters, and
 * a full Business Records row needs about 1100px. So the counts — a bare
 * number each — stand down first, and the address, which is the widest column
 * on the row, follows at the width where what is left still would not fit. */
@media (max-width: 1519px) {
  .ow-data-table th.ow-col--drop-1520,
  .ow-data-table td.ow-col--drop-1520 { display: none; }
}
@media (max-width: 1279px) {
  .ow-data-table th.ow-col--drop-1280,
  .ow-data-table td.ow-col--drop-1280 { display: none; }
}

/* WHERE EVEN THE COLUMNS THAT REMAIN CANNOT FIT, THE STICKY COLUMN STANDS DOWN
 * TOO.
 *
 * Between the card breakpoint and about 990px the content area is narrow
 * enough — 468px at a 768px viewport, measured — that a row cannot be made to
 * fit however many columns give way. Scrolling is then the honest answer, and
 * at that point `position: sticky` on Actions actively hurts: it pins a
 * column over the top of whatever is beside it and the row reads as sliced in
 * half before the operator has scrolled anything.
 *
 * So below 992px Actions scrolls with its row. Nothing is hidden and nothing is
 * unreachable; the seam shadow goes with it, because a seam that marks nothing
 * is just a line. */
@media (max-width: 991px) {
  .ow-data-table th.ow-data-table__actions,
  .ow-data-table td.ow-data-table__actions {
    box-shadow: none;
    position: static;
  }
}

/* A badge is a fixed phrase and must never be split down the middle. Where the
 * column is too narrow for the phrase the badge wraps as a whole; and it sizes
 * to its own text rather than being stretched the width of the column by the
 * flex stack it sits in. The sentence beside it wraps on word boundaries
 * rather than being sliced by the sticky seam. */
.ow-data-table td .ow-badge { max-width: 100%; white-space: normal; }
/* A cell declared nowrap keeps its badge on one line too. */
.ow-data-table td.ow-cell--nowrap .ow-badge { white-space: nowrap; }
.ow-data-table td .ow-stack > .ow-badge,
.ow-data-table td .ow-stack > .ow-row { align-self: flex-start; }
.ow-data-table td .ow-stack .ow-meta { overflow-wrap: anywhere; }

/* CELL ROLES — set on th/td instead of an inline style. */
.ow-data-table .is-center { text-align: center; }
/* Percentage column widths only hold under auto layout if the cell can shrink. */
.ow-data-table td.is-clip, .ow-data-table th.is-clip { max-width: 0; overflow: hidden; }
.ow-data-table .is-right { text-align: right; }
/* Column allocation on the header cells (a colgroup does not survive the
 * template layer). Percentages only hold under auto layout when the body cell
 * can shrink — pair a wide text column with `is-clip` + `.ow-truncate`. */
.ow-data-table th.ow-col--name { width: 22%; }
.ow-data-table th.ow-col--wide { width: 32%; }
.ow-data-table th.ow-col--md { width: 13%; }
.ow-data-table th.ow-col--sm { width: 8%; }
.ow-data-table .is-num { font-family: var(--ow-font-numeric); font-feature-settings: "tnum" 1; font-variant-numeric: tabular-nums; white-space: nowrap; }
.ow-data-table .is-muted { color: var(--ow-color-muted); }
.ow-data-table .is-faint { color: var(--ow-color-faint); }
.ow-data-table .is-strong { color: var(--ow-color-text); font-weight: 700; }
.ow-data-table .is-name { color: var(--ow-color-text); font-size: var(--ow-type-body); font-weight: 700; }
.ow-data-table td.ow-data-table__select,
.ow-data-table th.ow-data-table__select {
  padding: var(--ow-space-2) var(--ow-space-3);
  text-align: center;
  width: var(--ow-tap-min);
}
/* Only the body cell anchors the selection mark — the header cell must keep
 * the sticky positioning it inherits from `thead th`. */
.ow-data-table td.ow-data-table__select { position: relative; }
.ow-data-table__check { accent-color: var(--ow-color-brand); cursor: pointer; height: 15px; margin: 0; width: 15px; }
.ow-data-table__selmark {
  background: var(--ow-color-brand);
  border-radius: 0 3px 3px 0;
  bottom: 5px;
  left: 0;
  position: absolute;
  top: 5px;
  width: 3px;
}
/* Row action menu — anchored to the sticky Actions cell. */
.ow-data-table__rowmenu {
  animation: ow-data-table-detail-in var(--ow-dur-hover) var(--ow-ease);
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-raise);
  padding: var(--ow-space-1);
  position: absolute;
  right: 14px;
  text-align: left;
  top: var(--ow-tap-min);
  width: 214px;
  z-index: 60;
}

/* FOOTER — count on the left, scroll hint on the right. */
.ow-data-table__footer {
  flex: none;
  padding:var(--ow-space-3) var(--ow-space-4);
  border-top: 1px solid var(--ow-color-border-soft);
  background: var(--ow-color-surface-alt);
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--ow-space-3); flex-wrap: wrap;
  font-size: var(--ow-type-label); color: var(--ow-color-faint); font-weight: 600;
}
.ow-data-table__count { white-space: nowrap; }
.ow-data-table__count strong { color: var(--ow-color-text); font-weight: 800; font-variant-numeric: tabular-nums; }

/* Several controls in one actions cell.
 *
 * `button_to` wraps each control in its own <form>, which is block-level, so a
 * row with a rotate/revoke/suspend/disable set stacked into a vertical column
 * 64px wide. The cell is the one place in the system where several controls sit
 * side by side, so it lays them out itself rather than every screen wrapping
 * its actions in a row - and a screen with more than one action takes
 * `--lg` for the width it needs. */
.ow-data-table td.ow-data-table__actions { white-space: nowrap; }
.ow-data-table td.ow-data-table__actions > form,
.ow-data-table td.ow-data-table__actions > .ow-row > form { display: inline-block; vertical-align: middle; margin: 0; }


/* Section mode of the rail (Side Nav.dc.html: `showSitePicker = showLabels &&
 * !inSection`, `showCollapseToggle = !mobile && !inSection`). The React rail
 * simply does not render these while a section menu is showing; the
 * server-rendered rail carries the class instead. */
.ow-nav--section .ow-nav__site,
.ow-nav--section .ow-nav__site--icon,
.ow-nav--section .ow-nav__collapse { display: none; }

/* A designed destination this application has no screen for yet. Rendered as
 * unavailable rather than as a link to nowhere - the design keeps such items
 * "inert" and so does the rail. */
.ow-nav__item.is-inert { cursor: default; opacity: 0.5; }
.ow-nav__item.is-inert:hover { background: transparent; color: var(--nav-idle); }
.ow-nav__item.is-inert.is-active { opacity: 1; }

/* External signing page (layouts/signing): one narrow column of cards for
 * a signer who has no account — no shell, no navigation. Reused by any
 * later externally signed record (WTN), not only the hazardous consignment. */
.ow-signing { background: var(--ow-color-page-bg); color: var(--ow-color-text); margin: 0; min-height: 100vh; }
.ow-signing__main {
  display: flex; flex-direction: column; gap: var(--ow-space-4);
  margin: 0 auto; max-width: var(--ow-canvas-prose-narrow);
  padding: var(--ow-space-6) var(--ow-space-4) var(--ow-space-8);
}
.ow-signing .ow-deflist dd { text-align: left; }
.ow-signing__statement {
  background: var(--ow-color-surface-alt); border-left: 3px solid var(--ow-color-brand);
  border-radius: var(--ow-radius-sm); font-size: var(--ow-type-body); margin: 0; padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-signing__items { border-collapse: collapse; font-size: var(--ow-type-meta); width: 100%; }
.ow-signing__items th { background: var(--ow-color-thead-bg); color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: 0.05em; padding: var(--ow-space-2) var(--ow-space-3); text-align: left; text-transform: uppercase; }
.ow-signing__items td { border-top: 1px solid var(--ow-color-border-soft); padding: var(--ow-space-2) var(--ow-space-3); vertical-align: top; }
/* Wide facts (the Part B waste table) scroll inside their own container on a
   phone; the page itself never scrolls sideways. */
.ow-signing__scroll { -webkit-overflow-scrolling: touch; overflow-x: auto; }
/* Part E: one stacked line per waste line received — readable and decidable
   at any width, so the decision controls are never inside a scrolling table. */
.ow-signing__line { border: 0; border-top: 1px solid var(--ow-color-border-soft); display: grid; gap: var(--ow-space-2); margin: 0; min-width: 0; padding: var(--ow-space-3) 0 0; }
.ow-signing__line:first-of-type { border-top: 0; padding-top: 0; }
.ow-signing__line-title { font-size: var(--ow-type-body); font-weight: 700; padding: 0; }
.ow-signing__decision { display: flex; flex-wrap: wrap; gap: var(--ow-space-2) var(--ow-space-4); }
@media (max-width: 767px) {
  .ow-signing .ow-deflist { gap: 2px 0; grid-template-columns: minmax(0, 1fr); }
  .ow-signing .ow-deflist dd { margin-bottom: var(--ow-space-2); }
}

/* ── Contextual help: the walkthrough ───────────────────────────────────────
   The help PANEL is the shared drawer and needs nothing of its own. What is
   missing from layer 2 is the walkthrough: a scrim, a ring cut around the
   element being explained, and the bubble that explains it.

   Geometry is the only thing that cannot live here — it is measured from the
   real element at runtime — so it arrives as custom properties (--tour-x/-y/
   -w/-h) and every declaration below stays in the stylesheet. Same rule as the
   ticket screen's allocation bar. */
.ow-tour { inset: 0; position: fixed; z-index: 1300; }
.ow-tour__scrim { background: var(--ow-scrim-strong); inset: 0; position: absolute; }

/* The ring is drawn as a huge spread shadow, so the element stays lit by the
   page underneath instead of being redrawn into an overlay. */
.ow-tour__spot {
  border: 2px solid var(--ow-color-brand);
  border-radius: var(--ow-radius-lg);
  /* `100vmax` rather than a large pixel spread: a spread of several thousand
     pixels is dropped by the compositor, and this is by definition big enough
     to reach every corner whatever the viewport. */
  box-shadow: 0 0 0 100vmax var(--ow-scrim-strong);
  height: calc(var(--tour-h, 0px) + 2 * var(--ow-space-1));
  left: calc(var(--tour-x, 0px) - var(--ow-space-1));
  pointer-events: none;
  position: absolute;
  top: calc(var(--tour-y, 0px) - var(--ow-space-1));
  transition: all var(--ow-dur-panel) var(--ow-ease-out);
  width: calc(var(--tour-w, 0px) + 2 * var(--ow-space-1));
}
.ow-tour__bubble {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  box-shadow: var(--ow-shadow-dialog);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  left: var(--tour-bx, 0px);
  max-width: calc(100vw - 2 * var(--ow-space-4));
  padding: var(--ow-space-4);
  position: absolute;
  top: var(--tour-by, 0px);
  transition: left var(--ow-dur-panel) var(--ow-ease-out), top var(--ow-dur-panel) var(--ow-ease-out);
  width: 340px;
}
.ow-tour__count { color: var(--ow-color-faint); font-size: var(--ow-type-micro); font-weight: 800; letter-spacing: var(--ow-tracking-label); text-transform: uppercase; }
.ow-tour__foot { align-items: center; display: flex; gap: var(--ow-space-2); }
/* Both navigation buttons share the row evenly, so neither can be squeezed to
   an unreadable width by the other's label. */
.ow-tour__foot .ow-fill { flex: 1 1 0; justify-content: center; min-width: 0; }

/* The narration options sit above the navigation. `min-width: 0` lets a long
   label ellipsis inside the bubble instead of pushing itself outside it, which
   is what a flex item does by default. */
.ow-tour__opts {
  align-items: center;
  border-bottom: 1px solid var(--ow-color-border);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
  padding-bottom: var(--ow-space-3);
}
.ow-tour__opts > * { min-width: 0; }
.ow-tour__opts .ow-tour__guide { flex: 0 1 auto; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.ow-tour__opts [data-ow-tour-end] { margin-left: auto; }

@media (max-width: 767px) {
  /* On a phone the bubble is a sheet at the bottom: there is no room to float
     it beside a highlighted element, and a bubble that covers the thing it is
     describing helps nobody. The ring stays. */
  .ow-tour__bubble {
    border-radius: var(--ow-radius-lg) var(--ow-radius-lg) 0 0;
    bottom: 0;
    left: 0;
    max-width: none;
    top: auto;
    width: 100%;
  }
}

/* The assistant's live-call pill. The toast is a transient message; this one
   stays for as long as the microphone is open and carries the control that
   closes it, so it has to be interactive and sit clear of the bottom edge. */
.ow-toast--live { bottom: var(--ow-space-5); pointer-events: auto; top: auto; }
.ow-toast--live i { color: var(--ow-color-danger); }
.ow-toast--live .ow-btn { margin-left: var(--ow-space-2); }

/* ─────────────────────────────────────────────────────────────────────────
   COMMISSIONING WALK
   A step rail beside the current step's panel. On a narrow screen the rail
   sits above the panel and stops sticking. */
.ow-walk { align-items: start; display: grid; gap: var(--ow-space-4); grid-template-columns: 300px minmax(0, 1fr); }
@media (max-width: 960px) { .ow-walk { grid-template-columns: minmax(0, 1fr); } }
.ow-walk__rail { position: sticky; top: var(--ow-space-4); }
@media (max-width: 960px) { .ow-walk__rail { position: static; } }

.ow-walkstep {
  align-items: flex-start; background: transparent; border: 0;
  border-radius: var(--ow-radius-md); color: var(--ow-color-text); cursor: pointer;
  display: flex; font: inherit; gap: var(--ow-space-3);
  padding: var(--ow-space-2) var(--ow-space-2); text-align: left; text-decoration: none; width: 100%;
  transition: background var(--ow-dur-hover) var(--ow-ease);
}
.ow-walkstep:hover { background: var(--ow-hover-tint); text-decoration: none; }
.ow-walkstep[disabled], .ow-walkstep.is-blocked { cursor: not-allowed; opacity: 0.45; }
.ow-walkstep.is-current { background: var(--ow-color-brand-tint); }
.ow-walkstep__title { color: var(--ow-color-text); font-size: var(--ow-type-meta); font-weight: 700; }
.ow-walkstep.is-current .ow-walkstep__title { color: var(--ow-color-brand-deep); }
.ow-walkstep.is-done .ow-walkstep__title { color: var(--ow-color-muted); }
.ow-walkstep__hint { color: var(--ow-color-muted); font-size: var(--ow-type-label); line-height: 17px; text-wrap: pretty; }

.ow-field__static { align-items: center; color: var(--ow-color-text); display: flex; font-size: var(--ow-type-body); font-weight: 600; margin: 0; min-height: var(--ow-control-h-lg); }
.ow-icontile--figure { font-size: var(--ow-type-meta); font-variant-numeric: tabular-nums; font-weight: 800; }

/* The support surface: no rail, one header bar over the content column. */
.ow-support { display: flex; flex-direction: column; min-height: 100vh; }
.ow-support__bar { background: var(--ow-color-surface); border-bottom: 1px solid var(--ow-color-border); padding: var(--ow-space-3) var(--ow-gutter-page); }
@media (max-width: 767px) { .ow-support__bar { padding: var(--ow-space-3) var(--ow-gutter-page-mobile); } }
/* A fact row that holds more facts than one line: wraps rather than scrolls. */
.ow-factrow--wrap { flex-wrap: wrap; }
/* A tier of facts inside a card body: no padding of its own, and a quiet
   value for what is on record rather than live. */
.ow-factrow--flush { padding: 0; }
.ow-fact__value--quiet { color: var(--ow-color-text-soft); font-weight: 600; }

/* ==========================================================================
   The instrument deck: one device's page under Hardware. A dark console with
   ambient glows behind a faint grid, a status orb that carries the live weight,
   and a grid of cards that each answer one question about the device. It
   reads only the `--ow-deck-*` family and is dark in both themes.
   ========================================================================== */
.ow-deck {
  background: var(--ow-deck-bg);
  border-radius: var(--ow-deck-radius);
  color: var(--ow-deck-text);
  overflow: hidden;
  position: relative;
}
.ow-deck__glow { border-radius: 50%; filter: blur(10px); pointer-events: none; position: absolute; }
.ow-deck__glow--a {
  animation: ow-deck-drift-a 16s ease-in-out infinite;
  background: radial-gradient(circle, var(--ow-deck-accent-glow), transparent 70%);
  height: 520px; right: -120px; top: -160px; width: 520px;
}
.ow-deck__glow--b {
  animation: ow-deck-drift-b 20s ease-in-out infinite;
  background: radial-gradient(circle, var(--ow-deck-link-glow), transparent 70%);
  bottom: -200px; height: 560px; left: -140px; width: 560px;
}
.ow-deck__mesh {
  background-image: linear-gradient(var(--ow-deck-grid-line) 1px, transparent 1px), linear-gradient(90deg, var(--ow-deck-grid-line) 1px, transparent 1px);
  background-size: 44px 44px;
  inset: 0; pointer-events: none; position: absolute;
}
.ow-deck__inner { margin: 0 auto; max-width: var(--ow-deck-max); padding: 36px 28px 80px; position: relative; }
@media (max-width: 767px) { .ow-deck__inner { padding: var(--ow-space-6) var(--ow-space-4) var(--ow-space-8); } }

/* Text roles on the deck: the theme's heading and link rules do not apply
   inside it, so every role names its own deck colour. */
.ow-deck__back {
  align-items: center; color: var(--ow-deck-muted); display: inline-flex; font-size: var(--ow-type-meta);
  font-weight: 600; gap: var(--ow-space-2); letter-spacing: var(--ow-tracking-wide); margin-bottom: 28px;
}
.ow-deck__back:hover, .ow-deck__back:focus { color: var(--ow-deck-text); }
.ow-deck__eyebrow { color: var(--ow-deck-accent); font-size: var(--ow-type-label); font-weight: 700; letter-spacing: 0.14em; margin-bottom: 10px; text-transform: uppercase; }
.ow-deck__title { color: var(--ow-deck-text); font-size: var(--ow-deck-title); font-weight: 700; letter-spacing: var(--ow-tracking-tight); line-height: 1.05; margin: 0 0 var(--ow-space-3); }
@media (max-width: 767px) { .ow-deck__title { font-size: var(--ow-type-page-title); } }
.ow-deck__meta { color: var(--ow-deck-muted); display: flex; flex-wrap: wrap; font-size: 13.5px; font-weight: 500; gap: 14px; }
.ow-deck__sep { color: var(--ow-deck-border-strong); }
.ow-deck__mono { color: var(--ow-deck-mono); font-family: var(--ow-font-mono); }
.ow-deck__label { color: var(--ow-deck-label); font-size: var(--ow-type-micro); font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; }
.ow-deck__value { color: var(--ow-deck-text); font-size: 15px; font-weight: 600; margin-top: 2px; }
.ow-deck__note { color: var(--ow-deck-muted); font-size: 13.5px; line-height: 1.6; margin: 0; }
.ow-deck__note strong { color: var(--ow-deck-text-soft); font-weight: 600; }
.ow-deck__note a, .ow-deck__fact-v a, .ow-deck__value a { color: var(--ow-deck-link); }
.ow-deck__note a:hover, .ow-deck__fact-v a:hover, .ow-deck__value a:hover { color: var(--ow-deck-text); }
.ow-deck__small { color: var(--ow-deck-muted); font-size: var(--ow-type-meta); margin: 0; }
.ow-deck__small .ow-deck__mono { color: var(--ow-deck-text-soft); }
.ow-deck__tag { color: var(--ow-deck-faint); font-family: var(--ow-font-mono); font-size: var(--ow-type-micro); font-weight: 600; }

/* The head: identity on the left, the gauge on the right. */
.ow-deck__head {
  align-items: flex-start; border-bottom: 1px solid var(--ow-deck-border-soft); display: flex; flex-wrap: wrap;
  gap: var(--ow-space-7); justify-content: space-between; margin-bottom: var(--ow-space-7); padding-bottom: 28px;
}
.ow-deck__identity { min-width: 0; }
.ow-deck__actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: var(--ow-space-5); }

/* Pills: a state, never an action. */
.ow-deck__pill {
  align-items: center; border: 1px solid var(--ow-deck-border-strong); border-radius: var(--ow-radius-pill); color: var(--ow-deck-text);
  display: inline-flex; font-size: 12.5px; font-weight: 700; gap: 7px; padding: 7px 14px;
}
.ow-deck__pill--sm { font-size: 11.5px; gap: 6px; padding: 5px 12px; }
.ow-deck__pill--ok { background: var(--ow-deck-ok-tint); border-color: var(--ow-deck-ok-edge); color: var(--ow-deck-ok); }
.ow-deck__pill--warn { background: var(--ow-deck-warn-tint); border-color: var(--ow-deck-warn-edge); color: var(--ow-deck-warn); }
.ow-deck__pill--accent { background: var(--ow-deck-accent-tint); border-color: var(--ow-deck-accent-edge); color: var(--ow-deck-accent); }
.ow-deck__pill--danger { background: var(--ow-deck-danger-tint); border-color: var(--ow-deck-danger-edge); color: var(--ow-deck-danger); }
.ow-deck__pill--neutral { background: var(--ow-deck-chip); border-color: var(--ow-deck-border-chip); color: var(--ow-deck-muted); }

/* Buttons on the deck: one ghost, one amber. */
.ow-deck__ghost {
  align-items: center; background: transparent; border: 1px solid var(--ow-deck-border-strong); border-radius: var(--ow-radius-pill); color: var(--ow-deck-text);
  cursor: pointer; display: inline-flex; font-family: inherit; font-size: 12.5px; font-weight: 600; gap: var(--ow-space-2); padding: 7px 16px;
  transition: border-color var(--ow-transition-fast), color var(--ow-transition-fast);
}
.ow-deck__ghost:hover, .ow-deck__ghost:focus { border-color: var(--ow-deck-accent); color: var(--ow-deck-accent); }
.ow-deck__primary {
  background: var(--ow-deck-accent); border: 0; border-radius: var(--ow-radius-md); color: var(--ow-deck-accent-ink); cursor: pointer;
  font-family: inherit; font-size: 12.5px; font-weight: 700; padding: 8px 16px; transition: background var(--ow-transition-fast);
}
.ow-deck__primary:hover, .ow-deck__primary:focus { background: var(--ow-deck-accent-soft); color: var(--ow-deck-accent-ink); }

/* The gauge: a pulsing orb, a live dot and the figure the gateway is sending. */
.ow-deck__gauge { align-items: center; display: flex; flex-direction: column; flex-shrink: 0; gap: 10px; }
.ow-deck__orb { height: var(--ow-deck-orb-size); position: relative; width: var(--ow-deck-orb-size); }
.ow-deck__ring { animation: ow-deck-ring-sweep 14s linear infinite; border: 1px dashed var(--ow-deck-accent-edge); border-radius: 50%; inset: -6px; position: absolute; }
.ow-deck__core {
  align-items: center; animation: ow-deck-orb-pulse 3.2s ease-in-out infinite; background: var(--ow-deck-orb); border-radius: 50%;
  color: var(--ow-deck-accent); display: flex; font-size: 30px; inset: 0; justify-content: center; position: absolute;
}
.ow-deck__live { align-items: center; display: flex; gap: 7px; }
.ow-deck__live-dot { animation: ow-deck-live-dot 1.6s ease-in-out infinite; background: var(--ow-deck-ok); border-radius: 50%; height: 7px; width: 7px; }
.ow-deck__live-dot--stale { animation: none; background: var(--ow-deck-warn); }
.ow-deck__live-dot--off { animation: none; background: var(--ow-deck-border-strong); }
.ow-deck__live-text { color: var(--ow-deck-faint); font-size: var(--ow-type-micro); font-weight: 700; letter-spacing: 0.1em; text-transform: uppercase; }
.ow-deck__figure {
  color: var(--ow-deck-muted); font-family: var(--ow-font-mono); font-size: var(--ow-deck-figure); font-variant-numeric: tabular-nums;
  font-weight: 600; letter-spacing: var(--ow-tracking-tight); transition: color var(--ow-dur-state) var(--ow-ease);
}
.ow-deck__figure-unit { color: var(--ow-deck-faint); font-size: var(--ow-type-meta); margin-left: var(--ow-space-1); }
.ow-deck__gauge.is-live .ow-deck__figure { color: var(--ow-deck-text); }
.ow-deck__gauge.is-stable .ow-deck__figure { color: var(--ow-deck-accent); }
.ow-deck__figure-state { color: var(--ow-deck-faint); font-size: var(--ow-type-micro); font-weight: 600; }
.ow-deck__gauge.is-stable .ow-deck__figure-state { color: var(--ow-deck-ok); }

/* Cards. */
.ow-deck__cards { display: grid; gap: var(--ow-space-5); grid-template-columns: repeat(auto-fit, minmax(360px, 1fr)); }
@media (max-width: 767px) { .ow-deck__cards { grid-template-columns: 1fr; } }
.ow-deck__card {
  background: var(--ow-deck-surface); border: 1px solid var(--ow-deck-border); border-radius: var(--ow-deck-radius);
  box-shadow: var(--ow-deck-inset); min-width: 0; padding: 26px;
}
.ow-deck__card--wide { grid-column: 1 / -1; }
.ow-deck__card--row { align-items: center; display: flex; gap: var(--ow-space-5); }
.ow-deck__cardhead { align-items: center; display: flex; gap: var(--ow-space-3); margin-bottom: 18px; }
.ow-deck__cardhead--between { flex-wrap: wrap; justify-content: space-between; }
.ow-deck__cardhead--between > .ow-deck__cardhead { margin-bottom: 0; }
.ow-deck__tile {
  align-items: center; border-radius: var(--ow-radius-md); display: flex; flex-shrink: 0; font-size: 15px; height: 36px; justify-content: center; width: 36px;
  background: var(--ow-deck-chip); color: var(--ow-deck-muted);
}
.ow-deck__tile--ok { background: var(--ow-deck-ok-tint); color: var(--ow-deck-ok); }
.ow-deck__tile--accent { background: var(--ow-deck-accent-tint); color: var(--ow-deck-accent); }
.ow-deck__tile--link { background: var(--ow-deck-link-tint); color: var(--ow-deck-link); }
.ow-deck__tile--warn { background: var(--ow-deck-warn-tint); color: var(--ow-deck-warn); }
.ow-deck__tile--danger { background: var(--ow-deck-danger-tint); color: var(--ow-deck-danger); }

/* Key-value facts and mono chips inside a card. */
.ow-deck__facts { display: grid; font-size: var(--ow-type-meta); gap: var(--ow-space-3) var(--ow-space-5); grid-template-columns: 1fr 1fr; margin-bottom: var(--ow-space-4); }
.ow-deck__fact { min-width: 0; }
.ow-deck__fact-k { color: var(--ow-deck-faint); margin-bottom: 3px; }
.ow-deck__fact-v { color: var(--ow-deck-text-soft); font-family: var(--ow-font-mono); overflow-wrap: anywhere; }
.ow-deck__fact-v--absent { color: var(--ow-deck-warn); font-family: var(--ow-font-family); font-weight: 600; }
.ow-deck__chips { display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }
.ow-deck__chip {
  background: var(--ow-deck-chip); border: 1px solid var(--ow-deck-border-chip); border-radius: 7px; color: var(--ow-deck-mono);
  font-family: var(--ow-font-mono); font-size: 11.5px; padding: 5px 10px;
}

/* The agent link: indicator on the left, PC on the right, and a wire between
   them that flows while the PC is live and rests when it is not. */
.ow-deck__wire { align-items: center; display: flex; margin-bottom: 18px; }
.ow-deck__node {
  align-items: center; background: var(--ow-deck-chip); border: 1px solid var(--ow-deck-link); border-radius: 50%; color: var(--ow-deck-link);
  display: flex; flex-shrink: 0; font-size: var(--ow-type-label); height: 30px; justify-content: center; width: 30px;
}
.ow-deck__wire-line {
  animation: ow-deck-flow 1s linear infinite; background-image: repeating-linear-gradient(90deg, var(--ow-deck-link) 0 8px, transparent 8px 16px);
  background-size: 40px 2px; flex: 1; height: 2px; margin: 0 -1px;
}
.ow-deck__wire.is-off .ow-deck__node { border-color: var(--ow-deck-border-strong); color: var(--ow-deck-faint); }
.ow-deck__wire.is-off .ow-deck__wire-line { animation: none; background-image: repeating-linear-gradient(90deg, var(--ow-deck-border-strong) 0 8px, transparent 8px 16px); }

/* The verification stamp. */
.ow-deck__stamp {
  align-items: center; border: 2px solid var(--ow-deck-ok); border-radius: 50%; color: var(--ow-deck-ok); display: flex; flex-shrink: 0;
  font-size: 22px; height: 58px; justify-content: center; transform: rotate(-8deg); width: 58px;
}
.ow-deck__stamp--off { border-color: var(--ow-deck-border-strong); border-style: dashed; color: var(--ow-deck-faint); }

/* Configured against detected, a confidence bar and the frame log. */
.ow-deck__diff { display: grid; gap: var(--ow-space-4); grid-template-columns: 1fr 1fr; margin-bottom: var(--ow-space-5); }
@media (max-width: 767px) { .ow-deck__diff, .ow-deck__facts { grid-template-columns: 1fr; } }
.ow-deck__panel { background: var(--ow-deck-surface-deep); border: 1px solid var(--ow-deck-border-soft); border-radius: var(--ow-deck-radius-panel); padding: 14px 16px; }
.ow-deck__panel-h { color: var(--ow-deck-faint); font-size: 10.5px; font-weight: 700; letter-spacing: 0.1em; margin-bottom: 10px; text-transform: uppercase; }
.ow-deck__panel-body { color: var(--ow-deck-mono); display: flex; flex-direction: column; font-family: var(--ow-font-mono); font-size: var(--ow-type-meta); gap: 5px; }
.ow-deck__panel-body .is-changed { color: var(--ow-deck-accent); font-weight: 600; }
.ow-deck__panel-body .is-empty { color: var(--ow-deck-faint); }
.ow-deck__bar-label { color: var(--ow-deck-faint); display: flex; font-size: 11.5px; justify-content: space-between; margin-bottom: var(--ow-space-2); }
.ow-deck__bar { background: var(--ow-deck-chip); border-radius: var(--ow-radius-sm); height: 6px; margin-bottom: var(--ow-space-5); overflow: hidden; }
.ow-deck__bar-fill { background: linear-gradient(90deg, var(--ow-deck-accent), var(--ow-deck-accent-soft)); border-radius: var(--ow-radius-sm); height: 100%; width: var(--ow-deck-bar, 0%); }
.ow-deck__log {
  background: var(--ow-deck-surface-log); border: 1px solid var(--ow-deck-border-soft); border-radius: var(--ow-deck-radius-panel); color: var(--ow-deck-ok);
  font-family: var(--ow-font-mono); font-size: 12.5px; line-height: 1.7; overflow-x: auto; padding: 14px 16px; white-space: pre;
}
.ow-deck__log--dim { color: var(--ow-deck-ok-dim); }

/* Missing facts as a list on the deck, and a notice for a state with nothing
   to list yet. */
.ow-deck__table { border-collapse: collapse; font-size: var(--ow-type-meta); margin-top: var(--ow-space-4); width: 100%; }
.ow-deck__table th { color: var(--ow-deck-faint); font-size: 10.5px; font-weight: 700; letter-spacing: 0.1em; padding: 0 0 var(--ow-space-2); text-align: left; text-transform: uppercase; }
.ow-deck__table td { border-top: 1px solid var(--ow-deck-border-soft); color: var(--ow-deck-muted); padding: var(--ow-space-2) var(--ow-space-4) var(--ow-space-2) 0; vertical-align: top; }
.ow-deck__table td:first-child { color: var(--ow-deck-mono); font-family: var(--ow-font-mono); }
.ow-deck__notice {
  align-items: flex-start; background: var(--ow-deck-surface-deep); border: 1px solid var(--ow-deck-border-soft); border-radius: var(--ow-deck-radius-panel);
  color: var(--ow-deck-muted); display: flex; font-size: 13.5px; gap: var(--ow-space-3); line-height: 1.6; padding: 14px 16px;
}
.ow-deck__notice > i { color: var(--ow-deck-link); flex-shrink: 0; margin-top: 3px; }
.ow-deck__notice--warn { border-color: var(--ow-deck-warn-edge); }
.ow-deck__notice--warn > i { color: var(--ow-deck-warn); }
.ow-deck__notice p { margin: 0; }
.ow-deck__notice strong { color: var(--ow-deck-text-soft); }
.ow-deck__form { margin: 0; }
.ow-deck__chips--after { margin-top: var(--ow-space-4); }
.ow-deck__chips--after-sm { margin-top: 10px; }
.ow-deck__small--after { margin-top: var(--ow-space-4); }
.ow-deck__label--stamp { margin-bottom: var(--ow-space-1); }
.ow-deck__value--stamp { margin-bottom: var(--ow-space-1); margin-top: 0; }

/* Reveal: the head and each card rise in, staggered. Content is visible
   without the animation, so a reduced-motion setting simply shows the page. */
.ow-deck__reveal { animation: ow-deck-reveal 0.7s var(--ow-ease-out) both; animation-delay: calc(var(--ow-deck-i, 0) * 0.09s); }
@keyframes ow-deck-reveal { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: translateY(0); } }
@keyframes ow-deck-orb-pulse {
  0%, 100% { box-shadow: 0 0 0 0 var(--ow-deck-accent-glow), 0 0 34px 8px var(--ow-deck-accent-tint); }
  50% { box-shadow: 0 0 0 12px transparent, 0 0 60px 18px var(--ow-deck-accent-glow); }
}
@keyframes ow-deck-ring-sweep { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
@keyframes ow-deck-live-dot { 0%, 100% { opacity: 1; transform: scale(1); } 50% { opacity: 0.3; transform: scale(0.65); } }
@keyframes ow-deck-drift-a { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(-3%, 3%) scale(1.08); } }
@keyframes ow-deck-drift-b { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(4%, -2%) scale(1.1); } }
@keyframes ow-deck-flow { to { background-position: 40px 0; } }
@media (prefers-reduced-motion: reduce) {
  .ow-deck__reveal, .ow-deck__glow, .ow-deck__ring, .ow-deck__core, .ow-deck__live-dot, .ow-deck__wire-line { animation: none; }
}

/* ── Printable ticket ──────────────────────────────────────────────────────
 * One completed ticket as an A4 document (`tickets/print`, `layouts/print`).
 * On screen it is a sheet on the page with its controls above; printed, the
 * controls go and the sheet is the page. Light only: paper has no theme. */
@page { size: A4; margin: 5px 12mm; }
.ow-printpage { background: var(--ow-color-page-bg); color: var(--ow-color-text); font-family: var(--ow-font-family); margin: 0; padding: var(--ow-space-5) var(--ow-space-4); }
.ow-printbar { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-3); margin: 0 auto var(--ow-space-4); max-width: 210mm; }
.ow-printbar__note { color: var(--ow-color-muted); flex: 1 1 16rem; font-size: 13px; margin: 0; }
/* The frame a completed ticket prints itself from: in the page, never on it */
.ow-printframe { border: 0; height: 0; left: -9999px; position: absolute; top: 0; width: 0; }
.ow-printdoc { background: var(--ow-color-surface); border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-card); box-shadow: var(--ow-card-shadow); box-sizing: border-box; color: var(--ow-color-text); display: flex; flex-direction: column; font-size: 12px; line-height: 1.45; margin: 0 auto; max-width: 210mm; min-height: 297mm; padding: 14mm 12mm; }
.ow-printdoc__head { align-items: flex-start; border-bottom: 2px solid var(--ow-color-brand); display: flex; flex-wrap: wrap; gap: var(--ow-space-4); justify-content: space-between; padding-bottom: var(--ow-space-3); }
.ow-printdoc__site, .ow-printdoc__ident, .ow-printdoc__party { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ow-printdoc__brand { align-items: flex-start; display: flex; gap: var(--ow-space-3); min-width: 0; }
.ow-printdoc__logo { flex: none; height: 16mm; max-width: 42mm; object-fit: contain; object-position: left top; width: auto; }
.ow-printdoc__operator { color: var(--ow-color-muted); }
.ow-printdoc__ident { align-items: flex-end; text-align: right; }
.ow-printdoc__eyebrow, .ow-printdoc__label, .ow-printdoc__facts dt, .ow-printdoc__times dt, .ow-printdoc__reglist dt { color: var(--ow-color-muted); font-size: 10px; font-weight: 700; letter-spacing: 0.06em; text-transform: uppercase; }
.ow-printdoc__sitename { color: var(--ow-color-heading); font-size: 16px; font-weight: 700; }
.ow-printdoc__title { color: var(--ow-color-heading); font-size: 20px; font-weight: 800; letter-spacing: -0.01em; margin: 0; }
.ow-printdoc__number { font-family: var(--ow-font-mono); font-size: 18px; font-weight: 700; }
.ow-printdoc__status { color: var(--ow-color-muted); font-size: 12px; }
.ow-printdoc__facts { display: grid; gap: var(--ow-space-2) var(--ow-space-4); grid-template-columns: repeat(4, minmax(0, 1fr)); margin: var(--ow-space-3) 0 0; }
.ow-printdoc__facts div { min-width: 0; }
.ow-printdoc__facts dd { font-weight: 600; margin: 0; overflow-wrap: anywhere; }
.ow-printdoc__section { border-top: 1px solid var(--ow-color-border-soft); margin-top: var(--ow-space-3); padding-top: var(--ow-space-3); break-inside: avoid; }
/* The section a ticket closes on sits at the foot of the sheet rather than
 * directly under a short waste table: it absorbs whatever vertical space the
 * sections above it left, and the foot's references follow it immediately. A
 * ticket whose content fills the sheet leaves nothing to absorb, so the
 * section simply keeps its place and the document runs on as it always did. */
.ow-printdoc > .ow-printdoc__section--completion { margin-top: auto; }
.ow-printdoc__h2 { color: var(--ow-color-heading); font-size: 12px; font-weight: 800; letter-spacing: 0.04em; margin: 0 0 var(--ow-space-2); text-transform: uppercase; }
.ow-printdoc__parties { display: grid; gap: var(--ow-space-3) var(--ow-space-4); grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-printdoc__party span { overflow-wrap: anywhere; }
.ow-printdoc__strong { color: var(--ow-color-heading); font-weight: 700; }
.ow-printdoc__mono { font-family: var(--ow-font-mono); }
.ow-printdoc__weights { display: grid; gap: var(--ow-space-3); grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ow-printdoc__weights > div { border: 1px solid var(--ow-color-border); border-radius: var(--ow-radius-sm); display: flex; flex-direction: column; padding: var(--ow-space-2) var(--ow-space-3); }
.ow-printdoc__weights > div.is-net { border-color: var(--ow-color-heading); border-width: 2px; }
.ow-printdoc__figure { color: var(--ow-color-heading); font-size: 20px; font-variant-numeric: tabular-nums; font-weight: 800; }
.ow-printdoc__figure small { color: var(--ow-color-muted); font-size: 11px; font-weight: 600; }
.ow-printdoc__note { color: var(--ow-color-muted); margin: var(--ow-space-2) 0 0; }
.ow-printdoc__times { display: flex; flex-wrap: wrap; gap: var(--ow-space-1) var(--ow-space-5); margin: var(--ow-space-2) 0 0; }
.ow-printdoc__times > div { align-items: baseline; display: flex; gap: var(--ow-space-2); min-width: 0; }
.ow-printdoc__times dd { font-weight: 600; margin: 0; overflow-wrap: anywhere; }
.ow-printdoc__table { border-collapse: collapse; width: 100%; }
.ow-printdoc__table th, .ow-printdoc__table td { border-bottom: 1px solid var(--ow-color-border-soft); padding: 5px 6px; text-align: left; vertical-align: top; }
.ow-printdoc__table thead th { border-bottom: 1px solid var(--ow-color-border-strong); color: var(--ow-color-muted); font-size: 10px; font-weight: 700; letter-spacing: 0.05em; text-transform: uppercase; }
.ow-printdoc__table tfoot th, .ow-printdoc__table tfoot td { border-bottom: 0; border-top: 1px solid var(--ow-color-border-strong); }
.ow-printdoc__table tr { break-inside: avoid; }
.ow-printdoc__col--pos { width: 4%; }
.ow-printdoc__col--waste { width: 25%; }
.ow-printdoc__col--ewc { width: 10%; }
.ow-printdoc__col--class { width: 29%; }
.ow-printdoc__col--route { width: 14%; }
.ow-printdoc__col--weight { width: 18%; }
.ow-printdoc__table.is-charged .ow-printdoc__col--waste { width: 21%; }
.ow-printdoc__table.is-charged .ow-printdoc__col--class { width: 24%; }
.ow-printdoc__table.is-charged .ow-printdoc__col--route { width: 11%; }
.ow-printdoc__table.is-charged .ow-printdoc__col--weight { width: 13%; }
.ow-printdoc__col--rate { width: 11%; }
.ow-printdoc__col--amount { width: 10%; }
.ow-printdoc__table .is-num { font-variant-numeric: tabular-nums; text-align: right; }
.ow-printdoc__table .is-num .ow-printdoc__strong { white-space: nowrap; }
.ow-printdoc__table td > span { display: block; }
.ow-printdoc__cellnote { color: var(--ow-color-muted); overflow-wrap: anywhere; }
.ow-printdoc__code { display: block; white-space: nowrap; }
.ow-printdoc__refs { display: flex; flex-wrap: wrap; gap: var(--ow-space-2) var(--ow-space-5); list-style: none; margin: 0; padding: 0; }
.ow-printdoc__refs li { align-items: baseline; display: flex; flex-wrap: wrap; gap: 1px var(--ow-space-3); min-width: 0; }
.ow-printdoc__refs span { overflow-wrap: anywhere; }
.ow-printdoc__signatories { display: grid; gap: var(--ow-space-3) var(--ow-space-4); grid-template-columns: repeat(2, minmax(0, 1fr)); margin-top: var(--ow-space-2); }
.ow-printdoc__signatory { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ow-printdoc__signatory .ow-printdoc__label + .ow-printdoc__label { margin-top: var(--ow-space-1); }
.ow-printdoc__signaturebox { align-items: center; border: 1px solid var(--ow-color-border-strong); border-radius: var(--ow-radius-sm); box-sizing: border-box; display: flex; height: 18mm; justify-content: center; max-width: 100%; overflow: hidden; padding: var(--ow-space-1) var(--ow-space-2); width: 62mm; }
.ow-printdoc__signatureink { max-height: 100%; max-width: 100%; object-fit: contain; }
.ow-printdoc__regulatory { break-inside: avoid; flex: 1 1 100%; min-width: 0; }
.ow-printdoc__reglist { display: grid; gap: var(--ow-space-2) var(--ow-space-4); grid-template-columns: repeat(3, minmax(0, 1fr)); margin: 0; }
.ow-printdoc__reglist > div { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
.ow-printdoc__reglist dd { display: flex; flex-direction: column; gap: 1px; margin: 0; }
.ow-printdoc__reglist span { overflow-wrap: anywhere; }
.ow-printdoc__testmark { align-self: flex-start; border: 1px solid currentColor; border-radius: var(--ow-radius-sm); font-size: 9px; font-weight: 700; letter-spacing: 0.04em; margin-top: 1px; padding: 0 var(--ow-space-1); text-transform: uppercase; }
/* The site's own wording at the foot of a ticket: the full width of the content
 * area, above the document's foot, set as restrained body text with no box or
 * tint around it. `pre-wrap` keeps the newlines and blank lines the operator
 * typed while still wrapping a long line to the measure, and `anywhere` keeps
 * an unbroken string from pushing the sheet sideways. It is allowed to break
 * across pages: a long statement runs on rather than being clipped. */
.ow-printdoc__message { border-top: 1px solid var(--ow-color-border-soft); margin-top: var(--ow-space-3); padding-top: var(--ow-space-2); }
.ow-printdoc__messagetext { margin: var(--ow-space-1) 0 0; overflow-wrap: anywhere; white-space: pre-wrap; }
.ow-printdoc__foot { align-items: flex-end; border-top: 1px solid var(--ow-color-border-strong); color: var(--ow-color-muted); display: flex; flex-wrap: wrap; font-size: 10px; gap: var(--ow-space-2) var(--ow-space-4); justify-content: space-between; margin-top: var(--ow-space-3); padding-top: var(--ow-space-2); }
/* A phone shows the sheet in one column and lets the waste table scroll. */
@media (max-width: 640px) {
  .ow-printpage { padding: var(--ow-space-3) var(--ow-space-4); }
  .ow-printdoc { min-height: 0; padding: var(--ow-space-4); }
  .ow-printdoc__ident { align-items: flex-start; text-align: left; }
  .ow-printdoc__facts, .ow-printdoc__parties, .ow-printdoc__reglist { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .ow-printdoc__section { overflow-x: auto; }
  .ow-printdoc__table { min-width: 560px; }
  .ow-printdoc__figure { font-size: 16px; }
}
/* On paper the document is set tighter than on screen so an ordinary load of
 * one to three waste items, with its classifications, addresses, charges and
 * regulatory references, falls on a single A4 page. The density comes from
 * leading, padding and the rules between sections — the body text stays at its
 * screen size, and nothing is hidden, clipped or dropped to make the page.
 *
 * The sheet is the height of the page box so the section a ticket closes on,
 * and the foot below it, fall at the bottom of the paper and not wherever a
 * short waste table happened to end. */
@media print {
  html, .ow-printpage { background: var(--ow-color-surface); padding: 0; }
  .ow-printbar { display: none; }
  .ow-printdoc { border: 0; border-radius: 0; box-shadow: none; line-height: 1.25; max-width: none; min-height: 290mm; padding: 0; }
  .ow-printdoc__facts { grid-template-columns: repeat(4, minmax(0, 1fr)); margin-top: var(--ow-space-2); }
  .ow-printdoc__parties { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .ow-printdoc__reglist { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .ow-printdoc__section { margin-top: var(--ow-space-1); padding-top: var(--ow-space-1); }
  .ow-printdoc__head { padding-bottom: var(--ow-space-1); }
  .ow-printdoc__h2 { margin-bottom: var(--ow-space-1); }
  .ow-printdoc__title { font-size: 17px; }
  .ow-printdoc__sitename { font-size: 14px; }
  .ow-printdoc__logo { height: 14mm; max-width: 38mm; }
  .ow-printdoc__number { font-size: 15px; }
  .ow-printdoc__weights { gap: var(--ow-space-2); }
  .ow-printdoc__weights > div { padding: 1px var(--ow-space-2); }
  .ow-printdoc__figure { font-size: 17px; }
  .ow-printdoc__times { margin-top: var(--ow-space-1); }
  .ow-printdoc__table th, .ow-printdoc__table td { padding: 2px 5px; }
  .ow-printdoc__signaturebox { height: 15mm; }
  .ow-printdoc__note { margin-top: var(--ow-space-1); }
  .ow-printdoc__message { margin-top: var(--ow-space-1); padding-top: var(--ow-space-1); }
  .ow-printdoc__foot { margin-top: var(--ow-space-1); padding-top: var(--ow-space-1); }
  .ow-printdoc__section { overflow: visible; }
  .ow-printdoc__table { min-width: 0; }
}

/* ── Self-serve sign-up and first-account setup ─────────────────────────────
 * The sign-up form is the auth panel's one wider form. The setup layout puts a
 * record's own screen beside the setup guide; below 900px the guide stacks
 * above the screen it describes. */
.ow-auth__form--wide { max-width: 480px; }
.ow-fieldgrid--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (max-width: 767px) { .ow-fieldgrid--2 { grid-template-columns: minmax(0, 1fr); } }
.ow-input[aria-invalid="true"] { border-color: var(--ow-status-fail-fg); }
.ow-checklist { color: var(--ow-color-muted); display: grid; font-size: var(--ow-type-meta); gap: var(--ow-space-1); list-style: none; margin: 0; padding: 0; }
.ow-checklist li { align-items: center; display: flex; gap: var(--ow-space-2); }
.ow-status--xs { font-size: 10px; font-weight: 700; height: 18px; width: 18px; }
.ow-icontile--lg { font-size: 20px; height: 48px; width: 48px; }
.ow-icontile--pass { background: var(--ow-status-pass-bg); color: var(--ow-status-pass-fg); }

/* First-account setup: the guided wizard, and the resume card that reopens it. */
.ow-setup__form { display: contents; }
.ow-setup-resume { border-color: var(--ow-color-brand); }
.ow-setup-resume__body { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-4); justify-content: space-between; }

.ow-modal--setup { max-height: min(92vh, 900px); width: min(720px, 100%); }
.ow-wizard__rail { align-items: center; display: flex; flex: none; gap: var(--ow-space-3); padding: 0 var(--ow-space-5) var(--ow-space-4); }
.ow-wizard__rail .ow-wizard__steps { flex: 1 1 auto; padding: 0; }

.ow-setup__intro { color: var(--ow-color-muted); font-size: var(--ow-type-body); line-height: var(--ow-line-height); margin: 0; text-wrap: pretty; }
.ow-setup__errors { display: grid; gap: var(--ow-space-1); margin: 0; padding-left: var(--ow-space-4); }

.ow-setup__terms { background: var(--ow-color-surface-alt); border: 1px solid var(--ow-color-border-soft); border-radius: var(--ow-radius-md); padding: var(--ow-space-3) var(--ow-space-4); }
.ow-setup__terms > summary { cursor: pointer; font-size: var(--ow-type-meta); font-weight: 600; }
.ow-setup__terms > summary:focus-visible { outline: 2px solid var(--ow-color-brand); outline-offset: 2px; }
.ow-setup__terms .ow-deflist { margin-top: var(--ow-space-3); }

.ow-setup__help { align-items: center; border-top: 1px solid var(--ow-color-border-soft); display: flex; flex-wrap: wrap; gap: var(--ow-space-2) var(--ow-space-3); justify-content: space-between; padding-top: var(--ow-space-3); }

.ow-setup__plan { display: grid; list-style: none; margin: 0; padding: 0; }
.ow-setup__planrow { align-items: start; border-top: 1px solid var(--ow-color-border-soft); display: grid; gap: var(--ow-space-3); grid-template-columns: 18px minmax(0, 1fr) auto; padding: var(--ow-space-3) 0; }
.ow-setup__planrow:first-child { border-top: 0; }
.ow-setup__planlabel { font-weight: 600; }

.ow-setup__review { display: grid; list-style: none; margin: 0; padding: 0; }
.ow-setup__reviewrow { align-items: center; border-top: 1px solid var(--ow-color-border-soft); display: grid; gap: var(--ow-space-3); grid-template-columns: 18px minmax(0, 1fr) auto; padding: var(--ow-space-3) 0; }
.ow-setup__reviewrow:first-child { border-top: 0; }

/* Search-select: choosing from a reference list by typing, never by scrolling
   it. One primitive, two shapes. `--multi` keeps an ordered list of chosen
   rows beneath the box (EWC classification); the plain shape holds one chosen
   row and swaps the box for it (a POP, a disposal or recovery route). What a
   row may say about an entry is the caller's business, not this file's. */
.ow-searchselect { display: grid; gap: var(--ow-space-3); }
.ow-searchselect__results { display: grid; gap: var(--ow-space-2); list-style: none; margin: 0; max-height: 340px; overflow-y: auto; padding: 0; }
.ow-searchselect__results:empty { display: none; }
/* The matches are a surface the search opens. `display: grid` above would
   otherwise outrank the `hidden` attribute, and a closed list would still
   stand in the page. */
.ow-searchselect__results[hidden] { display: none; }
/* The control that opens and closes them reads as the quiet action it is, at
   the start of the line rather than stretched across the control's grid. */
.ow-searchselect > [data-search-select-toggle] { justify-self: start; text-align: left; }
.ow-searchselect__row { border: 1px solid var(--ow-color-border-soft); border-radius: var(--ow-radius-md); padding: var(--ow-space-3); }
.ow-searchselect__row.is-chosen { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand); }
.ow-searchselect__label { align-items: flex-start; cursor: pointer; display: grid; gap: var(--ow-space-2); grid-template-columns: auto minmax(0, 1fr); }
.ow-searchselect__head { align-items: center; display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }
.ow-searchselect__code { font-family: var(--ow-font-mono); font-size: var(--ow-type-card-title); font-weight: 600; letter-spacing: var(--ow-tracking-tight); }
.ow-searchselect__legal { color: var(--ow-color-text); font-size: var(--ow-type-body); line-height: var(--ow-line-height); margin: var(--ow-space-1) 0 0; text-wrap: pretty; }
.ow-searchselect__ours { color: var(--ow-color-muted); font-size: var(--ow-type-meta); line-height: var(--ow-line-height); margin: var(--ow-space-1) 0 0; text-wrap: pretty; }
.ow-searchselect__source { color: var(--ow-color-faint); font-size: var(--ow-type-micro); text-transform: uppercase; letter-spacing: var(--ow-tracking-wide); }
.ow-searchselect__chosen { display: grid; gap: var(--ow-space-2); list-style: none; margin: 0; padding: 0; }
.ow-searchselect__chosenrow { align-items: center; background: var(--ow-color-surface-alt); border-radius: var(--ow-radius-md); display: grid; gap: var(--ow-space-2); grid-template-columns: auto minmax(0, 1fr) auto; padding: var(--ow-space-2) var(--ow-space-3); }
.ow-searchselect--single .ow-searchselect__chosenrow { grid-template-columns: minmax(0, 1fr) auto; }
/* The default row carries its position before the body, as an ordered EWC
   classification does. A reference list is not ordered that way and its row has
   no number, so the body takes the width and the remove button stays on the
   right edge however long or short the row reads. */
.ow-searchselect--multi .ow-searchselect__chosenrow { grid-template-columns: minmax(0, 1fr) auto; }
/* A filter in a criteria band, several across one row: the same control at the
   measure a report's criteria have for it. The chosen values are chips rather
   than rows, so it carries no `__chosenrow`, and the matches are bounded
   shorter because the list sits above the rest of the form. */
.ow-searchselect--filter { align-content: start; gap: var(--ow-space-2); }
/* Several pickers share a grid row, and one of them opening its matches
   must not stretch the others: a stretched search box leaves its icon
   centred on empty space below the field. */
.ow-searchselect--filter .ow-search { flex: 0 0 auto; }
.ow-searchselect--filter .ow-searchselect__results { max-height: 200px; }
.ow-searchselect--filter .ow-searchselect__row { padding: var(--ow-space-2) var(--ow-space-3); }
.ow-searchselect--filter .ow-searchselect__label { align-items: center; gap: var(--ow-space-3); }
.ow-searchselect__order { background: var(--ow-color-brand); border-radius: var(--ow-radius-pill); color: var(--ow-color-surface); display: inline-flex; font-size: var(--ow-type-micro); font-weight: 700; height: 20px; align-items: center; justify-content: center; width: 20px; }
.ow-searchselect__empty { color: var(--ow-color-muted); font-size: var(--ow-type-meta); margin: 0; }

@media (max-width: 767px) {
  .ow-wizard__rail { padding: 0 var(--ow-space-4) var(--ow-space-3); }
  .ow-setup__help { flex-direction: column; align-items: stretch; }
  .ow-setup__help .ow-btn { min-height: var(--ow-control-h-touch); width: 100%; }
  .ow-setup__planrow, .ow-setup__reviewrow { grid-template-columns: 18px minmax(0, 1fr); }
  .ow-setup__planrow > .ow-meta:last-child, .ow-setup__reviewrow > :last-child { grid-column: 2; }
  .ow-searchselect__results { max-height: none; }
  .ow-searchselect__row { padding: var(--ow-space-4) var(--ow-space-3); }
}

/* ==========================================================================
   Support: the contact panel, the screenshot preview and a collapsible form
   section. Three primitives the support surfaces need and no existing one
   answers; token-only, and each used by more than one screen.
   ========================================================================== */

/* The auth panel holds a sign-in form at 400px. A contact form is twice the
   fields and pairs them across two columns, so it takes a wider measure while
   keeping the same split, hero and panel. */
.ow-auth__form--wide { max-width: 520px; }

/* A whole screenshot, not a thumbnail: `.ow-imgframe` is a fixed 96px tile for
   a strip of capture images, and a page you are asking somebody to look at has
   to be legible. Bounded in height so the preview never pushes the modal's
   controls off the bottom, and scaled to fit rather than cropped, because the
   part that is cut off is often the part that is wrong. */
.ow-shotframe {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  display: flex;
  justify-content: center;
  max-height: 460px;
  overflow: hidden;
}
.ow-shotframe img { display: block; height: auto; max-height: 460px; max-width: 100%; object-fit: contain; width: auto; }
/* Inside the bug reporter the preview shares a bounded modal with the controls
   that send it, so it takes less of the height than it does on a page of its
   own. */
.ow-shotframe--sm, .ow-shotframe--sm img { max-height: 300px; }
@media (max-width: 767px) {
  .ow-shotframe, .ow-shotframe img { max-height: 220px; }
}

/* A form section that folds away. Used where something is worth stating but
   not worth making everybody read — what a bug report collects about their
   browser.

   `.ow-formsec` is deliberately NOT put on the <details> itself: a flex
   <details> keeps its contents visible when closed in WebKit and Blink, which
   is the whole behaviour. So the element stays a block and the section heading
   sits on its <summary>. The chevron is a real icon in the markup rather than
   generated content, so it takes the icon set the rest of the app uses. */
.ow-fold { display: block; }
.ow-fold > summary.ow-formsec__head { cursor: pointer; list-style: none; }
.ow-fold > summary.ow-formsec__head::-webkit-details-marker { display: none; }
.ow-fold > summary.ow-formsec__head:hover span { color: var(--ow-color-text); }
.ow-fold__mark { color: var(--ow-color-faint); flex: none; font-size: var(--ow-type-nano); transition: transform var(--ow-dur-state) var(--ow-ease); }
.ow-fold[open] > summary .ow-fold__mark { transform: rotate(180deg); }
.ow-fold__body { display: flex; flex-direction: column; gap: var(--ow-space-3); padding-top: var(--ow-space-3); }

/* ══ A record's own facts, as a field table ═══════════════════════════════
 * Label and value in two columns, grouped under a heading, for a stored
 * document a person has to read rather than edit — the payload one DEFRA
 * receipt version carries. Not `.ow-data-table`: there is one record here,
 * and its rows are its fields, so a header row would state nothing and the
 * sticky-column machinery has nothing to hold.
 *
 * At ≤767px the pair stacks, so a long value keeps the full width instead of
 * wrapping inside a half-width cell. */
.ow-fieldtable { border-top: 1px solid var(--ow-color-border-soft); display: grid; grid-template-columns: minmax(0, 13rem) minmax(0, 1fr); }
.ow-fieldtable__label,
.ow-fieldtable__value { border-bottom: 1px solid var(--ow-color-border-soft); padding: var(--ow-space-2) var(--ow-space-3); }
.ow-fieldtable__label { color: var(--ow-color-muted); font-size: var(--ow-type-meta); font-weight: 600; }
.ow-fieldtable__value { color: var(--ow-color-text); font-size: var(--ow-type-meta); overflow-wrap: anywhere; }
.ow-fieldtable__note { color: var(--ow-color-faint); font-size: var(--ow-type-label); }
.ow-fieldtable__group { background: var(--ow-color-surface-alt); }
@media (max-width: 767px) {
  .ow-fieldtable { grid-template-columns: minmax(0, 1fr); }
  .ow-fieldtable__label { border-bottom: 0; padding-bottom: 0; }
}

/* ══ Staggered entry for a list of results ════════════════════════════════
 * One orchestrated page load rather than a dozen hover tricks: each row or
 * card lifts in a beat after the one above it. The index is the only thing a
 * view states, as a custom property; the timing and the cap are here, so a
 * long page never waits on an ever-growing delay.
 *
 * Nothing depends on it: the animation only affects the entry, and a browser
 * that skips it — or a person who has asked for less motion — gets the same
 * page fully rendered. */
@keyframes ow-reveal-in { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.ow-reveal {
  animation: ow-reveal-in var(--ow-dur-state) var(--ow-ease-out) both;
  animation-delay: calc(min(var(--ow-reveal-index, 0), 12) * 24ms);
}
@media (prefers-reduced-motion: reduce) {
  .ow-reveal { animation: none; }
}

/* A request that is with DEFRA now. The dot pulses while it is in flight and
 * is the only thing on the row that moves, so "something is happening" is
 * legible without reading. */
.ow-inflight { align-items: center; display: inline-flex; gap: var(--ow-space-2); }
.ow-inflight::before {
  animation: ow-pulse 1.4s var(--ow-ease) infinite;
  background: currentColor;
  border-radius: 50%;
  content: '';
  height: 6px;
  width: 6px;
}
@media (prefers-reduced-motion: reduce) {
  .ow-inflight::before { animation: none; }
}

/* ── Reports ───────────────────────────────────────────────────────────────
 * The fixed-report section: the report menu, the criteria band, and the run
 * itself in a window over the page. The window is the report as it prints, so
 * printing hides the shell and lets the sheet become the page. Light only
 * where it is the sheet: paper has no theme. */
.ow-reportcard { align-items: stretch; cursor: pointer; font: inherit; min-height: 150px; text-align: left; }
.ow-reportcard:hover { border-color: var(--ow-color-brand); box-shadow: 0 8px 24px rgba(0, 0, 0, 0.08); }
.ow-reportcard__facts { margin-top: auto; }
.ow-reportcard.is-active { border-color: var(--ow-color-brand); }

/* A figure an operator is asked to read before the table. */
.ow-stat__figure--warning { color: var(--ow-status-warning-fg); }
.ow-stat__figure--fail { color: var(--ow-status-fail-fg); }

/* The run, over the page it was asked for. */
.ow-reportwin {
  align-items: stretch;
  background: rgba(20, 24, 30, 0.55);
  display: flex;
  inset: 0;
  justify-content: center;
  padding: var(--ow-space-4);
  position: fixed;
  z-index: 1300;
}
.ow-reportwin__frame {
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-2xl);
  box-shadow: 0 24px 64px rgba(0, 0, 0, 0.35);
  display: flex;
  flex-direction: column;
  max-height: 100%;
  min-height: 0;
  overflow: hidden;
  width: min(1360px, 100%);
}
.ow-reportwin__bar {
  align-items: center;
  background: var(--ow-color-surface-alt);
  border-bottom: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-3);
  padding: var(--ow-space-3) var(--ow-space-4);
}
.ow-reportwin__body { flex: 1 1 auto; min-height: 0; overflow: auto; padding: var(--ow-space-5) var(--ow-space-5) var(--ow-space-6); }
.ow-reportwin__head { border-bottom: 2px solid var(--ow-color-border-strong); padding-bottom: var(--ow-space-3); }
.ow-reportwin__foot { border-top: 1px solid var(--ow-color-border); padding-top: var(--ow-space-3); }
.ow-reportwin__signature { border-bottom: 1px solid var(--ow-color-border-strong); display: block; min-height: 26px; }

/* The figure beside Run report: how many rows the criteria currently match. */
.ow-reportmatch { font-size: 20px; font-variant-numeric: tabular-nums; line-height: 1; }

/* A date in a criteria band is a fixed measure, not a full-width field, and a
   grouping select is as wide as its longest answer. */
.ow-input--date { width: 170px; }
.ow-select--compact { width: auto; min-width: 170px; }

@media (max-width: 767px) {
  /* A touch-sized control sets its type larger, so a fixed measure would cut
     the date off: the field takes the width its own row has instead. */
  .ow-input--date { flex: 1 1 auto; min-width: 0; width: auto; }
  .ow-select--compact { width: 100%; }
}

/* In the report window the sheet itself scrolls, so the table keeps only its
 * sideways scroll: a second vertical scrollport inside a scrolling window
 * hides the row that closes the report. */
.ow-reportwin .ow-data-table__scroll { max-height: none; }

/* A grouped report table: the group it opens, and the figures that close it. */
.ow-data-table .is-tight { white-space: nowrap; }
.ow-data-table tbody tr.is-grouphead td { background: var(--ow-color-surface-alt); font-weight: 700; }
.ow-data-table tbody tr.is-subtotal td { background: var(--ow-color-surface-alt); border-top: 1px solid var(--ow-color-border); font-weight: 700; }
.ow-data-table tbody tr.is-subtotal:hover { background: var(--ow-color-surface-alt); }
.ow-data-table__group { align-items: center; display: inline-flex; gap: var(--ow-space-2); }
.ow-data-table__groupcount { color: var(--ow-color-muted); font-size: var(--ow-type-micro); font-weight: 400; }
.ow-data-table tfoot td { background: var(--ow-color-surface-alt); border-top: 2px solid var(--ow-color-border-strong); font-weight: 700; }

/* Visibility by medium. Screen-only controls never print; a printed-only
 * value replaces a control that cannot be printed. */
.ow-printonly { display: none; }

@media print {
  .ow-noprint { display: none !important; }
  .ow-printonly { display: inline !important; }
  .ow-nav, .ow-scrim, .ow-shell__main, .ow-reportwin__bar { display: none !important; }
  html, body { height: auto !important; overflow: visible !important; }
  .ow-reportwin {
    backdrop-filter: none !important;
    background: none !important;
    display: block !important;
    height: auto !important;
    inset: auto !important;
    overflow: visible !important;
    padding: 0 !important;
    position: static !important;
  }
  .ow-reportwin__frame {
    border: 0 !important;
    border-radius: 0 !important;
    box-shadow: none !important;
    display: block !important;
    height: auto !important;
    max-height: none !important;
    max-width: none !important;
    min-height: 0 !important;
    overflow: visible !important;
    width: auto !important;
  }
  .ow-reportwin__body {
    display: block !important;
    flex: none !important;
    height: auto !important;
    max-height: none !important;
    min-height: 0 !important;
    overflow: visible !important;
    padding: 0 !important;
  }
  .ow-reportwin .ow-data-table__wrap, .ow-reportwin .ow-data-table__scroll { max-height: none !important; overflow: visible !important; }
  .ow-reportwin .ow-data-table { min-width: 0 !important; table-layout: auto; width: 100% !important; }
  .ow-reportwin .ow-data-table th,
  .ow-reportwin .ow-data-table td,
  .ow-reportwin .ow-data-table .ow-badge,
  .ow-reportwin .ow-data-table .ow-mono { font-size: 9.5px !important; line-height: 1.3 !important; }
  .ow-reportwin .ow-data-table th, .ow-reportwin .ow-data-table td { overflow-wrap: break-word; padding: 2px 4px !important; white-space: normal; }
  /* On screen a transcribed column never wraps, because it can be scrolled to.
   * A sheet has no scroll: a column of codes that refuses to wrap takes the
   * width of its longest list and pushes the columns after it off the page.
   * Each code is kept whole by its own `.ow-nowrap`, so the list breaks
   * between codes and never inside one. */
  .ow-reportwin .ow-data-table .ow-mono { white-space: normal; }
  /* The column labels repeat on every page and are read once to find a
   * column, not read across. They take a step down so the figures under them
   * do not have to. */
  .ow-reportwin .ow-data-table thead th { font-size: 8.5px !important; vertical-align: bottom; white-space: normal; }
  /* A value that is one thing stays on one line. A date, a figure and a badge
   * each read as a single value and say something else broken across two —
   * `10 Oct 2026` as `10 Oct` and `2026`, a status pill as two pills. They are
   * short, so holding them whole costs the sheet almost nothing. The
   * transcribed columns are deliberately not here: a column of codes is the
   * one that has to wrap, and `.ow-nowrap` holds each code within it. */
  .ow-reportwin .ow-data-table td.is-tight:not(.is-mono),
  .ow-reportwin .ow-data-table td.is-num,
  .ow-reportwin .ow-data-table .ow-badge,
  .ow-reportwin .ow-data-table .ow-nowrap { overflow-wrap: normal; white-space: nowrap; }
  .ow-reportwin .ow-data-table thead { display: table-header-group; }
  .ow-reportwin .ow-data-table tfoot { display: table-footer-group; }
  .ow-reportwin .ow-data-table tbody tr { break-inside: avoid; }
  .ow-reportwin .ow-statrow { break-inside: avoid; grid-template-columns: repeat(4, minmax(0, 1fr)) !important; }
  .ow-reportwin .ow-chiprow, .ow-reportwin .ow-pair { break-inside: avoid; }
}

/* A wide report prints across the page. A browser without named pages prints
 * it portrait, which is legible rather than broken. */
@page ow-report-landscape { margin: 10mm 12mm; size: A4 landscape; }
/* A run that states both kinds of load carries the columns both kinds need,
 * and they do not fit the sheet a single-kind run prints on. It takes the next
 * sheet up rather than losing a column or being shrunk to fit one. */
@page ow-report-landscape-wide { margin: 10mm 12mm; size: A3 landscape; }
@media print {
  .ow-print-landscape { page: ow-report-landscape; }
  .ow-print-landscape-wide { page: ow-report-landscape-wide; }
}

/* ---------------------------------------------------------------------------
 * SIGNATURE CAPTURE AND PREVIEW (`.ow-signbox`)
 *
 * A signature is shown as the foot of a document, not as a form field: the
 * question being answered is "is that how I want to appear on the ticket", and
 * a bare image on white does not answer it. Hence the ruled paper, the signing
 * line and the name printed under it - the same three things the printed
 * ticket has.
 *
 * `.ow-ink--*` are the hands a typed signature can be drawn in. The three
 * display faces they name are not vendored, so they resolve to the generic
 * `cursive` until they are: the capture dialog previews what will actually be
 * stored, so a hand that resolves to the fallback is previewed as the fallback
 * and the stored image is still exactly what was shown.
 * ------------------------------------------------------------------------- */
.ow-signbox {
  align-items: stretch;
  display: grid;
  gap: var(--ow-space-4);
  grid-template-columns: repeat(auto-fit, minmax(min(280px, 100%), 1fr));
}

.ow-signbox__preview {
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  justify-content: flex-end;
  min-height: 176px;
  overflow: hidden;
  padding: var(--ow-space-4);
  position: relative;
}

/* The ruled paper. Decorative, so it is behind everything and inert. */
.ow-signbox__rule {
  background-image: repeating-linear-gradient(0deg, transparent 0 27px,
                                              var(--ow-color-border-soft) 27px 28px);
  inset: 0;
  pointer-events: none;
  position: absolute;
}

.ow-signbox__ink {
  align-items: flex-end;
  display: flex;
  flex: 1 1 auto;
  min-height: 84px;
  position: relative;
}

/* 80px is what the ticket prints, so the preview is the print size. */
.ow-signbox__image {
  display: block;
  max-height: 80px;
  max-width: 100%;
  object-fit: contain;
  object-position: left bottom;
}

.ow-signbox__none {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-meta);
  font-style: italic;
  padding-bottom: var(--ow-space-2);
}

/* The signing line and the name under it. */
.ow-signbox__foot {
  border-top: 1px solid var(--ow-color-border-strong);
  color: var(--ow-color-text-soft);
  display: flex;
  font-size: var(--ow-type-label);
  font-weight: 700;
  gap: var(--ow-space-3);
  justify-content: space-between;
  letter-spacing: var(--ow-tracking-label);
  padding-top: var(--ow-space-2);
  position: relative;
  text-transform: uppercase;
}

/* The pad: the typed preview, and the box that is drawn in. */
.ow-signbox__pad {
  background: var(--ow-color-surface-alt);
  border: 1px dashed var(--ow-color-border-strong);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  overflow: hidden;
  position: relative;
}

.ow-signbox__pad--preview { min-height: 150px; padding: var(--ow-space-4); }
.ow-signbox__pad--draw { height: 240px; padding: 0; }
.ow-signbox__pad--draw.is-signed { border-color: var(--ow-color-brand); }

.ow-signbox__caption {
  color: var(--ow-color-faint);
  font-family: var(--ow-font-mono);
  font-size: var(--ow-type-nano);
  left: var(--ow-space-4);
  letter-spacing: var(--ow-tracking-wide);
  position: absolute;
  text-transform: uppercase;
  top: var(--ow-space-3);
}

.ow-signbox__typed {
  display: block;
  max-width: 100%;
  overflow: hidden;
  padding-bottom: var(--ow-space-2);
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* Where to sign, and the line to sign above. */
.ow-signbox__baseline {
  background: var(--ow-color-border-strong);
  bottom: 30%;
  height: 1px;
  left: 8%;
  pointer-events: none;
  position: absolute;
  right: 8%;
}

.ow-signbox__hint {
  align-items: center;
  color: var(--ow-color-faint);
  display: flex;
  font-size: var(--ow-type-meta);
  inset: 0;
  justify-content: center;
  padding-bottom: var(--ow-space-7);
  pointer-events: none;
  position: absolute;
}

.ow-signbox__canvas {
  cursor: crosshair;
  display: block;
  height: 100%;
  touch-action: none;
  width: 100%;
}

.ow-signbox__canvas:focus-visible { box-shadow: var(--ow-focus-ring); outline: 0; }

/* Choosing a hand. */
.ow-handgrid {
  display: grid;
  gap: var(--ow-space-2);
  grid-template-columns: repeat(auto-fit, minmax(min(180px, 100%), 1fr));
}

.ow-hand {
  align-items: flex-start;
  background: var(--ow-color-surface);
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  cursor: pointer;
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
  min-height: 84px;
  min-width: 0;
  overflow: hidden;
  padding: var(--ow-space-3);
  transition: border-color var(--ow-dur-state) var(--ow-ease),
              box-shadow var(--ow-dur-state) var(--ow-ease);
}

.ow-hand.is-on {
  background: var(--ow-color-brand-tint);
  border-color: var(--ow-color-brand);
  box-shadow: var(--ow-focus-ring);
}

.ow-hand__sample {
  max-width: 100%;
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

.ow-hand__label {
  color: var(--ow-color-muted);
  font-size: var(--ow-type-micro);
  font-weight: 700;
  letter-spacing: var(--ow-tracking-label);
  text-transform: uppercase;
}

/* The hands themselves. One declaration each; the size is what differs most,
 * because these faces sit on very different baselines. */
.ow-ink { color: var(--ow-color-text); line-height: 1.1; }
.ow-ink--flowing { font-family: 'Dancing Script', cursive; font-size: 40px; font-weight: 600; }
.ow-ink--casual { font-family: 'Caveat', cursive; font-size: 42px; font-weight: 600; }
.ow-ink--pen { font-family: 'Homemade Apple', cursive; font-size: 28px; font-weight: 400; }

.ow-hand .ow-ink--flowing { font-size: 28px; }
.ow-hand .ow-ink--casual { font-size: 30px; }
.ow-hand .ow-ink--pen { font-size: 20px; }

/* A row in an `.ow-rowlist` that is itself the link to the record it names. */
.ow-rowlist__row--link {
  color: inherit;
  display: flex;
  text-decoration: none;
  transition: background var(--ow-dur-hover) var(--ow-ease);
}

.ow-rowlist__row--link:hover { background: var(--ow-color-row-hover); }
.ow-rowlist__row--link:focus-visible { box-shadow: var(--ow-focus-ring); outline: 0; }

/* ==========================================================================
   Ticket amendment: the workspace that corrects a completed ticket, its
   changes rail, the per-receipt impact card, and the version timeline the
   amendment history reads from. Token-only, and each primitive is shared by
   the workspace, the review step and the history rather than owned by one.
   ========================================================================== */

/* The identity band. A correction is filed against one ticket and the operator
   has to be certain which, so the number is the largest thing on the screen
   and the facts that identify the load sit under it as a stated, wrapping
   grid rather than a table. */
.ow-amendhead {
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-4);
  padding: var(--ow-space-4) var(--ow-space-5);
}

.ow-amendhead__top {
  align-items: flex-start;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-3) var(--ow-space-6);
}

.ow-amendhead__id {
  display: flex;
  flex: 1 1 auto;
  flex-direction: column;
  gap: var(--ow-space-1);
  min-width: 0;
}

.ow-amendhead__title {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-2) var(--ow-space-3);
}

.ow-amendhead__no {
  color: var(--ow-color-text);
  font-size: var(--ow-type-view-title);
  font-weight: 800;
  letter-spacing: var(--ow-tracking-tighter);
  line-height: 1.1;
  margin: 0;
}

.ow-amendhead__no span { color: var(--ow-color-faint); font-weight: 600; }

.ow-amendhead__facts {
  border-top: 1px solid var(--ow-color-border-soft);
  display: grid;
  gap: var(--ow-space-3) var(--ow-space-6);
  grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  padding-top: var(--ow-space-4);
}

.ow-amendhead__facts .ow-pair { min-width: 0; }
.ow-amendhead__facts .ow-pair__label { font-size: var(--ow-type-nano); }

.ow-amendhead__facts .ow-pair__value {
  font-size: var(--ow-type-body);
  font-weight: 600;
  overflow-wrap: anywhere;
}

.ow-amendhead__actions {
  display: flex;
  flex: none;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
  margin-left: auto;
}

/* The section strip, and the three-step indicator beside it. The strip is the
   shared `.ow-tabstrip` with a pending-change count; the dot says a section
   still holds something that needs answering, which a count cannot say. */
.ow-amendtabs {
  align-items: center;
  border-top: 1px solid var(--ow-color-border-soft);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-2) var(--ow-space-3);
  justify-content: space-between;
  padding: var(--ow-space-2) var(--ow-space-4);
}

/* THE SECTION STRIP WRAPS RATHER THAN SCROLLING. `.ow-tabstrip` scrolls by
   design, because the tab you want is the one you reach for. These tabs carry
   a pending-change count and an attention dot, which are there to be seen
   without looking for them, so a section that scrolled off the edge would take
   its count with it. They wrap and tighten instead, as the step strip does. */
.ow-amendtabs > .ow-tabstrip:first-child {
  flex: 1 1 100%;
  flex-wrap: wrap;
  overflow-x: visible;
}
.ow-amendtabs .ow-tabstrip__item { font-size: var(--ow-type-meta); min-height: 40px; }

.ow-amendtabs__dot {
  background: var(--ow-status-warning-fg);
  border-radius: 50%;
  display: inline-block;
  height: 7px;
  width: 7px;
}

/* Where the operator is in the three acts. It states position and is never a
   control, so it does not take a pointer and drops away where the width is
   needed for the sections themselves. */
.ow-amendsteps { padding: 0 var(--ow-space-2); }

.ow-amendsteps .ow-tabstrip__item {
  color: var(--ow-color-faint);
  cursor: default;
  font-size: var(--ow-type-label);
}

.ow-amendsteps .ow-tabstrip__item.is-active { background: transparent; color: var(--ow-color-text); }

.ow-amendsteps .ow-tabstrip__item.is-active .ow-tabstrip__count {
  background: var(--ow-color-brand);
  color: var(--ow-color-surface);
}

.ow-amendsteps > i { font-size: var(--ow-type-label); }

@media (max-width: 991px) {
  .ow-amendsteps { display: none; }
}

/* Previous and next across the sections, with the last handing over to the
   review. Space-between so a section with no previous keeps the forward
   control where the eye already is. */
.ow-sectionnavbar {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-3);
  justify-content: space-between;
}

/* One amendable fact. The tint is the whole statement that this field is one
   of the ones being changed, so it is on the field rather than on a marker
   beside it, and the negative margin lets the tint bleed past the label
   without moving the control off the grid it shares with its neighbours. */
.ow-amendfield {
  border-radius: var(--ow-radius-md);
  display: flex;
  flex-direction: column;
  gap: 6px;
  margin: calc(var(--ow-space-2) * -1);
  padding: var(--ow-space-2);
  transition: background var(--ow-dur-state) var(--ow-ease);
}

.ow-amendfield.is-changed { background: var(--ow-color-brand-tint); }
.ow-amendfield.is-focus { box-shadow: 0 0 0 2px var(--ow-focus-ring); }

.ow-amendfield__head {
  align-items: center;
  display: flex;
  gap: var(--ow-space-2);
  min-height: 28px;
}

.ow-amendfield__head .ow-field__label { flex: 1 1 auto; }

/* What the completed version says, kept beside the change rather than
   replaced by it: an operator correcting a fact needs to see what they are
   correcting. */
.ow-amendfield__was { color: var(--ow-color-muted); font-size: var(--ow-type-meta); }

.ow-amendfield__warning {
  color: var(--ow-status-warning-fg);
  font-size: var(--ow-type-meta);
  font-weight: 600;
}

.ow-amendfield__error {
  color: var(--ow-status-fail-fg);
  font-size: var(--ow-type-meta);
  font-weight: 600;
}

/* A waste item as a row the operator opens to edit. The same tint as a changed
   field, because it is the same statement about the same submission. */
.ow-amendline {
  align-items: flex-start;
  display: flex;
  gap: var(--ow-space-3);
  padding: var(--ow-space-4);
}

.ow-amendline.is-changed { background: var(--ow-color-brand-tint); border-color: var(--ow-color-brand-tint-strong); }

.ow-amendline__actions {
  display: flex;
  flex: none;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
  justify-content: flex-end;
}

@media (max-width: 767px) {
  .ow-amendline { flex-wrap: wrap; }
  .ow-amendline__actions { width: 100%; }
}

/* Before and after, stacked, wherever a moved fact is stated: the rail, the
   review step and the history all read the same shape. */
.ow-diff { color: var(--ow-color-muted); display: flex; flex-direction: column; gap: 2px; }
.ow-diff s { color: var(--ow-color-faint); }
.ow-diff strong { color: var(--ow-color-text); }

/* CHANGE → SEARCH → SELECT, for a record a completed ticket relies on.

   A correction screen is mostly there to be READ: the operator checks what the
   ticket says and changes one or two facts of it. So a selection is a quiet
   statement of the record rather than a control demanding attention, and the
   picker that would replace it is behind the one button that asks for it. The
   summary is a panel rather than a card so it reads as part of the field it
   belongs to and not as a record of its own. */
.ow-recordpick { display: flex; flex-direction: column; gap: var(--ow-space-3); min-width: 0; }

/* The Change button drops below the record rather than squeezing it: these
 * fields sit two to a row on a wide screen and one to a row on a narrow one,
 * and a legal name wrapped to four lines beside a button is the worse of the
 * two. The basis is the narrowest a name reads comfortably at, so the wrap
 * follows the column the field is actually in rather than a guess at the
 * viewport. */
.ow-recordpick__summary {
  align-items: center;
  background: var(--ow-color-surface-alt);
  border: 1px solid var(--ow-color-border-soft);
  border-radius: var(--ow-radius-md);
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-2) var(--ow-space-3);
  min-height: var(--ow-control-h);
  padding: var(--ow-space-3) var(--ow-space-3) var(--ow-space-3) var(--ow-space-4);
}

.ow-recordpick__summarybody {
  display: flex;
  flex: 1 1 12rem;
  flex-direction: column;
  gap: 2px;
  min-width: 0;
}

/* A legal name can be long and has no spaces to break at in the worst case, so
   it wraps rather than pushing the Change button off the row. */
.ow-recordpick__name {
  font-size: var(--ow-type-meta);
  font-weight: 700;
  overflow-wrap: break-word;
  text-wrap: pretty;
}

.ow-recordpick__detail {
  color: var(--ow-color-muted);
  font-size: var(--ow-type-label);
  overflow-wrap: break-word;
}

.ow-recordpick__note { color: var(--ow-status-warning-fg); font-size: var(--ow-type-label); }

.ow-recordpick__summary > .ow-btn { flex: 0 0 auto; }

.ow-recordpick__picker { display: flex; flex-direction: column; gap: var(--ow-space-2); }

/* The matches scroll inside their own box rather than pushing the rest of the
   form down the page, so what is below a picker stays where the operator left
   it while they search. */
.ow-recordpick__results {
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  list-style: none;
  margin: 0;
  max-height: 268px;
  overflow-y: auto;
  padding: 0;
}

.ow-recordpick__row { border-bottom: 1px solid var(--ow-color-border-soft); }
.ow-recordpick__row:last-child { border-bottom: 0; }
.ow-recordpick__row:hover { background: var(--ow-hover-tint); }
.ow-recordpick__row.is-chosen { background: var(--ow-color-brand-tint); }

.ow-recordpick__label {
  align-items: flex-start;
  cursor: pointer;
  display: flex;
  gap: var(--ow-space-3);
  margin: 0;
  min-height: 44px;
  padding: var(--ow-space-3) var(--ow-space-4);
}

.ow-recordpick__label:focus-within { box-shadow: inset var(--ow-focus-ring); }

.ow-recordpick__head {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
}

/* A record this Site may not take is shown with its reason and not offered:
   an operator hunting for it needs to be told why rather than left to wonder
   where it went. */
.ow-recordpick__row.is-ineligible { background: var(--ow-color-surface-alt); }
.ow-recordpick__row.is-ineligible .ow-recordpick__label { cursor: not-allowed; }
.ow-recordpick__row.is-ineligible .ow-recordpick__name { color: var(--ow-color-muted); }

.ow-recordpick__empty,
.ow-recordpick__more {
  color: var(--ow-color-muted);
  font-size: var(--ow-type-label);
  padding: var(--ow-space-4);
}

.ow-recordpick__foot {
  align-items: baseline;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-2) var(--ow-space-4);
}

/* One step of the amendment review walk. The number is the whole statement
   that this is a sequence, so the step needs no chrome of its own beyond the
   rule that separates it from the one before. */
.ow-reviewstep { display: flex; flex-direction: column; gap: var(--ow-space-4); }

.ow-reviewstep + .ow-reviewstep {
  border-top: 1px solid var(--ow-color-border-soft);
  padding-top: var(--ow-space-5);
}

.ow-reviewstep__head { align-items: center; display: flex; gap: var(--ow-space-3); }

.ow-reviewstep__num {
  align-items: center;
  background: var(--ow-color-brand);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-surface);
  display: inline-flex;
  flex: 0 0 auto;
  font-size: var(--ow-type-meta);
  font-weight: 700;
  height: 28px;
  justify-content: center;
  width: 28px;
}

.ow-reviewstep__body { min-width: 0; }

/* Before and after, as two panes of one business change: what the ticket said
   and what it would say, each with its own supporting lines.

   WHAT IT SAID IS STATED QUIETLY RATHER THAN STRUCK THROUGH. A legal name, an
   address or a waste description drawn through with a line is harder to read
   than the value replacing it, and the operator has to read both to confirm
   the change. The emphasis separates them instead. */
.ow-ba {
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  padding: var(--ow-space-4);
}

.ow-ba--record { border-color: var(--ow-color-brand-tint-strong); }

.ow-ba__title { font-size: var(--ow-type-meta); font-weight: 700; text-wrap: pretty; }

.ow-ba__panes {
  align-items: start;
  display: grid;
  gap: var(--ow-space-3);
  grid-template-columns: minmax(0, 1fr) auto minmax(0, 1fr);
}

.ow-ba__pane { display: flex; flex-direction: column; gap: 2px; min-width: 0; }

.ow-ba__eyebrow {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-nano);
  font-weight: 700;
  letter-spacing: var(--ow-tracking-wide);
  text-transform: uppercase;
}

/* A long company name, address or description wraps rather than overflowing
   the pane; `break-word` is for a reference with no spaces in it at all. */
.ow-ba__value {
  font-size: var(--ow-type-body);
  overflow-wrap: break-word;
  text-wrap: pretty;
}

.ow-ba__value--was { color: var(--ow-color-muted); }
.ow-ba__value--now { color: var(--ow-color-text); font-weight: 700; }

.ow-ba__detail {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-label);
  overflow-wrap: break-word;
}

.ow-ba__arrow { align-self: center; color: var(--ow-color-faint); }

/* The ticket being corrected, stated as its own facts above the changes. */
.ow-ba__facts { min-width: 0; }

/* Side by side needs two readable columns. Below that the panes stack and the
   arrow turns to point the way the reading now runs.

   `justify-self` holds the arrow to its own glyph. A grid item fills its
   column by default, and a rotated box is measured by the bounding box of the
   turn: a full-column-width arrow turned on its side becomes its own width in
   overflow BELOW the panes, which pushes a trailing page onto any printed
   sheet that carries a comparison. */
@media (max-width: 767px) {
  .ow-ba__panes { grid-template-columns: minmax(0, 1fr); }
  .ow-ba__arrow { align-self: start; justify-self: start; transform: rotate(90deg); }
}

/* One DEFRA receipt, and what this correction proposes for it. A receipt that
   nothing reaches is stated on the quieter surface so the ones that need an
   action carry the attention. */
.ow-receiptcard {
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-lg);
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-3);
  padding: var(--ow-space-4);
}

.ow-receiptcard__head {
  align-items: center;
  display: flex;
  flex-wrap: wrap;
  gap: var(--ow-space-2);
}

.ow-receiptcard__id {
  font-family: var(--ow-font-mono);
  font-size: var(--ow-type-meta);
  font-weight: 600;
  letter-spacing: var(--ow-tracking-tight);
}

.ow-receiptcard--none { background: var(--ow-color-surface-alt); }

/* A control inside the card hugs its own text. The card is a column, so a
   button left to itself would stretch the full width and read as the card's
   footer rather than as the one action it is. */
.ow-receiptcard > .ow-btn { align-self: flex-start; }

/* HOW FAR ONE DEFRA CORRECTION HAS GOT, as stages in the order they happen.
 *
 * The line is drawn by the step rather than by the list, so the last one stops
 * instead of trailing into nothing. There is no bar and no percentage: a
 * correction is a sequence of facts that have or have not happened, and a
 * filling bar would imply a rate of progress nothing here knows.
 *
 * The marks carry the state; the rule between them carries only the order, so
 * a stage that has not happened never reads as one that has. */
.ow-progsteps {
  display: flex;
  flex-direction: column;
  list-style: none;
  margin: 0;
  padding: 0;
}

.ow-progstep {
  display: grid;
  gap: 0 var(--ow-space-3);
  grid-template-columns: 24px minmax(0, 1fr);
  padding-bottom: var(--ow-space-3);
  position: relative;
}

.ow-progstep:last-child { padding-bottom: 0; }

/* The connector, drawn from each step but the last, behind its own mark. */
.ow-progstep:not(:last-child)::before {
  background: var(--ow-color-border);
  bottom: 0;
  content: '';
  left: 11px;
  position: absolute;
  top: 24px;
  width: 2px;
}

.ow-progstep__mark {
  align-items: center;
  background: var(--ow-color-surface);
  border: 2px solid var(--ow-color-border);
  border-radius: var(--ow-radius-pill);
  color: var(--ow-color-faint);
  display: inline-flex;
  font-size: var(--ow-type-nano);
  height: 24px;
  justify-content: center;
  position: relative;
  width: 24px;
  z-index: 1;
}

.ow-progstep__body { display: flex; flex-direction: column; gap: 2px; min-width: 0; }

.ow-progstep__title {
  font-size: var(--ow-type-meta);
  font-weight: 700;
  text-wrap: pretty;
}

.ow-progstep__note {
  color: var(--ow-color-muted);
  font-size: var(--ow-type-label);
  text-wrap: pretty;
}

.ow-progstep.is-done .ow-progstep__mark {
  background: var(--ow-status-pass-bg);
  border-color: transparent;
  color: var(--ow-status-pass-fg);
}

.ow-progstep.is-active .ow-progstep__mark {
  background: var(--ow-status-due-bg);
  border-color: transparent;
  color: var(--ow-status-due-fg);
}

.ow-progstep.is-attention .ow-progstep__mark {
  background: var(--ow-status-warning-bg);
  border-color: transparent;
  color: var(--ow-status-warning-fg);
}

.ow-progstep.is-failed .ow-progstep__mark {
  background: var(--ow-status-fail-bg);
  border-color: transparent;
  color: var(--ow-status-fail-fg);
}

/* A stage still to come is stated quietly: it has not happened, and saying so
 * is the whole of what it has to say. */
.ow-progstep.is-todo .ow-progstep__title { color: var(--ow-color-muted); }

/* The one genuinely in-flight stage turns, so a screen that is waiting looks
 * like it is waiting. It stops for anyone who asked for less motion. */
.ow-progstep.is-active .ow-progstep__mark .fa {
  animation: ow-progstep-spin 1.4s linear infinite;
}

@keyframes ow-progstep-spin {
  to { transform: rotate(360deg); }
}

@media (prefers-reduced-motion: reduce) {
  .ow-progstep.is-active .ow-progstep__mark .fa { animation: none; }
}

/* What a receipt is waiting for, in one chip. It is a state and not a status
   tone, so it reads from the status tokens rather than the badge's. */
.ow-stepchips { display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }

.ow-stepchip {
  align-items: center;
  border: 1px solid var(--ow-color-border);
  border-radius: var(--ow-radius-pill);
  display: inline-flex;
  font-size: var(--ow-type-label);
  font-weight: 700;
  gap: var(--ow-space-2);
  padding: var(--ow-space-1) var(--ow-space-3);
}

.ow-stepchip--done { background: var(--ow-status-pass-bg); border-color: transparent; color: var(--ow-status-pass-fg); }
.ow-stepchip--todo { background: var(--ow-status-warning-bg); border-color: transparent; color: var(--ow-status-warning-fg); }
.ow-stepchip--review { background: var(--ow-status-due-bg); border-color: transparent; color: var(--ow-status-due-fg); }

/* The version timeline the amendment history reads. The rail's line is drawn
   by the item rather than the list so the last entry stops rather than
   trailing into nothing. */
.ow-timeline { display: flex; flex-direction: column; gap: var(--ow-space-4); }

.ow-timeline__item {
  display: grid;
  gap: var(--ow-space-4);
  grid-template-columns: 40px minmax(0, 1fr);
}

.ow-timeline__rail {
  align-items: center;
  display: flex;
  flex-direction: column;
  gap: var(--ow-space-2);
}

.ow-timeline__rail::after {
  background: var(--ow-color-border);
  content: '';
  flex: 1 1 auto;
  width: 2px;
}

.ow-timeline__item:last-child .ow-timeline__rail::after { display: none; }

/* A `<summary>` that is a card header. The marker is the chevron the header
   already carries, so the browser's own triangle is taken off. */
.ow-fold > summary.ow-foldsum { cursor: pointer; list-style: none; }
.ow-fold > summary.ow-foldsum::-webkit-details-marker { display: none; }
.ow-fold[open] > summary.ow-foldsum .ow-fold__mark { transform: rotate(180deg); }

.ow-foldsum .ow-fold__mark {
  color: var(--ow-color-faint);
  flex: none;
  font-size: var(--ow-type-nano);
  transition: transform var(--ow-dur-state) var(--ow-ease);
}

/* A fact the correction states but does not offer: a weighbridge reading, or a
   figure whose basis is not one this screen may correct. Dashed, because the
   border is the whole statement that this is not a control. */
.ow-readonly {
  background: var(--ow-color-surface-alt);
  border: 1px dashed var(--ow-color-border);
  border-radius: var(--ow-radius-md);
  padding: var(--ow-space-3) var(--ow-space-4);
}

/* A corrected weighing. Bounded so the unit sits beside the figure rather than
   wrapping under it, and figure-aligned for the same reason a percentage is:
   the digits are read against each other. */
.ow-weighinput {
  font-variant-numeric: tabular-nums;
  max-width: 180px;
  text-align: right;
}

/* A share of the net, as a percentage. Narrow because the value is at most
   three digits, and figure-aligned because the column is read as a column. */
.ow-pctinput {
  font-variant-numeric: tabular-nums;
  text-align: right;
  width: 88px;
}

/* The charges as the version snapshotted them, and as a correction would
   re-resolve them. Stated in the workspace and again in the review, because a
   corrected classification or weight basis can move what the load costs. */
.ow-chargetable {
  border-top: 1px solid var(--ow-color-border-soft);
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto auto;
}

.ow-chargetable > span {
  border-bottom: 1px solid var(--ow-color-border-soft);
  font-size: var(--ow-type-meta);
  padding: var(--ow-space-2) var(--ow-space-3);
}

.ow-chargetable .is-num {
  font-variant-numeric: tabular-nums;
  text-align: right;
  white-space: nowrap;
}

.ow-chargetable .is-head {
  color: var(--ow-color-faint);
  font-size: var(--ow-type-micro);
  font-weight: 700;
  letter-spacing: var(--ow-tracking-label);
  text-transform: uppercase;
}
/* THE EDITORIAL LAYER — prose surfaces, as against operational ones.
 *
 * Everything here is scoped under `.ow-editorial`. There is no element
 * selector in this file: no bare h1, h2, p, img or button rule, so adding it
 * to the manifest moves nothing on a ticketing board, a settings form, a
 * table, a modal or a dashboard. A screen opts in by wearing the class.
 *
 * It is built for release notes and is deliberately not about releases: the
 * same container, headings, steps, figures and disclosures are what a Help
 * Centre article or an onboarding walkthrough needs. `doc/UI_ARCHITECTURE.md`
 * owns the ownership statement and lists the components.
 *
 * Values come from the `--ow-editorial-*` tokens in `_ow_tokens.scss`. Dark
 * mode needs no rule here: those tokens are aliases of the colour tokens the
 * theme already redeclares.
 */

/* ── The container ──────────────────────────────────────────────────────── */


.ow-editorial {
  color: var(--ow-editorial-ink);
  display: flex;
  flex-direction: column;
  font-size: var(--ow-editorial-body);
  gap: var(--ow-editorial-gap-section);
  line-height: var(--ow-editorial-body-line);
  margin: 0 auto;
  max-width: var(--ow-editorial-measure-wide);
  width: 100%;
}

/* Prose holds a comfortable measure; a figure or a step row may use the full
   width of the container. */
.ow-editorial__measure { max-width: var(--ow-editorial-measure); }

/* ── Header ─────────────────────────────────────────────────────────────── */

.ow-editorial__header {
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-block);
}
.ow-editorial__eyebrow {
  color: var(--ow-editorial-ink-soft);
  font-size: var(--ow-type-label);
  font-weight: var(--ow-type-label-weight);
  letter-spacing: var(--ow-tracking-label);
  text-transform: uppercase;
}
/* HEADINGS ARE BOUNDED BY THE COLUMN, NOT BY A CHARACTER COUNT.
 *
 * `ch` is the width of a ZERO, and in this face a zero is far wider than the
 * average letter: at the desktop title size one `ch` measures ~30px while the
 * mean glyph is ~19px. A `20ch` cap therefore reserved ~590px for a headline
 * that sets in 730px, and "Different ticket footers for each site" broke over
 * two lines with 310px of the column standing empty beside it. The same
 * arithmetic wrapped three of the section headings already published.
 *
 * So the maximum is the editorial column itself — the measure the whole layer
 * is already set to — and `text-wrap: balance` does the shaping: a headline
 * that fits sets on one line, and a longer one breaks into even lines instead
 * of a full line and a stub. Nothing here is per-release; a 60-character
 * headline still wraps, because the column and not a character count is what
 * runs out. */
.ow-editorial__title {
  font-size: var(--ow-editorial-title);
  font-weight: var(--ow-editorial-title-weight);
  letter-spacing: var(--ow-tracking-tighter);
  line-height: var(--ow-editorial-title-line);
  margin: 0;
  max-width: var(--ow-editorial-measure-wide);
  text-wrap: balance;
}
.ow-editorial__lead {
  color: var(--ow-editorial-ink);
  font-size: var(--ow-editorial-lead);
  line-height: var(--ow-editorial-lead-line);
  margin: 0;
  max-width: var(--ow-editorial-measure);
}

/* ── Sections ───────────────────────────────────────────────────────────── */

.ow-editorial__section {
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-block);
}

/* A LEAD THAT OPENS THE ARTICLE BELONGS TO THE HEADLINE, NOT TO A SECTION.
 *
 * The standfirst used to live inside the header, a block gap under the title.
 * A note that writes its own lead carries it as the first block instead, which
 * put a whole section gap - 72px at desktop - between the headline and the
 * line that is meant to read as part of it. This closes that one gap back to
 * the block rhythm the header itself uses; every later section keeps the full
 * separation. Both figures are the existing tokens, so the correction tracks
 * them at every width instead of restating a number. */
.ow-editorial__section:has(> .ow-editorial__lead:first-child) {
  margin-top: calc(var(--ow-editorial-gap-block) - var(--ow-editorial-gap-section));
}
.ow-editorial__heading {
  font-size: var(--ow-editorial-heading);
  font-weight: var(--ow-editorial-heading-weight);
  letter-spacing: var(--ow-tracking-tight);
  line-height: var(--ow-editorial-heading-line);
  margin: 0;
  max-width: var(--ow-editorial-measure-wide);
  text-wrap: balance;
}
.ow-editorial__subheading {
  font-size: var(--ow-editorial-subheading);
  font-weight: var(--ow-editorial-subheading-weight);
  letter-spacing: var(--ow-tracking-tight);
  margin: 0;
}
.ow-editorial__body {
  margin: 0;
  max-width: var(--ow-editorial-measure);
}
.ow-editorial__body + .ow-editorial__body { margin-top: var(--ow-editorial-gap-block); }

/* ── Benefits: a short list that is read, not scanned as data ───────────── */

.ow-editorial__benefits {
  display: grid;
  gap: var(--ow-editorial-gap-block);
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  list-style: none;
  margin: 0;
  padding: 0;
}
.ow-editorial__benefit {
  border-top: 2px solid var(--ow-color-brand);
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-tight);
  padding-top: var(--ow-editorial-gap-tight);
}
.ow-editorial__benefit-title { font-weight: var(--ow-editorial-subheading-weight); }
.ow-editorial__benefit-text { color: var(--ow-editorial-ink-soft); margin: 0; }

/* ── Steps: a number, the instruction, and the picture of it ────────────── */

.ow-editorial__steps {
  counter-reset: ow-step;
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-section);
  list-style: none;
  margin: 0;
  padding: 0;
}
.ow-editorial__step {
  counter-increment: ow-step;
  display: grid;
  gap: var(--ow-editorial-gap-figure);
  grid-template-columns: 1fr;
}
/* Beside the instruction once there is room for both; beneath it before that,
   which is also the reading order in the markup. */
@media (min-width: 900px) {
  .ow-editorial__step--illustrated { grid-template-columns: minmax(0, 5fr) minmax(0, 7fr); }
}
.ow-editorial__step-text {
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-tight);
  max-width: var(--ow-editorial-measure);
}
.ow-editorial__step-heading {
  align-items: baseline;
  display: flex;
  font-size: var(--ow-editorial-subheading);
  font-weight: var(--ow-editorial-subheading-weight);
  gap: 10px;
  margin: 0;
}
/* The number is drawn, not typed, so the markup carries no "1." to fall out of
   step with the list. */
.ow-editorial__step-heading::before {
  background: var(--ow-color-brand);
  border-radius: var(--ow-radius-pill);
  color: #fff;
  content: counter(ow-step);
  flex: none;
  font-size: var(--ow-type-label);
  font-variant-numeric: tabular-nums;
  font-weight: 700;
  line-height: 22px;
  min-width: 22px;
  text-align: center;
}
.ow-editorial__step-body { margin: 0; }

/* ── Figures ────────────────────────────────────────────────────────────── */

.ow-figure {
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-tight);
  margin: 0;
  min-width: 0;
}
/* The thumbnail is a button because it opens a viewer; it is not a link and
   does not navigate. */
.ow-figure__open {
  background: var(--ow-editorial-figure-bg);
  border: 1px solid var(--ow-editorial-rule);
  border-radius: var(--ow-radius-lg);
  cursor: zoom-in;
  display: block;
  overflow: hidden;
  padding: 0;
  position: relative;
  width: 100%;
}
.ow-figure__open:hover { border-color: var(--ow-color-brand); }
.ow-figure__open:focus-visible { box-shadow: 0 0 0 3px var(--ow-focus-ring); outline: none; }
/* `aspect-ratio` is set inline from the stored dimensions, so the space is
   reserved before the image loads and nothing shifts when it arrives. */
.ow-figure__image { display: block; height: auto; width: 100%; }
.ow-figure__caption {
  color: var(--ow-editorial-ink-soft);
  font-size: var(--ow-editorial-caption);
  line-height: var(--ow-editorial-caption-line);
  margin: 0;
}
.ow-figure__hint {
  align-items: center;
  display: inline-flex;
  gap: 6px;
  white-space: nowrap;
}

/* ── Contextual actions ─────────────────────────────────────────────────── */

.ow-editorial__actions { display: flex; flex-wrap: wrap; gap: var(--ow-space-2); }
/* A note saying why an action is not offered, in place of offering it. */
.ow-editorial__denied {
  color: var(--ow-editorial-ink-soft);
  font-size: var(--ow-editorial-caption);
  margin: 0;
}

/* ── Prerequisite and disclosure ────────────────────────────────────────── */

.ow-editorial__prereq {
  border-left: 3px solid var(--ow-color-brand);
  color: var(--ow-editorial-ink);
  margin: 0;
  max-width: var(--ow-editorial-measure);
  padding: 2px 0 2px var(--ow-editorial-gap-block);
}
.ow-editorial__disclosure { border-top: 1px solid var(--ow-editorial-rule); padding-top: var(--ow-editorial-gap-block); }
.ow-editorial__disclosure-trigger {
  align-items: center;
  background: none;
  border: 0;
  color: var(--ow-editorial-ink);
  cursor: pointer;
  display: flex;
  font-family: inherit;
  font-size: var(--ow-editorial-subheading);
  font-weight: var(--ow-editorial-subheading-weight);
  gap: 10px;
  padding: 0;
  text-align: left;
  width: 100%;
}
.ow-editorial__disclosure-trigger:focus-visible { box-shadow: 0 0 0 3px var(--ow-focus-ring); outline: none; }
.ow-editorial__disclosure-trigger i { color: var(--ow-color-muted); transition: transform var(--ow-dur-state) var(--ow-ease); }
.ow-editorial__disclosure-trigger.is-open i { transform: rotate(90deg); }
.ow-editorial__disclosure-body {
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-block);
  max-width: var(--ow-editorial-measure);
  padding-top: var(--ow-editorial-gap-block);
}

/* ── Lists inside prose ─────────────────────────────────────────────────── */

.ow-editorial__list {
  display: flex;
  flex-direction: column;
  gap: var(--ow-editorial-gap-tight);
  margin: 0;
  max-width: var(--ow-editorial-measure);
  padding-left: var(--ow-space-5);
}

/* ── The viewer ─────────────────────────────────────────────────────────── */

.ow-figure-viewer {
  align-items: center;
  background: rgba(10, 12, 16, 0.92);
  display: flex;
  flex-direction: column;
  inset: 0;
  position: fixed;
  z-index: 1200;
}
.ow-figure-viewer[hidden] { display: none; }
.ow-figure-viewer__bar {
  align-items: center;
  color: #fff;
  display: flex;
  flex: none;
  gap: var(--ow-space-2);
  justify-content: flex-end;
  padding: var(--ow-space-3);
  width: 100%;
}
.ow-figure-viewer__count {
  font-size: var(--ow-type-meta);
  font-variant-numeric: tabular-nums;
  margin-right: auto;
  opacity: 0.8;
}
.ow-figure-viewer__btn {
  align-items: center;
  background: rgba(255, 255, 255, 0.12);
  border: 0;
  border-radius: var(--ow-radius-md);
  color: #fff;
  cursor: pointer;
  display: inline-flex;
  flex: none;
  font-size: var(--ow-type-meta);
  height: var(--ow-tap-min);
  justify-content: center;
  min-width: var(--ow-tap-min);
  padding: 0 var(--ow-space-2);
}
.ow-figure-viewer__btn:hover { background: rgba(255, 255, 255, 0.24); }
.ow-figure-viewer__btn:focus-visible { box-shadow: 0 0 0 3px var(--ow-focus-ring); outline: none; }
.ow-figure-viewer__btn[disabled] { cursor: default; opacity: 0.35; }
/* The stage clips the image; the image itself is translated and scaled inside
   it, so panning never moves the page behind the viewer. */
.ow-figure-viewer__stage {
  align-items: center;
  display: flex;
  flex: 1 1 auto;
  justify-content: center;
  overflow: hidden;
  position: relative;
  touch-action: none;
  width: 100%;
}
.ow-figure-viewer__image {
  max-height: 100%;
  max-width: 100%;
  object-fit: contain;
  transform-origin: center center;
  user-select: none;
  will-change: transform;
}
.ow-figure-viewer.is-zoomed .ow-figure-viewer__stage { cursor: grab; }
.ow-figure-viewer.is-zoomed.is-panning .ow-figure-viewer__stage { cursor: grabbing; }
.ow-figure-viewer__caption {
  color: #fff;
  flex: none;
  font-size: var(--ow-editorial-caption);
  line-height: var(--ow-editorial-caption-line);
  margin: 0 auto;
  max-width: var(--ow-editorial-measure);
  opacity: 0.9;
  padding: var(--ow-space-3) var(--ow-space-4) var(--ow-space-4);
  text-align: center;
}
.ow-figure-viewer__nav {
  align-items: center;
  display: flex;
  gap: var(--ow-space-2);
  inset-inline: 0;
  justify-content: space-between;
  padding: 0 var(--ow-space-2);
  pointer-events: none;
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}
.ow-figure-viewer__nav .ow-figure-viewer__btn { pointer-events: auto; }

@media (max-width: 767px) {
  .ow-figure-viewer__caption { padding: var(--ow-space-2) var(--ow-space-3) var(--ow-space-3); }
}

/* The highlight a contextual link leaves on the control it named. It is a
   tint and a ring rather than motion, and it is removed outright where the
   reader has asked for less movement. */
.ow-is-highlighted {
  animation: ow-highlight-pulse 2.4s var(--ow-ease) 1;
  border-radius: var(--ow-radius-md);
}
@keyframes ow-highlight-pulse {
  0%, 70% { background: var(--ow-color-brand-tint); box-shadow: 0 0 0 3px var(--ow-focus-ring); }
  100% { background: transparent; box-shadow: 0 0 0 0 transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .ow-is-highlighted { animation: none; background: var(--ow-color-brand-tint); }
  .ow-editorial__disclosure-trigger i { transition: none; }
}

/* ── The archive entry's thumbnail ──────────────────────────────────────── */

/* A release note that has pictures shows its first one beside its entry. It
   is decoration: the entry's single link is still the only control, and this
   carries empty alt text and is hidden from assistive technology. */
.ow-release-thumb {
  background: var(--ow-editorial-figure-bg);
  border: 1px solid var(--ow-editorial-rule);
  border-radius: var(--ow-radius-md);
  flex: none;
  height: 64px;
  overflow: hidden;
  width: 104px;
}
.ow-release-thumb img { display: block; height: 100%; object-fit: cover; object-position: left top; width: 100%; }
@media (max-width: 767px) {
  .ow-release-thumb { display: none; }
}
/*
 * LAYER 4 - BILLING. Composed ON ow_components, namespaced `.billing-page`.
 *
 * This layer may hold only genuinely billing-specific composition that no
 * shared primitive expresses. As of 2026-08-27 there is none: the Billing
 * surface is markup over layer 2 exactly as the design draws it. A rule added here must be scoped `.billing-page ...`, token-only,
 * and must not restate a button, card, table, input, badge, notice, tab or
 * empty state that layer 2 already owns.
 */
/* Preload images */
/* line 3, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
body:after {
  content: url("/assets/lightbox/close-5d62e6c90005bfb71f6abb440f9e4753681cb23bbd5e60477ab6f442d2f0e69c.png") url("/assets/lightbox/loading-225aa88b6ab02c06222ec9468d62e15fa188e39cdb9431d1f55401ad380753ed.gif") url("/assets/lightbox/prev-7fd9273f20fdb1229c224341271a119020a5eee74ccf6b4605730917c864caf2.png") url("/assets/lightbox/next-15b869b02c6fbaa8c6c26445a2dd2d9bad80fd27b1409f8179e5dd89dc89d90a.png");
  display: none;
}

/* line 8, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
body.lb-disable-scrolling {
  overflow: hidden;
}

/* line 12, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lightboxOverlay {
  position: absolute;
  top: 0;
  left: 0;
  z-index: 9999;
  background-color: black;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);
  opacity: 0.8;
  display: none;
}

/* line 23, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lightbox {
  position: absolute;
  left: 0;
  width: 100%;
  z-index: 10000;
  text-align: center;
  line-height: 0;
  font-weight: normal;
}

/* line 33, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lightbox .lb-image {
  display: block;
  height: auto;
  max-width: inherit;
  border-radius: 3px;
}

/* line 40, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lightbox a img {
  border: none;
}

/* line 44, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-outerContainer {
  position: relative;
  background-color: white;
  *zoom: 1;
  width: 250px;
  height: 250px;
  margin: 0 auto;
  border-radius: 4px;
}

/* line 54, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-outerContainer:after {
  content: "";
  display: table;
  clear: both;
}

/* line 60, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-container {
  padding: 4px;
}

/* line 64, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-loader {
  position: absolute;
  top: 43%;
  left: 0;
  height: 25%;
  width: 100%;
  text-align: center;
  line-height: 0;
}

/* line 74, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-cancel {
  display: block;
  width: 32px;
  height: 32px;
  margin: 0 auto;
  background: url("/assets/lightbox/loading-225aa88b6ab02c06222ec9468d62e15fa188e39cdb9431d1f55401ad380753ed.gif") no-repeat;
}

/* line 82, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-nav {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  z-index: 10;
}

/* line 91, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-container > .nav {
  left: 0;
}

/* line 95, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-nav a {
  outline: none;
  background-image: url("data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==");
}

/* line 100, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-prev, .lb-next {
  height: 100%;
  cursor: pointer;
  display: block;
}

/* line 106, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-nav a.lb-prev {
  width: 34%;
  left: 0;
  float: left;
  background: url("/assets/lightbox/prev-7fd9273f20fdb1229c224341271a119020a5eee74ccf6b4605730917c864caf2.png") left 48% no-repeat;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
  opacity: 0;
  -webkit-transition: opacity 0.6s;
  -moz-transition: opacity 0.6s;
  -o-transition: opacity 0.6s;
  transition: opacity 0.6s;
}

/* line 119, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-nav a.lb-prev:hover {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1;
}

/* line 124, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-nav a.lb-next {
  width: 64%;
  right: 0;
  float: right;
  background: url("/assets/lightbox/next-15b869b02c6fbaa8c6c26445a2dd2d9bad80fd27b1409f8179e5dd89dc89d90a.png") right 48% no-repeat;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0);
  opacity: 0;
  -webkit-transition: opacity 0.6s;
  -moz-transition: opacity 0.6s;
  -o-transition: opacity 0.6s;
  transition: opacity 0.6s;
}

/* line 137, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-nav a.lb-next:hover {
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1;
}

/* line 142, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-dataContainer {
  margin: 0 auto;
  padding-top: 5px;
  *zoom: 1;
  width: 100%;
  -moz-border-radius-bottomleft: 4px;
  -webkit-border-bottom-left-radius: 4px;
  border-bottom-left-radius: 4px;
  -moz-border-radius-bottomright: 4px;
  -webkit-border-bottom-right-radius: 4px;
  border-bottom-right-radius: 4px;
}

/* line 155, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-dataContainer:after {
  content: "";
  display: table;
  clear: both;
}

/* line 161, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-data {
  padding: 0 4px;
  color: #ccc;
}

/* line 166, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-data .lb-details {
  width: 85%;
  float: left;
  text-align: left;
  line-height: 1.1em;
}

/* line 173, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-data .lb-caption {
  font-size: 13px;
  font-weight: bold;
  line-height: 1em;
}

/* line 179, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-data .lb-number {
  display: block;
  clear: left;
  padding-bottom: 1em;
  font-size: 12px;
  color: #999999;
}

/* line 187, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-data .lb-close {
  display: block;
  float: right;
  width: 30px;
  height: 30px;
  background: url("/assets/lightbox/close-5d62e6c90005bfb71f6abb440f9e4753681cb23bbd5e60477ab6f442d2f0e69c.png") top right no-repeat;
  text-align: right;
  outline: none;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=70);
  opacity: 0.7;
  -webkit-transition: opacity 0.2s;
  -moz-transition: opacity 0.2s;
  -o-transition: opacity 0.2s;
  transition: opacity 0.2s;
}

/* line 203, ../usr/local/bundle/gems/lightbox2-rails-2.8.2.1/vendor/assets/stylesheets/lightbox.scss */
.lb-data .lb-close:hover {
  cursor: pointer;
  filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);
  opacity: 1;
}
.flatpickr-calendar {
  background: transparent;
  opacity: 0;
  display: none;
  text-align: center;
  visibility: hidden;
  padding: 0;
  -webkit-animation: none;
          animation: none;
  direction: ltr;
  border: 0;
  font-size: 14px;
  line-height: 24px;
  border-radius: 5px;
  position: absolute;
  width: 307.875px;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  -ms-touch-action: manipulation;
      touch-action: manipulation;
  background: #fff;
  -webkit-box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
          box-shadow: 1px 0 0 #e6e6e6, -1px 0 0 #e6e6e6, 0 1px 0 #e6e6e6, 0 -1px 0 #e6e6e6, 0 3px 13px rgba(0,0,0,0.08);
}
.flatpickr-calendar.open,
.flatpickr-calendar.inline {
  opacity: 1;
  max-height: 640px;
  visibility: visible;
}
.flatpickr-calendar.open {
  display: inline-block;
  z-index: 99999;
}
.flatpickr-calendar.animate.open {
  -webkit-animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
          animation: fpFadeInDown 300ms cubic-bezier(0.23, 1, 0.32, 1);
}
.flatpickr-calendar.inline {
  display: block;
  position: relative;
  top: 2px;
}
.flatpickr-calendar.static {
  position: absolute;
  top: calc(100% + 2px);
}
.flatpickr-calendar.static.open {
  z-index: 999;
  display: block;
}
.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+1) .flatpickr-day.inRange:nth-child(7n+7) {
  -webkit-box-shadow: none !important;
          box-shadow: none !important;
}
.flatpickr-calendar.multiMonth .flatpickr-days .dayContainer:nth-child(n+2) .flatpickr-day.inRange:nth-child(7n+1) {
  -webkit-box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
          box-shadow: -2px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
}
.flatpickr-calendar .hasWeeks .dayContainer,
.flatpickr-calendar .hasTime .dayContainer {
  border-bottom: 0;
  border-bottom-right-radius: 0;
  border-bottom-left-radius: 0;
}
.flatpickr-calendar .hasWeeks .dayContainer {
  border-left: 0;
}
.flatpickr-calendar.hasTime .flatpickr-time {
  height: 40px;
  border-top: 1px solid #e6e6e6;
}
.flatpickr-calendar.noCalendar.hasTime .flatpickr-time {
  height: auto;
}
.flatpickr-calendar:before,
.flatpickr-calendar:after {
  position: absolute;
  display: block;
  pointer-events: none;
  border: solid transparent;
  content: '';
  height: 0;
  width: 0;
  left: 22px;
}
.flatpickr-calendar.rightMost:before,
.flatpickr-calendar.arrowRight:before,
.flatpickr-calendar.rightMost:after,
.flatpickr-calendar.arrowRight:after {
  left: auto;
  right: 22px;
}
.flatpickr-calendar.arrowCenter:before,
.flatpickr-calendar.arrowCenter:after {
  left: 50%;
  right: 50%;
}
.flatpickr-calendar:before {
  border-width: 5px;
  margin: 0 -5px;
}
.flatpickr-calendar:after {
  border-width: 4px;
  margin: 0 -4px;
}
.flatpickr-calendar.arrowTop:before,
.flatpickr-calendar.arrowTop:after {
  bottom: 100%;
}
.flatpickr-calendar.arrowTop:before {
  border-bottom-color: #e6e6e6;
}
.flatpickr-calendar.arrowTop:after {
  border-bottom-color: #fff;
}
.flatpickr-calendar.arrowBottom:before,
.flatpickr-calendar.arrowBottom:after {
  top: 100%;
}
.flatpickr-calendar.arrowBottom:before {
  border-top-color: #e6e6e6;
}
.flatpickr-calendar.arrowBottom:after {
  border-top-color: #fff;
}
.flatpickr-calendar:focus {
  outline: 0;
}
.flatpickr-wrapper {
  position: relative;
  display: inline-block;
}
.flatpickr-months {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
.flatpickr-months .flatpickr-month {
  background: transparent;
  color: rgba(0,0,0,0.9);
  fill: rgba(0,0,0,0.9);
  height: 34px;
  line-height: 1;
  text-align: center;
  position: relative;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  overflow: hidden;
  -webkit-box-flex: 1;
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
.flatpickr-months .flatpickr-prev-month,
.flatpickr-months .flatpickr-next-month {
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  text-decoration: none;
  cursor: pointer;
  position: absolute;
  top: 0;
  height: 34px;
  padding: 10px;
  z-index: 3;
  color: rgba(0,0,0,0.9);
  fill: rgba(0,0,0,0.9);
}
.flatpickr-months .flatpickr-prev-month.flatpickr-disabled,
.flatpickr-months .flatpickr-next-month.flatpickr-disabled {
  display: none;
}
.flatpickr-months .flatpickr-prev-month i,
.flatpickr-months .flatpickr-next-month i {
  position: relative;
}
.flatpickr-months .flatpickr-prev-month.flatpickr-prev-month,
.flatpickr-months .flatpickr-next-month.flatpickr-prev-month {
/*
      /*rtl:begin:ignore*/
/*
      */
  left: 0;
/*
      /*rtl:end:ignore*/
/*
      */
}
/*
      /*rtl:begin:ignore*/
/*
      /*rtl:end:ignore*/
.flatpickr-months .flatpickr-prev-month.flatpickr-next-month,
.flatpickr-months .flatpickr-next-month.flatpickr-next-month {
/*
      /*rtl:begin:ignore*/
/*
      */
  right: 0;
/*
      /*rtl:end:ignore*/
/*
      */
}
/*
      /*rtl:begin:ignore*/
/*
      /*rtl:end:ignore*/
.flatpickr-months .flatpickr-prev-month:hover,
.flatpickr-months .flatpickr-next-month:hover {
  color: #959ea9;
}
.flatpickr-months .flatpickr-prev-month:hover svg,
.flatpickr-months .flatpickr-next-month:hover svg {
  fill: #f64747;
}
.flatpickr-months .flatpickr-prev-month svg,
.flatpickr-months .flatpickr-next-month svg {
  width: 14px;
  height: 14px;
}
.flatpickr-months .flatpickr-prev-month svg path,
.flatpickr-months .flatpickr-next-month svg path {
  -webkit-transition: fill 0.1s;
  transition: fill 0.1s;
  fill: inherit;
}
.numInputWrapper {
  position: relative;
  height: auto;
}
.numInputWrapper input,
.numInputWrapper span {
  display: inline-block;
}
.numInputWrapper input {
  width: 100%;
}
.numInputWrapper input::-ms-clear {
  display: none;
}
.numInputWrapper input::-webkit-outer-spin-button,
.numInputWrapper input::-webkit-inner-spin-button {
  margin: 0;
  -webkit-appearance: none;
}
.numInputWrapper span {
  position: absolute;
  right: 0;
  width: 14px;
  padding: 0 4px 0 2px;
  height: 50%;
  line-height: 50%;
  opacity: 0;
  cursor: pointer;
  border: 1px solid rgba(57,57,57,0.15);
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}
.numInputWrapper span:hover {
  background: rgba(0,0,0,0.1);
}
.numInputWrapper span:active {
  background: rgba(0,0,0,0.2);
}
.numInputWrapper span:after {
  display: block;
  content: "";
  position: absolute;
}
.numInputWrapper span.arrowUp {
  top: 0;
  border-bottom: 0;
}
.numInputWrapper span.arrowUp:after {
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-bottom: 4px solid rgba(57,57,57,0.6);
  top: 26%;
}
.numInputWrapper span.arrowDown {
  top: 50%;
}
.numInputWrapper span.arrowDown:after {
  border-left: 4px solid transparent;
  border-right: 4px solid transparent;
  border-top: 4px solid rgba(57,57,57,0.6);
  top: 40%;
}
.numInputWrapper span svg {
  width: inherit;
  height: auto;
}
.numInputWrapper span svg path {
  fill: rgba(0,0,0,0.5);
}
.numInputWrapper:hover {
  background: rgba(0,0,0,0.05);
}
.numInputWrapper:hover span {
  opacity: 1;
}
.flatpickr-current-month {
  font-size: 135%;
  line-height: inherit;
  font-weight: 300;
  color: inherit;
  position: absolute;
  width: 75%;
  left: 12.5%;
  padding: 7.48px 0 0 0;
  line-height: 1;
  height: 34px;
  display: inline-block;
  text-align: center;
  -webkit-transform: translate3d(0px, 0px, 0px);
          transform: translate3d(0px, 0px, 0px);
}
.flatpickr-current-month span.cur-month {
  font-family: inherit;
  font-weight: 700;
  color: inherit;
  display: inline-block;
  margin-left: 0.5ch;
  padding: 0;
}
.flatpickr-current-month span.cur-month:hover {
  background: rgba(0,0,0,0.05);
}
.flatpickr-current-month .numInputWrapper {
  width: 6ch;
  width: 7ch\0;
  display: inline-block;
}
.flatpickr-current-month .numInputWrapper span.arrowUp:after {
  border-bottom-color: rgba(0,0,0,0.9);
}
.flatpickr-current-month .numInputWrapper span.arrowDown:after {
  border-top-color: rgba(0,0,0,0.9);
}
.flatpickr-current-month input.cur-year {
  background: transparent;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  color: inherit;
  cursor: text;
  padding: 0 0 0 0.5ch;
  margin: 0;
  display: inline-block;
  font-size: inherit;
  font-family: inherit;
  font-weight: 300;
  line-height: inherit;
  height: auto;
  border: 0;
  border-radius: 0;
  vertical-align: initial;
  -webkit-appearance: textfield;
  -moz-appearance: textfield;
  appearance: textfield;
}
.flatpickr-current-month input.cur-year:focus {
  outline: 0;
}
.flatpickr-current-month input.cur-year[disabled],
.flatpickr-current-month input.cur-year[disabled]:hover {
  font-size: 100%;
  color: rgba(0,0,0,0.5);
  background: transparent;
  pointer-events: none;
}
.flatpickr-current-month .flatpickr-monthDropdown-months {
  appearance: menulist;
  background: transparent;
  border: none;
  border-radius: 0;
  box-sizing: border-box;
  color: inherit;
  cursor: pointer;
  font-size: inherit;
  font-family: inherit;
  font-weight: 300;
  height: auto;
  line-height: inherit;
  margin: -1px 0 0 0;
  outline: none;
  padding: 0 0 0 0.5ch;
  position: relative;
  vertical-align: initial;
  -webkit-box-sizing: border-box;
  -webkit-appearance: menulist;
  -moz-appearance: menulist;
  width: auto;
}
.flatpickr-current-month .flatpickr-monthDropdown-months:focus,
.flatpickr-current-month .flatpickr-monthDropdown-months:active {
  outline: none;
}
.flatpickr-current-month .flatpickr-monthDropdown-months:hover {
  background: rgba(0,0,0,0.05);
}
.flatpickr-current-month .flatpickr-monthDropdown-months .flatpickr-monthDropdown-month {
  background-color: transparent;
  outline: none;
  padding: 0;
}
.flatpickr-weekdays {
  background: transparent;
  text-align: center;
  overflow: hidden;
  width: 100%;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
  -webkit-align-items: center;
      -ms-flex-align: center;
          align-items: center;
  height: 28px;
}
.flatpickr-weekdays .flatpickr-weekdaycontainer {
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-flex: 1;
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
}
span.flatpickr-weekday {
  cursor: default;
  font-size: 90%;
  background: transparent;
  color: rgba(0,0,0,0.54);
  line-height: 1;
  margin: 0;
  text-align: center;
  display: block;
  -webkit-box-flex: 1;
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
  font-weight: bolder;
}
.dayContainer,
.flatpickr-weeks {
  padding: 1px 0 0 0;
}
.flatpickr-days {
  position: relative;
  overflow: hidden;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: start;
  -webkit-align-items: flex-start;
      -ms-flex-align: start;
          align-items: flex-start;
  width: 307.875px;
}
.flatpickr-days:focus {
  outline: 0;
}
.dayContainer {
  padding: 0;
  outline: 0;
  text-align: left;
  width: 307.875px;
  min-width: 307.875px;
  max-width: 307.875px;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  display: inline-block;
  display: -ms-flexbox;
  display: -webkit-box;
  display: -webkit-flex;
  display: flex;
  -webkit-flex-wrap: wrap;
          flex-wrap: wrap;
  -ms-flex-wrap: wrap;
  -ms-flex-pack: justify;
  -webkit-justify-content: space-around;
          justify-content: space-around;
  -webkit-transform: translate3d(0px, 0px, 0px);
          transform: translate3d(0px, 0px, 0px);
  opacity: 1;
}
.dayContainer + .dayContainer {
  -webkit-box-shadow: -1px 0 0 #e6e6e6;
          box-shadow: -1px 0 0 #e6e6e6;
}
.flatpickr-day {
  background: none;
  border: 1px solid transparent;
  border-radius: 150px;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  color: #393939;
  cursor: pointer;
  font-weight: 400;
  width: 14.2857143%;
  -webkit-flex-basis: 14.2857143%;
      -ms-flex-preferred-size: 14.2857143%;
          flex-basis: 14.2857143%;
  max-width: 39px;
  height: 39px;
  line-height: 39px;
  margin: 0;
  display: inline-block;
  position: relative;
  -webkit-box-pack: center;
  -webkit-justify-content: center;
      -ms-flex-pack: center;
          justify-content: center;
  text-align: center;
}
.flatpickr-day.inRange,
.flatpickr-day.prevMonthDay.inRange,
.flatpickr-day.nextMonthDay.inRange,
.flatpickr-day.today.inRange,
.flatpickr-day.prevMonthDay.today.inRange,
.flatpickr-day.nextMonthDay.today.inRange,
.flatpickr-day:hover,
.flatpickr-day.prevMonthDay:hover,
.flatpickr-day.nextMonthDay:hover,
.flatpickr-day:focus,
.flatpickr-day.prevMonthDay:focus,
.flatpickr-day.nextMonthDay:focus {
  cursor: pointer;
  outline: 0;
  background: #e6e6e6;
  border-color: #e6e6e6;
}
.flatpickr-day.today {
  border-color: #959ea9;
}
.flatpickr-day.today:hover,
.flatpickr-day.today:focus {
  border-color: #959ea9;
  background: #959ea9;
  color: #fff;
}
.flatpickr-day.selected,
.flatpickr-day.startRange,
.flatpickr-day.endRange,
.flatpickr-day.selected.inRange,
.flatpickr-day.startRange.inRange,
.flatpickr-day.endRange.inRange,
.flatpickr-day.selected:focus,
.flatpickr-day.startRange:focus,
.flatpickr-day.endRange:focus,
.flatpickr-day.selected:hover,
.flatpickr-day.startRange:hover,
.flatpickr-day.endRange:hover,
.flatpickr-day.selected.prevMonthDay,
.flatpickr-day.startRange.prevMonthDay,
.flatpickr-day.endRange.prevMonthDay,
.flatpickr-day.selected.nextMonthDay,
.flatpickr-day.startRange.nextMonthDay,
.flatpickr-day.endRange.nextMonthDay {
  background: #569ff7;
  -webkit-box-shadow: none;
          box-shadow: none;
  color: #fff;
  border-color: #569ff7;
}
.flatpickr-day.selected.startRange,
.flatpickr-day.startRange.startRange,
.flatpickr-day.endRange.startRange {
  border-radius: 50px 0 0 50px;
}
.flatpickr-day.selected.endRange,
.flatpickr-day.startRange.endRange,
.flatpickr-day.endRange.endRange {
  border-radius: 0 50px 50px 0;
}
.flatpickr-day.selected.startRange + .endRange:not(:nth-child(7n+1)),
.flatpickr-day.startRange.startRange + .endRange:not(:nth-child(7n+1)),
.flatpickr-day.endRange.startRange + .endRange:not(:nth-child(7n+1)) {
  -webkit-box-shadow: -10px 0 0 #569ff7;
          box-shadow: -10px 0 0 #569ff7;
}
.flatpickr-day.selected.startRange.endRange,
.flatpickr-day.startRange.startRange.endRange,
.flatpickr-day.endRange.startRange.endRange {
  border-radius: 50px;
}
.flatpickr-day.inRange {
  border-radius: 0;
  -webkit-box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
          box-shadow: -5px 0 0 #e6e6e6, 5px 0 0 #e6e6e6;
}
.flatpickr-day.flatpickr-disabled,
.flatpickr-day.flatpickr-disabled:hover,
.flatpickr-day.prevMonthDay,
.flatpickr-day.nextMonthDay,
.flatpickr-day.notAllowed,
.flatpickr-day.notAllowed.prevMonthDay,
.flatpickr-day.notAllowed.nextMonthDay {
  color: rgba(57,57,57,0.3);
  background: transparent;
  border-color: transparent;
  cursor: default;
}
.flatpickr-day.flatpickr-disabled,
.flatpickr-day.flatpickr-disabled:hover {
  cursor: not-allowed;
  color: rgba(57,57,57,0.1);
}
.flatpickr-day.week.selected {
  border-radius: 0;
  -webkit-box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
          box-shadow: -5px 0 0 #569ff7, 5px 0 0 #569ff7;
}
.flatpickr-day.hidden {
  visibility: hidden;
}
.rangeMode .flatpickr-day {
  margin-top: 1px;
}
.flatpickr-weekwrapper {
  float: left;
}
.flatpickr-weekwrapper .flatpickr-weeks {
  padding: 0 12px;
  -webkit-box-shadow: 1px 0 0 #e6e6e6;
          box-shadow: 1px 0 0 #e6e6e6;
}
.flatpickr-weekwrapper .flatpickr-weekday {
  float: none;
  width: 100%;
  line-height: 28px;
}
.flatpickr-weekwrapper span.flatpickr-day,
.flatpickr-weekwrapper span.flatpickr-day:hover {
  display: block;
  width: 100%;
  max-width: none;
  color: rgba(57,57,57,0.3);
  background: transparent;
  cursor: default;
  border: none;
}
.flatpickr-innerContainer {
  display: block;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  overflow: hidden;
}
.flatpickr-rContainer {
  display: inline-block;
  padding: 0;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}
.flatpickr-time {
  text-align: center;
  outline: 0;
  display: block;
  height: 0;
  line-height: 40px;
  max-height: 40px;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  overflow: hidden;
  display: -webkit-box;
  display: -webkit-flex;
  display: -ms-flexbox;
  display: flex;
}
.flatpickr-time:after {
  content: "";
  display: table;
  clear: both;
}
.flatpickr-time .numInputWrapper {
  -webkit-box-flex: 1;
  -webkit-flex: 1;
      -ms-flex: 1;
          flex: 1;
  width: 40%;
  height: 40px;
  float: left;
}
.flatpickr-time .numInputWrapper span.arrowUp:after {
  border-bottom-color: #393939;
}
.flatpickr-time .numInputWrapper span.arrowDown:after {
  border-top-color: #393939;
}
.flatpickr-time.hasSeconds .numInputWrapper {
  width: 26%;
}
.flatpickr-time.time24hr .numInputWrapper {
  width: 49%;
}
.flatpickr-time input {
  background: transparent;
  -webkit-box-shadow: none;
          box-shadow: none;
  border: 0;
  border-radius: 0;
  text-align: center;
  margin: 0;
  padding: 0;
  height: inherit;
  line-height: inherit;
  color: #393939;
  font-size: 14px;
  position: relative;
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  -webkit-appearance: textfield;
  -moz-appearance: textfield;
  appearance: textfield;
}
.flatpickr-time input.flatpickr-hour {
  font-weight: bold;
}
.flatpickr-time input.flatpickr-minute,
.flatpickr-time input.flatpickr-second {
  font-weight: 400;
}
.flatpickr-time input:focus {
  outline: 0;
  border: 0;
}
.flatpickr-time .flatpickr-time-separator,
.flatpickr-time .flatpickr-am-pm {
  height: inherit;
  float: left;
  line-height: inherit;
  color: #393939;
  font-weight: bold;
  width: 2%;
  -webkit-user-select: none;
     -moz-user-select: none;
      -ms-user-select: none;
          user-select: none;
  -webkit-align-self: center;
      -ms-flex-item-align: center;
          align-self: center;
}
.flatpickr-time .flatpickr-am-pm {
  outline: 0;
  width: 18%;
  cursor: pointer;
  text-align: center;
  font-weight: 400;
}
.flatpickr-time input:hover,
.flatpickr-time .flatpickr-am-pm:hover,
.flatpickr-time input:focus,
.flatpickr-time .flatpickr-am-pm:focus {
  background: #eee;
}
.flatpickr-input[readonly] {
  cursor: pointer;
}
@-webkit-keyframes fpFadeInDown {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -20px, 0);
            transform: translate3d(0, -20px, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
  }
}
@keyframes fpFadeInDown {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, -20px, 0);
            transform: translate3d(0, -20px, 0);
  }
  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
            transform: translate3d(0, 0, 0);
  }
}
