/*! InvestIA Workspace — design system del gestionale
    Linguaggio grafico: modello investia-platform-workspace (2026).
    Classi e variabili prefissate ws- per non collidere con quelle esistenti.
    FILE GENERATO da tools/build.sh: modificare i pezzi in tools/build/. */

/* ===== 1. FONT — ospitati nel gestionale (latino + latino esteso) ===== */
@font-face {font-family: 'Manrope';font-style: normal;font-weight: 200 800;font-display: swap;src: url("../fonts/manrope-76dcfc73.woff2") format('woff2');unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face {font-family: 'Manrope';font-style: normal;font-weight: 200 800;font-display: swap;src: url("../fonts/manrope-81401990.woff2") format('woff2');unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face {font-family: 'Manrope Fallback';src: local("Arial");ascent-override: 103.31%;descent-override: 29.07%;line-gap-override: 0.00%;size-adjust: 103.19%;}
@font-face {font-family: 'Space Grotesk';font-style: normal;font-weight: 300 700;font-display: swap;src: url("../fonts/space-grotesk-e911c2d9.woff2") format('woff2');unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face {font-family: 'Space Grotesk';font-style: normal;font-weight: 300 700;font-display: swap;src: url("../fonts/space-grotesk-a57c9413.woff2") format('woff2');unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face {font-family: 'Space Grotesk Fallback';src: local("Arial");ascent-override: 89.71%;descent-override: 26.62%;line-gap-override: 0.00%;size-adjust: 109.69%;}

/* ===== 2. TOKEN =====
   Palette del modello "investia-platform-workspace", con i ruoli separati:
   --ws-ink è il colore del testo, --ws-primary-* i pulsanti e i badge,
   --ws-feature i pannelli scuri che restano scuri anche nel tema scuro,
   --ws-on-dark il testo sulla sidebar. Così il tema scuro si ottiene
   ridefinendo i token, senza riscrivere i componenti. */
:root {
    --ws-ivory: #fffdf9;
    --ws-paper: #f3f0ea;
    --ws-navy: #0f1c2e;
    --ws-deep: #07111d;
    --ws-steel: #597793;
    --ws-mist: #dce4eb;
    --ws-green: #2d8a49;
    --ws-amber: #b47a28;
    --ws-red: #b54747;
    --ws-muted: #718092;
    --ws-line: #0f1c2e1c;
    --ws-shadow: 0 20px 55px #0f1c2e12;
    --ws-radius: 7px 25px 7px 25px;
    --ws-radius-sm: 6px 15px;

    --ws-ink: var(--ws-navy);
    --ws-on-dark: #fffdf9;
    --ws-primary-bg: var(--ws-navy);
    --ws-primary-fg: var(--ws-ivory);
    --ws-feature: var(--ws-navy);

    --ws-surface: #fffdf9e6;
    --ws-surface-solid: var(--ws-ivory);
    --ws-surface-soft: #fffdf9c7;
    --ws-topbar-bg: #f3f0eae0;
    --ws-chip-bg: #ffffffb8;
    --ws-input-bg: #ffffff;
    --ws-visual-a: #eaf0f4;
    --ws-visual-b: #cfdbe4;

    --ws-tint: #e6edf2;
    --ws-tint-2: #ebedf0;
    --ws-track: #e3e8ec;
    --ws-hover: #5977930b;

    --ws-text-2: #617383;
    --ws-text-3: #788898;
    --ws-text-4: #8b98a5;
    --ws-icon: #5e7c98;

    --ws-line-soft: #0f1c2e14;
    --ws-line-strong: #0f1c2e3d;
    --ws-grid-line: #0f1c2e1a;

    --ws-bar: #6d8ca8;
    --ws-focus: #7190ac;
    --ws-track-from: #b9c8d5;
    --ws-track-to: #587793;

    --ws-warn-text: #795b2b;
    --ws-warn-bg: #fff8ec;
    --ws-warn-line: #b47a2824;

    --ws-font-body: "Manrope", "Manrope Fallback", Arial, sans-serif;
    --ws-font-display: "Space Grotesk", "Space Grotesk Fallback", Arial, sans-serif;
}

[data-bs-theme="dark"] {
    color-scheme: dark;
    --ws-green: #57b877;
    --ws-amber: #d8a24e;
    --ws-red: #dc7f7f;
    --ws-steel: #8fabc6;
    --ws-muted: #8e9db0;
    --ws-line: #ffffff1a;
    --ws-shadow: 0 20px 55px #0000004d;

    --ws-ink: #e6ecf2;
    --ws-primary-bg: #dbe5ee;
    --ws-primary-fg: #07111d;
    --ws-feature: #16283d;

    --ws-surface: #111e2ee6;
    --ws-surface-solid: #111e2e;
    --ws-surface-soft: #111e2ec7;
    --ws-topbar-bg: #0a131fe0;
    --ws-chip-bg: #ffffff14;
    --ws-input-bg: #0d1826;
    --ws-visual-a: #1b2c40;
    --ws-visual-b: #0f1d2d;

    --ws-tint: #1a2a3d;
    --ws-tint-2: #152437;
    --ws-track: #22344a;
    --ws-hover: #ffffff08;

    --ws-text-2: #b4c1cf;
    --ws-text-3: #93a3b4;
    --ws-text-4: #7d8ea1;
    --ws-icon: #8fabc6;

    --ws-line-soft: #ffffff12;
    --ws-line-strong: #ffffff33;
    --ws-grid-line: #ffffff14;

    --ws-bar: #7d9bb7;
    --ws-focus: #8fabc6;
    --ws-track-from: #2c4058;
    --ws-track-to: #8fabc6;

    --ws-warn-text: #e0b673;
    --ws-warn-bg: #2a2014;
    --ws-warn-line: #b47a2840;
}

/* --- design system esistente (investia-system.css): stessa struttura HSL,
       valori della nuova palette. Tutto ciò che il gestionale disegna con
       le sue classi si riallinea da solo. --- */
:root {
    --inv-background-hsl: 40 27% 94%;
    --inv-foreground-hsl: 215 51% 12%;
    --inv-card-hsl: 40 100% 99%;
    --inv-popover-hsl: 40 100% 99%;
    --inv-primary-hsl: 215 51% 12%;
    --inv-primary-foreground-hsl: 40 100% 99%;
    --inv-secondary-hsl: 207 30% 93%;
    --inv-secondary-foreground-hsl: 215 51% 12%;
    --inv-muted-hsl: 216 14% 93%;
    --inv-muted-foreground-hsl: 213 13% 51%;
    --inv-accent-hsl: 207 27% 92%;
    --inv-accent-foreground-hsl: 215 51% 12%;
    --inv-destructive-hsl: 0 44% 49%;
    --inv-success-hsl: 138 51% 36%;
    --inv-warning-hsl: 35 64% 43%;
    --inv-border-hsl: 48 6% 85%;
    --inv-input-hsl: 60 2% 88%;
    --inv-ring-hsl: 209 25% 46%;
    --inv-sidebar-background-hsl: 211 57% 10%;
    --inv-sidebar-foreground-hsl: 209 24% 83%;
    --inv-sidebar-accent-hsl: 212 42% 17%;
    --inv-sidebar-accent-foreground-hsl: 0 0% 100%;
    --inv-sidebar-border-hsl: 212 40% 18%;
    --inv-radius: 6px;
    --inv-shadow-soft: 0 2px 20px -4px #0f1c2e14;
    --inv-shadow-card: var(--ws-shadow);
    --inv-shadow-elevated: 0 24px 60px -12px #0f1c2e2e;
}
[data-bs-theme="dark"] {
    --inv-background-hsl: 214 51% 8%;
    --inv-foreground-hsl: 210 32% 93%;
    --inv-card-hsl: 213 46% 12%;
    --inv-popover-hsl: 213 46% 12%;
    --inv-primary-hsl: 208 36% 90%;
    --inv-primary-foreground-hsl: 213 61% 7%;
    --inv-secondary-hsl: 213 40% 17%;
    --inv-secondary-foreground-hsl: 210 32% 93%;
    --inv-muted-hsl: 214 45% 15%;
    --inv-muted-foreground-hsl: 214 18% 62%;
    --inv-accent-hsl: 213 40% 17%;
    --inv-accent-foreground-hsl: 210 32% 93%;
    --inv-destructive-hsl: 0 57% 68%;
    --inv-success-hsl: 140 41% 53%;
    --inv-warning-hsl: 37 64% 58%;
    --inv-border-hsl: 214 37% 21%;
    --inv-input-hsl: 214 35% 23%;
    --inv-ring-hsl: 209 33% 67%;
    --inv-sidebar-background-hsl: 213 61% 7%;
    --inv-sidebar-foreground-hsl: 209 24% 83%;
    --inv-sidebar-accent-hsl: 215 49% 15%;
    --inv-sidebar-accent-foreground-hsl: 0 0% 100%;
    --inv-sidebar-border-hsl: 214 46% 16%;
    --inv-shadow-card: var(--ws-shadow);
}

/* --- Bootstrap 5.3: le sue variabili guidano bottoni, form, card, tabelle --- */
:root,
[data-bs-theme="light"] {
    --bs-body-font-family: var(--ws-font-body);
    --bs-body-font-size: .875rem;
    --bs-body-line-height: 1.55;
    --bs-body-color: var(--ws-ink);
    --bs-body-bg: var(--ws-paper);
    --bs-emphasis-color: var(--ws-ink);
    --bs-secondary-color: var(--ws-text-2);
    --bs-tertiary-color: var(--ws-text-4);
    --bs-secondary-bg: var(--ws-tint);
    --bs-tertiary-bg: var(--ws-tint-2);
    --bs-border-color: var(--ws-line);
    --bs-border-color-translucent: var(--ws-line);
    --bs-border-radius: 6px;
    --bs-border-radius-sm: 5px;
    --bs-border-radius-lg: 7px;
    --bs-primary: var(--ws-navy);
    --bs-primary-rgb: 15, 28, 46;
    --bs-primary-text-emphasis: var(--ws-navy);
    --bs-primary-bg-subtle: var(--ws-tint);
    --bs-primary-border-subtle: #c7d3de;
    --bs-secondary: var(--ws-steel);
    --bs-secondary-rgb: 89, 119, 147;
    --bs-success: var(--ws-green);
    --bs-success-rgb: 45, 138, 73;
    --bs-warning: var(--ws-amber);
    --bs-warning-rgb: 180, 122, 40;
    --bs-danger: var(--ws-red);
    --bs-danger-rgb: 181, 71, 71;
    --bs-info: var(--ws-steel);
    --bs-info-rgb: 89, 119, 147;
    --bs-link-color: var(--ws-steel);
    --bs-link-color-rgb: 89, 119, 147;
    --bs-link-hover-color: var(--ws-ink);
    --bs-link-hover-color-rgb: 15, 28, 46;
    --bs-focus-ring-color: #5977932e;
    --bs-heading-color: var(--ws-ink);
}
[data-bs-theme="dark"] {
    --bs-body-color: var(--ws-ink);
    --bs-body-bg: #0a131f;
    --bs-emphasis-color: var(--ws-ink);
    --bs-secondary-color: var(--ws-text-2);
    --bs-tertiary-color: var(--ws-text-4);
    --bs-secondary-bg: var(--ws-tint);
    --bs-tertiary-bg: var(--ws-tint-2);
    --bs-border-color: var(--ws-line);
    --bs-border-color-translucent: var(--ws-line);
    --bs-primary: #dbe5ee;
    --bs-primary-rgb: 219, 229, 238;
    --bs-primary-text-emphasis: #dbe5ee;
    --bs-primary-bg-subtle: var(--ws-tint);
    --bs-primary-border-subtle: #2c4058;
    --bs-link-color: var(--ws-steel);
    --bs-link-color-rgb: 143, 171, 198;
    --bs-link-hover-color: var(--ws-ink);
    --bs-link-hover-color-rgb: 230, 236, 242;
    --bs-heading-color: var(--ws-ink);
}

.ws-positive{color:var(--ws-green)!important}
.ws-negative{color:var(--ws-red)!important}
.ws-eyebrow{color:var(--ws-text-3);font:650 10px var(--ws-font-display), sans-serif;letter-spacing:.14em;text-transform:uppercase;align-items:center;gap:7px;display:inline-flex}
.ws-eyebrow svg{width:14px;height:14px}
.ws-button{border:1px solid #0000;border-radius:6px 16px;justify-content:center;align-items:center;gap:8px;min-height:46px;padding:0 17px;font-size:12px;font-weight:750;text-decoration:none;transition:transform .18s,box-shadow .18s,background .18s;display:inline-flex}
.ws-button:hover{transform:translateY(-1px)}
.ws-button svg{width:16px}
.ws-button.ws-primary{color:var(--ws-primary-fg);background:var(--ws-primary-bg);box-shadow:0 10px 25px #0f1c2e2b}
.ws-button.ws-secondary{border-color:var(--ws-line);background:var(--ws-surface-soft)}
.ws-button.ws-ghost{color:var(--ws-text-2);box-shadow:none;background:0 0;border-color:#0000}
.ws-button.ws-active{color:var(--ws-green);background:#2d8a491a;border-color:#2d8a4933}
.ws-button.ws-compact{min-height:42px}
.ws-button:disabled{opacity:.55;cursor:wait;transform:none}
.ws-icon-button{border:1px solid var(--ws-line);background:var(--ws-surface-solid);border-radius:6px 15px;place-items:center;width:42px;height:42px;display:grid}
.ws-icon-button svg{width:17px}
.ws-app-shell{grid-template-columns:248px minmax(0,1fr);min-height:100vh;display:grid}
.ws-sidebar{z-index:60;width:248px;color:var(--ws-on-dark);background:radial-gradient(circle at 26% 4%,#5977934f,#0000 27%),linear-gradient(160deg,#10243a 0%,#07111d 68%,#0b1928 100%);border-right:1px solid #ffffff14;flex-direction:column;padding:28px 18px 20px;display:flex;position:fixed;inset:0 auto 0 0;overflow:hidden}
.ws-sidebar:after{content:"";pointer-events:none;opacity:.15;background-image:linear-gradient(#ffffff12 1px,#0000 1px),linear-gradient(90deg,#ffffff12 1px,#0000 1px);background-size:52px 52px;position:absolute;inset:0;-webkit-mask-image:linear-gradient(#000,#0000 72%);mask-image:linear-gradient(#000,#0000 72%)}
.ws-sidebar-brand,.ws-sidebar nav,.ws-sidebar-foot,.ws-nav-label{z-index:1;position:relative}
.ws-sidebar-brand{justify-content:space-between;align-items:center;height:52px;margin:0 10px 34px;display:flex;overflow:hidden}
.ws-sidebar-brand img{width:145px}
.ws-sidebar-brand button{color:#fff;background:0 0;border:0;display:none}
.ws-sidebar-brand button svg{width:19px}
.ws-nav-label{color:#ffffff59;font:600 9px var(--ws-font-display);letter-spacing:.14em;margin:0 13px 11px}
.ws-sidebar nav{gap:6px;display:grid}
.ws-sidebar nav :is(a,button){color:#ffffff9c;text-align:left;background:0 0;border:1px solid #0000;border-radius:5px 17px;grid-template-columns:19px 1fr 25px;align-items:center;gap:11px;min-height:47px;padding:0 13px;transition:all .2s;display:grid}
.ws-sidebar nav :is(a,button) svg{width:17px}
.ws-sidebar nav :is(a,button) span{font-size:13px}
.ws-sidebar nav :is(a,button) b{background:#ffffff14;border-radius:50%;place-items:center;width:24px;height:24px;font-size:9px;display:grid}
.ws-sidebar nav :is(a,button):hover,.ws-sidebar nav :is(a,button).ws-active{color:#fff;background:#ffffff12}
.ws-sidebar nav :is(a,button).ws-active{border-color:#ffffff1a;box-shadow:inset 3px 0 #90a8be}
.ws-sidebar-foot{gap:10px;margin-top:auto;display:grid}
.ws-plan-card{background:#ffffff0d;border:1px solid #ffffff1f;border-radius:6px 18px;grid-template-columns:36px 1fr;align-items:center;gap:10px;min-height:67px;padding:12px;display:grid}
.ws-plan-card>svg{width:17px}
.ws-plan-card span{gap:3px;display:grid}
.ws-plan-card small,.ws-user-card small{color:#ffffff6b;font-size:9px}
.ws-plan-card strong{font-size:11px}
.ws-user-card{grid-template-columns:35px minmax(0,1fr) 22px;align-items:center;gap:9px;padding:10px 7px;display:grid}
.ws-user-card>span{background:#547493;border-radius:50%;place-items:center;width:35px;height:35px;font-size:11px;font-weight:800;display:grid}
.ws-user-card div{gap:2px;min-width:0;display:grid}
.ws-user-card strong,.ws-user-card small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}
.ws-user-card strong{font-size:11px}
.ws-user-card a svg{color:#ffffff8c;width:16px}
.ws-sidebar-scrim{display:none}
.ws-workspace{grid-column:2;min-width:0}
.ws-topbar{z-index:45;border-bottom:1px solid var(--ws-line);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);background:var(--ws-topbar-bg);align-items:center;gap:14px;height:76px;padding:0 clamp(24px,3.2vw,52px);display:flex;position:sticky;top:0}
.ws-menu-button{display:none}
.ws-global-search{border:1px solid var(--ws-line);background:var(--ws-surface-soft);border-radius:6px 15px;align-items:center;gap:9px;width:min(430px,40vw);height:42px;padding:0 13px;display:flex}
.ws-global-search svg{color:var(--ws-text-4);width:16px}
.ws-global-search input{background:0 0;border:0;outline:0;flex:1;min-width:0;font-size:12px}
.ws-top-status{color:var(--ws-text-3);letter-spacing:.08em;text-transform:uppercase;align-items:center;gap:7px;margin-left:auto;font-size:9px;display:flex}
.ws-top-status i{background:#3ba05a;border-radius:50%;width:7px;height:7px;box-shadow:0 0 11px #3ba05a99}
.ws-content{padding:42px clamp(24px,3.2vw,52px) 70px}
.ws-page-header{justify-content:space-between;align-items:flex-end;gap:28px;margin-bottom:30px;display:flex}
.ws-page-header h1{max-width:800px;font:500 clamp(34px, 3.5vw, 53px)/1.02 var(--ws-font-display);letter-spacing:-.05em;margin:9px 0 7px}
.ws-page-header p{color:var(--ws-muted);margin:0;font-size:13px}
.ws-page-actions{flex-wrap:wrap;justify-content:flex-end;gap:9px;display:flex}
.ws-panel,.ws-metric-card,.ws-analysis-card,.ws-compare-grid>article,.ws-source-card,.ws-scenario-grid>article{border:1px solid var(--ws-line);border-radius:var(--ws-radius);box-shadow:var(--ws-shadow);background:var(--ws-surface)}
.ws-panel{padding:25px}
.ws-panel-head{justify-content:space-between;align-items:flex-start;gap:18px;display:flex}
.ws-panel-head h2{font:520 22px var(--ws-font-display);letter-spacing:-.035em;margin:5px 0 0}
.ws-panel-head>svg{color:var(--ws-text-3);width:20px}
.ws-text-button{color:var(--ws-steel);background:0 0;border:0;align-items:center;gap:7px;font-size:11px;font-weight:750;display:inline-flex}
.ws-text-button svg{width:14px}
.ws-metric-grid,.ws-detail-metrics{grid-template-columns:repeat(4,minmax(0,1fr));gap:13px;display:grid}
.ws-metric-card{min-height:138px;padding:20px;display:grid}
.ws-metric-card>span{color:var(--ws-text-3);font:650 9px var(--ws-font-display);letter-spacing:.1em;text-transform:uppercase;align-items:center;gap:8px;display:flex}
.ws-metric-card>span svg{width:15px}
.ws-metric-card strong{font:520 25px var(--ws-font-display);letter-spacing:-.035em;align-self:end}
.ws-metric-card small{color:var(--ws-text-4);font-size:10px}
.ws-dashboard-grid{grid-template-columns:minmax(0,1.6fr) minmax(300px,.72fr);gap:17px;margin-top:17px;display:grid}
.ws-portfolio-pulse{min-height:350px}
.ws-portfolio-pulse .ws-empty-state{min-height:255px}
.ws-signal-card{min-height:350px;color:var(--ws-on-dark);background:radial-gradient(circle at 78% 8%,#5977936e,#0000 28%),linear-gradient(145deg,#10263c,#07111d 72%);flex-direction:column;display:flex;position:relative;overflow:hidden}
.ws-signal-card:before{content:"";opacity:.15;background-image:linear-gradient(#ffffff14 1px,#0000 1px),linear-gradient(90deg,#ffffff14 1px,#0000 1px);background-size:41px 41px;position:absolute;inset:0}
.ws-signal-card>*{position:relative}
.ws-signal-card .ws-eyebrow{color:#a6bacb}
.ws-signal-orbit{border:1px solid #ffffff2e;border-radius:50%;place-items:center;width:78px;height:78px;margin:26px 0 22px;display:grid;box-shadow:0 0 0 18px #ffffff06}
.ws-signal-orbit svg{color:#a8bbcc;width:26px}
.ws-signal-card h2{font:520 21px/1.22 var(--ws-font-display);margin:0 0 10px}
.ws-signal-card p{color:#ffffff94;margin:0;font-size:11px;line-height:1.65}
.ws-signal-card :is(a,button){color:#bfd0de;background:0 0;border:0;align-items:center;gap:7px;margin-top:auto;padding:0;font-size:11px;font-weight:750;display:flex}
.ws-signal-card :is(a,button) svg{width:14px}
.ws-recent-panel{margin-top:17px}
.ws-empty-state{text-align:center;align-content:center;place-items:center;min-height:380px;padding:32px;display:grid}
.ws-empty-state>div{color:var(--ws-primary-fg);background:var(--ws-primary-bg);border-radius:7px 20px;place-items:center;width:58px;height:58px;display:grid}
.ws-empty-state svg{width:23px}
.ws-empty-state h2{font:520 25px var(--ws-font-display);margin:18px 0 7px}
.ws-empty-state p{max-width:460px;color:var(--ws-muted);margin:0 0 20px;font-size:12px;line-height:1.6}
.ws-list-panel{padding:18px 26px}
.ws-analysis-table{min-width:0}
.ws-analysis-table-head,.ws-analysis-row{grid-template-columns:minmax(210px,1.45fr) minmax(150px,.8fr) 90px 90px 58px 18px;align-items:center;gap:14px;display:grid}
.ws-analysis-table-head{color:var(--ws-text-4);min-height:40px;font:650 9px var(--ws-font-display);letter-spacing:.08em;text-transform:uppercase}
.ws-analysis-row{border:0;border-top:1px solid var(--ws-line);text-align:left;background:0 0;width:100%;min-height:76px;padding:8px 0;transition:padding .18s,background .18s}
.ws-analysis-row:hover{background:var(--ws-hover);padding-inline:9px}
.ws-analysis-row>strong{gap:4px;font-size:12px;display:grid}
.ws-analysis-row>strong small{color:var(--ws-text-4);font-size:9px;font-weight:500}
.ws-analysis-row>svg{color:var(--ws-text-4);width:15px}
.ws-property-cell{align-items:center;gap:11px;min-width:0;display:flex}
.ws-property-cell>i,.ws-compare-title>i{color:var(--ws-icon);background:var(--ws-tint);border-radius:5px 13px;place-items:center;width:38px;height:38px;display:grid}
.ws-property-cell svg,.ws-compare-title svg{width:15px}
.ws-property-cell b{gap:4px;min-width:0;font-size:11px;display:grid}
.ws-property-cell small{text-overflow:ellipsis;white-space:nowrap;color:var(--ws-text-4);font-size:9px;font-weight:500;overflow:hidden}
.ws-score{--ws-score:270deg;background:conic-gradient(var(--ws-bar) var(--ws-score), var(--ws-track) 0);border-radius:50%;place-items:center;width:39px;height:39px;display:grid;position:relative}
.ws-score:after{content:"";border-radius:inherit;background:var(--ws-surface-solid);position:absolute;inset:4px}
.ws-score b,.ws-score small{z-index:1;position:relative}
.ws-score b{font:650 10px var(--ws-font-display)}
.ws-score.ws-large{background:conic-gradient(var(--ws-bar) var(--ws-score), #ffffff1a 0);width:94px;height:94px}
.ws-score.ws-large:after{background:var(--ws-deep);inset:7px}
.ws-score.ws-large b{color:#fff;font-size:26px}
.ws-score.ws-large small{color:#8399ac;font-size:9px}
.ws-compare-grid .ws-button{width:100%}
.ws-source-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:15px;display:grid}
.ws-source-card{flex-direction:column;min-height:235px;padding:22px;display:flex}
.ws-source-card>div{justify-content:space-between;align-items:center;display:flex}
.ws-source-card>div>svg{color:var(--ws-icon);width:21px}
.ws-status{color:var(--ws-text-2);text-transform:uppercase;background:var(--ws-tint);border-radius:999px;align-items:center;gap:6px;padding:5px 8px;font-size:9px;font-weight:750;display:flex}
.ws-status i,.ws-source-dot i{background:var(--ws-text-4);border-radius:50%;width:7px;height:7px}
.ws-status.ws-live i,.ws-source-dot.ws-live i{background:#42a35a}
.ws-status.ws-fallback i,.ws-source-dot.ws-fallback i{background:var(--ws-amber)}
.ws-status.ws-unavailable i,.ws-source-dot.ws-unavailable i{background:var(--ws-red)}
.ws-status.ws-manual i,.ws-source-dot.ws-manual i{background:var(--ws-steel)}
.ws-source-card h2{font:520 19px var(--ws-font-display);margin:23px 0 8px}
.ws-source-card p{color:var(--ws-muted);margin:0;font-size:11px;line-height:1.55}
.ws-source-card footer{justify-content:space-between;align-items:center;gap:10px;margin-top:auto;display:flex}
.ws-source-card footer small{color:var(--ws-text-4);font-size:9px}
.ws-source-card footer a{color:var(--ws-steel);align-items:center;gap:5px;font-size:9px;font-weight:700;text-decoration:none;display:flex}
.ws-source-card footer svg{width:12px}
.ws-method-note{color:#fff;border-radius:var(--ws-radius);background:var(--ws-feature);grid-template-columns:54px 1fr;align-items:center;gap:20px;margin-top:16px;padding:28px;display:grid}
.ws-method-note>svg{width:28px}
.ws-method-note .ws-eyebrow{color:#9fb4c6}
.ws-method-note h2{font:520 23px var(--ws-font-display);margin:6px 0}
.ws-method-note p{color:#ffffff94;margin:0;font-size:11px}
.ws-builder-shell{border:1px solid var(--ws-line);border-radius:var(--ws-radius);box-shadow:var(--ws-shadow);background:var(--ws-surface);grid-template-columns:245px minmax(0,1fr);display:grid;overflow:hidden}
.ws-stepper{background:var(--ws-tint-2);flex-direction:column;padding:28px 22px;display:flex}
.ws-stepper>.ws-eyebrow{margin-bottom:18px}
.ws-stepper>:is(a,button){text-align:left;background:0 0;border:0;border-top:1px solid var(--ws-line-soft);grid-template-columns:37px 1fr;align-items:center;gap:11px;min-height:74px;padding:10px 4px;display:grid}
.ws-stepper>:is(a,button)>b{color:var(--ws-text-3);width:34px;height:34px;font:650 10px var(--ws-font-display);background:var(--ws-chip-bg);border-radius:50%;place-items:center;display:grid}
.ws-stepper>:is(a,button)>b svg{width:14px}
.ws-stepper>:is(a,button)>span{gap:3px;display:grid}
.ws-stepper strong{font-size:11px}
.ws-stepper small{color:var(--ws-text-4);font-size:9px}
.ws-stepper>:is(a,button).ws-active>b{background:var(--ws-primary-bg);color:var(--ws-primary-fg)}
.ws-stepper>:is(a,button).ws-done>b{color:var(--ws-green);background:#2d8a491f}
.ws-privacy-note{color:var(--ws-text-2);align-items:flex-start;gap:9px;margin-top:auto;display:flex}
.ws-privacy-note svg{width:16px}
.ws-privacy-note span{gap:3px;display:grid}
.ws-privacy-note strong{font-size:9px}
.ws-privacy-note small{font-size:9px}
.ws-form-panel{min-width:0;padding:34px clamp(24px,4vw,54px) 26px}
.ws-form-title{margin-bottom:27px}
.ws-form-title h2{font:520 30px var(--ws-font-display);letter-spacing:-.04em;margin:7px 0}
.ws-form-title p{color:var(--ws-muted);margin:0;font-size:11px}
.ws-form-section{gap:18px;display:grid}
.ws-form-grid{gap:13px;display:grid}
.ws-form-grid.ws-two{grid-template-columns:repeat(2,minmax(0,1fr))}
.ws-form-grid.ws-three{grid-template-columns:repeat(3,minmax(0,1fr))}
.ws-form-grid.ws-four{grid-template-columns:repeat(4,minmax(0,1fr))}
.ws-form-grid.ws-address{grid-template-columns:minmax(0,1fr) 130px}
.ws-form-grid.ws-compact{margin-top:15px}
.ws-field{color:var(--ws-text-2);gap:7px;min-width:0;font-size:10px;font-weight:700;display:grid}
.ws-field>span{justify-content:space-between;gap:10px;display:flex}
.ws-field>span small{color:var(--ws-text-4);font-weight:500}
.ws-field input,.ws-field select{border:1px solid var(--ws-line);width:100%;height:45px;color:var(--ws-ink);background:var(--ws-input-bg);border-radius:6px 13px;outline:0;padding:0 12px;font-size:12px}
.ws-field input:focus,.ws-field select:focus{border-color:var(--ws-focus);box-shadow:0 0 0 3px #5977931a}
.ws-field select+input{margin-top:7px}
.ws-money-input{position:relative}
.ws-money-input>svg{color:var(--ws-text-4);width:15px;position:absolute;top:14px;left:11px}
.ws-money-input input{padding-left:33px}
.ws-form-divider{border-top:1px solid var(--ws-line);align-items:center;gap:10px;margin-top:5px;padding:17px 0 0;display:flex}
.ws-form-divider>svg{width:18px;color:var(--ws-steel)}
.ws-form-divider span{gap:2px;display:grid}
.ws-form-divider strong{font-size:11px}
.ws-form-divider small{color:var(--ws-muted);font-size:9px}
.ws-fiscal-warning{color:var(--ws-warn-text);background:var(--ws-warn-bg);border:1px solid var(--ws-warn-line);border-radius:6px 15px;align-items:flex-start;gap:10px;padding:13px;display:flex}
.ws-fiscal-warning svg{width:17px}
.ws-fiscal-warning p{margin:0;font-size:9px;line-height:1.55}
.ws-form-footer{border-top:1px solid var(--ws-line);justify-content:space-between;margin-top:30px;padding-top:22px;display:flex}
.ws-locate{justify-self:start}
.ws-detail-breadcrumb{color:var(--ws-text-3);align-items:center;gap:7px;margin-bottom:17px;font-size:10px;display:flex}
.ws-detail-breadcrumb :is(a,button){color:var(--ws-steel);background:0 0;border:0;align-items:center;gap:6px;font-weight:700;display:flex}
.ws-detail-breadcrumb svg{width:13px}
.ws-detail-hero{border:1px solid var(--ws-line);border-radius:var(--ws-radius);background:var(--ws-surface-solid);min-height:365px;box-shadow:var(--ws-shadow);grid-template-columns:minmax(330px,.75fr) minmax(0,1.25fr);display:grid;overflow:hidden}
.ws-detail-visual{background:radial-gradient(circle,var(--ws-visual-a),var(--ws-visual-b) 72%);place-items:center;min-height:365px;display:grid;position:relative;overflow:hidden}
.ws-detail-grid{opacity:.35;background-image:linear-gradient(var(--ws-grid-line) 1px,#0000 1px),linear-gradient(90deg,var(--ws-grid-line) 1px,#0000 1px);background-size:38px 38px;position:absolute;inset:0;transform:rotate(-11deg)scale(1.3)}
.ws-detail-visual img{object-fit:contain;filter:drop-shadow(0 25px 27px #0f1c2e2e);width:min(90%,410px);max-height:280px;position:relative}
.ws-analysis-label,.ws-confidence{-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);font:700 9px var(--ws-font-display);letter-spacing:.07em;background:var(--ws-chip-bg);border-radius:999px;padding:7px 9px;position:absolute;top:16px}
.ws-analysis-label{left:16px}
.ws-confidence{align-items:center;gap:6px;display:flex;right:16px}
.ws-confidence i{background:var(--ws-amber);border-radius:50%;width:7px;height:7px}
.ws-confidence.ws-high i{background:var(--ws-green)}
.ws-confidence.ws-low i{background:var(--ws-red)}
.ws-detail-copy{flex-direction:column;padding:27px clamp(24px,3vw,44px);display:flex}
.ws-detail-title{justify-content:space-between;gap:18px;display:flex}
.ws-detail-title h1{font:520 clamp(28px,3vw,42px) var(--ws-font-display);letter-spacing:-.05em;margin:7px 0 6px}
.ws-detail-title p{color:var(--ws-muted);align-items:center;gap:6px;margin:0;font-size:11px;display:flex}
.ws-detail-title p svg{width:13px}
.ws-edit-action{flex:none}
.ws-value-score{justify-content:space-between;align-items:center;margin:35px 0 13px;display:flex}
.ws-value-score>div{gap:5px;display:grid}
.ws-value-score small{color:var(--ws-text-3);font:650 9px var(--ws-font-display);letter-spacing:.09em}
.ws-value-score strong{font:520 38px var(--ws-font-display);letter-spacing:-.05em}
.ws-value-score span{color:var(--ws-muted);font-size:10px}
.ws-value-score .ws-score{background:conic-gradient(var(--ws-bar) var(--ws-score), var(--ws-track) 0)}
.ws-value-score .ws-score:after{background:var(--ws-surface-solid)}
.ws-value-score .ws-score b{color:var(--ws-ink)}
.ws-value-track{background:var(--ws-track);border-radius:999px;height:6px;margin-bottom:26px;position:relative}
.ws-value-track span{border-radius:inherit;background:linear-gradient(90deg,var(--ws-track-from),var(--ws-track-to));width:50%;height:100%;position:absolute;left:25%}
.ws-value-track i{z-index:2;background:var(--ws-ink);border:3px solid var(--ws-surface-solid);border-radius:50%;width:13px;height:13px;position:absolute;top:-4px;box-shadow:0 2px 8px #0003}
.ws-detail-actions{flex-wrap:wrap;gap:8px;margin-top:auto;display:flex}
.ws-detail-metrics{margin-top:15px}
.ws-tabs{border-bottom:1px solid var(--ws-line);gap:26px;margin:20px 0 15px;display:flex}
.ws-tabs :is(a,button){color:var(--ws-text-3);background:0 0;border:0;border-bottom:2px solid #0000;min-height:47px;padding:0 2px;font-size:11px;font-weight:700}
.ws-tabs :is(a,button).ws-active{border-color:var(--ws-ink);color:var(--ws-ink)}
.ws-summary-layout,.ws-market-layout,.ws-finance-layout{grid-template-columns:minmax(0,1.25fr) minmax(320px,.75fr);gap:15px;display:grid}
.ws-signal-summary h2{max-width:720px;font:520 26px/1.15 var(--ws-font-display);letter-spacing:-.04em;margin:25px 0 10px}
.ws-signal-summary>p{color:var(--ws-muted);font-size:11px;line-height:1.65}
.ws-confidence-pill{color:var(--ws-amber);background:#b47a281a;border-radius:999px;align-items:center;gap:6px;padding:6px 9px;font-size:9px;font-weight:700;display:flex}
.ws-confidence-pill.ws-high{color:var(--ws-green);background:#2d8a491a}
.ws-confidence-pill svg{width:13px}
.ws-factor-grid{grid-template-columns:repeat(3,1fr);gap:10px;margin-top:27px;display:grid}
.ws-factor-grid>div{border:1px solid var(--ws-line);border-radius:5px 14px;gap:10px;padding:13px;display:flex}
.ws-factor-grid>div>svg{width:17px;color:var(--ws-steel)}
.ws-factor-grid span{gap:4px;display:grid}
.ws-factor-grid small{color:var(--ws-text-4);font-size:9px}
.ws-factor-grid b{font-size:10px}
.ws-factor-grid em{color:var(--ws-muted);font-size:9px;font-style:normal}
.ws-poi-panel iframe{border:0;border-radius:5px 16px;width:100%;height:190px;margin:18px 0}
.ws-poi-counts{grid-template-columns:repeat(5,1fr);gap:4px;display:grid}
.ws-poi-counts span{text-align:center;color:var(--ws-text-3);gap:3px;font-size:9px;display:grid}
.ws-poi-counts b{color:var(--ws-ink);font:600 15px var(--ws-font-display)}
.ws-poi-panel ul{margin:16px 0 0;padding:0;list-style:none}
.ws-poi-panel li{border-top:1px solid var(--ws-line);grid-template-columns:16px 1fr 48px;align-items:center;gap:8px;min-height:43px;display:grid}
.ws-poi-panel li>svg{width:13px;color:var(--ws-steel)}
.ws-poi-panel li span{gap:2px;display:grid}
.ws-poi-panel li b{font-size:9px}
.ws-poi-panel li small{color:var(--ws-muted);font-size:9px}
.ws-poi-panel li strong{text-align:right;font-size:9px}
.ws-market-layout>.ws-panel,.ws-finance-layout>.ws-panel{min-height:390px}
.ws-market-layout>.ws-panel>h2,.ws-finance-layout>.ws-panel>h2{font:520 24px var(--ws-font-display);margin:6px 0 24px}
.ws-valuation-bars{gap:19px;display:grid}
.ws-valuation-bars>div{grid-template-columns:145px 1fr 90px;align-items:center;gap:12px;display:grid}
.ws-valuation-bars span{color:var(--ws-muted);font-size:10px}
.ws-valuation-bars i{background:var(--ws-track);border-radius:999px;height:9px}
.ws-valuation-bars b{border-radius:inherit;background:var(--ws-bar);height:100%;display:block}
.ws-valuation-bars em{text-align:right;font-size:10px;font-style:normal;font-weight:700}
.ws-valuation-bars .ws-strong span,.ws-valuation-bars .ws-strong em{color:var(--ws-ink);font-weight:800}
.ws-valuation-bars .ws-strong b{background:var(--ws-ink)}
.ws-comparables>div:not(.ws-panel-head){border-top:1px solid var(--ws-line);grid-template-columns:1fr 100px 70px;align-items:center;gap:8px;min-height:68px;display:grid}
.ws-comparables>div>span,.ws-comparables>div>strong{gap:3px;display:grid}
.ws-comparables b,.ws-comparables strong{font-size:9px}
.ws-comparables small{color:var(--ws-muted);font-size:9px}
.ws-comparables em{color:var(--ws-amber);text-align:center;background:#b47a281a;border-radius:999px;padding:4px 7px;font-size:9px;font-style:normal}
.ws-comparables em.ws-live{color:var(--ws-green);background:#2d8a491a}
.ws-finance-list{margin:0;display:grid}
.ws-finance-list div{border-top:1px solid var(--ws-line);justify-content:space-between;align-items:center;min-height:46px;display:flex}
.ws-finance-list dt{color:var(--ws-muted);font-size:10px}
.ws-finance-list dd{margin:0;font-size:11px;font-weight:750}
.ws-finance-list .ws-total{color:var(--ws-ink);border-top:1px solid var(--ws-line-strong)}
.ws-finance-list .ws-total dt,.ws-finance-list .ws-total dd{color:inherit;font-weight:800}
.ws-finance-score{color:#fff;background:var(--ws-feature);border-radius:6px 22px;align-content:center;place-items:center;height:130px;margin-bottom:15px;display:grid}
.ws-finance-score svg{color:#98afc3;width:20px}
.ws-finance-score strong{font:520 32px var(--ws-font-display);margin:5px 0 0}
.ws-finance-score span{color:#91a5b7;letter-spacing:.12em;font-size:9px}
.ws-strategy-strip{color:#fff;border-radius:var(--ws-radius);background:var(--ws-feature);grid-template-columns:1.3fr 1fr 1fr;align-items:center;gap:20px;margin-bottom:15px;padding:24px;display:grid}
.ws-strategy-strip .ws-eyebrow{color:#9fb4c6}
.ws-strategy-strip h2{font:520 26px var(--ws-font-display);margin:6px 0 0}
.ws-strategy-strip>div:not(:first-child){border-left:1px solid #ffffff1f;gap:5px;padding-left:20px;display:grid}
.ws-strategy-strip>div:not(:first-child) span{color:#91a4b5;font-size:9px}
.ws-strategy-strip strong{font-size:14px}
.ws-source-list{padding:27px}
.ws-source-list>div:not(.ws-panel-head){border-top:1px solid var(--ws-line);grid-template-columns:20px minmax(0,1fr) 90px 22px;align-items:center;gap:12px;min-height:72px;display:grid}
.ws-source-dot{background:var(--ws-tint);border-radius:50%;place-items:center;width:15px;height:15px;display:grid}
.ws-source-dot i{width:6px;height:6px}
.ws-source-list>div>span:nth-child(2){gap:4px;display:grid}
.ws-source-list b{font-size:10px}
.ws-source-list small{color:var(--ws-muted);font-size:9px;line-height:1.45}
.ws-source-list em{color:var(--ws-text-2);text-align:right;font-size:9px;font-style:normal}
.ws-source-list a svg{width:14px;color:var(--ws-steel)}
.ws-danger-link{color:var(--ws-red);background:0 0;border:0;align-items:center;gap:7px;margin:24px auto 0;padding:8px;font-size:10px;font-weight:700;display:flex}
.ws-danger-link svg{width:14px}
@media (max-width:1180px){.ws-app-shell{grid-template-columns:220px minmax(0,1fr)}}
@media (max-width:1180px){.ws-sidebar{width:220px}}
@media (max-width:1180px){.ws-metric-grid,.ws-detail-metrics,.ws-card-grid,.ws-source-grid,.ws-compare-grid,.ws-form-grid.ws-four{grid-template-columns:repeat(2,1fr)}}
@media (max-width:1180px){.ws-detail-hero{grid-template-columns:minmax(300px,.7fr) 1fr}}
@media (max-width:1180px){.ws-top-status{display:none}}
@media (max-width:900px){.ws-app-shell{display:block}}
@media (max-width:900px){.ws-workspace{grid-column:auto}}
@media (max-width:900px){.ws-sidebar{width:min(300px,86vw);transition:transform .24s;transform:translate(-105%)}}
@media (max-width:900px){.ws-sidebar.ws-open{transform:translate(0)}}
@media (max-width:900px){.ws-sidebar-brand button{display:block}}
@media (max-width:900px){.ws-sidebar-scrim{z-index:55;pointer-events:none;opacity:0;background:#07111d66;transition:opacity .2s;display:block;position:fixed;inset:0}}
@media (max-width:900px){.ws-sidebar-scrim.ws-visible{pointer-events:auto;opacity:1}}
@media (max-width:900px){.ws-menu-button{display:grid}}
@media (max-width:900px){.ws-global-search{width:min(430px,55vw)}}
@media (max-width:900px){.ws-dashboard-grid,.ws-summary-layout,.ws-market-layout,.ws-finance-layout,.ws-detail-hero{grid-template-columns:1fr}}
@media (max-width:900px){.ws-detail-visual{min-height:300px}}
@media (max-width:900px){.ws-builder-shell{grid-template-columns:1fr}}
@media (max-width:900px){.ws-stepper{grid-template-columns:repeat(3,1fr);padding:15px;display:grid}}
@media (max-width:900px){.ws-stepper>.ws-eyebrow,.ws-privacy-note{display:none}}
@media (max-width:900px){.ws-stepper>:is(a,button){border-top:0;min-height:55px}}
@media (max-width:900px){.ws-stepper>:is(a,button)>span small,.ws-analysis-table-head{display:none}}
@media (max-width:900px){.ws-analysis-row{grid-template-columns:minmax(180px,1fr) 120px 70px 48px 16px}}
@media (max-width:900px){.ws-analysis-row>strong:nth-of-type(3){display:none}}
@media (max-width:900px){.ws-analysis-row>strong:first-of-type{order:initial}}
@media (max-width:640px){.ws-topbar{height:68px;padding:0 16px}}
@media (max-width:640px){.ws-topbar>.ws-button{width:42px;padding:0;font-size:0}}
@media (max-width:640px){.ws-topbar>.ws-button svg{width:17px}}
@media (max-width:640px){.ws-global-search{flex:1;width:auto}}
@media (max-width:640px){.ws-content{padding:28px 16px 50px}}
@media (max-width:640px){.ws-page-header{flex-direction:column;align-items:flex-start}}
@media (max-width:640px){.ws-page-header h1{font-size:36px}}
@media (max-width:640px){.ws-page-actions{justify-content:flex-start;width:100%}}
@media (max-width:640px){.ws-metric-grid,.ws-detail-metrics,.ws-card-grid,.ws-source-grid,.ws-compare-grid,.ws-scenario-grid{grid-template-columns:1fr}}
@media (max-width:640px){.ws-metric-card{min-height:118px}}
@media (max-width:640px){.ws-analysis-row{grid-template-columns:minmax(0,1fr) 80px 42px 14px}}
@media (max-width:640px){.ws-analysis-row>strong:nth-of-type(2),.ws-analysis-row>strong:nth-of-type(3){display:none}}
@media (max-width:640px){.ws-list-panel{padding:12px 16px}}
@media (max-width:640px){.ws-stepper>:is(a,button){grid-template-columns:30px 1fr;gap:5px}}
@media (max-width:640px){.ws-stepper>:is(a,button)>b{width:29px;height:29px}}
@media (max-width:640px){.ws-form-panel{padding:25px 18px 20px}}
@media (max-width:640px){.ws-form-grid.ws-two,.ws-form-grid.ws-three,.ws-form-grid.ws-four,.ws-form-grid.ws-address{grid-template-columns:1fr}}
@media (max-width:640px){.ws-form-footer{gap:10px}}
@media (max-width:640px){.ws-detail-title{flex-direction:column}}
@media (max-width:640px){.ws-edit-action{align-self:flex-start}}
@media (max-width:640px){.ws-value-score{align-items:flex-end}}
@media (max-width:640px){.ws-value-score strong{font-size:32px}}
@media (max-width:640px){.ws-detail-actions .ws-button{flex:150px}}
@media (max-width:640px){.ws-tabs{gap:16px;overflow-x:auto}}
@media (max-width:640px){.ws-factor-grid{grid-template-columns:1fr}}
@media (max-width:640px){.ws-poi-counts{grid-template-columns:repeat(3,1fr)}}
@media (max-width:640px){.ws-valuation-bars>div{grid-template-columns:1fr 75px}}
@media (max-width:640px){.ws-valuation-bars i{grid-area:2/1/auto/-1}}
@media (max-width:640px){.ws-valuation-bars em{grid-area:1/2}}
@media (max-width:640px){.ws-strategy-strip{grid-template-columns:1fr}}
@media (max-width:640px){.ws-strategy-strip>div:not(:first-child){border-top:1px solid #ffffff1f;border-left:0;padding:12px 0 0}}
@media (max-width:640px){.ws-source-list>div:not(.ws-panel-head){grid-template-columns:16px 1fr 20px}}
@media (max-width:640px){.ws-source-list em{display:none}}
@media print{.ws-sidebar,.ws-topbar,.ws-detail-breadcrumb,.ws-detail-actions,.ws-tabs,.ws-no-print,.ws-notice{display:none!important}}
@media print{.ws-app-shell,.ws-workspace{display:block}}
@media print{.ws-content{padding:0}}
@media print{.ws-report-surface{color:#111}}
@media print{.ws-detail-hero,.ws-metric-card,.ws-panel,.ws-scenario-grid>article{break-inside:avoid;box-shadow:none;background:#fff}}
@media print{.ws-detail-visual{min-height:250px}}
@media print{.ws-detail-metrics{margin:10px 0}}
@media print{.ws-summary-layout{grid-template-columns:1fr}}
@media print{.ws-poi-panel iframe{display:none}}

/* ===== 3. BASE ===== */
[data-bs-theme="dark"] {
    --ws-paper: #0a131f;
    --ws-ivory: #111e2e;
}
html { -webkit-text-size-adjust: 100%; }
body.app,
body.app-login {
    background: var(--ws-paper);
    color: var(--ws-ink);
    font-family: var(--ws-font-body);
    font-size: var(--bs-body-font-size);
    text-rendering: optimizeLegibility;
    -webkit-font-smoothing: antialiased;
}
body.app ::selection { background: #5977933d; }

/* Il vecchio template colorava TUTTI i link con un selettore pesante
   (body.app a:not(.btn), specificità 0,2,2) che vinceva sui componenti:
   il testo del pulsante primario sarebbe diventato navy su navy.
   Qui un link generico ha il peso minimo possibile. */
:where(body.app) a:where(:not(.btn)) { color: var(--bs-link-color); text-decoration: none; }
:where(body.app) a:where(:not(.btn)):hover { color: var(--bs-link-hover-color); }

/* peso zero: i titoli dei componenti (.ws-page-header h1, .ws-panel-head h2...)
   hanno font e spaziatura propri e devono vincere */
:where(body.app) :where(h1, h2, h3, h4, h5, h6, .h1, .h2, .h3, .h4, .h5, .h6) {
    font-family: var(--ws-font-display);
    font-weight: 520;
    letter-spacing: -.025em;
    color: var(--ws-ink);
}
:where(body.app) :focus-visible {
    outline: 2px solid var(--ws-focus);
    outline-offset: 2px;
}
.ws-i {
    width: 1em;
    height: 1em;
    flex: none;
    fill: none;
    stroke: currentColor;
    stroke-width: 2;
    stroke-linecap: round;
    stroke-linejoin: round;
    vertical-align: -.125em;
}
.ws-num { font-variant-numeric: tabular-nums; }
@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after { transition-duration: .01ms !important; animation-duration: .01ms !important; }
}

/* ===== 4. GUSCIO =====
   menu.php apre .ws-app-shell › .ws-sidebar + main.ws-workspace › .ws-topbar.
   Le pagine continuano a stampare .app-wrapper › .app-content › .container-xl:
   qui quei contenitori diventano l'area contenuti del modello. */
body.app { margin: 0; }
.ws-app-shell .app-wrapper {
    margin: 0;
    padding: 0;
    min-height: 0;
}
.ws-app-shell .app-content {
    padding: 42px clamp(24px, 3.2vw, 52px) 56px;
}
.ws-app-shell .app-content > .container-xl,
.ws-app-shell .app-content > .container-fluid,
.ws-app-shell .app-content > .container {
    max-width: 1480px;
    margin-inline: 0;
    padding-inline: 0;
}

/* titolo di pagina: è il <h1> del modello */
body.app .app-page-title {
    font: 500 clamp(30px, 3.1vw, 46px)/1.04 var(--ws-font-display);
    letter-spacing: -.05em;
    color: var(--ws-ink);
    margin: 4px 0 8px;
}

/* scala z-index: sopra le mappe Leaflet (400-1000), sotto i modali Bootstrap (1050+) */
.ws-topbar { z-index: 1030; }
.ws-sidebar-scrim { z-index: 1039; }
.ws-sidebar { z-index: 1041; }

/* sidebar: estensioni per il gestionale */
.ws-sidebar { overflow-y: auto; scrollbar-width: none; }
/* in una colonna flex che scorre, un figlio con overflow:hidden ha altezza
   minima 0 e collassa quando le voci superano lo schermo (logo sparito sul
   telefono col menu admin): nessun figlio si restringe, scorre la sidebar */
.ws-sidebar > * { flex-shrink: 0; }
.ws-sidebar::-webkit-scrollbar { display: none; }
.ws-sidebar-brand .ws-brand-link { display: block; line-height: 0; }
.ws-sidebar-brand img { width: 145px; height: auto; }
.ws-sidebar nav :is(a, button) { text-decoration: none; }
.ws-sidebar nav :is(a, button) > .ws-i { width: 17px; height: 17px; }
.ws-sidebar nav :is(a, button):focus-visible { outline: 2px solid #90a8be; outline-offset: 1px; }
.ws-nav-label + nav { margin-bottom: 4px; }
.ws-nav-label.ws-nav-gap { margin-top: 26px; }
a.ws-plan-card { color: inherit; text-decoration: none; transition: background .2s, border-color .2s; }
a.ws-plan-card:hover { background: #ffffff14; border-color: #ffffff2e; }
.ws-plan-card > .ws-i { width: 17px; height: 17px; justify-self: center; }
.ws-user-card { grid-template-columns: 35px minmax(0, 1fr) auto; }
/* la regola del modello .ws-user-card>span (l'avatar) colpirebbe anche questo
   contenitore, che è a sua volta uno span figlio diretto: lo riporto neutro */
.ws-user-card > span.ws-user-actions {
    display: flex;
    gap: 2px;
    width: auto;
    height: auto;
    background: none;
    border-radius: 0;
    font-size: inherit;
}
.ws-user-card .ws-user-actions a {
    display: grid;
    place-items: center;
    width: 28px;
    height: 28px;
    border-radius: 5px 12px;
    color: #ffffff8c;
    transition: background .2s, color .2s;
}
.ws-user-card .ws-user-actions a:hover { background: #ffffff14; color: #fff; }
.ws-user-card .ws-user-actions .ws-i { width: 16px; height: 16px; }

/* topbar */
.ws-topbar .ws-i { width: 16px; height: 16px; }
.ws-topbar .ws-button.ws-primary .ws-i { width: 16px; height: 16px; }
.ws-global-search input { color: var(--ws-ink); }
.ws-global-search input::placeholder { color: var(--ws-text-4); }
.ws-topbar .ws-theme-toggle { color: var(--ws-text-2); }
.ws-topbar .ws-theme-toggle:hover { color: var(--ws-ink); }
.ws-icon-button { color: var(--ws-ink); }
.ws-top-status { color: var(--ws-text-3); }

/* menu mobile: investia-portal.js usa .is-open sulla sidebar e
   body.sidepanel-open per il velo; il modello usa .ws-open/.ws-visible */
@media (max-width: 900px) {
    .ws-sidebar.is-open { transform: translate(0); }
    body.sidepanel-open .ws-sidebar-scrim { pointer-events: auto; opacity: 1; }
    body.sidepanel-open { overflow: hidden; }
}

/* piè di pagina */
.ws-app-shell .app-footer {
    background: none;
    border-top: 1px solid var(--ws-line);
    backdrop-filter: none;
    margin: 0 clamp(24px, 3.2vw, 52px);
}
.ws-app-shell .app-footer .container { max-width: none; padding: 0; }
.ws-app-shell .app-footer .copyright { color: var(--ws-text-4); font-size: 11px; }

@media (max-width: 640px) {
    .ws-app-shell .app-content { padding: 28px 16px 44px; }
    .ws-app-shell .app-footer { margin: 0 16px; }
    body.app .app-page-title { font-size: 32px; }
}

/* logo: il file è scuro (pensato per fondi chiari). Nel modello sulla
   sidebar navy si vedeva appena; qui lo rendiamo bianco. */
.ws-sidebar-brand img { filter: brightness(0) invert(1); opacity: .94; }

/* topbar: lo spaziatore spinge le azioni a destra anche quando lo stato è nascosto */
.ws-topbar-spacer { flex: 1; }
.ws-topbar .ws-top-status { margin-left: 0; }
.ws-top-status.ws-stale i { background: var(--ws-amber); box-shadow: 0 0 11px #b47a2899; }

/* tab: si usano i tab di Bootstrap (data-bs-toggle="tab") con la classe .ws-tabs.
   Bootstrap mette .active sul pulsante: stesso aspetto di .ws-active del modello. */
.ws-tabs :is(a, button).active { border-color: var(--ws-ink); color: var(--ws-ink); }
.ws-tabs :is(a, button):hover { color: var(--ws-ink); }
.ws-tabs :is(a, button):focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 3px; border-radius: 3px; }
.ws-tabs { flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; }
.ws-tabs::-webkit-scrollbar { display: none; }
.ws-tabs :is(a, button) { white-space: nowrap; flex: none; }

/* wizard: pulsanti del percorso con aspetto di link, passo corrente evidenziato */
.ws-stepper > :is(a, button) { color: var(--ws-ink); cursor: pointer; }
.ws-stepper > :is(a, button):focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 2px; border-radius: 6px 15px; }
.ws-form-footer [data-ws-prev]:disabled { visibility: hidden; }

/* ===== 5. ACCESSO (login.php, register.php) — dal modello, con il form di accesso del gestionale ===== */
.ws-auth-shell{background:var(--ws-paper);grid-template-columns:minmax(0,1fr) minmax(400px,.8fr);min-height:100vh;display:grid}
.ws-auth-panel{flex-direction:column;justify-content:center;align-items:flex-start;padding:clamp(42px,8vw,120px);display:flex}
.ws-auth-panel img{filter:brightness(.25);width:150px;margin-bottom:70px}
.ws-auth-panel h1{max-width:720px;font:520 clamp(48px, 6vw, 84px)/.98 var(--ws-font-display);letter-spacing:-.06em;margin:18px 0}
.ws-auth-panel p{max-width:620px;color:var(--ws-text-3);margin:0 0 32px;font-size:16px;line-height:1.7}
.ws-auth-panel>small{color:var(--ws-text-4);margin:15px 0 0}
.ws-auth-visual{color:#fff;background:radial-gradient(circle at 60% 30%,#5e7d9a73,#0000 30%),linear-gradient(145deg,#10263c,#07111d 70%);place-items:center;display:grid;position:relative;overflow:hidden}
.ws-auth-visual:before{content:"";opacity:.2;background-image:linear-gradient(#ffffff14 1px,#0000 1px),linear-gradient(90deg,#ffffff14 1px,#0000 1px);background-size:56px 56px;position:absolute;inset:0}
.ws-auth-orbit{border:1px solid #fff3;border-radius:50%;align-content:center;place-items:center;width:220px;height:220px;display:grid;position:relative;box-shadow:0 0 0 48px #ffffff08,0 0 0 98px #ffffff05}
.ws-auth-orbit b{font:500 74px var(--ws-font-display)}
.ws-auth-orbit span{color:#a9bbcb;text-transform:uppercase;letter-spacing:.12em;font-size:12px}
@media (max-width:900px){.ws-auth-shell{grid-template-columns:1fr}}
@media (max-width:900px){.ws-auth-visual{display:none}}
@media (max-width:640px){.ws-auth-panel{padding:38px 24px}}
@media (max-width:640px){.ws-auth-panel img{margin-bottom:50px}}
@media (max-width:640px){.ws-auth-panel h1{font-size:48px}}
.ws-auth-panel > .ws-eyebrow .ws-i { width: 14px; height: 14px; }
[data-bs-theme="dark"] .ws-auth-panel img { filter: none; }
.ws-auth-form { width: min(100%, 420px); display: grid; gap: 14px; margin-top: 4px; }
.ws-auth-form .ws-field input { height: 48px; font-size: 14px; }
.ws-auth-form .ws-button { width: 100%; min-height: 50px; font-size: 13px; }
.ws-auth-form .ws-password { position: relative; }
.ws-auth-form .ws-password input { padding-right: 46px; }
.ws-auth-form .ws-password button {
    position: absolute; top: 0; right: 0; bottom: 0; width: 44px;
    display: grid; place-items: center; border: 0; background: none;
    color: var(--ws-text-3); border-radius: 0 13px 6px 0;
}
.ws-auth-form .ws-password button:hover { color: var(--ws-ink); }
.ws-auth-switch { display: flex; gap: 6px; font-size: 12.5px; color: var(--ws-text-3); align-items: center; flex-wrap: wrap; }
.ws-auth-switch a { color: var(--ws-steel); font-weight: 750; }
.ws-auth-feedback { border-radius: 6px 15px; padding: 11px 13px; font-size: 12.5px; line-height: 1.5; }
.ws-auth-feedback.is-error { color: var(--ws-red); background: #b5474714; border: 1px solid #b5474733; }
.ws-auth-feedback.is-warning { color: var(--ws-warn-text); background: var(--ws-warn-bg); border: 1px solid var(--ws-warn-line); }
.ws-auth-feedback.is-success { color: var(--ws-green); background: #2d8a4914; border: 1px solid #2d8a4933; }
.ws-auth-panel h1 { color: var(--ws-ink); }

/* Login: link «Password dimenticata?» sotto la password (punto 2) */
.ws-auth-forgot { justify-self: end; margin-top: -6px; font-size: 12px; font-weight: 600; color: var(--ws-steel); text-decoration: none; }
.ws-auth-forgot:hover, .ws-auth-forgot:focus-visible { text-decoration: underline; }

/* ===== 6. PONTE BOOTSTRAP =====
   I componenti Bootstrap che le pagine continuano a usare, portati sul
   linguaggio del modello. Stesso peso dei selettori originali: vincono
   per ordine di caricamento, e gli stili propri delle pagine restano. */

/* --- pulsanti: come .ws-button --- */
.btn {
    --bs-btn-padding-x: 17px;
    --bs-btn-padding-y: 0;
    --bs-btn-font-family: var(--ws-font-body);
    --bs-btn-font-size: 12px;
    --bs-btn-font-weight: 750;
    --bs-btn-line-height: 1.2;
    --bs-btn-border-radius: 6px;
    --bs-btn-focus-box-shadow: 0 0 0 3px #5977932e;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    min-height: 42px;
    border-radius: 6px 16px;
    transition: transform .18s, box-shadow .18s, background .18s, border-color .18s, color .18s;
}
.btn:hover { transform: translateY(-1px); }
.btn:active, .btn:disabled, .btn.disabled { transform: none; }
.btn .bi, .btn .ws-i { font-size: 15px; width: 15px; height: 15px; }
.btn-sm {
    --bs-btn-padding-x: 12px;
    --bs-btn-font-size: 11px;
    --bs-btn-border-radius: 5px;
    min-height: 34px;
    border-radius: 5px 13px;
    gap: 6px;
}
.btn-lg {
    --bs-btn-padding-x: 22px;
    --bs-btn-font-size: 13px;
    min-height: 50px;
}
.btn-primary, .btn-dark {
    --bs-btn-color: var(--ws-primary-fg);
    --bs-btn-bg: var(--ws-primary-bg);
    --bs-btn-border-color: var(--ws-primary-bg);
    --bs-btn-hover-color: var(--ws-primary-fg);
    --bs-btn-hover-bg: var(--ws-primary-bg);
    --bs-btn-hover-border-color: var(--ws-primary-bg);
    --bs-btn-active-color: var(--ws-primary-fg);
    --bs-btn-active-bg: var(--ws-primary-bg);
    --bs-btn-active-border-color: var(--ws-primary-bg);
    --bs-btn-disabled-color: var(--ws-primary-fg);
    --bs-btn-disabled-bg: var(--ws-primary-bg);
    --bs-btn-disabled-border-color: var(--ws-primary-bg);
    box-shadow: 0 10px 25px #0f1c2e2b;
}
.btn-primary:hover, .btn-dark:hover { box-shadow: 0 14px 30px #0f1c2e33; }
.btn-secondary, .btn-light, .btn-outline-secondary, .btn-outline-primary, .btn-outline-dark, .btn-outline-light {
    --bs-btn-color: var(--ws-ink);
    --bs-btn-bg: var(--ws-surface-soft);
    --bs-btn-border-color: var(--ws-line);
    --bs-btn-hover-color: var(--ws-ink);
    --bs-btn-hover-bg: var(--ws-surface-solid);
    --bs-btn-hover-border-color: var(--ws-line-strong);
    --bs-btn-active-color: var(--ws-ink);
    --bs-btn-active-bg: var(--ws-tint);
    --bs-btn-active-border-color: var(--ws-line-strong);
    --bs-btn-disabled-color: var(--ws-text-3);
    --bs-btn-disabled-bg: var(--ws-surface-soft);
    --bs-btn-disabled-border-color: var(--ws-line);
}
.btn-success, .btn-outline-success {
    --bs-btn-color: var(--ws-green);
    --bs-btn-bg: #2d8a491a;
    --bs-btn-border-color: #2d8a4933;
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--ws-green);
    --bs-btn-hover-border-color: var(--ws-green);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--ws-green);
    --bs-btn-active-border-color: var(--ws-green);
}
.btn-danger, .btn-outline-danger {
    --bs-btn-color: var(--ws-red);
    --bs-btn-bg: #b547471a;
    --bs-btn-border-color: #b5474733;
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--ws-red);
    --bs-btn-hover-border-color: var(--ws-red);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--ws-red);
    --bs-btn-active-border-color: var(--ws-red);
}
.btn-warning, .btn-outline-warning {
    --bs-btn-color: var(--ws-amber);
    --bs-btn-bg: #b47a281a;
    --bs-btn-border-color: #b47a2833;
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--ws-amber);
    --bs-btn-hover-border-color: var(--ws-amber);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--ws-amber);
    --bs-btn-active-border-color: var(--ws-amber);
}
.btn-info, .btn-outline-info {
    --bs-btn-color: var(--ws-steel);
    --bs-btn-bg: #5977931a;
    --bs-btn-border-color: #59779333;
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--ws-steel);
    --bs-btn-hover-border-color: var(--ws-steel);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: var(--ws-steel);
    --bs-btn-active-border-color: var(--ws-steel);
}
.btn-link {
    --bs-btn-color: var(--ws-steel);
    --bs-btn-hover-color: var(--ws-ink);
    --bs-btn-active-color: var(--ws-ink);
    min-height: 0;
    padding-inline: 0;
    text-decoration: none;
}
.btn-link:hover { transform: none; }
.btn-close { border-radius: 5px 12px; }
.btn-close:focus { box-shadow: 0 0 0 3px #5977932e; }

/* --- form: come .ws-field --- */
.form-label, .col-form-label {
    text-transform: none;
    letter-spacing: 0;
    color: var(--ws-text-2);
    font-size: 11px;
    font-weight: 700;
    margin-bottom: 6px;
}
.form-text { color: var(--ws-text-4); font-size: 11px; }
.form-control, .form-select {
    min-height: 45px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 13px;
    background-color: var(--ws-input-bg);
    color: var(--ws-ink);
    font-size: 13px;
    padding-inline: 12px;
    box-shadow: none;
    transition: border-color .15s, box-shadow .15s;
}
textarea.form-control { min-height: 92px; padding-block: 11px; line-height: 1.55; }
.form-control::placeholder { color: var(--ws-text-4); }
.form-control:focus, .form-select:focus {
    border-color: var(--ws-focus);
    box-shadow: 0 0 0 3px #5977931a;
    background-color: var(--ws-input-bg);
    color: var(--ws-ink);
}
.form-control:disabled, .form-control[readonly], .form-select:disabled {
    background-color: var(--ws-tint-2);
    color: var(--ws-text-2);
    opacity: 1;
}
.form-control-sm, .form-select-sm { min-height: 36px; font-size: 12px; border-radius: 5px 12px; }
.form-control-lg, .form-select-lg { min-height: 52px; font-size: 15px; }
.form-select { padding-right: 34px; background-position: right 12px center; }
.form-check-input {
    border-color: var(--ws-line-strong);
    background-color: var(--ws-input-bg);
}
.form-check-input:checked { background-color: var(--ws-primary-bg); border-color: var(--ws-primary-bg); }
.form-check-input:focus { border-color: var(--ws-focus); box-shadow: 0 0 0 3px #5977932e; }
.form-check-label { font-size: 13px; }
.form-range::-webkit-slider-thumb { background: var(--ws-primary-bg); }
.form-range::-moz-range-thumb { background: var(--ws-primary-bg); }
.form-range::-webkit-slider-runnable-track { background: var(--ws-track); }
.form-range::-moz-range-track { background: var(--ws-track); }

.input-group > .form-control,
.input-group > .form-select { border-radius: 0; }
.input-group > :first-child:not(.dropdown-menu) { border-top-left-radius: 6px; border-bottom-left-radius: 13px; }
.input-group > :last-child:not(.dropdown-menu) { border-top-right-radius: 13px; border-bottom-right-radius: 6px; }
.input-group-text {
    min-height: 45px;
    border: 1px solid var(--ws-line);
    background: var(--ws-tint-2);
    color: var(--ws-text-3);
    font-size: 12px;
}

/* --- card: come .ws-panel --- */
.card {
    --bs-card-bg: var(--ws-surface);
    --bs-card-border-color: var(--ws-line);
    --bs-card-border-radius: 7px;
    --bs-card-inner-border-radius: 6px;
    --bs-card-cap-bg: transparent;
    --bs-card-spacer-y: 22px;
    --bs-card-spacer-x: 24px;
    --bs-card-cap-padding-y: 16px;
    --bs-card-cap-padding-x: 24px;
    --bs-card-title-color: var(--ws-ink);
    --bs-card-color: var(--ws-ink);
    border-radius: var(--ws-radius);
    box-shadow: var(--ws-shadow);
    -webkit-backdrop-filter: none;
    backdrop-filter: none;
}
.card .card {
    --bs-card-bg: var(--ws-surface-solid);
    --bs-card-spacer-y: 16px;
    --bs-card-spacer-x: 18px;
    border-radius: 6px 18px;
    box-shadow: none;
}
.card-header {
    border-bottom: 1px solid var(--ws-line);
    font-family: var(--ws-font-display);
    font-weight: 520;
    letter-spacing: -.02em;
}
.card-footer { border-top: 1px solid var(--ws-line); }
.card-title {
    font-family: var(--ws-font-display);
    font-weight: 520;
    letter-spacing: -.03em;
}

/* --- alert: come i riquadri informativi del modello --- */
.alert {
    --bs-alert-border-radius: 6px;
    --bs-alert-padding-x: 15px;
    --bs-alert-padding-y: 12px;
    font-size: 12.5px;
    line-height: 1.55;
    border-radius: 6px 15px;
}
.alert-warning {
    --bs-alert-color: var(--ws-warn-text);
    --bs-alert-bg: var(--ws-warn-bg);
    --bs-alert-border-color: var(--ws-warn-line);
    --bs-alert-link-color: var(--ws-warn-text);
}
.alert-info, .alert-primary, .alert-secondary, .alert-light {
    --bs-alert-color: var(--ws-text-2);
    --bs-alert-bg: var(--ws-tint);
    --bs-alert-border-color: var(--ws-line);
    --bs-alert-link-color: var(--ws-ink);
}
.alert-success {
    --bs-alert-color: var(--ws-green);
    --bs-alert-bg: #2d8a4914;
    --bs-alert-border-color: #2d8a4933;
    --bs-alert-link-color: var(--ws-green);
}
.alert-danger {
    --bs-alert-color: var(--ws-red);
    --bs-alert-bg: #b5474714;
    --bs-alert-border-color: #b5474733;
    --bs-alert-link-color: var(--ws-red);
}
.alert-dark {
    --bs-alert-color: var(--ws-on-dark);
    --bs-alert-bg: var(--ws-feature);
    --bs-alert-border-color: var(--ws-feature);
}
/* investia-system.css assegna color/background/border-color fissi agli alert (non le variabili):
   senza queste proprietà esplicite i token sopra non verrebbero mai applicati, in nessuno dei due temi */
.alert-warning, .alert-info, .alert-primary, .alert-secondary, .alert-light,
.alert-success, .alert-danger, .alert-dark {
    color: var(--bs-alert-color);
    background: var(--bs-alert-bg);
    border-color: var(--bs-alert-border-color);
}

/* --- badge: come .ws-status --- */
.badge {
    --bs-badge-font-size: 9px;
    --bs-badge-font-weight: 750;
    --bs-badge-padding-x: 8px;
    --bs-badge-padding-y: 5px;
    --bs-badge-border-radius: 999px;
    letter-spacing: .06em;
    text-transform: uppercase;
    font-family: var(--ws-font-body);
}
.badge.bg-primary, .badge.text-bg-primary, .badge.bg-dark, .badge.text-bg-dark { background: var(--ws-primary-bg) !important; color: var(--ws-primary-fg) !important; }
.badge.bg-secondary, .badge.text-bg-secondary, .badge.bg-light, .badge.text-bg-light, .badge.bg-info, .badge.text-bg-info { background: var(--ws-tint) !important; color: var(--ws-text-2) !important; }
.badge.bg-success, .badge.text-bg-success { background: #2d8a491a !important; color: var(--ws-green) !important; }
.badge.bg-warning, .badge.text-bg-warning { background: #b47a281a !important; color: var(--ws-amber) !important; }
.badge.bg-danger, .badge.text-bg-danger { background: #b547471a !important; color: var(--ws-red) !important; }

/* --- accordion: ogni voce è un pannello del modello --- */
.accordion {
    --bs-accordion-bg: var(--ws-surface);
    --bs-accordion-color: var(--ws-ink);
    --bs-accordion-border-color: var(--ws-line);
    --bs-accordion-border-radius: 7px;
    --bs-accordion-inner-border-radius: 6px;
    --bs-accordion-btn-padding-x: 24px;
    --bs-accordion-btn-padding-y: 19px;
    --bs-accordion-btn-color: var(--ws-ink);
    --bs-accordion-btn-bg: transparent;
    --bs-accordion-active-color: var(--ws-ink);
    --bs-accordion-active-bg: transparent;
    --bs-accordion-btn-focus-box-shadow: 0 0 0 3px #5977932e;
    --bs-accordion-body-padding-x: 24px;
    --bs-accordion-body-padding-y: 4px 24px 24px;
    display: grid;
    gap: 13px;
}
.accordion-item {
    border: 1px solid var(--ws-line) !important;
    border-radius: var(--ws-radius) !important;
    box-shadow: var(--ws-shadow);
    overflow: hidden;
}
.accordion-button {
    font-family: var(--ws-font-display);
    font-size: 17px;
    font-weight: 520;
    letter-spacing: -.025em;
    gap: 10px;
}
.accordion-button:not(.collapsed) { box-shadow: none; }
.accordion-button .bi, .accordion-button .ws-i { color: var(--ws-icon); font-size: 17px; }
.accordion-body { font-size: 13px; }

/* --- modali --- */
.modal {
    --bs-modal-bg: var(--ws-surface-solid);
    --bs-modal-color: var(--ws-ink);
    --bs-modal-border-color: var(--ws-line);
    --bs-modal-border-radius: 7px;
    --bs-modal-inner-border-radius: 6px;
    --bs-modal-box-shadow: 0 40px 90px #07111d40;
    --bs-modal-header-padding: 20px 24px;
    --bs-modal-padding: 22px 24px;
    --bs-modal-header-border-color: var(--ws-line);
    --bs-modal-footer-border-color: var(--ws-line);
}
.modal-content { border-radius: var(--ws-radius); }
.dropdown-menu, .list-group, .popover { border-radius: 6px 18px; }
.tooltip-inner { border-radius: 5px 12px; }
.modal-title { font-family: var(--ws-font-display); font-weight: 520; letter-spacing: -.03em; font-size: 20px; }
.modal-backdrop { --bs-backdrop-bg: #07111d; --bs-backdrop-opacity: .5; }

/* --- tabelle: come .ws-analysis-table --- */
.table {
    --bs-table-bg: transparent;
    --bs-table-color: var(--ws-ink);
    --bs-table-border-color: var(--ws-line);
    --bs-table-striped-bg: var(--ws-hover);
    --bs-table-hover-bg: var(--ws-hover);
    --bs-table-active-bg: var(--ws-tint);
    font-size: 12.5px;
}
.table > thead > tr > th,
.table > thead > tr > td {
    color: var(--ws-text-4);
    font: 650 9.5px var(--ws-font-display);
    letter-spacing: .08em;
    text-transform: uppercase;
    border-bottom-color: var(--ws-line);
    padding-block: 12px;
    white-space: nowrap;
}
.table > tbody > tr > * { padding-block: 13px; vertical-align: middle; }
.table-responsive { border-radius: 6px 18px; }

/* --- tab: come .ws-tabs --- */
.nav-tabs {
    --bs-nav-tabs-border-color: var(--ws-line);
    --bs-nav-tabs-border-width: 1px;
    --bs-nav-tabs-border-radius: 0;
    --bs-nav-tabs-link-hover-border-color: transparent;
    --bs-nav-tabs-link-active-color: var(--ws-ink);
    --bs-nav-tabs-link-active-bg: transparent;
    --bs-nav-tabs-link-active-border-color: transparent;
    gap: 26px;
    border-bottom: 1px solid var(--ws-line);
}
.nav-tabs .nav-link {
    border: 0;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    padding: 0 2px;
    min-height: 47px;
    color: var(--ws-text-3);
    font-size: 12px;
    font-weight: 700;
    background: none;
}
.nav-tabs .nav-link:hover { color: var(--ws-ink); }
.nav-tabs .nav-link.active,
.nav-tabs .nav-item.show .nav-link { color: var(--ws-ink); border-bottom-color: var(--ws-ink); background: none; }
.nav-pills {
    --bs-nav-pills-border-radius: 5px;
    --bs-nav-pills-link-active-color: var(--ws-primary-fg);
    --bs-nav-pills-link-active-bg: var(--ws-primary-bg);
    gap: 6px;
}
.nav-pills .nav-link { color: var(--ws-text-2); font-size: 12px; font-weight: 700; border-radius: 5px 14px; }

/* --- menu a tendina, liste, avanzamento, paginazione --- */
.dropdown-menu {
    --bs-dropdown-bg: var(--ws-surface-solid);
    --bs-dropdown-color: var(--ws-ink);
    --bs-dropdown-border-color: var(--ws-line);
    --bs-dropdown-border-radius: 6px;
    --bs-dropdown-box-shadow: var(--ws-shadow);
    --bs-dropdown-link-color: var(--ws-ink);
    --bs-dropdown-link-hover-bg: var(--ws-tint);
    --bs-dropdown-link-active-bg: var(--ws-primary-bg);
    --bs-dropdown-link-active-color: var(--ws-primary-fg);
    --bs-dropdown-font-size: 12.5px;
    box-shadow: var(--ws-shadow);
}
.list-group {
    --bs-list-group-bg: var(--ws-surface);
    --bs-list-group-color: var(--ws-ink);
    --bs-list-group-border-color: var(--ws-line);
    --bs-list-group-border-radius: 6px;
    --bs-list-group-action-hover-bg: var(--ws-hover);
    --bs-list-group-active-bg: var(--ws-primary-bg);
    --bs-list-group-active-border-color: var(--ws-primary-bg);
    --bs-list-group-active-color: var(--ws-primary-fg);
}
.progress {
    --bs-progress-bg: var(--ws-track);
    --bs-progress-bar-bg: var(--ws-bar);
    --bs-progress-border-radius: 999px;
    --bs-progress-height: 8px;
}
.pagination {
    --bs-pagination-color: var(--ws-text-2);
    --bs-pagination-bg: var(--ws-surface-soft);
    --bs-pagination-border-color: var(--ws-line);
    --bs-pagination-hover-color: var(--ws-ink);
    --bs-pagination-hover-bg: var(--ws-tint);
    --bs-pagination-active-color: var(--ws-primary-fg);
    --bs-pagination-active-bg: var(--ws-primary-bg);
    --bs-pagination-active-border-color: var(--ws-primary-bg);
    --bs-pagination-font-size: 12px;
}
.spinner-border, .spinner-grow { color: var(--ws-steel); }
.tooltip { --bs-tooltip-bg: var(--ws-feature); --bs-tooltip-font-size: 11px; --bs-tooltip-border-radius: 5px; }
.popover {
    --bs-popover-bg: var(--ws-surface-solid);
    --bs-popover-border-color: var(--ws-line);
    --bs-popover-border-radius: 6px;
    --bs-popover-font-size: 12px;
    --bs-popover-header-bg: transparent;
}

/* --- colori di testo e sfondo di utilità --- */
.text-muted, .text-body-secondary { color: var(--ws-text-3) !important; }
.text-primary { color: var(--ws-ink) !important; }
.text-success { color: var(--ws-green) !important; }
.text-danger { color: var(--ws-red) !important; }
.text-warning { color: var(--ws-amber) !important; }
.text-info { color: var(--ws-steel) !important; }
.bg-light, .bg-body-tertiary { background-color: var(--ws-tint-2) !important; }
.bg-white, .bg-body { background-color: var(--ws-surface-solid) !important; }
.border, .border-top, .border-bottom, .border-start, .border-end { border-color: var(--ws-line) !important; }
.shadow, .shadow-sm { box-shadow: var(--ws-shadow) !important; }
.rounded, .rounded-3, .rounded-4 { border-radius: 6px 18px !important; }
.fw-bold, .fw-semibold { font-weight: 700 !important; }

/* ===== PAGINE · admin e accesso =====
   admin_utenti, admin_stime, admin_portafogli, admin_metriche (.ws-pg-admin),
   impostazioni_lancio (.ws-pg-lancio), login e register (.ws-pg-auth). */

/* --- pagine admin: tabelle DataTables dentro un pannello --- */
.ws-pg-admin > .alert { margin-bottom: 17px; }
.ws-admin-table-panel { padding: 22px 24px; min-width: 0; }
.ws-admin-table-panel .ws-panel-head { align-items: center; margin-bottom: 14px; }
/* il vecchio foglio disegna .table-responsive come un riquadro: dentro
   il pannello farebbe un secondo bordo */
.ws-admin-table-panel .table-responsive {
    border: 0;
    border-radius: 0;
    box-shadow: none;
    background: none;
}
.ws-admin-table-panel .dataTables_wrapper .dataTables_length,
.ws-admin-table-panel .dataTables_wrapper .dataTables_filter { margin-bottom: 12px; }
.ws-admin-table-panel .dataTables_wrapper .dataTables_info,
.ws-admin-table-panel .dataTables_wrapper .dataTables_paginate { margin-top: 12px; }
.ws-admin-table-panel table.dataTable tbody td,
.ws-admin-table-panel .table > tbody > tr > td { white-space: nowrap; }
.ws-admin-table-panel td small { font-size: 11px; }
.ws-admin-table-panel td .ws-status { display: inline-flex; margin-left: 6px; vertical-align: middle; }

/* metriche: sette card nella griglia a quattro del modello */
.ws-admin-metrics .ws-metric-card small { line-height: 1.45; }
.ws-admin-split {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 17px;
    margin-top: 17px;
}
.ws-admin-split > .ws-panel { min-width: 0; }
.ws-admin-split .ws-panel-head { align-items: center; }
.ws-admin-count-table { margin-top: 14px; }
.ws-admin-split .ws-empty-state { min-height: 210px; padding: 24px 12px 8px; }

/* --- impostazioni lancio --- */
.ws-pg-lancio > .alert { max-width: 680px; }
.ws-lancio-form { max-width: 680px; padding: 28px; }
.ws-lancio-form .ws-form-title { margin-bottom: 8px; }
.ws-flag-row.form-check {
    display: flex;
    align-items: flex-start;
    gap: 16px;
    padding: 18px 0;
    margin: 0;
    min-height: 0;
    border-top: 1px solid var(--ws-line);
}
.ws-flag-row .form-check-input {
    float: none;
    flex: none;
    margin: 2px 0 0;
    width: 2.6em;
    height: 1.4em;
    cursor: pointer;
}
.ws-flag-row .form-check-label { display: grid; gap: 4px; cursor: pointer; }
.ws-flag-row .form-check-label strong { font: 520 16px var(--ws-font-display); letter-spacing: -.02em; color: var(--ws-ink); }
.ws-flag-row .form-check-label span { color: var(--ws-text-3); font-size: 12px; line-height: 1.55; }
.ws-lancio-form .ws-form-footer {
    align-items: center;
    flex-wrap: wrap;
    gap: 14px;
    margin-top: 6px;
}
.ws-lancio-stato { margin: 0; color: var(--ws-text-3); font-size: 11.5px; line-height: 1.55; }
.ws-lancio-stato strong { color: var(--ws-ink); }

/* --- accesso: login e register --- */
.ws-pg-auth .ws-auth-brand { display: block; }
.ws-pg-auth .ws-auth-panel img { display: block; }
.ws-auth-form .ws-password { display: block; }
.ws-auth-form .ws-field > span label { margin: 0; font: inherit; color: inherit; cursor: pointer; }
.ws-auth-form .ws-field select { height: 48px; font-size: 14px; }
.ws-auth-form .ws-password i { font-size: 14px; }
.ws-auth-form .ws-form-grid { gap: 14px; }
/* Il JS riscrive className di #auth-feedback ("auth-feedback is-error" ecc.):
   lo stile del modello va quindi dato a .auth-feedback, non a .ws-auth-feedback.
   body.app-login serve a vincere sulle vecchie regole di investia-system.css. */
body.app-login .ws-auth-form .auth-feedback {
    border-radius: 6px 15px;
    padding: 11px 13px;
    font-size: 12.5px;
    line-height: 1.5;
}
body.app-login .ws-auth-form .auth-feedback.is-error {
    color: var(--ws-red);
    background: color-mix(in srgb, var(--ws-red) 8%, transparent);
    border: 1px solid color-mix(in srgb, var(--ws-red) 20%, transparent);
}
body.app-login .ws-auth-form .auth-feedback.is-warning {
    color: var(--ws-warn-text);
    background: var(--ws-warn-bg);
    border: 1px solid var(--ws-warn-line);
}
body.app-login .ws-auth-form .auth-feedback.is-success {
    color: var(--ws-green);
    background: color-mix(in srgb, var(--ws-green) 8%, transparent);
    border: 1px solid color-mix(in srgb, var(--ws-green) 20%, transparent);
}
/* orbita decorativa: un segno grafico neutro al posto del punteggio */
.ws-pg-auth .ws-auth-orbit .ws-i { width: 58px; height: 58px; color: #ffffffd9; stroke-width: 1.4; }
.ws-pg-auth .ws-auth-orbit span { margin-top: 14px; }

@media (max-width: 900px) {
    .ws-admin-split { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
    .ws-admin-table-panel { padding: 18px 16px; }
    .ws-lancio-form { padding: 22px 18px; }
    .ws-flag-row.form-check { gap: 12px; }
}

/* ===== PAGINE · dashboard (index.php) e parti riusabili =====
   .ws-loading-note, .ws-stat-strip, .ws-chart-*, .ws-filter, .ws-empty-compact,
   .ws-trend, .ws-flip sono pensati anche per le altre pagine. */

/* nota di caricamento */
.ws-loading-note {
    display: flex;
    align-items: center;
    gap: 10px;
    color: var(--ws-text-3);
    font-size: 12px;
    margin-bottom: 17px;
}

.ws-pg-dashboard > .alert { margin-bottom: 17px; }

/* striscia di indicatori secondari: sei valori in fila, separati da filetti */
.ws-stat-strip {
    display: grid;
    grid-template-columns: repeat(6, minmax(0, 1fr));
    padding: 0;
    margin-top: 13px;
    overflow: hidden;
}
.ws-stat-strip > div {
    display: grid;
    gap: 6px;
    padding: 17px 20px;
    border-left: 1px solid var(--ws-line);
    min-width: 0;
}
.ws-stat-strip > div:first-child { border-left: 0; }
.ws-stat-strip span {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .1em;
    text-transform: uppercase;
    display: flex;
    align-items: center;
    gap: 7px;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
}
.ws-stat-strip span .ws-i { width: 13px; height: 13px; color: var(--ws-icon); flex: none; }
.ws-stat-strip strong { font: 520 19px var(--ws-font-display); letter-spacing: -.03em; color: var(--ws-ink); }

/* grafici */
.ws-chart-row { margin-top: 4px; }
.ws-chart-row > [class*="col-"] { margin-top: 13px; }
.ws-chart-panel { height: 100%; }
.ws-chart-box { position: relative; height: 260px; margin-top: 16px; }

/* filtro nell'intestazione di un pannello */
.ws-filter {
    display: flex;
    align-items: center;
    gap: 9px;
    width: min(320px, 100%);
    height: 40px;
    padding: 0 12px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 15px;
    background: var(--ws-surface-soft);
    color: var(--ws-text-4);
}
.ws-filter .ws-i { width: 15px; height: 15px; }
.ws-filter input {
    flex: 1;
    min-width: 0;
    border: 0;
    outline: 0;
    background: none;
    color: var(--ws-ink);
    font-size: 12px;
}
.ws-filter:focus-within { border-color: var(--ws-focus); box-shadow: 0 0 0 3px #5977931a; }

/* tabella immobili */
.ws-immobili-panel { margin-top: 17px; }
.ws-immobili-panel .ws-panel-head { align-items: center; margin-bottom: 12px; }
.ws-immobili-table .ws-analysis-table-head,
.ws-immobili-table .ws-analysis-row {
    grid-template-columns: minmax(200px, 1.5fr) minmax(130px, .9fr) minmax(110px, .7fr) 80px minmax(120px, .7fr) 100px 16px;
}
.ws-immobili-table .ws-analysis-row { color: inherit; text-decoration: none; }
.ws-immobili-table .ws-analysis-row:hover { color: inherit; }
.ws-immobili-table .ws-analysis-row:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: -2px; }
.ws-fonte { display: flex; align-items: center; gap: 8px; min-width: 0; }
.ws-fonte .ws-status { white-space: nowrap; }
.ws-fonte .ws-score { width: 34px; height: 34px; flex: none; }
.ws-trend {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 11px;
    font-weight: 700;
    color: var(--ws-text-3);
}
.ws-trend .ws-i { width: 15px; height: 15px; }
.ws-flip { transform: scaleY(-1); }
.ws-analysis-row > strong.ws-positive,
.ws-analysis-row > strong.ws-negative { font-weight: 750; }

/* stato vuoto compatto, dentro un pannello */
.ws-empty-state.ws-empty-compact { min-height: 240px; padding: 26px; }

@media (max-width: 1180px) {
    .ws-stat-strip { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .ws-stat-strip > div:nth-child(4) { border-left: 0; }
    .ws-stat-strip > div:nth-child(n+4) { border-top: 1px solid var(--ws-line); }
    .ws-immobili-table .ws-analysis-table-head,
    .ws-immobili-table .ws-analysis-row { grid-template-columns: minmax(190px, 1.5fr) minmax(120px, .9fr) minmax(100px, .7fr) 70px minmax(110px, .8fr) 16px; }
    .ws-immobili-table .ws-analysis-table-head > span:nth-child(6),
    .ws-immobili-table .ws-trend { display: none; }
}
@media (max-width: 900px) {
    .ws-immobili-table .ws-analysis-row { grid-template-columns: minmax(0, 1fr) minmax(110px, auto) 16px; row-gap: 6px; }
    .ws-immobili-table .ws-analysis-row > strong:nth-of-type(2),
    .ws-immobili-table .ws-analysis-row > strong:nth-of-type(3) { display: none; }
    .ws-immobili-table .ws-fonte { grid-column: 1 / -1; }
    .ws-immobili-panel .ws-panel-head { flex-wrap: wrap; }
    .ws-filter { width: 100%; }
}
@media (max-width: 640px) {
    .ws-stat-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ws-stat-strip > div:nth-child(odd) { border-left: 0; }
    .ws-stat-strip > div:nth-child(4) { border-left: 1px solid var(--ws-line); }
    .ws-stat-strip > div:nth-child(n+3) { border-top: 1px solid var(--ws-line); }
    .ws-chart-box { height: 220px; }
}

/* ===== PAGINE · elenchi (gruppo "liste") =====
   myinvestments.php (.ws-pg-immobili), watchlist.php (.ws-pg-watchlist),
   watch.php (.ws-pg-watch). Riusa .ws-filter, .ws-loading-note,
   .ws-empty-compact da 45-pagine-dashboard.css. */

/* pannello dell'elenco */
.ws-liste-panel { margin-top: 4px; }
.ws-liste-panel .ws-panel-head { align-items: center; margin-bottom: 12px; }

/* nota di caricamento: si vede solo finché il pannello che la precede è d-none
   (il JS esistente toglie d-none al primo render, nessun JS in più) */
.ws-pg-liste .ws-liste-panel:not(.d-none) + .ws-liste-loading { display: none; }

/* con lo stato vuoto l'intestazione delle colonne non serve */
.ws-liste-table:has(.ws-empty-state) > .ws-analysis-table-head { display: none; }

/* colonne proprie di ogni elenco (l'ultima ospita Dettaglio + Cancella).
   Minimi contenuti: a 1181px (sidebar 248, padding area e pannello) restano
   ~807px; somma dei minimi + gap + azioni sotto i 770px anche con l'hover.
   L'azione resta a larghezza fissa: l'intestazione è una griglia a parte e
   con "auto" non resterebbe allineata alle righe. */
.ws-liste-immobili > .ws-analysis-table-head,
.ws-liste-immobili .ws-analysis-row {
    grid-template-columns: minmax(150px, 1.6fr) minmax(80px, .8fr) minmax(80px, .8fr) minmax(90px, .9fr) minmax(90px, .9fr) 196px;
}
.ws-liste-watchlist > .ws-analysis-table-head,
.ws-liste-watchlist .ws-analysis-row {
    grid-template-columns: minmax(160px, 1.8fr) minmax(90px, .9fr) minmax(90px, .9fr) 70px 196px;
}
.ws-liste-watch > .ws-analysis-table-head,
.ws-liste-watch .ws-analysis-row {
    grid-template-columns: minmax(150px, 1.6fr) minmax(95px, .9fr) minmax(85px, .8fr) minmax(80px, .7fr) 64px 196px;
}

/* cella dell'immobile: è il link al dettaglio, con la foto al posto dell'icona */
.ws-liste-table .ws-property-cell { color: inherit; text-decoration: none; }
.ws-liste-table .ws-property-cell:hover b { color: var(--ws-steel); }
.ws-liste-table .ws-property-cell:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 3px; border-radius: 5px 13px; }
.ws-liste-table .ws-property-cell b { overflow: hidden; color: var(--ws-ink); transition: color .18s; }
.ws-liste-table .ws-property-cell > i.ws-thumb {
    flex: none;
    width: 56px;
    height: 44px;
    overflow: hidden;
    padding: 0;
}
.ws-liste-table .ws-thumb img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* valori */
.ws-liste-table .ws-analysis-row > strong { min-width: 0; }
.ws-liste-table .ws-analysis-row > strong.ws-positive,
.ws-liste-table .ws-analysis-row > strong.ws-negative { font-weight: 750; }
.ws-liste-table .ws-cell-label { display: none; }
.ws-liste-table .ws-c-fonte,
.ws-liste-table .ws-c-indicatore { display: flex; min-width: 0; }
.ws-liste-table .ws-c-fonte .ws-status,
.ws-liste-table .ws-c-indicatore .ws-status { white-space: nowrap; max-width: 100%; overflow: hidden; text-overflow: ellipsis; }
.ws-liste-table .ws-c-score { display: flex; align-items: center; }
.ws-liste-table .ws-c-score .ws-score { width: 36px; height: 36px; flex: none; }
.ws-score-none { color: var(--ws-text-4); font: 650 12px var(--ws-font-display); }

/* azioni della riga: fuori dal link, mai un <button> dentro un <a> */
.ws-row-actions {
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 6px;
    min-width: 0;
}
.ws-row-actions .ws-button.ws-compact { min-height: 36px; padding: 0 13px; font-size: 11px; }
.ws-row-actions .ws-danger-link { margin: 0; padding: 8px 6px; border-radius: 5px 13px; white-space: nowrap; }
.ws-row-actions .ws-danger-link:hover { background: var(--ws-tint); }
.ws-row-actions .ws-danger-link:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 1px; }

/* sotto 1180px sei colonne non stanno nell'area contenuti (a 901px restano
   ~570px): l'intestazione delle colonne sparisce e ogni riga diventa una
   scheda a due colonne con le etichette visibili */
@media (max-width: 1180px) {
    .ws-liste-table > .ws-analysis-table-head { display: none; }
    .ws-liste-table.ws-analysis-table .ws-analysis-row {
        grid-template-columns: minmax(0, 1fr) auto;
        align-items: center;
        row-gap: 10px;
        padding: 14px 0;
    }
    .ws-liste-table.ws-analysis-table .ws-analysis-row:hover { padding-inline: 0; }
    .ws-liste-table.ws-analysis-table .ws-analysis-row > * { display: flex; }
    .ws-liste-table.ws-analysis-table .ws-analysis-row > strong { display: grid; }
    .ws-liste-table .ws-analysis-row > .ws-property-cell { grid-column: 1 / -1; }
    .ws-liste-table .ws-cell-label { display: block; }
    .ws-liste-table .ws-analysis-row > .ws-row-actions { grid-column: 1 / -1; justify-content: flex-start; }
    .ws-liste-immobili .ws-analysis-row > .ws-c-acquisto { display: none; }
}

@media (max-width: 900px) {
    .ws-liste-panel .ws-panel-head { flex-wrap: wrap; }
}

@media (max-width: 640px) {
    .ws-liste-table .ws-property-cell > i.ws-thumb { width: 48px; height: 40px; }
}

/* ===== PAGINE · opportunità (gruppo opportunita_dettaglio) =====
   opportunity.php            -> .ws-pg-opp-elenco (elenco w=0, tabella del modello)
   opportunita.php,
   immobile_opportunita.php   -> .ws-pg-opp (scheda: hero + metriche + tab Bootstrap .ws-tabs)
   Riusa i componenti del modello (.ws-detail-hero, .ws-tabs, .ws-poi-panel, .ws-strategy-strip...)
   e le classi comuni di 45-pagine-dashboard.css (.ws-chart-*, .ws-filter, .ws-empty-compact,
   .ws-loading-note, .ws-flip). Qui solo le estensioni, tutte con prefisso .ws-pg-opp-. */

/* ---------- ELENCO (opportunity.php) ---------- */
.ws-pg-opp-list .ws-panel-head { align-items: center; margin-bottom: 12px; }
.ws-pg-opp-table .ws-analysis-table-head,
.ws-pg-opp-table .ws-analysis-row {
    /* minimi 210+120+130+42+220 + 4 spazi = 778px: a 1181px (sidebar 248) lo spazio utile
       è ~805px, ~788px con una barra di scorrimento classica */
    grid-template-columns: minmax(210px, 1.5fr) minmax(120px, .8fr) minmax(130px, .8fr) 42px minmax(220px, auto);
}
.ws-pg-opp-table .ws-analysis-row { color: inherit; }
.ws-pg-opp-table .ws-property-cell > .ws-pg-opp-thumb {
    width: 52px;
    height: 52px;
    flex: none;
    overflow: hidden;
    padding: 0;
}
.ws-pg-opp-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ws-pg-opp-table .ws-property-cell b { font-size: 12px; }
.ws-pg-opp-actions {
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    gap: 7px;
}
.ws-pg-opp-actions .btn { white-space: nowrap; }

/* ---------- SCHEDA (opportunita.php, immobile_opportunita.php) ---------- */
.ws-pg-opp > .alert { margin-bottom: 15px; }

/* hero: le opportunità non hanno una foto propria -> render generico del modello, come la scheda immobile */
.ws-pg-opp-hero { min-height: 0; }
.ws-pg-opp-hero .ws-detail-visual { min-height: 290px; }
.ws-pg-opp-hero .ws-analysis-label { text-transform: uppercase; }
.ws-pg-opp-hero .ws-detail-title h1 { overflow-wrap: anywhere; }
.ws-pg-opp-hero .ws-value-score { margin-top: 28px; gap: 16px; }
.ws-pg-opp-verdict {
    display: grid;
    gap: 5px;
    margin-top: auto;
    padding-top: 15px;
    border-top: 1px solid var(--ws-line);
}
.ws-pg-opp-verdict small {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .09em;
}
.ws-pg-opp-verdict b { font: 520 17px var(--ws-font-display); letter-spacing: -.02em; color: var(--ws-ink); }

/* intestazione interna ai tab (titolo + azioni statiche) */
.ws-pg-opp-tabhead {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: flex-end;
    gap: 14px;
    margin-bottom: 15px;
}
.ws-pg-opp-tabhead h2 { font: 520 22px var(--ws-font-display); letter-spacing: -.035em; margin: 5px 0 0; }
.ws-pg-opp-edit { display: flex; flex-wrap: wrap; gap: 8px; }
.ws-pg-opp #update-msg .alert { margin-bottom: 15px; }

/* Sintesi */
.ws-pg-opp-sintesi { align-items: start; }
.ws-pg-opp-sintesi:has(> #box-stima:empty) { grid-template-columns: minmax(0, 1fr); }
.ws-pg-opp-sintesi > #box-stima:empty { display: none; }

/* mappa Leaflet: altezza esplicita (necessaria all'inizializzazione) */
.ws-pg-opp #map-container {
    margin: 18px 0 0;
    border: 0;
    border-radius: 0;
    box-shadow: none;
}
.ws-pg-opp #map {
    height: 400px;
    border: 1px solid var(--ws-line);
    border-radius: 5px 16px;
    box-shadow: none;
    overflow: hidden;
}
.ws-pg-opp-zone .ws-panel-head { align-items: center; flex-wrap: wrap; }
.ws-pg-opp #zona-box:not(:empty) { margin-top: 16px; }
.ws-pg-opp #zona-box .alert { margin: 0; }
.ws-pg-opp-zona-head {
    display: flex;
    flex-wrap: wrap;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
}
.ws-pg-opp-zona-head > div { display: grid; gap: 4px; min-width: 0; }
.ws-pg-opp-zona-head small {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .09em;
}
.ws-pg-opp-zona-head strong { font: 520 22px var(--ws-font-display); letter-spacing: -.03em; color: var(--ws-ink); }
.ws-pg-opp-zona-head span { color: var(--ws-muted); font-size: 11px; }
.ws-pg-opp-zona-head span:empty { display: none; }
.ws-pg-opp-zona-head .ws-button .ws-i { width: 14px; }
.ws-pg-opp-poi {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(190px, 1fr));
    gap: 6px 22px;
    padding-top: 14px;
}
.ws-pg-opp-poi h3 {
    margin: 10px 0 0;
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .1em;
    text-transform: uppercase;
}
.ws-pg-opp .ws-pg-opp-poi ul { margin: 6px 0 0; }
.ws-pg-opp .ws-pg-opp-poi li { grid-template-columns: 16px minmax(0, 1fr) auto; min-height: 38px; }
.ws-pg-opp .ws-pg-opp-poi li span { min-width: 0; }
.ws-pg-opp .ws-pg-opp-poi li b {
    font-size: 11px;
    font-weight: 650;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ws-pg-opp .ws-pg-opp-poi li strong { font-size: 10px; color: var(--ws-text-3); }
.ws-pg-opp-nodata,
.ws-pg-opp-more { display: block; margin-top: 7px; color: var(--ws-text-4); font-size: 10px; }
.ws-pg-opp-more { font-weight: 700; color: var(--ws-text-3); }

/* box "Ultima stima AI" (immobile_opportunita.php) */
.ws-pg-opp-stima-valore { display: grid; gap: 5px; margin: 22px 0 6px; }
.ws-pg-opp-stima-valore small {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .09em;
}
.ws-pg-opp-stima-valore strong { font: 520 36px var(--ws-font-display); letter-spacing: -.05em; color: var(--ws-ink); }
.ws-pg-opp-stima-valore span { color: var(--ws-muted); font-size: 11px; }
.ws-pg-opp-affitti { margin-top: 12px; }
.ws-pg-opp-kv > .ws-pg-opp-attuale {
    padding-left: 13px;
    background: var(--ws-tint);
    border-radius: 5px 13px;
    border-top-color: transparent;
}
.ws-pg-opp-trend { display: inline-flex; align-items: center; gap: 6px; }
.ws-pg-opp-trend .ws-i { width: 17px; height: 17px; }

/* Mercato */
.ws-pg-opp-market { align-items: stretch; }
.ws-pg-opp-market > #insights-mercato > .ws-panel { height: 100%; }
.ws-pg-opp-market .ws-chart-panel .ws-panel-head { flex-wrap: wrap; align-items: center; }
.ws-pg-opp-after { margin-top: 15px; }
.ws-pg-opp .ws-chart-box > .ws-empty-state { min-height: 100%; padding: 16px; }

/* blocchi degli insight */
.ws-pg-opp-insight > h2 { font: 520 24px var(--ws-font-display); letter-spacing: -.035em; margin: 6px 0 18px; }
.ws-pg-opp-stack { display: grid; gap: 15px; }

/* griglia etichetta / valore */
.ws-pg-opp-kv {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    column-gap: 18px;
}
.ws-pg-opp-kv.ws-pg-opp-kv-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.ws-pg-opp-kv.ws-pg-opp-kv-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.ws-pg-opp-kv > div {
    display: grid;
    align-content: start;
    gap: 5px;
    min-width: 0;
    padding: 14px 0;
    border-top: 1px solid var(--ws-line);
}
.ws-pg-opp-kv span { color: var(--ws-muted); font-size: 10px; }
.ws-pg-opp-kv strong { font: 520 20px var(--ws-font-display); letter-spacing: -.03em; color: var(--ws-ink); overflow-wrap: anywhere; }
.ws-pg-opp-kv small { color: var(--ws-text-4); font-size: 10px; }

/* decisione AI (solo opportunita.php) */
.ws-pg-opp-decision {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    margin-top: 16px;
    padding: 14px 16px;
    border-radius: 6px 15px;
    background: var(--ws-tint);
}
.ws-pg-opp-decision span {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .1em;
    text-transform: uppercase;
}
.ws-pg-opp-decision b { font: 600 18px var(--ws-font-display); letter-spacing: .02em; }
.ws-pg-opp-buy { color: var(--ws-green); }
.ws-pg-opp-sell { color: var(--ws-red); }
.ws-pg-opp-hold { color: var(--ws-amber); }

/* scenari di ristrutturazione (visibili solo con il flag acceso) */
.ws-pg-opp-scenari { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 13px; }
.ws-pg-opp-scenari > article { padding: 18px 20px 10px; }
.ws-pg-opp-scenari h3 { font: 520 17px var(--ws-font-display); margin: 0 0 10px; }

/* Affitto: striscia del modello con quattro celle */
.ws-pg-opp-affitto { grid-template-columns: 1.3fr 1fr 1fr 1fr; }
.ws-pg-opp-affitto strong { font: 520 20px var(--ws-font-display); letter-spacing: -.02em; }

/* Dati */
.ws-pg-opp-fields { align-items: end; }
.ws-pg-opp-fields .ws-pg-opp-span-2 { grid-column: span 2; }
.ws-pg-opp-fields .ws-field > span,
.ws-pg-opp-note > span { color: var(--ws-text-2); }
.ws-pg-opp-note { display: grid; }
.ws-pg-opp-note textarea { border-radius: 6px 13px; }
.ws-pg-opp-hint {
    display: flex;
    align-items: center;
    gap: 7px;
    margin: 12px 0 0;
    color: var(--ws-muted);
    font-size: 11px;
}
.ws-pg-opp-hint .ws-i { width: 14px; height: 14px; flex: none; color: var(--ws-icon); }

/* modal AI Context */
.ws-pg-opp-aicontext p { font-size: 13px; color: var(--ws-text-2); }

@media (max-width: 1180px) {
    /* fra 901 e 1180 la sidebar resta (220px): le azioni vanno a capo su una riga intera,
       la griglia scende a 4 colonne (200+110+110+42 + 3 spazi = 504px, ~554px disponibili a 901) */
    .ws-pg-opp-table .ws-analysis-table-head,
    .ws-pg-opp-table .ws-analysis-row {
        grid-template-columns: minmax(200px, 1.4fr) minmax(110px, .8fr) minmax(110px, .8fr) 42px;
    }
    .ws-pg-opp-table .ws-analysis-table-head > span:last-child { display: none; }
    .ws-pg-opp-table .ws-analysis-row { row-gap: 8px; padding-bottom: 14px; }
    .ws-pg-opp-actions { grid-column: 1 / -1; justify-content: flex-start; }
    .ws-pg-opp-kv.ws-pg-opp-kv-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
    .ws-pg-opp-table .ws-analysis-row { grid-template-columns: minmax(0, 1fr) minmax(100px, auto) 42px; }
    .ws-pg-opp-table .ws-analysis-row > strong:nth-of-type(1) { display: grid; }
    .ws-pg-opp-table .ws-analysis-row > strong:nth-of-type(2) { display: none; }
    .ws-pg-opp-list .ws-panel-head { flex-wrap: wrap; }

    .ws-pg-opp-hero .ws-detail-visual { min-height: 190px; }
    .ws-pg-opp-kv.ws-pg-opp-kv-3 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ws-pg-opp-scenari { grid-template-columns: 1fr; }
    .ws-pg-opp-affitto { grid-template-columns: repeat(3, minmax(0, 1fr)); }
    .ws-pg-opp-affitto > div:first-child { grid-column: 1 / -1; }
    .ws-pg-opp-affitto > div:nth-child(2) { border-left: 0; padding-left: 0; }
    .ws-pg-opp #map { height: 340px; }
}
@media (max-width: 640px) {
    .ws-pg-opp-table .ws-analysis-row { grid-template-columns: minmax(0, 1fr) auto 40px; }
    .ws-pg-opp-table .ws-property-cell > .ws-pg-opp-thumb { width: 44px; height: 44px; }
    .ws-pg-opp-actions .btn { flex: 1 1 140px; }

    .ws-pg-opp-fields .ws-pg-opp-span-2 { grid-column: auto; }
    .ws-pg-opp-kv,
    .ws-pg-opp-kv.ws-pg-opp-kv-3,
    .ws-pg-opp-kv.ws-pg-opp-kv-4 { grid-template-columns: minmax(0, 1fr); }
    .ws-pg-opp-affitto { grid-template-columns: 1fr; }
    .ws-pg-opp-hero .ws-value-score { flex-wrap: wrap; }
    .ws-pg-opp-stima-valore strong { font-size: 30px; }
    .ws-pg-opp-edit,
    .ws-pg-opp-edit .ws-button { width: 100%; }
    .ws-pg-opp #map { height: 300px; }
}

/* ===== PAGINE · inserimento opportunità (insert_opportunity.php, insert_opportunita_link.php) =====
   Wizard a 3 passi con il comportamento condiviso data-ws-wizard (CONTRATTO §7a).
   Tutto sotto .ws-pg-opp-ins: non ristila globalmente né Bootstrap né i componenti. */

/* i passi e i pulsanti commutati dal helper usano l'attributo hidden:
   .ws-form-section e .ws-button impostano un display che lo annullerebbe */
.ws-pg-opp-ins [data-ws-step][hidden],
.ws-pg-opp-ins [data-ws-next][hidden],
.ws-pg-opp-ins [data-ws-submit][hidden] { display: none !important; }

/* percorso: i pulsanti non ereditano il colore del testo */
.ws-pg-opp-ins .ws-stepper > button { color: var(--ws-ink); cursor: pointer; }
.ws-pg-opp-ins .ws-stepper > button:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: -2px; }
.ws-pg-opp-ins .ws-button.ws-secondary { color: var(--ws-ink); }
.ws-pg-opp-ins .ws-button:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 2px; }

/* campi: etichetta dentro lo span per i campi select2 (div.ws-field) */
.ws-pg-opp-ins .ws-field > span label {
    margin: 0;
    font: inherit;
    color: inherit;
    cursor: pointer;
}
.ws-pg-opp-ins .ws-field .select2-container { width: 100% !important; }
.ws-pg-opp-ins .ws-field textarea.form-control { font-size: 12px; font-weight: 500; }
.ws-pg-opp-ins .ws-field-help { color: var(--ws-text-4); font-size: 10px; font-weight: 500; line-height: 1.5; }
.ws-pg-opp-ins .ws-field input[type="number"] { font-variant-numeric: tabular-nums; }

/* badge del civico inserito dal JS dopo #civico (dentro la label, sotto il campo) */
.ws-pg-opp-ins #civicoBadge { font-size: 10px; font-weight: 750; margin-left: 0 !important; }

/* importazione da screenshot / link */
.ws-pg-opp-ins .ws-opp-accordion .accordion-button { font-size: 15px; }
.ws-pg-opp-ins .ws-opp-accordion .accordion-button .ws-i { width: 17px; height: 17px; color: var(--ws-icon); flex: none; }
.ws-pg-opp-ins .ws-import-card {
    display: grid;
    align-content: start;
    gap: 12px;
    min-width: 0;
    padding: 16px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 15px;
    background: var(--ws-tint);
}
.ws-pg-opp-ins .ws-import-head { display: flex; align-items: center; gap: 11px; min-width: 0; }
.ws-pg-opp-ins .ws-import-head > i {
    width: 34px;
    height: 34px;
    flex: none;
    display: grid;
    place-items: center;
    border-radius: 5px 13px;
    background: var(--ws-surface-solid);
    border: 1px solid var(--ws-line);
    color: var(--ws-icon);
}
.ws-pg-opp-ins .ws-import-head > i .ws-i { width: 16px; height: 16px; }
.ws-pg-opp-ins .ws-import-head > span { display: grid; gap: 2px; min-width: 0; }
.ws-pg-opp-ins .ws-import-head strong { font-size: 12px; color: var(--ws-ink); }
.ws-pg-opp-ins .ws-import-head small { font-size: 10px; color: var(--ws-text-4); }
.ws-pg-opp-ins .ws-import-card .ws-button { justify-self: start; }
.ws-pg-opp-ins .ws-import-link { display: flex; gap: 8px; }
.ws-pg-opp-ins .ws-import-link .form-control { flex: 1; min-width: 0; }
.ws-pg-opp-ins .ws-dropzone {
    display: grid;
    place-items: center;
    gap: 8px;
    min-height: 104px;
    padding: 18px 14px;
    border: 1.5px dashed var(--ws-line-strong);
    border-radius: 6px 15px;
    background: var(--ws-surface-solid);
    color: var(--ws-text-3);
    font-size: 12px;
    font-weight: 650;
    text-align: center;
    cursor: pointer;
    transition: border-color .18s, color .18s;
}
.ws-pg-opp-ins .ws-dropzone .ws-i { width: 22px; height: 22px; color: var(--ws-icon); }
.ws-pg-opp-ins .ws-dropzone:hover { border-color: var(--ws-focus); color: var(--ws-ink); }

/* posizione: pulsanti e badge #positionBadge (inserito dal JS dopo #confirmPosition) */
.ws-pg-opp-ins .ws-locate-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.ws-pg-opp-ins .ws-locate-row .badge { margin-left: 0 !important; }

/* mappa: investia-system.css mette bordo e ombra sia su #map sia su #map-container */
.ws-pg-opp-ins #map-container { border: 0; border-radius: 0; box-shadow: none; }
.ws-pg-opp-ins #map {
    border: 1px solid var(--ws-line);
    border-radius: 5px 16px;
    box-shadow: none;
    overflow: hidden;
}
.ws-pg-opp-ins #zona-box:empty { display: none; }

/* blocchi nascosti dei campi catasto/finanza: restano nel form, invisibili */
.ws-pg-opp-ins .ws-form-section > .card.d-none { margin: 0; }

/* messaggi scritti dal JS (validazione, salvataggio, import, stima) */
.ws-pg-opp-ins .ws-opp-messaggio:not(:empty) { margin-top: 24px; }
.ws-pg-opp-ins .ws-opp-messaggio .alert { margin: 0; font-size: 12px; line-height: 1.6; }
.ws-pg-opp-ins .ws-opp-messaggio .alert hr { margin: 10px 0; border-color: currentColor; opacity: .18; }
.ws-pg-opp-ins .ws-opp-messaggio .alert b { font-family: var(--ws-font-display); font-weight: 650; }
/* trend "Stabile" della stima: il ponte copre text-success/danger/warning, non text-secondary */
.ws-pg-opp-ins .ws-opp-messaggio .text-secondary { color: var(--ws-text-3) !important; }

/* piè del form: con un solo pulsante visibile a destra resta a destra */
.ws-pg-opp-ins .ws-form-footer { gap: 10px; flex-wrap: wrap; }
.ws-pg-opp-ins .ws-form-footer [data-ws-prev]:disabled { opacity: .4; cursor: default; }

@media (max-width: 640px) {
    .ws-pg-opp-ins #map { height: 300px !important; }
    .ws-pg-opp-ins .ws-import-link { flex-direction: column; }
    .ws-pg-opp-ins .ws-import-card .ws-button { justify-self: stretch; }
    .ws-pg-opp-ins .ws-form-footer .ws-button { flex: 1 1 auto; }
}

/* ===== PAGINE · risultato (immobile.php) =====
   Scheda di dettaglio di un immobile: hero, metriche, tab Sintesi · Mercato ·
   Finanza · Affitto · Dati. Tutto sotto .ws-pg-immobile.
   Riusa le classi condivise di 45-pagine-dashboard.css (.ws-loading-note,
   .ws-chart-panel, .ws-chart-box) senza ridefinirle. */

/* ---------- hero ---------- */
.ws-pg-immobile .ws-detail-visual img { transition: opacity .2s; }
/* foto di copertina vera: riempie il riquadro invece di stare "appoggiata" come il 3D */
.ws-pg-immobile .ws-detail-visual img.ws-hero-cover {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    max-height: none;
    object-fit: cover;
    filter: none;
}
.ws-pg-immobile .ws-hero-fonte {
    position: absolute;
    top: 16px;
    right: 16px;
    background: var(--ws-chip-bg);
    -webkit-backdrop-filter: blur(12px);
    backdrop-filter: blur(12px);
    max-width: calc(100% - 32px);
}

/* la colonna di destra è una griglia: #summary-card e #box-stima sono
   riscritti dal JS con .html() e qui "spariscono" (display:contents),
   così i loro figli si collocano nelle aree della griglia */
.ws-pg-immobile .ws-detail-copy {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    grid-template-areas:
        "crumb   crumb"
        "title   edit"
        "value   score"
        "track   track"
        "note    note"
        "actions actions";
    grid-template-rows: auto auto auto auto auto 1fr;
    column-gap: 22px;
    align-content: start;
}
.ws-pg-immobile .ws-summary-slot,
.ws-pg-immobile .ws-stima-slot { display: contents; }

.ws-pg-immobile .ws-detail-breadcrumb { grid-area: crumb; min-width: 0; }
.ws-pg-immobile .ws-detail-breadcrumb a { text-decoration: none; }
.ws-pg-immobile .ws-detail-breadcrumb a:hover { text-decoration: underline; }
.ws-pg-immobile .ws-detail-breadcrumb > span {
    min-width: 0;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}

.ws-pg-immobile .ws-hero-title { grid-area: title; min-width: 0; }
.ws-pg-immobile .ws-hero-title h1 { overflow-wrap: anywhere; }
.ws-pg-immobile .ws-hero-title p { flex-wrap: wrap; }

.ws-pg-immobile .ws-hero-edit {
    grid-area: edit;
    display: flex;
    flex-wrap: wrap;
    justify-content: flex-end;
    align-self: start;
    gap: 8px;
}

/* valore medio stimato (stessa tipografia di .ws-value-score del modello) */
.ws-pg-immobile .ws-hero-value {
    grid-area: value;
    display: grid;
    gap: 5px;
    align-content: center;
    margin: 32px 0 13px;
    min-width: 0;
}
.ws-pg-immobile .ws-hero-value small {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .09em;
}
.ws-pg-immobile .ws-hero-value strong {
    font: 520 38px var(--ws-font-display);
    letter-spacing: -.05em;
    color: var(--ws-ink);
    line-height: 1.05;
}
.ws-pg-immobile .ws-hero-value span { color: var(--ws-muted); font-size: 10px; line-height: 1.5; }

/* anello del punteggio su fondo chiaro */
.ws-pg-immobile .ws-hero-score {
    grid-area: score;
    display: flex;
    align-items: center;
    gap: 14px;
    margin: 32px 0 13px;
    max-width: 280px;
}
.ws-pg-immobile .ws-hero-score .ws-score.ws-large {
    flex: none;
    background: conic-gradient(var(--ws-bar) var(--ws-score), var(--ws-track) 0);
}
.ws-pg-immobile .ws-hero-score .ws-score.ws-large:after { background: var(--ws-surface-solid); }
.ws-pg-immobile .ws-hero-score .ws-score.ws-large b { color: var(--ws-ink); }
.ws-pg-immobile .ws-hero-score .ws-score.ws-large small { color: var(--ws-text-3); }
.ws-pg-immobile .ws-hero-score-testo { display: grid; gap: 4px; min-width: 0; }
.ws-pg-immobile .ws-hero-score-testo small {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .09em;
}
.ws-pg-immobile .ws-hero-score-testo em {
    color: var(--ws-text-2);
    font-size: 11px;
    font-style: normal;
    font-weight: 650;
    line-height: 1.4;
}

/* posizione del valore medio fra minimo e massimo: tutta la barra = intervallo */
.ws-pg-immobile .ws-value-track { grid-area: track; margin-bottom: 22px; }
.ws-pg-immobile .ws-value-track span { left: 0; width: 100%; }
.ws-pg-immobile .ws-value-track i { transform: translateX(-50%); }

.ws-pg-immobile .ws-hero-note {
    grid-area: note;
    display: flex;
    align-items: center;
    gap: 7px;
    margin: 0 0 16px;
    color: var(--ws-amber);
    font-size: 11px;
    font-weight: 650;
}
.ws-pg-immobile .ws-hero-note .ws-i { width: 14px; height: 14px; flex: none; }

.ws-pg-immobile .ws-detail-actions { grid-area: actions; align-self: end; margin-top: 8px; }

/* esiti di salvataggio e upload */
.ws-pg-immobile .ws-esito:not(:empty) { margin-top: 15px; }
.ws-pg-immobile .ws-esito .alert { margin-bottom: 0; }

/* ---------- tab ---------- */
.ws-pg-immobile .tab-pane > * + * { margin-top: 15px; }

/* ---------- Sintesi ---------- */
.ws-pg-immobile .ws-signal-summary .ws-panel-head h2 {
    font: 520 24px/1.15 var(--ws-font-display);
    letter-spacing: -.04em;
    margin: 6px 0 0;
}
.ws-pg-immobile .ws-signal-testo {
    margin-top: 18px;
    color: var(--ws-text-2);
    font-size: 12px;
    line-height: 1.7;
}
.ws-pg-immobile .ws-signal-testo p { margin: 0 0 11px; }
.ws-pg-immobile .ws-signal-testo p:last-child { margin-bottom: 0; }
.ws-pg-immobile .ws-signal-testo strong { color: var(--ws-ink); }
.ws-pg-immobile .ws-signal-summary .ws-factor-grid { margin-top: 22px; }
.ws-pg-immobile .ws-signal-summary .ws-factor-grid em { font-weight: 700; color: var(--ws-ink); }
.ws-pg-immobile #signal-sintesi > .ws-loading-note { margin: 18px 0 0; }

/* pannello mappa: #map al posto dell'iframe del modello, altezza da CSS
   (Leaflet la misura alla creazione) */
.ws-pg-immobile .ws-poi-panel .ws-panel-head { align-items: center; flex-wrap: wrap; }
.ws-pg-immobile .ws-poi-panel #map {
    height: 300px;
    margin: 18px 0 0;
    border: 1px solid var(--ws-line);
    border-radius: 5px 16px;
    box-shadow: none;
    z-index: 0;
}
.ws-pg-immobile #zona-box:not(:empty) { margin-top: 16px; }
.ws-pg-immobile #zona-box .alert { margin-bottom: 0; }
.ws-pg-immobile #zona-box .ws-loading-note { margin-bottom: 0; }
.ws-pg-immobile .ws-zona-head {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 12px;
    margin-bottom: 14px;
}
.ws-pg-immobile .ws-zona-head > div { display: grid; gap: 3px; min-width: 0; }
.ws-pg-immobile .ws-zona-head b { font-size: 12px; }
.ws-pg-immobile .ws-zona-head small { color: var(--ws-muted); font-size: 10px; }
.ws-pg-immobile .ws-zona-head small:empty { display: none; }
.ws-pg-immobile .ws-zona-head .ws-button { flex: none; }
.ws-pg-immobile .ws-zona-head .ws-button[aria-expanded="true"] .ws-i { transform: rotate(180deg); }
.ws-pg-immobile .ws-poi-panel .ws-poi-counts { grid-template-columns: repeat(3, minmax(0, 1fr)); row-gap: 12px; }
.ws-pg-immobile .ws-poi-gruppi { display: grid; gap: 14px; padding-top: 16px; }
.ws-pg-immobile .ws-poi-gruppi h3 {
    margin: 0;
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .1em;
    text-transform: uppercase;
}
.ws-pg-immobile .ws-poi-gruppi ul { margin-top: 8px; }
.ws-pg-immobile .ws-poi-gruppi li { grid-template-columns: 16px minmax(0, 1fr) auto; }
.ws-pg-immobile .ws-poi-gruppi li b {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
    font-size: 10px;
}
.ws-pg-immobile .ws-poi-gruppi li strong { font-size: 10px; }
.ws-pg-immobile .ws-poi-vuoto { margin: 6px 0 0; color: var(--ws-text-4); font-size: 10px; }
.ws-pg-immobile .ws-poi-extra { margin-top: 8px; }

/* ---------- Mercato / Affitto: grafici ---------- */
.ws-pg-immobile .ws-chart-panel .ws-panel-head { align-items: center; flex-wrap: wrap; }
.ws-pg-immobile .ws-chart-box.ws-chart-tall { height: 300px; }
.ws-pg-immobile .ws-chart-panel > .alert { margin: 16px 0 0; }
.ws-pg-immobile .ws-chart-note {
    margin: 16px 0 0;
    padding-top: 14px;
    border-top: 1px solid var(--ws-line);
    color: var(--ws-muted);
    font-size: 10px;
    line-height: 1.6;
}
.ws-pg-immobile .ws-chart-note strong { color: var(--ws-text-2); }

.ws-pg-immobile .ws-market-layout > .ws-panel { min-height: 0; }
.ws-pg-immobile .ws-stima-panel h2 {
    font: 520 22px var(--ws-font-display);
    letter-spacing: -.035em;
    margin: 6px 0 18px;
}
.ws-pg-immobile .ws-stima-panel .alert { margin: 14px 0; }
.ws-pg-immobile .ws-stima-panel dd { text-align: right; }

/* ---------- blocchi di analisi spostati nei tab (voci di accordion aperte) ---------- */
.ws-pg-immobile .ws-insight-slot:empty { display: none; }
.ws-pg-immobile .ws-insight-slot > .alert { margin-bottom: 0; }
.ws-pg-immobile .ws-insight-grid {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 10px;
}
.ws-pg-immobile .ws-insight-grid > div {
    display: grid;
    gap: 6px;
    padding: 14px 16px;
    border: 1px solid var(--ws-line);
    border-radius: 5px 14px;
    background: var(--ws-surface-soft);
    min-width: 0;
}
.ws-pg-immobile .ws-insight-grid span {
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .1em;
    text-transform: uppercase;
}
.ws-pg-immobile .ws-insight-grid strong {
    color: var(--ws-ink);
    font: 520 20px var(--ws-font-display);
    letter-spacing: -.03em;
}
.ws-pg-immobile .ws-finance-score + .ws-finance-list { margin-top: 4px; }
.ws-pg-immobile .accordion-body .ws-finance-score { margin-top: 4px; }

/* scenari di ristrutturazione (visibili solo con il flag attivo) */
.ws-pg-immobile .ws-scenario-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(190px, 1fr));
    gap: 10px;
}
.ws-pg-immobile .ws-scenario-grid > article { padding: 16px 18px; box-shadow: none; }
.ws-pg-immobile .ws-scenario-grid h3 {
    margin: 0 0 8px;
    font: 520 17px var(--ws-font-display);
    letter-spacing: -.02em;
}

/* ---------- Finanza ---------- */
.ws-pg-immobile .ws-finance-layout > .ws-panel { min-height: 0; }
.ws-pg-immobile .ws-finance-side { display: grid; gap: 15px; align-content: start; min-width: 0; }
.ws-pg-immobile .ws-finance-side .accordion { gap: 15px; }
.ws-pg-immobile .ws-campi { margin-top: 20px; }
.ws-pg-immobile .ws-kpi-live { margin-top: 22px; }
.ws-pg-immobile .ws-kpi-live dd { font-size: 13px; }
.ws-pg-immobile .ws-help {
    display: flex;
    align-items: flex-start;
    gap: 7px;
    margin: 14px 0 0;
    color: var(--ws-text-4);
    font-size: 10px;
    line-height: 1.55;
}
.ws-pg-immobile .ws-help .ws-i { width: 13px; height: 13px; flex: none; margin-top: 1px; color: var(--ws-icon); }

/* campi del modulo implicito (.editable): restano .form-control, con l'altezza dei campi del modello */
.ws-pg-immobile .ws-field .form-control { height: 45px; border-radius: 6px 13px; font-size: 12px; }
.ws-pg-immobile .ws-field textarea.form-control { height: auto; min-height: 92px; }
.ws-pg-immobile .ws-field .form-control:disabled { color: var(--ws-text-2); background: var(--ws-tint-2); opacity: 1; }

/* ---------- Dati ---------- */
.ws-pg-immobile .ws-data-panel .ws-panel-head { align-items: center; }
.ws-pg-immobile .ws-span-all { grid-column: 1 / -1; }
.ws-pg-immobile .ws-span-2 { grid-column: span 2; }
.ws-pg-immobile .ws-catasto-nota { margin-top: 12px; }
.ws-pg-immobile .ws-subhead {
    margin: 24px 0 12px;
    padding-top: 18px;
    border-top: 1px solid var(--ws-line);
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .12em;
    text-transform: uppercase;
}

/* galleria */
.ws-pg-immobile .ws-gallery { margin-top: 6px; }
.ws-pg-immobile .ws-foto-card { overflow: hidden; height: 100%; }
.ws-pg-immobile .ws-foto-card img { aspect-ratio: 4 / 3; object-fit: cover; width: 100%; }
.ws-pg-immobile .ws-foto-card.ws-foto-cover { border-color: var(--ws-green); }
.ws-pg-immobile .ws-foto-card .card-body {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    align-items: center;
    gap: 6px;
    padding: 10px;
}
.ws-pg-immobile .ws-vuoto-riga {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 18px 0 0;
    color: var(--ws-text-3);
    font-size: 12px;
}
.ws-pg-immobile .ws-vuoto-riga .ws-i { width: 16px; height: 16px; color: var(--ws-icon); flex: none; }
.ws-pg-immobile .ws-gallery .ws-vuoto-riga { margin-top: 4px; }

/* ---------- responsive ---------- */
@media (max-width: 1180px) {
    .ws-pg-immobile .ws-hero-value strong { font-size: 32px; }
    .ws-pg-immobile .ws-detail-copy {
        grid-template-areas:
            "crumb   crumb"
            "title   title"
            "edit    edit"
            "value   score"
            "track   track"
            "note    note"
            "actions actions";
        grid-template-rows: auto auto auto auto auto auto 1fr;
    }
    .ws-pg-immobile .ws-hero-edit { justify-content: flex-start; margin-top: 14px; }
    .ws-pg-immobile .ws-hero-score-testo { display: none; }
    /* tab Finanza: i campi stanno nella colonna sinistra (stretta) del layout a due colonne */
    .ws-pg-immobile .ws-finance-layout .ws-form-grid.ws-three { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 900px) {
    .ws-pg-immobile .ws-hero-score-testo { display: grid; }
    .ws-pg-immobile .ws-insight-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
    .ws-pg-immobile .ws-insight-grid.ws-three { grid-template-columns: repeat(3, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
    .ws-pg-immobile .ws-detail-copy {
        grid-template-columns: minmax(0, 1fr);
        grid-template-areas: "crumb" "title" "edit" "value" "score" "track" "note" "actions";
        grid-template-rows: none;
    }
    .ws-pg-immobile .ws-hero-value { margin: 26px 0 10px; }
    .ws-pg-immobile .ws-hero-score { margin: 0 0 16px; }
    .ws-pg-immobile .ws-hero-edit .ws-button { flex: 1 1 150px; }
    .ws-pg-immobile .ws-insight-grid,
    .ws-pg-immobile .ws-insight-grid.ws-three,
    .ws-pg-immobile .ws-finance-layout .ws-form-grid.ws-three { grid-template-columns: minmax(0, 1fr); }
    .ws-pg-immobile .ws-span-2 { grid-column: auto; }
    .ws-pg-immobile .ws-poi-panel #map { height: 240px; }
    .ws-pg-immobile .ws-chart-box.ws-chart-tall { height: 260px; }
    .ws-pg-immobile .ws-zona-head { flex-wrap: wrap; }
}

/* Scheda immobile: come si calcola lo score (punto 16) */
.ws-pg-immobile .ws-score-spiegazione { margin: 0 0 18px; scroll-margin-top: 96px; }
.ws-pg-immobile .ws-score-spiegazione:empty { display: none; }
.ws-pg-immobile .ws-score-titolo { margin: 0 0 6px; font-size: 13px; font-weight: 750; color: var(--ws-ink); }
.ws-pg-immobile .ws-score-spiegazione dt { color: var(--ws-ink); font-size: 11px; padding: 6px 12px 6px 0; }
.ws-pg-immobile .ws-score-spiegazione dt small { display: block; margin-top: 2px; color: var(--ws-muted); font-size: 10px; font-weight: 500; }
.ws-pg-immobile .ws-score-spiegazione dd { white-space: nowrap; }
.ws-pg-immobile .ws-score-spiegazione dd b { margin-left: 8px; }
.ws-pg-immobile .ws-score-nota { margin: 8px 0 0; color: var(--ws-muted); font-size: 11px; line-height: 1.5; }

/* ===== PAGINE · strumenti =====
   mappa_immobili (.ws-pg-mappa), ricerca_immobili (.ws-pg-ricerca),
   strategie_ricerca (.ws-pg-strategie), strategia_match (.ws-pg-match),
   analytics (.ws-pg-analytics), impostazioni (.ws-pg-impostazioni), piani (.ws-pg-piani).
   Tutto è sotto la classe della pagina: niente ristilizzazioni globali. */

/* ---------- campo raggio (mappa e ricerca): slider + numero ---------- */
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-raggio { width: min(440px, 100%); }
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-raggio > label { margin: 0; }
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-raggio-controlli {
    display: flex;
    align-items: center;
    gap: 12px;
}
/* .ws-field input darebbe allo slider altezza, bordo e fondo di una casella */
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-raggio input[type="range"] {
    flex: 1;
    min-width: 0;
    height: 24px;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    box-shadow: none;
}
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-raggio input[type="number"] {
    flex: none;
    width: 96px;
}

/* ---------- mappe Leaflet: altezza esplicita (Leaflet la legge a L.map()) ---------- */
:is(.ws-pg-mappa, .ws-pg-ricerca) #map {
    width: 100%;
    min-height: 420px;
    border: 1px solid var(--ws-line);
    border-radius: 5px 16px;
    box-shadow: none;
}
.ws-pg-mappa #map { height: clamp(420px, 68vh, 640px); }
.ws-pg-ricerca #map { height: clamp(420px, 62vh, 600px); margin-top: 16px; }

.ws-pg-mappa .ws-map-panel { margin-top: 17px; padding: 8px; }

/* legenda e popup generati nello script della pagina */
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-map-legend {
    display: grid;
    gap: 6px;
    padding: 11px 13px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 15px;
    background: var(--ws-surface-solid);
    box-shadow: var(--ws-shadow);
    color: var(--ws-ink);
    font-size: 12px;
}
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-map-legend > div { display: flex; align-items: center; gap: 7px; }
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-map-legend img { width: 18px; height: auto; }
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-map-legend .ws-eyebrow { font-size: 9px; }

:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-map-popup {
    display: grid;
    gap: 5px;
    min-width: 220px;
    color: var(--ws-ink);
}
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-map-popup > strong {
    font: 600 14px var(--ws-font-display);
    letter-spacing: -.02em;
}
:is(.ws-pg-mappa, .ws-pg-ricerca) .ws-map-popup > small { color: var(--ws-text-3); font-size: 11px; }
.ws-pg-mappa .ws-map-popup dl {
    display: grid;
    gap: 4px;
    margin: 6px 0 4px;
    padding-top: 8px;
    border-top: 1px solid var(--ws-line);
}
.ws-pg-mappa .ws-map-popup dl > div { display: flex; justify-content: space-between; gap: 12px; }
.ws-pg-mappa .ws-map-popup dt { color: var(--ws-text-3); font-weight: 600; }
.ws-pg-mappa .ws-map-popup dd { margin: 0; font-weight: 750; font-variant-numeric: tabular-nums; }
/* leaflet.css colora tutti i link del contenitore */
.ws-pg-mappa .leaflet-popup-content a.ws-button { color: var(--ws-ink); margin-top: 4px; }

/* ---------- mappa_immobili ---------- */
.ws-pg-mappa .ws-mappa-filtro {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px 24px;
    padding: 20px 25px;
}
.ws-pg-mappa .ws-mappa-aiuto {
    display: flex;
    align-items: center;
    gap: 8px;
    margin: 0;
    color: var(--ws-text-3);
    font-size: 11px;
}
.ws-pg-mappa .ws-mappa-aiuto .ws-i { width: 15px; height: 15px; color: var(--ws-icon); flex: none; }

/* ---------- ricerca_immobili ---------- */
/* Il JS riassegna className a "btn btn-primary" (attivo) / "btn btn-outline-primary":
   qui diventano le due metà di un controllo segmentato. */
.ws-pg-ricerca .ws-ricerca-modi {
    display: inline-flex;
    gap: 4px;
    padding: 4px;
    margin-bottom: 17px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 16px;
    background: var(--ws-surface-soft);
}
.ws-pg-ricerca .ws-ricerca-modi .btn {
    min-height: 40px;
    padding: 0 17px;
    border: 0;
    border-radius: 5px 13px;
    font-size: 12px;
    font-weight: 750;
    box-shadow: none;
}
.ws-pg-ricerca .ws-ricerca-modi .btn-primary,
.ws-pg-ricerca .ws-ricerca-modi .btn-primary:hover {
    background: var(--ws-primary-bg);
    color: var(--ws-primary-fg);
}
.ws-pg-ricerca .ws-ricerca-modi .btn-outline-primary {
    background: transparent;
    color: var(--ws-text-2);
}
.ws-pg-ricerca .ws-ricerca-modi .btn-outline-primary:hover { background: var(--ws-tint); color: var(--ws-ink); }
.ws-pg-ricerca .ws-ricerca-modi .btn:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 2px; }

.ws-pg-ricerca .ws-panel-head { flex-wrap: wrap; }
.ws-pg-ricerca .ws-ricerca-form {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: end;
    gap: 8px 13px;
    margin-top: 20px;
}
.ws-pg-ricerca .ws-ricerca-form > .ws-ricerca-aiuto { grid-column: 1 / -1; }
.ws-pg-ricerca .ws-ricerca-aiuto { color: var(--ws-text-4); font-size: 10px; font-weight: 500; }
.ws-pg-ricerca .ws-ricerca-esito { margin-top: 18px; }
.ws-pg-ricerca .ws-ricerca-esito .alert { margin: 0 0 12px; }
.ws-pg-ricerca .ws-ricerca-dati { margin-top: 0; }
.ws-pg-ricerca .ws-ricerca-dato { height: 100%; min-height: 112px; }
.ws-pg-ricerca .ws-ricerca-dato .ws-ricerca-url {
    font: 600 12px/1.45 var(--ws-font-body);
    letter-spacing: 0;
    word-break: break-all;
}
.ws-pg-ricerca .ws-ricerca-json-titolo {
    margin: 22px 0 8px;
    color: var(--ws-text-3);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .1em;
    text-transform: uppercase;
}
.ws-pg-ricerca .ws-ricerca-json {
    max-height: 320px;
    overflow: auto;
    margin: 0;
    padding: 14px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 15px;
    background: var(--ws-tint-2);
    color: var(--ws-ink);
    font-size: 11px;
    white-space: pre;
}
.ws-pg-ricerca .ws-ricerca-zona-controlli {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: 14px 24px;
    margin-top: 20px;
}
.ws-pg-ricerca .ws-ricerca-zona-info {
    padding: 7px 12px;
    border-radius: 999px;
    background: var(--ws-tint);
    color: var(--ws-text-2);
    font-size: 11px;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
}
.ws-pg-ricerca #zoneError { margin: 14px 0 0; }

/* ---------- strategie_ricerca ---------- */
.ws-pg-strategie .ws-strategia-form .ws-form-title { margin-bottom: 20px; }
.ws-pg-strategie .ws-field > label { margin: 0; }
/* Select2 mette il suo span come figlio diretto di div.ws-field: annulla il flex di .ws-field>span */
.ws-pg-strategie .ws-field > .select2-container { display: block; }
.ws-pg-strategie .ws-form-footer { margin-top: 24px; padding-top: 18px; }
.ws-pg-strategie .ws-strategie-elenco { margin-top: 17px; }
.ws-pg-strategie .ws-strategie-elenco .ws-panel-head { margin-bottom: 16px; }
.ws-pg-strategie .ws-strategia-card {
    height: 100%;
    min-height: 0;
    background: var(--ws-surface-solid);
    box-shadow: none;
}
.ws-pg-strategie .ws-strategia-card h2 { margin: 16px 0 6px; overflow-wrap: anywhere; }
.ws-pg-strategie .ws-strategia-criteri {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px 14px;
    margin: 16px 0 18px;
}
.ws-pg-strategie .ws-strategia-criteri > div { display: grid; gap: 3px; min-width: 0; }
.ws-pg-strategie .ws-strategia-criteri dt {
    color: var(--ws-text-4);
    font: 650 9px var(--ws-font-display);
    letter-spacing: .08em;
    text-transform: uppercase;
}
.ws-pg-strategie .ws-strategia-criteri dd {
    margin: 0;
    color: var(--ws-ink);
    font-size: 12px;
    font-weight: 700;
    overflow-wrap: anywhere;
}
/* .ws-source-card footer a darebbe al pulsante il corpo 9px dei link-fonte */
.ws-pg-strategie .ws-strategia-card footer a.ws-button {
    gap: 8px;
    color: var(--ws-ink);
    font-size: 12px;
}
.ws-pg-strategie .ws-strategia-card footer a.ws-button .ws-i { width: 15px; }

/* ---------- strategia_match ---------- */
.ws-pg-match #strategy-info:empty { display: none; }
.ws-pg-match .ws-strategy-strip { margin-bottom: 4px; }
.ws-pg-match .ws-strategy-strip h2 { overflow-wrap: anywhere; }
.ws-pg-match .ws-match-grafici > [class*="col-"] { margin-top: 13px; }
.ws-pg-match .ws-match-canvas { position: relative; margin-top: 16px; }
.ws-pg-match .ws-match-panel { margin-top: 17px; }
.ws-pg-match .ws-match-panel .ws-panel-head { margin-bottom: 8px; }
.ws-pg-match .ws-match-table .ws-analysis-table-head,
.ws-pg-match .ws-match-table .ws-analysis-row {
    grid-template-columns: minmax(220px, 1.6fr) minmax(130px, .7fr) 100px minmax(150px, .8fr) 92px;
}
.ws-pg-match .ws-match-table .ws-analysis-row { color: inherit; text-decoration: none; }
.ws-pg-match .ws-match-table .ws-analysis-row:hover { color: inherit; }
.ws-pg-match .ws-match-table .ws-analysis-row:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: -2px; }
.ws-pg-match .ws-match-table .ws-property-cell small { white-space: normal; }
.ws-pg-match .ws-match-score { display: flex; align-items: center; gap: 10px; min-width: 0; }
.ws-pg-match .ws-match-score .ws-score { width: 38px; height: 38px; flex: none; }
.ws-pg-match .ws-match-score small { color: var(--ws-text-4); font-size: 10px; }
.ws-pg-match .ws-match-table .ws-status { justify-self: start; white-space: nowrap; }
.ws-pg-match .ws-match-azione {
    display: inline-flex;
    align-items: center;
    justify-self: end;
    gap: 4px;
    color: var(--ws-steel);
    font-size: 11px;
    font-weight: 750;
}
.ws-pg-match .ws-match-azione .ws-i { width: 14px; height: 14px; }

/* ---------- analytics ---------- */
/* card KPI generate da analytics.js (.card.kpi-card): aspetto delle metric card */
.ws-pg-analytics .ws-analytics-kpi .kpi-card { min-height: 128px; }
.ws-pg-analytics .ws-analytics-kpi .kpi-card .card-body {
    display: flex;
    flex-direction: column;
    justify-content: space-between;
    gap: 14px;
    padding: 20px;
}
.ws-pg-analytics .ws-analytics-kpi .kpi-card .text-uppercase {
    color: var(--ws-text-3) !important;
    font: 650 9px var(--ws-font-display) !important;
    letter-spacing: .1em;
}
.ws-pg-analytics .ws-analytics-kpi .kpi-card .bi { color: var(--ws-icon) !important; font-size: 15px; }
.ws-pg-analytics .ws-analytics-kpi .kpi-card .h5 {
    color: var(--ws-ink);
    font: 520 25px var(--ws-font-display) !important;
    letter-spacing: -.035em;
    font-variant-numeric: tabular-nums;
}
.ws-pg-analytics .ws-analytics-kpi .alert { margin: 0; }
.ws-pg-analytics .ws-analytics-grafici { margin-top: 4px; }
.ws-pg-analytics .ws-analytics-grafici > [class*="col-"] { margin-top: 13px; }
.ws-pg-analytics .analytics-card.ws-panel { height: 100%; }
.ws-pg-analytics .analytics-card .analytics-chart-wrap { margin-top: 16px; }

/* ---------- impostazioni ---------- */
.ws-pg-impostazioni .ws-impostazioni-sezione + .ws-impostazioni-sezione { margin-top: 17px; }
.ws-pg-impostazioni .ws-panel-head { align-items: center; }
.ws-pg-impostazioni form { margin-top: 20px; }
.ws-pg-impostazioni .ws-form-footer { margin-top: 22px; padding-top: 18px; }
.ws-pg-impostazioni .ws-profilo-utente {
    display: flex;
    align-items: center;
    gap: 14px;
    margin-top: 20px;
    padding: 14px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 18px;
    background: var(--ws-tint-2);
}
.ws-pg-impostazioni .profile-avatar {
    display: grid;
    place-items: center;
    flex: none;
    width: 52px;
    height: 52px;
    border-radius: 50%;
    background: var(--ws-primary-bg);
    color: var(--ws-primary-fg);
    font: 650 17px var(--ws-font-display);
}
.ws-pg-impostazioni .ws-profilo-utente > div { display: grid; gap: 3px; min-width: 0; }
.ws-pg-impostazioni .ws-profilo-utente strong { color: var(--ws-ink); font-size: 14px; }
.ws-pg-impostazioni .ws-profilo-utente small {
    color: var(--ws-text-3);
    font-size: 11px;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.ws-pg-impostazioni .ws-impostazioni-nota { margin: 6px 0 16px; color: var(--ws-muted); font-size: 11px; }
.ws-pg-impostazioni .ws-tema-griglia {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 13px;
}
.ws-pg-impostazioni .theme-option {
    display: grid;
    justify-items: start;
    gap: 3px;
    padding: 18px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 18px;
    background: var(--ws-surface-solid);
    cursor: pointer;
}
.ws-pg-impostazioni .theme-option:hover { border-color: var(--ws-line-strong); }
/* investia-system.css usa !important sullo stato attivo */
.ws-pg-impostazioni .theme-option.is-active {
    border-color: var(--ws-ink) !important;
    box-shadow: 0 0 0 3px var(--ws-tint);
}
.ws-pg-impostazioni .ws-tema-icona {
    display: grid;
    place-items: center;
    width: 38px;
    height: 38px;
    margin-bottom: 9px;
    border-radius: 6px 15px;
    background: var(--ws-tint);
    color: var(--ws-ink);
}
.ws-pg-impostazioni .ws-tema-icona .ws-i { width: 18px; height: 18px; }
.ws-pg-impostazioni .theme-option.is-active .ws-tema-icona { background: var(--ws-primary-bg); color: var(--ws-primary-fg); }
.ws-pg-impostazioni .theme-option strong { color: var(--ws-ink); font-size: 13px; }
.ws-pg-impostazioni .theme-option small { color: var(--ws-text-3); font-size: 10px; }

/* ---------- piani ---------- */
.ws-pg-piani .ws-piani-form .ws-panel-head { margin-bottom: 16px; }
.ws-pg-piani .ws-piani-riga {
    display: grid;
    grid-template-columns: minmax(0, 440px) auto;
    align-items: end;
    gap: 13px;
}
.ws-pg-piani .ws-piani-messaggio:not(:empty) { margin-top: 14px; }
.ws-pg-piani .ws-piani-messaggio .alert { margin: 0; }
.ws-pg-piani .ws-piani-elenco { margin-top: 17px; }
.ws-pg-piani .ws-piani-elenco .ws-panel-head { margin-bottom: 14px; }
.ws-pg-piani .dataTables_wrapper .dt-buttons { margin-bottom: 10px; }
.ws-pg-piani td.editable { cursor: text; }
.ws-pg-piani td.editable:focus {
    outline: 2px solid var(--ws-focus);
    outline-offset: -2px;
    background: var(--ws-tint);
}

/* ---------- responsive ---------- */
@media (max-width: 1180px) {
    .ws-pg-match .ws-match-table .ws-analysis-table-head,
    .ws-pg-match .ws-match-table .ws-analysis-row {
        grid-template-columns: minmax(200px, 1.5fr) minmax(120px, .7fr) 90px minmax(140px, .8fr);
    }
    .ws-pg-match .ws-match-table .ws-analysis-table-head > span:nth-child(5),
    .ws-pg-match .ws-match-azione { display: none; }
}
@media (max-width: 900px) {
    .ws-pg-match .ws-match-table .ws-analysis-row {
        grid-template-columns: minmax(0, 1fr) minmax(110px, auto) 80px;
        row-gap: 6px;
    }
    .ws-pg-match .ws-match-table .ws-status { grid-column: 1 / -1; }
}
@media (max-width: 640px) {
    .ws-pg-ricerca .ws-ricerca-modi { display: flex; }
    .ws-pg-ricerca .ws-ricerca-modi .btn { flex: 1; padding: 0 10px; }
    .ws-pg-ricerca .ws-ricerca-form { grid-template-columns: 1fr; }
    .ws-pg-ricerca .ws-ricerca-zona-controlli { align-items: stretch; }
    .ws-pg-mappa .ws-mappa-filtro { padding: 18px; }
    .ws-pg-match .ws-match-table .ws-analysis-row { grid-template-columns: minmax(0, 1fr) auto; }
    .ws-pg-match .ws-match-table .ws-analysis-row > strong { display: none; }
    .ws-pg-match .ws-match-score small { display: none; }
    .ws-pg-impostazioni .ws-tema-griglia { grid-template-columns: 1fr; }
    .ws-pg-piani .ws-piani-riga { grid-template-columns: 1fr; }
    .ws-pg-strategie .ws-strategia-criteri { grid-template-columns: 1fr 1fr; }
}

/* ===== PAGINE · wizard (insert_property.php) =====
   Il layout viene dai componenti del modello (.ws-builder-shell, .ws-stepper,
   .ws-form-panel, .ws-field, .ws-form-grid...). Qui solo ciò che il modello
   non copre: Select2 e badge dentro i campi, mappa Leaflet, textarea,
   blocco catastale richiudibile, pulsante "Annulla" del passo 1. */

/* i passi nascosti dal helper usano l'attributo hidden */
.ws-pg-wizard [hidden] { display: none !important; }

/* campi: la select originale di Select2 è posizionata in assoluto (1px):
   il riferimento resta dentro il campo, così non genera scorrimenti */
.ws-pg-wizard .ws-field { position: relative; align-content: start; }
.ws-pg-wizard .ws-field > span > label { margin: 0; font: inherit; color: inherit; cursor: pointer; }
.ws-pg-wizard .ws-field > small {
    color: var(--ws-text-4);
    font-size: 10px;
    font-weight: 500;
    line-height: 1.45;
}
.ws-pg-wizard .ws-field textarea {
    width: 100%;
    min-height: 92px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 13px;
    background: var(--ws-input-bg);
    color: var(--ws-ink);
    outline: 0;
    padding: 11px 12px;
    font-size: 12px;
    font-weight: 500;
    line-height: 1.55;
    resize: vertical;
}
.ws-pg-wizard .ws-field textarea[rows="2"] { min-height: 70px; }
.ws-pg-wizard .ws-field textarea:focus { border-color: var(--ws-focus); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ws-focus) 18%, transparent); }
.ws-pg-wizard .ws-field :is(input, textarea)::placeholder { color: var(--ws-text-4); }
.ws-pg-wizard .ws-field input[type="date"] { padding-right: 8px; }

/* Select2 nei campi: stessa altezza e raggio di .ws-field select */
.ws-pg-wizard .ws-field .select2-container { min-width: 0; }
.ws-pg-wizard .ws-field .select2-container--default .select2-selection--single .select2-selection__rendered { font-size: 12px; font-weight: 500; }

/* importi con icona euro (Lucide) */
.ws-pg-wizard .ws-money-input > .ws-i { width: 15px; height: 15px; pointer-events: none; }

/* divisori e stepper: icone Lucide a misura */
.ws-pg-wizard .ws-form-divider > .ws-i { width: 18px; height: 18px; }
.ws-pg-wizard .ws-privacy-note > .ws-i { width: 16px; height: 16px; flex: none; color: var(--ws-steel); }
.ws-pg-wizard .ws-privacy-note small { line-height: 1.45; }

/* badge del civico (#civicoBadge, inserito dal JS dopo #civico) */
.ws-pg-wizard #civicoBadge { font-size: 10px; font-weight: 600; line-height: 1.4; margin-left: 0 !important; }

/* posizione: verifica, conferma e badge sulla stessa riga */
.ws-pg-wizard .ws-locate-row { display: flex; flex-wrap: wrap; align-items: center; gap: 10px; }
.ws-pg-wizard .ws-locate-row .ws-i { width: 16px; height: 16px; }
.ws-pg-wizard #confirmPosition:disabled { cursor: default; }
.ws-pg-wizard #positionBadge { margin-left: 0 !important; }
.ws-pg-wizard #geocoding-warning { margin: 0; }

/* mappa Leaflet: il vecchio foglio dà a #map e #map-container bordo e ombra propri */
.ws-pg-wizard #map-container { border: 0; border-radius: 0; box-shadow: none; }
.ws-pg-wizard #map {
    border: 1px solid var(--ws-line);
    border-radius: 5px 16px;
    box-shadow: none;
    overflow: hidden;
}
.ws-pg-wizard #zona-box:empty { display: none; }

/* certificato catastale: blocco richiudibile in fondo al passo 1 */
.ws-pg-wizard .ws-catasto {
    border: 1px solid var(--ws-line);
    border-radius: 6px 15px;
    background: var(--ws-tint-2);
    margin-top: 5px;
}
.ws-pg-wizard .ws-catasto > summary {
    display: flex;
    align-items: center;
    gap: 10px;
    padding: 15px 17px;
    cursor: pointer;
    list-style: none;
    border-radius: 6px 15px;
}
.ws-pg-wizard .ws-catasto > summary::-webkit-details-marker { display: none; }
.ws-pg-wizard .ws-catasto > summary:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 2px; }
.ws-pg-wizard .ws-catasto > summary > .ws-i { width: 18px; height: 18px; color: var(--ws-steel); }
.ws-pg-wizard .ws-catasto > summary > span { display: grid; gap: 2px; flex: 1; min-width: 0; }
.ws-pg-wizard .ws-catasto > summary strong { font-size: 11px; }
.ws-pg-wizard .ws-catasto > summary small { color: var(--ws-muted); font-size: 9px; }
.ws-pg-wizard .ws-catasto > summary > .ws-catasto-chevron { width: 16px; height: 16px; color: var(--ws-text-3); transition: transform .18s; }
.ws-pg-wizard .ws-catasto[open] > summary > .ws-catasto-chevron { transform: rotate(180deg); }
.ws-pg-wizard .ws-catasto[open] > summary { border-bottom: 1px solid var(--ws-line); border-radius: 6px 15px 0 0; }
.ws-pg-wizard .ws-catasto-body { display: grid; gap: 14px; padding: 18px 17px 20px; }
.ws-pg-wizard .ws-catasto-body > .ws-eyebrow { margin-top: 6px; }
.ws-pg-wizard .ws-catasto-body > .ws-eyebrow:first-child { margin-top: 0; }
.ws-pg-wizard .ws-catasto .ws-field :is(input, textarea) { background: var(--ws-input-bg); }

/* piè del form: al passo 1 "Indietro" (disattivato dal helper) lascia il
   posto ad "Annulla"; dal passo 2 in poi torna "Indietro" e "Annulla" sparisce */
.ws-pg-wizard .ws-form-footer { align-items: center; gap: 10px; }
.ws-pg-wizard .ws-form-footer .ws-i { width: 15px; height: 15px; }
.ws-pg-wizard .ws-form-footer [data-ws-prev]:disabled { display: none; }
.ws-pg-wizard .ws-form-footer [data-ws-prev]:not(:disabled) + .ws-wizard-annulla { display: none; }
.ws-pg-wizard .ws-form-footer [data-ws-submit]:disabled { cursor: wait; }

/* intestazione: pulsante del modale documento */
.ws-pg-wizard .ws-page-actions .ws-i { width: 16px; height: 16px; }

/* modale documento: spostato dal JS in <body>, quindi fuori da .ws-pg-wizard */
.ws-doc-found {
    min-height: 90px;
    padding: 13px 15px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 15px;
    background: var(--ws-tint-2);
}
.ws-doc-found pre {
    white-space: pre-wrap;
    font-family: var(--ws-font-body);
    font-size: 12px;
    color: var(--ws-ink);
}
#docAcquireModal .modal-title .ws-i,
#docAcquireModal .btn .ws-i { width: 16px; height: 16px; }

@media (max-width: 640px) {
    .ws-pg-wizard .ws-locate-row > .ws-button { flex: 1 1 100%; }
    .ws-pg-wizard #map { height: 320px !important; }
    .ws-pg-wizard .ws-form-footer > .ws-button { flex: 1; }
}

/* ---------- difetti gruppo dashboard ---------- */
/* H3: icone delle card KPI di analytics, ora Lucide (.ws-i) invece di Bootstrap Icons (.bi):
   stesso colore e dimensione che 45-pagine-strumenti.css dava a .bi */
.ws-pg-analytics .ws-analytics-kpi .kpi-card .ws-i {
    width: 15px;
    height: 15px;
    color: var(--ws-icon);
}

/* ===== DIFETTI · gruppo "liste" =====
   Correzioni ai difetti preesistenti (DIFETTI.md, L6 e L7). Quasi tutto per opportunity.php
   (.ws-pg-opp-elenco): le altre liste hanno già queste regole in 45-pagine-liste.css.
   La sfumatura della riga vale anche per «Rimuovi» in watchlist.php (.ws-pg-watchlist). */

/* L7: la cella dell'opportunità ora è un link alla scheda (immobile_opportunita.php) */
.ws-pg-opp-elenco .ws-pg-opp-table a.ws-property-cell { color: inherit; text-decoration: none; }
.ws-pg-opp-elenco .ws-pg-opp-table a.ws-property-cell b { color: var(--ws-ink); transition: color .18s; }
.ws-pg-opp-elenco .ws-pg-opp-table a.ws-property-cell:hover b { color: var(--ws-steel); }
.ws-pg-opp-elenco .ws-pg-opp-table a.ws-property-cell:focus-visible { outline: 2px solid var(--ws-focus); outline-offset: 3px; border-radius: 5px 13px; }

/* L6: dopo «Aggiungi a Watchlist» la riga resta ~1 s con la conferma, poi sfuma */
.ws-pg-opp-elenco .ws-analysis-row.ws-riga-spostata,
.ws-pg-watchlist .ws-analysis-row.ws-riga-spostata { opacity: 0; pointer-events: none; transition: opacity .35s ease; }
@media (prefers-reduced-motion: reduce) {
    .ws-pg-opp-elenco .ws-analysis-row.ws-riga-spostata,
    .ws-pg-watchlist .ws-analysis-row.ws-riga-spostata { transition: none; }
}

/* stato vuoto o d'errore: l'intestazione delle colonne non serve (come nelle altre liste) */
.ws-pg-opp-elenco .ws-pg-opp-table:has(.ws-empty-state) > .ws-analysis-table-head { display: none; }

/* L9: «Cancella» (link rosso) si disattiva durante la chiamata: deve vedersi che è in corso */
.ws-row-actions .ws-danger-link:disabled { opacity: .55; cursor: wait; }
.ws-row-actions .ws-danger-link:disabled:hover { background: none; }

/* ============================================================
   Correzioni dei difetti del gruppo "strumenti" (T1, T5, T6).
   Solo selettori di pagina o ws-, solo variabili --ws-*.
   ============================================================ */

/* T1 — esito di "Salva profilo" / "Aggiorna password" sopra il pulsante */
.ws-pg-impostazioni .ws-impostazioni-esito { margin: 18px 0 0; }

/* T5 — conteggio dei risultati della ricerca per zona (pillola, non a tutta larghezza) */
.ws-pg-ricerca #zoneCount { width: fit-content; max-width: 100%; margin-top: 14px; }
/* T5 — link "Apri annuncio" nel popup: leaflet.css colora tutti i link del contenitore */
.ws-pg-ricerca .leaflet-popup-content a.ws-button { color: var(--ws-ink); margin-top: 4px; }

/* T6 — tabelle admin nascoste finché DataTables (con la traduzione it-IT) non è pronto:
   evita il lampo della tabella senza stile. Lo spazio resta occupato (visibility). */
.ws-pg-admin .ws-dt-attesa { visibility: hidden; }

/* T2 — card strategia: 5 criteri in 2 colonne, l'ultimo (cashflow) a tutta larghezza
   così Tipologia e Stato restano affiancati; nota sotto i criteri se il cashflow è impostato. */
.ws-pg-strategie .ws-strategia-criteri > .ws-strategia-promemoria { grid-column: 1 / -1; }
.ws-pg-strategie .ws-strategia-card .ws-strategia-nota {
    margin: -8px 0 16px;
    color: var(--ws-text-3);
    font-size: 11px;
}


/* ===== DIFETTI · gruppo wizard (insert_property, insert_opportunity, insert_opportunita_link) ===== */

/* insert_property: area messaggi (salvataggio, errori) sopra i pulsanti del form,
   come .ws-opp-messaggio delle pagine opportunità. Il JS toglie d-none. */
.ws-pg-wizard .ws-wizard-messaggio:not(:empty) { margin-top: 24px; }
.ws-pg-wizard .ws-wizard-messaggio .alert { margin: 0; font-size: 12px; line-height: 1.6; }
.ws-pg-wizard .ws-wizard-messaggio .alert hr { margin: 10px 0; border-color: currentColor; opacity: .18; }
.ws-pg-wizard .ws-wizard-messaggio .alert b { font-family: var(--ws-font-display); font-weight: 650; }
.ws-pg-wizard .ws-wizard-messaggio pre { max-height: 220px; overflow: auto; margin: 0; font-size: 11px; white-space: pre-wrap; word-break: break-word; }

/* insert_opportunity: esito dell'import da screenshot dentro il pannello */
.ws-pg-opp-ins #screenshot-ai-feedback .alert { margin: 0; font-size: 12px; line-height: 1.6; }

/* insert_opportunity: avviso del geocoding sotto i pulsanti della mappa (stesso
   elemento #geocoding-warning di insert_property); la griglia del passo dà lo spazio */
.ws-pg-opp-ins #geocoding-warning { margin: 0; }

/* ===== 7. LIBRERIE: DataTables, Select2, Leaflet ===== */

/* --- DataTables 1.13 --- */
.dataTables_wrapper { font-size: 12.5px; color: var(--ws-ink); }
.dataTables_wrapper .dataTables_length,
.dataTables_wrapper .dataTables_filter,
.dataTables_wrapper .dataTables_info { color: var(--ws-text-3); font-size: 12px; }
.dataTables_wrapper .dataTables_filter input,
.dataTables_wrapper .dataTables_length select {
    min-height: 38px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 13px;
    background: var(--ws-input-bg);
    color: var(--ws-ink);
    padding: 0 10px;
    margin-left: 6px;
}
.dataTables_wrapper .dataTables_filter input:focus { outline: 0; border-color: var(--ws-focus); box-shadow: 0 0 0 3px #5977931a; }
table.dataTable { border-collapse: collapse !important; }
table.dataTable thead th,
table.dataTable thead td {
    color: var(--ws-text-4);
    font: 650 9.5px var(--ws-font-display);
    letter-spacing: .08em;
    text-transform: uppercase;
    border-bottom: 1px solid var(--ws-line) !important;
    padding: 12px 10px;
}
table.dataTable tbody td { border-top: 1px solid var(--ws-line); padding: 12px 10px; vertical-align: middle; }
table.dataTable.no-footer { border-bottom: 1px solid var(--ws-line); }
table.dataTable tbody tr { background: transparent; }
table.dataTable.stripe tbody tr.odd,
table.dataTable.display tbody tr.odd { background: var(--ws-hover); }
table.dataTable.hover tbody tr:hover,
table.dataTable.display tbody tr:hover { background: var(--ws-hover); }
table.dataTable.display tbody tr > .sorting_1,
table.dataTable.display tbody tr.odd > .sorting_1,
table.dataTable.order-column tbody tr > .sorting_1 { background: transparent; }
.dataTables_wrapper .dataTables_paginate .paginate_button {
    border: 1px solid transparent !important;
    border-radius: 5px 12px !important;
    color: var(--ws-text-2) !important;
    background: none !important;
    font-size: 12px;
    padding: 5px 11px;
}
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
    background: var(--ws-tint) !important;
    border-color: var(--ws-line) !important;
    color: var(--ws-ink) !important;
}
.dataTables_wrapper .dataTables_paginate .paginate_button.current,
.dataTables_wrapper .dataTables_paginate .paginate_button.current:hover {
    background: var(--ws-primary-bg) !important;
    border-color: var(--ws-primary-bg) !important;
    color: var(--ws-primary-fg) !important;
}
.dataTables_wrapper .dataTables_paginate .paginate_button.disabled { opacity: .45; }
div.dt-buttons { gap: 6px; display: inline-flex; flex-wrap: wrap; }
div.dt-buttons .dt-button,
div.dt-buttons button.dt-button {
    margin: 0;
    min-height: 34px;
    padding: 0 12px;
    border: 1px solid var(--ws-line);
    border-radius: 5px 13px;
    background: var(--ws-surface-soft);
    color: var(--ws-ink);
    font-size: 11px;
    font-weight: 750;
    box-shadow: none;
}
div.dt-buttons .dt-button:hover:not(.disabled) { background: var(--ws-surface-solid); border-color: var(--ws-line-strong); }

/* --- Select2 4.1 --- */
.select2-container--default .select2-selection--single,
.select2-container--default .select2-selection--multiple {
    min-height: 45px;
    border: 1px solid var(--ws-line);
    border-radius: 6px 13px;
    background: var(--ws-input-bg);
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
    line-height: 43px;
    padding-left: 12px;
    color: var(--ws-ink);
    font-size: 13px;
}
.select2-container--default .select2-selection--single .select2-selection__placeholder { color: var(--ws-text-4); }
.select2-container--default .select2-selection--single .select2-selection__arrow { height: 43px; right: 8px; }
.select2-container--default.select2-container--focus .select2-selection,
.select2-container--default.select2-container--open .select2-selection {
    border-color: var(--ws-focus);
    box-shadow: 0 0 0 3px #5977931a;
}
.select2-dropdown {
    border: 1px solid var(--ws-line);
    border-radius: 6px 16px;
    background: var(--ws-surface-solid);
    box-shadow: var(--ws-shadow);
    overflow: hidden;
}
.select2-container--default .select2-search--dropdown .select2-search__field {
    border: 1px solid var(--ws-line);
    border-radius: 5px 12px;
    background: var(--ws-input-bg);
    color: var(--ws-ink);
    min-height: 36px;
}
.select2-container--default .select2-results__option { font-size: 13px; padding: 9px 12px; color: var(--ws-ink); }
.select2-container--default .select2-results__option--highlighted.select2-results__option--selectable { background: var(--ws-primary-bg); color: var(--ws-primary-fg); }
.select2-container--default .select2-results__option--selected { background: var(--ws-tint); }
.select2-container--default .select2-selection--multiple .select2-selection__choice {
    background: var(--ws-tint);
    border: 1px solid var(--ws-line);
    border-radius: 999px;
    color: var(--ws-ink);
    font-size: 11px;
}

/* --- Leaflet --- */
.leaflet-container {
    font-family: var(--ws-font-body);
    background: var(--ws-tint);
    border-radius: 5px 16px;
}
.leaflet-bar {
    border: 1px solid var(--ws-line) !important;
    border-radius: 6px 14px !important;
    box-shadow: var(--ws-shadow) !important;
    overflow: hidden;
}
.leaflet-bar a {
    background: var(--ws-surface-solid) !important;
    color: var(--ws-ink) !important;
    border-bottom-color: var(--ws-line) !important;
}
.leaflet-bar a:hover { background: var(--ws-tint) !important; }
.leaflet-popup-content-wrapper {
    border-radius: 6px 18px;
    background: var(--ws-surface-solid);
    color: var(--ws-ink);
    box-shadow: var(--ws-shadow);
}
.leaflet-popup-tip { background: var(--ws-surface-solid); }
.leaflet-popup-content { font-size: 12.5px; line-height: 1.5; }
.leaflet-control-attribution { font-size: 9px; background: var(--ws-chip-bg) !important; }
[data-bs-theme="dark"] .leaflet-tile-pane { filter: brightness(.82) contrast(1.05) saturate(.85); }

/* --- Chart.js: font e colori sono impostati in investia-workspace.js --- */
canvas { max-width: 100%; }

/* ===== 8. STAMPA ===== */
@media print {
    .ws-sidebar, .ws-topbar, .ws-sidebar-scrim, .app-footer, .no-print { display: none !important; }
    .ws-app-shell, .ws-workspace { display: block !important; }
    .ws-app-shell .app-content { padding: 0 !important; }
    body.app { background: #fff !important; }
    .card, .accordion-item, .ws-panel, .ws-metric-card { box-shadow: none !important; break-inside: avoid; }
    .accordion-collapse.collapse { display: block !important; }
}
