2026-10-15 23:08:47 -06:00
/*
PESCO dark theme. Ported from the old build's src/app.src.html (PacketStation repo).
Values are copied as they were so trained users see the same look.
Each block notes the old selectors it came from.
Fonts: the old page loaded Barlow Condensed, IBM Plex Sans and IBM Plex Mono from Google Fonts.
Here the same families are self-hosted from the @fontsource npm packages (see src/theme/fonts.ts).
The fallback stacks are the old ones, so the page still reads right if a font file fails.
*/
/* From :root. */
: root {
--bg : #0d161b ;
--panel : #1a252b ;
--panel2 : #162931 ;
--line : #26363e ;
--line2 : #33474f ;
--cyan : #49c0de ;
--pink : #e5589f ;
--amber : #e7b33c ;
--green : #5fc98a ;
--red : #ef6b6b ;
--white : #ffffff ;
--near : #eff5f8 ;
--body : #a9bac3 ;
--muted : #77878f ;
--warnbg : #221b28 ;
/* Shades the old page wrote inline. Named here so components never hard-code them. */
--on-cyan : #06222b ;
--on-pink : #2a0717 ;
--on-green : #06210f ;
--field : #0f1b20 ;
--col : #111d23 ;
--sel : #123643 ;
--sheet : #13222a ;
--top-from : #0f2129 ;
--scrim : rgba ( 3 , 8 , 10 , 0.66 );
--f-disp : "Barlow Condensed" , "Arial Narrow" , Arial , sans-serif ;
--f-body : "IBM Plex Sans" , Helvetica , Arial , sans-serif ;
--f-mono : "IBM Plex Mono" , ui-monospace , Consolas , monospace ;
--toph : 64 px ;
color-scheme : dark ;
}
/* From *, [hidden], html, body, form controls, :focus-visible, reduced motion, .wrap. */
*, * :: before , * :: after { box-sizing : border-box ; }
[ hidden ] { display : none !important ; }
html , body { background : var ( -- bg ); }
body { color : var ( -- body ); font-family : var ( -- f - body ); font-size : 15 px ; line-height : 1.45 ; margin : 0 ; }
button , input , select , textarea { font : inherit ; color : inherit ; }
: focus-visible { outline : 2 px solid var ( -- cyan ); outline-offset : 2 px ; }
@ media ( prefers-reduced-motion : reduce ) { * { transition : none !important ; animation : none !important ; } }
. wrap { padding-inline : 16 px ; padding-block : 14 px 48 px ; max-width : 1500 px ; margin : 0 auto ; }
/* Top bar. From .top, .top-in, .brand, .brand img, .brand .nm, .roles, .top .sp, .who, .proto. */
. top { position : sticky ; top : env ( safe - area - inset - top , 0 px ); z-index : 30 ; background : linear-gradient ( 180 deg , var ( -- top - from ), var ( -- bg )); border-bottom : 1 px solid var ( -- line ); padding-inline : 16 px ; padding-block : 10 px ; }
. top-in { display : flex ; align-items : center ; gap : 14 px ; flex-wrap : wrap ; max-width : 1500 px ; margin : 0 auto ; }
. brand { display : flex ; align-items : center ; gap : 12 px ; min-width : 0 ; color : inherit ; text-decoration : none ; }
. brand img { height : 34 px ; width : auto ; }
. brand . nm { font-family : var ( -- f - disp ); font-weight : 600 ; font-size : 22 px ; letter-spacing : .06 em ; color : var ( -- near ); text-transform : uppercase ; white-space : nowrap ; }
. brand . nm span { color : var ( -- cyan ); }
. roles { display : flex ; gap : 4 px ; background : var ( -- panel ); border : 1 px solid var ( -- line ); border-radius : 10 px ; padding : 4 px ; flex-wrap : wrap ; }
. roles button { border : 0 ; background : transparent ; padding : 8 px 14 px ; border-radius : 7 px ; font-weight : 600 ; font-size : 14 px ; color : var ( -- body ); cursor : pointer ; min-height : 40 px ; }
. roles button [ aria-pressed = "true" ] { background : var ( -- cyan ); color : var ( -- on - cyan ); }
. top . sp { flex : 1 ; }
. who { font-size : 13 px ; color : var ( -- muted ); display : flex ; align-items : center ; gap : 8 px ; }
. who select { background : var ( -- panel ); border : 1 px solid var ( -- line2 ); border-radius : 8 px ; padding : 8 px 10 px ; color : var ( -- near ); font-weight : 600 ; min-height : 40 px ; }
. proto { font-family : var ( -- f - mono ); font-size : 11 px ; letter-spacing : .08 em ; color : var ( -- amber ); border : 1 px solid #5a4720 ; border-radius : 6 px ; padding : 3 px 7 px ; text-transform : uppercase ; }
/* Type. From .eyebrow, h1, h2, h3, .mono, .muted, .small, .sr, .lnk. */
. eyebrow { font-family : var ( -- f - mono ); font-size : 11.5 px ; font-weight : 600 ; letter-spacing : .14 em ; text-transform : uppercase ; color : var ( -- cyan ); }
h1 , h2 , h3 { color : var ( -- near ); margin : 0 ; text-wrap : balance ; }
h1 { font-family : var ( -- f - disp ); font-weight : 700 ; font-size : 34 px ; letter-spacing : .02 em ; line-height : 1.05 ; }
h2 { font-family : var ( -- f - disp ); font-weight : 600 ; font-size : 22 px ; letter-spacing : .04 em ; text-transform : uppercase ; }
h3 { font-size : 15 px ; font-weight : 600 ; }
. mono { font-family : var ( -- f - mono ); font-variant-numeric : tabular-nums ; }
. muted { color : var ( -- muted ); }
. small { font-size : 13 px ; }
. sr { position : absolute ; width : 1 px ; height : 1 px ; overflow : hidden ; clip : rect ( 0 0 0 0 ); white-space : nowrap ; }
. lnk { all : unset ; cursor : pointer ; color : var ( -- cyan ); text-decoration : underline ; text-underline-offset : 3 px ; font-weight : 600 ; }
. lnk : focus-visible { outline : 2 px solid var ( -- cyan ); outline-offset : 2 px ; }
/* KPI tiles. From .kpis, .kpi, button.kpi, .kpi.on, .kpi .n, .kpi .l, .kpi.hot, .kpi.zero, .phead, .pacts. */
. kpis { display : grid ; grid-template-columns : repeat ( auto - fit , minmax ( 170 px , 1 fr )); gap : 12 px ; margin-block : 12 px 20 px ; }
. kpi { background : var ( -- panel ); border : 1 px solid var ( -- line ); border-top : 3 px solid var ( -- cyan ); border-radius : 10 px ; padding : 10 px 16 px 12 px ; text-align : left ; color : inherit ; font : inherit ; display : block ; width : 100 % ; }
button . kpi { cursor : pointer ; position : relative ; transition : border-color .15 s , background .15 s ; }
button . kpi : hover { border-color : var ( -- cyan ); border-top-color : var ( -- cyan ); }
button . kpi :: after { content : "Tap to show these \2193" ; position : absolute ; top : 10 px ; right : 12 px ; font-size : 11 px ; color : var ( -- muted ); opacity : 0 ; transition : opacity .15 s ; }
button . kpi : hover :: after , button . kpi : focus-visible :: after { opacity : 1 ; }
. kpi . on { background : var ( -- sel ); border-color : var ( -- cyan ); }
. kpi . on :: after { content : "Showing only these, tap to clear" ; opacity : 1 ; color : var ( -- cyan ); }
. kpi . n { font-family : var ( -- f - disp ); font-weight : 700 ; font-size : 44 px ; line-height : 1 ; color : var ( -- white ); font-variant-numeric : tabular-nums ; }
. kpi . n small { font-size : 20 px ; color : var ( -- muted ); font-weight : 600 ; }
. kpi . l { font-size : 12.5 px ; font-weight : 700 ; letter-spacing : .06 em ; text-transform : uppercase ; color : var ( -- cyan ); margin-top : 6 px ; }
. kpi . hot { border-top-color : var ( -- pink ); }
. kpi . hot . l { color : var ( -- pink ); }
. kpi . zero { border-top-color : var ( -- line2 ); }
. kpi . zero . n , . kpi . zero . l { color : var ( -- muted ); }
. phead { display : flex ; align-items : flex-end ; justify-content : space-between ; gap : 12 px 20 px ; flex-wrap : wrap ; margin-top : 4 px ; }
. pacts { display : flex ; gap : 8 px ; flex-wrap : wrap ; }
/* Sections, boards, cards, bars. From .sec, .sec-h, .board, .col, .col-h, .empty, .card, .bar, .panel. */
. sec { margin-block : 8 px 26 px ; }
. sec-h { display : flex ; align-items : baseline ; gap : 12 px ; margin-bottom : 10 px ; flex-wrap : wrap ; }
. sec-h . ct { font-family : var ( -- f - mono ); font-size : 13 px ; color : var ( -- muted ); }
. board { display : grid ; grid-template-columns : repeat ( auto - fit , minmax ( 240 px , 1 fr )); gap : 14 px ; }
. col { background : var ( -- col ); border : 1 px solid var ( -- line ); border-radius : 12 px ; padding : 12 px ; min-width : 0 ; display : flex ; flex-direction : column ; gap : 10 px ; }
. col-h { display : flex ; justify-content : space-between ; align-items : center ; font-family : var ( -- f - disp ); font-size : 17 px ; font-weight : 600 ; letter-spacing : .06 em ; text-transform : uppercase ; color : var ( -- near ); }
. col-h . c { font-family : var ( -- f - mono ); font-size : 13 px ; color : var ( -- muted ); }
. empty { border : 1 px dashed var ( -- line2 ); border-radius : 10 px ; padding : 16 px ; color : var ( -- muted ); font-size : 13.5 px ; text-align : center ; }
. empty . slim { padding : 12 px 14 px ; }
. card { background : var ( -- panel ); border : 1 px solid var ( -- line ); border-radius : 10 px ; padding : 12 px 14 px ; display : flex ; flex-direction : column ; gap : 6 px ; text-align : left ; width : 100 % ; color : inherit ; font : inherit ; transition : border-color .15 s ; }
button . card , a . card { cursor : pointer ; text-decoration : none ; }
button . card : hover , a . card : hover { border-color : var ( -- cyan ); }
. card . r1 { display : flex ; justify-content : space-between ; gap : 6 px 8 px ; align-items : center ; flex-wrap : wrap ; }
. card . r1 . pill { margin-left : auto ; max-width : 100 % ; overflow : hidden ; text-overflow : ellipsis ; }
. card . job { font-family : var ( -- f - disp ); font-weight : 700 ; font-size : 20 px ; color : var ( -- white ); letter-spacing : .03 em ; }
. card . tt { color : var ( -- near ); font-weight : 500 ; }
. card . meta { display : flex ; gap : 6 px 14 px ; flex-wrap : wrap ; font-size : 12.5 px ; color : var ( -- muted ); }
. card . meta b { color : var ( -- body ); font-weight : 600 ; }
. bar { height : 6 px ; border-radius : 3 px ; background : var ( -- bg ); overflow : hidden ; }
. bar i { display : block ; height : 100 % ; background : var ( -- cyan ); }
. bar i . over { background : var ( -- pink ); }
. panel { background : var ( -- panel ); border : 1 px solid var ( -- line ); border-radius : 10 px ; padding : 12 px 14 px ; }
. panel h3 { margin-bottom : 8 px ; }
/* Pills and status colours. From .pill, .pill::before, .st-*. */
. pill { display : inline-flex ; align-items : center ; gap : 6 px ; font-size : 11.5 px ; font-weight : 700 ; letter-spacing : .07 em ; text-transform : uppercase ; border-radius : 999 px ; padding : 3 px 10 px ; white-space : nowrap ; border : 1 px solid currentColor ; }
. pill :: before { content : "" ; width : 7 px ; height : 7 px ; border-radius : 50 % ; background : currentColor ; }
. st-draft { color : #9fb1ba ; }
. st-warehouse { color : var ( -- amber ); }
. st-ready { color : var ( -- cyan ); }
. st-assigned { color : #8fa6ff ; }
. st-in_progress { color : var ( -- green ); }
. st-review { color : var ( -- pink ); }
. st-qc { color : #b99cff ; }
. st-complete { color : #c6d4da ; }
. st-filed { color : var ( -- muted ); }
/* New in the rebuild. Health and error states for the shell. */
. st-ok { color : var ( -- green ); }
. st-bad { color : var ( -- red ); }
. st-wait { color : var ( -- muted ); }
/* Buttons and fields. From .btn and its variants, label.f, input.in, select.in, textarea.in, .in.big, .frow, .ckl. */
. btn { display : inline-flex ; align-items : center ; justify-content : center ; gap : 8 px ; border-radius : 9 px ; padding : 10 px 18 px ; font-weight : 700 ; font-size : 15 px ; border : 1 px solid var ( -- line2 ); background : var ( -- panel ); color : var ( -- near ); cursor : pointer ; min-height : 46 px ; letter-spacing : .02 em ; text-decoration : none ; }
. btn : hover { border-color : var ( -- cyan ); }
. btn . pri { background : var ( -- cyan ); border-color : var ( -- cyan ); color : var ( -- on - cyan ); }
. btn . pink { background : var ( -- pink ); border-color : var ( -- pink ); color : var ( -- on - pink ); }
. btn . ghost { background : transparent ; }
. btn . sm { min-height : 36 px ; padding : 6 px 12 px ; font-size : 13.5 px ; }
. btn . dim { opacity : .6 ; }
. btn . rejb { border-color : var ( -- red ); color : var ( -- red ); background : transparent ; }
. btn . voidbtn { border-color : var ( -- pink ); color : var ( -- pink ); }
. btn : disabled { opacity : .45 ; cursor : not-allowed ; }
. btn svg { vertical-align : -4 px ; }
label . f { display : flex ; flex-direction : column ; gap : 4 px ; font-size : 12 px ; font-weight : 700 ; letter-spacing : .06 em ; text-transform : uppercase ; color : var ( -- muted ); min-width : 0 ; }
input . in , select . in , textarea . in { background : var ( -- field ); border : 1 px solid var ( -- line2 ); border-radius : 8 px ; padding : 10 px 12 px ; color : var ( -- near ); font-size : 15 px ; min-height : 44 px ; width : 100 % ; text-transform : none ; letter-spacing : 0 ; font-weight : 500 ; }
input . in : focus , select . in : focus , textarea . in : focus { border-color : var ( -- cyan ); outline : none ; }
input . in : disabled , select . in : disabled , textarea . in : disabled { opacity : .55 ; cursor : not-allowed ; }
textarea . in { min-height : 80 px ; resize : vertical ; }
. in . big { font-size : 22 px ; min-height : 56 px ; font-family : var ( -- f - mono ); letter-spacing : .08 em ; }
. frow { display : grid ; grid-template-columns : repeat ( auto - fit , minmax ( 180 px , 1 fr )); gap : 12 px ; }
. ckl { display : flex ; gap : 10 px ; align-items : center ; font-weight : 600 ; color : var ( -- near ); min-height : 46 px ; cursor : pointer ; }
. ckl input { width : 24 px ; height : 24 px ; accent-color : var ( -- green ); }
/* Chips and segmented control. From .chips, .chip, .seg, .uchip, .rchip. */
. chips { display : flex ; gap : 8 px ; flex-wrap : wrap ; }
. chip { display : inline-flex ; gap : 8 px ; align-items : center ; border : 1 px solid var ( -- line2 ); border-radius : 999 px ; padding : 8 px 14 px ; cursor : pointer ; color : var ( -- near ); background : var ( -- panel ); font-size : 14 px ; min-height : 42 px ; }
. chip [ aria-pressed = "true" ] { border-color : var ( -- cyan ); background : var ( -- sel ); }
. seg { display : inline-flex ; border : 1 px solid var ( -- line2 ); border-radius : 10 px ; overflow : hidden ; }
. seg button { background : var ( -- panel ); color : var ( -- near ); border : 0 ; padding : 8 px 14 px ; min-height : 44 px ; cursor : pointer ; font-size : 13.5 px ; }
. seg button + button { border-left : 1 px solid var ( -- line2 ); }
. seg button [ aria-pressed = "true" ], . seg button [ aria-selected = "true" ] { background : var ( -- sel ); color : var ( -- cyan ); font-weight : 700 ; }
. uchip { display : inline-flex ; gap : 8 px ; align-items : center ; background : var ( -- panel ); border : 1 px solid var ( -- line ); border-radius : 999 px ; padding : 6 px 12 px ; color : var ( -- near ); font-size : 13 px ; }
. uchip . mono { color : var ( -- muted ); }
. rchip { display : inline-block ; line-height : 1.5 ; font-size : 11.5 px ; font-weight : 700 ; letter-spacing : .04 em ; border-radius : 6 px ; padding : 2 px 8 px ; background : #14262e ; color : var ( -- cyan ); border : 1 px solid #23414c ; }
. rchip . supervisor { color : var ( -- pink ); border-color : #5a2a44 ; background : #22131b ; }
. rchip . lead { color : var ( -- green ); border-color : #24503a ; background : #10221a ; }
. rchip . admin { color : var ( -- amber ); border-color : #5a4720 ; background : #211c10 ; }
/* Callouts and notices. From .callout, .callout.warn, .callout b, .viewonly, .back. */
. callout { border-left : 3 px solid var ( -- cyan ); background : var ( -- panel ); border-radius : 0 10 px 10 px 0 ; padding : 10 px 14 px ; font-size : 14 px ; margin-block : 10 px ; }
. callout . warn { border-left-color : var ( -- pink ); background : var ( -- warnbg ); }
. callout b { color : var ( -- white ); }
. viewonly { display : flex ; gap : 10 px ; align-items : flex-start ; border : 1 px dashed var ( -- line2 ); border-radius : 10 px ; padding : 10 px 14 px ; margin : 8 px 0 ; font-size : 14 px ; color : var ( -- body ); background : rgba ( 255 , 255 , 255 , .02 ); }
. viewonly b { color : var ( -- near ); }
. back { all : unset ; cursor : pointer ; color : var ( -- cyan ); font-weight : 600 ; font-size : 14 px ; display : inline-flex ; gap : 6 px ; align-items : center ; padding-block : 6 px ; }
/* Tabs. From .tabs, .tabs button, .tabs .cnt, .pmtabs (static variant). */
. tabs { display : flex ; gap : 2 px ; border-bottom : 1 px solid var ( -- line ); overflow-x : auto ; margin-bottom : 14 px ; position : sticky ; top : var ( -- toph ); z-index : 15 ; background : var ( -- bg ); }
. tabs button { border : 0 ; background : transparent ; color : var ( -- muted ); font-weight : 600 ; font-size : 15 px ; padding : 12 px 16 px ; border-bottom : 3 px solid transparent ; cursor : pointer ; white-space : nowrap ; min-height : 48 px ; }
. tabs button [ aria-selected = "true" ] { color : var ( -- near ); border-bottom-color : var ( -- cyan ); }
. tabs . cnt { font-family : var ( -- f - mono ); font-size : 12 px ; color : var ( -- cyan ); margin-left : 6 px ; }
. tabs . static { position : static ; }
/* Tables. From .tw, table, th, td, td.num, td .sub. Wrap a table in .tw for sideways scroll. */
. tw { overflow-x : auto ; border : 1 px solid var ( -- line ); border-radius : 10 px ; }
table { border-collapse : collapse ; width : 100 % ; font-size : 14 px ; }
th { background : var ( -- panel2 ); text-align : left ; font-size : 11.5 px ; letter-spacing : .08 em ; text-transform : uppercase ; color : var ( -- muted ); font-weight : 700 ; padding : 9 px 10 px ; white-space : nowrap ; }
td { border-top : 1 px solid var ( -- line ); padding : 9 px 10 px ; vertical-align : middle ; color : var ( -- near ); }
td . num , th . num { text-align : right ; font-family : var ( -- f - mono ); font-variant-numeric : tabular-nums ; }
td . sub { color : var ( -- muted ); font-size : 12.5 px ; }
/* Sheet, modal and toast. From .scrim, .sheet, .toast. */
. scrim { position : fixed ; inset : 0 ; background : var ( -- scrim ); z-index : 50 ; display : flex ; align-items : center ; justify-content : center ; padding : 16 px ; overscroll-behavior : contain ; }
. sheet { background : var ( -- sheet ); border : 1 px solid var ( -- line2 ); border-radius : 16 px ; width : min ( 760 px , 100 % ); max-height : calc ( 100 vh - 32 px ); max-height : calc ( 100 dvh - 32 px ); overflow : auto ; padding : 18 px ; display : flex ; flex-direction : column ; gap : 14 px ; box-shadow : 0 18 px 60 px rgba ( 0 , 0 , 0 , .55 ); margin : auto ; }
. sheet-acts { display : flex ; gap : 10 px ; justify-content : flex-end ; flex-wrap : wrap ; }
. toast { position : fixed ; left : 50 % ; bottom : calc ( 20 px + env ( safe - area - inset - bottom , 0 px )); transform : translateX ( -50 % ); background : var ( -- near ); color : var ( -- bg ); font-weight : 600 ; padding : 10 px 18 px ; border-radius : 10 px ; z-index : 60 ; box-shadow : 0 6 px 20 px rgba ( 0 , 0 , 0 , .4 ); max-width : calc ( 100 % - 32 px ); }
/* Sign-in card and PIN keypad. From .auth, .auth-card, .auth-form, .keypad. */
. auth { display : grid ; place-items : center ; padding-block : 5 vh 40 px ; }
. auth-card { width : min ( 440 px , 100 % ); background : var ( -- panel ); border : 1 px solid var ( -- line ); border-top : 3 px solid var ( -- cyan ); border-radius : 14 px ; padding : 24 px ; display : flex ; flex-direction : column ; gap : 14 px ; }
. auth-form { display : flex ; flex-direction : column ; gap : 12 px ; }
. keypad { display : grid ; grid-template-columns : repeat ( 3 , 1 fr ); gap : 8 px ; }
. keypad button { min-height : 60 px ; border-radius : 10 px ; border : 1 px solid var ( -- line2 ); background : var ( -- field ); color : var ( -- near ); font-family : var ( -- f - mono ); font-size : 22 px ; font-weight : 600 ; cursor : pointer ; }
. keypad button : active { background : var ( -- sel ); }
. keypad button : disabled { opacity : .45 ; cursor : not-allowed ; }
/* Lock screen placeholder. From body.blur-hidden #main and #guard .scrim. The guard sits above every sheet. */
. blur-hidden . wrap { filter : blur ( 18 px ); }
. scrim . lock { z-index : 90 ; }
. lock . auth-card { border-top-color : var ( -- amber ); }
/* Motion, opt-in through a .motion class on body. From .motion .scrim, .motion .sheet, .motion .toast and their keyframes. */
@ keyframes mfade { from { opacity : 0 ; } to { opacity : 1 ; } }
@ keyframes msheet { from { opacity : 0 ; transform : translateY ( 18 px ) scale ( .985 ); } to { opacity : 1 ; transform : none ; } }
@ keyframes mtoast { from { opacity : 0 ; transform : translate ( -50 % , 14 px ); } to { opacity : 1 ; transform : translate ( -50 % , 0 ); } }
. motion . scrim { animation : mfade .16 s ease-out ; }
. motion . sheet { animation : msheet .24 s cubic-bezier ( .2 , .7 , .2 , 1 ); }
. motion . toast { animation : mtoast .22 s cubic-bezier ( .2 , .7 , .2 , 1 ); }
/* Narrow screens. From the old @media (max-width:700px) and (max-width:640px) blocks. */
@ media ( max-width : 700px ) {
. tw table { min-width : 620 px ; }
. tabs { top : 0 ; position : static ; }
}
@ media ( max-width : 640px ) {
h1 { font-size : 28 px ; }
. kpi . n { font-size : 38 px ; }
. brand . nm { font-size : 18 px ; }
. phead h1 { font-size : 26 px ; }
}
2026-10-16 07:40:29 -06:00
/* ===== New in the rebuild (phase 1) ===== */
/* Sign-in, lock screen, Account and Admin. Built only from the tokens above. */
. callout . flush { margin : 0 ; }
. btn . wide { width : 100 % ; min-height : 56 px ; font-size : 17 px ; }
. center { align-self : center ; text-align : center ; }
. grow { flex : 1 ; }
. end { display : flex ; align-items : flex-end ; }
. nowrap { white-space : nowrap ; }
. stack { display : flex ; flex-direction : column ; gap : 12 px ; }
. uname { color : var ( -- near ); font-weight : 600 ; font-size : 14 px ; }
. chips . plain { list-style : none ; margin : 0 ; padding : 0 ; }
. chips . tight { gap : 4 px ; }
. chip . static { cursor : default ; min-height : 0 ; padding : 4 px 10 px ; font-size : 12.5 px ; }
. kv { display : grid ; grid-template-columns : repeat ( auto - fit , minmax ( 220 px , 1 fr )); gap : 10 px 20 px ; margin : 0 0 10 px ; }
. kv dt { font-size : 11.5 px ; font-weight : 700 ; letter-spacing : .06 em ; text-transform : uppercase ; color : var ( -- muted ); }
. kv dd { margin : 2 px 0 0 ; color : var ( -- near ); overflow-wrap : anywhere ; }
td . clip { max-width : 280 px ; overflow : hidden ; text-overflow : ellipsis ; white-space : nowrap ; }
tr . rowlink { cursor : pointer ; }
tr . rowlink : hover td { background : var ( -- panel ); }
tr . rowlink . on td { background : var ( -- sel ); }
tr . rowlink : focus-visible { outline : 2 px solid var ( -- cyan ); outline-offset : -2 px ; }
td . pill + . pill { margin-left : 4 px ; }
. lock . auth-card { max-height : calc ( 100 dvh - 32 px ); overflow : auto ; }