/*
 * Sala Operativa 2.2.5 — closure layer on top of ds-224.css.
 * Everything is scoped under plugin roots (.so-app-shell, .so-client-portal,
 * .so-wrap, so-focus-*) so the WordPress theme is never restyled.
 */

/* ---------------------------------------------------------------- topbar */
.so-app-topbar{gap:10px;flex-wrap:wrap}
.so-app-topbar .so-refresh-btn{display:inline-flex;align-items:center;gap:6px;font-weight:600}
.so-app-topbar .so-refresh-btn::before{content:"\21BB";font-size:1.05em;line-height:1}
.so-app-topbar .so-refresh-btn.is-loading::before{animation:so-spin .8s linear infinite;display:inline-block}
@keyframes so-spin{to{transform:rotate(360deg)}}

/* ---------------------------------------------------------- busy buttons */
.so-wrap .so-btn.is-loading,.so-wrap .so-ix-btn.is-loading{opacity:.7;cursor:progress}
.so-wrap .so-btn[disabled],.so-wrap .so-ix-btn[disabled]{opacity:.55;cursor:not-allowed}

/* ------------------------------------------------ feedback under buttons */
.so-wrap .so-crm-msg,.so-wrap .so-inline-msg{
  margin:8px 0 0;padding:8px 12px;border-radius:10px;font-size:.88rem;line-height:1.35;
  border:1px solid var(--ds-line,#EAE3DB);background:var(--ds-surface-2,#FFFDF9);color:var(--ds-muted,#5F6B75)
}
.so-wrap .so-crm-msg:empty,.so-wrap .so-inline-msg:empty{display:none}
.so-wrap [data-status="success"].so-crm-msg,.so-wrap [data-status="success"].so-inline-msg{background:var(--ds-ok-soft,#E3F3E9);border-color:transparent;color:var(--ds-ok,#2F7D57)}
.so-wrap [data-status="error"].so-crm-msg,.so-wrap [data-status="error"].so-inline-msg{background:var(--ds-err-soft,#FDECEE);border-color:transparent;color:var(--ds-err,#B42335)}
.so-wrap .so-input.is-invalid,.so-wrap .so-select.is-invalid{border-color:var(--ds-err,#B42335)!important;box-shadow:0 0 0 3px rgba(180,35,53,.12)}

/* ------------------------------------------------------------------ CRM */
.so-app-shell .so-crm-toolbar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:4px 0 12px}
.so-app-shell .so-crm-toolbar .so-input{flex:1 1 240px;min-width:0;margin:0}
.so-app-shell .so-crm-views{display:flex;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.so-app-shell .so-crm-views .so-chip.is-active{background:var(--ds-coral-soft);border-color:var(--ds-coral);color:var(--ds-coral-ink)}
.so-app-shell .so-crm-filters{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px 14px;align-items:end;
  padding:14px;margin:0 0 14px;border:1px solid var(--ds-line);border-radius:var(--ds-radius);background:var(--ds-surface-2)
}
.so-app-shell .so-crm-filters[hidden]{display:none}
.so-app-shell .so-crm-filters .so-label{margin-top:0}
.so-app-shell .so-crm-filters .so-crm-row{grid-column:1/-1}
.so-app-shell .so-crm-back{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin:0 0 12px}
.so-app-shell .so-crm-view-title{margin:0;font-family:var(--ds-serif);font-size:1.35rem;font-weight:600}
.so-app-shell .so-crm-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px}
.so-app-shell .so-crm-card{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius);box-shadow:var(--ds-shadow);padding:14px 16px}
.so-app-shell .so-crm-card h3{margin:0 0 6px;font-size:1.02rem}
.so-app-shell .so-crm-card p{margin:2px 0;color:var(--ds-muted);font-size:.9rem}
.so-app-shell .so-crm-detail h2{font-family:var(--ds-serif);margin-top:0}
.so-app-shell .so-crm-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:10px 0}
.so-app-shell .so-crm-tagrow .so-label{margin:0}
.so-app-shell .so-crm-tagrow .so-input{max-width:240px;margin:0}

/* ---------------------------------------------------- grouped editors */
.so-wrap .so-crm-editor,.so-wrap .so-editor-form{max-width:1100px}
.so-wrap .so-fieldset{border:1px solid var(--ds-line,#EAE3DB);border-radius:var(--ds-radius,14px);padding:12px 16px 14px;margin:0 0 14px;background:var(--ds-surface,#fff);min-width:0}
.so-wrap .so-fieldset legend{padding:0 6px;font-weight:600;color:var(--ds-champagne-ink,#7A5B33);font-size:.82rem;letter-spacing:.06em;text-transform:uppercase}
.so-wrap .so-grid-2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 14px}
.so-wrap .so-grid-3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0 14px}
.so-wrap .so-sticky-actions{position:sticky;bottom:0;z-index:2;background:linear-gradient(to top,var(--ds-bg,#FAF8F5) 70%,rgba(250,248,245,0));padding:12px 0 6px;margin:0}
.so-app-shell .so-label{color:var(--ds-text);font-weight:600;font-size:.84rem}
.so-app-shell .so-input,.so-app-shell .so-select,.so-app-shell textarea{color:var(--ds-text);font-size:15px}
@media (max-width:900px){.so-wrap .so-grid-3{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:600px){.so-wrap .so-grid-2,.so-wrap .so-grid-3{grid-template-columns:minmax(0,1fr)}}

/* ------------------------------------------------- couple: private agenda */
.so-client-portal .so-my-appts{display:grid;gap:10px}
.so-client-portal .so-my-appt{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap;padding:12px 14px;border:1px solid var(--ds-line);border-radius:var(--ds-radius);background:var(--ds-surface)}
.so-client-portal .so-my-appt h4{margin:0 0 4px;font-size:1rem}
.so-client-portal .so-my-appt .so-badge{font-size:.75rem;border-radius:999px;padding:2px 8px;background:var(--ds-blush);color:var(--ds-blush-ink)}
.so-client-portal .so-my-appt .so-badge.is-shared{background:var(--ds-ok-soft);color:var(--ds-ok)}
.so-client-portal .so-appt-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px;padding:14px;border:1px solid var(--ds-line);border-radius:var(--ds-radius);background:var(--ds-surface-2);margin:0 0 12px}
.so-client-portal .so-appt-form .so-full{grid-column:1/-1}
@media (max-width:600px){.so-client-portal .so-appt-form{grid-template-columns:minmax(0,1fr)}}

/* ----------------------------------------------------- approvals (staff) */
.so-app-shell .so-resp-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px;margin:8px 0}
.so-app-shell .so-resp{border:1px solid var(--ds-line);border-radius:10px;padding:8px 10px;background:var(--ds-surface)}
.so-app-shell .so-resp b{display:block}
.so-app-shell .so-resp[data-state="approved"]{border-color:var(--ds-ok);background:var(--ds-ok-soft)}
.so-app-shell .so-resp[data-state="rejected"],.so-app-shell .so-resp[data-state="changes_requested"]{border-color:var(--ds-warn);background:var(--ds-warn-soft)}

/* --------------------------------------------------------- app focus mode */
html.so-focus-mode,body.so-focus-mode{overflow:hidden!important}
body.so-focus-mode .so-wrap.is-focus{
  position:fixed!important;inset:0!important;z-index:99990;margin:0!important;max-width:none!important;width:100vw!important;
  height:100vh;height:100dvh;overflow:auto;border-radius:0!important;background:var(--ds-bg,#FAF8F5)
}
body.so-focus-mode .so-wrap.is-focus .so-app-shell{min-height:100%}
body.so-focus-mode #wpadminbar{display:none!important}
.so-focus-exit{
  position:fixed;right:12px;top:10px;z-index:99999;border:0;border-radius:999px;padding:7px 12px;font-size:12px!important;opacity:.92;
  background:#14212B;color:#fff;font:600 14px/1.2 ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;
  box-shadow:0 6px 18px rgba(0,0,0,.2);cursor:pointer
}
.so-focus-exit[hidden]{display:none}
body.so-focus-mode .so-pwa-install-float{display:none!important}

/* ------------------------------------------------- no accidental h-scroll */
.so-wrap,.so-app-shell,.so-app-main,.so-app-content,.so-client-portal{max-width:100%;min-width:0}
.so-app-main{overflow-x:hidden}
.so-wrap img,.so-wrap video{max-width:100%;height:auto}
.so-wrap table{max-width:100%}
.so-wrap .so-table-wrap,.so-wrap .so-scroll-x{overflow-x:auto;-webkit-overflow-scrolling:touch}
@media (max-width:768px){
  .so-app-topbar .so-search{flex:1 1 100%;order:5}
  .so-app-topbar .so-refresh-btn{order:1}
}
.so-app-shell [data-crm-list-chrome][hidden],.so-wrap [hidden].so-crm-msg{display:none!important}

/* ---------------------------------------------- users & permissions */
.so-app-shell .so-dir-head{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.so-app-shell .so-dir-head h2{margin:0}
.so-app-shell .so-dir-sub{margin:22px 0 8px;font-family:var(--ds-serif);font-size:1.25rem}
.so-app-shell .so-dir-events,.so-app-shell .so-dir-caps{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:6px 12px;max-height:240px;overflow:auto;padding:6px 2px}
.so-app-shell .so-check{display:flex;gap:8px;align-items:center;font-size:.9rem;color:var(--ds-text)}
.so-app-shell .so-dir-user{display:block}
.so-app-shell .so-dir-status[data-status="active"]{color:var(--ds-ok)}
.so-app-shell .so-dir-status[data-status="suspended"],.so-app-shell .so-dir-status[data-status="disabled"]{color:var(--ds-err)}
.so-app-shell .so-dir-access{margin-top:10px;padding:12px;border:1px dashed var(--ds-line);border-radius:12px}
.so-app-shell .so-dir-access[hidden],.so-app-shell .so-dir-evbox[hidden]{display:none}
.so-app-shell .so-dir-roles,.so-app-shell .so-dir-history{margin-top:16px}
.so-app-shell .so-dir-roles summary,.so-app-shell .so-dir-history summary{cursor:pointer;font-weight:600}

/* ------------------------------------------- topbar event selector */
.so-app-topbar .so-topbar-event{display:flex;align-items:center;min-width:0;flex:0 1 260px}
.so-app-topbar .so-topbar-event .so-select{width:100%;min-width:0;margin:0;height:40px;border-radius:12px;border:1px solid var(--ds-line);background:var(--ds-surface);font-weight:600;color:var(--ds-text)}
@media (max-width:768px){.so-app-topbar .so-topbar-event{flex:1 1 100%;order:4}}

/* ------------------------------------------ compact archive cards */
.so-app-shell .so-arc-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px}
.so-app-shell .so-arc-pic{aspect-ratio:16/9;max-height:170px}
.so-app-shell .so-arc-card .so-ix{margin:0}

/* ---------------------------------------------- staff calm accents */
.so-app-shell .so-btn-primary{background:var(--ds-coral);border-color:var(--ds-coral);color:#fff}
.so-app-shell .so-btn-primary:hover{background:var(--ds-coral-ink);border-color:var(--ds-coral-ink)}
.so-app-shell .so-card{background:var(--ds-surface);border:1px solid var(--ds-line);border-radius:var(--ds-radius-lg);box-shadow:var(--ds-shadow)}
.so-app-shell h1,.so-app-shell h2,.so-app-shell .so-title{font-family:var(--ds-serif);color:var(--ds-text)}
.so-app-shell .so-hint{color:var(--ds-muted)}
.so-app-shell .so-modal-card{max-height:calc(100vh - 32px);display:flex;flex-direction:column}
.so-app-shell .so-modal-body{overflow:auto;overscroll-behavior:contain}
.so-wrap .so-table{width:100%;border-collapse:collapse;font-size:.88rem}
.so-wrap .so-table th,.so-wrap .so-table td{padding:6px 8px;border-bottom:1px solid var(--ds-line,#EAE3DB);text-align:left;white-space:nowrap}
.so-wrap .so-table th{background:var(--ds-surface-2,#FFFDF9);font-weight:600}

/* ------------------------------------------------ couple portal */
.so-client-portal .so-cl-sub{margin:0 0 18px}
.so-client-portal .so-cl-sub .so-row{display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap}
.so-client-portal .so-tl-item.is-mine .so-tl-card{border-left:3px solid var(--ds-blush-ink,#A2475A)}
.so-client-portal .so-check{display:flex;gap:8px;align-items:center}
.so-client-portal .so-inline-msg.is-ok{background:var(--ds-ok-soft);color:var(--ds-ok);padding:8px 12px;border-radius:10px}
.so-client-portal .so-inline-msg.is-err{background:var(--ds-err-soft);color:var(--ds-err);padding:8px 12px;border-radius:10px}
.so-app-shell .so-cmp-pref{margin-top:8px}
.so-app-shell .so-cmp-pref form{display:grid;gap:6px;margin-top:6px;max-width:420px}
.so-app-shell .so-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 12px}
.so-app-shell .so-toolbar .so-input{flex:1 1 220px;margin:0}

/* login page */
.so-plugin-login .so-card{max-width:440px;margin:24px auto;border-radius:18px;box-shadow:0 6px 24px rgba(25,35,44,.08)}
.so-plugin-login .so-login-title{font-family:"Cormorant Garamond",Georgia,serif;font-size:1.4rem;margin:0 0 6px}
.so-plugin-login .so-login-code{margin-top:12px}
.so-plugin-login .so-login-code summary{cursor:pointer;color:#5F6B75}

/* app-mode toggle: a normal topbar/header button, never floating over controls */
.so-wrap .so-focus-toggle{font-size:.85rem;white-space:nowrap;width:auto!important}
.so-wrap .so-focus-toggle.is-active{background:var(--ds-navy,#14212B);border-color:var(--ds-navy,#14212B);color:#fff}
.so-client-portal .so-client-header .so-focus-toggle{order:9}
@media (max-width:768px){.so-pwa-install-float{bottom:84px!important}}
.so-app-shell .so-pw-change{margin:8px 0}.so-app-shell .so-pw-change summary{cursor:pointer;font-weight:600}.so-app-shell .so-pw-change form{display:grid;gap:4px;margin-top:6px}

/* =====================================================================
   2.2.5 polish — staff shell, archives, couple portal, agenda, Wedding Day.
   Tokens from ds-224 (dark mode inherits automatically).
   ===================================================================== */

/* ---- sidebar: groups, champagne active item, profile footer */
.so-app-sidebar .so-side-group{margin:14px 10px 4px;font-size:10.5px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:#7F8E9B}
.so-app-sidebar .so-side-group[hidden]{display:none}
.so-app-sidebar .so-tab.is-active{background:rgba(239,216,184,.13)!important;color:var(--ds-champagne,#EFD8B8)!important}
.so-app-sidebar .so-tab.is-active .so-ico{background-color:var(--ds-champagne,#EFD8B8)}
.so-app-sidebar [data-so-side="comparisons"] .so-ico{-webkit-mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='7' height='16' rx='1.5'/%3E%3Crect x='14' y='4' width='7' height='16' rx='1.5'/%3E%3Cpath d='M6.5 9h0M17.5 9h0M6.5 13h0M17.5 13h0'/%3E%3C/svg%3E");mask-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='1.7' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='4' width='7' height='16' rx='1.5'/%3E%3Crect x='14' y='4' width='7' height='16' rx='1.5'/%3E%3Cpath d='M6.5 9h0M17.5 9h0M6.5 13h0M17.5 13h0'/%3E%3C/svg%3E")}
.so-app-sidebar .so-sidebar-brand div > span{display:block;margin-top:2px;color:#C9D3DC;font-size:.8rem;line-height:1.25}
.so-app-sidebar .so-sidebar-user{display:flex;align-items:center;gap:10px;padding:12px 8px 0;border-top:1px solid var(--ds-navy-line);font-size:.82rem;color:#C9D3DC}
.so-app-sidebar .so-sidebar-user strong{display:block;color:#fff;font-weight:600}
.so-app-sidebar .so-sidebar-user small{display:block;color:#9FB0BF}
.so-app-sidebar .so-avatar{flex:0 0 32px;width:32px;height:32px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--ds-champagne,#EFD8B8);color:var(--ds-navy,#14212B);font-weight:700}

/* ---- buttons: coral = primary, champagne = secondary, ghost = tertiary */
.so-app-shell .so-btn-champagne,.so-wrap .so-btn-champagne{background:var(--ds-champagne);border-color:var(--ds-champagne-2);color:var(--ds-champagne-ink)}
.so-app-shell .so-btn-champagne:hover{background:var(--ds-champagne-2)}
.so-app-shell .so-btn:focus-visible,.so-client-portal .so-btn:focus-visible{outline:none;box-shadow:var(--ds-focus)}
.so-app-shell .so-btn,.so-client-portal .so-btn{min-height:40px;border-radius:12px;transition:background .15s ease,border-color .15s ease,box-shadow .15s ease}
.so-app-shell .so-linkbtn,.so-wrap .so-linkbtn{background:none;border:0;padding:0;color:var(--ds-coral-ink);font:inherit;font-weight:600;text-decoration:underline;cursor:pointer}
.so-app-shell .so-panel-lead{margin:0 0 12px;color:var(--ds-muted);font-size:.9rem}

/* ---- dashboard rhythm */
.so-app-shell .so-app-content{padding:22px 26px 40px}
.so-app-shell .so-event-bar{border-radius:var(--ds-radius-lg);box-shadow:var(--ds-shadow)}
.so-app-shell .so-panel[data-so-panel="dashboard"] .so-card{padding:18px 20px}
.so-app-shell .so-panel[data-so-panel="dashboard"] h2,.so-app-shell .so-panel[data-so-panel="dashboard"] h3{font-family:var(--ds-serif);font-weight:600;letter-spacing:.005em}
@media (max-width:768px){.so-app-shell .so-app-content{padding:14px 12px 96px}}

/* ---- archives: compact cards, real photos, quiet reactions */
.so-app-shell .so-arc-card{overflow:hidden;transition:box-shadow .15s ease,transform .15s ease}
.so-app-shell .so-arc-card:hover{box-shadow:0 2px 4px rgba(25,35,44,.05),0 12px 28px rgba(25,35,44,.08)}
.so-app-shell .so-arc-pic img{object-fit:cover;width:100%;height:100%}
.so-app-shell .so-arc-body{padding:12px 14px 6px}
.so-app-shell .so-arc-name{font-family:var(--ds-serif);font-size:1.15rem;margin:0 0 4px}
.so-app-shell .so-arc-meta{font-size:.84rem;color:var(--ds-muted)}
.so-app-shell .so-arc-card .so-ix{padding:0 14px}
.so-app-shell .so-arc-card .so-ix .so-ix-btn,.so-app-shell .so-arc-card .so-ix button{min-height:30px;padding:3px 9px;font-size:.78rem;border-radius:999px}
.so-app-shell .so-arc-actions{padding:8px 14px 14px;gap:8px}

/* ---- editor: sticky actions and sharing column */
.so-app-shell .so-ed-bar{position:sticky;top:0;z-index:5;background:var(--ds-surface-2);box-shadow:0 1px 0 var(--ds-line)}
.so-app-shell .so-ed-status{font-size:.82rem;color:var(--ds-ok);margin-right:4px}
.so-app-shell .so-ed-status[data-ok="0"]{color:var(--ds-err)}
.so-app-shell .so-ed-status.is-dirty{color:var(--ds-warn)}
@media (min-width:1100px){.so-app-shell .so-ed-aside{position:sticky;top:76px;align-self:start;max-height:calc(100vh - 96px);overflow:auto}}
.so-app-shell .so-share-summary{margin:12px 0 0;padding:10px 12px;border-radius:10px;background:var(--ds-ok-soft);color:var(--ds-ok);font-size:.85rem}
.so-app-shell .so-ph-cover img,.so-app-shell .so-ph-grid img{object-fit:cover}

/* ---- Confronti preferences */
.so-app-shell .so-cmp-pref summary{cursor:pointer;color:var(--ds-champagne-ink);font-weight:600;font-size:.85rem}

/* ---- couple header (2.2.8): identity + profile on row 1, sections on their own row.
   Desktop wraps, tablet scrolls with real arrows, phone uses the Menu list. Nothing hidden. */
.so-client-portal .so-client-header{flex-wrap:wrap;row-gap:8px}
.so-client-portal .so-client-header #soClientTop{display:contents}
.so-client-portal .so-client-header .so-client-brand{order:1}
.so-client-portal .so-client-header .so-client-id{order:2;flex:1 1 auto;border-right:0;padding-right:0;min-width:0}
.so-client-portal .so-client-header .so-client-id strong{overflow:hidden;text-overflow:ellipsis}
.so-client-portal .so-client-header .so-client-menu{order:3}
.so-client-portal .so-client-header .so-theme{order:4}
.so-client-portal .so-client-header .so-focus-toggle{order:5}
.so-client-portal .so-client-header .so-nav-toggle{order:0}
.so-client-portal .so-nav-rail{order:10;flex:1 1 100%;min-width:0;display:flex;align-items:center;gap:6px;border-top:1px solid var(--ds-line);padding-top:8px}
.so-client-portal .so-nav-rail .so-client-nav{flex:1 1 auto;min-width:0;display:flex;flex-wrap:wrap;overflow:visible;gap:4px 6px;margin:0}
.so-client-portal .so-client-nav button{white-space:nowrap;font-size:14px;padding:8px 12px;flex:0 0 auto}
.so-client-portal .so-client-nav .so-badge-count{margin-left:4px;flex:0 0 auto}
.so-client-portal .so-nav-arrow{display:none;flex:0 0 auto;width:36px;height:36px;min-height:36px;border-radius:999px;border:1px solid var(--ds-champagne,#EFD8B8);background:var(--ds-surface,#FFFDF9);color:var(--ds-navy,#14212B);font-size:20px;line-height:1;cursor:pointer;align-items:center;justify-content:center;padding:0}
.so-client-portal .so-nav-arrow:hover:not(:disabled){background:var(--ds-blush,#F6E3E3)}
.so-client-portal .so-nav-arrow:focus-visible{outline:2px solid var(--ds-navy,#14212B);outline-offset:2px}
.so-client-portal .so-nav-arrow:disabled{opacity:.35;cursor:default}
.so-client-portal .so-nav-more{display:none;font-size:12px;color:var(--ds-muted);white-space:nowrap}
@media (min-width:721px){.so-client-portal .so-client-header .so-nav-toggle{display:none}}
@media (min-width:721px) and (max-width:1024px){
  .so-client-portal .so-client-header .so-client-id{border-right:0}
  .so-client-portal .so-nav-rail .so-client-nav{flex-wrap:nowrap;overflow-x:auto;scroll-behavior:smooth;scrollbar-width:thin;scroll-padding:0 12px;overscroll-behavior-x:contain}
  .so-client-portal .so-nav-rail.has-overflow .so-nav-arrow{display:inline-flex}
  .so-client-portal .so-nav-rail.has-overflow .so-nav-more{display:inline}
  .so-client-portal .so-nav-rail.can-next .so-client-nav{-webkit-mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent)}
  .so-client-portal .so-nav-rail.can-prev .so-client-nav{-webkit-mask-image:linear-gradient(to left,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to left,#000 calc(100% - 28px),transparent)}
  .so-client-portal .so-nav-rail.can-prev.can-next .so-client-nav{-webkit-mask-image:linear-gradient(to right,transparent,#000 28px,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(to right,transparent,#000 28px,#000 calc(100% - 28px),transparent)}
}
@media (max-width:720px){
  .so-client-portal .so-client-header .so-nav-toggle{display:inline-flex;align-items:center;gap:6px}
  .so-client-portal .so-client-header .so-nav-toggle[aria-expanded="true"]{background:var(--ds-blush,#F6E3E3);color:var(--ds-blush-ink,#7A3B45)}
  .so-client-portal .so-nav-rail{display:none;border-top:0;padding-top:0}
  .so-client-portal.is-nav-open .so-nav-rail{display:block}
  .so-client-portal .so-client-nav,
  .so-client-portal.is-nav-open .so-client-nav{position:static;display:flex;flex-direction:column;flex-wrap:nowrap;align-items:stretch;gap:2px;padding:6px;background:var(--ds-surface-2,#FFFDF9);border:1px solid var(--ds-line);border-radius:14px;box-shadow:0 12px 24px rgba(20,33,43,.08)}
  .so-client-portal .so-client-nav button{width:100%;text-align:left;min-height:48px;font-size:15.5px;padding:10px 14px;display:flex;align-items:center;justify-content:space-between;white-space:normal}
  .so-client-portal .so-client-nav button.is-active{box-shadow:inset 3px 0 0 var(--ds-blush-ink,#7A3B45)}
  .so-client-portal .so-client-nav .so-btn{margin-left:0}
}
.so-client-portal[data-theme="dark"] .so-nav-arrow{background:var(--ds-surface-2);color:var(--ds-text)}
.so-client-nav .so-badge-count{display:inline-flex;min-width:20px;height:20px;align-items:center;justify-content:center;border-radius:999px;background:var(--ds-coral);color:#fff;font-size:11px;font-weight:700;padding:0 6px}

/* ---- couple approvals: unmistakable state */
.so-client-portal .so-appr-card{border-left:4px solid var(--ds-line)!important}
.so-client-portal .so-appr-card[data-appr-state="todo"]{border-left-color:var(--ds-coral)!important}
.so-client-portal .so-appr-card[data-appr-state="approved"]{border-left-color:var(--ds-ok)!important}
.so-client-portal .so-appr-card[data-appr-state="rejected"]{border-left-color:var(--ds-err)!important}
.so-client-portal .so-appr-card[data-appr-state="change"]{border-left-color:var(--ds-warn)!important}
.so-client-portal .so-appr-badge{display:inline-block;margin-left:6px;padding:2px 10px;border-radius:999px;font-size:.75rem;font-weight:600;vertical-align:middle;background:var(--ds-surface-2);color:var(--ds-muted);border:1px solid var(--ds-line)}
.so-client-portal .so-appr-badge.is-todo{background:var(--ds-coral-soft);color:var(--ds-coral-ink);border-color:transparent}
.so-client-portal .so-appr-badge.is-approved{background:var(--ds-ok-soft);color:var(--ds-ok);border-color:transparent}
.so-client-portal .so-appr-badge.is-rejected{background:var(--ds-err-soft);color:var(--ds-err);border-color:transparent}
.so-client-portal .so-appr-badge.is-change{background:var(--ds-warn-soft);color:var(--ds-warn);border-color:transparent}
.so-client-portal .so-appr-mine{margin-top:6px;font-size:.84rem;color:var(--ds-ok)}
.so-client-portal .so-quote-box{margin-top:10px}
.so-client-portal .so-quote-detail{margin-top:10px;padding:12px;border:1px solid var(--ds-line);border-radius:12px;background:var(--ds-surface)}
.so-client-portal .so-quote-detail[hidden]{display:none}
.so-client-portal .so-quote-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:8px}
.so-client-portal .so-quote-totals{display:flex;gap:14px;justify-content:flex-end;flex-wrap:wrap;margin-top:8px;font-size:.92rem}
.so-client-portal .so-quote-totals strong{font-size:1.05rem}
.so-client-portal .so-table-wrap{overflow-x:auto}

/* ---- agenda / timeline: clean cards, no images, clear state */
.so-wrap .so-tl-card{background:var(--ds-surface,#fff);border:1px solid var(--ds-line,#EAE3DB);border-radius:14px;box-shadow:0 1px 2px rgba(25,35,44,.04);padding:12px 14px}
.so-wrap .so-tl-card img{display:none}
.so-wrap .so-tl-card h3{font-family:var(--ds-serif);font-size:1.05rem;margin:0 0 4px}
.so-wrap .so-tl-meta{margin:2px 0;font-size:.86rem;color:var(--ds-muted,#5F6B75)}
.so-client-portal .so-tl.is-couple .so-tl-dot{background:var(--ds-blush-ink,#A2475A)}
.so-client-portal .so-tl-item.is-wedding .so-tl-card{background:var(--ds-blush,#F6E4E6)}

/* ---- Wedding Day: notes and incidents */
.so-wedding-screen .so-wd-form{display:grid;gap:6px;margin:10px 0;padding:12px;border:1px solid var(--ds-line,#EAE3DB);border-radius:12px;background:#fff}
.so-wedding-screen .so-wd-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
@media (max-width:600px){.so-wedding-screen .so-wd-grid{grid-template-columns:minmax(0,1fr)}}
.so-wedding-screen .so-wd-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.so-wedding-screen .so-wd-note,.so-wedding-screen .so-wd-incident{padding:10px 12px;border:1px solid var(--ds-line,#EAE3DB);border-radius:12px;margin:8px 0;background:#fff}
.so-wedding-screen .so-wd-note p,.so-wedding-screen .so-wd-incident p{margin:2px 0}
.so-wedding-screen .so-wd-inc-head{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.so-wedding-screen .so-wd-badge{padding:2px 9px;border-radius:999px;font-size:.75rem;font-weight:600;background:#F1ECE5;color:#5F6B75}
.so-wedding-screen .so-wd-badge.is-urgent{background:#FDECEE;color:#B42335}
.so-wedding-screen .so-wd-badge.is-high{background:#FBF0D9;color:#9A6A12}
.so-wedding-screen .so-wd-incident.is-urgent{border-left:4px solid #B42335}
.so-wedding-screen .so-wd-incident.is-high{border-left:4px solid #D49A2A}
.so-wedding-screen .so-wd-incident.is-resolved{opacity:.7;border-left-color:#2F7D57}
.so-wedding-screen .so-inline-msg{margin-top:6px;padding:6px 10px;border-radius:8px;font-size:.85rem;background:#F6F1EA}
.so-wedding-screen .so-inline-msg[data-status="success"]{background:#E3F3E9;color:#2F7D57}
.so-wedding-screen .so-inline-msg[data-status="error"]{background:#FDECEE;color:#B42335}

/* ---- documents / budget / materials tables stay inside their card */
.so-app-shell .so-panel[data-so-panel="attachments"] .so-list,.so-app-shell .so-panel[data-so-panel="budget"] .so-list{overflow-x:auto}
.so-app-shell .so-panel[data-so-panel="supply"] table,.so-app-shell .so-panel[data-so-panel="budget"] table,.so-app-shell .so-panel[data-so-panel="reports"] table{display:block;overflow-x:auto;max-width:100%}

/* ---- touch targets and modals on small screens */
@media (max-width:768px){
  .so-app-shell .so-btn,.so-client-portal .so-btn,.so-app-shell .so-chip,.so-client-portal .so-chip{min-height:44px}
  .so-app-shell .so-modal-card,.so-dialog{width:calc(100vw - 16px)!important;max-width:none!important;max-height:calc(100dvh - 16px)}
}
@media (prefers-reduced-motion:reduce){.so-app-shell *,.so-client-portal *{transition:none!important;animation:none!important}}

/* ---- staff topbar on phones: one row of compact controls, then event and search */
@media (max-width:768px){
  .so-app-shell .so-app-topbar{gap:4px;align-items:center}
  .so-app-shell .so-app-topbar .so-nav-toggle,.so-app-shell .so-app-topbar .so-refresh-btn,.so-app-shell .so-app-topbar .so-focus-toggle{font-size:0!important;width:40px!important;min-width:40px;padding:0!important;justify-content:center;flex:0 0 40px}
  .so-app-shell .so-app-topbar .so-nav-toggle::before{content:"☰";font-size:18px}
  .so-app-shell .so-app-topbar .so-refresh-btn::before{content:"↻";font-size:18px}
  .so-app-shell .so-app-topbar .so-focus-toggle::before{content:"⤢";font-size:17px}
  .so-app-shell .so-app-topbar .so-focus-toggle.is-active::before{content:"⤡"}
  .so-app-shell .so-app-topbar .so-icon-btn{min-width:40px;padding:0 10px}
  .so-app-shell .so-app-topbar .so-profile{margin-left:auto}
}
/* ---- couple header on phones: names + compact controls on one row, nav below */
@media (max-width:768px){
  .so-client-portal .so-client-header .so-focus-toggle{font-size:0!important;width:40px!important;min-width:40px;padding:0!important;flex:0 0 40px}
  .so-client-portal .so-client-header .so-focus-toggle::before{content:"⤢";font-size:17px}
  .so-client-portal .so-client-header .so-focus-toggle.is-active::before{content:"⤡"}
}
@media (max-width:768px){.so-client-portal .so-client-header .so-client-brand{display:none}}
/* ---- Wedding Day quick dock */
.so-wedding-screen .so-wedding-nav{background:var(--ds-navy,#14212B);border-top:0;border-radius:14px 14px 0 0;z-index:4}
.so-wedding-screen .so-wedding-nav .so-wedding-btn{background:transparent;border:1px solid rgba(255,255,255,.18);border-radius:12px;color:#fff;font-size:18px;cursor:pointer}
.so-wedding-screen .so-wedding-nav .so-wedding-btn:hover,.so-wedding-screen .so-wedding-nav .so-wedding-btn:focus-visible{background:rgba(239,216,184,.16);border-color:var(--ds-champagne,#EFD8B8);outline:none}
/* ---- Wedding Day "now" strip: compact, never covering content */
.so-wedding-screen .so-wedding-now{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:8px;row-gap:2px;padding:10px 14px;background:var(--ds-navy,#14212B);color:#fff;border:0;box-shadow:0 6px 16px rgba(20,33,43,.18)}
.so-wedding-screen .so-wedding-now > p{margin:0;font-size:.74rem;letter-spacing:.06em;color:#C9D3DC}
.so-wedding-screen .so-wedding-now > strong{margin-right:14px;font-size:.98rem;color:#fff}
.so-wedding-screen .so-wedding-now > p:last-child{flex:1 1 100%;letter-spacing:0}
.so-wedding-screen .so-wedding-row.is-now{font-weight:700;color:var(--ds-coral-ink,#B23A4E)}
body:has(.so-wedding-screen) .so-pwa-install-float{display:none!important}

/* ---- 2.2.8: expense card in approvals, agenda kinds */
.so-client-portal .so-expense-card{margin:10px 0 4px;padding:12px 14px;border-radius:12px;border:1px solid var(--ds-champagne,#EFD8B8);background:var(--ds-surface,#FFFDF9)}
.so-client-portal .so-expense-card .so-label{font-weight:600;color:var(--ds-navy,#14212B);margin-bottom:4px}
.so-client-portal .so-expense-card .so-expense-amount{font-size:1.05rem;margin:4px 0 6px}
.so-client-portal .so-expense-card.is-error{border-color:var(--ds-coral);background:var(--ds-blush,#F6E3E3);color:var(--ds-blush-ink,#7A3B45)}
.so-client-portal .so-badge.so-kind{margin-right:6px}
.so-client-portal .so-badge.so-kind.is-task{background:var(--ds-ok-soft);color:var(--ds-ok)}
.so-client-portal .so-badge.so-kind.is-approval{background:var(--ds-blush,#F6E3E3);color:var(--ds-blush-ink,#7A3B45)}
.so-client-portal .so-badge.so-kind.is-expired{background:#EFE9E3;color:var(--ds-muted);text-decoration:line-through}
.so-client-portal .so-tl-item.is-kind-approval_due[data-tl-state="past"] .so-tl-card{opacity:.75}
.so-client-portal .so-countdown-static{font-size:12px;color:var(--ds-muted)}
.so-client-portal .so-tl-period{justify-content:space-between;align-items:center;flex-wrap:wrap;gap:8px;margin:8px 0}
