:root{--primary-900:#0f172a;--primary-800:#111827;--primary-700:#1f2937;--accent-gold:#d4a017;--accent-gold-soft:#f3d78a;--text-main:#1f2937;--text-muted:#475569;--surface:#f8fafc;--surface-page:#f3f4f6}body{color:var(--text-main);background:var(--surface-page);margin:0;font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif}#app{height:100vh}.app-layout{flex-direction:column;height:100vh;display:flex;overflow:hidden}.topbar{background:var(--primary-900);color:#fff;box-sizing:border-box;justify-content:space-between;align-items:center;height:64px;padding:0 20px;display:flex}.topbar-left{align-items:center;gap:10px;display:flex}.topbar-actions{align-items:center;gap:8px;display:flex}.topbar-operator-select{text-transform:uppercase;letter-spacing:.02em;color:#cbd5e1;gap:4px;font-size:11px;display:grid}.topbar-operator-select select{color:#fff;min-width:130px;font:inherit;text-transform:none;letter-spacing:0;background:#172036;border:1px solid #334155;border-radius:8px;padding:6px 8px}.sidebar-collapse-btn{color:#fff;cursor:pointer;background:#172036;border:1px solid #334155;border-radius:8px;width:34px;height:34px;font-size:16px;line-height:1}.sidebar-collapse-btn:hover{border-color:var(--accent-gold);background:#1f2937}.brand{font-size:18px;font-weight:700}.topbar-action{color:#fff;cursor:pointer;background:0 0;border:1px solid #d4a017b3;border-radius:8px;padding:8px 12px;text-decoration:none}.topbar-action:hover{border-color:var(--accent-gold);background:#d4a01726}.topbar-user-chip{color:#e2e8f0;background:#172036;border:1px solid #334155;border-radius:999px;padding:7px 12px;font-size:12px;line-height:1}.workspace{grid-template-columns:240px 1fr;height:calc(100vh - 64px);transition:grid-template-columns .2s;display:grid}.workspace.sidebar-collapsed{grid-template-columns:0 1fr}.workspace>*{min-width:0}.mobile-sidebar-backdrop{display:none}.sidebar{background:var(--primary-800);color:#cbd5e1;box-sizing:border-box;-webkit-overflow-scrolling:touch;min-height:0;padding:16px;transition:opacity .15s,padding .15s;overflow:hidden auto}.workspace.sidebar-collapsed .sidebar{opacity:0;pointer-events:none;padding:0}.sidebar ul{gap:8px;margin:0;padding:0;list-style:none;display:grid}.sidebar-link{box-sizing:border-box;text-align:left;background:var(--primary-700);color:#fff;cursor:pointer;border:1px solid #334155;border-radius:8px;width:100%;padding:10px 12px;text-decoration:none;transition:border-color .2s,background .2s;display:block}.sidebar-link:hover{border-color:var(--accent-gold);background:#243245}.sidebar-link.active{border-color:var(--accent-gold);box-shadow:inset 0 0 0 1px var(--accent-gold-soft)}.sidebar-submenu{border-left:2px solid #d4a01773;gap:2px;margin-top:6px;margin-left:32px;padding-left:0;display:grid}.sidebar-sublink{box-sizing:border-box;color:#dbe7ff;text-align:left;background:0 0;border:none;border-radius:4px;width:100%;padding:8px 10px 8px 28px;font-size:12px;font-weight:500;line-height:1.2;text-decoration:none;transition:background .2s,color .2s;display:block}.sidebar-sublink:hover{color:#fff;background:#d4a01747;box-shadow:inset 0 0 0 1px #d4a017bf}.sidebar-sublink.active{color:#fff;background:#d4a0172e;font-weight:700}.sidebar-sublink.active:hover{background:#d4a01759}.main-content{background:var(--surface);padding:24px;overflow-y:auto}.breadcrumb-bar{background:#fff;border:1px solid #e2e8f0;border-radius:10px;justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:18px;padding:12px 14px;display:flex}.breadcrumb-label{text-transform:uppercase;letter-spacing:.04em;color:#64748b;margin-right:8px;font-size:12px}.breadcrumb-current{color:#1e293b;font-size:14px;font-weight:700}.breadcrumb-related{flex-wrap:wrap;gap:8px;display:flex}.related-link{color:#1e293b;background:#f8fafc;border:1px solid #cbd5e1;border-radius:999px;padding:5px 10px;font-size:13px;text-decoration:none}.related-link:hover{border-color:var(--accent-gold);background:#fff9ea}.main-content h1{margin:0 0 8px;font-size:24px}.main-content p{color:var(--text-muted);margin:0}.main-content h1{border-left:4px solid var(--accent-gold);margin:0 0 8px;padding-left:10px}.page-header{justify-content:space-between;align-items:flex-start;gap:12px;margin-bottom:20px;display:flex}.login-screen{box-sizing:border-box;place-items:center;min-height:100vh;padding:24px;display:grid}.login-card{gap:12px;width:min(460px,100%);display:grid}.login-card .form-actions{margin-top:4px}.page-actions{flex-wrap:wrap;gap:8px;display:flex}.postazioni-grid{grid-template-columns:repeat(2,minmax(280px,1fr));gap:14px;margin-bottom:14px;display:grid}.primary-action,.secondary-action{cursor:pointer;border-radius:8px;padding:10px 14px;font-size:14px;font-weight:600;text-decoration:none}.primary-action{border:1px solid var(--accent-gold);background:var(--accent-gold);color:#111827}.primary-action:hover{background:#e0b53d}.secondary-action{color:#1f2937;background:#fff;border:1px solid #cbd5e1}.secondary-action:hover{border-color:#94a3b8}.table-card,.form-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:16px}.table-card table{border-collapse:collapse;width:100%}.table-row-selected td{background:#fff9ea}.table-selection-summary{color:#334155;background:#fffdf5;border:1px solid #e5d39d;border-radius:8px;margin-top:10px;padding:10px 12px;font-size:13px}.filter-toolbar{background:linear-gradient(#fff 0%,#f8fafc 100%);border:1px solid #dbe3ee;border-radius:12px;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:10px;margin:0 0 14px;padding:12px;display:grid;position:relative;box-shadow:0 8px 18px #0f172a0d}.filter-toolbar:before{content:"";background:linear-gradient(90deg,#d4a017d9,#d4a01733);border-radius:12px 12px 0 0;height:3px;position:absolute;top:0;left:0;right:0}.filter-toolbar label{letter-spacing:.02em;color:#64748b;text-transform:uppercase;flex-direction:column;gap:5px;font-size:.78rem;font-weight:600;display:flex}.filter-toolbar input,.filter-toolbar select{color:#0f172a;box-sizing:border-box;background:#fff;border:1px solid #cbd5e1;border-radius:8px;width:100%;min-height:38px;padding:8px 10px;font-size:.9rem;transition:border-color .18s,box-shadow .18s,background-color .18s}.filter-toolbar input::placeholder{color:#94a3b8}.filter-toolbar input:hover,.filter-toolbar select:hover{background:#fcfdff;border-color:#94a3b8}.filter-toolbar input:focus,.filter-toolbar select:focus{border-color:var(--accent-gold);outline:none;box-shadow:0 0 0 3px #d4a01733}@media (width<=1100px){.filter-toolbar{grid-template-columns:repeat(auto-fit,minmax(200px,1fr))}}@media (width<=760px){.filter-toolbar{grid-template-columns:1fr}}.table-card th,.table-card td{text-align:left;border-bottom:1px solid #e2e8f0;padding:12px 10px}.table-card th{color:#334155;text-transform:uppercase;letter-spacing:.04em;font-size:13px}.table-pagination-toolbar,.table-pagination-footer{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;display:flex}.table-pagination-toolbar{margin-bottom:12px}.table-pagination-toolbar p,.table-pagination-footer p{color:#334155;margin:0;font-size:14px}.table-pagination-toolbar label{color:#475569;align-items:center;gap:8px;font-size:13px;display:flex}.table-pagination-toolbar select{min-height:34px;font:inherit;border:1px solid #cbd5e1;border-radius:8px;padding:6px 10px}.table-pagination-footer{border-top:1px solid #e2e8f0;margin-top:12px;padding-top:12px}.table-pagination-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.secondary-action.active-page-btn{border-color:var(--accent-gold);background:#fff9ea}.spiaggia-kpi-grid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-bottom:14px;display:grid}.spiaggia-kpi-card{background:#fff;border:1px solid #e2e8f0;border-radius:10px;padding:10px 12px}.spiaggia-kpi-card span{color:#64748b;margin-bottom:4px;font-size:12px;display:block}.spiaggia-kpi-card strong{color:#0f172a;font-size:22px}.spiaggia-kpi-card strong.spiaggia-state-disponibile{color:#166534}.spiaggia-kpi-card strong.spiaggia-state-prenotato{color:#854d0e}.spiaggia-kpi-card strong.spiaggia-state-abbonato{color:#7e22ce}.spiaggia-kpi-card strong.spiaggia-state-occupato-subito{color:#991b1b}.spiaggia-kpi-card strong.spiaggia-state-occupato-dopo{color:#9a3412}.spiaggia-kpi-card strong.spiaggia-state-occupato-pagato{color:#1e40af}.spiaggia-kpi-card strong.spiaggia-state-occupato-abbonato{color:#4c1d95}.spiaggia-kpi-card strong.spiaggia-state-manutenzione{color:#1e293b}.spiaggia-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px;display:grid}.spiaggia-grid-single-row{flex-wrap:nowrap;gap:12px;padding-bottom:6px;display:flex;overflow-x:auto}.spiaggia-grid-single-row .spiaggia-postazione-card{flex:0 0 250px;min-width:250px;max-width:250px}.spiaggia-card-layout-switch{color:#334155;-webkit-user-select:none;user-select:none;align-items:center;gap:8px;font-size:12px;font-weight:600;display:inline-flex}.spiaggia-card-layout-switch input{opacity:0;width:0;height:0;position:absolute}.spiaggia-card-layout-slider{background:#cbd5e1;border-radius:999px;width:40px;height:22px;transition:background-color .16s;position:relative}.spiaggia-card-layout-slider:after{content:"";background:#fff;border-radius:999px;width:16px;height:16px;transition:transform .16s;position:absolute;top:3px;left:3px;box-shadow:0 1px 2px #0f172a40}.spiaggia-card-layout-switch input:checked+.spiaggia-card-layout-slider{background:#22c55e}.spiaggia-card-layout-switch input:checked+.spiaggia-card-layout-slider:after{transform:translate(18px)}.spiaggia-card-sections{flex-direction:column;gap:12px;display:flex}.spiaggia-card-section{border:1px solid #dbe3ee;border-radius:12px;padding:10px}.spiaggia-card-section-header{justify-content:space-between;align-items:center;gap:8px;margin-bottom:10px;display:flex}.spiaggia-card-section-badge{color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:999px;align-items:center;padding:4px 10px;font-size:11px;font-weight:700;display:inline-flex}.spiaggia-card-section-count{color:#475569;font-size:12px}.spiaggia-card-section-tone-0{background:#ffe4e6;border-color:#fb7185}.spiaggia-card-section-tone-1{background:#ffedd5;border-color:#fb923c}.spiaggia-card-section-tone-2{background:#fef9c3;border-color:#facc15}.spiaggia-card-section-tone-3{background:#dcfce7;border-color:#4ade80}.spiaggia-postazione-card{background:#fff;border:1px solid #dbe3ee;border-radius:10px;padding:12px;box-shadow:0 1px #0f172a05}.spiaggia-postazione-card-clickable{cursor:pointer}.spiaggia-postazione-card-clickable:hover{border-color:#94a3b8;box-shadow:0 3px 10px #0f172a14}.spiaggia-postazione-card-clickable:focus-visible{outline-offset:2px;outline:2px solid #3b82f6}.spiaggia-postazione-card header{justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:8px;display:flex}.spiaggia-postazione-card-head-right{align-items:center;gap:8px;display:flex}.spiaggia-postazione-seq-badge{color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:999px;justify-content:center;align-items:center;width:34px;height:34px;font-size:11px;font-weight:700;display:inline-flex;box-shadow:inset 0 1px #fffc}.spiaggia-postazione-card h3{color:#0f172a;margin:0;font-size:15px}.spiaggia-postazione-card p{color:#64748b;margin:2px 0 0;font-size:12px}.spiaggia-postazione-meta{color:#334155;align-items:center;gap:8px;font-size:13px;display:flex}.spiaggia-booking-note{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;margin-top:8px;padding:6px 8px;font-size:12px}.spiaggia-state-pill{border:1px solid #0000;border-radius:999px;padding:4px 8px;font-size:11px;font-weight:700}.spiaggia-state-disponibile{color:#166534;background:#dcfce7;border-color:#86efac}.spiaggia-state-in-arrivo,.spiaggia-state-prenotato{color:#854d0e;background:#fef9c3;border-color:#fde68a}.spiaggia-state-abbonato{color:#7e22ce;background:#fae8ff;border-color:#e879f9}.spiaggia-state-occupato,.spiaggia-state-occupato-subito{color:#991b1b;background:#fee2e2;border-color:#fca5a5}.spiaggia-state-occupato-dopo{color:#9a3412;background:#ffedd5;border-color:#fdba74}.spiaggia-state-occupato-pagato{color:#1e3a8a;background:#dbeafe;border-color:#93c5fd}.spiaggia-state-occupato-abbonato{color:#4c1d95;background:#ede9fe;border-color:#c4b5fd}.spiaggia-state-manutenzione{color:#1e293b;background:#e2e8f0;border-color:#cbd5e1}.spiaggia-draft-toolbar{background:#fff;border:1px solid #dbe3ee;border-radius:10px;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;margin-bottom:14px;padding:12px 14px;display:flex}.spiaggia-draft-toolbar-main{flex-direction:column;flex:1;align-items:flex-start;gap:8px;min-width:0;display:flex}.spiaggia-draft-toolbar-line{flex-wrap:wrap;align-items:center;gap:10px;display:flex}.spiaggia-draft-toolbar-actions{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.spiaggia-draft-badge{letter-spacing:.04em;text-transform:uppercase;color:#92400e;background:#fffbeb;border:1px solid #fcd34d;border-radius:999px;padding:4px 10px;font-size:11px;font-weight:700}.spiaggia-draft-status{color:#334155;font-size:13px;line-height:1.35}.spiaggia-compact-grid{background:#fff;border:1px solid #dbe3ee;border-radius:10px;grid-template-columns:repeat(auto-fill,minmax(34px,1fr));gap:10px;padding:12px;display:grid}.spiaggia-attuale-map-board{min-height:520px}.spiaggia-attuale-map-board .spiaggia-attuale-map-empty{text-align:center;z-index:3;max-width:280px;margin:0;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.spiaggia-dot-btn{cursor:pointer;background:#fff;border:3px solid #0000;border-radius:999px;justify-content:center;align-items:center;width:34px;height:34px;padding:0;transition:transform .12s,box-shadow .12s;display:inline-flex}.spiaggia-dot-btn:hover{transform:scale(1.06);box-shadow:0 0 0 2px #0f172a14}.spiaggia-dot-btn .spiaggia-dot-inner{border:1px solid #ffffffd9;border-radius:999px;width:14px;height:14px}.operativo-postazioni-dot-number{color:#fff;text-align:center;background:#0f172a;border-radius:999px;min-width:14px;height:14px;padding:0 2px;font-size:9px;line-height:14px;position:absolute;bottom:-2px;right:-2px}.spiaggia-dot-btn.spiaggia-state-disponibile{background:#f0fdf4;border-color:#22c55e}.spiaggia-dot-btn.spiaggia-state-in-arrivo,.spiaggia-dot-btn.spiaggia-state-prenotato{background:#fffbeb;border-color:#f59e0b}.spiaggia-dot-btn.spiaggia-state-abbonato{background:#fdf4ff;border-color:#c026d3}.spiaggia-dot-btn.spiaggia-state-occupato,.spiaggia-dot-btn.spiaggia-state-occupato-subito{background:#fef2f2;border-color:#ef4444}.spiaggia-dot-btn.spiaggia-state-occupato-dopo{background:#fff7ed;border-color:#f97316}.spiaggia-dot-btn.spiaggia-state-occupato-pagato{background:#eff6ff;border-color:#3b82f6}.spiaggia-dot-btn.spiaggia-state-occupato-abbonato{background:#f5f3ff;border-color:#8b5cf6}.spiaggia-dot-btn.spiaggia-state-manutenzione{background:#f1f5f9;border-color:#64748b}.spiaggia-modal-info{gap:8px;display:grid}.spiaggia-modal-info p{margin:0}.spiaggia-main-layout{grid-template-columns:minmax(0,1fr) 300px;align-items:start;gap:14px;display:grid}.spiaggia-main-layout.single-view{grid-template-columns:1fr}.spiaggia-editor-layout{grid-template-columns:260px minmax(0,1fr) 300px;align-items:start;gap:14px;display:grid}.spiaggia-editor-pool-card,.spiaggia-editor-board-card{background:#fff;border:1px solid #dbe3ee;border-radius:10px;padding:12px}.spiaggia-editor-pool-card.pool-drop-active{background:linear-gradient(#fffef9 0%,#fff 100%);border-color:#d4a017;box-shadow:inset 0 0 0 2px #d4a0172e}.spiaggia-editor-pool-list{gap:8px;max-height:560px;padding-right:4px;display:grid;overflow:auto}.spiaggia-editor-pool-row{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:8px;display:grid}.spiaggia-editor-pool-item{cursor:grab;text-align:left;background:#f8fafc;border:1px solid #dbe3ee;border-radius:8px;grid-template-columns:auto 1fr auto;align-items:center;gap:8px;width:100%;min-height:44px;padding:6px 8px;display:grid}.spiaggia-editor-pool-item:hover{border-color:#94a3b8}.spiaggia-editor-pool-item:disabled{opacity:.5;cursor:not-allowed}.spiaggia-editor-row-action{color:#334155;cursor:pointer;white-space:nowrap;background:#fff;border:1px solid #cbd5e1;border-radius:8px;min-height:44px;padding:0 10px;font-size:12px;font-weight:600}.spiaggia-editor-row-action:hover{border-color:var(--accent-gold);background:#fff9ea}.spiaggia-editor-row-action:disabled{opacity:.45;cursor:not-allowed}.spiaggia-editor-pool-label{text-overflow:ellipsis;white-space:nowrap;color:#1e293b;max-width:100%;font-size:13px;font-weight:600;display:block;overflow:hidden}.spiaggia-editor-pool-label-wrap{min-width:0}.spiaggia-editor-pool-count{text-align:right;color:#334155;min-width:22px;font-size:13px;font-weight:700}.spiaggia-editor-head{flex-wrap:wrap;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px;display:flex}.spiaggia-editor-head h3{color:#0f172a;margin:0;font-size:15px}.spiaggia-editor-head-tools{flex-wrap:wrap;justify-content:flex-end;align-items:flex-end;gap:10px;display:flex}.spiaggia-editor-grid-select{letter-spacing:.02em;text-transform:uppercase;color:#64748b;flex-direction:column;align-items:flex-start;gap:4px;font-size:11px;font-weight:600;display:flex}.spiaggia-editor-grid-select select{color:#0f172a;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:8px;min-width:92px;min-height:36px;padding:6px 8px;font-size:13px;font-weight:600}.spiaggia-editor-grid-select select:hover{border-color:#94a3b8}.spiaggia-editor-grid-adapt{text-transform:none;letter-spacing:0;color:#92400e;max-width:160px;font-size:11px;font-weight:600;line-height:1.3}.spiaggia-editor-board{z-index:0;box-sizing:border-box;background-color:#e2e8f0;border:1px dashed #cbd5e1;border-radius:10px;min-height:520px;position:relative;overflow:hidden}.spiaggia-editor-board:before{content:"";left:var(--spiaggia-editor-grid-ox,0px);top:var(--spiaggia-editor-grid-oy,0px);width:var(--spiaggia-editor-play-w,0px);height:var(--spiaggia-editor-play-h,0px);box-sizing:border-box;background-color:#f8fafc;background-image:linear-gradient(90deg,#94a3b824 1px,#0000 1px),linear-gradient(#94a3b824 1px,#0000 1px);background-size:var(--spiaggia-editor-cell-w,72px) var(--spiaggia-editor-cell-h,72px), var(--spiaggia-editor-cell-w,72px) var(--spiaggia-editor-cell-h,72px);pointer-events:none;z-index:0;background-position:0 0;border:1px solid #64748b59;border-radius:8px;position:absolute}.spiaggia-editor-drop-highlight{z-index:1;pointer-events:none;box-sizing:border-box;background:#d4a0172e;border:2px solid #d4a017f2;border-radius:8px;position:absolute}.spiaggia-editor-dot{z-index:2;position:absolute;transform:translate(-50%,-50%)}.spiaggia-editor-dot:hover{box-shadow:none;transform:translate(-50%,-50%)}.spiaggia-editor-dot.dragging{opacity:.65}.spiaggia-main-left,.spiaggia-main-right{min-width:0}.spiaggia-main-right{gap:10px;display:grid;position:sticky;top:8px}.spiaggia-legend-card{background:#fff;border:1px solid #dbe3ee;border-radius:10px;padding:10px}.spiaggia-legend-card h3{color:#1e293b;margin:0 0 8px;font-size:13px}.spiaggia-legend-list{gap:8px;display:grid}.spiaggia-legend-item{color:#334155;align-items:center;gap:8px;font-size:13px;display:flex}.spiaggia-legend-empty{color:#64748b;margin:0;font-size:12px}.spiaggia-legend-item .spiaggia-dot-btn{pointer-events:none}@media (width<=1150px){.spiaggia-main-layout,.spiaggia-editor-layout{grid-template-columns:1fr}.spiaggia-main-right{position:static}}.form-grid{grid-template-columns:repeat(2,minmax(220px,1fr));gap:14px;display:grid}.form-card label{color:#334155;gap:6px;font-size:14px;display:grid}.field-helper-text{color:#64748b;font-size:12px}.flagged-phone-warning{color:#991b1b;background:#fee2e2;border:1px solid #fca5a5;border-radius:8px;grid-column:1/-1;padding:8px 10px}.form-card input,.form-card select,.form-card textarea{font:inherit;border:1px solid #cbd5e1;border-radius:8px;padding:10px}.full-width{margin-top:14px}.form-section{border-top:1px solid #e2e8f0;margin-top:18px;padding-top:16px}.form-section-header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.form-section h2{color:#1e293b;margin:0 0 6px;font-size:18px}.form-section p{color:#64748b;margin:0 0 12px;font-size:14px}.section-note{color:#64748b;margin-top:-4px;margin-bottom:12px;font-size:12px;line-height:1.35}.color-picker-row{align-items:center;gap:12px;display:flex}.color-picker-input{cursor:pointer;background:#fff;border:1px solid #94a3b8;border-radius:8px;width:52px;height:36px;padding:2px}.color-picker-hint{color:#64748b;font-size:13px}.tariff-list{background:#fff;border:1px solid #e2e8f0;border-radius:10px;overflow:visible}.tariff-row{border-top:1px solid #eef2f7;grid-template-columns:1.2fr .9fr .9fr 1.1fr .9fr .8fr 1fr;align-items:center;gap:10px;padding:10px 12px;font-size:13px;display:grid;position:relative}.tariff-row-head{color:#334155;text-transform:uppercase;letter-spacing:.03em;background:#f8fafc;border-top:none;font-size:12px;font-weight:700}.tariff-empty{color:#64748b;padding:12px;font-size:13px}.tariff-actions{justify-content:flex-start;gap:6px;display:flex;position:relative}.tariff-action-btn{color:#1e293b;cursor:pointer;background:#fff;border:1px solid #cbd5e1;border-radius:6px;align-items:center;padding:4px 8px;font-size:12px;text-decoration:none;display:inline-flex}.tariff-action-btn:hover{background:#f8fafc;border-color:#94a3b8}.tariff-action-btn.danger{color:#b91c1c;border-color:#fca5a5}.tariff-action-btn.danger:hover{background:#fef2f2}.tariff-delete-popover{z-index:60;background:#fff;border:1px solid #cbd5e1;border-radius:8px;width:220px;padding:10px;position:absolute;bottom:calc(100% + 6px);right:0;box-shadow:0 10px 24px #0f172a2e}.tariff-delete-popover p{color:#1e293b;margin:0 0 8px;font-size:12px}.tariff-delete-actions{justify-content:flex-end;gap:6px;display:flex}.table-empty-cell{text-align:center;color:#64748b;padding:20px 12px}.color-chip-cell{align-items:center;gap:8px;display:inline-flex}.color-chip{border:1px solid #0f172a33;border-radius:999px;width:16px;height:16px;display:inline-block;box-shadow:inset 0 0 0 1px #ffffff59}.modal-overlay{z-index:50;background:#02061773;place-items:center;padding:16px;display:grid;position:fixed;inset:0}.modal-card{box-sizing:border-box;background:#fff;border:1px solid #cbd5e1;border-radius:12px;width:min(1100px,96vw);padding:16px}.modal-card-wide{width:min(1280px,98vw)}.modal-header{justify-content:space-between;align-items:center;margin-bottom:12px;display:flex}.modal-header h2{margin:0;font-size:20px}.prenotazione-status-modal{width:min(980px,96vw)}.prenotazione-status-modal-subtitle{color:#64748b;margin:4px 0 0;font-size:13px}.prenotazione-status-summary-card{background:linear-gradient(#fff 0%,#f8fafc 100%);border:1px solid #dbe3ee;border-radius:10px;margin-bottom:12px;padding:12px}.prenotazione-status-summary-grid{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;display:grid}.prenotazione-status-summary-grid span{text-transform:uppercase;letter-spacing:.03em;color:#64748b;margin-bottom:4px;font-size:11px;display:block}.prenotazione-status-summary-grid strong{color:#0f172a;font-size:14px}.prenotazione-status-note,.prenotazione-status-current{color:#334155;margin:10px 0 0;font-size:13px}.prenotazione-status-current span{color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:999px;padding:3px 8px;font-weight:600;display:inline-block}.prenotazione-status-select{color:#334155;gap:6px;max-width:360px;font-size:13px;display:grid}.prenotazione-status-select select{font:inherit;border:1px solid #cbd5e1;border-radius:8px;padding:10px}.prenotazione-status-select textarea{font:inherit;resize:vertical;border:1px solid #cbd5e1;border-radius:8px;padding:10px}.spiaggia-quick-status-actions{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;justify-content:space-between;align-items:flex-end;padding:10px 12px}.spiaggia-quick-status-select{color:#334155;gap:6px;min-width:280px;font-size:13px;display:grid}.spiaggia-quick-status-select select{font:inherit;color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:10px;padding:10px 12px;box-shadow:inset 0 1px 2px #0f172a0a}.spiaggia-quick-status-select select:hover{border-color:#94a3b8}.spiaggia-quick-status-select select:focus{border-color:#3b82f6;outline:none;box-shadow:0 0 0 3px #3b82f62e}.operativo-arrivi-board{gap:12px;display:grid}.operativo-arrivi-quick-filters{flex-wrap:wrap;gap:8px;margin:-8px 0 12px;display:flex}.operativo-arrivi-search{text-transform:uppercase;letter-spacing:.02em;color:#64748b;gap:6px;min-width:240px;font-size:12px;display:grid}.operativo-arrivi-search input{color:#0f172a;font:inherit;text-transform:none;letter-spacing:0;background:#fff;border:1px solid #cbd5e1;border-radius:8px;padding:10px}.operativo-arrivi-section{background:#fff;border:1px solid #dbe3ee;border-radius:10px;padding:10px}.operativo-arrivi-section-tone-0{background:#ffe4e6;border-color:#fb7185}.operativo-arrivi-section-tone-1{background:#ffedd5;border-color:#fb923c}.operativo-arrivi-section-tone-2{background:#fef9c3;border-color:#facc15}.operativo-arrivi-section-tone-3{background:#dcfce7;border-color:#4ade80}.operativo-arrivi-section-header{justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;display:flex}.operativo-arrivi-section-header h3{color:#0f172a;margin:0;font-size:16px}.operativo-arrivi-section-header p{color:#64748b;margin:2px 0 0;font-size:12px}.operativo-arrivi-section-header span{color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:999px;justify-content:center;align-items:center;min-width:28px;height:28px;font-weight:700;display:inline-flex}.operativo-arrivi-section.tone-urgent{background:#fff7ed;border-color:#fdba74}.operativo-arrivi-section.tone-working{background:#eff6ff;border-color:#93c5fd}.operativo-arrivi-section.tone-incoming{background:#fefce8;border-color:#fde68a}.operativo-arrivi-section.tone-done{background:#f0fdf4;border-color:#86efac}.operativo-arrivi-cards{grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px;display:grid}.operativo-arrivo-card{text-align:left;cursor:pointer;background:#fff;border:1px solid #dbe3ee;border-radius:10px;width:100%;padding:10px}.operativo-arrivo-card:hover{filter:saturate(1.03);box-shadow:0 4px 12px #0f172a14}.operativo-arrivo-card-head{justify-content:space-between;align-items:center;gap:8px;margin-bottom:8px;display:flex}.operativo-arrivo-state{color:#0f172a;background:#fff;border:1px solid #cbd5e1;border-radius:999px;padding:3px 8px;font-size:11px;font-weight:700}.operativo-arrivo-card p{color:#334155;align-items:center;gap:6px;margin:0;font-size:13px;display:flex}.operativo-arrivo-card p+p{margin-top:6px}.operativo-arrivo-assignee{color:#0f172a;margin:0 0 6px;font-size:12px;font-weight:700}.payment-badge{border:1px solid #0000;border-radius:999px;align-items:center;padding:2px 8px;font-size:11px;font-weight:800;display:inline-flex}.payment-badge.payment-now{color:#991b1b;background:#fee2e2;border-color:#fca5a5}.payment-badge.payment-later{color:#854d0e;background:#fef9c3;border-color:#fde68a}.payment-badge.payment-paid{color:#166534;background:#dcfce7;border-color:#86efac}.operativo-arrivi-empty{color:#64748b;margin:0;font-size:13px}.operativo-status-modal{width:min(760px,96vw)}.operativo-status-modal-subtitle{color:#475569;margin:4px 0 0;font-size:13px}.operativo-status-modal.tone-urgent{background:linear-gradient(#fff7ed 0%,#fff 24%);border-color:#fdba74}.operativo-status-modal.tone-working{background:linear-gradient(#eff6ff 0%,#fff 24%);border-color:#93c5fd}.operativo-status-modal.tone-incoming{background:linear-gradient(#fefce8 0%,#fff 24%);border-color:#fde68a}.operativo-status-modal.tone-done{background:linear-gradient(#f0fdf4 0%,#fff 24%);border-color:#86efac}.operativo-status-summary{background:#f8fafc;border:1px solid #dbe3ee;border-radius:10px;margin-bottom:12px;padding:10px}.operativo-status-summary p{color:#334155;margin:0;font-size:13px}.operativo-status-summary p+p{margin-top:6px}.operativo-status-select{color:#334155;gap:6px;max-width:360px;font-size:13px;display:grid}.operativo-status-select select{font:inherit;border:1px solid #cbd5e1;border-radius:8px;padding:10px}.operativo-postazioni-layout{grid-template-columns:minmax(0,1fr) 280px;align-items:start;gap:12px;display:grid}.operativo-postazioni-board{min-height:620px}.operativo-dashboard-grid{grid-template-columns:repeat(2,minmax(280px,1fr));gap:12px;display:grid}.operativo-dashboard-card{min-height:180px}.operativo-dashboard-card h3{color:#0f172a;margin:0 0 10px;font-size:16px}.operativo-dashboard-card.urgent{background:#fff7ed;border-color:#fdba74}.operativo-dashboard-card.working{background:#eff6ff;border-color:#93c5fd}.operativo-dashboard-card.incoming{background:#fefce8;border-color:#fde68a}.operativo-dashboard-list{gap:8px;display:grid}.operativo-dashboard-row{background:#fff;border:1px solid #dbe3ee;border-radius:8px;justify-content:space-between;align-items:center;gap:8px;padding:8px 10px;display:flex}@media (width<=900px){.operativo-dashboard-grid{grid-template-columns:1fr}}.tariff-inline-grid{grid-template-columns:repeat(4,minmax(180px,1fr));gap:10px;display:grid}.tariff-inline-grid label{color:#334155;gap:6px;font-size:13px;display:grid}.tariff-inline-grid input,.tariff-inline-grid select{font:inherit;border:1px solid #cbd5e1;border-radius:8px;padding:10px}.form-actions{justify-content:flex-end;gap:10px;margin-top:16px;display:flex}.tariffe-modal-controls{margin-bottom:12px}.tariffe-modal-controls label{color:#334155;gap:6px;max-width:220px;font-size:13px;display:grid}.tariffe-modal-controls input{font:inherit;border:1px solid #cbd5e1;border-radius:8px;padding:10px}.matrix-table-wrapper{background:#f8fafc;border-radius:10px;padding:0;position:relative;overflow:auto}.matrix-table{border-collapse:separate;border-spacing:0;min-width:max-content;margin:0}.matrix-table th,.matrix-table td{white-space:nowrap;text-align:center;position:relative}.matrix-postazione-head{align-items:center;gap:6px;display:inline-flex}.matrix-table th:first-child,.matrix-table td:first-child{z-index:5;text-align:left;background:#fff padding-box padding-box;border-right:1px solid #e2e8f0;width:170px;min-width:150px;max-width:170px;padding-left:10px;padding-right:10px;position:sticky;left:0;overflow:hidden;box-shadow:12px 0 14px -12px #0f172a73}.matrix-table thead th:first-child{z-index:6}.matrix-table th:first-child:after,.matrix-table td:first-child:after{content:"";pointer-events:none;background:linear-gradient(90deg,#fff 0%,#ffffff59 100%);width:8px;height:100%;position:absolute;top:0;right:-1px}.matrix-row-label{color:#1e293b;background:#f8fafc;font-weight:700}.matrix-cell-btn{cursor:pointer;width:100%;font:inherit;color:#1e293b;background:#fff;border:1px solid #cbd5e1;border-radius:6px;padding:6px 8px}.matrix-cell-btn:hover{border-color:var(--accent-gold);background:#fff9ea}.matrix-cell-btn.selected{border-color:var(--accent-gold);background:#d4a0172e;font-weight:700}.price-preview-box{color:#1e293b;background:#f8fafc;border:1px solid #cbd5e1;border-radius:8px;min-height:20px;padding:10px;font-weight:600}.inline-actions{margin-top:8px}.prenotazione-layout{grid-template-columns:minmax(0,1.2fr) minmax(460px,1fr);align-items:start;gap:16px;display:grid}.prenotazione-left,.prenotazione-right{min-width:0}.form-grid-prenotazione{margin-bottom:14px}.price-highlight-card{background:linear-gradient(#fff 0%,#f8fafc 100%);border:1px solid #e2e8f0;border-radius:10px;padding:12px}.price-highlight-head{justify-content:space-between;align-items:center;gap:10px;margin-bottom:10px;display:flex}.price-highlight-head h3,.postazione-panel h3{color:#1e293b;margin:0;font-size:15px}.price-preview-box-highlight{background:#fffdf5;border-color:#e5d39d;min-height:28px;font-size:18px;font-weight:700}.price-preview-lines{color:#475569;margin-bottom:6px;font-size:14px;font-weight:600;line-height:1.35}.price-preview-total-strong{color:#0f172a;font-size:20px;font-weight:800;line-height:1.2}.tariff-modal-explainer{margin:0 0 12px}.postazione-panel{background:#fff;border:1px solid #dbe3ee;border-radius:10px;min-height:560px;padding:12px;box-shadow:inset 0 1px #fffc}.postazione-panel-head{justify-content:space-between;align-items:center;gap:10px;margin-bottom:8px;display:flex}.postazione-panel-badge{text-transform:uppercase;letter-spacing:.04em;color:#334155;background:#eef2ff;border:1px solid #cbd5e1;border-radius:999px;padding:4px 8px;font-size:11px}.postazione-panel-subtitle{color:#64748b;margin:0 0 12px;font-size:13px}.postazione-panel-body{background:#f8fafc;border:1px dashed #cbd5e1;border-radius:8px;padding:12px}.postazione-selected{color:#1e293b;margin-bottom:8px;font-weight:700}.prenotazione-map-board{background-color:#f8fafc;background-image:linear-gradient(90deg,#94a3b81a 1px,#0000 1px),linear-gradient(#94a3b81a 1px,#0000 1px);background-size:calc(100% / var(--prenotazione-map-cols,12)) calc(100% / var(--prenotazione-map-rows,16)), calc(100% / var(--prenotazione-map-cols,12)) calc(100% / var(--prenotazione-map-rows,16));border:1px dashed #cbd5e1;border-radius:8px;min-height:500px;margin-bottom:8px;position:relative;overflow:hidden}.prenotazione-map-dot{z-index:2;position:absolute;transform:translate(-50%,-50%)}.prenotazione-map-dot:hover{box-shadow:none;transform:translate(-50%,-50%)}.prenotazione-map-dot .spiaggia-dot-inner{background:var(--tipologia-color,#d4a017);border:1px solid #ffffffe6}.prenotazione-map-dot.spiaggia-state-disponibile{background:#f0fdf4;border-color:#22c55e}.prenotazione-map-dot.spiaggia-state-in-arrivo{cursor:not-allowed;background:#fffbeb;border-color:#f59e0b}.prenotazione-map-dot.spiaggia-state-occupato{cursor:not-allowed;background:#fef2f2;border-color:#ef4444}.prenotazione-map-dot.spiaggia-state-manutenzione{cursor:not-allowed;background:#f1f5f9;border-color:#64748b}.prenotazione-map-dot.spiaggia-state-conflitto{cursor:pointer;background:#fff7ed;border-color:#ea580c}.spiaggia-dot-btn.spiaggia-state-conflitto{background:#fff7ed;border-color:#ea580c}.prenotazione-map-dot.selected{background:var(--tipologia-color,#d4a017);z-index:3;box-shadow:0 0 0 2px #0f172a2e}.abb-overwrite-move-list{max-height:240px;margin:0 0 1rem;padding-left:1.25rem;overflow:auto}.abb-overwrite-move-list li{margin-bottom:.35rem}.prenotazione-map-dot.selected:before{content:"";width:calc(100% / var(--prenotazione-map-cols,12));height:calc(100% / var(--prenotazione-map-rows,16));background:color-mix(in srgb, var(--tipologia-color,#d4a017) 26%, white);border:1px solid color-mix(in srgb, var(--tipologia-color,#d4a017) 70%, black);z-index:-1;pointer-events:none;border-radius:6px;min-width:22px;min-height:22px;animation:1.2s ease-in-out infinite selectedCellPulse;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);box-shadow:0 2px 8px #0f172a29}@keyframes selectedCellPulse{0%{transform:translate(-50%,-50%)scale(1);box-shadow:0 2px 8px #0f172a29}50%{transform:translate(-50%,-50%)scale(1.06);box-shadow:0 0 0 4px #3b82f629,0 6px 14px #0f172a33}to{transform:translate(-50%,-50%)scale(1);box-shadow:0 2px 8px #0f172a29}}.prenotazione-map-dot.selected .spiaggia-dot-inner{background:#fff;border-color:#fffffff2}@media (width<=900px){#app{height:auto;min-height:100vh}.app-layout{height:auto;min-height:100vh;overflow:visible}.topbar{gap:8px;padding:0 10px}.topbar-left,.topbar-actions{min-width:0}.topbar-actions{flex:1;justify-content:flex-end}.brand{white-space:nowrap;text-overflow:ellipsis;max-width:110px;font-size:15px;overflow:hidden}.topbar-actions{gap:6px}.topbar-user-chip{text-overflow:ellipsis;white-space:nowrap;max-width:130px;overflow:hidden}.topbar-action{padding:6px 8px;font-size:12px}.workspace{height:auto;min-height:calc(100vh - 64px);display:block}.sidebar{border-bottom:1px solid #1f2937;border-right:0;width:100%;max-height:none;padding:8px 10px;position:static;overflow-y:hidden}.workspace.sidebar-collapsed .sidebar{opacity:1;pointer-events:none;padding:0;display:none}.sidebar ul{white-space:nowrap;gap:8px;padding-bottom:2px;display:flex;overflow-x:auto}.sidebar li{display:inline-flex}.sidebar-link{border-radius:999px;padding:8px 12px;font-size:13px}.sidebar-submenu{display:none}.main-content{padding:14px;overflow:hidden visible}.spiaggia-editor-head-tools{width:100%}.spiaggia-editor-grid-select{min-width:140px}.spiaggia-dot-btn{width:28px;height:28px}.spiaggia-dot-btn .spiaggia-dot-inner{width:11px;height:11px}.spiaggia-main-left{-webkit-overflow-scrolling:touch;overflow-x:auto}.spiaggia-attuale-map-board{min-width:680px}.spiaggia-attuale-map-board .spiaggia-dot-btn{border-width:2px;width:22px;height:22px}.spiaggia-attuale-map-board .spiaggia-dot-btn .spiaggia-dot-inner{width:8px;height:8px}.spiaggia-main-layout{grid-template-columns:1fr}.spiaggia-main-right{position:static}.page-header,.form-section-header,.breadcrumb-bar{flex-direction:column}.form-grid,.prenotazione-layout,.postazioni-grid{grid-template-columns:1fr}.table-card{overflow-x:auto}.tariff-row{grid-template-columns:1fr;gap:6px}.tariff-inline-grid{grid-template-columns:1fr}}@media (width<=560px){.brand{max-width:84px;font-size:14px}.topbar-user-chip{max-width:95px;padding:6px 8px;font-size:11px}.topbar-action{padding:6px 7px;font-size:11px}}
