:root{--dp:1}
/* compact.css — V718 density pass.
   ------------------------------------------------------------------------
   ONE place for the whole-site "tighten the spacing" work. It is loaded LAST
   in <head> (after each page's own stylesheet), so these rules win by cascade
   order at matching specificity WITHOUT editing any tool's CSS — which means
   the exact-string CSS assertions in the test suite stay green, and the entire
   density pass can be dialled back or removed by touching this one file.

   Scale (roughly the Destinations-table tightness Sameer approved):
     card / panel / section  padding -> ~10-12px, margin -> ~9-10px
     inputs / selects        padding -> ~6px 9px
     table cells             padding -> 4px 8px
     list rows / items       padding -> ~6px
   Only TOOL-PREFIXED selectors are used, so the shell, the games and any page
   not listed here are untouched. finance/admin (inline JS styles) and a few
   generic-class pages come in a later targeted batch.
   ------------------------------------------------------------------------ */

/* ---- JobTrack (jobcards.css) ---- */
.jc-block{padding:12px 14px!important}
.jc-card{padding:11px 12px!important}
.jc-sec{margin-bottom:10px!important}

/* ---- MCQ (mcq.css) ---- */
.mcq-tile{padding:11px 12px!important}
.mcq-card{padding:12px!important}
.mcq-score{padding:14px!important;margin-bottom:14px!important}
.mcq-field{padding:8px 10px!important;margin-bottom:9px!important}
.mcq-modal{padding:16px!important}

/* ---- Investments (invest.css) ---- */
.iv-card{padding:11px 13px!important;margin-bottom:10px!important}

/* ---- OpinionHub (opinion.css) ---- */
.oh-card{padding:11px!important;margin-bottom:10px!important}
.oh-tile{padding:8px 10px!important}
.oh-tbl th,.oh-tbl td{padding:5px 9px!important}
.oh-in,.oh-sel,.oh-ta{padding:7px 10px!important}
.ohj-card{padding:11px!important;margin-bottom:10px!important}

/* ---- OpinionHub public (opinion_pub.css) ---- */
.ohp-compose{padding:8px!important;margin-bottom:8px!important}
.ohp-head{padding:8px 11px 0!important}
.ohp-sheet-head,.ohp-sheet-foot{padding:9px 13px!important}

/* ---- MathLab (mathlab.css) ---- */
#mm .panel{padding:10px!important}
.mm-tile{padding:7px 9px!important}
.mm-lvlbox{padding:8px 11px!important}
.mm-topic li{padding:5px 0!important}

/* ---- FormulaLab (formulalab.css) ---- */
.fl-head{padding:6px 0 9px!important}
.fl-weak,.fl-duerow{padding:6px 0!important}

/* ---- Duo (duo.css) ---- */
.duo .gcard{padding:12px!important}
.duo .opt{padding:11px!important;margin-bottom:8px!important}

/* ---- Weather (weather.css) ---- */
.wx-hero-in{padding:10px 12px!important}
.wx-cal{padding:8px!important}
.wx-trend-wrap{padding:8px 11px!important}

/* ---- Noise Lab (noise_lab.css) ---- */
.nl-item{padding:8px 12px 8px 20px!important}
.nl-group-head{padding:10px 12px!important}

/* ---- TuneBook (tunebook.css) ---- */
.tb-card{padding:11px!important}

/* ---- Market Pulse (template <style>) ---- */
.article-card{padding:10px 14px!important}

/* ---- Stocks (template <style>) ---- */
.st-card{padding:10px 12px!important;margin-bottom:10px!important}

/* ---- To-Do (template <style>) ---- */
.tk-editor{padding:11px!important;margin-bottom:11px!important}
.tk-card{padding:9px 12px!important}
.tk-in,.tk-editor input,.tk-editor select,.tk-editor textarea{padding:6px 9px!important}

/* ---- QR (template <style>) ---- */
.qr-card-p{padding:10px!important;margin-bottom:9px!important}
.qr-tg-head{padding:6px 9px!important}

/* ---- PDF tools (template <style>) ---- */
.pt-card{padding:9px!important}
#pt-search{padding:7px 10px!important;margin-bottom:10px!important}

/* ---- Friends (template <style>) ---- */
.fr-add{padding:9px!important;margin-bottom:10px!important}
.fr-row{padding:8px 12px!important}

/* ---- Messages (template <style>) ---- */
.mc-card{padding:8px 10px!important;margin-bottom:9px!important}
.mc-item{padding:6px 9px!important}

/* ---- WordLab (wordlab.css) ---- */
.wl-stats{padding:9px!important}
#wl-search{padding:7px 10px!important}

/* ---- RaffleHub (raffle.css) ---- */
.rh-panel,.rh-glass{padding:11px!important}
.rh-box{padding:11px!important}

/* =============================== V719: remaining pages ===================== */
/* Scoped by each page's own wrapper so the shared .panel/.kpi classes tighten only
   the intended page. (finance & admin still set some ROWS via inline JS a stylesheet
   can't reach — those keep their spacing; everything class-based tightens here.) */

/* ---- FinTrack (finance.html, wrapper .fin) ---- */
.fin .panel{padding:11px!important;margin-bottom:11px!important}
.fin .kpi{padding:9px 12px!important}
.fin .tord-row{padding:5px 9px!important;margin-bottom:5px!important}
.fin .fin-in,.fin .fin-fld input,.fin .fin-fld select,.fin .fin-fld textarea{padding:7px 10px!important}
.fin .fin-tab{padding:5px 12px!important}
.fin .fin-seg button{padding:6px 11px!important}

/* ---- Splits (splits.html, wrapper .sp) ---- */
.sp .panel{padding:11px!important;margin-bottom:11px!important}
.sp .kpi{padding:9px 12px!important}
.sp .sp-fld input,.sp .sp-fld select,.sp .sp-fld textarea{padding:7px 10px!important}
.sp .mem-row{padding:4px 0!important}

/* ---- JobTrack page shell (jobtrack.html, wrapper .jt; cards are .jc-* above) ---- */
.jt .panel{padding:11px!important;margin-bottom:11px!important}
.jt .kpi{padding:9px 12px!important}

/* ---- Central Admin (admin.html — class-based controls only) ---- */
.admin-nav{padding-bottom:8px!important;margin:10px 0 12px!important}
.admin-nav a{padding:5px 11px!important}
.ts-tools a{padding:9px 12px!important}
.tf-row{padding:7px 11px!important}
.mis-card{padding:9px 12px!important}
.mis-kpi{padding:6px 10px!important}
.atab{padding:5px 12px!important}
.gar-empty{padding:10px 12px!important}

/* ---- Bullion (bullion.html, wrapper .bl-wrap) ---- */
.bl-tab{padding:5px 12px!important}

/* ---- OpinionHub extra (opinion_ux.css) ---- */
.oh-qrow .acts .oh-btn{padding:4px 7px!important}

/* ===================================================================== V732
   NO PERFECTLY-SQUARE BOXES, ANYWHERE — his redline: "these boxes edges should
   not be perpendicular; it should be curved. check ALL boxes in all tools, not
   only bingo."

   A gentle radius safety-net for the interactive boxes — text/number inputs,
   selects, textareas and buttons — that were relying on the browser's square
   default. The selector is wrapped in :where(), which has ZERO specificity, so
   it loses to EVERY other border-radius rule on the site: any control a tool
   already rounds its own way keeps exactly what it had, and a joined segment that
   deliberately squares its inner buttons keeps that too. Only the controls that
   set no radius at all — the square ones — pick this up. Checkboxes, radios,
   ranges and colour swatches keep their native shapes. Old browsers without
   :where() simply skip the net (they just don't gain the rounding); the tools'
   own rounded designs are unaffected either way. */
:where(input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=color]),
       select, textarea){border-radius:8px}
/* Note on buttons: they are deliberately NOT in this net. A blanket radius on
   <button> rounds the inner buttons of joined/segmented toggles (Yes|No, the tab
   rails, the seg controls) that butt together inside an overflow-clipped, rounded
   container, which leaves a notch at the seam. Standalone buttons across the site
   already carry their own radius, so the square-box complaint is about the FIELD
   boxes above, and those are what this rounds. A specific square button, if one
   turns up, is a one-line per-tool fix rather than a risky global one. */

/* ==================================================================== V793
   TIGHTER, AND ACROSS ALL CLASS-BASED TOOLS. His "reduce padding from everything ...
   everything seems highly padded" (Duo + Spin + the other class-based tools; the board
   games — chess/sudoku/minesweeper/snake/ludo/tictactoe — have no padding to give).

   This block sits AFTER the V718/V719 rules, so it wins by cascade at equal specificity
   WITHOUT editing them (the exact-string tests on the old lines stay green), and the whole
   pass is still one file that can be dialled back. Still tool-prefixed; stages/boards and
   the shell are left alone. Scale: card/panel ~8-calc(9px * var(--dp)), section gap/margin ~calc(7px * var(--dp)), rows ~calc(6px * var(--dp)). */

/* --- re-tighten the V718/V719 content primitives --- */
.jc-block{padding:calc(9px * var(--dp)) calc(11px * var(--dp))!important} .jc-card{padding:calc(8px * var(--dp)) calc(10px * var(--dp))!important} .jc-sec{margin-bottom:calc(7px * var(--dp))!important}
.jt .panel,.fin .panel,.sp .panel{padding:calc(9px * var(--dp))!important;margin-bottom:calc(8px * var(--dp))!important}
.fin .kpi,.sp .kpi,.jt .kpi{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important}
.fin .tord-row{padding:calc(4px * var(--dp)) calc(8px * var(--dp))!important;margin-bottom:calc(4px * var(--dp))!important} .sp .mem-row{padding:calc(3px * var(--dp)) 0!important}
.mcq-tile{padding:calc(8px * var(--dp)) calc(10px * var(--dp))!important} .mcq-card{padding:calc(9px * var(--dp))!important} .mcq-score{padding:calc(10px * var(--dp))!important;margin-bottom:calc(9px * var(--dp))!important}
.mcq-field{padding:calc(6px * var(--dp)) calc(9px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important} .mcq-modal{padding:calc(12px * var(--dp))!important}
.iv-card{padding:calc(8px * var(--dp)) calc(11px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important}
.oh-card,.ohj-card{padding:calc(8px * var(--dp)) calc(10px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important} .oh-tile{padding:calc(6px * var(--dp)) calc(9px * var(--dp))!important}
.oh-tbl th,.oh-tbl td{padding:calc(4px * var(--dp)) calc(8px * var(--dp))!important}
.ohp-compose{padding:calc(7px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important} .ohp-sheet-head,.ohp-sheet-foot{padding:calc(7px * var(--dp)) calc(11px * var(--dp))!important}
#mm .panel{padding:calc(8px * var(--dp))!important} .mm-tile{padding:calc(6px * var(--dp)) calc(8px * var(--dp))!important} .mm-lvlbox{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important}
.fl-head{padding:calc(5px * var(--dp)) 0 calc(7px * var(--dp))!important}
.tb-card{padding:calc(8px * var(--dp))!important}
.st-card{padding:calc(8px * var(--dp)) calc(10px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important}
.tk-editor{padding:calc(9px * var(--dp))!important;margin-bottom:calc(8px * var(--dp))!important} .tk-card{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important}
.qr-card-p{padding:calc(8px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important} .qr-tg-head{padding:calc(5px * var(--dp)) calc(9px * var(--dp))!important}
.pt-card{padding:calc(8px * var(--dp))!important}
.fr-add{padding:calc(8px * var(--dp))!important;margin-bottom:calc(8px * var(--dp))!important} .fr-row{padding:calc(6px * var(--dp)) calc(10px * var(--dp))!important}
.mc-card{padding:calc(7px * var(--dp)) calc(9px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important} .mc-item{padding:calc(5px * var(--dp)) calc(8px * var(--dp))!important}
.wl-stats{padding:calc(8px * var(--dp))!important}
.rh-panel,.rh-glass,.rh-box{padding:calc(9px * var(--dp))!important}
.article-card{padding:calc(8px * var(--dp)) calc(12px * var(--dp))!important}
.nl-item{padding:calc(6px * var(--dp)) calc(12px * var(--dp)) calc(6px * var(--dp)) calc(18px * var(--dp))!important} .nl-group-head{padding:calc(8px * var(--dp)) calc(11px * var(--dp))!important}
.wx-hero-in{padding:calc(8px * var(--dp)) calc(11px * var(--dp))!important} .wx-cal{padding:calc(7px * var(--dp))!important} .wx-trend-wrap{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important}
.mis-card{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important} .ts-tools a{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important} .tf-row{padding:calc(6px * var(--dp)) calc(10px * var(--dp))!important}

/* --- Duo (everything over-padded) --- */
.duo .screen{padding:calc(16px * var(--dp)) calc(14px * var(--dp)) calc(30px * var(--dp))!important}
.duo .gcard{padding:calc(11px * var(--dp))!important} .duo .opt{padding:calc(10px * var(--dp))!important;margin-bottom:calc(7px * var(--dp))!important}
.duo .cta{padding:calc(12px * var(--dp))!important} .duo .qcard,.duo .pcard{padding:calc(13px * var(--dp))!important}
.duo .freein,.duo .modal input{padding:calc(9px * var(--dp)) calc(11px * var(--dp))!important} .duo .optbtn{padding:calc(10px * var(--dp))!important} .duo .rbtn{padding:calc(8px * var(--dp))!important}
.duo .hero{padding:calc(10px * var(--dp)) 0 calc(14px * var(--dp))!important} .duo .secnum{margin:calc(12px * var(--dp)) 0 calc(7px * var(--dp))!important}
.duo .section-lbl{margin:calc(13px * var(--dp)) 0 calc(8px * var(--dp))!important} .duo .pslot,.duo .pname{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important} .duo .pnames{gap:calc(7px * var(--dp))!important}
.duo .actbtn{padding:calc(9px * var(--dp)) calc(11px * var(--dp))!important} .duo .result-card{padding:calc(14px * var(--dp))!important} .duo .chip{padding:calc(7px * var(--dp)) calc(12px * var(--dp))!important}
.duo .lenrow{gap:calc(9px * var(--dp))!important} .duo .brk-row{padding:calc(7px * var(--dp)) calc(10px * var(--dp))!important}
.duo .deckdd .ddrow,.duo .sounddd .ddrow{padding:calc(9px * var(--dp)) calc(12px * var(--dp))!important}

/* --- Spin the Bottle --- */
.stb .screen{padding:calc(16px * var(--dp)) calc(14px * var(--dp)) calc(30px * var(--dp))!important}
.stb .opt{padding:calc(10px * var(--dp))!important} .stb .cta{padding:calc(12px * var(--dp))!important} .stb .prompt-card{padding:calc(13px * var(--dp))!important}
.stb .freein,.stb .modal input{padding:calc(9px * var(--dp)) calc(11px * var(--dp))!important} .stb .rbtn{padding:calc(8px * var(--dp))!important} .stb .editp,.stb .addp{padding:calc(9px * var(--dp))!important}
.stb .hero{padding:calc(6px * var(--dp)) 0 calc(12px * var(--dp))!important} .stb .section-lbl{margin:calc(13px * var(--dp)) 0 calc(8px * var(--dp))!important} .stb .seg3 button{padding:calc(8px * var(--dp))!important}
.stb .prow,.stb .prow2{padding:calc(6px * var(--dp)) calc(10px * var(--dp))!important}
.stb .deckdd .ddrow,.stb .botdd .ddrow{padding:calc(9px * var(--dp)) calc(12px * var(--dp))!important}

/* --- Imposter (padded cards) --- */
.im-card{padding:calc(12px * var(--dp))!important} .im-reveal{padding:calc(16px * var(--dp)) calc(12px * var(--dp))!important} .im-code{padding:calc(9px * var(--dp))!important}
.im-chip{padding:calc(6px * var(--dp)) calc(12px * var(--dp))!important} .im-btn{padding:calc(9px * var(--dp)) calc(16px * var(--dp))!important}

/* V794: no native up/down arrows on number steppers -- the (-) / (+) buttons
   and manual typing are the control (his "wherever we have (-) (+), remove up down
   arrows"). Firefox textfield look + WebKit/Blink inner/outer spin buttons hidden. */
input[type=number]{-moz-appearance:textfield;appearance:textfield}
input[type=number]::-webkit-outer-spin-button,
input[type=number]::-webkit-inner-spin-button{-webkit-appearance:none;appearance:none;margin:0}

/* ==========================================================================
   V1015 — THE OWNER-ONLY MARK (OOV)

   HIS FOUR ANSWERS: plain `OOV`, no visible tooltip · the honest three-state
   mark on the two shareable settings · one mark at the top of an owner-only
   page and none on the sections inside · admins see it too.

   IT IS A LABEL, NOT A LOCK. 209 routes are gated by `@owner_required` and the
   two shareable settings are decided in `bingo_access.py`. Nothing is ever
   hidden BY this mark instead of by the gate -- RULES/07 records that shape as
   a failure mode ("a rule enforced in one screen is a note, not a rule"), and
   `tests/_oovscan.py` fails the build if a gated page ships without the mark.

   THE COLOUR IS `--accent`, NOT A HEX PAIR. The decision was written down as
   "#ffcf5c dark / #866400 light", and those are precisely --accent in those two
   themes -- but the site has five. Taking the token gives oxblood (#e8b765),
   forest (#e3c17a) and parchment (#8a5a12) for nothing, keeps
   `test_v578_contrast` meaningful over this mark, and stays right for the sixth
   theme without anybody editing this rule.

   IT COSTS THE HEADER NO HEIGHT. 10px text on a 3px pad is ~16px against the
   title's own line box, so it sits inside the line rather than lifting it --
   which is the whole reason it is IN the title and not a chip of its own in the
   header row. V752 measured a chip there at 117-141px on five tools against
   `test_v651`'s 110px ceiling, and reverted. `flex:none` so it never truncates
   when the tool name does.
   ========================================================================== */
.oov{display:inline-flex;align-items:center;flex:none;vertical-align:middle;
     font-size:10px;font-weight:800;letter-spacing:.07em;line-height:1;
     padding:3px 6px;border-radius:4px;white-space:nowrap;margin-left:7px;
     color:var(--accent);
     border:1px solid color-mix(in srgb, var(--accent) 45%, transparent);
     /*  NO TINTED GROUND, AND test_v578_contrast IS WHY. The first cut filled the
         chip with `--accent` at 12%. That lightens the ground under its own text,
         and --accent is chosen to clear 4.5:1 against the page's grounds with very
         little to spare -- V578 records 4.61:1 on --btn as the tightest. The tint
         spent that margin and put FOUR pairs under the floor: 4.26 and 4.40 on the
         Teams-news heading, 3.92 and 4.11 on OpinionHub's, in light and parchment,
         where opinion.css declares its own darker --accent. Measured, not reasoned:
         the suite named all four and the themes they were in.
         Transparent, the mark sits on the page's own ground, which --accent is
         already verified against. The border carries the chip shape instead, and a
         border is not text, so it has no floor to clear. */
     background:transparent}
/*  THE THIRD STATE. A flat OOV would be false on the Bingo statement the moment
    he grants access -- V924 built that toggle to his own instruction -- so a
    shared setting says so in the site's own "this is fine" colour rather than in
    the owner-only one. */
.oov.oov-shared{color:var(--good);
     border-color:color-mix(in srgb, var(--good) 45%, transparent)}
/*  ON A SECTION BAR the mark sits at the end of the bar, not against the
    heading text, so a long section name wraps without dragging it along. */
.sechd .oov{margin-left:auto}
