/* Event > market/line > offered bookmaker. One vertical list at every width. */
body { font-size:13px; }
.pm-top { min-height:58px; padding:10px 24px; display:flex; align-items:center; gap:28px; flex-wrap:wrap; border-bottom:1px solid var(--border); background:var(--surface-1); }
.pm-brand { color:var(--text); font-size:17px; font-weight:750; display:flex; align-items:center; gap:10px; }
.pm-mark { color:var(--accent); font-weight:900; }
.pm-top nav { display:flex; gap:5px; flex-wrap:wrap; }
.pm-top nav a { color:var(--text-2); padding:7px 12px; border-radius:5px; }
.pm-top nav a[aria-current] { color:var(--text); background:var(--surface-3); }
#pmAccount { margin-left:auto; max-width:100%; overflow-wrap:anywhere; }
.pm-shell { max-width:1600px; margin:auto; padding:22px 24px 40px; }
.pm-heading { display:flex; justify-content:space-between; gap:20px; margin-bottom:20px; align-items:center; flex-wrap:wrap; }
.pm-eyebrow { color:var(--accent); font-size:10px; font-weight:750; letter-spacing:1.5px; margin-bottom:8px; }
.pm-heading h1 { font-size:25px; margin-bottom:7px; }
.pm-health { display:flex; gap:7px; flex-wrap:wrap; }
.pm-source { background:var(--surface-1); border:1px solid var(--border); padding:5px 8px; border-radius:5px; font-size:11px; }
.pm-source::before { content:""; width:6px; height:6px; border-radius:50%; display:inline-block; background:var(--warn); margin-right:6px; }
.pm-source.healthy::before { background:var(--pos); }
.pm-source.error::before,.pm-source.disconnected::before { background:var(--neg); }
.pm-filters { background:var(--surface-1); border:1px solid var(--border); border-radius:8px; padding:14px; }
.pm-filter-row { display:flex; align-items:flex-end; flex-wrap:wrap; gap:12px; }
.pm-filter-row>label { display:flex; flex-direction:column; gap:5px; color:var(--text-2); font-size:11px; flex:1 1 135px; min-width:0; }
/* `hidden` means hidden. The rule above sets `display` on every label, and an
   author rule beats the user agent's `[hidden]{display:none}` - which is why
   the controls kept their place on the bar after being marked hidden. */
.pm-filters [hidden] { display:none!important; }
.pm-filter-row .pm-search { flex:2 1 230px; }
.pm-filters input:not([type=checkbox]),.pm-filters select { width:100%; height:33px; font-size:13px; }
.pm-filters .btn { min-height:33px; }
.pm-options { margin-top:13px; padding-top:12px; border-top:1px solid var(--border); align-items:center; }
.pm-options .pm-scope-choice { flex:0 1 220px; min-width:185px; }
.pm-event-empty { display:block; margin-top:6px; color:var(--text-2); font-size:10px; font-weight:400; white-space:normal; }
/* SCAN_LIGHT_20260923 - cella della prima passata: prezzi in arrivo, non
   "non quotato". Un respiro lento dice che la pagina sta arrivando. */
.pm-price.missing.pm-price-pending { animation:pm-pending-pulse 1.6s ease-in-out infinite; }
@keyframes pm-pending-pulse { 0%,100% { opacity:.25; } 50% { opacity:.7; } }
.pm-options .pm-inline { flex:0 1 auto; flex-direction:row; align-items:center; gap:7px; font-size:12px; }
.pm-options .pm-tolerance { width:62px!important; }

/* --- One bar ---------------------------------------------------------------
   The filters used to sit on two rows separated by a rule. Three of them -
   country, league and the market picker - are never touched in practice and
   are now hidden (kept in the DOM: the request still carries them and the
   address bar still restores them). What is left fits on a single line, so the
   two rows are dissolved with `display:contents` and their controls become
   children of one flex bar. Nothing is repositioned by hand: the same elements,
   one container.

   `display:contents` is what makes this safe - no wrapper to keep in sync, and
   on a narrow screen the bar simply wraps as any flex row does. */
.pm-filters { display:flex; flex-wrap:wrap; align-items:center; gap:10px; }
.pm-filters>.pm-one-line { display:contents; }
.pm-filters>.pm-one-line>label,
.pm-filters>.pm-one-line>details,
.pm-filters>.pm-one-line>button { align-self:center; }
/* The rule and the top margin belonged to the second row; there is one row now. */
.pm-filters>.pm-options { margin-top:0; padding-top:0; border-top:0; }
/* A search box wide enough to read, no longer the widest thing on the bar. */
.pm-filters .pm-search { flex:1 1 170px; max-width:230px; }
.pm-filters .pm-sport-filter { flex:0 0 108px; }
.pm-filters>.pm-one-line>label { flex:0 1 auto; }
.pm-filters .pm-reference-filter { flex:0 1 150px; }
.pm-filters .pm-side-filter { flex:0 0 74px; }
.pm-filters .pm-scope-choice { flex:0 1 165px; min-width:0; }
.pm-filters .pm-tolerance-filter { flex:0 0 132px; }
.pm-filters .pm-liquidity-filter { flex:0 0 150px; }
/* Reset and the summary toggle sit at the end of the bar, away from the rest. */
/* --- Order on the bar ------------------------------------------------------
   The controls live in two source rows for historical reasons; `display:contents`
   puts them all on one line, and `order` decides the sequence there, so the
   reading order can be fixed without moving anything in the document.

   Four groups, left to right, in the order a question is actually asked:
     what am I looking at   sport · search · horizon
     against what           reference · side · market scope
     from whom              bookmakers
     narrowed how           percentage · liquidity · columns
   and the three actions pushed to the right, away from the filters, so
   "Aggiorna" is never clicked by accident while reaching for a select. */
.pm-filters .pm-sport-filter      { order:1; }
.pm-filters .pm-search            { order:2; }
.pm-filters .pm-window-filter     { order:3; flex:0 0 96px; }
.pm-filters .pm-reference-filter  { order:4; margin-left:10px; }
.pm-filters .pm-side-filter       { order:5; }
.pm-filters .pm-scope-choice      { order:6; }
.pm-filters #pmBookPicker         { order:7; margin-left:10px; }
.pm-filters .pm-tolerance-filter  { order:8; margin-left:10px; }
.pm-filters .pm-liquidity-filter  { order:9; }
.pm-filters #pmMarketPicker       { order:10; }
.pm-filters #pmRefresh            { order:20; margin-left:auto; }
.pm-filters #pmReset              { order:21; }
.pm-filters #pmSignalsToggle      { order:22; }
.pm-reference { color:#e8c677; font-size:11px; border:1px solid #65552e; background:#282319; padding:7px 10px; border-radius:5px; }
.pm-books { display:flex; flex-wrap:wrap; gap:6px; margin-right:auto; }
.pm-bookpick { display:flex; gap:6px; align-items:center; padding:7px 10px; background:var(--surface-2); border:1px solid var(--border); border-radius:5px; cursor:pointer; }
.pm-bookpick:has(input:checked) { border-color:var(--accent); background:var(--accent-weak); }
.pm-bookpick:has(input:disabled) { opacity:.5; }
.pm-summary { display:flex; align-items:center; justify-content:space-between; gap:10px; flex-wrap:wrap; margin:18px 0 8px; }
#pmUpdated { margin-left:12px; font-size:11px; }
.pm-actions { display:flex; gap:5px; align-items:center; flex-wrap:wrap; font-size:11px; }
.pm-notice { color:var(--text-2); font-size:11px; margin:8px 0 18px; }
.pm-notice.error { color:var(--warn); }
.pm-state { text-align:center; padding:40px 16px; border:1px dashed var(--border-strong); border-radius:8px; color:var(--text-2); }
/* A search in flight keeps the previous answer on screen instead of blanking the
   page for the whole wait. The rows are held back visually so they read as the
   previous result, which is also what the pager and the summary line say. */
#pmEvents[data-pending-query="true"] { opacity:.62; transition:opacity 120ms linear; }
/* A local preview shows prices already received for a wider search of the same
   configuration, on their own clocks, while the authoritative request runs. It
   is held back less than a stale grid because the prices are the real ones, and
   marked so it cannot be mistaken for a confirmed answer. */
#pmEvents[data-preview="true"] { opacity:.82; outline:1px dashed var(--border-strong); outline-offset:2px; }
.pm-group { margin:24px 0 10px; color:var(--text-2); font-size:12px; display:flex; gap:8px; align-items:center; }
.pm-group strong { color:var(--text); }
.pm-event { margin-bottom:14px; border:1px solid var(--border-strong); border-radius:8px; background:var(--surface-1); overflow:hidden; }
.pm-event>summary { list-style:none; display:flex; align-items:center; gap:14px; padding:13px 16px; cursor:pointer; background:var(--surface-2); }
.pm-event>summary::-webkit-details-marker { display:none; }
.pm-event>summary::before { content:"+"; color:var(--accent); font-size:20px; width:16px; flex:none; }
.pm-event[open]>summary::before { content:"\2212"; }
.pm-event time { font-size:12px; font-variant-numeric:tabular-nums; white-space:nowrap; color:var(--text-2); }
.pm-event-title { flex:1; min-width:0; }
.pm-event-title h2 { font-size:16px; overflow-wrap:anywhere; }
.pm-event-title p { font-size:11px; color:var(--text-2); margin:4px 0 0; }
.pm-event-count { color:var(--text-2); font-size:11px; text-align:right; }
.pm-event-count b { display:block; color:var(--text); font-size:13px; }
.pm-event-note { padding:8px 16px; margin:0; font-size:11px; color:var(--text-2); border-bottom:1px solid var(--border); }
.pm-book-name { display:flex; align-items:center; gap:8px; }
.pm-book-icon { display:inline-flex; align-items:center; justify-content:center; width:25px; height:25px; background:var(--surface-3); border:1px solid var(--border-strong); border-radius:5px; color:var(--text); font-size:10px; flex:none; }
.pm-book-name small { display:block; color:var(--text-3); font-size:10px; font-weight:400; }
.pm-price { display:inline-flex; min-width:65px; gap:7px; justify-content:center; align-items:baseline; border-radius:4px; background:var(--surface-3); padding:5px 9px; }
.pm-price b { font-size:14px; font-weight:650; }
.pm-price small { color:var(--text-3); font-size:9px; }
.pm-price.stale { border:1px dashed var(--warn-border); background:transparent; }
.pm-price.stale b { color:var(--text-2); }
.pm-price.stale small { color:var(--warn); }
.pm-price.missing { color:var(--text-3); background:transparent; }
.pm-lay .pm-price { background:#291e2a; }
.pm-pager { display:flex; justify-content:center; gap:18px; align-items:center; margin-top:22px; }
.pm-empty-market { font-size:12px; color:var(--text-2); padding:16px; }
@media(max-width:900px) { .pm-top {padding:10px 14px;gap:12px}.pm-shell{padding:16px 12px}.pm-heading h1{font-size:22px}#pmAccount{display:none}.pm-offers th:first-child{width:180px}.pm-event-title h2{font-size:14px}.pm-event>summary{padding:12px;gap:8px}.pm-market{padding:0 10px 10px} }
@media(max-width:520px) { .pm-top nav{width:100%;gap:0}.pm-top nav a{padding:5px 10px}.pm-filters{padding:10px}.pm-filter-row{gap:8px}.pm-filter-row>label{flex-basis:120px}.pm-health{gap:4px}.pm-source{font-size:10px}.pm-event>summary{flex-wrap:wrap}.pm-event time{font-size:10px}.pm-event-title{flex-basis:65%}.pm-event-count{margin-left:24px;text-align:left}.pm-event-count b{display:inline;margin-right:5px}.pm-offers{min-width:330px}.pm-offers th:first-child{width:120px}.pm-offers th,.pm-offers td{padding:5px 4px}.pm-price{min-width:48px;padding:5px;gap:3px;flex-wrap:wrap}.pm-price b{font-size:13px}.pm-book-icon{display:none}.pm-book-name{font-size:11px}.pm-market{padding:0 6px 9px}.pm-summary{gap:12px}.pm-pager{gap:10px}.pm-heading{gap:12px} }

.pm-shell { padding-top:16px; }
.pm-heading { margin-bottom:12px; }
.pm-heading h1 { font-size:22px; }
.pm-eyebrow { margin-bottom:4px; }
.pm-summary { margin-top:12px; }
.pm-offers th,.pm-offers td { padding-top:4px; padding-bottom:4px; }

/* One matrix per event: market/line groups across, bookmaker rows down. */
.pm-matrix-wrap { overflow-x:auto; max-width:100%; scrollbar-gutter:stable; }
.pm-matrix { border-collapse:separate; border-spacing:0; table-layout:fixed; width:max-content; min-width:100%; font-variant-numeric:tabular-nums; }
.pm-matrix .pm-book-col { width:170px; }
.pm-matrix .pm-odds-col { width:76px; }
.pm-matrix th,.pm-matrix td { padding:5px 4px; text-align:center; border-bottom:1px solid var(--border); }
.pm-matrix thead th { background:var(--surface-2); }
.pm-matrix .pm-market-head th:not(.pm-book-head) { border-left:1px solid var(--border-strong); padding:8px 6px 4px; }
.pm-market-head b { display:block; font-size:11px; white-space:nowrap; }
.pm-market-head small { display:block; color:var(--text-2); font-weight:400; font-size:9px; margin-top:2px; }
.pm-outcome-head th { font-size:10px; color:var(--text-2); font-weight:500; }
.pm-matrix .pm-market-start { border-left:1px solid var(--border-strong); }
.pm-matrix .pm-book-head { position:sticky; left:0; z-index:2; text-align:left; background:var(--surface-1); border-right:1px solid var(--border-strong); min-width:170px; padding:7px 10px; }
.pm-matrix thead .pm-book-head { background:var(--surface-2); }
.pm-matrix tbody tr:hover td,.pm-matrix tbody tr:hover .pm-book-head { background:var(--surface-hover); }
.pm-matrix .pm-price { min-width:62px; padding:4px 5px; gap:3px; flex-direction:column; align-items:center; line-height:1.1; }
.pm-matrix .pm-price b { font-size:13px; }
.pm-matrix .pm-price small { font-size:8px; min-height:9px; }
.pm-matrix .pm-price.missing { min-height:30px; justify-content:center; }
.pm-matrix-wrap:focus-visible { outline:2px solid var(--accent); outline-offset:-2px; }
.pm-event-note { font-size:10px; padding:5px 12px; }
.pm-event>summary { padding-top:9px; padding-bottom:9px; }
.pm-shell { max-width:none; }
@media(max-width:520px) { .pm-matrix .pm-book-col{width:112px}.pm-matrix .pm-book-head{min-width:112px;padding:6px}.pm-matrix .pm-odds-col{width:68px}.pm-matrix .pm-price{min-width:57px}.pm-matrix .pm-book-name small{font-size:9px} }

/* Compact light comparator. Reference side uses exchange blue / pink. */
:root[data-theme] { color-scheme:light; --bg:#f4f6f9; --surface-1:#fff; --surface-2:#f0f3f7; --surface-3:#edf1f5; --surface-hover:#f5f8fc; --surface-sel:#eaf1fb; --border:#e0e6ed; --border-strong:#cbd5e1; --text:#243347; --text-2:#57677c; --text-3:#66758a; --accent:#225daf; --accent-weak:#edf4ff; --pos:#177b43; --warn:#936000; --warn-bg:#fff8e9; --warn-border:#e5c987; --neg:#b33339; --scrollbar:#bdc8d7; }
body { font-size:12px; }
.pm-top { min-height:42px; padding:5px 16px; gap:22px; }
.pm-brand { font-size:15px; }
.pm-top nav a { padding:5px 9px; }
.pm-shell { padding:10px 16px 24px; }
.pm-heading { margin-bottom:8px; gap:8px; }
.pm-heading h1 { font-size:17px; margin:0; }
.pm-health { gap:5px; }
.pm-source { padding:3px 6px; font-size:10px; background:transparent; border:0; }
.pm-filters { padding:8px 10px; border-radius:5px; }
.pm-filter-row { gap:8px; }
.pm-filter-row>label { gap:3px; font-size:10px; }
.pm-filters input:not([type=checkbox]),.pm-filters select { height:27px; font-size:12px; }
.pm-filters .btn { min-height:27px; }
.pm-options { margin-top:7px; padding-top:7px; gap:10px; }
.pm-bookpick { padding:4px 7px; background:transparent; border-color:transparent; }
.pm-bookpick:has(input:checked) { background:#f1f5fb; border-color:#d9e3ef; }
.pm-options .pm-inline { font-size:11px; }
.pm-reference-choice { display:flex; gap:7px; align-items:center; font-size:11px; font-weight:650; }
#pmReferenceSide { display:flex; border:1px solid #cbd5e1; border-radius:4px; overflow:hidden; }
#pmReferenceSide button { border:0; border-radius:0; background:#fff; color:#5a6980; padding:5px 10px; font-size:10px; cursor:pointer; }
#pmReferenceSide [data-reference-side="back"][aria-pressed="true"] { background:#cfe6fa; color:#125888; }
#pmReferenceSide [data-reference-side="lay"][aria-pressed="true"] { background:#f5d9e4; color:#8d3553; }
.pm-summary { margin:8px 0 4px; }
.pm-notice { font-size:10px; margin:4px 0 8px; }
.pm-group { margin:11px 0 5px; font-size:11px; }
.pm-event { border-radius:5px; margin-bottom:8px; }
.pm-event>summary { padding:6px 10px; gap:10px; background:#edf2f8; }
.pm-event-title { display:flex; align-items:baseline; gap:10px; flex-wrap:wrap; }
.pm-event-title h2 { font-size:13px; }
.pm-event-title p { margin:0; font-size:10px; }
.pm-event time { font-size:10px; }
.pm-event-count { display:flex; gap:8px; font-size:10px; }
.pm-event-count b { display:inline; font-size:10px; }
.pm-matrix .pm-book-col { width:145px; }
.pm-matrix .pm-odds-col { width:61px; }
.pm-matrix .pm-book-head { min-width:145px; padding:4px 8px; }
.pm-matrix th,.pm-matrix td { padding:3px; }
.pm-matrix .pm-market-head th:not(.pm-book-head) { padding:5px 4px 3px; background:#f8fafc; }
.pm-market-head b { font-size:10px; }
.pm-market-head small { display:inline; font-size:8px; margin:0; }
.pm-outcome-head th { font-size:9px; padding-top:2px; padding-bottom:3px; }
.pm-book-name { gap:6px; font-size:11px; }
.pm-book-icon { width:20px; height:20px; font-size:8px; border:0; background:#edf2f7; }
.pm-book-name small { display:none; }
.pm-matrix .pm-price { min-width:50px; padding:3px 4px; flex-direction:row; background:transparent; gap:2px; min-height:23px; }
.pm-matrix .pm-price b { font-size:12px; font-weight:650; }
.pm-matrix .pm-price small { display:none; }
.pm-matrix .pm-price.stale { border:0; }
/* Le quote storiche restano numeriche: sottolineatura puntinata e titolo
   ne indicano lo stato, senza asterischi su celle assenti o revocate. */
.pm-matrix .pm-price.stale::after { content:none; }
.pm-matrix .pm-price.stale b { color:#728093; }
.pm-matrix .pm-price.missing { min-height:23px; color:#9aa6b4; }
.pm-matrix .pm-reference-row.pm-back td,.pm-matrix .pm-reference-row.pm-back .pm-book-head { background:#e0effb; color:#175680; }
.pm-matrix .pm-reference-row.pm-lay td,.pm-matrix .pm-reference-row.pm-lay .pm-book-head { background:#f8e4ec; color:#8b3554; }
.pm-matrix .pm-reference-row .pm-price { background:transparent; }
.pm-reference-row .pm-book-name small { display:inline; margin-left:5px; font-size:8px; font-weight:400; }
.pm-reference-row .pm-book-icon { display:none; }
@media(max-width:520px) { .pm-shell{padding:8px}.pm-top{padding:6px 10px;gap:6px}.pm-heading{flex-wrap:wrap}.pm-event-title{display:block;flex-basis:60%}.pm-event-count{margin-left:20px}.pm-matrix .pm-book-col{width:115px}.pm-matrix .pm-book-head{min-width:115px;padding:4px 6px}.pm-matrix .pm-odds-col{width:59px}.pm-reference-row .pm-book-name small{display:block;margin:0}.pm-matrix .pm-price{min-width:48px} }

/* Minimal vertical rhythm: one compact header and 21px price rows. */
.pm-top { min-height:32px; padding:2px 12px; }
.pm-top nav a { padding:3px 8px; }
.pm-shell { padding:5px 12px 16px; }
.pm-heading { margin-bottom:4px; }
.pm-heading h1 { font-size:14px; }
.pm-filters { padding:5px 7px; border-radius:3px; }
.pm-filter-row>label { gap:1px; }
.pm-filters input:not([type=checkbox]),.pm-filters select { height:24px; }
.pm-filters .btn { min-height:24px; padding-top:3px; padding-bottom:3px; }
.pm-options { margin-top:4px; padding-top:4px; }
.pm-bookpick { padding:2px 6px; }
#pmReferenceSide button { padding:3px 9px; }
.pm-summary { margin:4px 0 0; }
.pm-actions .btn { padding:2px 5px; min-height:22px; }
.pm-notice { margin:0 0 3px; }
.pm-group { margin:4px 0 2px; line-height:16px; }
.pm-event { border-radius:2px; margin-bottom:3px; }
.pm-event>summary { padding:2px 7px; gap:7px; min-height:23px; }
.pm-event>summary::before { font-size:14px; width:10px; }
.pm-event-title h2 { font-size:12px; }
.pm-event-title p { display:none; }
.pm-event-title h2:hover { text-decoration:underline dotted; text-underline-offset:3px; }
.pm-event-count { font-size:9px; }
.pm-event-count b { font-size:9px; }
.pm-matrix .pm-book-head { padding:1px 6px; }
.pm-matrix th,.pm-matrix td { padding:1px 3px; height:21px; }
.pm-matrix .pm-market-head th:not(.pm-book-head) { padding:2px 3px 0; height:17px; }
.pm-market-head b { display:inline; font-size:10px; line-height:12px; }
.pm-market-head small { margin-left:4px; font-size:8px; }
.pm-outcome-head th { padding:0 3px 1px; height:14px; font-size:9px; line-height:12px; }
.pm-book-icon { display:none; }
.pm-book-name { line-height:17px; font-size:11px; white-space:nowrap; }
.pm-reference-row .pm-book-name small { display:none; }
.pm-matrix .pm-price,.pm-matrix .pm-price.missing { min-height:17px; padding:0 3px; line-height:17px; }
.pm-matrix .pm-price b { font-size:12px; }
.pm-matrix-wrap { scrollbar-gutter:auto; }
.pm-matrix-wrap::-webkit-scrollbar { height:5px; }
.pm-pager { margin:8px 0; font-size:11px; }
@media(max-width:520px) { .pm-shell{padding:5px}.pm-event-title{flex-basis:55%}.pm-event-count{margin-left:17px}.pm-event>summary{gap:4px}.pm-reference-row .pm-book-name small{display:none} }

#pmMore[hidden],#pmState[hidden] { display:none!important; }

/* Shared market grid: document scroll vertically, one horizontal scroll surface. */
.pm-matrix-wrap { --pm-context-width:220px; --pm-book-width:95px; --pm-odds-width:44px; overflow-x:auto; overflow-y:hidden; border:1px solid var(--border-strong); }
.pm-matrix { width:calc(var(--pm-context-width) + var(--pm-book-width) + var(--pm-outcome-count) * var(--pm-odds-width)); min-width:0; }
.pm-matrix .pm-context-col { width:var(--pm-context-width); }
.pm-matrix .pm-book-col { width:var(--pm-book-width); }
.pm-matrix .pm-odds-col { width:var(--pm-odds-width); }
.pm-matrix .pm-context { position:sticky; left:0; z-index:3; width:var(--pm-context-width); padding:2px 7px; text-align:left; vertical-align:middle; background:#f5f8fc; border-right:1px solid var(--border-strong); font-weight:400; overflow:hidden; }
.pm-matrix .pm-book-head { left:var(--pm-context-width); min-width:0; width:var(--pm-book-width); }
.pm-matrix .pm-market-head .pm-context { background:var(--surface-2); font-size:10px; font-weight:600; }
.pm-matrix .pm-market-head th:not(.pm-book-head):not(.pm-context) { background:#f8fafc; }
.pm-matrix .pm-context .pm-competition { font-size:10px; color:var(--text-2); line-height:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pm-matrix .pm-context .pm-event-title { display:block; font-size:12px; font-weight:650; line-height:16px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.pm-matrix .pm-context time { display:block; font-size:10px; line-height:14px; }
.pm-matrix .pm-event { border:0; border-radius:0; margin:0; }
.pm-matrix .pm-event + .pm-event tr:first-child > * { border-top:1px solid var(--border-strong); }
.pm-matrix .pm-price.missing { display:block; height:17px; min-width:0; }
.pm-matrix tbody tr { height:21px; }
@media(max-width:520px) {
  .pm-matrix-wrap { --pm-context-width:130px; --pm-book-width:88px; }
  .pm-matrix .pm-context { padding:2px 4px; }
  .pm-matrix .pm-book-head { padding:1px 4px; }
  .pm-matrix .pm-book-name { font-size:10px; }
}

/* PM_LOCAL_FILTERS_AND_STICKY_HEAD_20260918
   La copia della testata dei mercati, tenuta in alto dalla pagina. Porta la
   classe `.pm-matrix-wrap` per ereditarne le larghezze di colonna (le custom
   properties, comprese quelle di `data-quote-size` e delle media query) e
   perde solo lo scorrimento: quello lo guida `syncHeadDock`. */
.pm-head-dock { position:fixed; top:0; z-index:26; overflow:hidden; background:var(--surface-2); box-shadow:0 2px 6px #24334730; }
.pm-head-dock[hidden] { display:none; }
.pm-head-dock .pm-head-dock-view { overflow:hidden; border:1px solid var(--border-strong); border-top:0; }
.pm-head-dock .pm-matrix { margin:0; }

/* Dense, equal-width outcomes; the scroll control follows the viewport. */
.pm-shell { padding-bottom:40px; }
.pm-matrix td { padding-left:1px; padding-right:1px; }
.pm-matrix .pm-price { position:relative; min-width:0; width:100%; padding:0; gap:0; flex-wrap:nowrap; }

.pm-matrix .pm-market-head th[data-market] { overflow:hidden; white-space:nowrap; text-overflow:ellipsis; padding-left:1px; padding-right:1px; }
.pm-market-head small { margin-left:2px; }
.pm-matrix .pm-book-head { padding-left:5px; padding-right:3px; overflow:hidden; }
/* The bookmaker column is fixed width: a long label clips inside it with an
   ellipsis (full text stays in the title) and never reaches the first price. */
.pm-matrix .pm-book-name { display:block; max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.pm-scroll-dock { position:fixed; bottom:4px; left:12px; right:12px; z-index:30; display:flex; align-items:center; gap:5px; padding:3px; height:28px; background:#f8fafc; border:1px solid #b8c5d5; border-radius:4px; box-shadow:0 -2px 6px #24334712; }
#pmScrollDock[hidden] { display:none!important; }
.pm-scroll-dock button { flex:none; width:25px; height:20px; padding:0; border:1px solid #cbd5e1; border-radius:3px; background:#edf2f8; color:#24486e; font-size:10px; cursor:pointer; }
.pm-scroll-dock button:disabled { opacity:.35; cursor:default; }
.pm-scroll-track { flex:1; min-width:0; height:18px; overflow-x:scroll; overflow-y:hidden; scrollbar-width:auto; }
.pm-scroll-track::-webkit-scrollbar { height:16px; }
.pm-scroll-track::-webkit-scrollbar-track { background:#e7edf4; }
.pm-scroll-track::-webkit-scrollbar-thumb { background:#8498b1; border:2px solid #e7edf4; border-radius:8px; }
#pmScrollSpace { height:1px; }
.pm-scroll-track:focus-visible,.pm-scroll-dock button:focus-visible { outline:2px solid var(--accent); outline-offset:1px; }
@media(max-width:520px) { .pm-scroll-dock { left:5px; right:5px; } }

.pm-matrix .pm-price b { flex-shrink:0; }

/* One compact competition separator, followed by all its event rows. */
.pm-matrix .pm-competition-group th { height:22px; padding:0; text-align:left; background:#e7effa; color:#235493; border-top:1px solid #c4d4e9; border-bottom:1px solid #c4d4e9; }
.pm-competition-label { display:inline-block; position:sticky; left:0; max-width:calc(100vw - 32px); padding:2px 7px; font-size:11px; font-weight:650; line-height:17px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; vertical-align:middle; }

/* Offscreen events stay in memory, represented by exact-height table spacers. */
.pm-matrix .pm-spacer tr { height:0; }
.pm-matrix .pm-spacer td { padding:0; border:0; line-height:0; }
.pm-matrix-wrap { overflow-anchor:none; }
#pmLoaded { margin-left:12px; font-size:10px; }

.pm-matrix .pm-column-gap { padding:0; }

.pm-matrix .pm-event + .pm-event tr:first-child > .pm-context[rowspan="1"] { padding-top:1px; }

/* Size available at the displayed price, beside the price and on its own line
   height: the row stays 21px and only the outcome column widens, and only while
   the display is on. The exact amount, the currency and the source are in the
   tooltip and in the summary, so the grid carries a number and nothing else. */
:root[data-quote-size="on"] .pm-matrix-wrap { --pm-odds-width:60px; }
.pm-matrix .pm-price .pm-size { display:none; }
:root[data-quote-size="on"] .pm-matrix .pm-price .pm-size {
  display:inline; flex:0 1 auto; overflow:hidden; margin-left:3px;
  font-size:9px; line-height:17px; color:#5c6b80; font-variant-numeric:tabular-nums; }
/* A published zero is not an amount on offer, and does not read as one. */
:root[data-quote-size="on"] .pm-matrix .pm-price .pm-size[data-state="empty"] { color:#9aa6b4; }
:root[data-quote-size="on"] .pm-matrix .pm-price .pm-size[data-state="unknown"] { color:#9aa6b4; font-style:italic; }
/* The amount is only ever as current as the price it sits beside. */
:root[data-quote-size="on"] .pm-matrix .pm-price .pm-size.pm-size-stale { color:#956717; }
/* The stale marker is absolutely positioned at the right edge; leave it room. */
:root[data-quote-size="on"] .pm-matrix .pm-price.stale .pm-size { padding-right:6px; }
/* Lives inside the existing Colonne dropdown: one more visibility choice
   alongside the market columns, not another control on the filter bar. */
.pm-market-menu>.pm-size-toggle { display:flex; align-items:center; gap:6px; min-height:25px;
  margin-bottom:5px; padding:2px 3px; font-size:11px; cursor:pointer; }
.pm-market-menu>.pm-size-toggle:hover { background:#edf4ff; }
@media(max-width:520px) { :root[data-quote-size="on"] .pm-matrix-wrap { --pm-odds-width:56px; } }

/* Un esito retail confrontato con il LAY visibile. Il verdetto e' del server;
   `pm-verify` marca quello che poggia su una lettura oltre la finestra. */
.pm-matrix .pm-price.pm-near-lay { background:#d9f2e3; color:#145b35; border-radius:2px; box-shadow:inset 0 0 0 1px #78b990; }
.pm-matrix .pm-price.pm-near-lay b { color:#145b35; }
.pm-near-lay-legend { margin-left:8px; color:#145b35; }
.pm-near-lay-legend::before { content:""; display:inline-block; width:7px; height:7px; margin-right:4px; background:#78b990; border-radius:1px; }
.pm-matrix .pm-price.pm-above-lay { background:#fff0ad; color:#684d00; border-radius:2px; box-shadow:inset 0 0 0 1px #d3a029; }
.pm-matrix .pm-price.pm-above-lay b { color:#684d00; }
.pm-above-lay-legend { margin-left:8px; color:#684d00; }
.pm-above-lay-legend::before { content:""; display:inline-block; width:7px; height:7px; margin-right:4px; background:#d3a029; border-radius:1px; }

/* Market visibility and a compact list of comparable prices alongside the grid. */
.pm-view-tools { display:flex; align-items:center; justify-content:space-between; gap:8px; margin:4px 0 2px; }
.pm-view-tools button,.pm-market-actions button,#pmSignalJump { border:1px solid #cbd5e1; background:#fff; color:#294765; border-radius:3px; padding:3px 7px; font-size:11px; cursor:pointer; }
.pm-market-picker { position:relative; font-size:11px; }
.pm-market-picker>summary { cursor:pointer; padding:3px 7px; background:#fff; border:1px solid #cbd5e1; border-radius:3px; }
#pmMarketSelectionCount { margin-left:5px; color:#225daf; font-weight:700; }
.pm-market-menu { position:absolute; top:100%; left:0; width:min(340px,calc(100vw - 30px)); padding:8px; border:1px solid #b8c5d5; background:#fff; z-index:45; box-shadow:0 4px 14px #24334724; border-radius:3px; }
.pm-market-actions { display:flex; gap:5px; margin-bottom:6px; }
#pmMarketSearch { width:100%; height:27px; font-size:12px; }
#pmMarketChoices { max-height:340px; overflow-y:auto; margin:5px 0; }
#pmMarketChoices label { display:flex; align-items:center; gap:6px; min-height:25px; padding:2px 3px; cursor:pointer; }
#pmMarketChoices label:hover { background:#edf4ff; }
.pm-market-menu>small { color:#57677c; font-size:10px; }
/* 340px, non 275. Misurato il 2026-09-18 su una riga reale: mercato e
   percentuale sono corti ma densi ("1X2 (2)", "+0.54%") e a 275px il
   mercato riceveva 14px dei 31 che gli servono - troncato a un moncone.
   Il minimo che fa stare tutto e' ~323px; 340 lascia margine ai nomi di
   mercato piu' lunghi ("U/O 2.5", "GG/NG") senza rubare larghezza utile
   alla griglia. */
.pm-workspace { display:grid; grid-template-columns:minmax(0,1fr) 340px; gap:8px; align-items:start; }
.pm-workspace[data-signals-open="false"] { grid-template-columns:minmax(0,1fr); }
.pm-grid-pane { min-width:0; }
/* A cap, not a height: few comparisons leave no empty strip, many are bounded
   by the space actually left under the panel's own top (measured by the script;
   the literal below is only the pre-script fallback). */
/* `overflow:hidden` taglia in silenzio cio' che non entra. Con la scala
   leggibile il contenuto puo' superare l'altezza massima, e un avviso
   nascosto senza dirlo e' peggio di un pannello che scorre. */
.pm-signals { position:sticky; top:8px; margin-top:4px; max-height:var(--pm-signals-height,min(680px,calc(100vh - 48px))); display:flex; flex-direction:column; border:1px solid #cbd5e1; border-radius:3px; background:#fff; min-height:220px; overflow-y:auto; overflow-x:hidden; }
.pm-signals[hidden] { display:none; }
.pm-signals-heading { display:flex; justify-content:space-between; align-items:center; gap:4px; padding:7px; background:#e7effa; color:#235493; font-size:11px; }
#pmSignalCount { border-radius:8px; background:#fff; padding:1px 6px; font-variant-numeric:tabular-nums; }
/* 11px, non 9: a 9px la riga di ambito e la nota erano illeggibili, e con
   testi lunghi ("scansione del catalogo in corso · 0 eventi esaminati")
   si accavallavano su piu' righe fitte che a schermo leggono come testo
   tagliato. 11px e' la stessa misura del sottotitolo accanto, quindi il
   pannello ha una scala sola invece di tre. */
#pmSignalScope { margin:0; padding:5px 7px; font-size:11px; line-height:1.35; color:#57677c; border-bottom:1px solid #e0e6ed; }
#pmSignalList { flex:1 1 auto; min-height:110px; overflow-y:auto; overflow-x:hidden; }
#pmSignalRows { position:relative; }
/* Una riga, una linea: sigla, ora, partita, mercato e segno. Impilati come
   prima non ci stavano e il mercato finiva tagliato via. La griglia tiene
   le colonne allineate fra righe diverse e lascia alla partita lo spazio
   che avanza. L altezza deve restare uguale a SIGNAL_ROW_HEIGHT in app.js. */
/* `max-content` sulle ultime due, non `auto`: una traccia `auto` si lascia
   comprimere quando lo spazio manca, ed erano proprio mercato e percentuale
   - i due dati brevi e non indovinabili - a sparire per primi. Ora non si
   restringono mai; a cedere e' il nome dell'evento, che e' testo libero,
   lungo, e si legge lo stesso con i puntini. */
.pm-signal { position:absolute; left:0; width:100%; height:34px; display:grid; grid-template-columns:auto auto minmax(0,1fr) max-content max-content; align-items:center; gap:6px; padding:0 7px; border:0; border-bottom:1px solid #e0e6ed; background:#fff; text-align:left; cursor:pointer; overflow:hidden; }
.pm-signal-pct { font-size:11px; font-weight:700; color:#177245; white-space:nowrap; }
.pm-signal-archive { color:#235493; font-weight:600; text-decoration:none; white-space:nowrap; }
/* L'interruttore del suono: sta nell'intestazione del pannello, accanto al
   conteggio, e si legge dallo stato del carattere - acceso o barrato. */
.pm-signal-sound { margin-left:auto; margin-right:6px; padding:0 4px; border:1px solid transparent;
  border-radius:4px; background:transparent; cursor:pointer; font-size:13px; line-height:1.4; }
.pm-signal-sound:hover { border-color:#b6ccea; background:#f2f7fd; }
.pm-signal-sound[aria-pressed="true"] { border-color:#235493; background:#dceafb; }
.pm-signal-sound:focus-visible { outline:2px solid #235493; outline-offset:1px; }
.pm-signal-archive:hover { text-decoration:underline; }
.pm-signal:hover,.pm-signal[aria-pressed="true"] { background:#edf4ff; }
.pm-signal span { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; line-height:14px; }
/* L'evento e' l'unico testo libero della riga, quindi e' l'unico a cui tocca
   cedere: i puntini qui sono una scelta, non un incidente. */
.pm-signal-event { font-size:11px; font-weight:600; color:#243347; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
/* Niente `max-width:46%`. Era un residuo dell'impianto a flex e, su una traccia
   `max-content`, il 46% si calcolava sulla traccia stessa: misurato il
   2026-09-18, "1X2 (2)" otteneva 14px dei 31 della sua colonna e
   "Goal/No Goal (Goal)" 41 degli 89 - il mercato restava un moncone proprio
   mentre la colonna che lo conteneva era della misura giusta. Il nome del
   mercato e' corto e non si indovina: si mostra intero. */
.pm-signal-market { justify-self:end; font-size:10px; color:#3d5170; white-space:nowrap; }
.pm-signal-price { font-size:10px; color:#177b43; font-variant-numeric:tabular-nums; }
#pmSignalEmpty { padding:8px; margin:0; color:#57677c; font-size:11px; }
/* Expanded under its own row inside the scrolled column, never a fixed strip at
   the foot of the panel: the prices and the action stay next to the click. */
/* Il dettaglio non e' piu' posizionato in assoluto: viveva dentro l'elenco
   virtualizzato, che posiziona ogni riga con `top`, e quella regola e'
   rimasta a sovrapporlo alla lista anche dopo che ne era uscito. Ora e' un
   normale blocco in fondo al pannello. */
#pmSignalDetail { padding:8px; font-size:11px; color:#243347; }
#pmSignalDetail[hidden] { display:none; }
#pmSignalDetail>strong,#pmSignalDetail>small { display:block; }
#pmSignalDetail>small { font-size:10px; color:#57677c; }
.pm-signal-detail-prices { display:grid; grid-template-columns:1fr auto; gap:2px 8px; margin:6px 0; }
/* The reference size spelled out: amount, price, side, depth, currency, source. */
.pm-signal-size { margin-top:3px; color:#57677c; }
.pm-signal-size:empty { display:none; }
/* The cell's exact market, beside the event route rather than instead of it. */
.pm-signal-market-link { display:inline-block; margin:5px 0 0; font-size:10px; color:#225daf; }
.pm-signal-market-note { display:block; margin-top:4px; color:#8a7444; }
#pmSignalJump { margin-top:5px; }
.pm-signal-footnote { padding:0 8px 6px; font-size:11px; line-height:1.35; color:#57677c; }
/* GRID_FOCUS_20260925 - "Mostra in griglia": quota, riferimento, riga, evento, mercato. */
.pm-matrix { --pm-focus:#2f6bff; --pm-focus-soft:rgba(47,107,255,.10); --pm-focus-glow:rgba(47,107,255,.45); }
:root[data-theme="dark"] .pm-matrix { --pm-focus:#5b8dff; --pm-focus-soft:rgba(91,141,255,.14); --pm-focus-glow:rgba(91,141,255,.55); }
/* JOVERBET_COUPON_20260925 - booked-coupon notice. */
.pm-coupon-notice { position:fixed; left:50%; bottom:48px; transform:translateX(-50%); z-index:70; max-width:min(560px,calc(100vw - 32px)); padding:10px 14px; border-radius:6px; background:#1f2937; color:#fff; font-size:13px; line-height:1.4; box-shadow:0 6px 20px #0005; }
.pm-coupon-notice[hidden] { display:none; }
.pm-coupon-actions { display:flex; flex-wrap:wrap; gap:6px; margin-top:8px; align-items:center; }
.pm-coupon-actions input { width:140px; min-width:0; padding:5px 8px; border:1px solid #cbd5e1; border-radius:4px; background:#fff; color:#172b4d; font:inherit; }
/* GRID_FOCUS_FIX_20260925 - the sticky event/book columns keep their opaque
   background and their layer: tints are an overlay image, cells get no z-index,
   animations run only while the table carries pm-focus-animate (first 2.8 s). */
.pm-matrix { --pm-focus-tint:linear-gradient(var(--pm-focus-soft),var(--pm-focus-soft)); }
.pm-matrix td.pm-focus-quote { outline:2px solid var(--pm-focus); outline-offset:-2px; background-image:linear-gradient(rgba(47,107,255,.16),rgba(47,107,255,.16)); }
.pm-matrix td.pm-focus-quote .pm-price b, .pm-matrix td.pm-focus-quote b { font-weight:700; }
.pm-matrix td.pm-focus-ref { outline:2px dashed var(--pm-focus); outline-offset:-3px; }
.pm-matrix tr.pm-focus-row > td, .pm-matrix tr.pm-focus-row > .pm-book-head { background-image:var(--pm-focus-tint); }
.pm-matrix tr.pm-focus-row > .pm-book-head { box-shadow:inset 3px 0 0 var(--pm-focus); font-weight:600; }
.pm-matrix tbody.pm-focus-event > tr > th.pm-context { box-shadow:inset 4px 0 0 var(--pm-focus); }
.pm-matrix thead th.pm-focus-col { box-shadow:inset 0 -3px 0 var(--pm-focus); color:var(--pm-focus); }
.pm-matrix.pm-focus-animate td.pm-focus-quote { animation:pm-focus-pulse .9s ease-out 3; }
.pm-matrix.pm-focus-animate tbody.pm-focus-event > tr > th.pm-context { animation:pm-focus-flash 1.6s ease-out 1; }
@keyframes pm-focus-pulse { 0% { box-shadow:inset 0 0 0 0 var(--pm-focus-glow); } 60% { box-shadow:inset 0 0 0 6px rgba(47,107,255,0); } 100% { box-shadow:inset 0 0 0 0 rgba(47,107,255,0); } }
@keyframes pm-focus-flash { 0% { box-shadow:inset 4px 0 0 var(--pm-focus), inset 0 0 0 999px var(--pm-focus-soft); } 100% { box-shadow:inset 4px 0 0 var(--pm-focus), inset 0 0 0 999px rgba(47,107,255,0); } }
@media (prefers-reduced-motion:reduce) { .pm-matrix.pm-focus-animate td.pm-focus-quote, .pm-matrix.pm-focus-animate tbody.pm-focus-event > tr > th.pm-context { animation:none; } }
@media(max-width:999px) {
  .pm-workspace { grid-template-columns:minmax(0,1fr); }
  .pm-signals { position:fixed; right:8px; top:90px; z-index:35; width:min(340px,calc(100vw - 16px)); max-height:calc(100vh - 132px); box-shadow:0 4px 18px #24334730; }
}

/* Public event navigation retains the complete offered price. */
a.pm-price { color:inherit; text-decoration:none; cursor:pointer; }
a.pm-price:hover { outline:1px solid currentColor; }
a.pm-price b { text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:2px; }
a.pm-price:focus-visible { outline:2px solid #1479c8; outline-offset:2px; }
a.pm-price[aria-disabled="true"] { cursor:default; }
.pm-navigation-help { display:block; margin-top:3px; }

/* Compact filter toolbar; selection lists only occupy space when opened. */
.pm-sr-only { position:absolute; width:1px; height:1px; padding:0; margin:-1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; border:0; }
.pm-heading { align-items:center; }
.pm-heading h1 { margin:0; }
.pm-filters { padding:6px; }
.pm-filter-row { gap:6px; align-items:center; }
/* Sport, search, paese, campionato, mercato, orizzonte, Aggiorna - seven
   controls on one row. The sport column is sized for its three fixed labels
   (Calcio/Tennis/Basket) and takes no share of the free space, so adding it
   costs the search box ~90px rather than pushing the button to a second row. */
.pm-primary-filters { display:grid; grid-template-columns:96px minmax(160px,2fr) minmax(118px,1fr) minmax(145px,1.2fr) minmax(148px,1.1fr) 90px auto; }
.pm-primary-filters>.pm-sport-filter select { width:100%; font-weight:600; }
.pm-filter-row>label { display:block; }
.pm-filters input:not([type=checkbox]),.pm-filters select { height:28px; padding:3px 7px; font-size:12px; }
.pm-filters select { padding-right:6px; text-overflow:ellipsis; }
.pm-filters .btn { height:28px; min-height:28px; padding:3px 9px; white-space:nowrap; font-size:12px; }
.pm-options { margin-top:6px; padding-top:0; border:0; }
.pm-options>label { flex:0 1 150px; }
.pm-options>.pm-scope-choice { min-width:0; }
.pm-options>.pm-reference-filter { flex-basis:155px; }
.pm-options>.pm-side-filter { flex:0 0 68px; }
/* One control for the whole LAY comparison: the percentage and "Tutte". */
.pm-options>.pm-tolerance-filter { flex:0 0 142px; }
/* The reference's second control sits beside the first and reads like it. */
.pm-options>.pm-liquidity-filter { flex:0 0 162px; }
.pm-options>.pm-tolerance-filter select:disabled,
.pm-options>.pm-liquidity-filter select:disabled { opacity:.55; cursor:not-allowed; }
#pmReferenceSide { display:block; border:1px solid var(--border); border-radius:3px; }
#pmSignalsToggle { margin-left:auto; }
#pmSignalsToggle[aria-expanded="true"] { background:#e7effa; border-color:#b8cce9; color:#225daf; }
.pm-dropdown { position:relative; flex:none; font-size:12px; }
.pm-dropdown>summary { display:flex; align-items:center; gap:5px; height:28px; padding:3px 8px; border:1px solid var(--border); border-radius:3px; background:#fff; cursor:pointer; list-style:none; white-space:nowrap; color:#294765; }
.pm-dropdown>summary::-webkit-details-marker { display:none; }
.pm-dropdown>summary::after { content:""; width:6px; height:6px; border-right:1.5px solid #62748c; border-bottom:1.5px solid #62748c; transform:rotate(45deg); margin:-3px 2px 0 6px; }
.pm-dropdown[open]>summary { background:#eef4fd; border-color:#9fb9df; }
.pm-dropdown[open]>summary::after { transform:rotate(225deg); margin-top:3px; }
.pm-dropdown summary:focus-visible { outline:2px solid #225daf; outline-offset:2px; }
#pmBookSelectionCount,#pmMarketSelectionCount { margin:0; padding:0 4px; border-radius:3px; background:#edf3fc; color:#225daf; font-size:11px; font-weight:700; }
.pm-dropdown-menu { position:absolute; top:calc(100% + 4px); left:0; width:min(320px,calc(100vw - 24px)); padding:8px; background:#fff; border:1px solid #b8c5d5; border-radius:4px; box-shadow:0 5px 18px #24334724; z-index:60; max-height:min(420px,65vh); overflow-y:auto; }
.pm-dropdown .pm-books { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:3px; }
.pm-dropdown .pm-bookpick { display:flex; min-height:28px; padding:3px 5px; font-size:12px; gap:6px; }
.pm-dropdown input[type=checkbox] { margin:0; width:14px; height:14px; flex:none; }
.pm-source-picker>summary { height:23px; font-size:11px; background:transparent; }
.pm-source-picker .pm-dropdown-menu { left:auto; right:0; }
.pm-source-picker .pm-health { display:flex; flex-direction:column; align-items:flex-start; gap:4px; }
.pm-source-picker .pm-source { white-space:normal; font-size:11px; }
.pm-summary { display:flex; flex-wrap:wrap; justify-content:space-between; align-items:center; gap:4px 10px; min-height:25px; margin:2px 0 0; }
#pmCount { font-size:12px; }
/* Quanti eventi la griglia ha gia' esaminato, accanto al totale e all'ora:
   il testo c'era gia' (`#pmLoaded`, "110 / 381 eventi caricati") ma era
   nascosto, quindi l'unica copia visibile stava in fondo alla pagina - dove
   chi guarda l'intestazione non la trova. Stessa misura di "Aggiornato",
   perche' sono due fatti dello stesso tipo sulla stessa riga. */
.pm-summary #pmLoaded { display:inline; font-size:11px; }
.pm-legend { display:flex; flex-wrap:wrap; gap:8px; font-size:10px; }
.pm-legend span { margin:0; white-space:nowrap; }
.pm-notice[hidden] { display:none; }
.pm-notice.error { margin:3px 0 5px; }
/* The reference notice states what the asterisked reference prices are, above
   the grid and in its own colour, so it cannot be mistaken for the transient
   refresh notice underneath it. One line, not a paragraph: the reason lives in
   the tooltip. */
.pm-snapshot { margin:3px 0 5px; padding:5px 8px; border:1px solid #d3a029; border-left-width:3px;
  border-radius:3px; background:#fff8e3; color:#684d00; font-size:11px; line-height:1.45; }
.pm-snapshot[hidden] { display:none; }
.pm-snapshot.pm-one-line { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
@media(max-width:1199px) {
  .pm-primary-filters { grid-template-columns:86px minmax(132px,1.5fr) minmax(104px,1fr) minmax(124px,1.2fr) minmax(120px,1fr) 76px auto; }
  .pm-options>label { flex-grow:1; }
  #pmSignalsToggle { margin-left:0; }
}
@media(max-width:760px) {
  /* Three columns, four rows: sport+search, paese+campionato, mercato+orizzonte,
     then the button across. The nth-child indices are the row's DOM order -
     sport(1) search(2) paese(3) campionato(4) mercato(5) orizzonte(6). */
  .pm-primary-filters { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .pm-primary-filters .pm-sport-filter { grid-column:span 1; }
  .pm-primary-filters .pm-search { grid-column:span 2; }
  .pm-primary-filters>label:nth-child(3) { grid-column:span 1; }
  .pm-primary-filters>label:nth-child(4) { grid-column:span 2; }
  .pm-primary-filters>label:nth-child(5) { grid-column:span 2; }
  .pm-primary-filters>label:nth-child(6) { grid-column:span 1; }
  .pm-primary-filters>.btn { grid-column:span 3; }
  .pm-options { display:grid; grid-template-columns:repeat(3,minmax(0,1fr)); }
  .pm-options>label,.pm-options>.pm-dropdown,.pm-options>.btn { min-width:0; width:100%; }
  .pm-dropdown>summary { justify-content:center; padding-left:4px; padding-right:4px; }
  .pm-filters select { font-size:11px; padding-left:4px; padding-right:15px; }
  .pm-options>.pm-tolerance-filter,
  .pm-options>.pm-liquidity-filter { grid-column:span 2; }
  .pm-options>.pm-reference-filter { grid-column:span 2; }
  .pm-heading { flex-wrap:nowrap; }
  .pm-shell { padding-left:6px; padding-right:6px; }
  .pm-summary { font-size:10px; }
}

/* Un colore che poggia su una lettura oltre la finestra di freschezza. Il
   colore dice comunque cosa affermano i due prezzi mostrati; il bordo ambra e
   l'asterisco dicono che il bookmaker va richiesto prima di agire. */
.pm-matrix .pm-price.pm-verify { box-shadow:inset 0 0 0 1px #956717; }
.pm-matrix .pm-price.pm-verify::after { content:"*"; position:absolute; right:0; top:-2px; color:#956717; font-size:10px; line-height:10px; }
.pm-signal.pm-signal-verify .pm-signal-price::after { content:" *"; color:#956717; }

/* Il pannello Avvisi: una riga per avviso, un dettaglio a campi etichettati.
   La riga porta l'essenziale per scorrere - chi, quando, che partita, che
   quota - e il prezzo scende nel dettaglio, dove c'e' spazio per dire contro
   cosa e' stato confrontato e con quanta disponibilita'. */
.pm-signal-badge { display:inline-flex; align-items:center; justify-content:center;
  flex:0 0 auto; width:15px; height:15px; margin-right:5px; border-radius:2px;
  background:#2f6fb5; color:#fff; font-size:9px; font-weight:700; }
.pm-signal-time { flex:0 0 auto; margin-right:6px; font-variant-numeric:tabular-nums;
  font-weight:600; color:#294765; }
.pm-signal-sub { margin:0 0 3px; color:var(--text-2); font-size:11px; }
.pm-alert-title { margin-bottom:4px; font-weight:700; color:#294765; }
.pm-alert-vs { display:flex; align-items:baseline; gap:6px; margin-top:6px; font-size:12.5px; }
.pm-alert-edge { margin-left:auto; color:#177245; }
.pm-alert-sub { display:block; margin-top:2px; color:#57677c; }
.pm-alert-calc { display:flex; align-items:center; flex-wrap:wrap; gap:5px; margin-top:7px; padding:6px; background:rgba(41,71,101,.06); border-radius:8px; font-size:11px; }
.pm-alert-calc-label { color:#57677c; }
.pm-alert-calc-input { width:64px; padding:2px 4px; border:1px solid #c9d4e0; border-radius:6px; font-size:11px; }
.pm-alert-calc-comm { width:46px; }
.pm-alert-profit-pos { color:#177245; }
.pm-alert-profit-neg { color:#b42318; }
#pmSignalDetail { position:relative; }
.pm-alert-close { position:absolute; top:6px; right:6px; border:1px solid #c9d4e0; background:transparent; color:inherit; border-radius:6px; width:22px; height:22px; line-height:1; cursor:pointer; font-size:13px; padding:0; }
.pm-alert-close:hover { background:rgba(41,71,101,.08); }
.pm-alert-head { display:flex; justify-content:space-between; gap:8px;
  font-size:11px; color:var(--text-2); }
.pm-alert-observed { white-space:nowrap; }
.pm-alert-field { display:flex; align-items:baseline; gap:6px; margin-top:3px; font-size:11px; }
.pm-alert-label { flex:0 0 46px; color:var(--text-2); }
.pm-alert-extra { margin-left:auto; color:#294765; white-space:nowrap; }
.pm-alert-sentence { margin:6px 0 2px; font-size:11px; line-height:1.35; }

/* Il dettaglio dell'avviso: un riquadro sotto l'elenco, non una riga dentro.
   Cosi' l'elenco resta intero mentre si legge un avviso. */
/* Il dettaglio sta in fondo al pannello e non invade mai l elenco: e' un blocco
   a se', con il proprio scorrimento quando e' lungo, e la lista resta
   intera e cliccabile sopra di esso. */
.pm-signal-detail-pane { flex:0 0 auto; max-height:46%; overflow-y:auto; padding:7px 8px; border-top:2px solid #cbd5e1; background:#fbfdff; }

/* La liquidita' del riferimento, sotto il suo prezzo e allineata ad esso. */
.pm-alert-liquidity { display:flex; align-items:baseline; gap:6px; font-size:11px; }
.pm-alert-liquidity .pm-alert-label { flex:0 0 46px; }

/* PM_STALE_PRICE_REMAINS_VISIBLE_20260921: historical, never an active alert. */
.pm-matrix .pm-price.pm-last-price b { color:#697586; text-decoration-line:underline; text-decoration-style:dotted; text-decoration-thickness:1px; text-underline-offset:3px; }

/* STALE_DISPLAY_CAP_20260925 - a reading older than 30 min: empty, inert. */
.pm-matrix .pm-price.pm-hidden-old { pointer-events:none; cursor:default; }
