/* Bloomly application design system (owner + operator).
   Single source of tokens and shared components; loaded after workspace.css, whose remaining
   rules are page-specific legacy. Public marketing pages use v2.css/v2-public.css instead.
   Font: Inter, SIL OFL 1.1 (static/fonts/Inter-OFL.txt), self-hosted. */

@font-face{font-family:"Inter";font-style:normal;font-weight:400 700;font-display:swap;
  src:url("fonts/inter-latin.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:"Inter";font-style:normal;font-weight:400 700;font-display:swap;
  src:url("fonts/inter-latin-ext.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}

/* ================= 1. Tokens ================= */
:root{
  color-scheme:light;
  --font:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  --canvas:#F5F7FB;--surface:#FFFFFF;--surface-subtle:#EEF2F8;--surface-hover:#E8EDF6;
  --text:#182230;--text-secondary:#475467;--text-muted:#5E6A7E;
  --border:#D8E0EC;--control-border:#7A879C;
  --primary:#3659E3;--primary-hover:#2946C2;--primary-soft:#EAF0FF;--on-primary:#FFFFFF;--primary-text:#2E4FD1;
  /* Mint is a supporting accent (brief: --accent). It is named --mint here because older styles use
     --accent to mean the primary action color; that name now points at cobalt. */
  --mint:#A7E8D5;--mint-ink:#155A4C;
  --accent:var(--primary);--accent-hover:var(--primary-hover);--accent-soft:var(--primary-soft);--on-accent:var(--on-primary);
  --success:#18794E;--success-soft:#EAF7EF;--warning:#925B08;--warning-soft:#FFF5DE;--danger:#B42318;--danger-soft:#FEECEB;
  --navy:#182230;--rail:#FFFFFF;
  --shadow-menu:0 4px 8px -2px rgba(16,24,40,.08),0 12px 24px -6px rgba(16,24,40,.14);
  --shadow-dialog:0 24px 48px -12px rgba(16,24,40,.25);
  --r-sm:6px;--r-md:8px;--r-lg:12px;
  --s1:4px;--s2:8px;--s3:12px;--s4:16px;--s5:20px;--s6:24px;--s7:32px;--s8:40px;--s9:48px;
  --ease:cubic-bezier(.2,0,0,1);
  --rail-w:232px;--rail-w-collapsed:72px;--header-h:64px;
  --focus:0 0 0 2px var(--surface),0 0 0 4px var(--primary);
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --canvas:#0D1421;--surface:#151F30;--surface-subtle:#1B2940;--surface-hover:#22324B;
  --text:#F0F4FA;--text-secondary:#C2CDDD;--text-muted:#98A8BF;
  --border:#2A3A52;--control-border:#6A7E9A;
  --primary:#A5BAFF;--primary-hover:#BED0FF;--primary-soft:#243455;--on-primary:#111A2B;--primary-text:#A5BAFF;
  --mint:#A7E8D5;--mint-ink:#112F28;
  --success:#7DD3A5;--success-soft:#16382C;--warning:#F3CA77;--warning-soft:#3A2D18;--danger:#FFAAA1;--danger-soft:#422523;
  --navy:#F0F4FA;--rail:#111A29;
  --shadow-menu:0 0 0 1px #2A3A52,0 12px 28px -8px rgba(0,0,0,.55);
  --shadow-dialog:0 0 0 1px #2A3A52,0 24px 48px -12px rgba(0,0,0,.6);
}
/* Primary follows a client's brand color when one is set (services/brand_theme.py writes
   --accent* for body[data-workspace-palette=custom]); declared on body so it resolves there. */
body{--brand:var(--primary);--brand-hover:var(--primary-hover);--brand-soft:var(--primary-soft);--on-brand:var(--on-primary);--brand-text:var(--primary-text)}
body[data-workspace-palette="custom"]{--brand:var(--accent);--brand-hover:var(--accent-hover);--brand-soft:var(--accent-soft);--on-brand:var(--on-accent);--brand-text:var(--accent)}
/* Legacy variable names used by workspace.css and earlier v2 components, mapped once. */
body{--ink:var(--text);--muted:var(--text-secondary);--line:var(--border);--field-line:var(--control-border);--subtle:var(--surface-subtle);
  --tint:var(--brand-soft);--citron:var(--brand-soft);--radius:var(--r-lg);
  --v2-canvas:var(--canvas);--v2-surface:var(--surface);--v2-raised:var(--surface);--v2-sunken:var(--surface-subtle);--v2-line:var(--border);
  --v2-line-strong:var(--control-border);--v2-muted:var(--text-secondary);--v2-faint:var(--text-muted);--v2-ink:var(--text);
  --v2-accent:var(--brand);--v2-accent-hover:var(--brand-hover);--v2-accent-soft:var(--brand-soft);--v2-on-accent:var(--on-brand);--v2-accent-text:var(--brand-text);
  --v2-success:var(--success);--v2-success-soft:var(--success-soft);--v2-warning:var(--warning);--v2-warning-soft:var(--warning-soft);
  --v2-danger:var(--danger);--v2-danger-soft:var(--danger-soft);--v2-info:var(--primary-text);--v2-info-soft:var(--primary-soft);
  --v2-radius-sm:var(--r-md);--v2-radius-md:var(--r-lg);--v2-radius-full:999px;--v2-font:var(--font);--v2-scrim:rgba(13,20,33,.45)}
body:not([data-workspace-palette="custom"]){--accent-legacy:var(--brand)}

/* ================= 2. Base ================= */
html{font-family:var(--font);-webkit-text-size-adjust:100%}
body.ws-app,body.ws-owner-app,body.v2-op{margin:0;font:400 14px/21px var(--font);color:var(--text);background:var(--canvas);-webkit-font-smoothing:antialiased;font-feature-settings:"cv11" 1}
body :where(h1,h2,h3,h4){color:var(--text);letter-spacing:normal}
a{color:inherit}
::selection{background:var(--primary-soft)}
:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{outline:none;box-shadow:var(--focus);border-radius:var(--r-md)}
.tnum,time,.ws-count,.v2-count,.v2-num{font-variant-numeric:tabular-nums}
.ws-sr-only,.v2-sr,.sr-only{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.ws-skip,.v2-skip{position:absolute;left:-9999px}
.ws-skip:focus,.v2-skip:focus{left:16px;top:12px;z-index:100;background:var(--surface);color:var(--text);padding:8px 12px;border-radius:var(--r-md);box-shadow:var(--shadow-menu)}
.ws-muted,.v2-muted{color:var(--text-secondary)}

/* ================= 3. Shell (owner + operator) ================= */
.ws-owner-shell,.ws-shell,.v2-op-shell{display:grid;grid-template-columns:var(--rail-w) minmax(0,1fr);min-height:100vh;background:var(--canvas)}
.ws-owner-rail,.ws-rail,.v2-op-rail{grid-column:1;grid-row:1;position:sticky;top:0;inset:auto;width:auto;height:100vh;overflow-y:auto;overflow-x:hidden;z-index:40;
  display:flex;flex-direction:column;gap:4px;padding:16px 12px;background:var(--rail);border-right:1px solid var(--border);color:var(--text-secondary);box-shadow:none}
.ws-owner-main,.ws-main,.v2-op-main{grid-column:2;grid-row:1;min-width:0;background:var(--canvas)}
/* brand / client identity in the rail */
.ws-owner-rail .ws-brand,.ws-rail .ws-brand,.v2-op-brand{display:flex;align-items:center;gap:10px;min-height:48px;padding:4px 8px 12px;margin:0;color:var(--text);text-decoration:none;font-weight:650;font-size:15px}
.ws-owner-rail .ws-brand>span:last-child{display:flex;flex-direction:column;min-width:0;font-size:14px;font-weight:650;line-height:20px}
.ws-owner-rail .ws-brand small{font-size:12px;line-height:18px;font-weight:400;color:var(--text-muted)}
.ws-rail .ws-brand-word{display:flex;flex-direction:column;line-height:20px}
.ws-rail .ws-brand-word small{font-size:12px;font-weight:400;color:var(--text-muted)}
.ws-rail .ws-brand-mark{width:32px;height:32px;display:grid;place-items:center;border-radius:var(--r-md);background:var(--surface-subtle)}
.ws-owner-rail .ws-avatar{width:36px;height:36px;flex:none;border-radius:var(--r-md);background:var(--mint);color:var(--mint-ink);display:grid;place-items:center;font-size:13px;font-weight:700;overflow:hidden;border:0}
.ws-owner-rail .ws-wide-logo{height:36px;max-width:176px;width:auto;object-fit:contain;display:block}
.ws-rail-section-label,.ws-rail-caption{display:none}
/* nav */
.ws-owner-rail .ws-nav,.ws-rail .ws-nav,.v2-op-nav{display:flex;flex-direction:column;gap:2px;margin:4px 0 0;padding:0}
.ws-nav-link,.v2-op-nav a{position:relative;display:flex;align-items:center;gap:12px;min-height:40px;padding:0 12px;border-radius:var(--r-md);color:var(--text-secondary);
  font:500 14px/20px var(--font);text-decoration:none;background:transparent;transition:background-color 120ms var(--ease),color 120ms var(--ease)}
.ws-nav-link .ws-icon{width:20px;height:20px;flex:none}
.ws-nav-link:hover,.v2-op-nav a:hover{background:var(--surface-hover);color:var(--text)}
.ws-nav-link.active,.ws-nav-link[aria-current="page"],.v2-op-nav a.is-active,:root[data-theme="dark"] .ws-nav-link.active{background:var(--brand-soft);color:var(--text);font-weight:600}
.ws-nav-link.active::before,.ws-nav-link[aria-current="page"]::before,.v2-op-nav a.is-active::before{content:"";position:absolute;left:-12px;top:8px;bottom:8px;width:3px;border-radius:0 3px 3px 0;background:var(--brand)}
.ws-nav-link.active .ws-icon,:root[data-theme="dark"] .ws-nav-link.active svg{color:var(--brand-text)}
.ws-owner-rail .ws-nav-link:nth-child(6){margin-top:17px}
.ws-owner-rail .ws-nav-link:nth-child(6)::after{content:"";position:absolute;left:12px;right:12px;top:-9px;border-top:1px solid var(--border)}
/* secondary list */
.ws-business-tools{margin-top:12px;border-top:1px solid var(--border);font-size:14px}
.ws-business-tools summary{display:flex;justify-content:space-between;align-items:center;min-height:36px;padding:8px 12px;color:var(--text-muted);font-size:12px;font-weight:500;cursor:pointer;list-style:none}
.ws-business-tools summary::-webkit-details-marker{display:none}
.ws-business-tools>div{display:grid;gap:2px;padding:0}
.ws-business-tools a{display:flex;justify-content:space-between;align-items:center;min-height:36px;padding:0 12px;border-radius:var(--r-md);color:var(--text-secondary);font-weight:500;text-decoration:none;background:none}
.ws-business-tools a:hover{background:var(--surface-hover);color:var(--text)}
.ws-business-tools b{font-weight:600;color:var(--brand-text);font-variant-numeric:tabular-nums}
.ws-owner-footer,.ws-rail-footer{margin-top:auto;padding:12px 8px 0;border-top:1px solid var(--border);font-size:12px;color:var(--text-muted);display:flex;flex-direction:column;gap:6px}
.ws-rail-footer a,.ws-rail-footer button{display:flex;align-items:center;gap:8px;min-height:36px;padding:0 4px;border:0;background:none;color:var(--text-secondary);font:500 13px var(--font);text-decoration:none;cursor:pointer;border-radius:var(--r-md)}
.ws-rail-footer a:hover,.ws-rail-footer button:hover{color:var(--text)}
.ws-powered{display:flex;align-items:center;gap:8px;color:var(--text-muted)}
.ws-rail-toggle{position:static;order:0;align-self:flex-end;margin:-44px 0 8px;width:32px;height:32px;display:grid;place-items:center;border:1px solid transparent;border-radius:var(--r-md);background:transparent;color:var(--text-muted);cursor:pointer}
.ws-rail-toggle:hover{background:var(--surface-hover);color:var(--text)}
.ws-rail-toggle .ws-icon{width:18px;height:18px}
/* collapsed rail */
body.ws-rail-compact{--rail-w:var(--rail-w-collapsed)}
body.ws-rail-compact :is(.ws-owner-rail,.ws-rail){padding:16px 12px;align-items:center}
body.ws-rail-compact .ws-owner-rail .ws-brand>span:last-child,body.ws-rail-compact .ws-brand-word,body.ws-rail-compact .ws-nav-link span,
body.ws-rail-compact .ws-business-tools,body.ws-rail-compact .ws-owner-footer .ws-powered,body.ws-rail-compact .ws-account-label,body.ws-rail-compact .ws-rail-footer small{display:none}
body.ws-rail-compact .ws-nav-link{width:48px;justify-content:center;padding:0}
body.ws-rail-compact .ws-nav-link.active::before{left:-12px}
body.ws-rail-compact .ws-rail-toggle{margin:0 0 8px;align-self:center}
body.ws-rail-compact .ws-owner-rail .ws-brand,body.ws-rail-compact .ws-rail .ws-brand{padding:4px 0 8px;justify-content:center}
body.ws-rail-compact .ws-wide-logo{max-width:44px}
body.ws-rail-compact .ws-owner-rail .ws-nav-link:nth-child(6)::after{left:4px;right:4px}
@media (prefers-reduced-motion:no-preference){
  .ws-owner-shell,.ws-shell{transition:grid-template-columns 200ms var(--ease)}
}
/* header */
.ws-context{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:12px;min-height:var(--header-h);padding:10px 32px;background:color-mix(in srgb,var(--canvas) 92%,transparent);
  backdrop-filter:blur(8px);border-bottom:1px solid var(--border);box-shadow:none;margin:0}
.ws-context-leading{order:-1;margin-right:auto;display:flex;align-items:center;gap:12px;min-width:0}
.ws-context-leading>strong{font-size:14px;font-weight:600;color:var(--text)}
.ws-context-copy{display:flex;flex-direction:column;min-width:0}
.ws-context-copy strong{font-size:14px;font-weight:600;line-height:20px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-context-copy span{font-size:12px;line-height:18px;color:var(--text-muted)}
.ws-client-context{display:flex;align-items:center;gap:10px;min-width:0}
.ws-client-context .ws-avatar{width:32px;height:32px;border-radius:var(--r-md);background:var(--mint);color:var(--mint-ink);display:grid;place-items:center;font-size:12px;font-weight:700;border:0}
.ws-switcher summary{width:32px;height:32px;display:grid;place-items:center;border-radius:var(--r-md);cursor:pointer;list-style:none;color:var(--text-secondary)}
.ws-switcher summary::-webkit-details-marker{display:none}
.ws-switcher summary:hover{background:var(--surface-hover)}
.ws-switcher-menu,.ws-preferences-menu{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-menu);padding:12px}
.ws-switcher-menu input{width:100%;min-height:40px;padding:8px 12px;border:1px solid var(--control-border);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:15px var(--font);margin:6px 0 8px}
.ws-switcher-menu a{display:flex;align-items:center;min-height:36px;padding:0 10px;border-radius:var(--r-md);color:var(--text);text-decoration:none}
.ws-switcher-menu a:hover,.ws-switcher-menu a[aria-current]{background:var(--surface-hover)}
@media (prefers-reduced-motion:no-preference){
  details[open]>.ws-switcher-menu,details[open]>.ws-preferences-menu{animation:app-menu 140ms var(--ease)}
}
@keyframes app-menu{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
.ws-preferences>summary{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:600 14px/20px var(--font);cursor:pointer;list-style:none}
.ws-preferences>summary::-webkit-details-marker{display:none}
.ws-preferences>summary:hover{background:var(--surface-hover)}
.ws-sample-chip{display:inline-flex;align-items:center;height:24px;padding:0 10px;border-radius:999px;background:var(--mint);color:var(--mint-ink);font-size:12px;font-weight:600;white-space:nowrap}
.ws-preview-banner,.ws-preview-banner--owner{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0;padding:10px 32px;background:var(--warning-soft);color:var(--text);border-bottom:1px solid var(--border);font-size:13px;position:static}
.ws-preview-banner strong{color:var(--warning);font-weight:700}
.ws-preview-banner a{margin-left:auto;display:inline-flex;align-items:center;gap:6px;min-height:36px;padding:0 12px;border-radius:var(--r-md);background:var(--surface);border:1px solid var(--control-border);color:var(--text);font-weight:600;text-decoration:none}
/* content area */
.ws-content{width:100%;max-width:1440px;margin:0 auto;padding:24px 32px 64px;box-sizing:border-box}
.ws-content>.ws-product-footer{display:flex;flex-wrap:wrap;gap:8px 20px;margin-top:48px;padding-top:16px;border-top:1px solid var(--border);font-size:12px}
.ws-product-footer a,.ws-product-footer button{color:var(--text-muted);background:none;border:0;padding:0;font:12px var(--font);cursor:pointer;text-decoration:none}
.ws-product-footer a:hover,.ws-product-footer button:hover{color:var(--text)}
@media (prefers-reduced-motion:no-preference){.ws-content{animation:app-enter 180ms var(--ease) both}}
@keyframes app-enter{from{opacity:0}to{opacity:1}}
/* the floating search launcher obstructs content: tuck it into the header on desktop */
.field-search-launch{display:none!important}
.ws-header-search{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text-secondary);font:500 14px var(--font);cursor:pointer}
.ws-header-search:hover{background:var(--surface-hover);color:var(--text)}
.ws-header-search kbd{font:500 12px var(--font);color:var(--text-muted);border:1px solid var(--border);border-radius:var(--r-sm);padding:1px 6px;background:var(--surface-subtle)}
.ws-mobile-menu{display:none}
/* responsive shell */
@media (max-width:1199px){.ws-content{padding:24px 24px 56px}.ws-context{padding:10px 24px}}
@media (max-width:1023px){.ws-content{padding:20px 20px 56px}.ws-context{padding:10px 20px}.ws-preview-banner{padding:10px 20px}}
@media (max-width:767px){
  .ws-owner-shell,.ws-shell,.v2-op-shell{display:block}
  .ws-owner-rail,.ws-rail{position:fixed;top:0;bottom:0;left:0;width:280px;max-width:86vw;height:auto;transform:translateX(-102%);z-index:80;box-shadow:var(--shadow-dialog);
    transition:transform 220ms var(--ease);padding-top:max(16px,env(safe-area-inset-top))}
  body.mobile-nav-open .ws-owner-rail,body.mobile-nav-open .ws-rail{transform:none}
  .mobile-nav-scrim,.ws-scrim{position:fixed;inset:0;z-index:70;background:rgba(13,20,33,.45);border:0}
  body.ws-rail-compact{--rail-w:var(--rail-w)}
  body.ws-rail-compact .ws-nav-link span,body.ws-rail-compact .ws-business-tools,body.ws-rail-compact .ws-owner-rail .ws-brand>span:last-child{display:revert}
  .ws-rail-toggle{display:none}
  .ws-owner-main,.ws-main{grid-column:auto}
  .ws-mobile-menu{display:inline-grid;place-items:center;width:44px;height:44px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text)}
  .ws-context{padding:8px 16px;padding-top:max(8px,env(safe-area-inset-top))}
  .ws-context .ws-header-search span,.ws-context .ws-header-search kbd,.ws-preferences>summary span{display:none}
  .ws-content{padding:16px 16px calc(96px + env(safe-area-inset-bottom))}
  .ws-preview-banner{padding:10px 16px}
  .ws-sample-chip{display:none}
  .ws-preferences-menu{position:fixed;left:16px;right:16px;top:72px;width:auto!important}
}
@media (prefers-reduced-motion:reduce){.ws-owner-rail,.ws-rail{transition:none}}
/* phone bottom bar: five destinations, last opens the menu drawer */
.field-mobile-nav{display:none}
@media (max-width:767px){
  .field-mobile-nav{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));position:fixed;left:0;right:0;bottom:0;z-index:60;background:var(--surface);border-top:1px solid var(--border);
    padding:6px 6px calc(6px + env(safe-area-inset-bottom))}
  .field-mobile-nav a,.field-mobile-nav button{display:flex;align-items:center;justify-content:center;min-height:48px;border:0;background:none;border-radius:var(--r-md);
    color:var(--text-secondary);font:600 12px/16px var(--font);text-decoration:none;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
  .field-mobile-nav [aria-current="page"]{background:var(--brand-soft);color:var(--text)}
}

/* ================= 4. Components ================= */
/* page header */
.ws-page-head{display:flex;align-items:flex-end;justify-content:space-between;flex-wrap:wrap;gap:12px 20px;margin:0 0 24px;padding:0;background:none;border:0}
.ws-page-head>div:first-child{min-width:0}
.ws-page-head h1,.ws-title,.app-title{margin:0;font:650 28px/34px var(--font);letter-spacing:-.02em;color:var(--text)}
.ws-page-head p{margin:4px 0 0;color:var(--text-secondary);max-width:68ch}
.ws-page-head .ws-eyebrow,.ws-page-head p.ws-muted:first-child{display:none}
.ws-page-actions,.ws-head-actions,.ws-owner-tools{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ws-back{display:inline-flex;align-items:center;gap:6px;min-height:32px;margin:0 0 8px;color:var(--text-secondary);font-size:13px;font-weight:500;text-decoration:none}
.ws-back:hover{color:var(--text)}
@media (max-width:767px){.ws-page-head h1,.ws-title,.app-title{font-size:24px;line-height:30px}}
/* eyebrows: sentence case, small (source text is often upper case) */
.ws-eyebrow{display:block;margin:0 0 4px;color:var(--text-muted);font-size:12px;line-height:16px;font-weight:500;letter-spacing:0;text-transform:lowercase}
.ws-eyebrow::first-letter{text-transform:uppercase}
/* buttons */
.ws-button,.btn,.v2-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 16px;border:1px solid var(--brand);border-radius:var(--r-md);
  background:var(--brand);color:var(--on-brand);font:600 14px/20px var(--font);text-decoration:none;white-space:nowrap;cursor:pointer;box-shadow:none;
  transition:background-color 120ms var(--ease),border-color 120ms var(--ease),transform 90ms var(--ease)}
.ws-button:hover,.btn:hover{background:var(--brand-hover);border-color:var(--brand-hover);color:var(--on-brand)}
.ws-button:active,.btn:active,.v2-btn:active{transform:translateY(1px)}
.ws-button .ws-icon,.v2-btn .ws-icon,.v2-btn svg{width:18px;height:18px;flex:none}
.ws-button.secondary,.btn.secondary,.v2-btn{background:var(--surface);border-color:var(--control-border);color:var(--text)}
.ws-button.secondary:hover,.btn.secondary:hover,.v2-btn:hover{background:var(--surface-hover);border-color:var(--control-border);color:var(--text)}
.v2-btn-primary{background:var(--brand);border-color:var(--brand);color:var(--on-brand)}
.v2-btn-primary:hover{background:var(--brand-hover);border-color:var(--brand-hover);color:var(--on-brand)}
.ws-button.danger,.v2-btn-danger{background:var(--surface);border-color:var(--danger);color:var(--danger)}
.ws-button.danger:hover,.v2-btn-danger:hover{background:var(--danger-soft)}
.v2-btn-ghost{background:var(--surface);border-color:var(--border);color:var(--text)}
.v2-btn-sm{min-height:32px;padding:0 12px;font-size:13px}
.v2-btn-lg{min-height:44px;padding:0 20px;font-size:15px}
:root[data-theme="dark"] .ws-button:not(.secondary):not(.danger){color:var(--on-brand)}
.ws-button[disabled],.v2-btn[disabled],.ws-button[aria-busy="true"]{opacity:.6;cursor:progress}
@media (pointer:coarse){.ws-button,.v2-btn,.btn{min-height:44px}.v2-btn-sm{min-height:40px}}
.ws-icon-button{display:inline-grid;place-items:center;width:40px;height:40px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);color:var(--text);cursor:pointer}
.ws-icon-button:hover{background:var(--surface-hover)}
.ws-text-link,.v2-link{display:inline-flex;align-items:center;gap:6px;min-height:32px;padding:0;border:0;background:none;color:var(--primary-text);font:600 13px/20px var(--font);text-decoration:none;cursor:pointer}
.ws-text-link:hover,.v2-link:hover{text-decoration:underline;text-underline-offset:3px}
.ws-text-link .ws-icon{width:16px;height:16px}
/* fields */
.ws-form,.ws-success-form{display:grid;gap:16px;max-width:760px}
.ws-form-row,.ws-actions,.ws-action-row{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.ws-field{display:grid;gap:6px;font-size:13px;line-height:18px;font-weight:500;color:var(--text)}
.ws-field>span:first-child{font-weight:500}
.ws-field small{font-weight:400;color:var(--text-muted);font-size:12px}
.ws-input,.ws-select,.v2-input,.ws-field input:not([type=checkbox]):not([type=radio]),.ws-field select,.ws-field textarea{width:100%;min-height:40px;padding:8px 12px;border:1px solid var(--control-border);border-radius:var(--r-md);
  background:var(--surface);color:var(--text);font:400 15px/22px var(--font);box-sizing:border-box;transition:border-color 120ms var(--ease)}
:is(.ws-input,.v2-input,.ws-field input,.ws-field select,.ws-field textarea):hover{border-color:var(--text-secondary)}
:is(.ws-input,.v2-input,.ws-field input,.ws-field select,.ws-field textarea):focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
textarea.ws-input,textarea.v2-input,.ws-field textarea{min-height:96px;resize:vertical}
select.ws-input,select.v2-input,.ws-field select{appearance:none;padding-right:36px;background-image:linear-gradient(45deg,transparent 50%,var(--text-secondary) 50%),linear-gradient(135deg,var(--text-secondary) 50%,transparent 50%);
  background-position:calc(100% - 18px) 52%,calc(100% - 13px) 52%;background-size:5px 5px;background-repeat:no-repeat}
:is(.ws-input,.v2-input,.ws-field input)::placeholder{color:var(--text-muted)}
@media (max-width:767px){:is(.ws-input,.v2-input,.ws-field input,.ws-field select,.ws-field textarea){font-size:16px;min-height:44px}
  /* outweighs workspace.css's bare input rule (40px), so every phone field is a 44px target */
  body input:not([type=checkbox]):not([type=hidden]):not([type=radio]):not([type=range]):not(.pub-sig),body select{min-height:44px}}
/* panels and sections: borders + surface, no repeated shadows */
.ws-panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:none;min-width:0;overflow:hidden}
.ws-panel.padded{padding:20px}
.ws-section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px;background:none;border-bottom:1px solid var(--border)}
.ws-section-head h2,.ws-section-head h3{margin:0;font:600 17px/24px var(--font);color:var(--text)}
.ws-section-head>span,.ws-section-head .ws-muted{font-size:13px;color:var(--text-secondary)}
.ws-panel-body{padding:16px 20px}
.ws-panel>.ws-form{padding:16px 20px}
.ws-stack{display:grid;gap:20px;min-width:0}
.ws-work-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,360px);gap:24px;align-items:start}
.ws-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,320px),1fr));gap:20px}
@media (max-width:1023px){.ws-work-grid{grid-template-columns:minmax(0,1fr)}}
/* rows and tables */
.ws-row{display:flex;align-items:center;gap:12px;min-height:52px;padding:12px 20px;border:0;border-top:1px solid var(--border);color:var(--text);text-decoration:none;background:none}
.ws-section-head+.ws-row,.ws-panel>.ws-row:first-child{border-top:0}
a.ws-row:hover{background:var(--surface-hover)}
.ws-row-main{display:flex;flex-direction:column;min-width:0;flex:1}
.ws-row-main strong{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-row-main span,.ws-row-main small{font-size:13px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ws-table-wrap{overflow-x:auto}
.ws-table{width:100%;border-collapse:collapse;font-size:14px}
.ws-table th{padding:10px 16px;text-align:left;font:500 12px/16px var(--font);color:var(--text-muted);background:var(--surface-subtle);border-bottom:1px solid var(--border);white-space:nowrap}
.ws-table td{padding:12px 16px;height:52px;border-bottom:1px solid var(--border);vertical-align:middle;color:var(--text)}
.ws-table tbody tr:hover{background:var(--surface-hover)}
/* badges, counts, status */
.ws-badge,.v2-status{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;border-radius:var(--r-sm);font:600 12px/16px var(--font);white-space:nowrap;background:var(--surface-subtle);color:var(--text-secondary);border:0}
.v2-status::before,.ws-badge.with-dot::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.ws-badge.new,.v2-status-new{background:var(--primary-soft);color:var(--primary-text)}
.ws-badge.good,.ws-badge.success,.v2-status-won{background:var(--success-soft);color:var(--success)}
.ws-badge.warn,.ws-badge.warning,.v2-status-estimate-scheduled{background:var(--warning-soft);color:var(--warning)}
.ws-badge.danger,.v2-status-lost{background:var(--danger-soft);color:var(--danger)}
.v2-status-contacted{background:var(--surface-subtle);color:var(--text)}
:root[data-theme="dark"] .ws-badge{background:var(--surface-subtle);color:var(--text-secondary)}
:root[data-theme="dark"] .ws-badge.new{background:var(--primary-soft);color:var(--primary-text)}
:root[data-theme="dark"] .ws-badge.good{background:var(--success-soft);color:var(--success)}
:root[data-theme="dark"] .ws-badge.warn{background:var(--warning-soft);color:var(--warning)}
:root[data-theme="dark"] .ws-badge.danger{background:var(--danger-soft);color:var(--danger)}
.ws-count,.v2-count{display:inline-grid;place-items:center;min-width:22px;height:22px;padding:0 6px;border-radius:var(--r-sm);background:var(--surface-subtle);color:var(--text-secondary);font:600 12px/1 var(--font);vertical-align:2px}
.v2-chip{display:inline-flex;align-items:center;height:24px;padding:0 8px;border-radius:var(--r-sm);border:1px solid var(--border);font-size:12px;font-weight:500;color:var(--text-secondary);white-space:nowrap}
/* feedback */
.ws-flash{display:flex;align-items:center;gap:10px;margin:0 0 16px;padding:12px 16px;border:1px solid color-mix(in srgb,var(--success) 30%,var(--border));border-radius:var(--r-md);background:var(--success-soft);color:var(--text);font-size:14px;box-shadow:none}
.ws-flash.error{border-color:color-mix(in srgb,var(--danger) 30%,var(--border));background:var(--danger-soft);color:var(--text)}
:root[data-theme="dark"] .ws-flash:not(.error){background:var(--success-soft);color:var(--text);border-color:color-mix(in srgb,var(--success) 30%,var(--border))}
/* facts / definition grids */
.ws-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px 24px}
.ws-facts small{display:block;font-size:12px;line-height:18px;color:var(--text-muted)}
.ws-facts strong{font-weight:500;color:var(--text);overflow-wrap:anywhere}
/* disclosure */
.ws-disclosure>summary{cursor:pointer;list-style:none;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 20px;font-weight:600}
.ws-disclosure>summary::-webkit-details-marker{display:none}
.ws-disclosure>summary::after{content:"";width:8px;height:8px;border-right:2px solid var(--text-secondary);border-bottom:2px solid var(--text-secondary);transform:rotate(45deg);transition:transform 140ms var(--ease)}
.ws-disclosure[open]>summary::after{transform:rotate(225deg)}
/* empty states: compact, left aligned */
.ws-empty,.v2-empty,.ws-success-empty,.field-empty{padding:20px;max-width:56ch;text-align:left}
.v2-empty h2,.ws-empty h3,.field-empty h3{margin:0 0 4px;font:600 15px/22px var(--font)}
.v2-empty p,.ws-empty p,.field-empty p{margin:0 0 12px;color:var(--text-secondary)}
/* timeline */
.ws-timeline,.v2-timeline{list-style:none;margin:0;padding:0 0 0 16px;border-left:2px solid var(--border)}
.ws-timeline-item,.v2-timeline li{position:relative;padding:0 0 14px 8px}
.ws-timeline-item::before,.v2-timeline li::before{content:"";position:absolute;left:-23px;top:6px;width:10px;height:10px;border-radius:50%;background:var(--surface);border:2px solid var(--control-border)}
.v2-timeline li.is-note::before{border-color:var(--primary)}
.ws-timeline-item p,.v2-timeline p{margin:0;font-size:14px}
.ws-timeline-item small,.v2-timeline time{font-size:12px;color:var(--text-muted)}
/* toolbar */
.ws-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;margin:0 0 16px}
.ws-toolbar .ws-field{min-width:180px}
/* quick menus kept, as compact secondary buttons */
.clean-quick-menu>summary{display:inline-flex;align-items:center;min-height:40px;padding:0 14px;border:1px solid var(--control-border);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:600 14px var(--font);cursor:pointer;list-style:none}
.clean-quick-menu>summary::-webkit-details-marker{display:none}
.clean-quick-menu>div{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-menu)}
.clean-quick-menu>div a{color:var(--text);text-decoration:none}
.clean-page-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 8px}
/* dialogs */
dialog.ws-dialog,dialog.field-command-dialog{border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);color:var(--text);box-shadow:var(--shadow-dialog);padding:0;max-width:min(560px,calc(100vw - 32px))}
dialog::backdrop{background:rgba(13,20,33,.45)}
@media (prefers-reduced-motion:no-preference){dialog[open]{animation:app-dialog 180ms var(--ease)}}
@keyframes app-dialog{from{opacity:0;transform:scale(.98)}to{opacity:1;transform:none}}
/* palette picker */
.ws-palette-picker{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin:8px 0 12px}
.ws-palette-picker label{display:flex;align-items:center;gap:10px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--r-md);cursor:pointer;background:var(--surface)}
.ws-palette-picker label:has(input:checked){border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft)}
.ws-palette-swatch{width:20px;height:20px;border-radius:50%;flex:none}
.ws-palette-swatch.palette-default{background:#3659E3}
.ws-palette-swatch.palette-custom{background:conic-gradient(#d92d20,#f79009,#12b76a,#2e90fa,#7a5af8,#d92d20)}
.ws-brand-color{width:44px;height:32px;padding:0;border:1px solid var(--border);border-radius:var(--r-sm);background:none;cursor:pointer;margin-left:auto}

/* ================= 5. Shared page patterns ================= */
.app-head-count{display:inline-grid;place-items:center;min-width:28px;height:28px;padding:0 8px;margin-left:6px;border-radius:var(--r-md);background:var(--surface-subtle);color:var(--text-secondary);font:600 14px/1 var(--font);vertical-align:5px;font-variant-numeric:tabular-nums}
.app-overflow{position:relative}
.app-overflow>summary{list-style:none;font-size:20px;line-height:1;cursor:pointer}
.app-overflow>summary::-webkit-details-marker{display:none}
.app-menu{position:absolute;right:0;top:calc(100% + 6px);z-index:50;min-width:220px;display:grid;gap:2px;padding:6px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-menu)}
.app-menu a,.app-menu button{display:flex;justify-content:space-between;align-items:center;min-height:40px;padding:0 12px;border:0;background:none;border-radius:var(--r-md);color:var(--text);font:500 14px var(--font);text-decoration:none;text-align:left;cursor:pointer}
.app-menu a:hover,.app-menu button:hover{background:var(--surface-hover)}
@media (prefers-reduced-motion:no-preference){.app-overflow[open]>.app-menu{animation:app-menu 140ms var(--ease)}}
.app-split{display:grid;grid-template-columns:minmax(0,3fr) minmax(0,2fr);gap:24px;align-items:start;margin-bottom:24px}
@media (max-width:1023px){.app-split{grid-template-columns:minmax(0,1fr);gap:20px}}
.app-empty-inline{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:16px 20px}
.app-empty-inline strong{font-weight:600}
.app-empty-inline span{color:var(--text-secondary)}
.app-empty{padding:32px 4px;max-width:60ch}
.app-empty h2{margin:0 0 6px;font:600 17px/24px var(--font)}
.app-empty p{margin:0 0 16px;color:var(--text-secondary)}

/* ---- Today ---- */
.app-today-head{align-items:center}
.app-today-head .ws-page-actions{flex-wrap:nowrap}
.app-measures{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:0 0 24px}
.app-measure{display:grid;gap:2px;padding:16px 20px;background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);color:var(--text);text-decoration:none;position:relative;
  transition:border-color 120ms var(--ease),background-color 120ms var(--ease)}
.app-measure::after{content:"";position:absolute;right:18px;top:20px;width:7px;height:7px;border-right:2px solid var(--text-muted);border-top:2px solid var(--text-muted);transform:rotate(45deg)}
.app-measure:hover{border-color:var(--primary)}
.app-measure-label{font:500 13px/18px var(--font);color:var(--text-secondary)}
.app-measure strong{font:650 28px/34px var(--font);letter-spacing:-.02em}
.app-measure small{font-size:12px;line-height:18px;color:var(--text-muted)}
.app-measure:first-child strong{color:var(--primary-text)}
.app-queue-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto auto;gap:12px;align-items:center;min-height:56px;padding:8px 20px;border-top:1px solid var(--border)}
.ws-section-head+.app-queue-row{border-top:0}
.app-queue-main{display:flex;flex-direction:column;min-width:0;color:var(--text);text-decoration:none}
.app-queue-main strong{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-queue-main span{font-size:13px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-queue-main:hover strong{text-decoration:underline;text-underline-offset:3px}
.app-reason{font:600 12px/16px var(--font);padding:4px 8px;border-radius:var(--r-sm);white-space:nowrap}
.app-reason.is-new{background:var(--primary-soft);color:var(--primary-text)}
.app-reason.is-due{background:var(--warning-soft);color:var(--warning)}
.app-age{font-size:12px;color:var(--text-muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.app-visit{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:12px;align-items:center;min-height:56px;padding:8px 20px;border-top:1px solid var(--border);color:var(--text);text-decoration:none}
.ws-section-head+.app-visit{border-top:0}
.app-visit:hover{background:var(--surface-hover)}
.app-visit time{font-weight:650;font-size:15px}
.app-visit-main{display:flex;flex-direction:column;min-width:0}
.app-visit-main strong{font-weight:600}
.app-visit-main span{font-size:13px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-visit-main em{font-style:normal;color:var(--warning);font-weight:600}
.app-visit.is-done{opacity:.6}
.app-chart{position:relative;width:100%}
.app-chart-table{margin-top:8px;border-top:1px solid var(--border)}
.app-chart-table>summary{padding:12px 0;font-size:13px}
.app-checks{list-style:none;margin:0;padding:4px 20px 12px}
.app-checks li{display:flex;justify-content:space-between;gap:12px;padding:8px 0;border-top:1px solid var(--border);font-size:14px}
.app-checks li:first-child{border-top:0}
.app-checks li strong{font-weight:600;color:var(--warning)}
.app-checks li.ok strong{color:var(--success)}
.app-checks li strong::before{content:"\25CB\00a0\00a0"}
.app-checks li.ok strong::before{content:"\2713\00a0\00a0"}
.app-activity{list-style:none;margin:0;padding:4px 20px 12px}
.app-activity li{display:flex;justify-content:space-between;gap:12px;padding:9px 0;border-top:1px solid var(--border);font-size:14px}
.app-activity li:first-child{border-top:0}
.app-activity a{color:var(--text);text-decoration:none;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.app-activity a:hover{text-decoration:underline}
.app-activity time{font-size:12px;color:var(--text-muted);white-space:nowrap}
.app-stagebar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 18px;padding:14px 20px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);font-size:13px}
.app-stagebar>span{color:var(--text-muted);margin-right:4px}
.app-stagebar a{color:var(--text-secondary);text-decoration:none}
.app-stagebar a:hover{color:var(--text)}
.app-stagebar strong{color:var(--text);font-variant-numeric:tabular-nums;margin-left:2px}
.app-setup{max-width:760px}
.app-checklist{list-style:none;margin:0;padding:4px 20px 12px;counter-reset:step}
.app-checklist li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid var(--border);counter-increment:step}
.app-checklist li:first-child{border-top:0}
.app-checklist li>span:first-child::before{content:counter(step) ".\00a0\00a0";color:var(--text-muted);font-variant-numeric:tabular-nums}
.app-checklist li.is-done>span:first-child{color:var(--text-secondary)}
@media (max-width:767px){
  .app-measures{gap:8px}
  .app-measure{padding:12px}
  .app-measure strong{font-size:24px;line-height:30px}
  .app-measure small,.app-measure::after{display:none}
  .app-measure-label{font-size:12px;line-height:16px}
  .app-today-head .ws-page-actions{width:100%}
  .app-today-head .ws-page-actions .ws-button{flex:1}
  .app-queue-row{grid-template-columns:minmax(0,1fr) auto;padding:10px 16px}
  .app-queue-row .app-reason{grid-column:1;justify-self:start}
  .app-queue-row .app-age{grid-column:2;grid-row:2;justify-self:end}
  .app-queue-row .v2-btn{grid-column:2;grid-row:1}
  .app-visit{padding:10px 16px}
}

/* ---- Inquiries list ---- */
.app-views{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none;margin:0 0 16px;border-bottom:1px solid var(--border)}
.app-views::-webkit-scrollbar{display:none}
.app-views a{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 12px;margin-bottom:-1px;border-bottom:2px solid transparent;color:var(--text-secondary);font:500 14px/20px var(--font);text-decoration:none;white-space:nowrap}
.app-views a span{font-size:12px;font-weight:600;color:var(--text-muted);font-variant-numeric:tabular-nums}
.app-views a:hover{color:var(--text)}
.app-views a.is-active{color:var(--text);font-weight:600;border-bottom-color:var(--primary)}
.app-views a.is-active span{color:var(--primary-text)}
.app-toolbar{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;margin:0 0 12px}
.app-field{display:grid;gap:6px;font:500 13px/18px var(--font);color:var(--text)}
.app-field .ws-input{min-width:150px}
.app-field-grow{flex:1 1 260px}
.app-field-grow .ws-input{width:100%}
.app-more{position:relative}
.app-more>summary{display:inline-flex;align-items:center;min-height:40px;padding:0 14px;border:1px solid var(--control-border);border-radius:var(--r-md);background:var(--surface);font:600 14px var(--font);cursor:pointer;list-style:none}
.app-more>summary::-webkit-details-marker{display:none}
.app-more[open]>summary{border-color:var(--primary)}
.app-more>div{display:flex;gap:8px;margin-top:8px}
.app-toolbar-actions{display:flex;align-items:center;gap:12px}
.app-filter-note{margin:0 0 12px;color:var(--text-secondary);font-size:13px}
.app-table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);overflow-x:auto}
.app-table{width:100%;border-collapse:collapse;font-size:14px}
.app-table th{padding:10px 16px;text-align:left;font:500 12px/16px var(--font);color:var(--text-muted);background:var(--surface-subtle);border-bottom:1px solid var(--border);white-space:nowrap}
.app-table td{padding:10px 16px;height:52px;border-bottom:1px solid var(--border);vertical-align:middle}
.app-table tbody tr:last-child td{border-bottom:0}
.app-table tbody tr[data-href]{cursor:pointer;transition:background-color 120ms var(--ease)}
.app-table tbody tr[data-href]:hover{background:var(--surface-hover)}
.app-cell-name,.app-cell-req{min-width:0;max-width:280px}
.app-cell-name a{color:var(--text);text-decoration:none}
.app-cell-name a:hover strong{text-decoration:underline;text-underline-offset:3px}
.app-cell-name strong,.app-cell-req strong{display:block;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-cell-name span,.app-cell-req span{display:block;font-size:13px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-cell-req strong{font-weight:500}
.app-cell-date{white-space:nowrap;color:var(--text-secondary)}
.app-next{font-weight:500;white-space:nowrap}
.app-next.is-due{color:var(--warning);font-weight:600}
.app-cell-actions{text-align:right;white-space:nowrap}
.app-cell-actions .v2-btn+.v2-btn{margin-left:6px}
@media (max-width:767px){
  .app-toolbar{display:grid;grid-template-columns:1fr 1fr}
  .app-field-grow,.app-toolbar-actions,.app-more{grid-column:1/-1}
  .app-field .ws-input{min-width:0;width:100%}
  .app-table thead{display:none}
  .app-table,.app-table tbody,.app-table td{display:block}
  .app-table tbody tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 12px;padding:12px 16px;min-height:72px;border-bottom:1px solid var(--border)}
  .app-table tbody tr:last-child{border-bottom:0}
  .app-table td{height:auto;padding:0;border:0}
  .app-cell-name{grid-column:1;grid-row:1;max-width:none}
  .app-cell-name span{display:none}
  .app-cell-status{grid-column:2;grid-row:1;justify-self:end}
  .app-cell-req{grid-column:1;grid-row:2;max-width:none}
  .app-cell-req span{display:none}
  .app-cell-date{grid-column:2;grid-row:2;justify-self:end;font-size:12px}
  .app-cell-next{grid-column:1;grid-row:3;font-size:13px}
  .app-cell-next .ws-muted{display:none}
  .app-cell-actions{grid-column:2;grid-row:3}
  .app-cell-actions>.v2-btn:last-child:not(:first-child),.app-table td.app-cell-none{display:none}
}

/* ---- Record (inquiry detail) ---- */
.app-record-head h1{display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.app-record-head h1 .v2-status{font-size:13px;height:28px;letter-spacing:0}
.app-record{display:grid;grid-template-columns:minmax(0,1fr) minmax(300px,380px);gap:24px;align-items:start}
.app-record-main,.app-record-side{display:grid;gap:20px;min-width:0}
.app-record-side{grid-column:2;grid-row:1}
.app-record-main{grid-column:1;grid-row:1}
.app-dl{display:grid;gap:12px;margin:0 0 16px}
.app-dl dt{font-size:12px;line-height:18px;color:var(--text-muted)}
.app-dl dd{margin:0;font-weight:500;overflow-wrap:anywhere}
.app-btn-row{display:flex;flex-wrap:wrap;gap:8px}
.app-inline-form{display:flex;gap:8px;align-items:center}
.app-inline-form .ws-input{flex:1;min-width:0}
.app-note{font-size:12px;line-height:18px;margin:10px 0 0}
.app-request{margin:0;font-size:15px;line-height:24px;max-width:72ch;white-space:pre-line}
.app-note-form{margin-bottom:16px;max-width:none}
.app-note-item{padding:12px 0;border-top:1px solid var(--border)}
.app-note-item p{margin:0 0 2px;white-space:pre-line}
.app-note-item time{font-size:12px;color:var(--text-muted)}
@media (max-width:1023px){
  .app-record{grid-template-columns:minmax(0,1fr)}
  .app-record-side,.app-record-main{grid-column:1;grid-row:auto}
}

/* filter group: inline on wide screens, behind a Filters button on phones */
.app-filter-toggle{display:none}
.app-filter-fields{display:contents}
.app-today-head>div{flex:0 1 auto;min-width:0;margin:0}
.app-today-head>.ws-page-actions{margin-left:auto}
@media (max-width:767px){
  .app-filter-toggle{display:inline-flex;align-items:center;gap:8px;justify-self:start;min-height:44px;padding:0 14px;border:1px solid var(--control-border);border-radius:var(--r-md);background:var(--surface);color:var(--text);font:600 14px var(--font);cursor:pointer}
  .app-filter-toggle[aria-expanded="true"]{border-color:var(--primary)}
  .app-filter-fields{display:none;grid-column:1/-1;grid-template-columns:1fr 1fr;gap:12px}
  .app-filter-fields.is-open{display:grid}
  .app-today-head>.ws-page-actions{margin-left:0}
}

/* ---- Schedule: FullCalendar themed from the same tokens ---- */
.fc{--fc-border-color:var(--border);--fc-page-bg-color:var(--surface);--fc-neutral-bg-color:var(--surface-subtle);--fc-today-bg-color:color-mix(in srgb,var(--primary-soft) 55%,transparent);
  --fc-now-indicator-color:var(--danger);--fc-event-bg-color:var(--brand);--fc-event-border-color:var(--brand);--fc-event-text-color:var(--on-brand);
  --fc-list-event-hover-bg-color:var(--surface-hover);--fc-highlight-color:var(--primary-soft);--fc-button-bg-color:var(--surface);--fc-button-border-color:var(--control-border);
  --fc-button-text-color:var(--text);--fc-button-hover-bg-color:var(--surface-hover);--fc-button-hover-border-color:var(--control-border);--fc-button-active-bg-color:var(--primary-soft);
  --fc-button-active-border-color:var(--primary);font-family:var(--font);font-size:13px;color:var(--text)}
.fc .fc-toolbar{flex-wrap:wrap;gap:8px 12px}
.fc .fc-toolbar-title{font:600 17px/24px var(--font);color:var(--text)}
.fc .fc-button{min-height:36px;padding:0 12px;border-radius:var(--r-md);font:600 13px var(--font);box-shadow:none!important;text-transform:none}
.fc .fc-button-primary:not(:disabled).fc-button-active,.fc .fc-button-primary:not(:disabled):active{color:var(--primary-text)}
.fc .fc-button:focus-visible{box-shadow:var(--focus)!important}
.fc .fc-col-header-cell-cushion{padding:8px 4px;color:var(--text-secondary);font-weight:600;text-decoration:none}
.fc .fc-timegrid-slot-label-cushion,.fc .fc-list-day-text,.fc .fc-list-day-side-text{color:var(--text-muted);font-variant-numeric:tabular-nums;text-decoration:none}
.fc .fc-timegrid-slot{height:44px}
.fc .fc-timegrid-event,.fc .fc-daygrid-event{border-radius:var(--r-sm);padding:2px 4px;box-shadow:none}
.fc .fc-event-time{font-weight:600;font-variant-numeric:tabular-nums}
.fc .fc-event-title{font-weight:500}
.fc .fc-event.is-cancelled{--fc-event-bg-color:var(--surface-subtle);--fc-event-border-color:var(--control-border);--fc-event-text-color:var(--text-secondary);background:var(--surface-subtle)!important;border:1px dashed var(--control-border)!important;color:var(--text-secondary)!important}
.fc .fc-event.is-cancelled .fc-event-title,.fc .fc-event.is-cancelled .fc-list-event-title{text-decoration:line-through}
.fc .fc-event.field-outside-hours{outline:2px dashed var(--warning);outline-offset:-2px}
.fc .fc-list{border-radius:var(--r-lg);overflow:hidden}
.fc .fc-list-day-cushion{background:var(--surface-subtle)}
.fc .fc-list-event-dot{border-color:var(--brand)}
.fc .fc-list-event.is-cancelled .fc-list-event-dot{border-color:var(--control-border)}
.fc a{color:inherit}
.field-calendar-layout,.field-calendar-shell{min-width:0}
#field-calendar-feedback:not(:empty){margin:8px 0;padding:10px 14px;border:1px solid color-mix(in srgb,var(--primary) 25%,var(--border));border-radius:var(--r-md);background:var(--primary-soft)}

/* ---- Operator ---- */
.ws-rail .ws-brand-word b{color:inherit;font-weight:inherit}
.app-opgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;align-items:start}
@media (max-width:1023px){.app-opgrid{grid-template-columns:minmax(0,1fr);gap:20px}}
.app-oprow{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:center;min-height:56px;padding:8px 20px;border-top:1px solid var(--border)}
.ws-section-head+.app-oprow{border-top:0}
.app-oprow-main{display:flex;flex-direction:column;min-width:0;color:var(--text);text-decoration:none}
.app-oprow-main strong{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-oprow-main span{font-size:13px;color:var(--text-secondary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-oprow-main:hover strong{text-decoration:underline;text-underline-offset:3px}
.app-oprow time{font-size:12px;color:var(--text-muted);white-space:nowrap}
.app-progress{display:block;width:72px;height:6px;border-radius:3px;background:var(--surface-subtle);overflow:hidden}
.app-progress i{display:block;height:100%;background:var(--mint);border-right:1px solid var(--mint-ink)}
.app-footnote{font-size:12px;margin-top:20px}
.app-setup-steps{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 24px;padding:12px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface);list-style:none}
.app-setup-steps li{display:flex}
.app-setup-steps a{display:inline-flex;align-items:center;gap:8px;min-height:40px;padding:0 12px;border-radius:var(--r-md);border:1px solid var(--border);color:var(--text);text-decoration:none;font-weight:600;font-size:13px;background:var(--surface)}
.app-setup-steps a:hover{background:var(--surface-hover)}
.app-setup-steps a::before{content:"";width:16px;height:16px;border-radius:50%;border:2px solid var(--control-border);flex:none;box-sizing:border-box}
.app-setup-steps a.is-done::before{border-color:var(--success);background:var(--success);box-shadow:inset 0 0 0 3px var(--surface)}
.app-setup-steps .app-setup-label{align-self:center;font-size:12px;color:var(--text-muted);margin-right:4px}
@media (max-width:600px){.app-setup-steps li:has(>a.is-done){display:none}.app-setup-steps a{min-height:36px}}
@media (max-width:767px){.app-oprow{grid-template-columns:minmax(0,1fr) auto;padding:10px 16px}.app-oprow time,.app-progress{display:none}}

.ws-context .ws-mobile-menu{display:none}
.ws-rail .ws-brand-word{display:block;line-height:20px;font-size:15px;white-space:nowrap}
.ws-rail .ws-brand-word small{display:block}
@media (max-width:767px){.ws-context .ws-mobile-menu{display:inline-grid;place-items:center;width:44px;height:44px}}

/* ---- Website evidence ---- */
.app-dl-2{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px 24px;margin:0}
.app-evidence{list-style:none;margin:0;padding:0;border-top:1px solid var(--border)}
.app-evidence li{display:grid;grid-template-columns:minmax(140px,180px) minmax(130px,200px) minmax(0,1fr);gap:4px 16px;align-items:baseline;padding:12px 20px;border-bottom:1px solid var(--border)}
.app-ev-name{font-weight:600}
.app-ev-state{font-weight:600;font-size:13px;display:inline-flex;align-items:center;gap:6px}
.app-ev-state::before{content:"";width:8px;height:8px;border-radius:50%;flex:none}
.app-evidence li.is-ok .app-ev-state{color:var(--success)}
.app-evidence li.is-ok .app-ev-state::before{background:var(--success)}
.app-evidence li.is-todo .app-ev-state{color:var(--warning)}
.app-evidence li.is-todo .app-ev-state::before{border:2px solid var(--warning);box-sizing:border-box}
.app-ev-next{font-size:13px;color:var(--text-secondary)}
@media (max-width:767px){.app-evidence li{grid-template-columns:1fr auto}.app-ev-next{grid-column:1/-1}}

/* ---- Settings ---- */
.app-settings{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px;align-items:start;max-width:1200px}
.app-settings>section:first-child{grid-column:1/-1}
.app-advanced{grid-column:1/-1}
@media (max-width:1023px){.app-settings{grid-template-columns:minmax(0,1fr)}}

/* ---- Insights ---- */
.app-hbars{list-style:none;margin:0;padding:8px 20px 4px}
.app-hbars a{display:grid;grid-template-columns:150px minmax(0,1fr) 40px;gap:12px;align-items:center;min-height:40px;color:var(--text);text-decoration:none;border-radius:var(--r-md)}
.app-hbars a:hover .app-hbar-label{text-decoration:underline;text-underline-offset:3px}
.app-hbar-label{font-size:14px;font-weight:500}
.app-hbar{display:block;height:10px;border-radius:5px;background:var(--surface-subtle);overflow:hidden}
.app-hbar i{display:block;height:100%;min-width:2px;background:var(--brand);border-radius:5px}
.app-hbars strong{text-align:right;font-weight:650}
.app-insight-top{margin-bottom:24px}
@media (max-width:767px){.app-hbars a{grid-template-columns:120px minmax(0,1fr) 32px}}

/* forms inside padded panels: one level of padding only */
.ws-panel.padded>.ws-form,.ws-panel.padded>form.ws-form,.ws-panel.padded .ws-panel-body{padding:0}
.ws-panel.padded>h2,.ws-panel.padded>h3{margin:0 0 12px;font:600 17px/24px var(--font)}
.ws-panel.padded>.ws-section-head{margin:-20px -20px 16px}

/* Owner preview is read-only: forms that would change records are hidden (the server refuses them anyway). */
body.is-preview .ws-content form[method="post" i],body.is-preview .ws-content form[method="POST"]{display:none!important}
body.is-preview .ws-content a[href*="/visit"],body.is-preview .ws-content a[href$="/customers/new"],body.is-preview .ws-page-actions a.ws-button[href$="/customers/new"]{pointer-events:none;opacity:.5}

/* header controls stay in the flow at every width */
.ws-context .ws-preferences{position:relative;inset:auto;top:auto;right:auto;margin-left:0;order:0}
.ws-context>form{flex:none}
.ws-sample-chip{max-width:260px;overflow:hidden;text-overflow:ellipsis}
@media (max-width:1199px){.ws-header-search kbd{display:none}.ws-preferences>summary span{display:none}}

.ws-tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;padding:0 32px;gap:4px;background:var(--surface);border-bottom:1px solid var(--border)}
.ws-tabs::-webkit-scrollbar{display:none}
.ws-tabs a{white-space:nowrap}
@media (max-width:1199px){.ws-tabs{padding:0 20px}}

/* ---- HTML bar chart (no chart library) ---- */
.app-bars{display:grid;grid-template-columns:28px minmax(0,1fr);grid-template-rows:240px auto;column-gap:8px}
.app-bars-axis{grid-row:1;display:flex;flex-direction:column;justify-content:space-between;font-size:12px;color:var(--text-muted);text-align:right;padding:2px 0}
.app-bars-plot{grid-row:1;display:flex;align-items:flex-end;gap:3px;border-bottom:1px solid var(--control-border);background:linear-gradient(var(--border),var(--border)) 0 0/100% 1px no-repeat,linear-gradient(var(--border),var(--border)) 0 50%/100% 1px no-repeat}
.app-bar{position:relative;flex:1 1 0;min-width:0;height:max(var(--h),3px);background:var(--brand);border-radius:3px 3px 0 0;transition:background-color 120ms var(--ease);text-decoration:none}
.app-bar.is-zero{background:var(--surface-subtle);height:3px}
a.app-bar:hover,a.app-bar:focus-visible{background:var(--brand-hover)}
.app-bar>span{position:absolute;left:50%;bottom:calc(100% + 4px);transform:translateX(-50%);padding:2px 6px;border-radius:var(--r-sm);background:var(--text);color:var(--surface);font:600 12px/16px var(--font);white-space:nowrap;opacity:0;pointer-events:none;transition:opacity 120ms var(--ease)}
.app-bar:hover>span,.app-bar:focus-visible>span{opacity:1}
.app-bars-x{grid-column:2;position:relative;height:20px;margin-top:6px;font-size:12px;color:var(--text-muted)}
.app-bars-x span{position:absolute;left:calc((var(--i) + .5) / 30 * 100%);transform:translateX(-50%);white-space:nowrap}
@media (max-width:767px){.app-bars{grid-template-rows:200px auto}.app-bars-plot{gap:2px}}

/* header order: context on the left, controls grouped on the right */
.ws-context>.ws-mobile-menu{order:-2}
.ws-context>.ws-context-leading{order:-1;margin-right:auto}
.ws-context>.ws-header-search{order:1}
.ws-context>.ws-preferences{order:2}
.ws-context>form,.ws-context>.ws-owner-preview,.ws-context>[data-global-search-toggle]{order:3}

/* ---- Field map (MapLibre + numbered stops) ---- */
.map-layout{display:grid;grid-template-columns:minmax(300px,380px) minmax(0,1fr);gap:20px;align-items:start}
.map-list{display:grid;gap:10px;max-height:calc(100vh - 220px);min-height:420px;overflow:auto;padding:2px 4px 2px 2px;align-content:start;overscroll-behavior:contain}
.map-summary{margin:0 0 2px;font-size:13px;color:var(--text-secondary)}
.map-summary strong{color:var(--warning);font-weight:600}
.map-stop{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:12px;display:grid;gap:10px;transition:border-color .15s,box-shadow .15s}
.map-stop[data-selected="true"]{border-color:var(--brand);box-shadow:0 0 0 1px var(--brand)}
.map-stop-select{all:unset;box-sizing:border-box;display:grid;grid-template-columns:auto 1fr;gap:12px;align-items:start;cursor:pointer;border-radius:var(--r-md);padding:2px}
.map-stop-select:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.map-stop-select:hover .map-stop-name{color:var(--primary-text)}
.map-stop-num{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;background:var(--brand);color:var(--on-brand);font:700 13px/1 var(--font);font-variant-numeric:tabular-nums;flex:none}
.map-stop:not([data-state="matched"]):not([data-state="owner-confirmed"]) .map-stop-num{background:var(--surface-subtle);color:var(--text-secondary);box-shadow:inset 0 0 0 1.5px var(--control-border)}
.map-stop-main{display:grid;gap:2px;min-width:0}
.map-stop-name{font-weight:600;color:var(--text)}
.map-stop-meta{font-size:13px;color:var(--text-secondary)}
.map-stop-address{font-size:13px;color:var(--text-muted);overflow-wrap:anywhere}
.map-stop-state{display:grid;gap:8px;justify-items:start}
.map-stop-state:empty{display:none}
.map-stop-state .ws-label{display:grid;gap:4px;font-size:13px;width:100%}
.map-stop-state select{width:100%}
.map-review{display:grid;gap:8px;width:100%;justify-items:start}
.map-inline-form{display:inline}
.map-locating{font-size:13px;color:var(--text-muted)}
.map-stop-actions{display:flex;flex-wrap:wrap;gap:6px}
.map-stop-actions .ws-button{min-height:36px;padding:0 12px;font-size:13px}
.map-hint{margin:4px 0 0;font-size:12px;line-height:1.5;color:var(--text-muted)}
.map-stage{position:sticky;top:calc(var(--header-h,64px) + 12px);display:grid;gap:8px}
.map-canvas{height:calc(100vh - 220px);min-height:420px;border-radius:var(--r-lg);border:1px solid var(--border);background:var(--surface-subtle);overflow:hidden;position:relative}
.map-fallback{position:absolute;inset:0;display:grid;place-items:center;margin:0;padding:24px;text-align:center;color:var(--text-secondary);font-size:14px}
.map-controls{display:flex;justify-content:flex-end;gap:8px}
.map-controls .ws-button{min-height:36px}
.map-canvas .maplibregl-ctrl-group{border-radius:var(--r-md);box-shadow:var(--shadow-menu)}
.map-canvas .maplibregl-ctrl-attrib{font-size:11px}
/* Pins: the outer button is positioned by MapLibre; the inner body animates. */
.map-pin{all:unset;cursor:pointer;width:34px;height:42px;display:block}
.map-pin:focus-visible .map-pin-body{outline:3px solid var(--primary);outline-offset:3px}
.map-pin-body{position:relative;display:grid;place-items:center;width:34px;height:34px;border-radius:50% 50% 50% 0;transform:rotate(-45deg);background:var(--brand);border:2px solid #fff;box-shadow:0 3px 8px rgba(16,24,40,.35);animation:map-pin-drop .55s cubic-bezier(.2,.9,.3,1.25) both;color:var(--on-brand);font:700 13px/1 var(--font)}
.map-pin-body>span{transform:rotate(45deg);font-variant-numeric:tabular-nums}
.map-pin.is-selected .map-pin-body{background:var(--text);color:var(--canvas);transform:rotate(-45deg) scale(1.15)}
.map-pin:hover .map-pin-body{filter:brightness(1.08)}
@keyframes map-pin-drop{0%{opacity:0;translate:0 -28px}60%{opacity:1}100%{opacity:1;translate:0 0}}
@media (prefers-reduced-motion:reduce){.map-pin-body{animation:none}}
.maplibregl-popup.map-popup .maplibregl-popup-content{background:var(--surface);color:var(--text);border-radius:var(--r-lg);box-shadow:var(--shadow-dialog);padding:14px 16px 12px;font:14px/1.45 var(--font)}
.maplibregl-popup.map-popup .maplibregl-popup-tip{border-top-color:var(--surface)}
.maplibregl-popup.map-popup .maplibregl-popup-close-button{width:32px;height:32px;font-size:20px;color:var(--text-secondary);border-radius:var(--r-md)}
.map-card{display:grid;gap:4px;padding-right:18px}
.map-card-head{display:flex;align-items:center;gap:10px;margin-bottom:2px}
.map-card-head strong{font-size:15px}
.map-card p{margin:0;font-size:13px;color:var(--text-secondary)}
.map-card .map-card-when{color:var(--text);font-weight:600}
.map-card-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.map-card-actions .ws-button{min-height:34px;padding:0 12px;font-size:13px}
@media (max-width:900px){
  .map-layout{grid-template-columns:minmax(0,1fr)}
  .map-stage{position:static;order:-1}
  .map-canvas{height:min(58vh,480px);min-height:300px}
  .map-list{max-height:none;min-height:0;overflow:visible}
}

/* ---- Prospects ---- */
.app-find{margin-bottom:20px}
.app-overnight{margin-bottom:16px;padding-bottom:20px}
.app-find-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:12px;padding:0 20px}
.app-find-note{margin:0;padding:12px 20px 16px;color:var(--text-secondary);font-size:13px}
.app-find-note code{font-size:12px;background:var(--surface-subtle);padding:1px 5px;border-radius:4px}
.app-score{display:inline-grid;place-items:center;min-width:32px;height:24px;padding:0 6px;border-radius:var(--r-sm);background:var(--surface-subtle);font-weight:700;font-size:13px}
.app-inline{display:inline}
.app-prospects td{white-space:nowrap}
.app-prospects .app-cell-name{white-space:normal;min-width:180px}
.app-prospects td,.app-prospects th{padding-inline:12px}
.app-prospects .app-cell-req strong{display:block;max-width:190px;overflow:hidden;text-overflow:ellipsis}
.app-prospects .app-cell-actions{text-align:right}
.app-prospects .app-cell-actions>*+*{margin-left:6px}
.app-add{margin-top:24px}
.app-add>summary{padding:16px 20px;font-weight:600;cursor:pointer}
.app-add-form{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;align-items:end;padding:0 20px 20px}
.app-add-form .ws-input{width:100%}
@media (max-width:767px){.app-find-form{display:grid;grid-template-columns:1fr}.app-find-form .ws-input{width:100%}}
.app-crumb{margin:0 0 8px}
.app-verdict{display:flex;gap:20px;align-items:flex-start}
.app-verdict p{margin:0 0 6px}
.app-verdict-score{flex:none;display:grid;place-items:center;align-content:center;width:96px;height:96px;border-radius:50%;background:var(--surface-subtle);box-shadow:inset 0 0 0 6px var(--primary-soft)}
.app-verdict-score strong{font-size:30px;line-height:1}
.app-verdict-score span{font-size:12px;color:var(--text-secondary);font-weight:600}
.app-verdict-score.is-none{box-shadow:inset 0 0 0 6px var(--warning-soft)}
.app-small{font-size:12px}
.app-findings{display:grid;grid-template-columns:1fr 1fr;gap:0;border-top:1px solid var(--border)}
.app-findings>div{padding:16px 20px}
.app-findings>div+div{border-left:1px solid var(--border)}
.app-findings h3,.app-subhead{font-size:13px;font-weight:600;color:var(--text-secondary);margin:16px 0 8px}
.app-findings h3{margin-top:0}
.app-list{list-style:none;margin:0;padding:0;display:grid;gap:10px}
.app-list li{display:grid;gap:2px;padding-left:22px;position:relative}
.app-list li::before{position:absolute;left:0;top:1px;font-weight:700}
.app-list.is-bad li::before{content:"✕";color:var(--danger)}
.app-list.is-good li::before{content:"✓";color:var(--success)}
.app-list.is-note li::before{content:"!";color:var(--warning)}
.app-list strong{font-weight:600}
.app-list span{color:var(--text-secondary);font-size:13px}
.app-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px 20px;margin:0}
.app-facts.is-stacked{grid-template-columns:1fr}
.app-facts dt{font-size:12px;color:var(--text-muted);font-weight:500}
.app-facts dd{margin:2px 0 0;overflow-wrap:anywhere}
.app-chips{display:flex;flex-wrap:wrap;gap:6px;margin:0}
.app-swatch{display:inline-block;width:18px;height:18px;margin-right:6px;border-radius:5px;border:1px solid var(--border);vertical-align:middle}
.app-pages{margin-top:16px}.app-pages summary{cursor:pointer;font-weight:600;font-size:14px}.app-pages .app-list{margin-top:8px}
.app-chips span{padding:4px 10px;border-radius:999px;background:var(--surface-subtle);border:1px solid var(--border);font-size:13px}
.app-quote{margin:0 0 10px;padding:10px 14px;background:var(--surface-subtle);border-radius:var(--r-md);font-size:14px}
.app-quote cite{display:block;margin-top:4px;font-style:normal;font-size:12px;color:var(--text-secondary)}
.app-steps{display:grid;gap:12px}
.app-steps p{margin:0}
.app-kind{display:flex;align-items:flex-end;gap:8px}
.app-kind .app-field{flex:1}
.app-kind .ws-input{width:100%;min-width:0}
@media (max-width:767px){.app-findings{grid-template-columns:1fr}.app-findings>div+div{border-left:0;border-top:1px solid var(--border)}.app-verdict{flex-direction:column}}
.app-busy-note{flex-basis:100%;margin:8px 0 0;font-size:13px;color:var(--text-secondary)}

/* ---- Owner setup (onboarding) ---- */
.setup-layout{display:grid;grid-template-columns:240px minmax(0,1fr);gap:24px;align-items:start}
.setup-nav{position:sticky;top:calc(var(--header-h) + 16px);background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:16px}
.setup-progress{margin:0 0 8px;font-size:13px;color:var(--text-secondary)}
.setup-progress strong{color:var(--text);font-size:16px}
.setup-nav ol{list-style:none;margin:14px 0 0;padding:0;display:grid;gap:2px}
.setup-nav a{display:flex;align-items:center;gap:10px;padding:8px;border-radius:var(--r-md);color:var(--text);text-decoration:none;font-size:14px}
.setup-nav a:hover{background:var(--surface-hover)}
.setup-check{display:inline-grid;place-items:center;width:22px;height:22px;border-radius:50%;flex:none;font-size:12px;font-weight:700;background:var(--surface-subtle);color:var(--text-secondary);box-shadow:inset 0 0 0 1.5px var(--control-border)}
.setup-nav a.is-done .setup-check{background:var(--success);color:#fff;box-shadow:none}
.setup-main{display:grid;gap:20px;min-width:0}
.setup-main>section{scroll-margin-top:calc(var(--header-h) + 16px)}
.setup-form :target{scroll-margin-top:calc(var(--header-h) + 72px);outline:2px solid var(--primary);outline-offset:2px}
.setup-missing{margin:0 0 12px;color:var(--text-secondary)}
.setup-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px 16px;padding:20px}
.setup-form .ws-input{width:100%;min-width:0}
.setup-form textarea.ws-input{min-height:96px;padding:10px 12px;resize:vertical}
.setup-form small{font-weight:400;color:var(--text-muted)}
.setup-wide,.setup-actions{grid-column:1/-1}
.setup-wide.ws-muted{margin:0}
.setup-rows{display:grid;gap:8px}
.setup-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.4fr);gap:8px}
.setup-hours{border:0;margin:0;padding:0;display:grid;gap:8px}
.setup-hours legend{font:500 13px/18px var(--font);margin-bottom:6px;padding:0}
.setup-day{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.setup-dayname{width:96px;font-weight:500;font-size:14px}
.setup-day input[type=time]{width:130px}
.setup-closed,.setup-check-line{display:inline-flex;align-items:center;gap:8px;font-size:14px}
.setup-logo{grid-column:1/-1;display:grid;place-items:center;min-height:96px;border:1px dashed var(--control-border);border-radius:var(--r-md);background:var(--surface-subtle);color:var(--text-muted);padding:12px}
.setup-logo img{max-height:80px;max-width:100%}
.setup-color{width:72px;height:40px;padding:2px;border:1px solid var(--control-border);border-radius:var(--r-md);background:var(--surface)}
.setup-photos{list-style:none;margin:16px 0 0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.setup-photos li{display:grid;gap:4px;font-size:13px}
.setup-photos img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--r-md);border:1px solid var(--border)}
.setup-photos small{color:var(--text-muted)}
.setup-photos form{margin-top:2px}
.setup-send{border-color:var(--primary)}
@media (max-width:900px){.setup-layout{grid-template-columns:1fr}.setup-nav{position:static}}
@media (max-width:640px){.setup-form{grid-template-columns:1fr}.setup-row{grid-template-columns:1fr}}
.setup-bar{width:100%}
.app-setup-banner{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;margin:0 0 20px;padding:16px 20px;border:1px solid var(--primary);border-radius:var(--r-lg);background:var(--primary-soft);color:var(--text);text-decoration:none}
.app-setup-banner strong{display:block;font-weight:600}
.app-setup-banner small{color:var(--text-secondary);font-size:13px}
.app-setup-banner-meta{display:flex;align-items:center;gap:14px;font-weight:600;color:var(--text-secondary)}
.app-setup-banner:hover .ws-button{background:var(--primary-hover)}
.app-notes{width:100%;min-height:110px;padding:10px 12px;resize:vertical}

/* ---- Agent office ---- */
.office-status{display:flex;flex-wrap:wrap;gap:8px 20px;margin:0 0 14px;font-size:14px;color:var(--text-secondary)}
.office-status b{color:var(--text);font-size:16px}
.office-runner{color:var(--warning);font-weight:600}
.office-floor-wrap{display:grid;grid-template-columns:minmax(0,1fr) 220px;gap:16px;align-items:start;margin-bottom:20px}
.office-floor{width:100%;height:auto;border:1px solid var(--border);border-radius:var(--r-lg);image-rendering:pixelated;cursor:pointer;background:var(--surface-subtle)}
.office-team{list-style:none;margin:0;padding:0;display:grid;gap:6px}
.office-team button{all:unset;box-sizing:border-box;width:100%;display:grid;grid-template-columns:12px 1fr;gap:2px 10px;align-items:center;padding:9px 12px;border:1px solid var(--border);border-radius:var(--r-md);background:var(--surface);cursor:pointer}
.office-team button:hover{border-color:var(--primary)}
.office-team button[aria-pressed="true"]{border-color:var(--primary);box-shadow:0 0 0 1px var(--primary)}
.office-team button:focus-visible{outline:2px solid var(--primary);outline-offset:2px}
.office-team b{font-size:14px;font-weight:600}
.office-team small{grid-column:2;font-size:12px;color:var(--text-muted)}
.office-dot{width:10px;height:10px;border-radius:3px;display:inline-block;flex:none}
.office-board{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:20px}
.office-col{background:var(--surface-subtle);border-radius:var(--r-lg);padding:12px;display:grid;gap:8px;align-content:start;min-height:120px}
.office-col h2{font-size:14px;font-weight:600;margin:0;display:flex;justify-content:space-between}
.office-col h2 span{color:var(--text-muted)}
.office-cards{display:grid;gap:8px}
.office-empty{margin:0;font-size:13px;color:var(--text-muted)}
.office-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-md);padding:10px 12px;display:grid;gap:6px}
.office-card-head{display:flex;align-items:center;gap:8px}
.office-card-head small{font-size:12px;color:var(--text-muted)}
.office-card h3{font-size:14px;font-weight:600;margin:0;line-height:1.35}
.office-meta{margin:0;font-size:12px;color:var(--text-muted)}
.office-log{margin:0;padding:8px 10px 8px 26px;background:var(--surface-subtle);border-radius:var(--r-sm);font:12px/1.5 ui-monospace,Consolas,monospace;color:var(--text-secondary);overflow-wrap:anywhere}
.office-result{white-space:pre-wrap;font-size:13px;margin:6px 0 0}
.office-card details summary{cursor:pointer;font-size:13px;font-weight:600;color:var(--primary-text)}
.office-actions{display:flex;flex-wrap:wrap;gap:6px}
.office-actions form{display:inline}
.office-diff{margin:0;max-height:220px;overflow:auto;font-size:12px;background:var(--surface-subtle);padding:8px;border-radius:var(--r-sm)}
.office-howto{margin-top:8px}
.office-howto>summary{padding:14px 20px;font-weight:600;cursor:pointer}
.office-howto pre{background:var(--surface-subtle);padding:10px 12px;border-radius:var(--r-md);overflow-x:auto}
.office-dialog{width:min(560px,calc(100vw - 32px))}
.office-form{display:grid;gap:12px;padding:0 20px 20px}
.office-form .ws-section-head{padding:16px 0 4px}
.office-form .ws-input{width:100%}
.office-form textarea.ws-input{min-height:120px;padding:10px 12px}
.office-form-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.office-form-actions{display:flex;gap:8px}
@media (max-width:1100px){.office-board{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:900px){.office-floor-wrap{grid-template-columns:1fr}.office-team{grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}}
@media (max-width:560px){.office-board{grid-template-columns:1fr}}
@media (max-width:600px){article.ws-row{flex-wrap:wrap}article.ws-row>.ws-action-row{flex-basis:100%;padding-left:22px}}

/* Review requests: owner Reviews page, request message, public /r page */
.ws-flash.warn{border-left-color:var(--warning);background:var(--warning-soft)}
.reviews-measures{grid-template-columns:repeat(4,minmax(0,1fr))}
.reviews-measures .app-measure::after{display:none}
.review-row{align-items:flex-start}
.review-steps,.review-send{display:flex;flex-wrap:wrap;gap:8px}
.review-note{margin:8px 0 0;padding:10px 12px;border-radius:var(--r-md);background:var(--surface-2,var(--primary-soft));white-space:pre-wrap;overflow-wrap:anywhere}
.review-note small{display:block;margin-top:6px;color:var(--text-secondary)}
.review-howto-title{margin:20px 0 6px;font-size:15px}
.review-howto{margin:0 0 12px;padding-left:20px;line-height:1.6}
.review-counts li strong{color:var(--text)}
.review-counts li strong::before{content:none}
.review-public h1{margin:0 0 8px}
.review-choices{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:22px 0}
.review-choice{display:flex;align-items:center;justify-content:center;min-height:52px;width:100%;text-align:center}
.review-missing{margin:0;padding:10px 14px;border:1px dashed var(--border);border-radius:var(--r-md);color:var(--text-secondary);font-size:14px}
.review-private{margin-top:8px}
.review-trap{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
@media(max-width:600px){.review-row{flex-wrap:wrap}.review-row>.ws-row-main{flex:1 1 100%}.reviews-measures{grid-template-columns:repeat(2,minmax(0,1fr))}.review-choices{grid-template-columns:minmax(0,1fr)}.review-send .ws-button{flex:1 1 100%;min-height:44px}}
/* ================= Speed to lead + on my way (Today, visit detail) ================= */
.speed-panel{margin:0 0 20px}
.speed-panel .ws-section-head{flex-wrap:wrap;gap:4px 16px}
.speed-panel h2{display:flex;align-items:center;gap:8px}
.speed-avg{color:var(--text-secondary);font-size:13px}
.speed-avg strong{color:var(--text);font-weight:600}
.speed-panel.is-clear .ws-section-head{border-bottom:0}
.speed-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px 16px;align-items:center;padding:12px 20px;border-top:1px solid var(--border)}
.ws-section-head+.speed-row{border-top:0}
.speed-main{display:flex;flex-direction:column;min-width:0;color:var(--text);text-decoration:none}
.speed-main strong{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.speed-main span{font-size:13px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.speed-main:hover strong{text-decoration:underline}
.speed-timer{justify-self:start;font:600 12px/16px var(--font);padding:4px 8px;border-radius:var(--r-sm);white-space:nowrap;background:var(--primary-soft);color:var(--primary-text)}
.speed-timer.is-warn{background:var(--warning-soft);color:var(--warning)}
.speed-timer.is-late{background:var(--danger-soft);color:var(--danger)}
.speed-actions{display:flex;flex-wrap:wrap;gap:8px;justify-content:flex-end}
.speed-actions form{margin:0}
.speed-more{display:block;padding:12px 20px;border-top:1px solid var(--border)}
.speed-visit{border-top:1px solid var(--border)}
.ws-section-head+.speed-visit{border-top:0}
.speed-visit>.app-visit{border-top:0}
.speed-omw{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:0 20px 12px 84px}
.speed-omw-label{font-size:13px;font-weight:600;color:var(--text)}
.speed-omw-btn{min-height:36px;padding:0 12px}
.speed-omw-status{flex-basis:100%;font-size:12px}
.speed-omw-status:empty{display:none}
.field-visit-detail .speed-omw{padding:16px 0 12px}
@media (max-width:767px){
  .speed-row{grid-template-columns:minmax(0,1fr) auto;padding:12px 16px}
  .speed-actions{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,.7fr) minmax(0,1.3fr);justify-content:stretch}
  .speed-actions .ws-button{width:100%;min-height:44px;padding:0 8px}
  .speed-omw{padding:0 16px 12px}
  .speed-omw-btn{min-height:44px;flex:1}
}

/* phone quick-action bar: icons over labels, "New" opens a small menu upward */
@media (max-width:767px){
  .field-mobile-nav{align-items:stretch}
  .field-mobile-nav>a,.field-mobile-nav>button,.field-mobile-nav>details>summary{flex-direction:column;gap:2px;min-height:52px;padding:4px 0;font-size:11px;line-height:14px}
  .field-mobile-nav .ws-icon{width:22px;height:22px}
  .field-mobile-nav>details{position:relative;display:flex}
  .field-mobile-nav>details>summary{display:flex;align-items:center;justify-content:center;flex:1;list-style:none;color:var(--primary-text);font-weight:600;cursor:pointer;border-radius:var(--r-md)}
  .field-mobile-nav>details>summary::-webkit-details-marker{display:none}
  .field-mobile-nav>details>summary .ws-icon{background:var(--primary);color:var(--on-primary);border-radius:999px;padding:3px}
  .field-mobile-nav .app-menu{top:auto;bottom:calc(100% + 10px);left:50%;right:auto;width:220px;margin-left:-110px}
  .field-mobile-nav .app-menu a{justify-content:flex-start;font-size:15px;min-height:44px;color:var(--text)}
  .field-mobile-nav :focus-visible{outline:0;box-shadow:var(--focus)}
  .ws-owner-main{padding-bottom:0}
}
.app-empty .ws-button+.ws-button{margin-left:8px}
/* Online booking: held requests on the calendar and the Today card */
.fc .fc-event.is-requested{--fc-event-bg-color:var(--warning-soft);--fc-event-border-color:var(--warning);--fc-event-text-color:var(--text);background:var(--warning-soft)!important;border:2px dashed var(--warning)!important;color:var(--text)!important}
.fc .fc-list-event.is-requested .fc-list-event-dot{border-color:var(--warning)}
.booking-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 16px;padding:12px 0;border-top:1px solid var(--border)}
.booking-row:first-of-type,.ws-section-head+.booking-row,h2+.booking-row{border-top:0}.booking-row .booking-main{display:grid;gap:2px;min-width:0}
.booking-row .booking-main span{color:var(--text-secondary);font-size:13px}
.booking-actions{display:flex;flex-wrap:wrap;gap:8px}
.booking-actions form{margin:0}
.booking-days{display:grid;grid-template-columns:minmax(120px,160px) minmax(0,150px) minmax(0,150px);gap:8px 12px;align-items:center}
.booking-days input[type=time]{min-height:40px}
.booking-check{display:flex;align-items:center;gap:8px;font-weight:500}
.booking-check input{width:20px;height:20px;flex:none}
.booking-services{display:grid;gap:8px}
.booking-service{display:grid;grid-template-columns:minmax(0,1fr) 150px;gap:12px;align-items:center}
.booking-message{margin:12px 0;padding:12px 16px;background:var(--surface-subtle);border-radius:var(--r-md);white-space:pre-wrap;overflow-wrap:anywhere}
.booking-facts{display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;margin:12px 0}
.booking-facts dt{color:var(--text-secondary)}.booking-facts dd{margin:0;overflow-wrap:anywhere}
.booking-suggest{margin:16px 0}
.booking-stack{display:grid;gap:16px}.booking-stack>.ws-panel{margin:0}
.booking-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-top:16px}
.booking-link{display:flex;gap:8px;flex-wrap:wrap}.booking-link input{flex:1 1 260px}
@media (max-width:640px){.booking-days{grid-template-columns:1fr 1fr}.booking-days .booking-check{grid-column:1/-1}.booking-service{grid-template-columns:1fr}}
.booking-card{margin:0 0 20px}
@media (max-width:640px){
  .booking-card .booking-row{display:grid;grid-template-columns:minmax(0,1fr)}
  .booking-card .booking-actions{display:grid;grid-template-columns:1fr 1fr}
  .booking-card .booking-actions>a{order:3;grid-column:1/-1}
  .booking-card .booking-actions .ws-button{width:100%}
}

/* ---- Insights: inquiry-to-paid funnel ---- */
.ins-funnel{margin:0 0 24px}
.ins-steps{list-style:none;margin:0;padding:16px 20px 20px;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}
.ins-steps li{position:relative;display:grid;gap:2px;padding:14px 16px;border-radius:var(--r-md);background:var(--surface-subtle);border:1px solid var(--border)}
.ins-steps li:not(:last-child)::after{content:"";position:absolute;right:-10px;top:50%;width:7px;height:7px;border-top:2px solid var(--text-muted);border-right:2px solid var(--text-muted);transform:translateY(-50%) rotate(45deg)}
.ins-steps span{font:500 13px/18px var(--font);color:var(--text-secondary)}
.ins-steps small{font-size:12px;line-height:18px;color:var(--text-muted)}
.ins-steps strong{font:650 24px/30px var(--font);letter-spacing:-.02em;color:var(--text)}
.ins-steps .won{background:var(--success-soft);border-color:color-mix(in srgb,var(--success) 35%,var(--border))}
.ins-steps .won strong{color:var(--success)}
.ins-hint{margin:0;padding:0 20px 16px}
@media (max-width:1100px){.ins-steps{grid-template-columns:repeat(3,minmax(0,1fr))}.ins-steps li::after{display:none}}
@media (max-width:767px){.ins-steps{grid-template-columns:1fr 1fr;padding:12px 16px 16px;gap:8px}.ins-steps strong{font-size:20px;line-height:26px}.ins-steps .won{grid-column:1/-1}}

/* ================= 6. Money: estimates + invoices (owner) ==========   One stats row, list, line editor and totals pattern for templates/estimate*.html and invoice*.html. */
.est-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:0 0 24px}
.est-stats>div{display:grid;gap:2px;padding:16px 20px;border:1px solid var(--border);border-radius:var(--r-lg);background:var(--surface)}
.est-stats span{font:500 13px/18px var(--font);color:var(--text-secondary)}
.est-stats small{font-size:12px;line-height:18px;color:var(--text-muted)}
.est-stats strong{font:650 28px/34px var(--font);letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--text)}
.est-stats .inv-late{border-color:color-mix(in srgb,var(--danger) 45%,var(--border))}
.est-stats .inv-late strong{color:var(--danger)}
.est-chase{margin:0 0 24px;border-color:color-mix(in srgb,var(--warning) 50%,var(--border))}
.est-chase>p{margin:-6px 0 12px}
.est-list,.inv-late-list{list-style:none;margin:0 -20px -20px;padding:0}
.est-list a,.inv-late-main{display:grid;grid-template-columns:52px minmax(0,1fr) auto 92px;gap:12px;align-items:center;min-height:56px;padding:10px 20px;border-top:1px solid var(--border);text-decoration:none;color:var(--text)}
.est-list a:hover,.inv-late-main:hover{background:var(--surface-hover)}
.est-list>li>a>:last-child{justify-self:end}
.est-no{color:var(--text-muted);font-size:13px;font-variant-numeric:tabular-nums}
.est-main{display:grid;gap:2px;min-width:0}
.est-main strong{font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.est-main small{font-size:13px;color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.est-amt{font-weight:650;font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.inv-late-list li{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:12px;border-top:1px solid var(--border);padding-right:20px}
.inv-late-main{grid-template-columns:52px minmax(0,1fr) auto;border-top:0}
.inv-remind{flex-wrap:nowrap}
.est-empty{padding:0;max-width:56ch}
.est-empty strong{display:block;font:600 15px/22px var(--font)}
.est-empty p{margin:2px 0 0;color:var(--text-secondary)}
.est-side{display:grid;gap:20px;align-content:start;min-width:0}
.est-small{font-size:13px;line-height:19px;color:var(--text-secondary);margin:0}
.ws-actions+.est-small,.ws-form+.est-small,.ws-flash+.ws-actions{margin-top:12px}
.est-grid{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(280px,1fr);gap:24px;align-items:start}
.est-form{display:grid;gap:16px}
.est-lines{display:grid;gap:8px}
.est-row{display:grid;grid-template-columns:minmax(0,1fr) 64px 104px 128px 100px;gap:8px;align-items:center}
.inv-lines .est-row{grid-template-columns:minmax(0,1fr) 64px 112px 100px}
.est-head{font:500 12px/16px var(--font);color:var(--text-muted)}
.est-head .n,.est-row output{text-align:right}
.est-row input[name=item_qty],.est-row input[name=item_price]{text-align:right;font-variant-numeric:tabular-nums}
.est-row output{font-variant-numeric:tabular-nums;font-weight:600}
.est-add{justify-self:start}
.est-foot{display:grid;grid-template-columns:110px 170px minmax(0,1fr);gap:12px;align-items:end;border-top:1px solid var(--border);padding-top:16px}
.est-totals{margin:0;display:grid;gap:4px;justify-self:end;min-width:220px}
.est-totals div{display:flex;justify-content:space-between;gap:20px;font-variant-numeric:tabular-nums}
.est-totals dt{color:var(--text-secondary)}
.est-totals dd{margin:0;text-align:right}
.est-total{font:650 20px/28px var(--font);border-top:1px solid var(--border);padding-top:6px;margin-top:2px}
.est-total dt{color:var(--text)}
.inv-bal{font-weight:650}
.inv-how{white-space:pre-line}
.est-signed{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.est-signed form{margin:0}
.est-share{flex-wrap:wrap}
.est-history{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.est-history+form{margin-top:16px}
.est-history small{display:block;font-size:12px;color:var(--text-muted)}
.inv-pays{list-style:none;margin:0 0 16px;padding:0}
.inv-pays li{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 0;border-bottom:1px solid var(--border);font-variant-numeric:tabular-nums}
.inv-pays small{display:block;font-size:12px;color:var(--text-muted)}
.inv-pays form{margin:0}
.inv-x{min-height:36px;padding:0 12px;font-size:13px}
@media (pointer:coarse){.inv-x{min-height:44px}}
.inv-payform h3{margin:4px 0 0;font:600 15px/22px var(--font)}
.inv-two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.inv-void{color:var(--danger)}
.ws-page-head h1 .ws-badge{vertical-align:6px;margin-left:6px}
@media (max-width:1023px){.est-grid{grid-template-columns:minmax(0,1fr)}}
@media (max-width:640px){
  .est-stats{grid-template-columns:minmax(0,1fr);gap:8px}
  .est-stats>div{grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:0 12px;padding:12px 16px}
  .est-stats strong{font-size:20px;line-height:28px;grid-row:1/3;grid-column:2;text-align:right}
  .est-list a{grid-template-columns:minmax(0,1fr) auto;gap:4px 12px;padding:12px 20px}
  .est-list .est-no{display:none}
  .est-list .est-main{grid-row:1/3}
  .est-list>li>a>:last-child{grid-column:2}
  .inv-late-list li{grid-template-columns:minmax(0,1fr);gap:0;padding:0 20px 12px 0}
  .inv-late-main{grid-template-columns:minmax(0,1fr) auto}
  .inv-late-main .est-no{display:none}
  .inv-remind{padding-left:20px}
  .inv-remind .ws-button{flex:1}
  .est-row,.inv-lines .est-row{grid-template-columns:72px minmax(0,1fr) minmax(0,1fr);padding-bottom:12px;border-bottom:1px solid var(--border)}
  .est-row:last-child{border-bottom:0}
  .est-row>input[name=item_description]{grid-column:1/-1}
  .est-row output{grid-column:1/-1}
  .inv-lines .est-row output{grid-column:auto}
  .est-head{display:none}
  .est-foot{grid-template-columns:1fr 1fr}
  .est-totals{grid-column:1/-1;justify-self:stretch}
  .est-share .ws-button,.est-signed .ws-button,.inv-payform>.ws-button{flex:1 1 auto;width:100%}
}

/* ================= 7. Public customer pages =================
   Estimate (/e), invoice (/i), booking (/book), customer page (/c) and review (/r) share one layout:
   business identity header, one card (or a stack of cards), a short footer note. Theme follows the device
   (static/display.js). Printing always uses the light palette. */
body.field-public-body{margin:0;padding:40px 16px 56px;background:var(--canvas);color:var(--text);font:400 15px/1.55 var(--font);-webkit-font-smoothing:antialiased}
.pub{max-width:760px;margin:0 auto;display:grid;gap:16px}
.pub.narrow{max-width:640px}
.pub h1{margin:0;font:650 26px/32px var(--font);letter-spacing:-.02em;color:var(--text);text-wrap:balance}
.pub h2{margin:0 0 8px;font:600 17px/24px var(--font);color:var(--text)}
.pub-head{display:flex;justify-content:space-between;align-items:center;gap:16px;margin:0 0 8px}
.pub-brand{display:flex;gap:14px;align-items:center;min-width:0}
.pub-brand img{width:48px;height:48px;flex:none;border-radius:10px;object-fit:contain;background:var(--surface)}
.pub-brand strong{display:block;font:650 19px/26px var(--font);letter-spacing:-.01em}
.pub-brand p{margin:2px 0 0;color:var(--text-secondary);font-size:14px;line-height:20px}
.pub-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-lg);padding:clamp(20px,4vw,32px);min-width:0}
.pub-foot{margin:4px 0 0;color:var(--text-muted);font-size:13px;line-height:20px}
.pub-foot a{color:var(--text-secondary)}
.pub-title{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.pub-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px 16px;margin:16px 0 24px;font-size:14px;font-variant-numeric:tabular-nums}
.pub-meta span{display:block;font-size:12px;line-height:16px;color:var(--text-muted)}
.pub-lead{margin:16px 0 0;font-weight:600}
.pub-lead+.pub-meta{margin-top:8px}
.pub-table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums}
.pub-table th{padding:8px 0;border-bottom:1px solid var(--control-border);font:500 12px/16px var(--font);color:var(--text-muted);text-align:left}
.pub-table td{padding:12px 0;border-bottom:1px solid var(--border);vertical-align:top}
.pub-table .n{text-align:right;padding-left:12px;white-space:nowrap}
.pub-totals{margin:16px 0 0 auto;max-width:300px;display:grid;gap:6px;font-variant-numeric:tabular-nums}
.pub-totals div{display:flex;justify-content:space-between;gap:16px}
.pub-totals small{color:var(--text-muted)}
.pub-totals .big{font:650 22px/30px var(--font);border-top:1px solid var(--text);padding-top:8px;margin-top:2px}
.pub-notes{margin:24px 0 0;white-space:pre-wrap}
.pub-box{margin:24px 0 0;padding:16px 18px;border-radius:var(--r-md);background:var(--surface-subtle);border:1px solid var(--border)}
.pub-box h2{font-size:16px;line-height:22px;margin:0 0 4px}
.pub-box p{margin:0;white-space:pre-wrap}
.pub-pay{margin:24px 0 0}
.pub-addon{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;min-height:48px;padding:6px 0;border-top:1px solid var(--border);cursor:pointer;font-variant-numeric:tabular-nums}
.pub-addon input,.pub-agree input{width:22px;height:22px;margin:0;flex:none;accent-color:var(--brand)}
.pub-newtotal{display:flex;justify-content:space-between;margin:0;padding-top:10px;border-top:1px solid var(--border);font-size:17px;font-variant-numeric:tabular-nums}
.pub-sign{display:grid;gap:14px;margin-top:28px;padding-top:24px;border-top:1px solid var(--border)}
.pub-sign h2{margin:0}
.pub-sign>label{display:grid;gap:6px;font-weight:600;font-size:14px}
.pub .pub-sign input.pub-sig[name]{font:italic 26px/1.2 Georgia,"Times New Roman",serif;border:0;border-bottom:2px solid var(--text);border-radius:0;background:transparent;color:var(--text);padding:8px 2px;width:100%;box-sizing:border-box}
.pub .pub-sign input.pub-sig[name]:focus{outline:none;border-bottom-color:var(--primary);box-shadow:0 2px 0 0 var(--primary)}
.pub-sign>.pub-agree{display:flex;gap:12px;align-items:flex-start;font-weight:400;min-height:44px;cursor:pointer}
.pub-agree input{margin-top:1px}
.pub-sign .ws-button,.pub-form .ws-button,.pub-decline .ws-button{justify-self:start}
.pub-done{text-align:center;padding:20px 0 4px}
.pub-done strong{display:block;font:650 22px/30px var(--font);margin-bottom:6px}
.pub-done p{margin:0;color:var(--text-secondary)}
.pub-decline{margin-top:16px}
.pub-decline>summary{display:inline-flex;align-items:center;gap:10px;min-height:44px;cursor:pointer;color:var(--text-secondary);font-weight:500;list-style:none}
.pub-decline>summary::-webkit-details-marker{display:none}
.pub-decline>summary::after{content:"";width:7px;height:7px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:translateY(-2px) rotate(45deg);transition:transform 140ms var(--ease)}
.pub-decline[open]>summary::after{transform:translateY(2px) rotate(225deg)}
.pub-box p.ws-muted{font-size:14px;line-height:20px;margin-bottom:4px}
.pub-decline form{display:grid;gap:12px;margin-top:4px}
/* booking steps */
.pub-step{color:var(--text-secondary);font-size:13px;margin:4px 0 16px}
.pub-picks{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:8px}
.pub-picks a{display:grid;gap:2px;justify-items:center;align-content:center;padding:12px 8px;min-height:52px;border:1px solid var(--control-border);border-radius:var(--r-md);color:var(--text);text-decoration:none;text-align:center;font-weight:600;font-variant-numeric:tabular-nums;transition:border-color 120ms var(--ease),background-color 120ms var(--ease)}
.pub-picks a span{font-weight:400;font-size:13px;color:var(--text-secondary)}
.pub-picks a:hover{border-color:var(--brand);background:var(--brand-soft)}
.pub-chosen{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding:6px 8px 6px 14px;border-radius:var(--r-md);background:var(--surface-subtle);margin:0 0 8px}
.pub-chosen+h1{margin-top:20px}
.pub-chosen .ws-text-link,.pub-card .pub-more{min-height:44px;padding:0 6px}
.pub-form{display:grid;gap:16px;margin-top:8px}
.pub-note{white-space:pre-wrap;color:var(--text-secondary);margin:0 0 16px}
/* customer page lists */
.pub-list{list-style:none;margin:0;padding:0}
.pub-list li{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:12px 0;border-top:1px solid var(--border)}
.pub-list li:first-child{border-top:0;padding-top:4px}
.pub-list li>div{min-width:0}
.pub-list small{display:block;color:var(--text-secondary);font-size:13px;font-variant-numeric:tabular-nums}
.pub-list .ws-button{flex:none}
.pub-when{font-weight:600}
.pub-empty{color:var(--text-secondary);margin:0}
.pub-trap{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}
@media (max-width:600px){
  body.field-public-body{padding:20px 16px 40px}
  .pub h1{font-size:23px;line-height:29px}
  .pub-head{align-items:flex-start}
  .pub-meta{grid-template-columns:1fr 1fr}
  .pub-table{font-size:14px}
  .pub-totals{max-width:none}
  .pub-sign .ws-button,.pub-form .ws-button,.pub-decline .ws-button{justify-self:stretch;width:100%}
  .pub-list li{flex-wrap:wrap}
  .pub-list li>.ws-button{width:100%}
  .review-public .ws-form .ws-button{width:100%}
}
@media print{
  :root,:root[data-theme="dark"]{color-scheme:light;--canvas:#fff;--surface:#fff;--surface-subtle:#F3F5F9;--text:#111827;--text-secondary:#374151;--text-muted:#4B5563;--border:#D1D5DB;--control-border:#6B7280}
  body.field-public-body{padding:0;background:#fff}
  .pub{max-width:none}
  .pub-sign,.pub-decline,.pub-addons,.pub-head .ws-button,.pub-pay .ws-button{display:none!important}
  .pub-card{border:0;padding:0}
  .pub-table tr,.pub-totals{break-inside:avoid}
}

/* ---- Job checklists and photos (services/job_checklists.py) ---- */
.jc-grid{margin-top:16px}
.jc-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin:0 0 12px}
.jc-head h2{margin:0;font:600 17px/24px var(--font)}
.jc-progress{margin:0 0 8px;color:var(--text-secondary);font-variant-numeric:tabular-nums}
.jc-progress strong{color:var(--text)}
.jc-bar{height:6px;border-radius:999px;background:var(--surface-subtle);overflow:hidden;margin:0 0 12px}
.jc-bar span{display:block;height:100%;background:var(--success);border-radius:inherit}
.jc-steps{list-style:none;margin:0 0 12px;padding:0}
.jc-step{display:grid;grid-template-columns:28px minmax(0,1fr);gap:12px;padding:12px 0;border-top:1px solid var(--border)}
.jc-step:first-child{border-top:0}
.jc-tick{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;font:600 13px/1 var(--font);background:var(--surface-subtle);color:var(--text-secondary);font-variant-numeric:tabular-nums}
.jc-step.is-done .jc-tick{background:var(--success-soft);color:var(--success)}
.jc-step.is-skipped .jc-tick{background:var(--warning-soft);color:var(--warning)}
.jc-step.is-done .jc-text,.jc-step.is-skipped .jc-text{color:var(--text-secondary)}
.jc-text{margin:3px 0 0;overflow-wrap:anywhere}
.jc-text .ws-badge{height:20px;font-size:11px;vertical-align:1px}
.jc-body small{display:block;color:var(--text-secondary);font-size:13px;margin-top:2px;overflow-wrap:anywhere}
.jc-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:flex-start;margin-top:8px}
.jc-actions form{margin:0}
.jc-photo-step{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.jc-photo-step select{width:auto;min-width:110px}
.jc-file{position:relative;overflow:hidden;cursor:pointer}
.jc-file input{position:absolute;inset:0;opacity:0;cursor:pointer}
.jc-file:focus-within{box-shadow:var(--focus)}
.jc-skip summary{list-style:none;cursor:pointer}
.jc-skip summary::-webkit-details-marker{display:none}
.jc-skip[open] summary{display:none}
.jc-skip-form{display:flex;flex-wrap:wrap;gap:8px}
.jc-skip-form .ws-input{flex:1 1 200px}
.jc-attach .ws-input{flex:1 1 220px;width:auto}
.jc-upload{margin-bottom:8px}
.jc-sub{margin:20px 0 8px;font:600 14px/20px var(--font);color:var(--text-secondary)}
.jc-pair{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:12px}
.jc-strip{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.jc-photo{margin:0;min-width:0}
.jc-photo img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--r-md);border:1px solid var(--border);background:var(--surface-subtle)}
.jc-photo figcaption{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:center;padding:8px 0 4px}
.jc-photo figcaption small{color:var(--text-secondary);font-size:12px;overflow-wrap:anywhere}
.jc-photo-actions{display:flex;flex-direction:column;gap:6px;align-items:stretch}
.jc-photo-actions form{margin:0}
.jc-photo-actions .ws-button{width:100%;min-height:36px;font-size:13px;padding:0 10px}
.jc-toggle{display:flex;align-items:center;gap:8px;width:100%;min-height:36px;padding:0 10px;border:1px solid var(--control-border,var(--border));border-radius:var(--r-md);background:var(--surface);color:var(--text);font:500 13px/1.2 var(--font);text-align:left;cursor:pointer}
.jc-toggle::before{content:"";flex:none;width:16px;height:16px;border-radius:4px;border:1.5px solid var(--control-border,var(--border));background:var(--surface)}
.jc-toggle[aria-pressed="true"]{border-color:var(--success);background:var(--success-soft)}
.jc-toggle[aria-pressed="true"]::before{background:var(--success);border-color:var(--success);box-shadow:inset 0 0 0 3px var(--success-soft)}
.jc-remove{color:var(--danger)}
.jc-templates .ws-panel-body>.app-empty{padding:16px 0}
.jc-template-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-top:1px solid var(--border)}
.jc-template-row:first-child{border-top:0}
.jc-template-row p{margin:2px 0 0}
.jc-template-row.is-editing strong{color:var(--primary-text)}
.jc-starters{display:grid;gap:8px}
.jc-starters form{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-md);margin:0}
.jc-starters small{display:block;color:var(--text-secondary);font-size:13px}
.jc-steps-edit{border:0;margin:0;padding:0;min-width:0}
.jc-steps-edit legend{font-weight:600;padding:0;margin-bottom:4px}
.jc-steps-edit>.ws-muted{margin:0 0 8px}
.jc-step-edit{display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:6px 12px;align-items:center;padding:6px 0}
.jc-step-edit input.ws-input{grid-column:2/-1}
.jc-step-edit label:first-of-type{grid-column:2;justify-self:start}
.jc-step-edit label{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--text-secondary);white-space:nowrap}
.jc-num{color:var(--text-muted);font:600 13px/1 var(--font);text-align:right;font-variant-numeric:tabular-nums}
.jc-delete{margin-top:16px}
.jc-delete .ws-button{color:var(--danger)}
.pub-photos{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:8px}
.pub-photos img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:var(--r-md);border:1px solid var(--border)}
@media (max-width:600px){
  .jc-pair{gap:8px}
  .jc-strip{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .jc-actions>form>.ws-button,.jc-actions .jc-skip summary{min-height:44px}
  .jc-photo-step{width:100%}
  .jc-photo-step>*{flex:1 1 auto}
}

/* Recurring jobs */
.rec-form:has(select[name=cadence] option[value^="w"]:checked) .rec-monthday,
.rec-form:has(select[name=cadence] option[value^="m"]:checked) .rec-weekday,
.rec-form:has(select[name=cadence] option[value^="y"]:checked) .rec-weekday{display:none}
.rec-end{border:0;padding:0;margin:0;display:grid;gap:8px}
.rec-end legend{font-weight:600;margin-bottom:4px}
.rec-end .ws-check{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.rec-end input[type=radio]{width:18px;height:18px;margin:0;flex:none}
.rec-end input.rec-short{width:6.5rem;flex:0 0 auto}
.rec-end input.rec-short[type=date]{width:11rem}
.rec-make>summary{list-style:none;cursor:pointer;display:inline-flex}
.rec-make>summary::-webkit-details-marker{display:none}
.rec-make[open]>summary{margin-bottom:12px}
.rec-needs{border:1px solid var(--warning);background:var(--warning-soft);border-radius:12px;padding:12px 14px;margin:12px 0;display:grid;gap:12px}
.rec-needs h3{margin:0}
.rec-need{display:grid;gap:8px}
.rec-need p{margin:0}
.rec-need input.ws-input{width:auto;max-width:100%}
.rec-need .ws-form-row{flex-wrap:wrap;align-items:center}
.rec-upcoming{margin:0 0 12px;padding-left:18px;display:grid;gap:4px}
.rec-list{margin-bottom:16px}
.rec-badge{font-weight:700}
.fc .fc-event.is-recurring .fc-event-title::before,.fc .fc-list-event.is-recurring .fc-list-event-title a::before{content:"\21BB  ";font-weight:700}
.app-guide{white-space:pre-wrap;overflow-wrap:anywhere;margin:0;font:14px/1.6 ui-monospace,Consolas,monospace;color:var(--text)}
