.selection-delete{border-top:1px solid var(--line);margin-top:6px}
.sel-bar .sel-more-menu .selection-delete,.sel-bar .organise-menu .selection-delete{border-top:1px solid var(--line)}
/* Review controls reuse the Shelf's warm paper and ink palette. */
.shelf-review-check{position:absolute;top:4px;right:4px;z-index:5;display:grid;place-items:center;width:44px;height:44px;padding:12px;border:0;background:transparent;color:var(--ink);cursor:pointer}
.shelf-review-check svg{width:20px;height:20px;padding:3px;box-sizing:border-box;border:1px solid var(--line-2);border-radius:50%;background:var(--surface)}
.shelf-review-check:hover svg{border-color:var(--accent);color:var(--accent-ink)}
.shelf-review-check:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.shelf-reviewable>.sel-check{right:4px!important;top:50px!important}
.shelf-category-placeholder{display:grid;place-items:center;background:var(--surface-2);color:var(--muted)}
.ph-cell-ph.shelf-category-placeholder{background:var(--surface-2);color:var(--muted)}
.card-category{color:var(--muted);font:500 var(--fs-xs)/1.35 var(--font-ui);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shelf-category-placeholder>svg{width:32%;height:32%;max-width:64px;opacity:.6}
#shelfReviewAll{min-height:44px;white-space:nowrap}
#canvasVP .shelf-review-check{width:calc(44px / var(--cv-k,.6));height:calc(44px / var(--cv-k,.6));padding:calc(12px / var(--cv-k,.6))}
#canvasVP .shelf-review-check svg{width:calc(20px / var(--cv-k,.6));height:calc(20px / var(--cv-k,.6))}
body.sel-mode .shelf-review-check{display:none}
body.sel-mode .shelf-reviewable>.sel-check{top:4px!important}
/* Email-first Shelf membership. Business seats remain separate. */
.settings-member-add{display:flex;align-items:flex-end;gap:12px;flex-wrap:wrap;padding:16px 0}
.settings-member-add label{display:flex;flex-direction:column;gap:6px;font-size:12px;font-weight:600}
.settings-member-add label:first-child{flex:1;min-width:200px}
.settings-member-add input,.settings-member-add select,.settings-member-actions select{font:inherit;background:var(--surface-2,#211b13);color:var(--ink,#efe7d6);border:1px solid var(--border,#433726);border-radius:7px;padding:10px;min-height:40px}
.settings-member-row{flex-wrap:wrap}
.settings-member-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.settings-member-row .settings-person-copy{min-width:150px;overflow-wrap:anywhere}
.settings-reusable-links{margin:24px 0}
.settings-reusable-links summary{cursor:pointer;font-weight:600;padding:12px 0}
@media(max-width:600px){.settings-member-add>button{width:100%}.settings-member-actions{width:100%}.settings-member-row{gap:12px}}
/* Shared shelf membership controls (also used in the booking header). */
.shelf-account{position:relative;display:flex;align-items:center;gap:10px;min-width:0}
.shelf-trigger,.shelf-signout{font:inherit;color:inherit;background:none;border:0;cursor:pointer;padding:7px;text-align:left}
.shelf-trigger{max-width:220px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.shelf-trigger:after{content:" ▾"}.shelf-signout{font-size:12px}
.shelf-menu{position:absolute;right:0;top:100%;width:min(360px,calc(100vw - 24px));padding:8px;background:var(--surface,#fff);color:var(--ink,#242019);border:1px solid var(--line,#d8d1c5);border-radius:12px;box-shadow:0 12px 35px #0003;z-index:1200}
.shelf-menu[hidden]{display:none}
.shelf-option{display:block;width:100%;padding:10px 6px;border:0;background:none;color:inherit;font:inherit;text-align:left;cursor:pointer;border-radius:7px}
.shelf-option:hover,.shelf-option:focus-visible{background:var(--surface-2,#eee9df)}
.shelf-identity{display:flex;align-items:center;gap:9px;min-width:0;flex:1;flex-wrap:wrap}
.shelf-avatar{position:relative;width:30px;height:30px;flex:0 0 30px;border-radius:7px;background:var(--surface-2,#eee9df);display:grid;place-items:center;overflow:hidden}
.shelf-avatar img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.shelf-name{flex:1;min-width:0;overflow-wrap:anywhere;font-size:13px}
.shelf-role{font-size:var(--fs-xs);border:1px solid var(--line);border-radius:var(--r-xs);padding:2px 6px}
.shelf-current{color:var(--accent-ink)}
.shelf-status{font-size:12px;line-height:1.4;white-space:normal;margin:6px 0;color:var(--ink,#242019)}
.shelf-account>.shelf-status:not(:empty){position:absolute;right:0;top:100%;background:var(--surface,#fff);padding:10px;width:260px;border:1px solid var(--line,#d8d1c5);z-index:1201}
.shelf-status:empty{display:none}
.shelf-membership{display:flex;align-items:center;gap:16px;padding:14px 0;border-bottom:1px solid var(--line,#d8d1c5)}
/* List-local shopping links use the same row surface as ordinary entries. */
.kit-retailer-chip{display:inline-flex;align-items:center;gap:4px;padding:2px 7px;border-radius:5px;background:rgba(128,128,128,.1);font-size:11px;color:inherit;text-decoration:none;margin-left:7px;vertical-align:middle}
.kit-retailer-chip svg{width:12px;height:12px}
.kit-link-price{font-size:12px;color:var(--muted,#888);font-weight:400}
.grid-status.kit-to-buy{background:#fff0c2;color:#956000}
.kit-link-highlight{animation:kit-link-flash 2.2s ease-out}
@keyframes kit-link-flash{from{background:#ffdf8c}to{background:transparent}}
.kit-free-photo svg{margin:auto}
/* ============================================================================
   The Shelf — application stylesheet
   Extracted from index.html. Load order: tokens.css → app.css.
   Themes: [data-theme="studio"] (light) · [data-theme="workshop"] (dark)
   Density: [data-density="compact|regular|comfy"]
   ============================================================================ */


/* ==== [base] ================================================================== */

/* -------------------------------------------------------------------
   The Shelf — styles
   Themes: [data-theme="studio"] (light) · [data-theme="workshop"] (dark)
   Accent: --accent / --on-accent (set by Tweaks)
   Density: [data-density="compact|regular|comfy"]
------------------------------------------------------------------- */
:root{
  --accent:#cf5a26; --on-accent:#ffffff;
  --card-gap:16px; --r:var(--r-md); --r-legacy-sm:var(--r-sm);
  --fz-name:14.5px;
  /* Shared thumbnail scale — used by Locations items, search, no-photo tiles */
  --thumb-sm:120px;   /* e.g. capture summary, small grids */
  --thumb-md:148px;   /* item cards in Locations / loose views */
  --thumb-lg:180px;   /* folder icons in Locations */
  /* Locations-specific grid tokens */
  --os-item-w:var(--thumb-md); --os-item-gap:11px;
  --os-folder-w:var(--thumb-lg); --os-folder-gap:16px;
}
[data-density="compact"]{
  --card-gap:12px; --fz-name:13.5px;
  --thumb-sm:108px; --thumb-md:130px; --thumb-lg:158px;
}
[data-density="comfy"]{
  --card-gap:22px; --fz-name:16px;
  --thumb-sm:136px; --thumb-md:168px; --thumb-lg:210px;
}

/* ---- Studio (light, default) ---- */
[data-theme="studio"]{
  --bg:#E8E3D8; --bg-tint:rgba(207,90,38,.04);
  --surface:#ffffff; --surface-2:#f6f3ea; --surface-3:#efebe0;
  --line:#e3ddcf; --line-2:#d3ccb9; --line-strong:#c2b9a2;
  /* Independent light text palette: all tiers meet 4.5:1 on --bg (beige). */
  --ink:#1F1B16; --ink-2:#6B6358; --muted:#6B6358; --faint:#6B6358;
  --shadow-sm:0 1px 2px rgba(35,30,18,.06), 0 2px 6px -3px rgba(35,30,18,.18);
  --shadow:0 1px 2px rgba(35,30,18,.04), 0 14px 34px -22px rgba(35,30,18,.34);
  --shadow-lg:0 30px 70px -38px rgba(35,30,18,.55);
  --ph:#eceadf; --ini:#6c6558;
  --chip-bg:#ffffff;

  /* semantic colour — see tokens.css for the contract */
  --accent-ink:#a3461d;

  --ok:#2f9e63;      --ok-ink:#24784b;
  --warn:#c8880a;    --warn-ink:#8e6007;
  --danger:#d6453d;  --danger-ink:#c5322a;
  --info:#4d9ef5;    --info-ink:#0b68cb;
  --lent:#a36cdc;    --lent-ink:#8a44d3;


  /* status palette — declared per theme so the inks resolve in this theme */
  --st-home:var(--ok);       --st-home-ink:var(--ok-ink);
  --st-nohome:var(--warn);   --st-nohome-ink:var(--warn-ink);
  --st-packed:var(--info);   --st-packed-ink:var(--info-ink);
  --st-in-use:var(--info);   --st-in-use-ink:var(--info-ink);
  --st-on-load:var(--lent);  --st-on-load-ink:var(--lent-ink);
  --st-lent:var(--lent);     --st-lent-ink:var(--lent-ink);
  --st-missing:var(--danger);--st-missing-ink:var(--danger-ink);

  --focus-outline:#ae4c20;
  --focus-ring:0 0 0 2px var(--surface),0 0 0 4px var(--focus-outline);
}
[data-theme="studio"] input::placeholder,
[data-theme="studio"] textarea::placeholder{color:var(--faint);opacity:1}
/* ---- Workshop (dark) ---- */
[data-theme="workshop"]{
  --bg:#14110b; --bg-tint:rgba(207,90,38,.06);
  --surface:#211b13; --surface-2:#1a150e; --surface-3:#272015;
  --line:#332a1c; --line-2:#433726; --line-strong:#574832;
  --ink:#efe7d6; --ink-2:#c3b69d; --muted:#8f8268; --faint:#6c6250;
  --shadow-sm:0 1px 2px rgba(0,0,0,.45), 0 2px 8px -4px rgba(0,0,0,.6);
  --shadow:0 1px 2px rgba(0,0,0,.4), 0 24px 50px -30px rgba(0,0,0,.85);
  --shadow-lg:0 40px 90px -40px rgba(0,0,0,.9);
  --ph:#1a150e; --ini:#5a5141;
  --chip-bg:#211b13;

  /* semantic colour — see tokens.css for the contract */
  --accent-ink:#e0703c;

  --ok:#2f9e63;      --ok-ink:#3eaa70;
  --warn:#c8880a;    --warn-ink:#c8880a;
  --danger:#d6453d;  --danger-ink:#db5a53;
  --info:#4d9ef5;    --info-ink:#4d9ef5;
  --lent:#a36cdc;    --lent-ink:#a36cdc;


  /* status palette — declared per theme so the inks resolve in this theme */
  --st-home:var(--ok);       --st-home-ink:var(--ok-ink);
  --st-nohome:var(--warn);   --st-nohome-ink:var(--warn-ink);
  --st-packed:var(--info);   --st-packed-ink:var(--info-ink);
  --st-in-use:var(--info);   --st-in-use-ink:var(--info-ink);
  --st-on-load:var(--lent);  --st-on-load-ink:var(--lent-ink);
  --st-lent:var(--lent);     --st-lent-ink:var(--lent-ink);
  --st-missing:var(--danger);--st-missing-ink:var(--danger-ink);

  --focus-outline:#d96632;
  --focus-ring:0 0 0 2px var(--surface),0 0 0 4px var(--focus-outline);
}

*{box-sizing:border-box}
html,body{margin:0;height:100%}
body{
  background:
    radial-gradient(1200px 700px at 88% -8%, var(--bg-tint), transparent 60%),
    var(--bg);
  color:var(--ink);
  font-family:var(--font-ui);
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
  display:flex; flex-direction:column; overflow:hidden;
}
button{font-family:inherit;cursor:pointer;color:inherit}
input,textarea,select{font-family:inherit}
:where(input:not([type="checkbox"]):not([type="radio"]):not([type="button"]):not([type="submit"]):not([type="reset"]):not([type="file"]):not([type="hidden"]):not([type="image"]):not([type="range"]):not([type="color"]),textarea,select):not(:disabled){font-size:var(--type-control);min-height:var(--target-min)}
::selection{background:var(--accent-strong);color:var(--on-accent)}
.mono{font-family:var(--font-mono)}
::-webkit-scrollbar{width:11px;height:11px}
::-webkit-scrollbar-thumb{background:var(--line-2);border-radius:var(--r-sm);border:3px solid transparent;background-clip:content-box}
::-webkit-scrollbar-thumb:hover{background:var(--line-strong)}

/* ------------------------------ top bar ------------------------------ */
.topbar{
  flex:0 0 auto; min-height:62px; height:auto; display:flex; align-items:center; gap:18px; flex-wrap:wrap;
  padding:0 20px; border-bottom:1px solid var(--line); background:var(--surface);
  z-index:30;
}
.brand{display:flex;align-items:center;gap:11px;flex:0 0 auto}
.topbar a.brand{color:inherit;text-decoration:none}
.mark{width:30px;height:30px;border-radius:var(--r-sm);background:var(--accent);display:grid;place-items:center;position:relative;box-shadow:0 2px 8px -2px color-mix(in oklab,var(--accent),transparent 50%)}
.mark::before{content:"";width:13px;height:13px;border-radius:var(--r-xs);border:2.5px solid var(--on-accent);border-bottom-width:5px}
.brand .wm{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);letter-spacing:-.01em;line-height:1}
.logo-light{display:none}
body[data-theme="studio"] .logo-light{display:inline-block}
body[data-theme="studio"] .logo-dark{display:none}
.brand .wm small{display:block;font-family:var(--font-mono);font-weight:400;font-size:var(--fs-nano);letter-spacing:.22em;color:var(--muted);margin-top:3px}

.search{flex:1 1 auto;max-width:520px;position:relative;display:flex;align-items:center;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);transition:border-color var(--t-base),box-shadow var(--t-base),background var(--t-base)}
.search svg{position:absolute;left:13px;width:16px;height:16px;color:var(--muted);pointer-events:none}
.search input{
  width:100%;min-width:0;color:var(--ink);
  padding:10px 14px 10px 39px;
}
.search input::placeholder{color:var(--faint)}
.search:focus-within{background:var(--surface)}

.views{display:flex;gap:2px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:3px;flex:0 0 auto}
.views button{border:none;background:transparent;color:var(--muted);padding:7px 13px;font-size:var(--fs-sm);font-weight:700;border-radius:var(--r-sm);letter-spacing:.01em;transition:color var(--t-fast),background var(--t-fast);white-space:nowrap}
.views button:hover{color:var(--ink)}
.views button.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow)}
[data-theme="workshop"] .views button.on{background:var(--surface-3)}
.views button .vct{font-family:var(--font-mono);font-size:var(--fs-micro);color:var(--faint);margin-left:5px}
.views button.on .vct{color:var(--accent-ink)}
.view-drop-btn{font-weight:700;letter-spacing:.01em;gap:6px}
.view-drop-btn .vdct{font-family:var(--font-ui);font-size:var(--fs-micro);color:var(--accent-ink);margin-left:0}

.actions{display:flex;gap:8px;flex:0 0 auto;flex-wrap:wrap}
.tbtn{height:40px;display:flex;align-items:center;gap:7px;padding:0 13px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);font-size:var(--fs-sm);font-weight:600;transition:var(--t-fast)}
.tbtn:hover{color:var(--ink);border-color:var(--line-2)}
.tbtn.icon{padding:0;width:40px;justify-content:center;position:relative}
.tbtn.primary{background:var(--accent-strong);color:var(--on-accent);border-color:transparent}
.tbtn.primary:hover{filter:brightness(1.05)}
.tbtn.on{background:rgba(207,90,38,.15);color:var(--accent-ink);border-color:rgba(207,90,38,.45);font-weight:700}
.tbtn.on:hover{background:rgba(207,90,38,.22);border-color:rgba(207,90,38,.6)}
.tbtn .ic{width:16px;height:16px;display:block}
.bdg{position:absolute;top:-6px;right:-6px;min-width:18px;height:18px;border-radius:var(--r-sm);background:var(--accent-strong);color:var(--on-accent);font-family:var(--font-mono);font-size:var(--fs-micro);font-weight:700;display:grid;place-items:center;padding:0 4px;border:2px solid var(--surface)}

/* ------------------------------ sub bar ------------------------------ */
.subbar{
  flex:0 0 auto;min-height:52px;display:flex;align-items:center;gap:14px;
  padding:9px 20px;border-bottom:1px solid var(--line);background:var(--surface);
  z-index:20;
}
.filters{display:flex;align-items:center;gap:7px;flex:0 1 auto;overflow-x:auto;scrollbar-width:none}
.filters::-webkit-scrollbar{display:none}
/* The strip, not the page or either group, owns horizontal overflow. */
#shelfChipStrip{display:flex;align-items:center;gap:8px;flex:1 1 0;min-width:0;max-width:100%;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding:6px 0;scrollbar-width:none;mask-image:linear-gradient(to right,#000 calc(100% - 20px),transparent)}
#shelfChipStrip::after{content:"";flex:0 0 20px}
#shelfChipStrip::-webkit-scrollbar{display:none}
#shelfChipStrip>#filters{display:flex;align-items:center;gap:8px;flex:0 0 auto;min-width:0;width:auto;flex-wrap:nowrap;overflow:visible;padding:0}
#shelfChipStrip>#shelfCategoryChips{align-self:center}
/* One visual contract for filter chips, independent of density or pointer. */
:is(.fchip,.grid-chip,.grid-more-chip,.shelf-active-filter,#shelfTodoBtn){position:relative;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;box-sizing:border-box;height:32px;min-height:32px;max-height:32px;min-width:0;max-width:180px;padding:0 12px;gap:0;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink-2);font:500 13px/20px var(--font-ui);letter-spacing:0;white-space:nowrap;cursor:pointer}
.chip-label,.shelf-category-label,.shelf-active-filter-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
:is(.fchip,.grid-chip,.grid-more-chip,.shelf-active-filter,#shelfTodoBtn):focus:not(:focus-visible){outline:none;box-shadow:none}
:is(.fchip,.grid-chip,.grid-more-chip,.shelf-active-filter,#shelfTodoBtn):hover{border-color:var(--line-2)}
:is(.fchip,.grid-chip,.grid-more-chip,.shelf-active-filter,#shelfTodoBtn).on{background:color-mix(in srgb,var(--accent-strong) 80%,#000);border-color:color-mix(in srgb,var(--accent-strong) 80%,#000);color:#fff}
:is(.fchip,.grid-chip,.grid-more-chip,.shelf-active-filter,#shelfTodoBtn) :is(.fc-n,.shelf-active-filter-count){flex:0 0 auto;font:500 12px/20px var(--font-ui);letter-spacing:0;color:var(--muted);opacity:1;white-space:pre;font-variant-numeric:tabular-nums}
:is(.fchip,.grid-chip,.grid-more-chip,.shelf-active-filter,#shelfTodoBtn).on :is(.fc-n,.shelf-active-filter-count){color:rgb(255 255 255 / 80%)}
:is(.fchip,.grid-chip) b{font:inherit}
.fchip .sw{display:inline-block;flex:0 0 8px;width:8px;height:8px;margin-right:6px;border-radius:50%;background:var(--status-dot)}
.fchip.on .sw{background:#fff;box-shadow:0 0 0 1px rgb(255 255 255 / 50%)}
.fsep{width:1px;height:22px;background:var(--line);flex:0 0 auto;margin:0 4px}
@media(pointer:coarse){
  :is(.fchip,.grid-chip,.grid-more-chip,.shelf-active-filter,#shelfTodoBtn)::before{content:"";position:absolute;left:0;right:0;top:50%;height:44px;transform:translateY(-50%);background:transparent;pointer-events:auto}
}
.flabel{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--faint);flex:0 0 auto;padding-right:2px;font-weight:var(--fw-semi)}

.wallctl{display:flex;align-items:center;gap:8px;flex:0 0 auto}
.seg{display:flex;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:3px;gap:2px}
.seg button{border:none;background:transparent;color:var(--muted);width:34px;height:30px;border-radius:var(--r-sm);display:grid;place-items:center;transition:var(--t-fast)}
.seg button svg{width:16px;height:16px}
.seg button:hover{color:var(--ink)}
.seg button.on{background:var(--surface);color:var(--accent-ink);box-shadow:var(--shadow)}
[data-theme="workshop"] .seg button.on{background:var(--surface-3)}

/* ------------------------------ stage ------------------------------ */
.stage{flex:1 1 auto;position:relative;overflow:hidden}
.scroller{position:absolute;inset:0;overflow-y:auto;overflow-x:hidden;padding:30px clamp(20px,4vw,48px) 90px}
.viewwrap{max-width:1640px;margin:0 auto}
@media (display-mode:standalone){
  body{padding-top:env(safe-area-inset-top,0px);padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px);box-sizing:border-box}
  body .dock{padding-bottom:calc(4px + env(safe-area-inset-bottom,0px));padding-left:env(safe-area-inset-left,0px);padding-right:env(safe-area-inset-right,0px)}
  body .scroller{padding-bottom:calc(90px + env(safe-area-inset-bottom,0px))}
}
#pwaUpdateNotice{position:fixed;z-index:12000;left:50%;transform:translateX(-50%);bottom:calc(90px + env(safe-area-inset-bottom,0px));display:flex;align-items:center;gap:12px;width:max-content;max-width:calc(100% - 32px);padding:14px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:12px;box-shadow:0 5px 24px #0004;font:14px var(--font-ui)}
#pwaUpdateNotice button{flex-shrink:0;min-height:44px}
.account-popover{position:fixed;z-index:13000;width:280px;max-width:calc(100vw - 16px);padding:8px;background:var(--surface);color:var(--ink);border:1px solid var(--line);border-radius:12px;box-shadow:0 8px 24px #0003}
.account-popover-email{padding:12px;overflow-wrap:anywhere;font-size:13px;border-bottom:1px solid var(--line)}
.account-popover button{display:block;width:100%;min-height:44px;text-align:left;padding:12px;background:transparent;border:0;color:inherit;border-radius:6px;font:inherit;cursor:pointer}
.account-popover button:hover,.account-popover button:focus-visible{background:var(--bg);outline:2px solid var(--line)}
#pwaUpdateNotice button[aria-label="Dismiss update notice"]{min-width:44px;border:1px solid var(--line);border-radius:8px;background:transparent;color:var(--ink);cursor:pointer;font-size:16px}

/* view intro */
.vhead{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;margin-bottom:22px}
.vhead h1{font-family:var(--font-display);font-weight:900;font-size:clamp(26px,3.4vw,38px);letter-spacing:-.02em;margin:0;line-height:1}
.vhead .vsub{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);margin-top:8px;letter-spacing:0}

/* ------------------- SHELF WALL ------------------- */
.shelf{margin-bottom:14px;border-bottom:1px solid var(--line);padding-bottom:26px}
.shelf:last-child{border-bottom:none}
.shelf-head{display:flex;align-items:center;gap:16px;padding:8px 0 18px;cursor:pointer;position:sticky;top:-30px;background:linear-gradient(var(--bg) 62%,transparent);z-index:5}
.shelf-head .twirl{width:22px;height:22px;flex:0 0 auto;display:grid;place-items:center;color:var(--faint);transition:transform var(--t-base)}
.shelf.collapsed .shelf-head .twirl{transform:rotate(-90deg)}
.shelf-name{font-family:var(--font-display);font-weight:800;font-size:clamp(19px,2.3vw,25px);letter-spacing:-.015em;line-height:1;flex:0 0 auto}
.shelf-count{font-family:var(--font-ui);font-size:var(--fs-control);color:var(--muted);flex:0 0 auto;margin-left:-6px}
.shelf-bar{flex:1 1 auto;max-width:340px;height:8px;border-radius:var(--r-xs);overflow:hidden;display:flex;background:var(--surface-2);border:1px solid var(--line)}
.shelf-bar i{height:100%;display:block}
.shelf-tags{display:flex;gap:6px;flex:0 0 auto;flex-wrap:wrap;justify-content:flex-end;max-width:340px}
.minichip{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:0;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-xs);padding:4px 8px;display:flex;align-items:center;gap:5px}
.minichip .sw{width:7px;height:7px;border-radius:50%}
.shelf-body{display:flex;flex-direction:column;gap:22px;overflow:hidden;transition:max-height var(--t-slow) var(--ease),opacity var(--t-base)}
.shelf.collapsed .shelf-body{max-height:0!important;opacity:0;pointer-events:none}
.tgroup{display:flex;flex-direction:column;gap:11px}
.tgroup .tg-label{font-family:var(--font-ui);font-size:var(--fs-sm);font-weight:600;letter-spacing:0;color:var(--muted);display:flex;align-items:center;gap:9px}
.tgroup .tg-label::after{content:"";flex:1;height:1px;background:var(--line)}

/* ------------------- WALL CARD CONTRACT -------------------
   Grid size changes columns only; density changes spacing/type. */
:root{--shelf-grid-cols:6;--shelf-photo-cols:8}
.cards,.gallery,.ph-grid{
  display:grid;grid-template-columns:repeat(var(--shelf-grid-cols),minmax(0,1fr));
  gap:var(--card-gap);align-items:stretch;grid-auto-rows:1fr;
  touch-action:pan-y;
}
.card{
  position:relative;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);
  min-width:0;overflow:hidden;cursor:pointer;display:flex;flex-direction:column;
  transition:transform var(--t-base) var(--ease),box-shadow var(--t-base) var(--ease),border-color var(--t-base),opacity var(--t-base);
  box-shadow:var(--shadow);
}
.card:hover{transform:translateY(-3px);border-color:var(--line-2);box-shadow:var(--shadow-lg);z-index:2}
.card.dim{opacity:.2;filter:saturate(.4)}
.card.match{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in oklab,var(--accent),transparent 55%),var(--shadow)}
.card.away{border-color:color-mix(in oklab,var(--st),transparent 55%)}
/* OS drag-to-folder */
.card.os-dragging{opacity:.4;box-shadow:none!important;transform:none!important}
.os-icon.os-drop-over .os-card{border-color:var(--accent)!important;box-shadow:0 0 0 3px color-mix(in oklab,var(--accent),transparent 40%)!important;transform:translateY(-3px)!important;transition:none!important}
.os-icon.os-drop-over .os-card-tab{border-color:var(--accent);background:color-mix(in oklab,var(--accent),transparent 82%)}
.card-ph,.ph-cell-ph{
  position:relative;display:grid;place-items:center;width:100%;aspect-ratio:1/1;
  flex:0 0 auto;overflow:hidden;background:var(--ph);border-radius:var(--r-md);
}
.card-ph>.card-thumb{position:absolute;inset:0;width:100%;height:100%;border-radius:inherit}
.card-ph img,.ph-cell-ph img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:cover;border-radius:inherit}
.card-ph .ini,.ph-cell-ph>.ini{font-family:var(--font-display);font-weight:800;font-size:var(--fs-2xl);line-height:1;color:var(--ini)}
.ph-cell{
  position:relative;display:block;min-width:0;aspect-ratio:1/1;overflow:hidden;
  cursor:pointer;border:0;border-radius:0;padding:0;
  background:var(--ph);-webkit-tap-highlight-color:transparent;
}
/* In-flow square sizing does not depend on aspect-ratio resolving an empty
   grid item. Photos' media and selection controls remain absolute overlays. */
.ph-cell::before{content:"";display:block;padding-top:100%}
.ph-grid{width:100%;min-width:0;grid-template-columns:repeat(var(--shelf-photo-cols,8),minmax(0,1fr));gap:2px;grid-auto-rows:auto;padding:0;border:0}
.ph-grid>.ph-cell{width:100%;height:auto;min-height:0;box-sizing:border-box;aspect-ratio:1/1;align-self:start;justify-self:stretch}
.ph-cell>.ph-cell-ph,.ph-cell>.ph-cell-ph.icon-tile{position:absolute;inset:0;width:100%;height:100%;border-radius:0}
.ph-grid .ph-cell img{position:absolute!important;inset:0!important;width:100%!important;height:100%!important;max-height:none!important;object-fit:cover!important;object-position:center!important;transform:none!important}
.ph-category-stack{isolation:isolate;background:var(--surface-2);color:var(--ink)}
.ph-category-stack .ph-stack-photo{position:absolute;inset:12% 17% 23%;border:2px solid var(--surface);border-radius:6px;overflow:hidden;box-shadow:0 2px 8px #0003}
.ph-category-stack .ph-stack-photo:nth-child(1){transform:rotate(-9deg) translate(-7%,2%)}
.ph-category-stack .ph-stack-photo:nth-child(2){transform:rotate(8deg) translate(7%,2%)}
.ph-category-stack .ph-stack-photo:nth-child(3){transform:rotate(-1deg)}
.ph-category-stack .ph-stack-label{position:absolute;bottom:0;left:0;right:0;padding:9px 6px;font:600 12px/1.3 var(--font-ui);text-align:center;background:var(--surface-2);overflow-wrap:anywhere}
.ph-category-toggle{display:flex;align-items:center;gap:8px;font:500 13px/1.4 var(--font-ui);cursor:pointer}
.category-name-cell .ph-category-toggle{margin-top:6px}
.ph-item-stack{isolation:isolate;background:var(--surface-2)}
.ph-item-stack::after{content:"";position:absolute;inset:9% 12% 14%;z-index:-1;border:2px solid var(--line-2);border-radius:6px;background:var(--surface);transform:rotate(-8deg);box-shadow:5px 3px 0 var(--line),9px 5px 0 var(--surface)}
.ph-item-stack>.ph-cell-ph,.ph-item-stack>.ph-cell-ph.icon-tile{inset:8% 10% 12%;width:80%;height:80%;border-radius:6px;box-shadow:0 2px 8px #0003}
.ph-item-stack .ph-qty{z-index:2}
.ph-cell:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
body:not(.sel-mode) .ph-grid .sel-check{display:none}
.ph-status-dot{position:absolute;left:5px;top:5px;width:8px;height:8px;border-radius:50%;background:var(--st);box-shadow:0 0 0 1px rgba(255,255,255,.8);pointer-events:none}
.ph-qty{position:absolute;right:4px;bottom:4px;padding:1px 4px;border-radius:2px;background:rgba(0,0,0,.6);color:#fff;font:600 10px/1.4 var(--font-ui);pointer-events:none}
/* Photos captions use the original lower-third treatment at every density.
   Keep them separate from shared Cards captions and photo-tile reuse. */
.ph-grid-photos .ph-cell{container-type:inline-size}
.ph-grid-photos .ph-photo-caption{position:absolute;bottom:0;left:0;right:0;padding:4px 8px 6px;background:linear-gradient(to top,rgba(0,0,0,.82) 0%,rgba(0,0,0,.62) 55%,transparent 100%);color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.6);font-family:var(--font-display);font-weight:600;font-size:var(--fs-xs);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.35;pointer-events:none;opacity:1;transition:opacity var(--t-fast)}
.ph-grid-photos .ph-photo-caption{font-size:clamp(8px,3.5cqi,12px)}
.ph-grid-photos .ph-photo-caption.has-quantity{padding-right:var(--photo-badge-width,36px)}
#lookupPaste input{width:100%;box-sizing:border-box}
.lookup-paste summary{display:flex;align-items:center;min-height:44px;cursor:pointer;font-weight:600}
.lookup-paste[open] summary{margin-bottom:8px}
#lookupPaste input{min-height:44px}
.ph-extra-images{position:absolute;bottom:6px;right:6px;z-index:2;color:white;background:rgba(0,0,0,.65);border-radius:4px;padding:2px 4px;font-size:10px}
.ph-grid-photos .ph-photo-caption-text{display:block;overflow:hidden;text-overflow:ellipsis;max-width:100%}
#canvasVP .card{container-type:inline-size}
#canvasVP .canvas-photo-caption{position:absolute;bottom:0;left:0;right:0;padding:4px 8px 6px;background:linear-gradient(to top,rgba(0,0,0,.82) 0%,rgba(0,0,0,.62) 55%,transparent 100%);color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.6);font-family:var(--font-display);font-weight:600;font-size:calc(12px / var(--cv-k,.6));white-space:normal;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;text-overflow:ellipsis;line-height:1.35;pointer-events:none;opacity:1}
#canvasVP.canvas-names-hidden .canvas-photo-caption{visibility:hidden;opacity:0}
#canvasVP .canvas-photo-caption{z-index:2}
#canvasVP .canvas-photo-caption{max-height:calc(100% - 32px / var(--cv-scale,.6));box-sizing:border-box}
#canvasVP .card-qty,#canvasVP .card-faulty,#canvasVP .card-acc-badge{z-index:3}
#canvasVP .card-qty,#canvasVP .card-acc-badge{font-size:calc(10px / var(--cv-k,.6));line-height:1.3;padding:calc(2px / var(--cv-scale,.6)) calc(6px / var(--cv-scale,.6));border-radius:calc(4px / var(--cv-scale,.6))}
#canvasVP .card-qty{left:calc(11px / var(--cv-scale,.6));top:calc(10px / var(--cv-scale,.6));border:0;padding:calc(3px / var(--cv-scale,.6)) calc(7px / var(--cv-scale,.6));box-shadow:inset 0 0 0 calc(1px / var(--cv-scale,.6)) var(--line)}
#canvasVP .card-acc-badge{top:calc(7px / var(--cv-scale,.6));right:calc(7px / var(--cv-scale,.6))}
#canvasVP.canvas-names-hidden .card-qty,#canvasVP.canvas-names-hidden .card-acc-badge{visibility:hidden;pointer-events:none}
/* Native selection inputs must not turn into blank hover/focus boxes on Canvas. */
body:not(.sel-mode) #canvasVP .sel-check:not(:checked){display:none}
#canvasVP .sel-check{top:calc(6px / var(--cv-scale,.6))!important;bottom:auto;right:calc(6px / var(--cv-scale,.6))!important;width:calc(20px / var(--cv-scale,.6))!important;height:calc(20px / var(--cv-scale,.6))!important;min-width:0;min-height:0}
#canvasVP .card-name{display:none}
.ph-grid-photos .ph-qty{z-index:1}
.ph-grid-photos .ph-no-photo-divider{grid-column:1/-1;display:flex;align-items:center;gap:10px;padding:10px 8px;color:var(--muted);font:500 12px/1.35 var(--font-ui)}
.ph-grid-photos .ph-no-photo-divider::after{content:"";height:1px;flex:1;background:var(--line)}
.ph-name-tooltip{position:fixed;z-index:10000;max-width:min(240px,calc(100vw - 16px));padding:5px 8px;border-radius:4px;background:var(--ink);color:var(--surface);box-shadow:var(--shadow);font:500 12px/1.35 var(--font-ui);overflow-wrap:anywhere;pointer-events:none}
.card.has-photo .card-ph>.ini{display:none}
.card.has-photo .card-ph{background:var(--surface-2)}
.card-edge{position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--cc,var(--st))}
.card-qty{position:absolute;left:11px;top:10px;font-family:var(--font-mono);font-size:var(--fs-micro);font-weight:700;color:var(--ink);background:color-mix(in oklab,var(--surface),transparent 8%);border:1px solid var(--line);padding:2px 6px;border-radius:var(--r-xs)}
  .card-faulty{position:absolute;right:10px;top:10px}
  .sale-corner{position:absolute;right:0;top:0;background:var(--accent-strong);color:var(--on-accent);font:700 var(--fs-xs) var(--font-ui);letter-spacing:.08em;text-transform:uppercase;padding:5px 7px;border-radius:0 0 0 var(--r-sm);z-index:3}
  .sale-sheet{max-width:640px}.sale-sheet .modal-b{max-height:min(68vh,650px);overflow:auto}.sale-sheet input,.sale-sheet button{font-size:var(--fs-md)}.sale-intro{margin:0 0 16px;color:var(--ink-2);line-height:1.45}.sale-photo-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:10px 0}.sale-thumb{aspect-ratio:1;overflow:hidden;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--surface-2)}.sale-thumb img{width:100%;height:100%;object-fit:cover}.sale-photo-actions,.sale-choice-row,.sale-includes{display:flex;gap:8px;flex-wrap:wrap}.sale-photo-actions .btn,.sale-choice-row button{min-height:44px}.sale-condition.on{background:var(--accent-strong);color:var(--on-accent);border-color:var(--accent)}.sale-contact.on{background:var(--accent-strong);color:var(--on-accent);border-color:var(--accent)}.sale-includes{padding:8px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2)}.sale-include{display:inline-flex;align-items:center;gap:5px;padding:6px 8px;border-radius:var(--r-sm);background:var(--surface);border:1px solid var(--line);font-size:var(--fs-xs);font-weight:600}.sale-include button{border:0;background:none;color:var(--muted);font-size:var(--fs-base);line-height:1;padding:0;min-width:var(--target-min,44px);min-height:var(--target-min,44px);display:grid;place-items:center;margin:-6px -8px -6px 0}.sale-form-error{min-height:18px;color:var(--danger,#c0392b);font-size:var(--fs-xs);margin:8px 0 0}.sale-draft-actions{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:7px}.sale-draft-actions .sale-intro{margin:0;font-size:var(--fs-xs)}.sale-draft-status{min-height:18px;color:var(--ink-2);font-size:var(--fs-xs);margin:7px 0 0}.sale-draft-status.sale-draft-error{color:var(--danger,#c0392b)}.sale-draft-review{margin-top:10px;padding:12px;border:1px solid color-mix(in oklab,var(--accent),transparent 55%);border-radius:var(--r-md);background:color-mix(in oklab,var(--accent),transparent 94%)}.sale-draft-review h3{font:800 var(--fs-control) var(--font-display);margin:0 0 9px}.sale-draft-review dl{margin:0}.sale-draft-review dt{font:700 var(--fs-xs) var(--font-ui);color:var(--muted);letter-spacing:.05em;text-transform:uppercase;margin-top:9px}.sale-draft-review dd{margin:3px 0 0;color:var(--ink-2);font-size:var(--fs-xs);line-height:1.5;white-space:pre-wrap}.sale-draft-review ul{margin:3px 0 0;padding-left:18px}.sale-draft-review li{color:var(--ink-2);font-size:var(--fs-xs);line-height:1.5}.sale-draft-notice{margin:9px 0 0;color:var(--ink-2);font-size:var(--fs-xs);line-height:1.4}.sale-draft-review .sale-draft-review-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.sale-summary{border:1px solid color-mix(in oklab,var(--accent),transparent 65%);background:color-mix(in oklab,var(--accent),transparent 93%);border-radius:var(--r-md);padding:11px 12px;margin:14px 0 0;font-size:var(--fs-xs);line-height:1.55}.sale-summary b{font-family:var(--font-display);font-size:var(--fs-sm)}.sale-sale-btn{width:100%;min-height:44px;margin-top:12px}
  @media(max-width:480px){.sale-photo-grid{grid-template-columns:repeat(3,1fr)}.sale-choice-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.sale-choice-row button{white-space:normal}}
  .sale-owner-controls{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:10px}.sale-owner-controls .sale-link-state{flex:1 1 100%;color:var(--ink-2);font-size:var(--fs-xs);line-height:1.4}.sale-owner-controls .sale-link-state.expired{color:var(--danger,#c0392b);font-weight:700}.sale-owner-controls button,.sale-owner-controls a{min-height:44px}.sale-owner-controls a{display:inline-flex;align-items:center;justify-content:center;text-decoration:none}.sale-owner-controls .sale-owner-error{flex:1 1 100%;min-height:18px;color:var(--danger,#c0392b);font-size:var(--fs-xs);line-height:1.4;margin:0}.sale-owner-controls .sale-owner-note{flex:1 1 100%;color:var(--muted);font-size:var(--fs-xs);line-height:1.4;margin:0}
  .sale-action-row{display:flex;flex:1 1 100%;gap:8px;flex-wrap:wrap;align-items:center}
  .sale-listing-actions{padding-top:8px;border-top:1px solid var(--line)}
  .sale-owner-controls .sale-delete{background:transparent;border-color:transparent;color:var(--muted);font-weight:400;text-decoration:underline;text-underline-offset:3px}
  .sale-owner-controls .sale-delete:hover{color:var(--danger,#c0392b);background:transparent;border-color:transparent}
.card-body{padding:11px clamp(4px,1vw,13px) 13px;display:flex;flex-direction:column;gap:6px;flex:1;min-width:0;overflow:hidden}
.card-name,.ph-cell-cap{
  font-family:var(--font-ui);font-size:var(--fz-name);font-weight:700;line-height:1.22;
  letter-spacing:-.005em;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;
  min-height:2.44em;max-height:2.44em;min-width:0;overflow:hidden;overflow-wrap:anywhere;
}
.card-loc{font-family:var(--font-ui);font-size:var(--fs-control);color:var(--muted);letter-spacing:0;display:flex;align-items:center;gap:5px;line-height:1.3;min-height:1.3em;min-width:0}
.card-loc-text,.card-status-text{display:block;min-width:0;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.card-loc-text{flex:1}
.card-loc svg{width:11px;height:11px;flex:0 0 auto;opacity:.7}
.card-status{margin-top:auto;display:flex;align-items:center;gap:4px;min-width:0;max-width:100%;overflow:hidden;white-space:nowrap;line-height:1.3;min-height:1.3em;font-size:var(--fs-control);font-weight:600;color:var(--ink-2);padding-top:3px}
.card-status .dot{width:8px;height:8px;border-radius:50%;background:var(--st);flex:0 0 auto}
.card-status.athome .dot{background:var(--home-dot,#2f9e63)}
.everything-card .card-name-row{display:flex;align-items:baseline;gap:5px;min-width:0;flex:none;height:calc(var(--fz-name) * 2.44)}
.everything-card .card-name{display:-webkit-box;flex:1;min-width:0;color:var(--ink);margin:0}
.card-name-qty{flex:none;font:700 10px/1.3 var(--font-mono);color:var(--muted);background:var(--surface-2);border-radius:4px;padding:1px 4px}
.card-review-dot{position:absolute;top:9px;right:9px;z-index:3;width:8px;height:8px;border-radius:50%;background:#d99b24;box-shadow:0 0 0 2px var(--surface);pointer-events:none}
.everything-card .card-body{flex:none;height:calc(var(--fz-name) * 2.44 + var(--fs-xs) * 1.35 + var(--fs-control) * 2.6 + 47px)}
.everything-card .card-category,.everything-card .card-loc,.everything-card .card-status{flex-shrink:0}
.mtile{height:52px;min-width:0}
.mtile .mq{font:700 10px/1.3 var(--font-mono);background:var(--surface-2);border-radius:4px;padding:1px 4px}
.mtile .mth .card-review-dot{width:6px;height:6px;top:3px;right:3px;box-shadow:0 0 0 1px var(--surface)}

@media(max-width:700px){
  :root{--shelf-grid-cols:3;--shelf-photo-cols:4}
  .cards,.gallery{gap:10px}
}
@media(min-width:701px) and (max-width:1366px){
  :root{--shelf-grid-cols:5;--shelf-photo-cols:6}
}
.shelf-card-size{display:none;flex:0 0 auto;align-items:center;gap:4px;margin-inline-start:auto;padding-inline-start:12px;white-space:nowrap}
.shelf-card-size>span{font:600 var(--fs-micro) var(--font-ui);color:var(--muted);letter-spacing:.06em}
.shelf-card-size>button{display:grid;place-items:center;width:32px;min-height:32px;padding:0;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font-size:20px;cursor:pointer}
.shelf-card-size>button:disabled{opacity:.35;cursor:default}
.shelf-card-size>button:focus-visible{outline:0;box-shadow:var(--focus-ring)}
#layoutMenuPop .shelf-card-size{display:flex;margin:8px 0 0;padding:10px 12px;border-top:1px solid var(--line);gap:8px}
#layoutMenuPop .shelf-card-size>span{flex:1;letter-spacing:0}
#layoutMenuPop .shelf-card-size>button{flex:0 0 44px;width:44px;min-height:44px;text-align:center}
.shelf-card-size[hidden],.shelf-card-size-row[hidden]{display:none!important}
@media(min-width:1367px),(min-width:701px) and (pointer:fine){
  .shelf-card-size{display:inline-flex}
  .filters.shelf-card-size-host{flex:1 1 auto}
}
@media(max-width:700px),(max-width:1366px) and (pointer:coarse){
  .shelf-card-size-row{display:none}
}

/* ------------------- CANVAS ------------------- */
.canvas-vp{position:absolute;inset:0;overflow:hidden;cursor:grab;touch-action:none;overscroll-behavior:none}
#cvResetBtn{position:absolute;top:14px;right:14px;z-index:5;font-size:var(--fs-xs);padding:6px 12px;}
.canvas-vp.grabbing{cursor:grabbing}
.canvas-world{position:absolute;top:0;left:0;transform-origin:0 0;will-change:transform}
.cluster{position:absolute;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface-2);box-shadow:var(--shadow)}
.cluster-head{position:absolute;left:22px;top:-15px;display:flex;align-items:center;gap:10px}
.cluster-name{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);background:var(--bg);padding:0 8px;letter-spacing:-.01em}
.shelf-category-heading{border:0;color:inherit;font:inherit;cursor:pointer;background:transparent;padding:0;text-align:left}
.bird-head .shelf-category-heading{position:relative}
.bird-head .shelf-category-heading::before{--shelf-touch-target-rule:1;content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:max(44px,100%);height:44px;pointer-events:auto}
.cluster-head .shelf-category-heading{position:relative}
.cluster-head .shelf-category-heading::before{--shelf-touch-target-rule:1;content:"";position:absolute;left:0;top:50%;transform:translateY(-50%);width:calc(44px / var(--cv-scale,.6));height:calc(44px / var(--cv-scale,.6));pointer-events:auto}
.settings-lending-details .settings-action+.settings-action{margin-left:8px}
.os-location-rail .os-tree-home+.os-edit-done{margin-left:8px}
.cluster-name.shelf-category-heading{position:relative;z-index:2;font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);background:var(--bg);padding:0 8px;letter-spacing:-.01em}
.shelf-category-heading:focus-visible{outline:2px solid var(--accent);outline-offset:3px}
.shelf-category-chips{display:flex;align-items:center;gap:8px;padding:0 0 0 12px;margin-left:4px;border-left:1px solid var(--line);flex:0 0 auto;flex-wrap:nowrap;min-width:0}
#shelfCategoryChips>[hidden]{display:none}
.shelf-category-label{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.grid-scroll-frame{position:relative;min-width:0}
.grid-scroll-frame.has-more-columns::after{content:"";position:absolute;inset:0 0 0 auto;width:24px;pointer-events:none;z-index:5;border-radius:0 var(--r-md) var(--r-md) 0;background:linear-gradient(to right,transparent,var(--surface))}
.grid-workspace .table-scrollable .grid-table :is(th[data-sort="name"],td.grid-name){position:sticky;left:var(--grid-check-offset,0px);z-index:3;background:var(--surface);box-shadow:1px 0 var(--line)}
#shelfCategoryMore svg{margin-left:6px;width:14px;height:14px;flex:none}
.shelf-category-menu .shelf-category-results{overflow-y:auto;min-height:0}
.shelf-category-menu .shelf-category-option{justify-content:space-between;gap:16px;min-height:44px}
.shelf-category-menu .shelf-category-option .shelf-category-label{white-space:normal;overflow-wrap:anywhere}
.shelf-category-menu .shelf-category-empty{padding:12px;color:var(--muted);font-size:var(--fs-sm)}
.shelf-category-menu .shelf-category-menu-head{display:flex;align-items:center;justify-content:space-between;padding:4px 8px;gap:12px}
.shelf-category-menu .shelf-category-menu-head button{width:auto;min-height:44px}
.shelf-category-chips[hidden],.shelf-filter-menu button[hidden]{display:none!important}
.shelf-category-chip{flex-shrink:0}
.shelf-category-name{display:flex;align-items:center;gap:8px;text-align:left}
.shelf-category-dot{display:inline-block;width:9px;height:9px;border-radius:50%;flex-shrink:0}
.shelf-category-search{display:block;width:calc(100% - 16px);margin:4px 8px 8px;padding:9px;border:1px solid var(--line);border-radius:var(--r-xs);background:var(--surface);color:var(--ink);font:inherit}
.cluster-cards{position:absolute;inset:0;padding:34px 22px 22px;display:grid;gap:14px;grid-template-columns:repeat(var(--cc),1fr);align-content:start}
.canvas-hint{position:absolute;left:50%;bottom:18px;transform:translateX(-50%);font-family:var(--font-ui);font-size:var(--fs-micro);letter-spacing:0;color:var(--muted);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);padding:8px 16px;box-shadow:var(--shadow);z-index:4}

/* ------------------- BIRD'S-EYE (everything at once) ------------------- */
.bird-sec{margin-bottom:16px}
.bird-head{display:flex;align-items:baseline;gap:10px;margin:0 0 9px;position:sticky;top:-30px;background:linear-gradient(var(--bg) 58%,transparent);padding:6px 0;z-index:5}
.bird-head h2{font-family:var(--font-display);font-weight:800;font-size:var(--fs-base);margin:0;letter-spacing:-.01em}
.bird-head .gc{font-family:var(--font-ui);font-size:var(--fs-micro);color:var(--muted)}
.bird-head .gbar{flex:1;max-width:170px;height:6px;border-radius:var(--r-xs);overflow:hidden;display:flex;background:var(--surface-2);border:1px solid var(--line);align-self:center}
.bird-head .gbar i{height:100%;display:block}
/* The track widened from 138 to 150 to pay for the thumbnail: one column fewer
   at 1440, but name truncation drops from 15 items to 3 and every item is now
   identifiable by sight. */
.birdgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,290px),1fr));gap:7px}
  .mtile{position:relative;display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--cc,var(--st));border-radius:var(--r-sm);padding:9px 10px;cursor:pointer;transition:transform var(--t-fast),box-shadow var(--t-fast),border-color var(--t-fast),opacity var(--t-base);min-width:0;box-shadow:var(--shadow)}
.mtile:hover{transform:translateY(-1px);border-color:var(--line-2);box-shadow:var(--shadow-lg);z-index:2}
.mtile.dim{opacity:.18;filter:saturate(.4)}
.mtile.match{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in oklab,var(--accent),transparent 60%)}
.mtile .mn{font-size:var(--fs-xs);font-weight:600;line-height:1.18;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;flex:1;min-width:0}
.mtile .mq{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);flex:0 0 auto}

/* ------------------- list / cards for views ------------------- */
.list-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.lrow{display:flex;gap:14px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:13px;align-items:center;box-shadow:var(--shadow);transition:var(--t-base)}
.lrow:hover{border-color:var(--line-2);transform:translateY(-2px);box-shadow:var(--shadow-lg)}
.lrow .lph{position:relative;overflow:hidden;width:62px;height:62px;border-radius:var(--r-md);background:var(--ph);flex:0 0 auto;display:grid;place-items:center;border:1px solid var(--line)}
.lrow .lph .ini{font-family:var(--font-display);font-weight:800;font-size:var(--fs-lg);color:var(--ini)}
.lrow .lph>.lph-thumb{width:100%;height:100%}
.lrow .li{flex:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.lrow .ln{font-weight:700;font-size:var(--fs-base);line-height:1.3;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;overflow-wrap:anywhere;white-space:normal}
.lrow .lm{font-family:var(--font-ui);font-size:var(--fs-micro);color:var(--muted)}
.lrow .lstatus{display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);font-weight:600;color:var(--ink-2)}
.lrow .lstatus .dot{width:8px;height:8px;border-radius:50%;background:var(--st)}
.lrow .lprice{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--accent-ink)}
.lrow .la{display:flex;flex-direction:column;gap:6px;flex:0 0 auto}
.list-naming-chip{position:static;align-self:flex-start;display:inline-flex;align-items:center;gap:5px;max-width:100%;padding:3px 7px;border:1px solid var(--line);border-radius:20px;background:var(--surface);color:var(--muted);font:500 11px var(--font-ui);line-height:1.4}
.trash-destructive,.sel-actions-track .trash-destructive{color:#df5c55!important;background:transparent!important;border:0;cursor:pointer;padding:10px;font:inherit}
.trash-row{display:grid;gap:8px;padding:16px 0;border-bottom:1px solid var(--line);overflow-wrap:anywhere}
.trash-row small{color:var(--muted)}
.trash-space-copy{display:grid;gap:4px}
.trash-actions{display:flex;gap:8px;flex-wrap:wrap}
button.list-naming-chip{cursor:pointer}
.list-naming-spinner{width:10px;height:10px;border:1.5px solid currentColor;border-right-color:transparent;border-radius:50%;animation:list-naming-spin .8s linear infinite}
@keyframes list-naming-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.list-naming-spinner{animation:none}}
.kit-entry-url{display:flex;align-items:center;gap:5px;min-width:0;margin-top:1px;font-size:var(--fs-micro)}
.kit-entry-url a{display:inline-flex;align-items:center;color:var(--accent-ink);text-decoration:none;line-height:1}
.kit-entry-url a:hover{text-decoration:underline}
.kit-entry-url a svg{width:13px;height:13px;flex:0 0 auto}
.kit-url-action{display:inline-flex;align-items:center;gap:4px;padding:1px 0;border:0;background:transparent;color:var(--muted);font:var(--fs-micro) inherit;cursor:pointer}
.kit-url-action:hover{color:var(--accent-ink);text-decoration:underline}
.kit-url-action svg{width:12px;height:12px;flex:0 0 auto}
.kit-url-clear{color:var(--muted)}
.kit-url-clear:hover{color:var(--danger-ink)}
.kit-entry-qty-error{display:block;min-height:0;color:var(--danger,#c0392b);font-size:var(--fs-micro);line-height:1.15;max-width:130px}
.kit-entry-qty-error:not(:empty){min-height:12px}
/* Kit detail is a Grid variant, not a second card/list language. */
.kit-grid-toolbar{display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap;margin-left:auto}
.kit-grid-menu{position:relative}.kit-grid-menu summary{list-style:none;min-height:var(--target-min);align-items:center}.kit-grid-menu summary::-webkit-details-marker{display:none}
.kit-grid-menu[open]{z-index:var(--z-menu)}.kit-grid-menu-panel{position:absolute;right:0;top:calc(100% + var(--s-1));min-width:calc(var(--s-10) * 2);padding:var(--s-1);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-lg)}
.kit-grid-menu-panel button{display:flex;width:100%;min-height:var(--target-min);border:0;background:transparent;padding:var(--s-2);color:var(--ink);font:var(--fw-bold) var(--fs-control)/var(--lh-tight) var(--font-ui);text-align:left}.kit-grid-menu-panel button:hover{background:var(--surface-2)}.kit-grid-menu-panel button.danger{color:var(--danger-ink)}
.kit-toolbar-icon{display:inline-flex;align-items:center;justify-content:center;width:var(--icon-md);height:var(--icon-md);flex:0 0 auto}.kit-toolbar-icon svg{width:100%;height:100%;display:block}.kit-toolbar-label{font:inherit}
.kit-grid-more-menu .kit-toolbar-icon{display:none}
.kit-detail-head{gap:var(--s-4);margin-bottom:var(--s-4);align-items:flex-start}
.kit-detail-backbar{display:flex;align-items:center;margin-bottom:var(--s-3)}
.kit-detail-heading{min-width:0;display:grid;gap:var(--s-2)}
.kit-detail-heading h1{margin:0;overflow-wrap:anywhere}
.kit-grid-menu-panel{max-width:calc(100vw - var(--s-6));max-height:calc(100dvh - var(--s-10));overflow-y:auto}
.kit-grid-menu-panel button{gap:var(--s-2);align-items:center;border-radius:var(--r-sm)}
.kit-grid-menu-panel button:disabled{color:var(--muted);cursor:not-allowed}
.kit-grid-menu-panel button[hidden],.kit-mobile-qty[hidden]{display:none!important}
.kit-grid-table .grid-name{font-family:var(--font-display);line-height:var(--lh-snug)}
.kit-grid-table .kit-mobile-location,.kit-grid-table .kit-mobile-qty{color:var(--muted);font:var(--fw-regular) var(--fs-xs)/var(--lh-snug) var(--font-ui)}
.kit-grid-table .kit-mobile-location{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kit-grid-table .grid-checkbox-hit input:checked{background:var(--accent-strong);border-color:var(--accent);color:var(--on-accent)}
.kit-row-actions{display:grid;gap:var(--s-2)}
.kit-row-actions .btn{justify-content:flex-start}
.kit-quantity-form label{display:block;margin-bottom:var(--s-2)}
.kit-quantity-form [role="alert"]{margin:var(--s-2) 0 0;color:var(--danger-ink);font-size:var(--fs-sm)}
.kit-detail-head~.kit-list-note{min-height:var(--ctl-lg);margin:0 0 var(--s-3);padding:var(--s-3);background:var(--surface-2);color:var(--ink);border:1px solid var(--line);border-radius:var(--r-sm);font:var(--fw-regular) var(--fs-control)/var(--lh-body) var(--font-ui)}
.kit-group-control{display:inline-flex;align-items:center;gap:var(--s-1);min-height:var(--target-min);padding:0 var(--s-2);border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);color:var(--muted);font:var(--fw-semi) var(--fs-sm)/var(--lh-tight) var(--font-ui);white-space:nowrap}
.kit-group-control select{min-height:calc(var(--target-min) - var(--s-2));max-width:calc(var(--s-10) + var(--s-6));border:0;background:transparent;color:var(--ink);font:inherit}
.kit-grid-zone{display:grid;gap:var(--s-4)}.kit-grid-section{min-width:0}.kit-grid-section-head{display:flex;align-items:center;min-height:var(--ctl-sm);padding:0 var(--s-1);color:var(--muted);font:var(--fw-bold) var(--fs-sm)/var(--lh-tight) var(--font-ui);letter-spacing:.01em}.kit-grid-section-head span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kit-private-lock{display:inline-flex;vertical-align:-2px;margin-left:var(--s-1);color:var(--muted)}.kit-private-lock svg{width:var(--icon-sm);height:var(--icon-sm)}
.kit-group-form{display:grid;gap:var(--s-2)}.kit-group-form label{font:var(--fw-semi) var(--fs-sm)/var(--lh-tight) var(--font-ui);color:var(--muted)}.kit-group-form select,.kit-group-form input{width:100%;min-height:var(--target-min);padding:0 var(--s-2);border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font:var(--fw-regular) var(--fs-control)/var(--lh-body) var(--font-ui)}.kit-group-form [role=alert]{min-height:var(--s-4);color:var(--danger-ink);font-size:var(--fs-sm)}
.kit-free-add.kit-grid-add{gap:var(--s-2);margin:var(--s-3) 0;position:relative}
.kit-free-add.kit-grid-add input{min-height:var(--target-min);padding:var(--s-2) var(--s-3);background:var(--surface-2);color:var(--ink);border:1px solid var(--line);border-radius:var(--r-sm);font:var(--fw-regular) var(--fs-control)/var(--lh-body) var(--font-ui)}
.kit-suggest.kit-detail-suggestions{padding:var(--s-3);margin:var(--s-3) 0;gap:var(--s-2);background:transparent;border:0;border-radius:0;box-shadow:none;font:var(--fw-regular) var(--fs-sm)/var(--lh-body) var(--font-ui)}
.kit-detail-suggestions .kit-suggest-label{font:inherit}
.kit-detail-suggestions button{width:auto;min-width:var(--target-min);min-height:var(--target-min);padding:var(--s-2) var(--s-3);border:1px solid var(--line);border-radius:var(--r-pill);background:var(--surface-2);color:var(--ink);font:var(--fw-semi) var(--fs-sm)/var(--lh-tight) var(--font-ui)}
.kit-grid-progress{display:flex;align-items:center;gap:var(--s-2);margin-top:var(--s-2);font:var(--fw-semi) var(--fs-sm)/var(--lh-tight) var(--font-ui);color:var(--muted)}.kit-grid-progress.complete{color:var(--ok-ink)}.kit-grid-progress i{display:block;flex:0 0 calc(var(--s-10) + var(--s-6));height:var(--s-1);overflow:hidden;background:var(--surface-3);border-radius:var(--r-pill)}.kit-grid-progress b{display:block;height:100%;background:var(--accent);border-radius:inherit;transition:width var(--t-base) var(--ease)}.kit-grid-progress.complete b{background:var(--ok)}
.kit-grid-table{margin-top:var(--s-4)}.kit-grid-row.kit-packed{color:var(--muted)}.kit-grid-row.kit-packed .grid-name{color:var(--muted)}.kit-grid-row.kit-packed [data-kit-pack]{accent-color:var(--accent)}.kit-grid-row .kit-member-qty{min-height:var(--ctl-sm);width:calc(var(--ctl-sm) + var(--s-5))}.kit-grid-more button{position:relative;width:var(--ctl-sm);height:var(--ctl-sm);border:0;border-radius:var(--r-sm);background:transparent;color:var(--muted);font-size:var(--fs-md)}.kit-grid-more button::before{content:"";position:absolute;inset:calc((var(--ctl-sm) - var(--target-min))/2)}.kit-grid-more button:hover{background:var(--surface-2);color:var(--ink)}.grid-thumb-empty{background:transparent!important;color:var(--faint)!important}
.kit-mobile-location,.kit-mobile-qty{display:none}.kit-quantity-form{display:grid;gap:var(--s-2)}.kit-quantity-form input{width:100%;min-height:var(--target-min);padding:var(--s-2) var(--s-3);border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink)}.kit-quantity-form .kit-entry-qty-error{max-width:none}.kit-detail-suggestions{display:flex;gap:var(--s-2);flex-wrap:wrap}.kit-detail-suggestions a{display:inline-flex;align-items:center;min-height:var(--target-min);padding:0 var(--s-3);border:1px solid var(--line);border-radius:var(--r-pill);color:var(--accent-ink);font:var(--fw-semi) var(--fs-sm)/var(--lh-tight) var(--font-ui);text-decoration:none}.kit-detail-suggestions a:hover{background:var(--surface-2)}

@media(max-width:699px){
  [data-kit-grid-main],[data-kit-grid-extras]{width:100%;min-width:0;overflow:hidden}
  [data-kit-grid-main].kit-grid-table,[data-kit-grid-extras].kit-grid-table{overflow:visible;border:0;border-radius:0;box-shadow:none;background:transparent}
  [data-kit-grid-main] .grid-table,[data-kit-grid-extras] .grid-table{display:block;width:100%!important;min-width:0!important;max-width:100%;table-layout:fixed;white-space:normal!important}
  .kit-detail-head{flex-direction:column;align-items:stretch}
  .kit-detail-head>div:first-child{display:grid;gap:var(--s-2)}
  .kit-grid-toolbar{width:100%;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s-2)}
  .kit-grid-toolbar #kitCheckout{grid-column:1/-1;width:100%;justify-content:center;min-height:calc(var(--target-min) + var(--s-1))}
  .kit-grid-toolbar .kit-grid-menu,.kit-grid-toolbar .kit-pack-into{width:100%;min-width:0}
  .kit-grid-toolbar .kit-group-control{width:100%;justify-content:center;grid-column:1/-1}
  .kit-group-control select{max-width:none}
  .kit-grid-toolbar .kit-grid-menu summary,.kit-grid-toolbar .kit-pack-into{width:100%;justify-content:center;min-height:calc(var(--target-min) + var(--s-1));padding-inline:var(--s-2)}
  .kit-grid-toolbar .kit-toolbar-label{display:none}
  .kit-grid-more-menu .kit-toolbar-icon{display:inline-flex}
  .kit-grid-menu-panel .kit-usual-shop{display:none}
  .kit-grid-menu-panel button,.kit-grid-add input,.kit-grid-add>button,.kit-detail-suggestions button,[data-kit-grid-extras-head] button,.kit-notes-disclosure{min-height:calc(var(--target-min) + var(--s-1))}
  .kit-grid-menu-panel{right:0;min-width:calc(var(--s-10) * 2)}
  .kit-grid-table{margin-top:var(--s-3)}
  .kit-grid-zone{gap:var(--s-3)}
  .kit-grid-section-head{min-height:var(--ctl-sm);padding-inline:0}
  .kit-grid-table .grid-table,.kit-grid-table .grid-table tbody,.kit-grid-table .grid-table tr,.kit-grid-table .grid-table td{width:100%}
  .kit-grid-table tbody{display:block;border-top:1px solid var(--line)}
  .kit-grid-table thead,.kit-grid-table colgroup,.kit-grid-table .grid-footer{display:none}
  .kit-grid-table tr.kit-grid-row{display:grid;width:100%;grid-template-columns:calc(var(--target-min) + var(--s-1)) var(--s-7) minmax(0,1fr) calc(var(--target-min) + var(--s-1));grid-template-areas:"check thumb name more";column-gap:var(--s-2);padding:var(--s-3) 0;border-bottom:1px solid var(--line);align-items:center;background:transparent}
  .kit-grid-table tr.kit-grid-row td{padding:0;border:0;min-width:0;white-space:normal}
  .kit-grid-table tr.kit-grid-row td.grid-check,.kit-grid-table tr.kit-grid-row td.kit-grid-more{width:100%;max-width:none}
  .kit-grid-table tr.kit-grid-row .grid-name{max-width:none}
  .kit-grid-table tr.kit-grid-row td:nth-child(1){grid-area:check;display:grid;place-items:center}.kit-grid-table tr.kit-grid-row td:nth-child(2){grid-area:thumb}.kit-grid-table tr.kit-grid-row td:nth-child(3){grid-area:name}.kit-grid-table tr.kit-grid-row td:nth-child(4),.kit-grid-table tr.kit-grid-row td:nth-child(5),.kit-grid-table tr.kit-grid-row td:nth-child(6),.kit-grid-table tr.kit-grid-row td:nth-child(7){display:none}.kit-grid-table tr.kit-grid-row td:nth-child(8){grid-area:more;justify-self:end}
  .kit-grid-table .grid-thumb,.kit-grid-table .grid-thumb-cell img{width:var(--s-7);height:var(--s-7);border-radius:var(--r-sm)}
  .kit-grid-table .grid-checkbox-hit,.kit-grid-table .kit-grid-more button{width:calc(var(--target-min) + var(--s-1));height:calc(var(--target-min) + var(--s-1));display:grid;place-items:center}.kit-grid-table .grid-checkbox-hit input{width:calc(var(--s-5) + var(--s-1));height:calc(var(--s-5) + var(--s-1));accent-color:var(--accent)}
  .kit-grid-table .kit-mobile-location{display:block;clear:both}.kit-grid-table .kit-mobile-qty{display:inline;float:right;margin-left:var(--s-1)}
  .kit-grid-table .grid-checkbox-hit input:checked::after{left:50%;top:50%;width:var(--s-2);height:var(--s-3);transform:translate(-50%,-60%) rotate(45deg)}
  .kit-grid-table .kit-case-expand,.kit-grid-table .kit-case-member-count{display:inline}
  .kit-grid-table .kit-accessory-add{min-width:calc(var(--target-min) + var(--s-1));min-height:calc(var(--target-min) + var(--s-1))}
  .kit-grid-table .kit-accessory-missing td:nth-child(1),.kit-grid-table tr[data-kit-kind="free"] td:nth-child(2){visibility:hidden}.kit-grid-table .kit-grid-more .kit-accessory-remove{display:none}
  .kit-free-add.kit-grid-add{display:grid;grid-template-columns:minmax(0,1fr) calc(var(--target-min) + var(--s-1));gap:var(--s-2)}.kit-grid-add .kit-add-matches{grid-column:1/-1}
}
.kit-grid-row[data-kit-depth]:not([data-kit-depth="0"]) .grid-name,.kit-accessory-missing .grid-name{padding-left:calc(var(--s-4) * var(--kit-depth,1))}
.kit-accessory-missing{color:var(--muted);background:color-mix(in oklab,var(--surface-2),transparent 35%)}
.kit-accessory-missing .grid-name{font-size:var(--fs-xs);font-weight:var(--fw-regular)}
.kit-accessory-indent{color:var(--accent-ink);font-weight:var(--fw-semi);margin-right:var(--s-1)}
.kit-missing-copy{font-style:italic;color:var(--muted)}
.kit-accessory-add{border:0;background:transparent;color:var(--accent-ink);font:inherit;font-weight:var(--fw-semi);text-decoration:underline;text-underline-offset:2px;padding:0;cursor:pointer}
.kit-accessory-add:hover{color:var(--ink)}
.kit-accessory-remove{width:auto!important;height:auto!important;border:1px solid var(--line)!important;border-radius:var(--r-xs)!important;background:var(--surface-2)!important;color:var(--muted)!important;font-size:var(--fs-micro)!important;padding:var(--s-1) var(--s-2)!important;white-space:nowrap}
.kit-accessory-remove::before{display:none}
.kit-accessory-remove:hover{color:var(--danger-ink)!important;border-color:var(--danger)!important}
.kit-grid-add{position:relative}.kit-add-matches{position:absolute;z-index:var(--z-menu);left:0;top:calc(100% + var(--s-1));width:min(calc(var(--s-10) * 4),100%);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-lg);overflow:hidden}.kit-add-matches:empty{display:none}.kit-add-matches button{width:100%;display:flex;align-items:center;gap:var(--s-2);padding:var(--s-2);border:0;border-bottom:1px solid var(--line);background:transparent;text-align:left;font-size:var(--fs-sm);font-weight:var(--fw-semi)}.kit-add-matches button:hover{background:var(--surface-2)}.kit-add-matches .grid-thumb{width:var(--ctl-sm);height:var(--ctl-sm);flex:0 0 var(--ctl-sm)}.kit-add-matches small{display:block;color:var(--muted);font-weight:var(--fw-regular);margin-top:var(--s-1)}
.lrow.kit-share-ticked .lph img{opacity:.3;filter:grayscale(0.7);transition:opacity var(--t-base) var(--ease),filter var(--t-base) var(--ease)}
.kit-share-check{display:inline-flex;align-items:center;vertical-align:-2px;color:var(--ok,#2f9e63)}
.kit-free-add{display:flex;gap:8px;align-items:center;margin:12px 0 10px}
.kit-free-add input{flex:1;min-width:0;padding:10px 12px}
.kit-free-add input:focus{border-color:var(--line-strong);background:var(--surface-2)}
.kit-free-add input:disabled{opacity:.55;cursor:not-allowed}
.kit-free-error{min-height:16px;margin:0 0 8px;color:var(--danger,#c0392b);font-size:var(--fs-xs)}
.kit-free-list{display:flex;flex-direction:column;gap:6px;margin:0 0 16px}
.kit-free-row{display:flex;align-items:center;gap:10px;padding:9px 11px;background:var(--surface);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:var(--r-sm);box-shadow:var(--shadow);transition:var(--t-base)}
.kit-free-row:hover{border-color:var(--line-2);transform:translateY(-1px);box-shadow:var(--shadow-lg)}
.kit-free-row .kit-free-label{flex:1;min-width:0;font-size:var(--fs-sm);font-weight:600;line-height:1.25;word-break:break-word}
.kit-free-row .kit-free-photo{width:36px;height:36px;flex:0 0 36px;overflow:hidden;border-radius:var(--r-sm);background:var(--ph);border:1px solid var(--line);display:grid;place-items:center}
.kit-free-row .kit-free-photo img{display:block;width:100%;height:100%;object-fit:cover;opacity:1;filter:none;transition:opacity var(--t-base) var(--ease),filter var(--t-base) var(--ease)}
.kit-free-row .kit-free-qty{font:var(--fs-micro) var(--font-mono);color:var(--muted);white-space:nowrap}
.kit-free-row .kit-entry-url{flex:0 0 auto;margin:0}
.kit-member-qty,.kit-free-qty-input{width:48px;box-sizing:border-box;padding:4px 5px;border:1px solid var(--line-2);border-radius:var(--r-xs);background:var(--surface-2);color:var(--ink);font-family:var(--font-mono);text-align:center}
.kit-member-qty:disabled,.kit-free-qty-input:disabled{opacity:.55;cursor:not-allowed}
.kit-free-row .kit-free-actions{display:flex;align-items:center;gap:6px;flex:0 0 auto}
.kit-free-row .kit-free-delete{width:26px;height:26px;padding:0;border:0;border-radius:var(--r-xs);background:transparent;color:var(--muted);cursor:pointer}
.kit-free-row .kit-free-delete:hover{background:var(--surface-2);color:var(--danger-ink)}
.kit-free-row.kit-share-ticked .kit-free-photo img{opacity:.3;filter:grayscale(.7);transition:opacity var(--t-base) var(--ease),filter var(--t-base) var(--ease)}
.kit-list-note{display:block;width:100%;box-sizing:border-box;min-height:62px;margin:0 0 16px;resize:vertical;padding:10px 12px;line-height:1.45}
.kit-list-note:focus{border-color:var(--line-strong);background:var(--surface-2)}
.kit-list-note:disabled{opacity:.55;cursor:not-allowed}
.tosort-card{position:relative;flex-wrap:wrap;align-self:start}
.tosort-card .li{min-width:8rem}
.tosort-card.is-selected{border-color:var(--accent)}
.tosort-select-actions{display:flex;align-items:center;gap:8px}
.tosort-quantity{display:inline-flex;align-items:center;gap:0}
.tosort-quantity button{min-width:44px;min-height:44px;padding:4px;border:0;border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font:600 var(--fs-sm) var(--font-ui);touch-action:manipulation;user-select:none}
.tosort-card .la{display:flex;flex-direction:row;align-items:center;gap:8px;margin-left:auto}
.tosort-card .lbtn{min-height:44px}
.tosort-naming-strip{padding:8px 0 14px;color:var(--ink-2);font-size:var(--fs-sm)}
#stageInner #toSortSelect{display:none}
@media(hover:none),(any-pointer:coarse),(max-width:700px){
  #stageInner #toSortSelect{display:inline-flex}
  body:not(.sel-mode) #stageInner .tosort-check{display:none}
  body.sel-mode #stageInner .tosort-check{display:grid;opacity:1;width:44px;height:44px;box-sizing:border-box;padding:0}
}
/* Sorting selection stays one row. The secondary menu grows above it, never
   turns the selection row into a bottom sheet. */
body>.sel-bar.tosort-selection{left:6px;right:6px;bottom:env(safe-area-inset-bottom);transform:none;width:auto;max-width:none;flex-wrap:nowrap;gap:3px;padding:6px 5px;max-height:64px;border-radius:var(--r-md) var(--r-md) 0 0}
body>.sel-bar.tosort-selection .sel-count{flex:0 0 auto;font-size:11px;min-width:max-content;white-space:nowrap}
body>.sel-bar.tosort-selection .sel-actions-wrap{order:0;flex:1 1 auto;min-width:0}
body>.sel-bar.tosort-selection .sel-actions{overflow-x:auto;scrollbar-width:none}
body>.sel-bar.tosort-selection .sel-actions-track{width:max-content;flex-wrap:nowrap;gap:2px;padding:0;justify-content:flex-start}
body>.sel-bar.tosort-selection button,body>.sel-bar.tosort-selection summary{box-sizing:border-box;min-height:44px;min-width:44px;flex:0 0 auto;padding:10px 5px;font-size:12px;white-space:nowrap;cursor:pointer}
body>.sel-bar.tosort-selection .sel-actions-track button{flex:0 0 auto;white-space:nowrap;max-width:none}
body>.sel-bar.tosort-selection #selDone{order:0}
.sel-more{position:relative}
.sel-more summary{display:flex;align-items:center;list-style:none;font-weight:600}
.sel-more summary::-webkit-details-marker{display:none}
.sel-more-menu{position:absolute;bottom:calc(100% + 12px);right:0;display:flex;flex-direction:column;min-width:180px;max-height:60dvh;overflow-y:auto;padding:6px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow)}
.sel-more:not([open]) .sel-more-menu{display:none}
.sel-more-menu button{text-align:left}
.sel-bar .sel-more-menu{position:fixed;bottom:calc(100% + 8px);right:0;max-width:calc(100vw - 24px)}
body>.sel-bar.tosort-selection .sel-more-menu{bottom:calc(64px + env(safe-area-inset-bottom));right:6px}
.sel-bar summary{min-height:44px;padding:0 10px;box-sizing:border-box;white-space:nowrap;cursor:pointer}
.tosort-check{position:absolute;top:2px;left:2px;z-index:1;width:40px;height:40px;display:grid;place-items:center;opacity:0;cursor:pointer}
.tosort-check input{width:20px;height:20px;accent-color:var(--accent);cursor:pointer}
.tosort-card:hover .tosort-check,.tosort-card:focus-within .tosort-check,.tosort-card.is-selected .tosort-check{opacity:1}
.vhead.tosort-head{display:flex!important}
.tosort-batch{position:sticky;bottom:calc(70px + env(safe-area-inset-bottom));z-index:50;display:flex;align-items:center;flex-wrap:wrap;gap:10px;margin-top:18px;margin-bottom:calc(70px + env(safe-area-inset-bottom));padding:12px;background:var(--surface);border:1px solid var(--accent);border-radius:var(--r-md);box-shadow:var(--shadow-lg)}
.tosort-batch[hidden]{display:none}
.tosort-batch-count{margin-right:auto;font-size:var(--fs-sm);font-weight:600}
@media(hover:none),(any-pointer:coarse){.tosort-check{opacity:1}}
.lbtn{border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);border-radius:var(--r-sm);padding:8px 12px;font-size:var(--fs-xs);font-weight:700;white-space:nowrap;transition:var(--t-fast)}
.lbtn:hover{color:var(--ink);border-color:var(--line-2)}
.lbtn.go{background:var(--accent-strong);color:var(--on-accent);border-color:transparent}
.empty{max-width:520px;margin:60px auto;text-align:center;color:var(--muted);border:1px dashed var(--line-2);border-radius:var(--r-lg);padding:50px 30px;line-height:1.6}
.empty b{color:var(--ink);font-size:var(--fs-md);display:block;margin-bottom:8px;font-family:var(--font-display)}
.empty-cta{display:flex;width:max-content;margin:18px auto 0;gap:7px}

/* ------------------- GRID / TABLE ------------------- */
.grid-tools{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:12px}
.grid-actions{display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap}
.grid-chips{display:flex;align-items:center;gap:8px;flex-wrap:nowrap;min-width:0;max-width:100%;overflow-x:auto;padding:6px 0}
.grid-chip-clear,.grid-chip-chevron{margin-inline-start:var(--s-2)}
.grid-chip:focus-visible{outline:0;box-shadow:var(--focus-ring)}
.grid-action.on{border-color:var(--accent);color:var(--accent-ink);background:color-mix(in oklab,var(--accent),transparent 92%)}
.grid-table-wrap{overflow:auto;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow)}
.grid-workspace{display:grid;grid-template-columns:minmax(0,1fr);align-items:start;gap:14px}
.grid-workspace.kit-mode{grid-template-columns:minmax(0,1fr) 300px}
.grid-main{min-width:0}
.grid-batch{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 12px;margin-bottom:10px;border:1px solid color-mix(in oklab,var(--accent),transparent 55%);border-radius:var(--r-md);background:color-mix(in oklab,var(--accent),transparent 94%)}
.grid-batch-count{font-family:var(--font-mono);font-size:var(--fs-micro);font-weight:700;color:var(--accent-ink);margin-right:auto}
.grid-kit-panel{position:sticky;top:0;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow);overflow:hidden}
.grid-kit-head{padding:13px;border-bottom:1px solid var(--line);background:var(--surface-2)}
.grid-kit-kicker{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:7px;font-weight:var(--fw-semi)}
.grid-kit-title{font-family:var(--font-display);font-size:var(--fs-base);font-weight:800;color:var(--ink);margin-bottom:9px}
.grid-kit-choose{display:flex;gap:7px;align-items:center}
.grid-kit-select{flex:1;min-width:0;height:35px;padding:0 9px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font-family:inherit;font-weight:700}
.grid-kit-list{display:flex;flex-direction:column;max-height:46vh;overflow-y:auto}
.grid-kit-item{display:flex;align-items:center;gap:8px;padding:9px 12px;padding-left:calc(12px + (var(--kit-depth,0) * var(--s-4)));border-bottom:1px solid var(--line)}
.grid-kit-item-missing{background:color-mix(in oklab,var(--surface-2),transparent 35%);color:var(--muted)}
.grid-kit-item-missing .grid-kit-item-name{font-weight:var(--fw-regular)}
.grid-kit-missing-label{font-style:italic;color:var(--muted)}
.grid-kit-add{border:0;background:transparent;color:var(--accent-ink);font:inherit;font-size:var(--fs-micro);font-weight:var(--fw-semi);text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.grid-kit-item:last-child{border-bottom:0}
.grid-kit-item-name{flex:1;min-width:0;font-size:var(--fs-xs);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.grid-kit-remove{width:24px;height:24px;border:0;border-radius:var(--r-xs);background:transparent;color:var(--muted);cursor:pointer}
.grid-kit-remove-label{width:auto;height:auto;padding:var(--s-1) var(--s-2);background:var(--surface-2);font-size:var(--fs-micro);white-space:nowrap}
.grid-kit-remove:hover{background:var(--surface-2);color:var(--danger-ink)}
.grid-kit-empty{padding:22px 14px;text-align:center;color:var(--muted);font-size:var(--fs-xs);line-height:1.5}
.grid-kit-open{width:100%;border:0;border-top:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);padding:10px;font-size:var(--fs-xs);font-weight:700;cursor:pointer}
.grid-kit-open:hover{color:var(--accent-ink)}
.grid-kit-send-wrap{padding:10px 12px 11px;border-top:1px solid var(--line);background:var(--surface)}
.grid-kit-send{width:100%;justify-content:center;gap:6px}
.grid-kit-send:disabled{cursor:not-allowed;opacity:.52}
.grid-kit-send-hint{margin-top:6px;color:var(--muted);font-size:var(--fs-micro);line-height:1.35}
.grid-suggest{padding:11px 12px;border-top:1px solid var(--line);background:color-mix(in oklab,var(--accent),transparent 96%)}
.grid-suggest-title{font-size:var(--fs-micro);color:var(--ink-2);line-height:1.35;margin-bottom:8px}
.grid-suggest-chips{display:flex;gap:6px;flex-wrap:wrap}
.grid-suggest-chip{border:1px solid var(--line-2);border-radius:var(--r-pill);background:var(--surface);color:var(--ink-2);font-size:var(--fs-micro);padding:5px 8px;cursor:pointer}
.grid-suggest-chip:hover{border-color:var(--accent);color:var(--accent-ink)}
.grid-suggest-all{margin-top:8px;width:100%}
.grid-row.in-kit td{background:color-mix(in oklab,var(--accent),transparent 94%)}
.grid-row.in-kit td:first-child{box-shadow:inset 3px 0 0 var(--accent)}
.grid-table .grid-kit-cell{width:58px;padding-left:3px;padding-right:8px;text-align:right}
.grid-kit-toggle{height:24px;padding:0 7px;border:1px solid var(--line);border-radius:var(--r-xs);background:var(--surface);color:var(--muted);font-size:var(--fs-micro);font-weight:700;white-space:nowrap;cursor:pointer;opacity:0;transition:opacity var(--t-fast),border-color var(--t-fast),color var(--t-fast),background var(--t-fast)}
.grid-row:hover .grid-kit-toggle,.grid-kit-toggle:focus-visible,.grid-kit-toggle.active{opacity:1}
.grid-kit-toggle:hover{border-color:var(--accent);color:var(--accent-ink)}
.grid-kit-toggle.active{border-color:color-mix(in oklab,var(--accent),transparent 30%);background:color-mix(in oklab,var(--accent),transparent 90%);color:var(--accent-ink)}
.grid-status-confirm{position:relative;z-index:4;width:220px;padding:9px;border:1px solid var(--line-2);border-radius:var(--r-sm);background:var(--surface);box-shadow:var(--shadow)}
.grid-loan-detail{display:grid;grid-template-columns:46px minmax(0,1fr);gap:4px 8px;margin-bottom:8px;font-size:var(--fs-micro);line-height:1.35;white-space:normal}
.grid-loan-detail dt{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.05em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}
.grid-loan-detail dd{margin:0;color:var(--ink);font-weight:600;overflow-wrap:anywhere}
.grid-inline-status{display:flex;align-items:center;gap:5px;white-space:nowrap}
.grid-inline-status button{height:25px;padding:0 7px;border:1px solid var(--line);border-radius:var(--r-xs);background:var(--surface-2);color:var(--ink-2);font-size:var(--fs-micro);font-weight:700;cursor:pointer}
.grid-inline-status .go{border-color:var(--accent);color:var(--accent-ink)}
.grid-table{width:100%;min-width:1120px;border-collapse:collapse;table-layout:fixed}
/* Suppress native image menus only on tile/photo-thumbnail surfaces. */
:is(.card-ph,.ph-cell,.os-card,.grid-thumb,.ph-thumb,.lph),
:is(.card-ph,.ph-cell,.os-card,.grid-thumb,.ph-thumb,.lph) img{
  -webkit-touch-callout:none;-webkit-user-select:none;user-select:none;
}
:is(.card-ph,.ph-cell,.os-card,.grid-thumb,.ph-thumb,.lph) img{pointer-events:none}
.grid-col-check{width:var(--target-min)}
.grid-col-thumb{width:38px}
.grid-col-name{width:auto}
.grid-col-category{width:15%}
.grid-col-type{width:12%}
.grid-col-place,.grid-col-container{width:15%}
.grid-col-qty{width:58px}
.grid-col-status{width:108px}
.grid-col-date{width:116px}
.grid-col-price{width:88px}
.grid-col-kit{width:58px}
.grid-table th{height:34px;padding:0 10px;border-bottom:1px solid var(--line-2);background:var(--surface-2);font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.03em;color:var(--ink-2);text-align:left;white-space:nowrap;user-select:none}
.grid-table th[data-sort]{cursor:pointer}
.grid-table th[data-sort]:hover{color:var(--ink)}
.grid-sort-arrow{color:var(--accent-ink);font-size:var(--fs-xs);margin-left:4px}
.grid-table td{height:34px;padding:2px 10px;border-bottom:1px solid color-mix(in oklab,var(--line),transparent 45%);font-size:var(--fs-sm);color:var(--ink-2);vertical-align:middle}
.grid-table tbody tr:last-child td{border-bottom:0}
.grid-table tbody tr.grid-row{cursor:pointer}
.grid-table tbody tr.grid-row:hover td{background:var(--surface-2)}
.grid-table td[data-grid-edit]{cursor:text}
.grid-table td[data-grid-edit="place"],.grid-table td[data-grid-edit="container"]{cursor:pointer}
.grid-table td[data-grid-edit]:hover{box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--accent),transparent 65%)}
.grid-edit-input{display:block;width:100%;min-width:70px;height:28px;margin:0;padding:3px 6px;border:1px solid var(--accent);border-radius:var(--r-xs);background:var(--surface);color:var(--ink);font-family:inherit}
.grid-edit-input[type="number"]{font-family:var(--font-mono);text-align:right}
.grid-row-message{display:block;margin-top:2px;color:var(--danger-ink);font-size:var(--fs-micro);font-weight:500;line-height:1.2;white-space:normal}
.grid-table .grid-check{width:var(--target-min);padding-left:0;padding-right:0;text-align:center}
.grid-checkbox-hit{display:inline-flex;width:30px;height:30px;align-items:center;justify-content:center;vertical-align:middle;cursor:pointer}
.grid-table .grid-check input[type="checkbox"]{-webkit-appearance:none;appearance:none;display:grid;place-content:center;width:15px;height:15px;margin:0;border:1px solid color-mix(in oklab,var(--line),transparent 45%);border-radius:var(--r-xs);background:transparent;cursor:pointer}
.grid-table .grid-check input[type="checkbox"]::after{content:"";width:7px;height:4px;border-left:2px solid #21170f;border-bottom:2px solid #21170f;transform:rotate(-45deg) scale(0);transform-origin:center;transition:transform var(--t-fast) var(--ease)}
.grid-table .grid-check input[type="checkbox"]:checked{border-color:var(--accent);background:var(--accent)}
.grid-table .grid-check input[type="checkbox"]:checked::after{transform:rotate(-45deg) scale(1)}
.grid-table .grid-check input[type="checkbox"]:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.grid-table .grid-checkbox-hit:hover input[type="checkbox"]:not(:checked){border-color:var(--ink-2)}
.grid-table .grid-thumb-cell{width:38px;padding-left:5px;padding-right:5px}
.grid-thumb{width:36px;height:36px;border:1px solid color-mix(in oklab,var(--line),transparent 35%);border-radius:var(--r-sm);overflow:hidden;display:grid;place-items:center;background:var(--surface-3);color:var(--ink-2)}
.grid-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.grid-thumb svg{width:15px;height:15px}
.grid-name{max-width:0;overflow:hidden;text-overflow:ellipsis;font-weight:700;color:var(--ink);white-space:nowrap}
.grid-name-text{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.grid-cell-truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.grid-name-icons{display:inline-flex;gap:5px;vertical-align:-2px;margin-left:6px}
.grid-name-meta{display:none}
@media (max-width:639px){
  .grid-table .grid-name{white-space:normal}
  .grid-name-meta{display:flex;align-items:center;gap:var(--s-1);margin-top:2px;font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:var(--fw-regular);color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .grid-name-meta-dot{flex:0 0 auto;width:7px;height:7px;border-radius:var(--r-pill)}
}
.grid-name-icons svg{width:13px;height:13px}
.grid-link{color:var(--muted)}
[data-theme="studio"] .grid-table .grid-name{color:var(--ink)}
.grid-location-link svg{width:14px;height:14px;vertical-align:-2px}
.grid-name-meta .grid-link{display:inline-flex;flex:0 0 auto;align-items:center}
.grid-name-meta .grid-link svg{width:14px;height:14px}
.grid-name-meta-copy{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.grid-num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;white-space:nowrap}
.grid-table .grid-align-right{text-align:right;font-variant-numeric:tabular-nums}
.grid-empty-value{color:var(--muted);font-weight:400}
.grid-out{font-size:var(--fs-micro);color:var(--warn-ink);margin-left:6px}
.grid-status{display:inline;color:var(--muted);font-size:var(--fs-micro);font-weight:500;white-space:nowrap}
.grid-status.pill{display:inline-flex;align-items:center;min-height:23px;padding:2px 8px;border:1px solid var(--line);border-radius:var(--r-pill);font-weight:700}
.kit-grid-row .grid-status.pill.st-home{color:color-mix(in srgb,var(--st-home-ink) 85%,var(--ink))}
.grid-status.amber{border-color:color-mix(in oklab,#c8880a,transparent 45%);color:var(--warn-ink);background:color-mix(in oklab,#c8880a,transparent 92%)}
.grid-status.orange{border-color:color-mix(in oklab,var(--accent),transparent 40%);color:var(--accent-ink);background:color-mix(in oklab,var(--accent),transparent 92%)}
.grid-group-row td{height:34px;background:var(--surface-2);font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:700;color:var(--muted);letter-spacing:.02em}
.grid-group-row i{display:inline-block;width:3px;height:14px;border-radius:var(--r-xs);margin-right:8px;vertical-align:-3px}
.grid-footer{display:flex;justify-content:flex-end;padding:10px 13px;border-top:1px solid var(--line);background:var(--surface-2);font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);font-variant-numeric:tabular-nums}
.grid-col-detail{width:calc(var(--ctl-lg) * 3)}
.grid-col-money{width:calc(var(--ctl-lg) * 4)}
.grid-workspace[data-grid-text] .grid-table.grid-expanded-columns{min-width:calc(var(--s-10) * 12 + var(--ctl-lg) * 4 * var(--grid-extra-columns))}
.grid-expanded-columns .grid-col-name{width:calc(var(--ctl-lg) * 5)}
.grid-expanded-columns :is(.grid-col-category,.grid-col-type,.grid-col-place,.grid-col-container){width:calc(var(--ctl-lg) * 3)}
.grid-money-cell{white-space:nowrap}
.grid-money-total{font-family:var(--font-mono);font-size:var(--fs-micro);color:var(--ink-2)}
.grid-money-quantity{color:var(--muted)}
.grid-value-totals{position:sticky;inset-block-end:var(--dock-clear);inset-inline-start:var(--s-0);z-index:var(--z-sticky);box-sizing:border-box;flex-wrap:wrap;justify-content:flex-start;gap:var(--s-2) var(--s-4);padding:var(--s-3) var(--s-4);font-family:var(--font-ui);font-size:var(--fs-sm);color:var(--ink-2);box-shadow:var(--shadow-sm)}
.grid-value-totals>span{white-space:nowrap}
.grid-value-totals strong{font-family:var(--font-mono);font-weight:var(--fw-semi);color:var(--ink)}
.grid-valued-count{margin-inline-start:auto}
.grid-empty{padding:48px 20px;text-align:center;color:var(--muted);font-size:var(--fs-control)}
.grid-export-section{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin:16px 0 8px;font-weight:var(--fw-semi)}
.grid-export-cols{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px}
.grid-export-col{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--ink-2);cursor:pointer}
.grid-export-col input{accent-color:var(--accent)}
@media(max-width:700px){
  .grid-tools{align-items:flex-start}
  .grid-chips{width:100%}
  .grid-actions{width:100%}
  .grid-table-wrap{border-radius:var(--r-sm)}
  .grid-table .grid-kit-cell{position:sticky;right:0;z-index:2;background:var(--surface);box-shadow:-8px 0 10px -10px rgba(0,0,0,.45)}
  .grid-table th.grid-kit-cell{z-index:3;background:var(--surface-2)}
  .grid-row:hover .grid-kit-cell,.grid-row.in-kit .grid-kit-cell{background:var(--surface-2)}
  .grid-kit-toggle{opacity:1}
  .grid-workspace,.grid-workspace.kit-mode{grid-template-columns:1fr}
  .grid-kit-panel{position:static;grid-row:2}
  .grid-kit-list{max-height:34vh}
}
.onboard{max-width:460px;margin:80px auto;text-align:center;padding:0 20px}
.onboard h1{font-family:var(--font-display);font-weight:900;font-size:clamp(26px,4vw,38px);letter-spacing:-.02em;margin:0 0 14px}
.onboard .ob-sub{color:var(--ink-2);font-size:var(--fs-base);line-height:1.65;margin:0 0 36px}
.onboard .ob-actions{display:flex;flex-direction:column;align-items:center;gap:12px}
.onboard .ob-sample{align-self:center}
.onboard .ob-skip{font-size:var(--fs-sm);color:var(--muted);background:none;border:none;cursor:pointer;margin-top:4px;text-decoration:underline;padding:0}
.onboard .ob-skip:hover{color:var(--ink)}
.onboard .ob-secondary{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:12px 20px;font-size:var(--fs-control);color:var(--ink);cursor:pointer;font-family:inherit;width:100%}
.onboard .ob-secondary:hover{border-color:var(--line-strong)}
.onboard .ob-import-link{font-size:var(--fs-xs);color:var(--muted);background:none;border:none;cursor:pointer;font-family:inherit;text-decoration:underline;text-underline-offset:3px;padding:0}
.onboard .ob-import-link:hover{color:var(--ink-2)}
.onboard .ob-survey{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:14px 18px;font-size:var(--fs-base);color:var(--ink);cursor:pointer;font-family:inherit;width:100%;text-align:center;transition:border-color var(--t-fast),background var(--t-fast)}
.onboard .ob-survey:hover{border-color:var(--line-strong);background:var(--surface)}
.onboard{max-width:920px}.ob-cards{display:grid;grid-template-columns:1.25fr 1fr 1fr;gap:14px;text-align:left}.ob-card{display:flex;flex-direction:column;justify-content:flex-start;gap:9px;min-height:210px;padding:21px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);color:var(--ink);font:inherit;text-align:left;cursor:pointer}.ob-card:hover{border-color:var(--accent);transform:translateY(-2px)}.ob-card strong,.ob-card h2{font-family:var(--font-display);font-weight:900;font-size:18px;margin:0}.ob-card span,.ob-card p{font-size:13px;color:var(--muted);line-height:1.45;margin:0}.ob-primary{background:var(--surface-2);border-color:var(--accent)}.ob-qr-wrap{text-align:center}.ob-qr{box-sizing:content-box;width:132px;height:132px;background:#fff;padding:8px;border-radius:8px;margin:3px auto 0}.ob-qr img{display:block;width:100%!important;height:100%!important}.ob-qr-status{min-height:17px;margin-top:7px;color:var(--ink);font-size:12px;line-height:1.4}.ob-qr-actions{min-height:17px}.ob-qr-actions button,.ob-new-code,.ob-links button{border:0;background:none;padding:0;color:var(--accent-ink);font:inherit;font-size:12px;cursor:pointer;text-decoration:underline;text-underline-offset:3px}.ob-links{display:flex;justify-content:center;gap:10px;flex-wrap:wrap;margin-top:20px;color:var(--muted);font-size:12px}.ob-connected{font-weight:800;margin-top:12px}.ob-live-count{font-size:12px;color:var(--muted);margin:4px 0}.ob-live-items{display:flex;gap:5px;flex-wrap:wrap}.ob-live-item{display:flex;align-items:center;gap:5px;max-width:100%;font-size:11px}.ob-live-item img{width:24px;height:24px;border-radius:4px;object-fit:cover}.ob-live-done{margin-top:10px}.ob-primer{text-align:center;padding:28px}.ob-primer p{font-size:16px;line-height:1.5}.ob-primer .ob-skip{display:block;margin:16px auto 0}
.ob-live-media,.ob-live-thumb{width:24px;height:24px;border-radius:4px}
@media(max-width:720px),(pointer:coarse){.onboard{margin:38px auto;padding:0 16px}.ob-cards{grid-template-columns:1fr}.ob-card{min-height:0;padding:20px}.ob-links{align-items:center;flex-direction:column;gap:14px}.ob-links i{display:none}}
.keep-going{display:flex;align-items:center;gap:12px;margin:0 0 18px;padding:11px 14px;border:1px solid var(--accent);border-radius:var(--r-md);background:color-mix(in srgb,var(--accent) 8%,var(--surface));font-size:13px}.keep-going>span{flex:1}.keep-actions{display:flex;gap:6px;flex-wrap:wrap}.keep-actions button,.keep-close{border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);padding:6px 9px;font:inherit;font-size:11px;cursor:pointer}.keep-close{border:0;background:none;font-size:19px;padding:2px 5px}@media(max-width:720px){.keep-going{align-items:flex-start;flex-wrap:wrap}.keep-actions{width:100%}}

/* kits */
.kit-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:18px;display:flex;flex-direction:column;gap:9px;cursor:pointer;box-shadow:var(--shadow);transition:var(--t-base)}
.kit-card:hover{border-color:var(--line-2);transform:translateY(-2px);box-shadow:var(--shadow-lg)}
.kit-card .kn{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);letter-spacing:-.01em}
.kit-card .km{font-family:var(--font-ui);font-size:var(--fs-micro);color:var(--muted)}
.kit-card .kstat{font-size:var(--fs-sm);font-weight:600;display:flex;align-items:center;gap:7px;margin-top:2px}
.kit-card .kstat.ok{color:var(--ok-ink)}
.kit-card .kstat.warn{color:var(--warn-ink)}
.kit-card.is-shop{border-color:var(--accent)}
.kshop-badge{display:flex;align-items:center;gap:5px;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--accent-ink);font-weight:700;margin-top:1px}
.kshop-badge svg{width:13px;height:13px;flex-shrink:0}
.kit-zone-hd{font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:14px 0 6px;display:flex;align-items:center;justify-content:space-between}
.kit-acc-list{display:flex;flex-direction:column;gap:5px;padding:3px 0 3px 76px;grid-column:1/-1}
.kit-acc-row{display:flex;align-items:center;gap:10px;padding:7px 12px;background:var(--surface-2);border-radius:var(--r-sm);border:1px solid var(--line)}
.kit-acc-row .ln{flex:1;font-size:var(--fs-sm);font-weight:600;color:var(--ink)}
.kit-acc-row .lstatus{font-size:var(--fs-micro);color:var(--muted);white-space:nowrap}
.kit-acc-pack{background:none;border:1px solid var(--line-2);border-radius:var(--r-xs);padding:3px 10px;font-size:var(--fs-xs);font-weight:600;color:var(--ink-2);cursor:pointer;white-space:nowrap;transition:var(--t-fast)}
.kit-acc-pack.go{border-color:var(--accent);color:var(--accent-ink)}
.kit-acc-pack.done{border-color:var(--ok);color:var(--ok-ink)}
.kit-card.has-cover{padding-top:0}
.kit-card-img{position:relative;margin:-18px -18px 12px;height:140px;border-radius:var(--r-md) var(--r-md) 0 0;overflow:hidden;background:var(--ph)}
.kit-card-img img{width:100%;height:100%;object-fit:cover}
.kit-cover-hero{position:relative;width:100%;height:220px;border-radius:var(--r-md);overflow:hidden;background:var(--ph);margin-bottom:14px}
@media(max-width:600px){.kit-cover-hero{height:160px}}
.kit-cover-hero img{width:100%;height:100%;object-fit:cover;object-position:center;display:block}
.kit-cover-cam{position:absolute;bottom:10px;right:10px;background:rgba(0,0,0,.52);border:none;border-radius:var(--r-sm);padding:7px 13px;color:#fff;font-size:var(--fs-xs);font-weight:600;cursor:pointer;display:flex;align-items:center;gap:6px;backdrop-filter:blur(4px);transition:var(--t-fast)}
.kit-cover-cam:hover{background:rgba(0,0,0,.75)}
.kit-cover-add{display:flex;align-items:center;gap:7px;background:none;border:1.5px dashed var(--line-2);border-radius:var(--r-sm);padding:10px 14px;color:var(--muted);font-size:var(--fs-sm);font-weight:600;cursor:pointer;margin-bottom:14px;width:100%;transition:var(--t-fast)}
.kit-cover-add:hover{border-color:var(--accent);color:var(--accent-ink)}
.kit-extras-zone{margin-top:4px}
.kit-extra-row{display:flex;align-items:center;gap:10px;padding:9px 12px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-sm)}
.kit-extra-name{flex:1;font-size:var(--fs-control);font-weight:600}
.kit-extra-rm{background:none;border:none;color:var(--muted);cursor:pointer;font-size:var(--fs-control);padding:2px 6px;line-height:1;border-radius:var(--r-xs)}
.kit-extra-rm:hover{color:var(--ink)}
.kit-create-input{width:100%;box-sizing:border-box;font-weight:600;padding:12px 13px}
.kit-create-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px color-mix(in srgb,var(--accent),transparent 82%)}
.modal:has(>.kit-picker){height:100dvh;box-sizing:border-box;padding-bottom:calc(20px + var(--dock-h,60px) + env(safe-area-inset-bottom))}
.modal-card.kit-picker{width:min(780px,100%);height:min(760px,calc(100dvh - 40px - var(--dock-h,60px) - env(safe-area-inset-bottom)));max-height:calc(100dvh - 40px - var(--dock-h,60px) - env(safe-area-inset-bottom));min-height:0}
.modal-card.kit-picker .modal-h{flex:0 0 auto}
.modal-card.kit-picker .modal-b{flex:1 1 0;min-height:0;overflow:hidden;padding-bottom:12px}
.modal-card.kit-picker .modal-b>.lnk-srch{flex:0 0 auto}
.modal-card.kit-picker .kit-pick-grid{flex:1 1 0;min-height:0;overflow-y:auto;overscroll-behavior:contain;align-content:start;grid-auto-rows:max-content;padding:3px}
.modal-card.kit-picker .modal-f{position:sticky;bottom:0;z-index:1;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;gap:12px;background:var(--surface);border-top:1px solid var(--line)}
.modal-card.kit-picker .modal-f .btn{min-height:44px;white-space:normal}
.kit-pick-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px}
.kit-pick-tile{min-width:0;padding:0;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink);overflow:hidden;text-align:left;cursor:pointer;position:relative;transition:border-color var(--t-fast),transform var(--t-fast),opacity var(--t-fast)}
.kit-pick-tile:hover:not(:disabled){border-color:var(--line-strong);transform:translateY(-1px)}
.kit-pick-tile.selected{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent),transparent 65%)}
.kit-pick-tile.added{opacity:.46;cursor:default}
.kit-pick-media{display:block;position:relative;aspect-ratio:1/1;background:var(--ph);overflow:hidden}
.kit-pick-media img{position:absolute;width:100%;height:100%;inset:0;object-fit:cover;display:block}
.kit-pick-media>.kit-pick-thumb{position:absolute;inset:0;width:100%;height:100%}
.kit-pick-glyph{width:100%;height:100%;display:grid;place-items:center}
.kit-pick-glyph svg{width:38%;height:38%;stroke:currentColor;fill:none}
.kit-pick-copy{display:block;padding:8px 9px 9px;min-width:0}
.kit-pick-name{display:block;font-size:var(--fs-xs);font-weight:700;line-height:1.25;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kit-pick-cat{display:block;margin-top:3px;font-family:var(--font-ui);font-size:var(--fs-xs);line-height:1.25;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-transform:uppercase;letter-spacing:.04em;font-weight:var(--fw-semi)}
.kit-pick-check,.kit-pick-added{position:absolute;z-index:2;top:7px;right:7px;border-radius:var(--r-pill);font-family:var(--font-mono);font-size:var(--fs-nano);font-weight:800;letter-spacing:.04em}
.kit-pick-check{display:none;width:23px;height:23px;place-items:center;background:var(--accent-strong);color:var(--on-accent);font-size:var(--fs-control);box-shadow:var(--shadow-sm)}
.kit-pick-tile.selected .kit-pick-check{display:grid}
.kit-pick-added{padding:5px 7px;background:rgba(20,16,9,.78);color:#fff}
.kit-pick-more{height:2px;grid-column:1/-1}
.kit-pick-empty{grid-column:1/-1;color:var(--muted);font-size:var(--fs-sm);text-align:center;padding:40px 12px}
.kit-pick-count{font-family:var(--font-mono);font-size:var(--fs-micro);color:var(--muted);align-self:center;margin-right:auto}
@media(max-width:600px){
  .modal-card.kit-picker{width:100%;border-radius:0}
  .modal-card.kit-picker .modal-b{padding-left:12px;padding-right:12px}
  .kit-pick-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
  .kit-pick-copy{padding:7px}
  .kit-pick-name{font-size:var(--fs-micro)}
  .kit-pick-cat{font-size:var(--fs-nano)}
}
.ph-cell.us-need{outline:3px solid var(--accent);outline-offset:-3px;z-index:1}
.us-tray{position:sticky;bottom:0;background:var(--surface);border:1px solid var(--line);border-top:2px solid var(--accent);border-radius:var(--r-md);padding:14px 16px;margin-top:10px;box-shadow:var(--shadow-lg)}
.us-tray-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.us-tray-label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}
.us-tray-ct{font-family:var(--font-mono);font-size:var(--fs-micro);color:var(--accent-ink);font-weight:700;background:var(--surface-2);border-radius:var(--r-xl);padding:2px 8px}
.us-clear{margin-left:auto;height:28px;padding:0 12px;font-size:var(--fs-xs);gap:5px}
.us-tray-chips{display:flex;flex-wrap:wrap;gap:7px}
.us-chip{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-xl);padding:4px 12px;font-size:var(--fs-sm);font-weight:500;white-space:nowrap}

/* ------------------- PHOTO STRIP (multi-photo) ------------------- */
.photo-strip{margin-bottom:10px}
.ph-strip-scroll{display:flex;gap:8px;overflow-x:auto;padding-bottom:4px;scrollbar-width:none}
.ph-strip-scroll::-webkit-scrollbar{display:none}
.ph-thumb{position:relative;width:64px;height:64px;flex-shrink:0;border-radius:var(--r-sm);overflow:visible;cursor:pointer;border:2px solid transparent;transition:var(--t-fast)}
.ph-thumb:hover{border-color:var(--line-2)}
.ph-thumb.is-cover{border-color:var(--accent)}
.ph-thumb img{width:100%;height:100%;object-fit:cover;display:block;border-radius:var(--r-xs)}
.ph-thumb-badge{position:absolute;bottom:0;left:0;right:0;text-align:center;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.07em;text-transform:uppercase;color:#fff;background:rgba(0,0,0,.55);padding:2px 0;pointer-events:none;font-weight:var(--fw-semi)}
.ph-thumb-del{position:absolute;top:2px;right:2px;width:18px;height:18px;border-radius:50%;background:rgba(0,0,0,.55);border:none;color:#fff;font-size:var(--fs-micro);line-height:1;cursor:pointer;display:grid;place-items:center}
.ph-thumb-add{width:64px;height:64px;flex-shrink:0;border-radius:var(--r-sm);border:1.5px dashed var(--line-2);background:var(--ph);cursor:pointer;display:grid;place-items:center;color:var(--muted);transition:var(--t-fast)}
.ph-thumb-add:hover{border-color:var(--accent);color:var(--accent-ink)}
.ph-thumb-menu-btn{position:absolute;top:6px;right:6px;width:28px;height:28px;padding:0;border:1px solid rgba(255,255,255,.35);border-radius:50%;background:rgba(0,0,0,.62);background-clip:padding-box;color:#fff;display:grid;place-items:center;font-size:var(--fs-control);line-height:1;cursor:pointer;z-index:2;isolation:isolate}
.ph-thumb-menu-btn::before{content:"";position:absolute;top:-7px;right:-7px;width:44px;height:44px;border-radius:50%;background:rgba(0,0,0,.08);z-index:-1}
.ph-thumb-menu-btn:hover,.ph-thumb-menu-btn:focus-visible{background:rgba(0,0,0,.86);outline:2px solid var(--accent);outline-offset:1px}
.ph-photo-menu{position:fixed;z-index:10001;min-width:156px}
.ph-photo-menu button{display:block;width:100%;min-height:var(--target-min);padding:calc((var(--target-min) - 1lh)/2) 10px;border:0;border-radius:var(--r-sm);background:transparent;color:var(--ink-2);font:600 var(--type-control) var(--font-ui);text-align:left;cursor:pointer}
.ph-photo-menu button:hover,.ph-photo-menu button:focus-visible{background:var(--surface-2);color:var(--ink)}
.ph-photo-menu button[data-photo-action="delete"]{color:var(--danger,#c0392b)}
.ph-photo-count{margin:0 0 7px;font:var(--fs-xs) var(--font-ui);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}

/* ------------------------------ detail panel ------------------------------ */
.scrim{position:fixed;inset:0;background:var(--scrim);backdrop-filter:var(--scrim-blur);z-index:60;opacity:0;pointer-events:none;transition:opacity var(--t-base)}
.scrim.show{opacity:1;pointer-events:auto}
/* A closed drawer is translated off-screen, not removed — so its controls stayed
   in the tab order and a keyboard user fell into an invisible close button.
   visibility:hidden takes it out of the tab order; the delayed visibility
   transition means the slide-out still animates before it disappears. */
.panel{position:fixed;z-index:61;top:0;right:0;height:100%;width:min(440px,100%);max-width:100vw;overflow-x:hidden;background:var(--surface);border-left:1px solid var(--line);transform:translateX(101%);visibility:hidden;transition:transform var(--t-slow) var(--ease),visibility 0s linear var(--t-slow);display:flex;flex-direction:column;box-shadow:var(--shadow-lg)}
.panel.show{transform:translateX(0);visibility:visible;transition:transform var(--t-slow) var(--ease),visibility 0s}
.pc-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line);flex:0 0 auto}
.pc-head .t{font-family:var(--font-ui);font-size:var(--fs-base);font-weight:700;letter-spacing:0;color:var(--ink-2)}
.x{background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);width:34px;height:34px;border-radius:var(--r-sm);display:grid;place-items:center;font-size:var(--fs-md);transition:var(--t-fast)}
.x:hover{color:var(--ink);border-color:var(--line-2)}
.pc-body{padding:18px;overflow-y:auto;overflow-x:hidden;flex:1;display:flex;flex-direction:column;gap:15px;max-width:100%;box-sizing:border-box}
.item-lookup{align-self:flex-start;width:100%}
.item-lookup summary{width:max-content;list-style:none;cursor:pointer}
.item-lookup summary::-webkit-details-marker{display:none}
.item-lookup[open] summary svg{transform:rotate(180deg)}
.item-lookup nav{display:flex;flex-direction:column;max-width:280px;margin-top:6px;padding:5px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface)}
.item-lookup a{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px;color:var(--ink);text-decoration:none;border-radius:var(--r-xs);font-size:var(--fs-sm)}
.item-lookup a:hover,.item-lookup a:focus-visible{background:var(--surface-2);outline:2px solid var(--line-2);outline-offset:-2px}
.pc-foot{padding:12px 14px;border-top:1px solid var(--line);display:flex;flex-wrap:wrap;gap:8px;flex:0 0 auto;overflow-x:hidden;max-width:100%;box-sizing:border-box}
body.panel-open .mob-fab{display:none !important}
.pc-foot.pc-read-actions{position:relative;align-items:center;flex-wrap:nowrap;gap:8px;overflow:visible}
.pc-read-actions .btn{flex:0 0 auto!important;min-width:max-content;white-space:nowrap;overflow:hidden;text-overflow:clip}
.pc-action-overflow{position:relative;flex:0 0 auto}
.pc-action-more{width:var(--target-min);min-width:var(--target-min)!important;padding-left:0!important;padding-right:0!important;justify-content:center;font-size:var(--fs-md);line-height:1}
.pc-action-primary{display:flex;align-items:center;gap:8px;margin-left:auto}
.pc-action-menu{position:absolute;z-index:5;left:0;bottom:calc(100% + 8px);width:max-content;min-width:170px}
.pc-action-menu[hidden]{display:none}
.pc-action-menu .btn{display:flex;width:100%;min-width:0!important;align-items:center;justify-content:flex-start;gap:9px;padding:9px 11px;border-color:transparent;background:transparent;box-shadow:none;color:var(--ink-2)}
.pc-action-menu .btn:hover{border-color:var(--line);background:var(--surface-2);color:var(--ink);transform:none}
.pc-action-menu .btn svg{width:14px;height:14px;flex:0 0 auto}
.item-share-options{display:flex;flex-direction:column;gap:10px;margin:4px 0 14px}
.item-share-option{display:flex;align-items:center;gap:9px;font-size:var(--fs-sm);color:var(--ink-2);cursor:pointer}
.item-share-option input{width:16px;height:16px;margin:0;accent-color:var(--accent);flex:0 0 auto}
.item-share-status{min-height:18px;margin:8px 0 0;font-size:var(--fs-xs);line-height:1.45;color:var(--muted)}
.item-share-status.error{color:var(--danger,#c0392b)}
.item-share-url{font-family:var(--font-mono)}

.photo-slot{aspect-ratio:16/10;border-radius:var(--r-md);overflow:hidden;border:1px solid var(--line);background:var(--ph);display:grid;place-items:center;position:relative;cursor:pointer}
.photo-slot img{width:100%;height:100%;object-fit:cover;object-position:50% 50%}
.photo-slot .ph-add{display:grid;place-items:center;gap:7px;color:var(--muted);font-size:var(--fs-sm);text-align:center}
.photo-slot .ph-add svg{width:24px;height:24px}
.photo-slot .ph-add span{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.02em}
.photo-slot .ph-cam-hint{position:absolute;bottom:10px;left:50%;transform:translateX(-50%);display:flex;align-items:center;gap:5px;background:rgba(0,0,0,.48);backdrop-filter:blur(4px);border-radius:var(--r-xl);padding:5px 11px;color:#fff;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.02em;pointer-events:none;white-space:nowrap}
.photo-slot .ph-cam-hint svg{width:12px;height:12px;flex:0 0 auto}
.photo-slot .ph-corner-cam{position:absolute;bottom:8px;right:8px;width:30px;height:30px;border-radius:50%;background:rgba(0,0,0,.52);backdrop-filter:blur(4px);display:grid;place-items:center;color:#fff;opacity:0;transition:opacity var(--t-base);pointer-events:none;border:0;padding:0;cursor:pointer}
.photo-slot:hover .ph-corner-cam,.photo-slot:focus-within .ph-corner-cam{opacity:1;pointer-events:auto}
.photo-slot.has-img .ph-corner-cam{opacity:.75;pointer-events:auto}
.photo-slot .ph-cover-menu-btn{position:absolute;top:4px;right:4px;width:var(--target-min);height:var(--target-min);padding:12px;border:0;border-radius:50%;background:rgba(0,0,0,.58);backdrop-filter:blur(4px);display:grid;place-items:center;color:#fff;font-size:var(--fs-md);line-height:1;cursor:pointer;z-index:2}
.photo-slot .ph-cover-menu-btn:hover{background:rgba(0,0,0,.78)}
.photo-slot.drag-over,.photo-strip.drag-over{outline:2px dashed var(--accent);outline-offset:-4px;background:color-mix(in oklab,var(--accent),transparent 90%)}
.shelf-icon{width:52%;height:52%;display:block}
.item-thumb{position:relative;overflow:hidden;display:grid;place-items:center;flex:0 0 auto}
.item-thumb>.ph-cov,.item-thumb>img{width:100%;height:100%;object-fit:cover;display:block}
.item-thumb>.ini{font-family:var(--font-display);font-weight:800;color:inherit!important}
.item-thumb.icon-tile>.shelf-icon{width:52%;height:52%;display:block}
[data-theme="studio"] .item-thumb[data-no-photo]{background:color-mix(in srgb,var(--item-category-color) 45%,white 55%)!important;color:#1F1B16!important}
[data-theme="studio"] :is(.card,.mtile,.lrow,.grid-table-wrap){background:#fff;border:1px solid rgba(0,0,0,.06)}
[data-theme="studio"] .grid-table tbody tr.grid-row td,
[data-theme="studio"] .grid-table tbody tr.grid-row:hover td,
[data-theme="studio"] .grid-table tbody tr.grid-row.in-kit td{background:#fff;border-bottom-color:rgba(0,0,0,.06)}
.mrg-avatar{width:44px;height:44px;border-radius:8px;font-size:15px}
:is(.card-ph,.ph-cell-ph,.os-card-ph,.photo-slot).icon-tile{position:relative}
:is(.card-ph,.ph-cell-ph,.os-card-ph,.photo-slot).icon-tile > svg.shelf-icon{
  position:absolute;inset:0;margin:auto;width:52%;height:52%;
}
#readPhotoSlot.icon-tile{width:100%;aspect-ratio:16/10;flex:0 0 auto}
#readPhotoSlot>.read-item-thumb{width:100%;height:100%;min-height:220px}
#readPhotoSlot>.read-item-thumb>.ini{font-size:46px}
.item-media-choice{display:flex;align-items:center;gap:8px;margin:-2px 0 12px}
.item-media-choice button{border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);border-radius:var(--r-sm);padding:8px 11px;font:600 var(--fs-micro) var(--font-ui);cursor:pointer;display:inline-flex;align-items:center;gap:7px}
.item-media-choice button:hover{border-color:var(--accent);color:var(--ink)}
.item-media-choice .shelf-icon{width:18px;height:18px}
.icon-picker-search{width:100%;padding:11px 12px}
.icon-picker-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:9px}
.icon-picker-option{min-height:92px;border:1px solid var(--line);background:var(--surface-2);border-radius:var(--r-md);color:var(--ink-2);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;padding:10px;cursor:pointer;text-align:center;font-size:var(--fs-micro)}
.icon-picker-option:hover,.icon-picker-option.selected{border-color:var(--accent);color:var(--ink);background:color-mix(in oklab,var(--accent),transparent 91%)}
.icon-picker-option .shelf-icon{width:34px;height:34px}
.generic-icon-label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-top:5px;font-weight:var(--fw-semi)}
/* ph-cov: absolute fill img for thumbnails/cards — cover crops to fill, no letterboxing */
.ph-cov{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;pointer-events:none}
.ph-thumb-crop{position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:rgba(0,0,0,.55);border:none;color:#fff;font-size:var(--fs-nano);cursor:pointer;display:grid;place-items:center;opacity:0;transition:opacity var(--t-base);padding:0;line-height:1}
.ph-thumb:hover .ph-thumb-crop{opacity:1}
/* crop / reposition editor */
#cropOv{position:fixed;inset:0;z-index:220;background:var(--scrim);backdrop-filter:var(--scrim-blur);display:none;align-items:center;justify-content:center;padding:16px}
.crop-modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);display:flex;flex-direction:column;width:min(460px,100%);overflow:hidden;max-height:calc(100dvh - 32px)}
.crop-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line);flex-shrink:0}
.crop-head-title{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}
.crop-prev-wrap{position:relative;overflow:hidden;background:#111;cursor:crosshair;user-select:none;touch-action:none;aspect-ratio:4/5;flex-shrink:0}
.crop-prev-wrap img{display:block;pointer-events:none}
.crop-reticle{position:absolute;width:14px;height:14px;border-radius:50%;border:2px solid rgba(255,255,255,.9);box-shadow:0 0 0 1.5px rgba(0,0,0,.5),0 0 10px rgba(0,0,0,.35);transform:translate(-50%,-50%);pointer-events:none;display:none}
.crop-hint{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.09em;text-transform:uppercase;color:var(--muted);text-align:center;padding:8px 16px;flex-shrink:0;border-top:1px solid var(--line);font-weight:var(--fw-semi)}
.crop-controls{display:flex;align-items:center;gap:10px;padding:12px 16px;border-top:1px solid var(--line);flex-shrink:0}
.crop-rot-btn{display:flex;align-items:center;gap:6px;padding:8px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink-2);font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.08em;cursor:pointer;white-space:nowrap;flex-shrink:0;transition:background var(--t-fast),color var(--t-fast)}
.crop-rot-btn:hover:not(:disabled){background:var(--surface-3);color:var(--ink)}
.crop-rot-btn:disabled{opacity:.4;cursor:default}
.crop-zoom-wrap{display:flex;align-items:center;gap:8px;flex:1;min-width:0}
.crop-zoom-ico{font-size:var(--fs-micro);color:var(--muted);flex-shrink:0;user-select:none}
.crop-zoom-wrap input[type=range]{flex:1;accent-color:var(--ink);cursor:pointer;min-width:0}
/* ---- photo editor overlay ---- */
#pedOverlay{position:fixed;inset:0;z-index:200;background:var(--scrim);backdrop-filter:var(--scrim-blur);
  display:none;align-items:center;justify-content:center;padding:20px}
.ped-modal{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);
  box-shadow:var(--shadow-lg);display:flex;flex-direction:column;gap:0;
  width:min(520px,100%);overflow:hidden}
.ped-preview{background:#000;display:flex;align-items:center;justify-content:center;
  min-height:200px;max-height:60vh;overflow:hidden}
#pedCanvas{max-width:100%;max-height:60vh;display:block}
.ped-toolbar{display:flex;gap:8px;padding:14px 16px;border-top:1px solid var(--line);
  background:var(--surface-2)}
.ped-btn{flex:1;display:flex;flex-direction:column;align-items:center;gap:5px;
  padding:10px 6px;border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--surface);color:var(--ink-2);font-family:var(--font-ui);
  font-size:var(--fs-xs);letter-spacing:.08em;cursor:pointer;transition:background var(--t-fast),color var(--t-fast)}
.ped-btn:hover{background:var(--surface-3);color:var(--ink)}
.ped-btn svg{width:20px;height:20px;flex:0 0 auto}
.ped-actions{display:flex;gap:10px;padding:14px 16px;border-top:1px solid var(--line)}
.ped-cancel{flex:1;padding:11px;border:1px solid var(--line);border-radius:var(--r-md);
  background:var(--surface-2);color:var(--ink-2);font-size:var(--fs-control);cursor:pointer}
.ped-cancel:hover{background:var(--surface-3)}
.ped-save{flex:2;padding:11px;border:none;border-radius:var(--r-md);
  background:var(--ink);color:var(--surface);font-size:var(--fs-control);font-weight:600;cursor:pointer}
.ped-save:hover{opacity:.88}
.ped-save:disabled{opacity:.45;cursor:default}
.pc-badge{position:absolute;left:12px;bottom:12px;display:flex;align-items:center;gap:7px;font-size:var(--fs-xs);font-weight:700;color:#fff;background:rgba(15,11,5,.62);backdrop-filter:blur(6px);padding:6px 11px;border-radius:var(--r-sm)}
.pc-badge .dot{width:8px;height:8px;border-radius:50%;background:var(--st)}

.fld{display:flex;flex-direction:column;gap:7px}
.fld .k{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}
.fld input,.fld textarea,.fld select{padding:11px 12px;width:100%}
.fld input:focus,.fld textarea:focus,.fld select:focus{border-color:var(--line-strong);background:var(--surface)}
.loc-new{margin-top:6px}
.fld textarea{resize:vertical;min-height:64px;line-height:1.45}
#aiEnrichmentPrompt{background:var(--surface-2);color:var(--ink);-webkit-text-fill-color:currentColor;opacity:1;border:1px solid var(--line);border-radius:var(--r-sm);font-family:var(--font-ui);font-size:var(--fs-sm);min-height:calc(8 * var(--lh-body) * 1em);padding:var(--s-3);width:100%;min-width:0;box-sizing:border-box;line-height:var(--lh-body)}
#aiEnrichmentPrompt::placeholder{color:var(--muted);-webkit-text-fill-color:var(--muted);opacity:1}
#modal:has(#aiEnrichmentBody){padding:var(--s-4);justify-content:center}
#modalCard:has(#aiEnrichmentBody){width:100%;max-width:min(560px,calc(100vw - 2 * var(--s-4)));min-width:0;margin-inline:auto}
#modalCard:has(#aiEnrichmentBody) .modal-f{flex-wrap:wrap}
#modalCard:has(#aiEnrichmentBody) .modal-f .btn{min-width:0;white-space:normal}
#aiEnrichmentRegionSettings{padding:0;border:0;background:none;color:var(--accent-ink);text-decoration:underline;cursor:pointer;font:inherit}
#panel .custom-edit-section{grid-column:1/-1}
#panel .custom-edit-list{display:flex;flex-direction:column;gap:var(--s-3)}
#panel .custom-edit-empty{color:var(--muted);font-size:var(--fs-sm)}
#panel .custom-edit-section .add-detail-btn{margin-top:var(--s-2);min-height:var(--target-min)}
@media(max-width:700px){
  #panel #pcBody:has(#itemEditForm){padding-bottom:calc(var(--s-5) + env(safe-area-inset-bottom))}
  #panel #itemEditForm{padding-bottom:var(--s-3)}
}
.two{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.status-row{display:flex;flex-wrap:wrap;gap:7px}
.st{font-size:var(--fs-xs);font-weight:700;padding:8px 11px;border-radius:var(--r-sm);border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);display:flex;align-items:center;gap:7px;transition:var(--t-fast)}
.st:hover{border-color:var(--line-2)}
.st .bd{width:8px;height:8px;border-radius:50%;background:var(--st)}
.st.on{color:#fff;border-color:transparent}
.st.on .bd{background:rgba(255,255,255,.9)}
.chk{display:flex;align-items:center;gap:10px;font-size:var(--fs-sm);color:var(--ink-2);cursor:pointer;font-weight:600}
.chk input{width:18px;height:18px;accent-color:var(--accent)}

/* Focused inventory editor: disclosure is local to the edit panel only. */
#panel .pc-body:has(#itemEditForm){font-size:var(--fs-md);gap:16px}
#itemEditForm{display:flex;flex-direction:column;gap:16px}
#itemEditForm .fld{gap:8px}
#itemEditForm .fld .k{font-family:var(--font-ui);font-size:var(--fs-base);letter-spacing:0;text-transform:none;font-weight:700;color:var(--ink-2)}
#itemEditForm .fld input,#itemEditForm .fld textarea,#itemEditForm .fld select{font-size:var(--fs-md);min-height:44px}
#itemEditForm button,#itemEditForm .cp-inp,#itemEditForm .chk{min-height:44px;font-size:var(--fs-md)}
#itemEditForm .cp-chip,#itemEditForm .cp-sug{font-size:var(--fs-md)}
#itemEditForm .edit-where{padding:16px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);display:flex;flex-direction:column;gap:12px}
#itemEditForm .edit-where-title{font-size:var(--fs-base);font-weight:800;color:var(--ink)}
#itemEditForm .edit-detail[hidden],#itemEditForm .edit-hidden,#itemEditForm #returnByField[hidden]{display:none!important}
#itemEditForm .edit-detail-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:12px}
#itemEditForm .edit-detail-grid>[data-edit-key="note"],#itemEditForm .edit-detail-grid>[data-edit-key="description"]{grid-column:1/-1}
#itemEditForm .edit-detail-grid>[data-edit-key="linked"]{grid-column:1/-1;min-width:0}
#lnkSection{position:relative;min-width:0}
#lnkSection .lnk-label-row{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2)}
#lnkSection .lnk-header-actions{display:flex;align-items:center;gap:var(--s-2)}
#itemEditForm #lnkAddBtn{display:grid;place-items:center;flex:0 0 var(--ctl-md);width:var(--ctl-md);height:var(--ctl-md);padding:0;border:0;border-radius:var(--r-sm);background:transparent;color:var(--muted);font-size:var(--fs-lg);cursor:pointer}
#itemEditForm #lnkAddBtn[aria-expanded="true"]{background:var(--surface-2);color:var(--accent-ink)}
#lnkSection #lnkSearchRow{position:relative;width:100%;min-width:0}
#lnkSection #lnkSearchRow[hidden],#lnkSection .lnk-chips:empty{display:none}
#itemEditForm #lnkSuggestBtn{flex:0 0 auto;background:none;border:0;color:var(--muted);font:inherit;font-size:var(--fs-xs);cursor:pointer;padding:0}
#lnkSuggest{flex-direction:column;gap:var(--s-2);margin-bottom:var(--s-2)}
#lnkSection .lnk-chips{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--s-2);width:100%;min-width:0}
#lnkSection .lnk-chip{flex:0 1 auto;width:max-content;max-width:100%;min-width:0;box-sizing:border-box;white-space:nowrap;gap:var(--s-1);padding:var(--s-1) var(--s-2)}
#lnkSection .lnk-chip-name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#lnkSection .lnk-chip .dot{flex:0 0 var(--s-2);width:var(--s-2);height:var(--s-2);border-radius:var(--r-pill)}
#lnkSection .lnk-chip .lrm,#lnkSection .lnk-relation{flex:0 0 auto;white-space:nowrap}
#itemEditForm #lnkSection .lnk-acc-btn{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);opacity:1}
#lnkSection .lnk-relation{font-size:var(--fs-xs);color:var(--muted)}
#lnkSection .lnk-srch{display:block;align-self:stretch;width:100%;margin-top:var(--s-2)}
#lnkDrop{position:fixed;inset:auto;margin:0;box-sizing:border-box;max-width:none;overflow-y:auto;overscroll-behavior:contain;z-index:var(--z-modal);background:var(--surface);border:thin solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-lg);padding:var(--s-1)}
#lnkDrop::backdrop{background:transparent;pointer-events:none}
#lnkDrop>button{display:flex;align-items:center;gap:var(--s-2);height:var(--ctl-lg);min-height:var(--ctl-md);box-sizing:border-box;width:100%;padding:var(--s-2);font-family:var(--font-ui);font-size:var(--fs-sm);font-weight:var(--fw-regular)}
#lnkDrop>button[aria-selected="true"]{background:var(--surface-2);outline:thin solid var(--accent);outline-offset:calc(var(--s-1) / -4)}
#lnkDrop .lnk-result-thumb{display:grid;place-items:center;flex:0 0 var(--icon-xl);width:var(--icon-xl);height:var(--icon-xl);overflow:hidden;border-radius:var(--r-xs);background:var(--surface-2);color:var(--muted)}
#lnkDrop .lnk-result-thumb img{width:100%;height:100%;object-fit:cover}
#lnkDrop .lnk-result-icon{width:var(--icon-lg);height:var(--icon-lg)}
#lnkDrop .lnk-result-copy{flex:1;min-width:0;display:flex;flex-direction:column}
#lnkDrop .lnk-result-title{display:flex;align-items:center;gap:var(--s-1);min-width:0;line-height:var(--lh-snug)}
#lnkDrop .lnk-result-dot{flex:0 0 var(--s-2);width:var(--s-2);height:var(--s-2);border-radius:var(--r-pill)}
#lnkDrop .lnk-result-name,#lnkDrop .lnk-result-meta{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#lnkDrop .lnk-result-meta{color:var(--muted);font-size:var(--fs-xs);line-height:var(--lh-snug)}
#lnkDrop strong{font-weight:var(--fw-bold)}
#lnkDrop .lnk-no-results{display:flex;align-items:center;min-height:var(--ctl-md);padding:0 var(--s-2);color:var(--muted);font-size:var(--fs-xs)}
#itemEditForm :is(#f_note,#f_desc){resize:none;overflow-y:hidden;box-sizing:border-box}
#itemEditForm .fld :is(input:not([type="checkbox"]):not([type="radio"]),select){height:var(--ctl-md);min-height:var(--ctl-md);box-sizing:border-box;padding:11px 12px}
#itemEditForm .edit-detail,#itemEditForm .fld{min-width:0}
#itemEditForm .edit-add-details{padding-top:8px;border-top:1px solid var(--line)}
#itemEditForm .add-detail-btn{display:flex;align-items:center;justify-content:center;width:100%;min-height:44px;border:1px dashed var(--line-strong);border-radius:var(--r-md);background:transparent;color:var(--ink-2);padding:8px 12px;font-weight:700}
#itemEditForm .add-detail-btn:hover,#itemEditForm .add-detail-btn:focus-visible{border-color:var(--accent);color:var(--accent-ink)}
:is(#itemEditDetailSheet,#itemEditStatusSheet){position:fixed;inset:auto 0 0;width:100%;max-width:560px;max-height:75dvh;margin:0 auto;padding:16px 16px max(16px,env(safe-area-inset-bottom));box-sizing:border-box;border:1px solid var(--line);border-radius:var(--r-lg) var(--r-lg) 0 0;background:var(--surface);color:var(--ink);overflow:auto}
:is(#itemEditDetailSheet,#itemEditStatusSheet)::backdrop{background:rgba(0,0,0,.45)}
:is(#itemEditDetailSheet,#itemEditStatusSheet) .edit-detail-sheet-head{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:8px}
:is(#itemEditDetailSheet,#itemEditStatusSheet) h2{margin:0;font:700 var(--fs-lg) var(--font-ui);letter-spacing:0;text-transform:none}
:is(#itemEditDetailSheet,#itemEditStatusSheet) button{min-width:44px;min-height:44px;font:inherit;font-size:var(--fs-md);letter-spacing:0;text-transform:none;cursor:pointer;color:var(--ink);background:transparent}
:is(#itemEditDetailSheet,#itemEditStatusSheet) .edit-detail-sheet-close{border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 12px}
#itemEditDetailChoices{display:flex;flex-direction:column}
#itemEditDetailChoices button{display:flex;align-items:center;gap:var(--s-3);width:100%;height:var(--ctl-md);min-height:var(--ctl-md);flex-shrink:0;text-align:left;border:0;border-block-end:thin solid var(--line);padding:0 var(--s-2)}
#itemEditDetailSheet .edit-detail-sheet-head{position:sticky;top:0;z-index:var(--z-sticky);background:var(--surface)}
#itemEditDetailSheet .edit-detail-sheet-done{flex:0 0 auto;height:var(--ctl-md);padding:0 var(--s-4);border:thin solid var(--accent);border-radius:var(--r-sm);background:var(--accent-strong);color:var(--on-accent);font-weight:var(--fw-semi)}
#itemEditDetailSheet .edit-detail-sheet-done:hover{background:var(--accent-strong);border-color:var(--accent-strong)}
#itemEditDetailChoices .detail-choice-icon{display:inline-flex;align-items:center;justify-content:center;flex:0 0 var(--icon-md);width:var(--icon-md);height:var(--icon-md);color:var(--muted)}
#itemEditDetailChoices .detail-choice-icon{fill:none;stroke:currentColor;stroke-width:calc(var(--s-1) / 2)}
#itemEditDetailChoices [aria-pressed="true"] .detail-choice-icon{color:var(--accent-ink)}
#itemEditDetailChoices .detail-has-data{display:inline-flex;align-items:center;gap:var(--s-2);margin-inline-start:auto;white-space:nowrap;color:var(--muted);font-size:var(--fs-sm)}
#itemEditDetailChoices .detail-data-dot{width:var(--s-1);height:var(--s-1);flex:0 0 var(--s-1);border-radius:var(--r-pill);background:var(--accent)}
#itemEditDetailChoices button:disabled{color:var(--muted);cursor:not-allowed}
:is(#itemEditDetailSheet,#itemEditStatusSheet) button:hover{background:var(--surface-2)}
:is(#itemEditDetailSheet,#itemEditStatusSheet) button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
#itemEditForm #statusRow{display:block}
#itemEditForm .edit-status-trigger{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;padding:12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);color:var(--ink);text-align:left}
#itemEditForm .edit-status-chevron{margin-left:auto}
#itemEditForm .edit-status-dot{display:inline-block;width:10px;height:10px;flex:0 0 10px;border-radius:50%;background:var(--status-color)}
#itemEditStatusChoices{display:flex;flex-direction:column}
#itemEditStatusSheet .st{display:flex;align-items:center;gap:12px;width:100%;min-height:44px;padding:12px 8px;border:0;border-bottom:1px solid var(--line);border-radius:0;text-align:left}
#itemEditStatusSheet .edit-status-tick{margin-left:auto;visibility:hidden}
#itemEditStatusSheet .st.on .edit-status-tick{visibility:visible}
#itemEditForm input[type="date"]{min-width:0;width:100%;max-width:100%;box-sizing:border-box}
#panel .pc-body:has(#itemEditForm) .photo-slot,#panel .pc-body:has(#itemEditForm) .photo-strip,#panel .pc-body:has(#itemEditForm) .item-media-choice{font-size:var(--fs-md)}
#panel .pc-body:has(#itemEditForm) .photo-slot button,#panel .pc-body:has(#itemEditForm) .photo-strip button,#panel .pc-body:has(#itemEditForm) .item-media-choice button,#panel:has(#itemEditForm) .item-edit-foot .btn{min-width:44px;min-height:44px;font-size:var(--fs-md)}

.read-rows{display:flex;flex-direction:column;gap:13px}
.read-description{margin-block-start:var(--s-2)}
.read-description-text{font-family:var(--font-ui);font-size:var(--fs-sm);line-height:var(--lh-body);color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;overflow:hidden}
.read-description-text.is-expanded{display:block;-webkit-line-clamp:unset}
.read-description-more{display:block;min-height:var(--target-min);min-width:var(--target-min);padding:var(--s-0);border:none;background:transparent;color:var(--accent-ink);font-family:var(--font-ui);font-size:var(--fs-sm);text-align:start;text-decoration:underline;cursor:pointer}
.read-description-more[hidden]{display:none}
.read-description-more:focus-visible{outline:var(--s-1) solid var(--accent-ink);outline-offset:var(--s-1)}
.rrow{display:flex;gap:13px;font-size:var(--fs-control);align-items:flex-start}
.rrow .rk{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);flex:0 0 76px;padding-top:3px;font-weight:var(--fw-semi)}
.rrow .rv{flex:1;line-height:1.45;min-width:0;overflow-wrap:anywhere;word-break:break-word}
.rchips{display:flex;flex-wrap:wrap;gap:6px}
.rchip{font-family:var(--font-ui);font-size:var(--fs-xs);background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);border-radius:var(--r-xs);padding:4px 8px}
.sticker-attach{display:flex;flex-direction:column;align-items:flex-start;gap:7px}
.sticker-attach-label{font-size:var(--fs-xs);font-weight:600;color:var(--ink-2)}
.sticker-actions{display:flex;flex-wrap:wrap;gap:7px}
.sticker-action,.sticker-code button{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-2);padding:7px 9px;font:600 var(--fs-micro) var(--font-display);line-height:1;white-space:nowrap}
.sticker-action:hover,.sticker-code button:hover{border-color:var(--line-2);color:var(--ink)}
.sticker-action.primary{border-color:var(--accent);background:var(--accent-strong);color:var(--on-accent)}
.sticker-action:disabled{cursor:wait;opacity:.65}
.sticker-code{display:inline-flex;align-items:center;gap:7px;flex-wrap:wrap;padding:6px 8px}
.sticker-groups{display:flex;flex-direction:column;gap:9px}
.sticker-group-label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--faint);font-weight:var(--fw-semi)}
.sticker-code.external{border-color:color-mix(in oklab,var(--accent),transparent 62%);background:color-mix(in oklab,var(--accent),transparent 94%)}
.rnote{color:var(--danger-ink)}
.read-title{font-family:var(--font-display);font-weight:800;font-size:var(--fs-xl);line-height:1.15;letter-spacing:-.015em;overflow-wrap:anywhere;word-break:break-word;max-width:100%}
.read-sub{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);margin-top:6px;letter-spacing:.03em;overflow-wrap:anywhere;word-break:break-word;max-width:100%}

.btn{flex:1;border:1px solid transparent;border-radius:var(--r-md);padding:var(--s-3) var(--s-4);font-family:var(--font-ui);font-weight:var(--fw-bold);font-size:var(--fs-control);min-height:var(--target-min);transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),filter var(--t-fast)}
.btn:where(:not(.primary):not(.ghost)){background:var(--surface-3);color:var(--ink);border-color:var(--line-2)}
.btn:where(:not(.primary):not(.ghost)):hover{border-color:var(--line-strong)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn.primary{background:var(--accent-strong);color:var(--on-accent)}
.btn.primary:hover{filter:brightness(1.05)}
.btn.ghost{background:var(--surface-2);color:var(--ink-2);border-color:var(--line);flex:0 0 auto}
.btn.ghost:hover{color:var(--ink);border-color:var(--line-2)}
/* Selected chips must outrank the generic ghost button and its hover state. */
.btn.ghost.on,.btn.ghost[aria-pressed="true"]{background:var(--accent-strong);color:var(--on-accent);border-color:var(--accent)}
.danger{background:transparent;border:none;color:var(--danger-ink);font-family:var(--font-ui);font-size:var(--fs-base);font-weight:600;letter-spacing:0;align-self:flex-start;padding:10px 0;cursor:pointer}

/* toast */
.toast{position:fixed;left:50%;bottom:calc(70px + var(--space-16) + env(safe-area-inset-bottom));transform:translateX(-50%) translateY(16px);z-index:var(--z-toast,100);background:var(--ink);color:var(--bg);border-radius:var(--r-md);padding:13px 18px;font-size:var(--fs-control);font-weight:600;opacity:0;pointer-events:none;transition:opacity var(--t-slow),transform var(--t-slow);box-shadow:var(--shadow-lg);display:flex;align-items:center;gap:10px;max-width:90vw}
.toast-undo-btn{margin-left:6px;padding:4px 11px;border-radius:var(--r-xs);border:none;background:rgba(255,255,255,.22);color:inherit;font:inherit;font-size:var(--fs-xs);font-weight:700;letter-spacing:.04em;cursor:pointer;flex-shrink:0}
.toast-undo-btn:hover{background:rgba(255,255,255,.34)}
#toast.toast-undo{z-index:2147483647;pointer-events:auto}
#toast:not(.show){display:none}
.toast.show{opacity:1;transform:translateX(-50%) translateY(0)}
body:has(#modal.show .man-modal) #toast{z-index:calc(var(--z-modal) + 21);top:var(--space-16,16px);bottom:auto}
[data-field-saved-links] a{color:var(--ink);text-decoration:underline;overflow-wrap:anywhere}
.toast.toast-err{background:var(--surface-2);color:var(--ink);border:1.5px solid rgba(224,64,64,.35)}
.toast.toast-err .ic{color:var(--danger-ink)}
.toast .ic{width:18px;height:18px;flex:0 0 auto;color:var(--accent-ink)}

/* beta notice — themed, clears the dock, yields to selection and overlays */
#betaNotice{position:fixed;bottom:calc(var(--dock-clear,0px) + var(--s-4));right:var(--s-4);z-index:75;width:min(340px,calc(100vw - 2 * var(--s-4)));box-sizing:border-box;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-lg);padding:var(--s-4);display:none;flex-direction:column;gap:var(--s-3);animation:betaSlideUp var(--t-slow) var(--ease) both}
#betaNotice.show{display:flex}
body:has(.sel-bar) #betaNotice,body:has(.mscrim.show) #betaNotice,body:has(#toast.show) #betaNotice,body:has(.add-menu-overlay) #betaNotice,body:has(dialog.ask-text[open]) #betaNotice{display:none}
@keyframes betaSlideUp{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:translateY(0)}}
#betaNotice p{font-size:var(--fs-control);line-height:1.55;color:var(--ink-2);margin:0}
#betaNotice p strong{color:var(--ink);font-weight:var(--fw-bold)}
.bn-btns{display:flex;gap:var(--s-2);flex-wrap:wrap}
.bn-btns button{flex:1;min-width:0;min-height:var(--target-min);padding:0 var(--s-3);border-radius:var(--r-md);font-family:var(--font-ui);font-size:var(--fs-control);font-weight:var(--fw-bold);cursor:pointer;border:1px solid transparent;transition:opacity var(--t-base)}
#bnFeedback{background:var(--accent-strong);color:var(--on-accent)}
#bnFeedback:hover{opacity:.88}
#bnGotIt{background:var(--surface-2);color:var(--ink);border-color:var(--line)}
#bnGotIt:hover{border-color:var(--line-strong)}

/* tweaks root reset */


@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}
@media(max-width:760px){
  .topbar{flex-wrap:wrap;height:auto;padding:10px 14px;gap:10px}
  .search{order:3;flex-basis:100%;max-width:none}
  .views .vlabel{display:none}
  .panel{width:100%;max-width:100vw;overflow-x:hidden}
  .pc-body{overflow-x:hidden}
  .pc-foot{overflow-x:hidden;max-width:100vw}
}

/* --------------------- BDM feature pack styles --------------------- */
.ai-btn{align-self:flex-start;background:var(--surface-2);border:1px solid var(--line-2);color:var(--accent-ink);
  border-radius:var(--r-sm);padding:8px 12px;font-size:var(--fs-sm);font-weight:600;font-family:var(--font-ui);
  letter-spacing:.02em;display:inline-flex;align-items:center;gap:6px;margin-top:-4px}
.ai-btn:hover{border-color:var(--line-strong);background:var(--surface)}
.ai-btn:disabled{opacity:.6;cursor:default}
.ai-snap-bar{background:var(--surface-2);border:1.5px dashed var(--line-2);border-radius:var(--r-md);padding:20px 16px;display:flex;flex-direction:column;align-items:center;gap:10px;margin-bottom:8px;text-align:center}
.ai-snap-btn{cursor:pointer;display:inline-flex;align-items:center;gap:8px}
.ai-snap-btn:disabled{opacity:.6;cursor:default}
.ai-enrich-btn{display:flex;align-items:center;gap:7px;width:100%;padding:9px 14px;margin-bottom:10px;background:color-mix(in srgb,var(--accent) 12%,var(--surface-2));border:1px dashed color-mix(in srgb,var(--accent) 45%,var(--line));border-radius:var(--r-md);color:var(--accent-ink);font-family:var(--font-ui);font-size:var(--fs-base);font-weight:700;letter-spacing:0;min-height:44px;cursor:pointer;transition:background var(--t-base),border-color var(--t-base)}
.ai-enrich-btn:hover{background:color-mix(in srgb,var(--accent) 20%,var(--surface-2));border-color:var(--accent)}
.ai-enrich-btn:disabled{opacity:.55;cursor:default}
.ai-snap-hint{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em;text-transform:uppercase;font-weight:var(--fw-semi)}
.ai-snap-thinking{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em;text-align:center;padding:14px 0}
/* ---- serial capture ---- */
.serial-val{display:flex;align-items:center;gap:8px;min-width:0}
.serial-num{font-family:var(--font-mono);font-size:var(--fs-control);font-weight:700;letter-spacing:.07em;color:var(--ink);flex:1;word-break:break-all}
.serial-proof{width:38px;height:38px;border-radius:var(--r-xs);object-fit:cover;cursor:pointer;border:1px solid var(--line);flex-shrink:0}
.serial-rescan{background:none;border:1px solid var(--line);border-radius:var(--r-sm);color:var(--muted);padding:4px 8px;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;cursor:pointer;transition:var(--t-fast);text-transform:uppercase;flex-shrink:0}
.serial-rescan:hover{border-color:var(--accent);color:var(--accent-ink)}
.serial-snap-btn{display:inline-flex;align-items:center;gap:7px;padding:7px 13px;border-radius:var(--r-sm);border:1.5px dashed var(--line-2);background:none;color:var(--muted);font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.07em;cursor:pointer;transition:var(--t-base);text-transform:uppercase;font-weight:700}
.serial-snap-btn:hover{border-color:var(--accent);color:var(--accent-ink)}
.serial-snap-btn svg{width:14px;height:14px;flex-shrink:0}
.serial-confirm{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:16px;margin-top:4px}
.serial-confirm-photo{width:100%;max-height:160px;object-fit:contain;border-radius:var(--r-sm);background:var(--surface-1);display:block;margin-bottom:12px}
.serial-confirm-label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.02em;text-transform:uppercase;color:var(--muted);margin-bottom:6px}
.serial-confirm-input{font-size:var(--fs-lg);font-weight:700;letter-spacing:.1em;padding:10px 14px;width:100%;text-align:center;box-sizing:border-box}
.serial-confirm-input:focus{border-color:var(--accent)}
.serial-unclear{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--warn-ink);margin-top:6px;letter-spacing:.03em}
.serial-confirm-foot{display:flex;gap:8px;margin-top:12px}
.ai-extras-chips{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.ai-extras-chip{background:var(--surface);border:1.5px solid var(--line-2);border-radius:var(--r-sm);padding:7px 13px;font-family:var(--font-ui);font-size:var(--fs-xs);cursor:pointer;color:var(--ink);transition:var(--t-fast)}
.ai-extras-chip:hover:not(:disabled){border-color:var(--accent);color:var(--accent-ink)}
.ai-extras-chip:disabled{opacity:.5;cursor:default}
.ai-extras-done{background:none;border:none;font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);cursor:pointer;letter-spacing:.06em;text-transform:uppercase;padding:4px 0;font-weight:var(--fw-semi)}
.ai-extras-done:hover{color:var(--ink)}
.ai-multi-hint{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--ink-2);letter-spacing:.05em;text-align:center;padding:6px 0 2px;border-top:1px solid var(--line);margin-top:4px;width:100%}
.ai-multi-hint.ai-multi-active{color:var(--accent-ink)}
.ai-multi-lnk{background:none;border:none;font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--accent-ink);cursor:pointer;text-decoration:underline;text-underline-offset:2px;padding:0;letter-spacing:.05em}
.ai-multi-lnk:hover{opacity:.7}
#bulkOverlay{position:fixed;inset:0;z-index:200;background:var(--bg);display:flex;flex-direction:column;overflow:hidden}
.bulk-head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);flex-shrink:0}
.bulk-title{font-size:var(--fs-md);font-weight:800;font-family:var(--font-display);letter-spacing:-.01em}
.bulk-progress{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em;margin-top:3px}
.bulk-bar{display:flex;align-items:center;gap:10px;padding:10px 18px;border-bottom:1px solid var(--line);background:var(--surface);flex-shrink:0}
.bulk-bar-label{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;white-space:nowrap;font-weight:var(--fw-semi)}
.bulk-loc-sel{flex:1;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:7px 10px;color:var(--ink);font-family:inherit}
.bulk-cards{flex:1;overflow-y:auto;padding:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px;align-content:start}
.bulk-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);overflow:hidden;display:flex;flex-direction:column;transition:opacity var(--t-base),filter var(--t-base)}
.bulk-card.bk-gone{opacity:.3;filter:grayscale(.8)}
.bulk-card-ph{aspect-ratio:4/3;background:var(--surface-2);background-size:cover;background-position:center;position:relative;flex-shrink:0}
.bulk-card-ov{position:absolute;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:center;justify-content:center}
.bulk-card-ov-txt{font-family:var(--font-ui);font-size:var(--fs-xs);color:rgba(255,255,255,.8);letter-spacing:.08em}
.bulk-card-body{padding:10px;display:flex;flex-direction:column;gap:6px;flex:1}
.bk-fld{padding:6px 9px;width:100%;box-sizing:border-box;min-width:0}
.bk-fld:focus{border-color:var(--accent)}
.bk-row{display:flex;gap:6px}
.bk-err{color:#e05555;font-size:var(--fs-xs);font-family:var(--font-ui);letter-spacing:.03em;margin-bottom:2px;overflow-wrap:anywhere}
body:has(#bulkOverlay) #tourOverlay{display:none!important}
.bulk-card-foot{padding:8px 10px;border-top:1px solid var(--line)}
.bk-disc-btn{width:100%;background:none;border:1px solid var(--line);border-radius:var(--r-sm);padding:6px;font-size:var(--fs-xs);color:var(--muted);cursor:pointer;font-family:var(--font-ui);letter-spacing:.04em}
.bk-disc-btn:hover{border-color:var(--line-strong);color:var(--ink)}
.bulk-foot{display:flex;align-items:center;gap:10px;padding:12px 18px;border-top:1px solid var(--line);background:var(--surface);flex-shrink:0}
.bulk-abandon{background:none;border:none;color:var(--muted);font-size:var(--fs-sm);cursor:pointer;padding:6px 10px;font-family:inherit}
.bulk-abandon:hover{color:var(--ink)}
.bulk-save{flex:1;cursor:pointer}
.bulk-save:disabled{opacity:.5;cursor:default}
#captureOverlay{position:fixed;inset:0;z-index:210;background:#000;display:none;flex-direction:column;overflow:hidden}
#captureOverlay.open{display:flex}
.phone-handoff-choice{box-sizing:border-box;min-height:100%;width:min(100%,560px);margin:auto;padding:40px 22px;display:flex;flex-direction:column;justify-content:center;gap:16px;color:#fff;text-align:center}
.phone-handoff-choice h1{font-family:var(--font-display);font-size:clamp(28px,8vw,42px);line-height:1.1;margin:0 0 22px}
.phone-handoff-choice button{min-height:72px;border:1px solid rgba(255,255,255,.35);border-radius:14px;background:#fff;color:#111;font-family:inherit;font-size:18px;font-weight:700;line-height:1.2;padding:18px;cursor:pointer}
body:has(#captureOverlay .phone-handoff-choice):has(#modal #primerCamera) #mscrim{z-index:211}
body:has(#captureOverlay .phone-handoff-choice) #modal:has(#primerCamera){z-index:212}
.phone-handoff-controls{position:absolute;z-index:4;left:20px;right:20px;bottom:98px;display:flex;align-items:center;justify-content:center;gap:14px;color:#fff}
.phone-handoff-controls>div{font-size:14px;font-weight:700}
.phone-handoff-controls button{border:0;background:none;color:#fff;text-decoration:underline;font:inherit;cursor:pointer;padding:8px}
.phone-handoff-controls button:disabled{opacity:.45;cursor:default}
.cap-head{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;background:rgba(0,0,0,.75);position:absolute;top:0;left:0;right:0;z-index:2}
.cap-counter{font-family:var(--font-mono);font-size:var(--fs-xs);color:rgba(255,255,255,.7);letter-spacing:.06em}
.cap-done{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.3);color:#fff;border-radius:var(--r-sm);padding:8px 16px;font-family:var(--font-ui);font-size:var(--fs-xs);cursor:pointer;letter-spacing:.06em}
.cap-done:hover{background:rgba(255,255,255,.25)}
.cap-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;background:#000}
.cap-foot{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:16px 20px;background:rgba(0,0,0,.75);position:absolute;bottom:0;left:0;right:0;z-index:2}
.cap-strip{flex:1;display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;align-items:center}
.cap-strip::-webkit-scrollbar{display:none}
.cap-thumb{width:56px;height:56px;border-radius:var(--r-sm);object-fit:cover;flex-shrink:0;border:2px solid rgba(255,255,255,.25)}
.cap-shutter{width:68px;height:68px;border-radius:50%;background:#fff;border:5px solid rgba(255,255,255,.35);flex-shrink:0;cursor:pointer;box-shadow:0 0 0 3px #000;transition:transform var(--t-fast)}
.cap-shutter:active{transform:scale(.9)}
.cap-shutter:disabled{opacity:.45;cursor:default}
@media (orientation:landscape) and (max-height:520px){
  .cap-head{padding:6px 14px}
  .cap-done{padding:5px 11px;font-size:var(--fs-micro)}
  .cap-counter{font-size:var(--fs-micro)}
  .cap-foot{flex-direction:column;width:72px;top:0;bottom:0;left:auto;right:0;padding:10px 8px;justify-content:center;border-top:none;border-left:1px solid rgba(255,255,255,.12);gap:8px}
  .cap-strip{flex-direction:column;overflow-y:auto;overflow-x:hidden;align-items:center;flex:1;width:auto}
  .cap-thumb{width:44px;height:44px}
  .cap-shutter{width:52px;height:52px;border-width:4px}
  .cap-video{object-fit:contain}
  .cap-into-bar{top:36px;right:80px}
}
.cap-summary{flex:1;overflow-y:auto;padding:16px;display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:10px;align-content:start}
.cap-card{background:rgba(255,255,255,.09);border-radius:var(--r-md);overflow:hidden}
.cap-card-ph{width:100%;aspect-ratio:1;object-fit:cover;display:block;background:rgba(255,255,255,.05)}
.cap-card-name{padding:8px;font-size:var(--fs-xs);color:#fff;font-family:var(--font-display);font-weight:600;line-height:1.3;word-break:break-word}
.cap-sum-foot{display:flex;gap:10px;padding:14px 18px;background:rgba(0,0,0,.8);border-top:1px solid rgba(255,255,255,.1);flex-shrink:0;align-items:center}
.cap-sum-more{flex:1;display:flex;align-items:center;gap:7px;cursor:pointer;justify-content:center}
.cap-sum-review{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.2);color:#fff;border-radius:var(--r-sm);padding:12px 16px;font-family:var(--font-ui);font-size:var(--fs-xs);cursor:pointer;letter-spacing:.06em;white-space:nowrap}
.cap-sum-done{background:none;border:none;color:rgba(255,255,255,.5);font-size:var(--fs-sm);cursor:pointer;padding:10px 6px;font-family:inherit;white-space:nowrap}
.cap-sum-done:hover{color:#fff}
.cap-rv-bar{display:flex;align-items:center;gap:8px;padding:8px 14px;background:rgba(0,0,0,.6);border-bottom:1px solid rgba(255,255,255,.1);flex-shrink:0}
.cap-rv-selall{background:none;border:1px solid rgba(255,255,255,.25);color:rgba(255,255,255,.8);border-radius:var(--r-sm);padding:6px 12px;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;cursor:pointer}
.cap-rv-del{margin-left:auto;background:#b33;border:none;color:#fff;border-radius:var(--r-sm);padding:6px 14px;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;cursor:pointer;font-weight:700}
.cap-rv-del:hover{background:#d44}
.cap-rv-card{position:relative;cursor:pointer;transition:outline var(--t-fast)}
.cap-rv-card:active{opacity:.8}
.cap-rv-sel{outline:2px solid var(--accent);outline-offset:1px}
.cap-rv-chk{position:absolute;top:6px;right:6px;width:20px;height:20px;border-radius:50%;border:2px solid rgba(255,255,255,.5);background:rgba(0,0,0,.4);display:flex;align-items:center;justify-content:center;font-size:var(--fs-micro);color:#fff;pointer-events:none}
.cap-rv-sel .cap-rv-chk{background:var(--accent-strong);border-color:var(--accent)}
.cap-guest-save{cursor:pointer;white-space:nowrap}
.cap-guest-save:hover{background:var(--accent)}
.cap-guest-count{font-family:var(--font-mono);font-size:var(--fs-nano);letter-spacing:.04em;color:var(--accent-ink);white-space:nowrap}
.cap-desk-content{flex:1;display:grid;grid-template-columns:minmax(220px,30%) minmax(0,1fr);grid-template-rows:minmax(0,1fr) auto;overflow:hidden;padding-top:58px}
.cap-handoff{display:flex;align-items:center;gap:14px;padding:12px 22px;background:#18130e;border-bottom:1px solid rgba(255,255,255,.11);color:#fff}.cap-handoff-title{font-family:var(--font-display);font-weight:800}.cap-handoff-copy{font-size:12px;color:rgba(255,255,255,.55)}.cap-desk-qr{width:54px;height:54px;background:#fff;padding:3px;border-radius:4px}.cap-desk-qr img{display:block;width:100%!important;height:100%!important}.cap-webcam{margin-left:auto;border:0;background:none;color:#d9b784;text-decoration:underline;cursor:pointer;font:inherit;font-size:12px}
.cap-desk-grid{display:none;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;padding:16px;overflow-y:auto}
.cap-desk-grid.active{display:grid;flex:1}
.cap-desk-content .cap-handoff{grid-column:1;grid-row:1 / 3;flex-direction:column;justify-content:center;text-align:center;border-right:1px solid rgba(255,255,255,.11);overflow:auto}
.cap-desk-content .cap-desk-qr{width:148px;height:auto;min-height:148px;padding:8px;color:#18130e}
.cap-desk-content .cap-webcam{margin:12px 0 0}
.cap-desk-drop-area{grid-column:2;grid-row:1 / 3;position:relative;display:flex;flex-direction:column;min-width:0;min-height:0;flex:1}
.cap-desk-drop-area .cap-desk-grid{align-content:start;min-height:0}
.cap-desk-drop-area .cap-desk-zone:not(.compact){flex:1}
.cap-desk-drop-hint{flex:none;text-align:center;color:rgba(255,255,255,.4);font-size:12px;margin:0;padding:8px 16px 14px}
.cap-desk-drop-hint[hidden]{display:none}
.cap-desk-drop-overlay{display:none;position:absolute;inset:8px;z-index:5;pointer-events:none;align-items:center;justify-content:center;padding:24px;border:2px dashed #e87b35;border-radius:12px;background:rgba(0,0,0,.7);color:#fff;text-align:center;font-size:20px;font-weight:700}
.cap-desk-drop-area.dragover .cap-desk-drop-overlay{display:flex}
@media(max-width:600px){.cap-desk-drop-area{grid-column:1;grid-row:auto;min-height:320px}}
@media(max-width:600px){.cap-desk-content{grid-template-columns:1fr;overflow:auto}.cap-desk-content .cap-handoff{grid-column:1;grid-row:auto}.cap-desk-content .cap-desk-grid,.cap-desk-content .cap-desk-zone,.cap-desk-content .cap-desk-zone.compact{grid-column:1;grid-row:auto}}
.cap-desk-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;text-align:center;cursor:pointer;border:2px dashed rgba(255,255,255,.13);border-radius:var(--r-md);margin:24px;padding:44px 24px;transition:border-color var(--t-base),background var(--t-base)}
.cap-desk-zone.compact{flex-direction:row;padding:12px 20px;margin:0;border-radius:0;border:none;border-top:1px solid rgba(255,255,255,.1);cursor:default;justify-content:center}
.cap-desk-zone:not(.compact):hover,.cap-desk-zone.dragover{border-color:var(--accent);background:rgba(207,90,38,.08)}
.cap-desk-zone-icon{font-size:var(--fs-2xl);color:rgba(255,255,255,.3);line-height:1;pointer-events:none}
.cap-desk-zone-head{font-weight:700;color:#fff;font-size:var(--fs-base);font-family:var(--font-display);pointer-events:none}
.cap-desk-zone-sub{font-size:var(--fs-sm);color:rgba(255,255,255,.45);pointer-events:none}
.cap-desk-choose{cursor:pointer;margin-top:4px}
.cap-desk-more{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);color:#fff;border-radius:var(--r-sm);padding:9px 18px;font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:700;letter-spacing:.05em;cursor:pointer}
.cap-desk-more:hover{background:rgba(255,255,255,.2)}
/* guest save bar */
#guestSaveBar{display:none;position:fixed;top:0;left:0;right:0;z-index:195;background:#1a130c;border-bottom:1px solid #332a1c;padding:7px 16px;align-items:center;gap:12px}
#guestSaveBar.on{display:flex}
.gsb-msg{font-size:var(--fs-sm);font-weight:600;color:#c3b69d;flex:1;font-family:var(--font-ui)}
.gsb-btn{cursor:pointer;white-space:nowrap;flex-shrink:0}
.gsb-btn:hover{background:var(--accent)}
/* guest orientation hint */
#guestHint{display:none;align-items:center;gap:8px;padding:8px 20px;font-size:var(--fs-sm);color:var(--muted);background:var(--surface-2);border-bottom:1px solid var(--line);flex-shrink:0}
#guestHint.on{display:flex}
#guestHintX{background:none;border:none;color:var(--faint);font-size:var(--fs-base);cursor:pointer;padding:0 2px;line-height:1;margin-left:auto;flex-shrink:0}
#guestHintX:hover{color:var(--muted)}
/* guest chrome stripping */
body[data-guest-mode] .topbar{margin-top:36px}
body.ar-page-open #spacebar,
body.ar-page-open #filters,
body.ar-page-open #mLayoutBtn,
body.ar-page-open #mVFBtn,
body[data-guest-mode] #spacebar,
body[data-guest-mode] #wizardBtn,
body[data-guest-mode] #mWhereBtn,
body[data-guest-mode] #mLayoutBtn,
body[data-guest-mode] #ovBtn,
body[data-guest-mode] #wallctl,
body[data-guest-mode] #themeBtn,
body[data-guest-mode] #authChip,
body[data-guest-mode] #views button:not([data-view="wall"]),
body[data-guest-mode] #dock{display:none!important}
body[data-crew] #viewDropBtn,
body[data-crew] #wizardBtn,
body[data-crew] #mLayoutBtn,
body[data-crew] #mWhereBtn,
body[data-crew] #mVFBtn,
body[data-crew] #importNavBtn,
body[data-crew] #addBtn,
body[data-crew] #tipsBtn,
body[data-crew] .subbar,
body[data-crew] #mobFab{display:none!important}
/* Match !isFieldNav(): crew keep the Field dock on phones and touch iPads. */
@media(min-width:701px) and (pointer:fine),(min-width:701px) and (pointer:none),(min-width:1367px){
  body[data-crew] #dock{display:none!important}
}
body[data-crew] .stage{padding-top:8px}
/* Desktop search opens exact labels; keep Quick and item sticker actions intact.
   The sidebar owns this class using !isFieldNav(), including touch laptops. */
body.has-desk-nav .topbar #qrScanNavBtn{display:none!important}
.cap-crumb{display:flex;align-items:center;gap:5px;flex:1;min-width:0;overflow:hidden}
.cap-crumb-seg{font-family:var(--font-ui);font-size:var(--fs-xs);color:rgba(255,255,255,.5);letter-spacing:.05em;cursor:pointer;white-space:nowrap;background:none;border:none;padding:0}
.cap-crumb-seg:last-child{color:rgba(255,255,255,.9)}
.cap-crumb-sep{color:rgba(255,255,255,.3);font-size:var(--fs-micro);flex-shrink:0}
.cap-into-bar{padding:5px 18px 7px;background:rgba(0,0,0,.65);position:absolute;top:53px;left:0;right:0;z-index:2;display:flex;align-items:center;gap:8px}
.cap-into-btn{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.2);color:rgba(255,255,255,.8);border-radius:var(--r-sm);padding:5px 12px;font-family:var(--font-ui);font-size:var(--fs-xs);cursor:pointer;letter-spacing:.05em;flex-shrink:0}
.cap-into-hint{font-family:var(--font-ui);font-size:var(--fs-xs);color:rgba(255,255,255,.45);letter-spacing:.04em;flex:1}
.cap-case-pick{flex:1;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.2);border-radius:var(--r-sm);padding:5px 10px;color:#fff;font-family:inherit}
.cap-alts{padding:0 8px 8px;display:flex;flex-wrap:wrap;gap:4px}
.cap-alt-chip{background:rgba(255,255,255,.1);border:1px solid rgba(255,255,255,.15);color:rgba(255,255,255,.6);border-radius:var(--r-xs);padding:3px 7px;font-size:var(--fs-micro);cursor:pointer;font-family:inherit;white-space:nowrap}
.cap-alt-chip:hover{background:rgba(255,255,255,.2);color:#fff}
.idx-scan-row{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px}
.idx-index-btn{display:inline-flex;align-items:center;gap:6px;background:rgba(207,90,38,.12);border:1px solid rgba(207,90,38,.28);color:var(--accent-ink);border-radius:var(--r-sm);padding:6px 13px;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.05em;cursor:pointer}
.idx-index-btn:hover{background:rgba(207,90,38,.22)}
.idx-index-btn.doc-scan{background:rgba(80,110,200,.1);border-color:rgba(80,110,200,.28);color:#7090e8}
.idx-index-btn.doc-scan:hover{background:rgba(80,110,200,.2)}
.card-ocr-snip{font-size:var(--fs-nano);color:var(--muted);line-height:1.35;overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;padding-top:2px;font-style:italic;opacity:.8}
.idx-doc-ocrpre{font-size:var(--fs-micro);color:var(--muted);font-family:var(--font-mono);line-height:1.4;max-height:58px;overflow:hidden;margin-top:4px;display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;word-break:break-word}
@keyframes newGlow{0%{box-shadow:0 0 0 0 rgba(207,90,38,.65)}60%{box-shadow:0 0 0 7px rgba(207,90,38,0)}100%{box-shadow:0 0 0 0 rgba(207,90,38,0)}}
.ph-cell.new-glow{animation:newGlow var(--t-slow) ease-out var(--t-fast) 3;outline:2px solid rgba(207,90,38,.55);outline-offset:-2px;z-index:1}
.card.new-glow{outline:2px solid rgba(207,90,38,.55);outline-offset:-2px;animation:newGlow var(--t-slow) ease-out var(--t-fast) 3}
.rename-sug-modal{padding:20px 20px 16px;display:flex;flex-direction:column;gap:14px;min-width:280px}
.rename-sug-head{display:flex;align-items:center;gap:9px}
.rename-sug-head h2{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);margin:0;flex:1}
.rename-sug-body{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:14px 14px 12px;display:flex;flex-direction:column;gap:7px}
.rename-sug-curr{font-size:var(--fs-micro);color:var(--muted);font-family:var(--font-mono);letter-spacing:.03em}
.rename-sug-curr span{color:var(--ink);font-weight:600}
.rename-sug-arrow{font-size:var(--fs-sm);color:var(--accent-ink);line-height:1}
.rename-sug-new{font-size:var(--fs-base);font-weight:700;color:var(--ink);font-family:var(--font-display);line-height:1.25}
.rename-sug-conf{font-size:var(--fs-xs);color:var(--muted);font-family:var(--font-ui);padding-top:2px}
.rename-sug-foot{display:flex;gap:8px}
.rename-sug-yes{flex:1;cursor:pointer}
.rename-sug-no{flex:1;cursor:pointer}
.man-link-row{display:flex;align-items:flex-start;gap:8px;padding:9px 0;border-bottom:1px solid rgba(51,42,28,.6)}
.man-link-row:last-of-type{border-bottom:none}
.man-link-icon{width:26px;height:26px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--line);display:flex;align-items:center;justify-content:center;flex-shrink:0;margin-top:1px;color:var(--muted)}
.man-link-body{flex:1;min-width:0}
.man-link-title{font-size:var(--fs-sm);font-weight:600;color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;line-height:1.3;text-decoration:none;display:block}
.man-link-title:hover{color:var(--accent-ink)}
.man-link-meta{font-size:var(--fs-micro);color:var(--muted);font-family:var(--font-mono);margin-top:2px;letter-spacing:.02em;display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.man-link-type{font-size:var(--fs-xs);font-family:var(--font-ui);letter-spacing:.07em;text-transform:uppercase;padding:2px 5px;border-radius:var(--r-xs);font-weight:var(--fw-semi)}
.man-type-manual{background:rgba(100,170,100,.15);color:#7bc87b}
.man-type-specs{background:rgba(100,140,200,.15);color:#7aaae0}
.man-type-support{background:rgba(200,170,100,.15);color:#c8aa64}
.man-type-product_page{background:rgba(160,100,200,.15);color:#c07ae0}
.man-type-search{background:rgba(150,150,150,.12);color:#888}
.man-link-rm{background:none;border:none;color:var(--muted);cursor:pointer;padding:2px 5px;font-size:var(--fs-control);flex-shrink:0;border-radius:var(--r-xs);line-height:1;margin-top:1px;opacity:.6}
.man-link-rm:hover{background:rgba(255,255,255,.06);color:var(--ink);opacity:1}
.man-find-btn{display:inline-flex;align-items:center;gap:7px;background:none;border:1px solid var(--line);border-radius:var(--r-sm);color:var(--muted);font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.05em;padding:7px 12px;cursor:pointer;margin-top:4px}
.man-find-btn:hover{background:var(--surface-2);color:var(--ink);border-color:var(--line-2)}
.man-again-btn{background:none;border:none;color:var(--accent-ink);font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.05em;cursor:pointer;padding:5px 0 0;display:inline-block;opacity:.85}
.man-again-btn:hover{opacity:1}
.man-modal{padding:20px 20px max(24px,env(safe-area-inset-bottom));display:flex;flex-direction:column;gap:14px;min-width:0;background:var(--bg);max-height:calc(100dvh - 48px);overflow-y:auto;box-sizing:border-box}
.man-modal>*{flex-shrink:0}
.man-modal-head{display:flex;align-items:center;gap:9px}
.man-modal-head h2{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);margin:0;flex:1}
.man-results{display:flex;flex-direction:column;gap:6px;max-height:360px;overflow-y:auto}
.man-res-card{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border-radius:var(--r-md);border:1px solid var(--line);background:var(--surface-2);transition:border-color var(--t-fast),background var(--t-fast)}
.man-res-card.picked{border-color:var(--accent);background:rgba(207,90,38,.09)}
.man-res-check{position:relative;box-sizing:border-box;width:22px;height:22px;min-width:22px;min-height:22px;border-radius:var(--r-xs);border:1px solid var(--line);flex-shrink:0;margin:11px;display:flex;align-items:center;justify-content:center;background:var(--surface);cursor:pointer;padding:0;transition:var(--t-fast)}
@media(pointer:coarse){
.os-tree-home,.os-tree-toggle,.os-tree-name,.kit-qty-value,.kit-grid-more button,.kit-detail-sidebar-link,.organise-group-head>button,.organise-suggestion button,.organise-chips button,.organise-breadcrumb button{position:relative}
:is(.os-tree-home,.os-tree-toggle,.os-tree-name,.kit-qty-value,.kit-grid-more button,.kit-detail-sidebar-link,.organise-group-head>button,.organise-suggestion button,.organise-chips button,.organise-breadcrumb button)::before{--shelf-touch-target-rule:1;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;pointer-events:auto}
  body:not(.shelf-phone-table) .grid-workspace .grid-name[role="button"]{overflow:visible}
  body:not(.shelf-phone-table) .grid-workspace .grid-name[role="button"]::before{--shelf-touch-target-rule:1;content:"";position:absolute;left:0;right:0;top:50%;height:44px;transform:translateY(-50%);pointer-events:auto}
  .photo-slot button.ph-cam-hint::before{--shelf-touch-target-rule:1;content:"";position:absolute;width:44px;height:44px;left:50%;top:50%;transform:translate(-50%,-50%);pointer-events:auto}
  .man-res-check::before{--shelf-touch-target-rule:1;content:"";position:absolute;width:44px;height:44px;top:50%;left:50%;transform:translate(-50%,-50%)}
}
.man-res-check:hover{border-color:var(--accent)}
.man-res-card.picked .man-res-check{background:var(--accent);border-color:var(--accent);color:#fff}
a.man-res-body{flex:1;min-width:0;text-decoration:none;color:inherit;display:block}
a.man-res-body:hover .man-res-title{color:var(--accent-ink)}
.man-res-body{flex:1;min-width:0}
.man-res-title{font-size:var(--fs-sm);font-weight:600;color:var(--ink);line-height:1.35;word-break:break-word;display:flex;align-items:baseline;gap:5px}
.man-res-title-arrow{font-size:var(--fs-micro);opacity:.5;flex-shrink:0}
.man-res-url{font-size:var(--fs-micro);color:var(--muted);font-family:var(--font-mono);margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.man-res-badges{display:flex;align-items:center;gap:5px;margin-top:5px}
.man-res-open{background:none;border:1px solid var(--line);border-radius:var(--r-xs);padding:3px 8px;font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);cursor:pointer;flex-shrink:0;margin-top:2px;letter-spacing:.04em;text-decoration:none;display:inline-block}
.man-res-open:hover{background:var(--surface);color:var(--ink)}
.man-modal-foot{display:flex;gap:8px;padding-top:2px}
.man-modal-foot[hidden]{display:none}
#modalCard:has(.man-modal){background:var(--bg);transition:none;transform:none}
#modal:has(.man-modal){transition:none}
.man-save-btn{flex:1;cursor:pointer}
.man-save-btn:disabled{opacity:.38;cursor:not-allowed}
.man-cancel-btn{cursor:pointer}
.man-loading{text-align:center;padding:36px 20px;font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em}
.man-empty{text-align:center;padding:28px 20px;font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted)}
.man-verified-badge{font-size:var(--fs-xs);font-family:var(--font-ui);letter-spacing:.07em;text-transform:uppercase;padding:2px 5px;border-radius:var(--r-xs);background:rgba(100,170,100,.15);color:#7bc87b;display:inline-flex;align-items:center;gap:3px;font-weight:var(--fw-semi)}
.man-stale-section{margin-top:4px;border-top:1px solid var(--line);padding-top:6px}
.man-stale-toggle{background:none;border:none;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);cursor:pointer;padding:0 0 6px;opacity:.7;display:flex;align-items:center;gap:5px;font-weight:var(--fw-semi)}
.man-stale-toggle:hover{opacity:1;color:var(--ink)}
.man-res-card.stale{opacity:.4;cursor:default;pointer-events:none}
.man-res-card.stale .man-res-check{display:none}
.man-link-check{background:none;border:1px solid var(--line);border-radius:var(--r-xs);padding:2px 7px;font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);cursor:pointer;letter-spacing:.04em;flex-shrink:0;margin-top:1px}
.man-link-check:hover{background:var(--surface-2);color:var(--ink)}
.man-link-check:disabled{opacity:.5;cursor:default}
.man-link-warn{font-size:var(--fs-xs);color:var(--danger-ink);font-family:var(--font-ui);letter-spacing:.02em;margin-top:3px;display:flex;align-items:center;gap:4px;line-height:1.4}
.man-link-ok{font-size:var(--fs-xs);color:#7bc87b;font-family:var(--font-ui);letter-spacing:.02em;margin-top:3px;display:flex;align-items:center;gap:4px}
.add-menu-overlay{position:fixed;inset:0;z-index:500}
.add-menu{position:fixed;z-index:501;min-width:230px;max-height:calc(100dvh - 24px);overflow-y:auto;display:flex;flex-direction:column;gap:1px}
.add-menu-row{display:flex;align-items:center;gap:10px;background:none;border:none;color:var(--ink);font-family:inherit;font-size:var(--fs-control);font-weight:500;text-align:left;padding:11px 14px;border-radius:var(--r-sm);cursor:pointer;width:100%;line-height:1.2;transition:background var(--t-fast)}
.add-menu-section{padding:10px 14px 4px;color:var(--muted);font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:600;letter-spacing:.09em;text-transform:uppercase}
.add-menu-row:hover{background:var(--surface-2)}
.add-menu-row.am-accent{color:var(--accent-ink);font-weight:700}
.add-menu-row small{display:block;font-size:var(--fs-micro);font-weight:400;color:var(--muted);margin-top:2px}
.add-menu-sep{height:1px;background:var(--line);margin:4px 2px}
#addPhoneHandoffModal .cap-desk-content{display:block;padding-top:0}
#addPhoneHandoffModal .cap-handoff{background:transparent;color:var(--ink);border:0;min-height:220px;padding:20px}
#addPhoneLive{width:100%}
#addPhoneHandoffModal .handoff-connected #addPhoneNewCode{display:none}
.cap-desk-content.cap-upload-only{display:flex;width:100%;flex-direction:column}
.idx-modal{display:flex;flex-direction:column;max-height:82vh;overflow:hidden}
.idx-head{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 20px 10px;border-bottom:1px solid var(--line);flex-shrink:0}
.idx-head h2{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);margin:0}
.idx-sub{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--ink-2);letter-spacing:.05em;margin-top:3px}
.idx-list{flex:1;overflow-y:auto;padding:10px 16px;display:flex;flex-direction:column;gap:7px}
.idx-card{display:flex;align-items:center;gap:10px;background:var(--surface-2);border-radius:var(--r-md);padding:10px 12px;border:1px solid var(--line);transition:opacity var(--t-base)}
.idx-card.dismissed{opacity:.3}
.idx-conf{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:2px}
.idx-conf.high{background:#3db36a}.idx-conf.medium{background:#f0a832}.idx-conf.low{background:rgba(150,150,150,.5)}
.idx-fields{flex:1;display:flex;flex-direction:column;gap:3px;min-width:0}
.idx-name{background:none;border:none;font-weight:600;color:var(--ink);font-family:inherit;padding:0;width:100%}
.idx-name:focus{border-bottom:1px solid var(--accent)}
.idx-cat-lbl{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--ink-2);letter-spacing:.05em;text-transform:uppercase;font-weight:var(--fw-semi)}
.idx-evidence{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.02em;margin-top:1px;font-style:italic}
.idx-actions{display:flex;gap:5px;flex-shrink:0}
.idx-btn-keep{width:28px;height:28px;border-radius:var(--r-sm);border:1.5px solid rgba(61,179,106,.4);background:transparent;color:rgba(61,179,106,.6);cursor:pointer;font-size:var(--fs-base);display:flex;align-items:center;justify-content:center}
.idx-btn-keep.active{background:rgba(61,179,106,.18);color:#3db36a;border-color:#3db36a}
.idx-btn-discard{width:28px;height:28px;border-radius:var(--r-sm);border:1px solid var(--line);background:transparent;color:var(--ink-2);cursor:pointer;font-size:var(--fs-sm);display:flex;align-items:center;justify-content:center}
.idx-btn-discard:hover{background:rgba(224,64,64,.1);color:var(--danger-ink);border-color:rgba(224,64,64,.3)}
.idx-foot{padding:12px 16px;border-top:1px solid var(--line);display:flex;gap:8px;flex-shrink:0;align-items:center}
.idx-add-all{flex:1;cursor:pointer}
.idx-add-sel{flex:1;cursor:pointer}
.idx-cancel-lnk{background:none;border:none;color:var(--ink-2);font-size:var(--fs-xs);cursor:pointer;padding:6px;white-space:nowrap}
.idx-single-lnk{background:none;border:none;font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);cursor:pointer;text-decoration:underline;text-underline-offset:2px;padding:4px 6px;letter-spacing:.04em;white-space:nowrap;margin-left:auto}
.idx-single-lnk:hover{color:var(--ink)}
.idx-src-chip{display:inline-flex;align-items:center;gap:5px;margin-top:6px;padding:4px 8px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-xs);cursor:pointer;max-width:fit-content}
.idx-src-thumb{width:32px;height:32px;object-fit:contain;border-radius:var(--r-xs);display:block;background:var(--surface-2)}
.idx-src-label{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--ink-2);letter-spacing:.04em}
.man-lnk{font-family:var(--font-ui);font-size:var(--fs-control);font-weight:600;letter-spacing:0;color:var(--ink-2);text-decoration:none;border:1px solid var(--line);border-radius:var(--r-xs);padding:5px 10px;margin-left:6px;vertical-align:middle;cursor:pointer;background:none;white-space:nowrap}
.man-lnk:hover{color:var(--ink);border-color:var(--ink-2)}
.cap-man-lnk{display:block;font-family:var(--font-ui);font-size:var(--fs-xs);color:rgba(255,255,255,.4);text-decoration:none;padding:0 8px 8px;letter-spacing:.04em}
.cap-man-lnk:hover{color:rgba(255,255,255,.75)}
@media(max-width:560px){.bulk-cards{grid-template-columns:1fr 1fr;padding:10px;gap:8px}.bulk-head,.bulk-bar,.bulk-foot{padding:10px 14px}}
@media(max-width:380px){.bulk-cards{grid-template-columns:1fr}}
#roomScanOverlay{position:fixed;inset:0;z-index:200;background:var(--bg);display:flex;flex-direction:column;overflow:hidden}
.rs-head{display:flex;gap:14px;align-items:flex-start;padding:16px 18px;border-bottom:1px solid var(--line);flex-shrink:0}
.rs-thumb{width:80px;height:60px;border-radius:var(--r-sm);object-fit:contain;background:var(--surface-2);flex-shrink:0}
.rs-head-info{flex:1}
.rs-title{font-size:var(--fs-md);font-weight:800;font-family:var(--font-display);letter-spacing:-.01em}
.rs-subtitle{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em;margin-top:3px;text-transform:uppercase;font-weight:var(--fw-semi)}
.rs-body{flex:1;overflow-y:auto;padding:16px 18px}
.rs-units-list{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.rs-unit{display:flex;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:8px 10px;flex-wrap:wrap}
.rs-unit-name{flex:1 1 auto;background:transparent;border:none;color:var(--ink);font-family:inherit;padding:2px 4px;border-radius:var(--r-xs);min-width:80px}
.rs-unit-name:focus{background:var(--surface-2)}
.rs-unit-type{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.05em;text-transform:uppercase;background:var(--surface-2);border-radius:var(--r-xs);padding:3px 7px;flex-shrink:0;white-space:nowrap;font-weight:var(--fw-semi)}
.rs-unit-rm{background:none;border:none;color:var(--muted);font-size:var(--fs-base);cursor:pointer;padding:0 3px;line-height:1;flex-shrink:0}
.rs-unit-rm:hover{color:var(--ink)}
.rs-unit-thumb{width:56px;height:42px;border-radius:var(--r-xs);overflow:hidden;flex-shrink:0;background:var(--surface-2)}
.rs-unit-thumb img{width:100%;height:100%;object-fit:contain;display:block}
.rs-unit-skip{background:none;border:1px solid var(--line-2);border-radius:var(--r-xl);font-size:var(--fs-micro);color:var(--muted);cursor:pointer;padding:2px 8px;white-space:nowrap;flex-shrink:0;font-family:inherit;line-height:1.4}
.rs-unit-skip:hover{border-color:var(--accent);color:var(--accent-ink)}
.rs-unit-snap{width:46px;height:46px;flex:0 0 auto;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--muted);display:grid;place-items:center;cursor:pointer;overflow:hidden;padding:0}
.rs-unit-snap:hover{border-color:var(--line-2);color:var(--ink)}
.rs-unit-snap svg{width:18px;height:18px}
.rs-unit-snap img{width:100%;height:100%;object-fit:cover}
.rs-unit.wz-skipped{opacity:.38}
.rs-unit.wz-skipped .rs-unit-name{text-decoration:line-through}
.rs-spot-count{font-family:var(--font-mono);font-size:var(--fs-micro);color:var(--muted);letter-spacing:.02em;white-space:nowrap;flex:0 0 auto}
.rs-open-inside{background:var(--surface-2);border:1px solid var(--line-2);color:var(--accent-ink);border-radius:var(--r-sm);padding:6px 10px;font-size:var(--fs-xs);font-weight:700;white-space:nowrap;cursor:pointer;flex:0 0 auto}
.rs-open-inside:hover{filter:brightness(1.08)}
.rs-open-inside:disabled{opacity:.6}
.rs-busy{color:var(--accent-ink);animation:rsPulse var(--t-slow) ease-in-out infinite}
@keyframes rsPulse{0%,100%{opacity:.5}50%{opacity:1}}
.rs-spot-edit{cursor:pointer;border:1px dashed var(--line-2);background:transparent;border-radius:var(--r-sm);padding:4px 8px;font-family:inherit}
.rs-spot-editor{display:flex;flex-wrap:wrap;gap:5px;align-items:center;width:100%;padding:7px 0 2px;margin-top:5px;border-top:1px solid var(--line)}
.rs-spot-pill{display:inline-flex;align-items:center;gap:4px;background:var(--chip-bg);border:1px solid var(--line);border-radius:var(--r-sm);padding:3px 4px 3px 8px;font-size:var(--fs-xs);cursor:pointer}
.rs-sp-rm{background:none;border:none;color:var(--muted);cursor:pointer;font-size:var(--fs-xs);line-height:1;padding:0 3px}
.rs-sp-add{padding:3px 8px;min-width:90px}
.rs-add-unit{background:none;border:1.5px dashed var(--line-2);border-radius:var(--r-sm);width:100%;padding:9px;font-size:var(--fs-sm);color:var(--muted);cursor:pointer;font-family:inherit;text-align:center}
.rs-add-unit:hover{border-color:var(--accent);color:var(--accent-ink)}
.rs-loc{padding:14px 18px;border-top:1px solid var(--line);flex-shrink:0}
.rs-loc-label{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);text-transform:uppercase;letter-spacing:.08em;margin-bottom:8px;font-weight:var(--fw-semi)}
.rs-loc-row{display:flex;gap:8px;align-items:stretch;flex-wrap:wrap}
.rs-loc-sel,.rs-new-name,.rs-space-sel{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:8px 10px;color:var(--ink);font-family:inherit}
.rs-loc-sel{flex:1;min-width:160px}
.rs-new-name{flex:1;min-width:160px;display:none}
.rs-new-name.rs-show{display:block}
.rs-space-sel{min-width:100px}
.rs-foot{display:flex;align-items:center;gap:10px;padding:12px 18px;border-top:1px solid var(--line);background:var(--surface);flex-shrink:0}
.rs-cancel{background:none;border:none;color:var(--muted);font-size:var(--fs-sm);cursor:pointer;padding:6px 10px;font-family:inherit}
.rs-cancel:hover{color:var(--ink)}
.rs-create{flex:1;cursor:pointer}
.rs-create:disabled{opacity:.5;cursor:default}
.rs-scanning{position:fixed;inset:0;z-index:210;background:rgba(0,0,0,.65);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:14px}
.rs-scanning-ring{width:40px;height:40px;border:3px solid rgba(255,255,255,.2);border-top-color:#fff;border-radius:50%;animation:spin var(--t-slow) linear infinite}
.rs-scanning-txt{font-family:var(--font-ui);font-size:var(--fs-xs);color:#fff;letter-spacing:.08em}
@keyframes spin{to{transform:rotate(360deg)}}
@media(max-width:540px){.rs-loc-row{flex-direction:column}.rs-loc-sel,.rs-new-name{min-width:0;width:100%}}
#wzOverlay{position:fixed;inset:0;z-index:300;background:var(--bg);display:flex;flex-direction:column;overflow:hidden}
.wz-head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);flex-shrink:0}
.wz-head-text{flex:1}
.wz-brand{font-size:var(--fs-xs);font-family:var(--font-ui);letter-spacing:.06em;color:var(--muted);text-transform:uppercase;font-weight:var(--fw-semi)}
.wz-head-room{font-size:var(--fs-control);font-weight:700;font-family:var(--font-display);margin-top:2px}
.wz-body{flex:1;overflow-y:auto;display:flex;align-items:flex-start;justify-content:center;padding:32px 20px}
.wz-card{width:100%;max-width:500px;display:flex;flex-direction:column;gap:0}
.wz-step-lbl{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em;text-transform:uppercase;margin-bottom:10px;font-weight:var(--fw-semi)}
.wz-prompt{font-size:var(--fs-xl);font-weight:800;font-family:var(--font-display);letter-spacing:-.02em;line-height:1.2;margin-bottom:8px}
.wz-prompt em{color:var(--accent-ink);font-style:normal}
.wz-hint{font-size:var(--fs-sm);color:var(--muted);line-height:1.5;margin-bottom:20px}
.wz-inp{width:100%;box-sizing:border-box;padding:11px 13px;margin-bottom:8px}
.wz-inp:focus{border-color:var(--accent)}
.wz-field-row{display:flex;gap:8px;margin-bottom:8px}
.wz-sel{flex:1;padding:10px 12px}
.wz-actions{display:flex;flex-direction:column;gap:8px;margin-top:20px}
.wz-primary{cursor:pointer;text-align:center}
.wz-primary:disabled{opacity:.5;cursor:default}
.wz-secondary{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:13px;font-size:var(--fs-sm);color:var(--ink);cursor:pointer;font-family:inherit}
.wz-secondary:hover{border-color:var(--line-strong)}
.wz-skip{background:none;border:none;color:var(--muted);font-size:var(--fs-sm);cursor:pointer;padding:8px;font-family:inherit;text-align:center}
.wz-skip:hover{color:var(--ink)}
.wz-or{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em;text-align:center;margin:14px 0 8px;text-transform:uppercase;font-weight:var(--fw-semi)}
.wz-units{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.wz-sub-list{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.wz-sub-row{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px}
.wz-sub-name{flex:1;font-size:var(--fs-sm);color:var(--ink)}
.wz-sub-inp{width:52px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);padding:5px 8px;font-size:var(--fs-sm);color:var(--ink);font-family:inherit;text-align:center}
.wz-sub-hint{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);white-space:nowrap}
.wz-fill-done-list{display:flex;flex-direction:column;gap:6px;margin-bottom:16px}
.wz-fill-done-item{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--muted)}
.wz-fill-chk{color:var(--accent-ink);font-size:var(--fs-control)}
.wz-summary-stats{display:flex;gap:24px;margin:20px 0}
.wz-stat{display:flex;flex-direction:column;align-items:center}
.wz-stat-n{font-size:38px;font-weight:800;font-family:var(--font-display);letter-spacing:-.04em;color:var(--accent-ink);line-height:1}
.wz-stat-l{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.06em;text-transform:uppercase;margin-top:4px;font-weight:var(--fw-semi)}
.wz-done-list{display:flex;flex-direction:column;gap:8px;margin:16px 0}
.wz-done-room{display:flex;align-items:center;gap:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 14px}
.wz-done-chk{color:var(--accent-ink);font-size:var(--fs-md);flex-shrink:0}
.wz-done-name{font-size:var(--fs-control);font-weight:600}
.wz-done-meta{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.04em;margin-top:2px}
.wz-loading{display:flex;flex-direction:column;align-items:center;gap:16px;padding-top:40px}
.bulk-wz-loc{font-size:var(--fs-sm);color:var(--ink);font-weight:600}
/* ---- Home view ---- */
.home-wrap{max-width:680px;margin:0;padding:36px 0 64px}
.home-greeting{margin-bottom:36px}
.home-greeting-name{font-size:var(--fs-xl);font-weight:800;color:var(--ink);font-family:var(--font-display);line-height:1.15}
.home-greeting-date{font-size:var(--fs-sm);color:var(--muted);margin-top:5px;font-family:var(--font-ui)}
.home-section{margin-bottom:28px}
.home-section-title{font-size:var(--fs-control);font-weight:700;letter-spacing:0;color:var(--ink-2);margin-bottom:10px}
.home-spaces-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:16px}
.home-spaces-grid .os-icon-cam{display:none}
.home-attn-row{display:flex;flex-wrap:wrap;gap:8px}
.home-attn-card{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--r-md);border:1px solid var(--line-2);background:var(--surface);cursor:pointer;font-family:inherit;transition:background var(--t-base);text-align:left}
.home-attn-card:hover{background:var(--surface-3)}
.attn-overdue{border-color:rgba(208,65,55,.4)!important}
.attn-faulty{border-color:rgba(200,94,56,.3)!important}
.attn-n{font-size:var(--fs-lg);font-weight:800;color:var(--ink);font-variant-numeric:tabular-nums;min-width:22px;text-align:right;font-family:var(--font-display)}
.attn-overdue .attn-n,.attn-faulty .attn-n{color:#d04137}
.attn-lbl{font-size:var(--fs-sm);color:var(--ink-2);white-space:nowrap}
.home-qa-row{display:flex;flex-wrap:wrap;gap:8px}
.home-qa-btn{display:flex;align-items:center;gap:8px;padding:10px 16px;border-radius:var(--r-md);border:1px solid var(--line-2);background:var(--surface);color:var(--ink-2);font-size:var(--fs-sm);font-weight:500;cursor:pointer;font-family:inherit;transition:background var(--t-base),color var(--t-base)}
.home-qa-btn:hover{background:var(--surface-3);color:var(--ink)}
.home-qa-btn svg{width:15px;height:15px;flex-shrink:0;opacity:.7}
.home-views-row{flex-wrap:nowrap;overflow-x:auto;max-width:100%}
.home-views-row .home-qa-btn{flex-shrink:0;white-space:nowrap}
.home-views-row .home-qa-btn.on{color:var(--accent-ink);border-color:var(--accent)}
.home-views-row .home-qa-btn.on svg{opacity:1}
.home-resume{display:inline-flex;align-items:center;gap:6px;padding:10px 16px;border-radius:var(--r-md);border:1px solid var(--line);background:none;color:var(--accent-ink);font-size:var(--fs-control);font-weight:600;cursor:pointer;font-family:inherit;transition:border-color var(--t-base)}
.home-resume:hover{border-color:var(--accent)}
.activity-wrap{max-width:760px;margin:0;padding:12px 0 64px}
.activity-head{margin-bottom:24px}
.activity-head h1{font-family:var(--font-display);font-size:var(--fs-xl);line-height:1.1;margin:0 0 5px}
.activity-head p{margin:0;color:var(--muted);font-size:var(--fs-sm)}
.activity-row{cursor:pointer}
.activity-row:hover{background:var(--surface-2)}
.activity-meta{font-size:var(--fs-control);color:var(--muted);margin-top:4px;line-height:1.35}
@media(max-width:480px){.home-wrap{padding:24px 0 48px}.home-greeting-name{font-size:var(--fs-lg)}}
#welcomeOverlay{position:fixed;inset:0;z-index:500;background:var(--bg);display:flex;align-items:center;justify-content:center;padding:32px 20px}
.wlc-card{width:100%;max-width:400px;text-align:center}
.wlc-brand{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:32px;font-weight:var(--fw-semi)}
.wlc-headline{font-family:var(--font-display);font-size:38px;font-weight:900;letter-spacing:-.04em;line-height:1.1;margin-bottom:12px}
.wlc-headline em{color:var(--accent-ink);font-style:normal}
.wlc-sub{font-size:var(--fs-base);color:var(--muted);line-height:1.6;margin-bottom:36px}
.wlc-actions{display:flex;flex-direction:column;gap:10px}
.wlc-primary{cursor:pointer}
.wlc-primary:hover{opacity:.9}
.wlc-skip{background:none;border:none;color:var(--muted);font-size:var(--fs-sm);cursor:pointer;padding:8px;font-family:inherit}
.wlc-skip:hover{color:var(--ink)}
#voiceOverlay{position:fixed;bottom:0;left:0;right:0;z-index:400;padding:16px;display:flex;justify-content:center;pointer-events:none}
.vo-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);padding:20px;width:100%;max-width:460px;box-shadow:var(--shadow);pointer-events:all;transform:translateY(calc(100% + 24px));transition:transform var(--t-slow) var(--ease)}
.vo-card.vo-show{transform:translateY(0)}
.vo-pill{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.vo-dot{width:9px;height:9px;border-radius:50%;background:var(--accent);flex-shrink:0}
.vo-dot.vo-pulse{animation:vopulse var(--t-slow) ease-in-out infinite}
@keyframes vopulse{0%,100%{transform:scale(1);opacity:1}50%{transform:scale(1.5);opacity:.5}}
.vo-status-txt{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.08em;text-transform:uppercase;flex:1;font-weight:var(--fw-semi)}
.vo-transcript-box{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:11px 13px;min-height:42px;font-size:var(--fs-control);color:var(--ink);line-height:1.5;margin-bottom:12px;word-break:break-word}
.vo-interim{color:var(--muted)}
.vo-fld{width:100%;box-sizing:border-box;padding:9px 12px;margin-bottom:8px}
.vo-fld:focus{border-color:var(--accent)}
.vo-row{display:flex;gap:8px;margin-bottom:8px}
.vo-btns{display:flex;gap:8px;margin-top:10px}
.vo-save{flex:1;cursor:pointer}
.vo-cancel-btn{background:none;border:1px solid var(--line);border-radius:var(--r-sm);padding:11px 14px;font-size:var(--fs-sm);color:var(--muted);cursor:pointer;font-family:inherit}
.vo-cancel-btn:hover{color:var(--ink);border-color:var(--line-strong)}
#micBtn.vo-active{background:var(--accent-strong)!important;color:var(--on-accent)!important}

/* ---- bottom dock ---- */
.dock{position:fixed;left:0;right:0;bottom:0;transform:none;z-index:60;
  display:flex;gap:0;padding:4px 0 max(4px,env(safe-area-inset-bottom));border-radius:0;
  background:var(--surface);-webkit-backdrop-filter:none;backdrop-filter:none;
  border:none;border-top:1px solid var(--line);box-shadow:none;justify-content:space-around}
.dock .dbtn:not(.m-dock){display:none!important}
.dock .m-dock{display:flex;flex:1;flex-direction:column;align-items:center;justify-content:center;gap:3px;height:auto;min-height:50px;padding:6px 8px;font-size:var(--fs-xs);font-weight:600;color:var(--muted);border-radius:var(--r-md);background:none;border:none;cursor:pointer}
.dock .m-dock:hover,.dock .m-dock.on{color:var(--ink)}
.dock .m-dock .di{width:22px;height:22px}
.dock .m-dock span{display:block}
.grid-kit-close-strip{position:absolute;inset:0;z-index:3;display:flex;align-items:center;gap:8px;padding:4px 10px max(4px,env(safe-area-inset-bottom));box-sizing:border-box;background:var(--surface);border-top:1px solid var(--line)}
.grid-kit-close-strip[hidden]{display:none}
.dock.grid-kit-strip-active> :not(.grid-kit-close-strip){visibility:hidden}
.grid-kit-close-copy{min-width:0;flex:1;line-height:1.2}
.grid-kit-close-name{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-xs);font-weight:700;color:var(--ink)}
.grid-kit-close-meta{display:block;margin-top:3px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:var(--fs-xs) var(--font-ui);color:var(--muted)}
.grid-kit-close-action{height:32px;min-width:42px;padding:0 8px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-2);font-size:var(--fs-micro);font-weight:700;cursor:pointer;white-space:nowrap}
.grid-kit-close-action:hover{border-color:var(--accent);color:var(--accent-ink)}
.grid-kit-close-action.primary{background:var(--accent-strong);border-color:var(--accent);color:var(--on-accent)}
.grid-kit-close-action.close{min-width:28px;padding:0 6px;font-size:var(--fs-md);line-height:1}
@media(max-width:390px){
  .grid-kit-close-strip{gap:4px;padding-left:7px;padding-right:7px}
  .grid-kit-close-action{min-width:38px;padding:0 6px;font-size:var(--fs-micro)}
  .grid-kit-close-action.close{min-width:25px;padding:0 4px}
  .grid-kit-close-meta{font-size:var(--fs-nano)}
}
.dbtn{display:flex;align-items:center;gap:8px;height:42px;padding:0 16px;border:none;border-radius:var(--r-md);
  background:transparent;color:var(--ink-2);font-size:var(--fs-control);font-weight:600;position:relative;white-space:nowrap}
.dbtn:hover{background:var(--surface-2);color:var(--ink)}
.dbtn .di{width:17px;height:17px;flex:0 0 auto}
.dbtn.bell.ring .di{color:var(--accent-ink)}
.dbadge{position:absolute;top:5px;right:9px;min-width:16px;height:16px;padding:0 4px;border-radius:var(--r-sm);
  background:var(--accent-strong);color:var(--on-accent);font-size:var(--fs-xs);font-weight:800;
  display:flex;align-items:center;justify-content:center;font-family:var(--font-ui)}
@media(max-width:720px){ .dbtn span{display:none} .dbtn{padding:0 13px} }

/* ---- generic modal ---- */
.mscrim{position:fixed;inset:0;z-index:90;background:var(--scrim);backdrop-filter:var(--scrim-blur);opacity:0;pointer-events:none;
  transition:opacity var(--t-base);-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}
.mscrim.show{opacity:1;pointer-events:auto}
.modal{position:fixed;inset:0;z-index:91;display:flex;align-items:center;justify-content:center;
  padding:20px;pointer-events:none;opacity:0;transition:opacity var(--t-base)}
.modal.show{opacity:1;pointer-events:auto}
.modal-card{width:min(520px,100%);max-height:86vh;display:flex;flex-direction:column;overflow:hidden;
  background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);
  transform:translateY(8px) scale(.98);transition:transform var(--t-base) var(--ease)}
.modal.show .modal-card{transform:none}
#modal:has(.save-conflict-panel){transition:none}
#modalCard:has(.save-conflict-panel){background:#ffffff;color:#202020;opacity:1;transform:none;transition:none}
.save-conflict-panel{padding:24px;background:#ffffff;color:#202020;line-height:1.5}
.save-conflict-panel .btn{background:#235b43;color:#ffffff;border:1px solid #235b43;opacity:1}
[data-theme="workshop"] #modalCard:has(.save-conflict-panel),[data-theme="workshop"] .save-conflict-panel{background:#202624;color:#ffffff}
[data-theme="workshop"] .save-conflict-panel .btn{background:#b8e5cb;color:#17271e;border-color:#b8e5cb}
.modal-h{display:flex;align-items:center;justify-content:space-between;padding:18px 20px 12px}
.modal-h h2{font-family:var(--font-display);font-weight:800;font-size:var(--fs-lg);margin:0}
.modal-h .x{width:30px;height:30px;border:none;border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-2);font-size:var(--fs-control)}
.modal-h .x:hover{background:var(--surface-3);color:var(--ink)}
.modal-b{padding:0 20px 16px;overflow-y:auto;display:flex;flex-direction:column;gap:12px}
.sale-sheet .modal-b > *{flex-shrink:0}
.sale-sheet .sale-draft-status,.sale-sheet .sale-form-error{display:block;position:static;flex:none;height:auto;min-height:0;max-width:100%;margin:0;padding:8px 0;font-size:var(--fs-control);line-height:1.5;white-space:normal;overflow-wrap:anywhere}
.sale-sheet .sale-draft-status:empty,.sale-sheet .sale-form-error:empty{display:none}
.modal-sub{font-size:var(--fs-control);color:var(--muted);margin:0 0 2px;line-height:1.5}
.modal-f{display:flex;gap:10px;padding:14px 20px;border-top:1px solid var(--line);background:var(--surface-2)}
.modal-f .btn{flex:1}
/* CSV custom-field mapping */
.csv-columns-kicker{margin:4px 0 0;color:var(--muted);font:var(--fs-xs) var(--font-ui);letter-spacing:.06em;text-transform:uppercase;font-weight:var(--fw-semi)}
.csv-column-modal-body{gap:10px}
.csv-column-decision-list{display:flex;flex-direction:column;gap:7px;overflow:auto;min-height:0}
.csv-column-decision{display:grid;grid-template-columns:minmax(0,1fr) minmax(190px,.78fr);gap:12px;align-items:center;padding:10px 11px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2)}
.csv-column-decision-copy{min-width:0;display:flex;flex-direction:column;gap:7px}
.csv-column-decision-copy strong{font-size:var(--fs-sm);color:var(--ink);overflow-wrap:anywhere}
.csv-column-samples{display:flex;gap:5px;flex-wrap:wrap;min-width:0}
.csv-column-samples span{max-width:100%;padding:3px 6px;border:1px solid var(--line);border-radius:var(--r-xs);background:var(--surface);color:var(--muted);font:var(--fs-nano) var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.csv-column-decision-controls{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:6px;min-width:0}
.csv-column-decision-controls select{width:100%;min-width:0;padding:6px 7px;border:1px solid var(--line);border-radius:var(--r-xs);background:var(--surface);color:var(--ink)}
.csv-custom-limit{margin:0;padding:9px 10px;border:1px solid color-mix(in oklab,var(--danger),transparent 45%);border-radius:var(--r-sm);background:color-mix(in oklab,var(--danger),transparent 92%);color:var(--danger-ink);font-size:var(--fs-xs);font-weight:700}
.custom-field-list{display:flex;flex-direction:column;gap:5px;width:100%}
.custom-field-entry{display:grid;grid-template-columns:minmax(90px,.7fr) minmax(0,1.3fr);gap:10px;padding:4px 0;border-bottom:1px solid color-mix(in oklab,var(--line),transparent 35%)}
.custom-field-entry:last-child{border-bottom:0}
.custom-field-label{color:var(--muted);font-weight:600;overflow-wrap:anywhere}
.custom-field-value{color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere}
.csv-custom-preview{display:flex;flex-wrap:wrap;gap:4px 7px;grid-column:1 / -1;margin-top:2px;color:var(--ink-2);font-size:var(--fs-micro);line-height:1.4}
.csv-custom-preview span{padding:2px 5px;border:1px solid color-mix(in oklab,var(--accent),transparent 58%);border-radius:var(--r-xs);background:color-mix(in oklab,var(--accent),transparent 94%);overflow-wrap:anywhere}
.csv-custom-preview span:where(:first-child){color:var(--accent-ink)}
/* Import review — wide modal */
.modal-card.imp-review{width:min(1100px,92vw);height:min(850px,88vh);max-height:88vh}
.modal-card.imp-review .modal-h{flex-shrink:0;border-bottom:1px solid var(--line)}
.modal-card.imp-review .modal-b{flex:1 1 0;overflow-y:auto;padding:14px 22px 10px;gap:10px}
.modal-card.imp-review .modal-f{flex-shrink:0}
.modal-card.imp-review .rv-grp-tbl{max-height:none}
.modal-card.imp-review .rv-grp-row{grid-template-columns:20px auto 1fr auto auto;gap:6px 12px;padding:9px 12px}
.modal-card.imp-review .rv-grp-name{font-size:var(--fs-control)}
.modal-card.imp-review .rv-grp-meta{font-size:var(--fs-xs);gap:6px 12px;margin-top:5px}
@media(max-width:700px){
  .modal-card.imp-review{width:100%;height:100%;max-height:100%;border-radius:0}
  .modal.show{padding:0}
  .csv-column-decision{grid-template-columns:1fr;gap:8px}
  .csv-column-decision-controls{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}
}

/* ---- reminders ---- */
.rem-row{display:flex;align-items:center;gap:12px;padding:12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2)}
.rem-row.over{border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}
.rem-main{flex:1;min-width:0}
.rem-name{font-weight:600;font-size:var(--fs-base)}
.rem-when{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);margin-top:2px}
.rem-row.over .rem-when{color:var(--accent-ink)}
.rem-note{font-size:var(--fs-xs);color:var(--ink-2);margin-top:3px}
.rem-acts{display:flex;gap:6px;flex:0 0 auto}

/* ---- starter kit ---- */
.profwrap{display:flex;flex-wrap:wrap;gap:8px}
.prof{padding:8px 13px;border-radius:var(--r-pill);border:1px solid var(--line-2);background:var(--surface-2);
  color:var(--ink-2);font-size:var(--fs-sm);font-weight:600}
.prof:hover{border-color:var(--line-strong);color:var(--ink)}
.prof.on{background:var(--accent-strong);border-color:transparent;color:var(--on-accent)}
.starter-prev{margin-top:4px}
.prev-h{font-size:var(--fs-sm);color:var(--muted);margin-bottom:8px;font-weight:600}
.prev-grid{display:flex;flex-wrap:wrap;gap:7px}
.ghosttile{display:flex;flex-direction:column;gap:2px;padding:8px 11px;border-radius:var(--r-sm);
  border:1px dashed var(--line-strong);background:var(--surface-2);font-size:var(--fs-sm);font-weight:600;color:var(--ink-2)}
.ghosttile small{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;color:var(--faint);text-transform:uppercase;font-weight:var(--fw-semi)}
/* starter — ai tab */
.sk-tabs{display:flex;gap:3px;background:var(--surface-3);border-radius:var(--r-md);padding:3px;margin-bottom:16px}
.sk-tab{flex:1;padding:8px 4px;border-radius:var(--r-sm);font-size:var(--fs-sm);font-weight:700;color:var(--ink-2);text-align:center;cursor:pointer;transition:var(--t-fast);border:none;background:none}
.sk-tab.on{background:var(--surface);color:var(--ink);box-shadow:var(--shadow-sm)}
.sk-tab .sk-spark{font-size:var(--fs-micro);margin-right:3px}
.sk-gen{width:100%;margin-top:10px}
.sk-thinking{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:var(--fs-sm);padding:14px 0}
@keyframes sk-pulse{0%,100%{opacity:.3}50%{opacity:1}}
.sk-dot{width:7px;height:7px;border-radius:50%;background:var(--accent);animation:sk-pulse var(--t-slow) ease-in-out infinite}

/* ---- locations ---- */
.loc-space-block{margin-top:20px}.loc-space-block:first-child{margin-top:0}
.loc-space-hd{display:flex;align-items:center;justify-content:space-between;gap:var(--s-2);
  font-family:var(--font-display);font-weight:800;font-size:var(--fs-base);color:var(--ink);
  padding-bottom:10px;border-bottom:1px solid var(--line);margin-bottom:12px}
.loc-place{margin-top:16px}.loc-place:first-child{margin-top:0}
.loc-ph{font-family:var(--font-display);font-weight:800;font-size:var(--fs-xs);letter-spacing:.06em;
  text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.loc-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px}
.loc-card{border-radius:var(--r-md);overflow:hidden;border:1px solid var(--line);
  background:var(--surface-2);cursor:pointer;transition:transform var(--t-fast),box-shadow var(--t-fast)}
.loc-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}
.loc-thumb{aspect-ratio:4/3;background:var(--ph);background-size:cover;background-position:center;
  position:relative;display:grid;place-items:center}
.loc-ini{font-family:var(--font-display);font-weight:800;font-size:var(--fs-lg);color:var(--ini);pointer-events:none}
.loc-cnt-badge{position:absolute;bottom:5px;left:6px;background:rgba(0,0,0,.55);
  backdrop-filter:blur(4px);color:#fff;font-family:var(--font-mono);font-size:var(--fs-micro);
  padding:2px 6px;border-radius:var(--r-xs);pointer-events:none}
.loc-cam{position:absolute;top:5px;right:5px;width:26px;height:26px;border-radius:50%;
  background:rgba(0,0,0,.52);backdrop-filter:blur(4px);display:grid;place-items:center;
  color:#fff;border:none;cursor:pointer;opacity:0;transition:opacity var(--t-base);z-index:2}
.loc-card:hover .loc-cam,.loc-card:focus-within .loc-cam,.loc-cam.has-photo{opacity:1}
.loc-cam svg{width:13px;height:13px}
.loc-add-link{background:none;border:none;color:var(--accent-ink);font-size:var(--fs-xs);font-weight:700;
  cursor:pointer;padding:4px 0;letter-spacing:.03em;opacity:.72;display:inline-block;margin-top:8px;font-family:inherit}
.loc-add-link:hover{opacity:1}
.loc-add-form{display:flex;gap:6px;margin-top:8px;align-items:center}
 .loc-add-ta{flex:1;min-width:0;background:var(--surface-2);border:1px solid var(--line);
   border-radius:var(--r-sm);padding:7px 10px;color:var(--ink);font-family:inherit;
  resize:none;line-height:1.4}
.loc-add-ta:focus{border-color:var(--accent)}
.loc-add-ok{cursor:pointer;white-space:nowrap;flex-shrink:0}
.loc-info{padding:7px 9px 9px}
.loc-cname{font-size:var(--fs-sm);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.loc-action-overflow{position:absolute;top:5px;right:5px;z-index:3}
.loc-action-overflow .pc-action-more{width:28px;min-width:28px!important;height:28px;padding:0;border:0;border-radius:50%;background:rgba(0,0,0,.65);color:#fff}
.loc-thumb:has(.loc-action-overflow) .loc-cam{right:39px;opacity:1}
.loc-action-menu{position:fixed;z-index:1000;bottom:auto;min-width:190px;max-width:calc(100vw - 16px);max-height:calc(100dvh - 16px);overflow:auto}
.loc-action-menu .btn{font-size:var(--fs-xs);text-transform:none;letter-spacing:normal}
.loc-action-menu .btn.danger,.loc-action-menu .btn.danger:hover{color:var(--danger,#e04040)}
.loc-action-menu [role="separator"]{height:1px;margin:5px 6px;background:var(--line)}
.loc-action-more:focus-visible,.loc-action-menu .btn:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.loc-branch{grid-column:1/-1;min-width:0}
.loc-branch>.loc-card{width:150px;max-width:100%}
.loc-children{margin:10px 0 16px 14px;padding-left:14px;border-left:2px solid var(--line)}
.loc-group-label{font-size:var(--fs-xs);font-weight:600;color:var(--muted);margin-bottom:8px}
.loc-empty-space{font-size:var(--fs-xs);color:var(--muted);padding:4px 0 0}
/* detail */
.loc-det-img{aspect-ratio:16/9;background:var(--ph);background-size:cover;background-position:center;
  position:relative}
.loc-det-cam{position:absolute;bottom:10px;right:10px;display:flex;align-items:center;gap:6px;
  padding:7px 12px;background:rgba(0,0,0,.55);backdrop-filter:blur(6px);border:none;
  border-radius:var(--r-xl);color:#fff;font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.08em;cursor:pointer}
.loc-det-cam svg{width:14px;height:14px;flex:0 0 auto}
.loc-det-sub{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;
  text-transform:uppercase;color:var(--muted);margin-bottom:2px;font-weight:var(--fw-semi)}
.qr-target-actions{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 16px}
.qr-target-actions button{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-2);padding:8px 11px;font-size:var(--fs-xs);font-weight:700;cursor:pointer}
.qr-target-actions button.primary{background:var(--accent-strong);border-color:var(--accent);color:var(--on-accent)}
.qr-target-codes{width:100%;font:var(--fs-micro) var(--font-mono);color:var(--muted);margin-bottom:2px}
.qr-content-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(135px,1fr));gap:9px}
.qr-content-card{position:relative;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);overflow:hidden;text-align:left;color:var(--ink);padding:0;cursor:pointer}
.qr-content-photo{aspect-ratio:4/3;background:var(--ph);background-size:cover;background-position:center;display:grid;place-items:center}
.qr-content-photo .ini{font:800 var(--fs-xl) var(--font-display);color:var(--ini)}
.qr-content-info{padding:9px}.qr-content-name{font-size:var(--fs-sm);font-weight:700;line-height:1.25}.qr-content-meta{font:var(--fs-xs) var(--font-ui);color:var(--muted);margin-top:4px}
.qr-away-flag{position:absolute;top:6px;right:6px;border-radius:var(--r-xs);background:#8a5417;color:#fff;padding:3px 6px;font:700 var(--fs-xs) var(--font-ui);text-transform:uppercase}
.qr-audit-list{display:flex;flex-direction:column;gap:8px;margin:14px 0}
.qr-audit-row{display:flex;gap:11px;align-items:center;border:1px solid var(--line);border-radius:var(--r-sm);padding:10px;background:var(--surface-2)}
.qr-audit-row input{width:20px;height:20px;accent-color:var(--accent);flex:0 0 auto}.qr-audit-row.expected-away{opacity:.66}
.qr-audit-row .qr-away-flag{position:static;margin-left:auto;white-space:nowrap}

/* placeholder tiles on the wall */
.card.ghost{opacity:.66;border-style:dashed}

/* keep stage clear of the dock */
#scroller{padding-bottom:84px}

/* square icon-only top button */
.tbtn.icon-only{padding:0;width:38px;justify-content:center}
.tbtn.icon-only .ic{width:18px;height:18px}
/* ── tips mode ── */
#tipsTip[data-touch="true"]{pointer-events:auto;box-sizing:border-box;width:min(304px,calc(100vw - 24px));max-width:none}
#tipsTip .tips-actions{display:flex;gap:8px;margin-top:12px}
#tipsTip .tips-actions button{min-height:44px;flex:1;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font:inherit;cursor:pointer}
#tipsTip .tips-actions button:first-child{background:var(--accent);color:var(--accent-contrast,#fff)}
#dmTipsBtn .tips-state{margin-left:auto}
#dmSheet #dmThemeBtn,#dmSheet #dmTipsBtn{grid-column:1/-1;flex-direction:row;justify-content:flex-start;gap:10px;min-height:48px}
#tipsPreferenceError{position:fixed;bottom:90px;left:12px;right:12px;z-index:100001;margin:auto;max-width:420px;padding:12px 16px;border:1px solid var(--accent);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);box-shadow:var(--shadow);font-size:14px}
body.tips-mode [data-tip]{cursor:help}
body.tips-mode [data-tip]:hover{outline:2px solid color-mix(in srgb,var(--accent) 70%,transparent);outline-offset:3px;border-radius:var(--r-xs)}
#tipsTip{position:fixed;z-index:99999;background:var(--surface-2,#211b13);border:1px solid color-mix(in srgb,var(--accent) 50%,var(--line));border-radius:var(--r-md);padding:11px 15px;max-width:272px;display:none;pointer-events:none;box-shadow:var(--shadow);backdrop-filter:blur(4px)}
#tipsTip strong{display:block;font-size:var(--fs-sm);font-weight:700;color:var(--accent-ink);margin-bottom:4px;font-family:var(--font-ui);letter-spacing:.02em}
#tipsTip p{font-size:var(--fs-xs);color:var(--ink-2,#efe7d6);margin:0;line-height:1.55}

/* ---- import ---- */
.imp-drop{display:flex;flex-direction:column;align-items:center;gap:4px;padding:26px;border-radius:var(--r-md);
  border:1.5px dashed var(--line-strong);background:var(--surface-2);color:var(--muted);text-align:center}
.imp-drop:hover,.imp-drop.over{border-color:var(--accent);color:var(--ink-2)}
.imp-drop b{color:var(--ink);font-size:var(--fs-base);margin-top:4px}
.imp-drop span{font-size:var(--fs-xs)}
.imp-table{display:flex;flex-direction:column;gap:5px;max-height:46vh;overflow:auto;margin-top:4px}
.imp-head,.imp-row{display:grid;grid-template-columns:24px 1fr 124px 78px 34px;gap:8px;align-items:center}
.imp-head{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--faint);padding:0 2px 2px;font-weight:var(--fw-semi)}
.imp-row{padding:6px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2)}
.imp-row.off{opacity:.45}
.imp-row input[type=text],.imp-row .imp-name,.imp-row .imp-cat,.imp-row .imp-price{width:100%;padding:6px 8px;font-size:var(--fs-sm)}
.imp-row input:focus{border-color:var(--line-strong)}
.imp-ck{width:16px;height:16px;accent-color:var(--accent)}
.imp-flag{font-family:var(--font-ui);font-size:var(--fs-xs);text-transform:uppercase;color:var(--faint);text-align:center;font-weight:var(--fw-semi)}
.imp-flag.skip{color:var(--accent-ink)}
.imp-prog{padding:16px 0 8px;display:flex;flex-direction:column;gap:14px}
.imp-prog-msg{font-size:var(--fs-base);font-weight:600;color:var(--ink)}
.imp-prog-bar{height:6px;border-radius:var(--r-pill);background:var(--line);overflow:hidden}
.imp-prog-fill{height:100%;border-radius:var(--r-pill);background:var(--accent);transition:width var(--t-slow) var(--ease)}
.imp-prog-sub{font-size:var(--fs-xs);color:var(--ink-2);font-family:var(--font-ui);letter-spacing:.04em;min-height:1em}
.imp-err-panel{display:flex;flex-direction:column;gap:8px;padding:16px;border-radius:var(--r-md);background:color-mix(in srgb,#e05 8%,var(--surface));border:1px solid color-mix(in srgb,#e05 28%,var(--line));color:var(--ink);font-size:var(--fs-control);line-height:1.5}
.imp-err-panel .imp-err-icon{color:#e05}
.imp-err-panel button{margin-top:4px;align-self:flex-start}
.imp-scope-list{display:flex;flex-direction:column;gap:6px;margin:12px 0}
.imp-scope-item{display:flex;align-items:flex-start;gap:12px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r-md);cursor:pointer;transition:background var(--t-fast),border-color var(--t-fast);user-select:none}
.imp-scope-item:hover{background:var(--surface-2)}
.imp-scope-item:has(input:checked){background:color-mix(in oklab,var(--accent),transparent 91%);border-color:color-mix(in oklab,var(--accent),transparent 60%)}
.imp-scope-item input[type=checkbox]{margin-top:3px;flex-shrink:0;width:15px;height:15px;accent-color:var(--accent);cursor:pointer}
.imp-sc-name{font-weight:600;font-size:var(--fs-control);color:var(--ink);margin-bottom:3px}
.imp-sc-desc{font-size:var(--fs-xs);color:var(--muted);line-height:1.45}
/* ---- location cover photo bulk uploader ---- */
.modal-card.lcv-wide{width:min(860px,94vw);height:min(740px,88vh);max-height:88vh}
.modal-card.lcv-wide .modal-b{flex:1 1 0;overflow-y:auto;padding:16px 20px 0;display:flex;flex-direction:column;gap:0}
.lcv-drop{display:flex;flex-direction:column;align-items:center;gap:6px;padding:40px 20px;border:1.5px dashed var(--line);border-radius:var(--r-md);cursor:pointer;text-align:center;color:var(--muted);transition:var(--t-base)}
.lcv-drop:hover,.lcv-drop.over{border-color:var(--accent);color:var(--ink)}
.lcv-drop b{color:var(--ink);font-size:var(--fs-base);margin-top:8px}
.lcv-drop span{font-size:var(--fs-xs)}
.lcv-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(176px,1fr));gap:12px;padding-bottom:76px}
.lcv-card{border:1.5px solid var(--line);border-radius:var(--r-md);padding:10px;display:flex;flex-direction:column;gap:7px;cursor:pointer;transition:border-color var(--t-base),box-shadow var(--t-base)}
.lcv-card:hover,.lcv-card.active{border-color:var(--accent)}
.lcv-card.active{box-shadow:0 0 0 2px color-mix(in oklab,var(--accent),transparent 70%)}
.lcv-thumb{aspect-ratio:4/3;border-radius:var(--r-sm);overflow:hidden;background:var(--ph)}
.lcv-thumb img{width:100%;height:100%;object-fit:cover;display:block}
.lcv-fname{font-size:var(--fs-micro);color:var(--muted);font-family:var(--font-mono);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lcv-combo{position:relative;z-index:10}
.lcv-cinput{width:100%;box-sizing:border-box;padding:6px 10px}
.lcv-cinput:focus{border-color:var(--accent)}
.lcv-dd{position:absolute;left:0;right:0;top:calc(100% + 3px);z-index:300;overflow:hidden;max-height:180px;overflow-y:auto}
.lcv-opt{padding:8px 12px;font-size:var(--fs-sm);color:var(--ink);cursor:pointer}
.lcv-opt:hover,.lcv-opt.kf{background:var(--surface-2)}
.lcv-opt.sel{color:var(--accent-ink);font-weight:600}
.lcv-opt-empty{padding:8px 12px;font-size:var(--fs-xs);color:var(--muted)}
.lcv-conf-list{display:flex;flex-direction:column;gap:5px;padding-bottom:76px}
.lcv-conf-item{display:flex;align-items:center;gap:10px;padding:9px 14px;border-radius:var(--r-sm);border:1px solid var(--line)}
.lcv-conf-item.ok{background:color-mix(in oklab,#4c8,transparent 91%);border-color:color-mix(in oklab,#4c8,transparent 62%)}
.lcv-conf-item.skip{background:color-mix(in oklab,#f80,transparent 93%);border-color:color-mix(in oklab,#f80,transparent 65%)}
.lcv-conf-icon{font-size:var(--fs-control);width:18px;text-align:center;flex-shrink:0}
.lcv-conf-info{display:flex;align-items:center;gap:10px;flex:1;overflow:hidden;min-width:0}
.lcv-conf-loc{font-size:var(--fs-control);font-weight:600;color:var(--ink);white-space:nowrap;flex-shrink:0}
.lcv-conf-fname{font-size:var(--fs-micro);font-family:var(--font-mono);color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}
.lcv-foot{position:sticky;bottom:0;display:flex;gap:8px;background:var(--surface);border-top:1px solid var(--line);padding:12px 0;margin-top:auto}
@media(max-width:600px){.modal-card.lcv-wide{width:100%;height:100%;max-height:100%;border-radius:0}.lcv-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}}
/* ---- import review v2 ---- */
.rv-sel-bar{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:10px}
.rv-sel-bar button{font-size:var(--fs-micro);padding:3px 9px;border-radius:var(--r-xs);border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);cursor:pointer;line-height:1.6}
.rv-sel-bar button:hover{border-color:var(--accent);color:var(--accent-ink)}
.rv-section-hd{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);margin:12px 0 5px;font-weight:var(--fw-semi)}
.rv-tbl{display:flex;flex-direction:column;gap:4px;max-height:30vh;overflow:auto}
.rv-head,.rv-row{display:grid;gap:5px;align-items:center}
.rv-head{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.05em;text-transform:uppercase;color:var(--faint);padding:0 4px 3px;font-weight:var(--fw-semi)}
.rvg{grid-template-columns:16px 72px 1fr 76px 50px 118px}
.rvs{grid-template-columns:16px 72px 1fr 62px 72px 118px}
.rv-row{padding:5px 6px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);transition:opacity var(--t-base)}
.rv-row.skip{opacity:.35}
.rv-badge{display:inline-flex;align-items:center;font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:700;padding:2px 5px;border-radius:var(--r-xs);white-space:nowrap;overflow:hidden;max-width:100%}
.rv-badge.bnew{color:#4d9ef5;background:rgba(77,158,245,.13)}
.rv-badge.bexist{color:#5cb85c;background:rgba(92,184,92,.13)}
.rv-badge.bfuzzy{color:#f07830;background:rgba(240,120,48,.13)}
.rv-badge.bexp{color:var(--faint);background:var(--line)}
.rv-act,.rv-cycle{padding:2px 3px;border-radius:var(--r-xs);border:1px solid var(--line);background:var(--surface);color:var(--ink);width:100%}
.rv-inp{width:100%;background:var(--surface);border:1px solid transparent;color:var(--ink);border-radius:var(--r-xs);padding:3px 5px}
.rv-inp:focus{border-color:var(--line-strong)}
.rv-summary{display:flex;flex-wrap:wrap;gap:6px 14px;padding:10px 0 2px;border-top:1px solid var(--line);font-size:var(--fs-xs);color:var(--ink-2);margin-top:8px}
.rv-summary b{color:var(--ink)}
.rv-grp-tbl{display:flex;flex-direction:column;gap:4px;max-height:55vh;overflow:auto;padding:2px 0}
.rv-grp-row{display:grid;grid-template-columns:18px auto 1fr auto;gap:6px 9px;align-items:start;padding:7px 9px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);transition:opacity var(--t-base)}
.rv-grp-row.skip{opacity:.35}
.rv-grp-ck{margin-top:3px;flex-shrink:0}
.rv-grp-bdg{margin-top:2px}
.rv-grp-main{min-width:0}
.rv-grp-name{font-size:var(--fs-sm);font-weight:600;color:var(--ink);line-height:1.3;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv-grp-name input{width:100%;background:transparent;border:1px solid transparent;color:inherit;border-radius:var(--r-xs);padding:1px 4px;font-weight:inherit}
.rv-grp-name input:focus{background:var(--surface);border-color:var(--line-strong)}
.rv-grp-meta{display:flex;gap:5px 10px;flex-wrap:wrap;font-size:var(--fs-micro);color:var(--ink-2);margin-top:4px;align-items:center}
.rv-grp-meta .chip{display:inline-flex;align-items:center;gap:3px;white-space:nowrap}
.rv-type-sel{font-size:var(--fs-micro);padding:2px 5px;border-radius:var(--r-xs);border:1px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer}
.rv-type-sel[data-type=subscription]{border-color:rgba(77,158,245,.4);color:#4d9ef5}
.rv-type-sel[data-type=recurring_bill]{border-color:rgba(163,108,220,.4);color:#a36cdc}
.rv-type-sel[data-type=gear]{border-color:rgba(92,184,92,.35);color:#5cb85c}
.rv-type-sel[data-type=expense]{border-color:transparent;color:var(--faint)}

/* ---- spaces tab strip ---- */
.spacebar{flex:0 0 auto;display:flex;align-items:center;gap:4px;padding:8px 16px 0;overflow-x:auto;
  scrollbar-width:none}
.spacebar::-webkit-scrollbar{display:none}
.sp-tab-wrap{display:inline-flex;align-items:center;flex:0 0 auto}
.spacebar{min-width:0;max-width:100%;flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;overscroll-behavior-x:contain}
.spacebar>.sp-tab,.spacebar>.sp-add{flex-shrink:0}
#stageInner>.vhead.arch-head{display:flex!important;align-items:flex-start;gap:14px}
.arch-head>div{min-width:0;max-width:100%}
.arch-head>div:last-child{flex-wrap:wrap}
.sp-action-overflow{opacity:0;visibility:hidden;transition:opacity var(--t-fast)}
.sp-tab-wrap:hover .sp-action-overflow,.sp-tab-wrap:focus-within .sp-action-overflow,.sp-tab-wrap.touch-actions .sp-action-overflow{opacity:1;visibility:visible}
.sp-action-overflow{height:var(--target-min);display:inline-flex;align-items:center}
.sp-action-overflow .pc-action-more{color:var(--muted);background:transparent;border:0;box-sizing:border-box;height:var(--target-min);min-height:0;padding-block:0}
.sp-action-overflow .pc-action-more:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sp-menu-reason{max-width:230px;margin:5px 10px;font-size:var(--fs-micro);line-height:1.4;color:var(--muted)}
.space-form{display:flex;flex-direction:column;gap:12px}
.space-form label{font-size:var(--fs-sm);font-weight:600}
.space-form input,.space-form select{width:100%;box-sizing:border-box;background:var(--surface-2);color:var(--ink);border:1px solid var(--line);border-radius:var(--r-sm);padding:10px;font-family:inherit}
.space-error{color:var(--danger,#e04040);font-size:var(--fs-sm);min-height:1em}
.space-delete-option{border:1px solid var(--line);border-radius:var(--r-md);padding:14px;display:flex;flex-direction:column;gap:10px}
.space-delete-option.destructive{border-color:var(--danger,#e04040)}
.space-form .danger{color:var(--danger-ink)}
.space-form button:disabled,.loc-action-menu button:disabled{opacity:.45;cursor:not-allowed}
.sp-tab{display:inline-flex;align-items:center;gap:7px;white-space:nowrap;border:none;background:transparent;
  color:var(--muted);font-size:var(--fs-control);font-weight:600;padding:8px 13px;border-radius:var(--r-md) var(--r-md) 0 0;
  border-bottom:2px solid transparent}
.sp-tab:hover{color:var(--ink-2);background:var(--surface-2)}
.sp-tab.on{color:var(--ink);border-bottom-color:var(--accent)}
.sp-i{display:inline-flex;align-items:center;line-height:1;color:var(--muted);transition:color var(--t-fast)}
.sp-tab:hover .sp-i{color:var(--ink-2)}
.sp-tab.on .sp-i{color:var(--accent-ink)}
.sp-i svg{display:block}
.sp-n{font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:600;color:var(--muted);background:var(--surface-2);
  padding:1px 6px;border-radius:var(--r-sm)}
.sp-tab.on .sp-n{color:var(--accent-ink)}
.sp-add{width:30px;height:30px;border:1px dashed var(--line-strong);background:transparent;color:var(--muted);
  border-radius:var(--r-sm);line-height:1;margin-left:4px;flex:0 0 auto;display:flex;align-items:center;justify-content:center}
.sp-add:hover{color:var(--ink);border-color:var(--accent)}

/* ---- starter picked chips ---- */
.picked{display:flex;flex-wrap:wrap;gap:7px}
.picked:empty{display:none}
.pchip{display:inline-flex;align-items:center;gap:6px;padding:5px 6px 5px 11px;border-radius:var(--r-pill);
  background:var(--accent-strong);color:var(--on-accent);font-size:var(--fs-sm);font-weight:600}
.pchip button{border:none;background:rgba(255,255,255,.25);color:inherit;width:16px;height:16px;border-radius:50%;
  font-size:var(--fs-micro);line-height:1;display:flex;align-items:center;justify-content:center}
.pchip button:hover{background:rgba(255,255,255,.45)}

/* ---- labelled wall layout toggle ---- */
#wallctl .seg button{width:auto;height:30px;padding:0 11px;gap:7px;display:inline-flex;align-items:center;
  font-size:var(--fs-sm);font-weight:600}
#wallctl .seg .seg-l{display:inline;line-height:1}
@media(max-width:660px){ #wallctl .seg .seg-l{display:none} #wallctl .seg button{width:34px;padding:0} }

/* ------------------- OS VIEW ------------------- */
.os-pathbar{display:flex;align-items:center;gap:0;padding:7px 10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);margin-bottom:16px;overflow-x:auto;scrollbar-width:none;flex-shrink:0}
.os-pathbar::-webkit-scrollbar{display:none}
.os-pbseg{background:none;border:none;font-family:var(--font-display);font-size:var(--fs-sm);font-weight:600;color:var(--muted);cursor:pointer;padding:3px 7px;border-radius:var(--r-xs);white-space:nowrap;transition:color var(--t-fast),background var(--t-fast);line-height:1.4}
.os-pbseg:hover{color:var(--ink);background:var(--surface-2)}
.os-pbseg.os-active{color:var(--ink);cursor:default;pointer-events:none;font-weight:700}
.os-pbsep{color:var(--faint);font-size:var(--fs-sm);margin:0 1px;user-select:none;flex:0 0 auto}
.os-desktop{background:var(--bg);border:1px solid var(--line);border-radius:var(--r-md);padding:24px 20px 32px;min-height:220px}
.os-icon-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--os-folder-w,180px),1fr));gap:var(--os-folder-gap,16px);align-content:start}
.os-icon{display:flex;flex-direction:column;gap:8px;cursor:pointer;position:relative;-webkit-tap-highlight-color:transparent;user-select:none;padding:0}
.os-icon.os-sel .os-card{outline:2px solid color-mix(in oklab,var(--accent),transparent 45%);outline-offset:2px}
.os-card-outer{position:relative}
.os-card-tab{position:absolute;bottom:-4px;left:4px;right:-4px;top:4px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line);z-index:0}
.os-card{position:relative;z-index:1;border-radius:var(--r-md);overflow:hidden;aspect-ratio:4/3;border:1px solid var(--line);transition:box-shadow var(--t-base),transform var(--t-base)}
.os-icon:hover .os-card{transform:translateY(-2px);box-shadow:var(--shadow)}
.os-location-shell{display:grid;grid-template-columns:300px minmax(0,1fr);gap:32px;min-height:65vh}
.os-location-rail{border-right:1px solid var(--line);padding:20px 18px 24px 0}
.os-tree-row{display:flex;align-items:center;min-height:38px;padding-left:calc(var(--depth,0)*16px);border-radius:4px}
.os-tree-row.is-current{background:var(--surface-2);box-shadow:inset 3px 0 var(--accent)}
.os-tree-row button,.os-tree-home{background:none;border:0;color:var(--ink);font:inherit;text-align:left;cursor:pointer}
.os-tree-toggle{flex:0 0 28px;padding:8px}
.os-tree-name{flex:1;min-width:0;padding:9px 4px;overflow-wrap:anywhere}
.os-tree-count{font:12px var(--font-mono);color:var(--muted);padding:0 9px}
.os-tree-space{font-weight:600;margin-top:20px}
.os-tree-home{font-family:var(--font-display);font-size:22px;padding:4px 8px}
.os-new-space{margin-top:28px}
.os-location-main{min-width:0;padding:16px 0 32px}
.os-location-main .os-pathbar{padding:0;margin-bottom:18px;flex-wrap:nowrap;gap:6px;background:none;border:0;border-radius:0;color:var(--muted);white-space:nowrap}
.os-location-main .os-pbseg{font:500 12px/1.4 var(--font-ui);padding:3px 0;border-radius:0}
.os-location-main .os-pbseg:hover{background:none;text-decoration:underline;text-underline-offset:3px}
.os-location-header{display:flex;align-items:center;gap:20px;flex-wrap:wrap;margin-bottom:32px}
.os-location-cover{width:120px;height:120px;flex:0 0 120px;overflow:hidden;border-radius:12px;position:relative;border:0;padding:0;background:var(--surface-2)}
.os-location-cover>img{width:100%;height:100%;object-fit:cover}
.os-location-title{flex:1;min-width:160px}
.os-location-title h1{font:800 32px/1.1 var(--font-display);letter-spacing:-.02em;margin:0 0 8px;overflow-wrap:anywhere}
.os-location-title p{font-size:13px;color:var(--muted);margin:0}
.os-location-actions{display:flex;gap:8px;flex-wrap:wrap;flex-basis:100%}
.shelf-inventory-view .os-location-main .os-location-header .os-location-actions{display:flex;align-items:center;justify-content:flex-start;gap:8px}
.shelf-inventory-view .os-location-main .os-location-header .os-location-actions>.btn,
.shelf-inventory-view .os-location-main .os-location-header .os-location-actions>.os-location-scan,
.shelf-inventory-view .os-location-main .os-location-header .os-location-actions>.os-location-scan>.btn{flex:0 0 auto;width:auto}
@media(min-width:701px){
  .shelf-inventory-view .os-location-main>.os-location-header>.os-location-title{display:block}
}
.os-location-scan{position:relative}
.os-location-rail .os-location-scan{flex:0 0 auto}
.os-location-scan [role="menu"]{position:absolute;top:calc(100% + 6px);left:0;z-index:40;min-width:210px;padding:6px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);box-shadow:var(--shadow)}
.os-location-scan [role="menu"][hidden]{display:none}
.os-location-scan [role="menuitem"]{display:block;width:100%;min-height:40px;padding:9px 10px;border:0;border-radius:var(--r-sm);background:none;color:var(--ink);font:600 var(--fs-sm) var(--font-ui);text-align:left}
.os-location-scan [role="menuitem"]:hover,.os-location-scan [role="menuitem"]:focus-visible{background:var(--surface-2)}
.os-location-scan [role="menuitem"]:disabled{opacity:.45;cursor:default}
.os-location-main .os-contents-label{margin:0 0 10px;color:var(--muted);font:600 12px/1.3 var(--font-ui)}
.os-location-main .cp-strip{align-items:stretch;margin-bottom:24px}
.os-location-main .cp-strip-img{width:80px;height:80px;object-fit:cover;border:1px solid var(--line);border-radius:var(--r-md)}
.os-location-main .os-contents-add{flex:0 0 80px;width:80px;min-height:80px;border:1px dashed var(--line-2);border-radius:var(--r-md);background:none;color:var(--muted);font:600 12px var(--font-ui)}
.os-location-main .card-edge{display:none}
.os-location-back{display:none}
.os-location-section{font-size:15px;font-weight:600;margin:28px 0 16px}
.os-location-main .os-location-children{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))!important;gap:20px!important}
.os-location-mosaic{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));grid-template-rows:repeat(2,minmax(0,1fr));width:100%;height:100%;overflow:hidden;gap:2px}
.os-location-mosaic>div{position:relative;overflow:hidden;min-height:0}
.os-location-mosaic img{width:100%;height:100%;object-fit:cover}
.os-location-mosaic[data-photos="1"]>div{grid-column:1/-1;grid-row:1/-1}
.os-location-mosaic[data-photos="2"]>div{grid-row:1/-1}
.os-location-mosaic[data-photos="3"]>div:first-child{grid-row:1/-1}
.os-location-empty{border:1px dashed var(--line);border-radius:12px;padding:36px 24px;text-align:center;color:var(--muted);margin:20px 0}
.os-location-empty-add{display:none}
.os-location-sticky,.os-location-chevron{display:none}
.os-location-shell .os-icon-count{font-family:var(--font-ui);font-variant-numeric:tabular-nums}
.os-location-shell .os-desktop{padding-left:0;padding-right:0}
.os-ctx-menu{max-height:calc(100dvh - 24px);overflow-y:auto}
@media(max-width:1023px){
  .os-location-shell{display:block}
  .os-location-rail{display:none}
  .os-location-main .os-location-children{grid-template-columns:repeat(2,minmax(0,1fr))!important}
}
@media(max-width:700px){
  .os-location-main{padding-bottom:calc(160px + env(safe-area-inset-bottom,0px))}
  .os-location-main .os-pathbar{margin-bottom:18px;font-size:12px}
  .os-location-main>.os-location-header{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;margin-bottom:24px}
  .os-location-main>.os-location-header>.os-location-back{display:inline-flex;align-items:center;justify-content:center;grid-column:1;grid-row:1;width:44px;min-width:44px;max-width:44px;height:44px;min-height:44px;padding:0;justify-self:start}
  .os-location-main>.os-location-header>.os-location-title{display:block!important;grid-column:2;grid-row:1;min-width:0}
  .os-location-title h1{font-size:26px}
  .os-location-main>.os-location-header>.os-location-cover{grid-column:3;grid-row:1;width:64px;height:64px;min-width:0}
  .os-location-main>.os-location-header>.os-location-actions{grid-column:1/-1;width:100%;min-width:0}
  .os-location-empty>.os-location-empty-add{display:inline-flex}
  .os-location-empty>button{min-height:44px;margin:4px}
  .os-location-main .os-location-children{display:flex!important;flex-direction:column;gap:0!important}
  .os-location-children .os-icon{display:grid;grid-template-columns:52px minmax(0,1fr) 32px;grid-template-rows:auto auto;column-gap:14px;row-gap:3px;padding:14px 0;border-bottom:1px solid var(--line);align-items:center}
  .os-location-children .os-card-outer{width:52px;height:52px;grid-row:1/3}
  .os-location-children .os-card{width:52px;height:52px;aspect-ratio:1;border-radius:8px}
  .os-location-children .os-card-tab{display:none}
  .os-location-children .os-name-actions-row{grid-column:2;align-self:end}
  .os-location-children .os-icon-label{font-size:15px}
  .os-location-children .os-icon-count{grid-column:2;align-self:start;font-size:var(--fs-xs)}
  .os-location-children .os-name-actions-row>.lpk-add{display:none}
  .os-location-children .os-icon-cam{opacity:1;right:0;top:0;width:22px;height:22px}
  .os-location-chevron{display:block;grid-column:3;grid-row:1/3;text-align:center;color:var(--muted);font-size:24px}
  .os-location-sticky{position:sticky;bottom:calc(70px + env(safe-area-inset-bottom,0px));display:flex;gap:10px;z-index:20;background:var(--surface);border:1px solid var(--line);border-radius:12px;padding:10px;margin-top:24px;box-shadow:var(--shadow)}
  .os-location-sticky>.btn{flex:1;min-height:44px}
}
.os-card-img{position:relative;overflow:hidden;width:100%;height:100%}
.os-card-ph{width:100%;height:100%;display:flex;align-items:center;justify-content:center}
.os-card-ph svg{opacity:.4;width:38px;height:38px}
.os-icon-label{font-size:var(--fs-control);font-weight:500;line-height:1.3;max-width:100%;word-break:break-word;color:var(--ink);padding:0 2px}
.os-icon-count{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);padding:0 2px}
.os-items-wrap{display:grid;grid-template-columns:repeat(auto-fill,minmax(var(--os-item-w,148px),1fr));gap:var(--os-item-gap,11px)}
.sortbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;margin-bottom:14px}
.sortbar-txt{flex:1;min-width:0;font-size:var(--fs-control);color:var(--ink-2);line-height:1.4}
.sortbar-txt b{color:var(--ink);font-weight:600}
.sortbar-go{flex:0 0 auto;cursor:pointer}
.sortbar-go:hover{filter:brightness(1.05)}
.cp-hero{display:flex;flex-direction:column;gap:10px;margin-bottom:20px}
.cp-hero-img{width:100%;aspect-ratio:4/3;object-fit:cover;object-position:center;border-radius:var(--r-md);background:var(--surface-2)}
.cp-strip{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;padding-bottom:4px;margin-bottom:16px}
.cp-strip::-webkit-scrollbar{display:none}
.cp-strip-img{flex:0 0 auto;height:120px;width:auto;max-width:200px;object-fit:cover;border-radius:var(--r-sm);cursor:pointer}
.cp-strip-img:first-child{border:2px solid var(--accent)}
.os-icon-cam{position:absolute;top:8px;right:8px;width:26px;height:26px;border-radius:50%;background:rgba(0,0,0,.55);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;color:#fff;opacity:0;transition:opacity var(--t-base);cursor:pointer;z-index:4;border:none;padding:0}
.os-icon:hover .os-icon-cam{opacity:1}
@media(pointer:coarse){.os-icon-cam{opacity:.8}}
.os-new-folder{display:flex;flex-direction:column;gap:8px;cursor:pointer;position:relative;background:none;border:none;padding:0;font-family:inherit;text-align:left}
.os-nf-card{aspect-ratio:4/3;border-radius:var(--r-md);border:2px dashed var(--line);display:flex;align-items:center;justify-content:center;color:var(--muted);transition:border-color var(--t-base),background var(--t-base)}
.os-new-folder:hover .os-nf-card{border-color:var(--accent);background:color-mix(in oklab,var(--accent),transparent 91%);color:var(--accent-ink)}
.os-nf-card svg{width:28px;height:28px;opacity:.5}
.os-nf-label{font-size:var(--fs-control);font-weight:500;color:var(--muted);padding:0 2px}
.os-new-folder:hover .os-nf-label{color:var(--accent-ink)}
.os-name-actions-row{display:flex;align-items:center;gap:var(--s-1);min-width:var(--s-0)}
.os-name-actions-row>.os-icon-label{flex:1;min-width:var(--s-0)}
.os-name-actions-row>.lpk-add{flex:0 0 var(--target-min);min-width:var(--target-min)}
@media (hover:hover) and (pointer:fine){
  .os-name-actions-row>.lpk-add{opacity:0}
  .os-icon:hover .os-name-actions-row>.lpk-add,.os-icon:focus-within .os-name-actions-row>.lpk-add{opacity:1}
  .vhead:hover>.lpk-add,.vhead:focus-within>.lpk-add,
  .loc-space-hd:hover>.lpk-add,.loc-space-hd:focus-within>.lpk-add{opacity:1}
}
@media (hover:none),(any-pointer:coarse){
  .os-name-actions-row>.lpk-add,.loc-card .loc-name-row>.lpk-add,
  .vhead>.lpk-add,.loc-space-hd>.lpk-add{opacity:1}
}
.os-add-sub{display:flex;align-items:center;gap:7px;margin:20px auto 4px;padding:9px 16px;background:none;border:1px solid var(--line);border-radius:var(--r-md);color:var(--muted);font-family:inherit;font-size:var(--fs-sm);cursor:pointer;transition:border-color var(--t-base),color var(--t-base)}
.os-add-sub:hover{border-color:var(--accent);color:var(--accent-ink)}
.os-add-sub svg{opacity:.7}
.os-desktop>.lpk-create-row,.os-icon-grid>.lpk-create-row{grid-column:1/-1}
.os-expand-row{grid-column:1/-1;background:color-mix(in oklab,var(--surface-2),transparent 45%);border-left:3px solid color-mix(in oklab,var(--accent),transparent 55%);border-radius:0 var(--r-md) var(--r-md) 0;padding:16px 16px 16px 18px;margin:2px 0 4px}
.os-expand-row .os-icon-grid{grid-template-columns:repeat(auto-fill,minmax(var(--thumb-md,130px),1fr));gap:var(--os-item-gap,11px)}
.os-icon.os-expanded .os-card{outline:2px solid color-mix(in oklab,var(--accent),transparent 35%);outline-offset:2px}
.os-ctx-menu{position:fixed;display:flex;flex-direction:column;gap:2px;min-width:136px;z-index:9999}
.os-ctx-menu button{border:none;background:none;color:var(--ink);font-family:var(--font-ui);font-size:var(--fs-sm);font-weight:500;padding:7px 12px;border-radius:var(--r-sm);text-align:left;cursor:pointer;display:flex;align-items:center;gap:9px;width:100%}
.os-ctx-menu button:hover{background:var(--surface-2)}
.ctx-sec{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--faint);padding:7px 10px 3px;font-weight:var(--fw-semi)}
.os-ctx-menu .ctx-on{color:var(--accent-ink);font-weight:600}
.loc-card .loc-name-row{display:flex;align-items:center;gap:var(--s-1);min-width:0}
.loc-card .loc-name-row .loc-cname{flex:1;min-width:0}
.loc-card .loc-name-row>.lpk-add{flex:0 0 var(--target-min);min-width:var(--target-min)}
@media (hover:hover) and (pointer:fine){
  .loc-card .loc-name-row>.lpk-add{opacity:0}
  .loc-card:hover .loc-name-row>.lpk-add,.loc-card:focus-within .loc-name-row>.lpk-add{opacity:1}
}
.setup-menu-pop{
  max-height:calc(100dvh - var(--setup-menu-top-offset,0px) - var(--s-4));
  overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;
  z-index:var(--z-modal);
}
.vf-scrim.setup-menu-scrim{z-index:var(--z-scrim)}
body.setup-menu-open .scroller{overflow-y:hidden;touch-action:none}
.view-menu-float{}
.sm-acct{font-size:var(--fs-micro);color:var(--muted);padding:6px 12px 2px;line-height:1.4}
.sm-grp{font-size:var(--fs-micro);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:8px 12px 2px;pointer-events:none;user-select:none}
.sm-sep{height:1px;background:var(--line);margin:4px 0}
.sm-foot{font-size:var(--fs-xs);color:var(--faint);padding:10px 12px 8px;line-height:1.5;border-top:1px solid var(--line);margin-top:4px;font-family:var(--font-ui);letter-spacing:.02em}
.m-hdrop{display:none;gap:5px}
.mh-l{font-weight:600}
.m-hdrop.v-hidden{display:none!important}
@media(max-width:560px){.os-icon-grid{grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:14px}.os-desktop{padding:16px 14px 24px}}
@media(max-width:700px){
  .setup-menu-pop{
    top:auto!important;left:0!important;right:0!important;bottom:0!important;
    min-width:0!important;max-height:calc(100dvh - var(--s-4));
    border-radius:var(--r-lg) var(--r-lg) 0 0;
  }
  .os-icon-grid{grid-template-columns:repeat(2,1fr);gap:10px}
  .os-icon{gap:5px}
  .os-card{aspect-ratio:2/1}
  .os-card-ph svg{width:28px;height:28px}
  .os-card-tab{bottom:-3px;left:3px;right:-3px;top:3px}
  .os-icon-label{font-size:var(--fs-xs);padding:0 1px}
  .os-icon-count{font-size:var(--fs-xs);padding:0 1px}
}

/* ------------------- PHOTOS LAYOUT ------------------- */
.ph-toolbar{display:flex;align-items:center;gap:8px;padding:10px 2px 8px;position:sticky;top:-2px;background:var(--bg);z-index:5;border-bottom:1px solid var(--line);margin-bottom:2px}
@media (max-width:1024px), (any-pointer:coarse){.ph-toolbar{display:none}}
.ph-size-pop{position:absolute;top:calc(100% + 6px);right:0;display:none;align-items:center;gap:8px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);padding:7px 9px;box-shadow:var(--shadow);z-index:40}
.ph-size.open .ph-size-pop{display:flex}
.ph-den-label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-right:2px;font-weight:var(--fw-semi)}
.ph-den-btn{width:28px;height:28px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);font-size:var(--fs-lg);cursor:pointer;display:grid;place-items:center;flex-shrink:0;line-height:1;padding:0}
.ph-den-btn:hover:not(:disabled){background:var(--surface-2)}
.ph-den-btn:disabled{opacity:.3;cursor:default}
.ph-pips{display:flex;gap:5px;align-items:center;padding:0 2px}
.ph-den-pip{width:6px;height:6px;border-radius:50%;background:var(--line-2);transition:background var(--t-base),transform var(--t-base)}
.ph-den-pip.on{background:var(--accent);transform:scale(1.3)}

/* ------------------- NICE FINDS ------------------- */
.nf-photo-slot{width:100%;aspect-ratio:4/3;background:var(--surface-2);border:2px dashed var(--line-2);border-radius:var(--r-md);display:flex;align-items:center;justify-content:center;cursor:pointer;overflow:hidden;position:relative;transition:border-color var(--t-base)}
.nf-photo-slot:hover{border-color:var(--accent)}
.nf-photo-slot img.nf-prev{width:100%;height:100%;object-fit:cover;display:block;position:absolute;inset:0}
.nf-slot-hint{display:flex;flex-direction:column;align-items:center;gap:9px;color:var(--muted);pointer-events:none}
.nf-slot-hint svg{width:38px;height:38px;opacity:.45}
.nf-slot-hint span{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;font-weight:var(--fw-semi)}
.nf-form{display:flex;flex-direction:column;gap:14px}
.nf-field{display:flex;flex-direction:column;gap:6px}
.nf-field label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}
.nf-field input{width:100%;padding:10px 13px;font-weight:500;box-sizing:border-box}
.nf-field input:focus{border-color:var(--accent)}
.nf-actions{display:flex;gap:10px;margin-top:2px}
.nf-actions .tbtn{flex:1;height:44px;font-size:var(--fs-control)}
.nf-has-photo .nf-slot-hint{display:none}
.nf-uploading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;background:rgba(0,0,0,.18);font-family:var(--font-ui);font-size:var(--fs-xs);color:#fff;letter-spacing:.05em}

/* ------------------------------ move-to picker ------------------------------ */
.mvpk-list{display:flex;flex-direction:column;gap:1px;max-height:55vh;overflow-y:auto}
.mvpk-space{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--faint);padding:12px 16px 4px;pointer-events:none;user-select:none;font-weight:var(--fw-semi)}
.mvpk-row{display:flex;align-items:center;gap:10px;border:none;background:none;color:var(--ink);font-family:var(--font-display),inherit;font-size:var(--fs-control);font-weight:500;padding:9px 16px;border-radius:var(--r-sm);text-align:left;width:100%;cursor:pointer;transition:background var(--t-fast);line-height:1.3}
.mvpk-row:hover{background:var(--surface-2)}
.mvpk-con{padding-left:34px;font-size:var(--fs-sm);color:var(--ink-2)}
.mvpk-loose{color:var(--muted)}
.mvpk-cur{font-weight:700;color:var(--accent-ink)}
.lpk-row{display:flex;align-items:center;gap:var(--s-0)}
.lpk-row>.mvpk-row{flex:1;min-width:0}
.lpk-add{flex:0 0 var(--target-min);min-width:var(--target-min);min-height:var(--target-min);border:none;background:none;color:var(--muted);font:var(--fw-medium) var(--fs-md)/1 var(--font-ui);cursor:pointer;padding:var(--s-0);border-radius:var(--r-xs);opacity:1;transition:opacity var(--t-fast);display:flex;align-items:center;justify-content:center}
.lpk-add:hover{background:var(--surface-2);color:var(--ink)}
@media (hover:hover) and (pointer:fine){
  .lpk-add{opacity:0}
  .lpk-row:hover>.lpk-add,.lpk-row:focus-within>.lpk-add{opacity:1}
}
@media (hover:none),(any-pointer:coarse){.lpk-add{opacity:1}}
.lpk-body{padding:var(--s-0)}
.lpk-list{padding:var(--s-2) var(--s-0)}
.lpk-folder{padding-inline-start:calc(var(--s-4) + var(--lpk-depth,0)*var(--s-4));min-height:var(--target-min);overflow-wrap:anywhere}
.lpk-new-top{color:var(--muted);font-size:var(--fs-sm);min-height:var(--target-min)}
.lpk-new-location{color:var(--accent-ink);font-weight:var(--fw-bold)}
.lpk-create-row{padding:var(--s-1) var(--s-4);padding-inline-start:calc(var(--s-4) + var(--lpk-depth,0)*var(--s-4));min-width:var(--s-0)}
.lpk-create-input{box-sizing:border-box;width:100%;min-width:var(--s-0);min-height:var(--target-min);padding:var(--s-2) var(--s-3);border:var(--s-0);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font:var(--fw-regular) var(--fs-md) var(--font-ui)}
.lpk-create-error{color:var(--danger-ink);font-size:var(--fs-sm);margin-block-start:var(--s-1)}
.lpk-create-error:empty{display:none}
.location-rename-name{display:flex;align-items:center;min-height:var(--target-min);-webkit-touch-callout:none;user-select:none;touch-action:manipulation}
.location-rename-name[hidden]{display:none}
.location-inline-rename{box-sizing:border-box;display:block;min-width:var(--s-0);padding:var(--s-0)}
.location-inline-rename .lpk-create-input{min-height:var(--target-min);padding-inline:var(--s-2)}
.loc-name-row>.location-inline-rename{flex:1;min-width:var(--s-0)}
.os-name-actions-row>.location-inline-rename{flex:1;min-width:var(--s-0);width:auto}
.loc-pick-btn{display:flex;align-items:center;justify-content:space-between;gap:8px;width:100%;border:1px solid var(--border);background:var(--surface);color:var(--ink);font-family:inherit;font-size:var(--fs-control);padding:8px 12px;border-radius:var(--r-sm);cursor:pointer;text-align:left;min-height:38px;transition:border-color var(--t-base)}
.loc-pick-btn:hover{border-color:var(--accent)}
.loc-pick-btn .lpb-chevron{font-size:var(--fs-micro);color:var(--muted);flex-shrink:0}
.mvpk-note{padding:20px 16px;color:var(--muted);font-size:var(--fs-sm);text-align:center;line-height:1.5}
/* merge modal */
.mrg-row{padding:10px 0;border-bottom:1px solid rgba(128,128,128,.15)}
.mrg-row:last-child{border-bottom:none}
.mrg-row.mrg-same{display:flex;align-items:flex-start;gap:10px;flex-wrap:wrap}
.mrg-lbl{font-size:var(--fs-micro);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);min-width:80px;padding-top:3px}
.mrg-val{flex:1;font-size:var(--fs-control);word-break:break-word}
.mrg-opts{display:flex;flex-direction:column;gap:5px;margin-top:5px}
.mrg-pick{text-align:left;padding:9px 12px;border-radius:var(--r-sm);border:1.5px solid var(--line);background:var(--surface);color:var(--ink);cursor:pointer;font:inherit;font-size:var(--fs-sm);width:100%;word-break:break-word;transition:border-color var(--t-fast),background var(--t-fast)}
.mrg-pick:hover{border-color:var(--line-2)}
.mrg-pick.mrg-active{border-color:var(--accent);background:rgba(207,90,38,.09)}
.mrg-from{display:block;font-size:var(--fs-nano);font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);margin-bottom:3px}
.mrg-pick.mrg-active .mrg-from{color:var(--accent-ink)}
.mrg-photos{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px}
.mrg-ph{width:60px;height:60px;object-fit:cover;border-radius:var(--r-sm);border:1.5px solid var(--line)}
.mrg-act-link{display:block;width:100%;min-height:var(--target-min);padding:var(--s-2) 0;text-align:center;background:none;border:none;color:var(--ink-2);font:inherit;font-size:var(--fs-sm);font-weight:var(--fw-semi);cursor:pointer}
.mrg-act-link.mrg-act-danger{color:var(--danger-ink)}
.mrg-act-link:hover{opacity:1;color:var(--ink)}

/* ------------------------------ linked gear ------------------------------ */
.lnk-chips{display:flex;flex-wrap:wrap;gap:6px;min-height:24px;margin-top:4px}
.lnk-chip{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-ui);font-size:var(--fs-xs);background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);border-radius:var(--r-xs);padding:3px 7px}
.lnk-chip .lrm{border:none;background:none;padding:0 0 0 2px;cursor:pointer;color:var(--muted);font-size:var(--fs-xs);line-height:1;display:flex;align-items:center}
.lnk-chip .lrm:hover{color:var(--ink)}
.lnk-acc-btn{font-size:var(--fs-xs)!important;opacity:.55;transition:var(--t-fast)}
.lnk-acc-btn.active{opacity:1;color:var(--accent-ink)!important}
.ph-acc-badge{position:absolute;top:4px;right:4px;background:rgba(0,0,0,.62);color:#fff;font-size:var(--fs-micro);font-weight:700;font-family:var(--font-mono);border-radius:var(--r-xs);padding:2px 5px;pointer-events:none;line-height:1.3}
.lnk-rchip{background:var(--surface-2);border:1px solid var(--line);color:var(--ink-2);border-radius:var(--r-xs);padding:3px 8px;cursor:pointer;display:inline-flex;align-items:center;gap:5px}
.lnk-rchip:hover{border-color:var(--accent);color:var(--accent-ink)}
.spot-pick{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.spot-chip{background:var(--chip-bg);border:1px solid var(--line);color:var(--ink-2);border-radius:var(--r-sm);padding:6px 10px;font-size:var(--fs-sm);font-weight:600;cursor:pointer;transition:var(--t-fast)}
.spot-chip:hover{color:var(--ink);border-color:var(--line-2)}
.spot-chip.on{background:var(--accent-strong);color:var(--on-accent);border-color:var(--accent)}
.spot-add{padding:6px 10px;min-width:120px}
.spot-hint{font-size:var(--fs-xs);color:var(--faint)}
.spot-chip-ed{display:inline-flex;align-items:center;gap:2px;background:var(--chip-bg);border:1px solid var(--line);border-radius:var(--r-sm);padding:0}
.spot-rn{background:none;border:none;color:var(--ink-2);font:inherit;font-size:var(--fs-sm);font-weight:600;padding:6px 4px 6px 10px;cursor:pointer}
.spot-rm{background:none;border:none;color:var(--muted);font-size:var(--fs-xs);line-height:1;padding:6px 7px;cursor:pointer}
.spot-rm:hover{color:var(--danger,#e05)}
.spot-edit-tog{background:none;border:1px dashed var(--line-2);color:var(--muted);border-radius:var(--r-sm);padding:5px 9px;font-size:var(--fs-xs);font-weight:600;cursor:pointer}
.spot-edit-tog:hover{color:var(--ink)}
/* ---- chip pickers (tags / uses fields) ---- */
.cp-wrap{display:flex;flex-direction:column;gap:7px}
.cp-chips{display:flex;flex-wrap:wrap;gap:6px}
.cp-sel{display:inline-flex;align-items:center;gap:5px;background:var(--ink);color:var(--surface);border-radius:var(--r-sm);padding:4px 6px 4px 10px;font-size:var(--fs-sm);font-weight:600;line-height:1.3;white-space:nowrap}
[data-theme="workshop"] .cp-sel{color:var(--bg)}
.cp-sel button{border:none;background:rgba(255,255,255,.2);color:inherit;border-radius:50%;width:16px;height:16px;padding:0;cursor:pointer;font-size:var(--fs-micro);line-height:1;display:flex;align-items:center;justify-content:center;flex-shrink:0;transition:background var(--t-fast)}
[data-theme="workshop"] .cp-sel button{background:rgba(0,0,0,.18)}
.cp-sel button:hover{background:rgba(255,255,255,.42)!important}
.cp-sug{background:var(--surface-2);border:1px dashed var(--line);color:var(--ink-2);border-radius:var(--r-sm);padding:4px 10px;font-size:var(--fs-sm);cursor:pointer;display:inline-flex;align-items:center;transition:border-color var(--t-fast),color var(--t-fast);white-space:nowrap;font-weight:500}
.cp-sug:hover{border-color:var(--line-2);color:var(--ink)}
.cp-inp-row{display:flex;align-items:center;border:1px solid var(--line);border-radius:var(--r-sm);padding:5px 10px;background:var(--surface-2)}
.cp-inp{border:none;background:none;color:var(--ink);width:100%;font-family:inherit;padding:0;line-height:1.4}
.cp-inp::placeholder{color:var(--muted)}
.lnk-srch{width:100%;padding:7px 10px;margin-top:6px;box-sizing:border-box}
.lnk-srch:focus{border-color:var(--accent)}
.lnk-dd{position:absolute;left:0;right:0;z-index:40;max-height:200px;overflow-y:auto;margin-top:2px}
.lnk-dd button{display:flex;align-items:center;gap:10px;width:100%;border:none;background:none;color:var(--ink);font-size:var(--fs-sm);font-weight:500;padding:8px 10px;border-radius:var(--r-sm);text-align:left;cursor:pointer}
.lnk-dd button:hover{background:var(--surface-2)}

/* ------------------------------ kit suggestion banner ------------------------------ */
.kit-suggest{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:12px 14px;display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:12px}
.kit-suggest-label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);flex-shrink:0;font-weight:var(--fw-semi)}
.kit-sugg-chip{background:var(--surface);border:1px solid var(--line-2);color:var(--ink);font-size:var(--fs-sm);font-weight:500;border-radius:var(--r-xl);padding:5px 12px;cursor:pointer;white-space:nowrap}
.kit-sugg-chip:hover{border-color:var(--accent);color:var(--accent-ink)}
.kit-sugg-add{cursor:pointer;white-space:nowrap}
.kit-sugg-x{background:none;border:none;color:var(--muted);cursor:pointer;padding:4px 6px;font-size:var(--fs-md);margin-left:auto;flex-shrink:0}
.kit-sugg-x:hover{color:var(--ink)}
.lbtn-rm{color:var(--muted)!important;font-size:var(--fs-base);padding:4px 8px!important;margin-left:4px}
.lbtn-rm:hover{color:var(--ink)!important;background:var(--surface-2)}

/* ------------------------------ FAB (hidden on desktop) ------------------------------ */
.mob-fab{
  display:none;position:fixed;bottom:90px;right:16px;z-index:200;
  width:52px;height:52px;border-radius:50%;border:none;cursor:pointer;
  background:var(--accent-strong);color:var(--on-accent);
  align-items:center;justify-content:center;
  box-shadow:0 4px 20px -4px color-mix(in oklab,var(--accent),transparent 28%),0 2px 10px rgba(0,0,0,.35);
  transition:transform var(--t-fast),box-shadow var(--t-fast);
}
.mob-fab:active{transform:scale(.91)}
.mob-fab svg{width:22px;height:22px;display:block}

/* ------------------------------ mobile (≤640px) ------------------------------ */
@media (max-width:1024px), (any-pointer:coarse){
  /* spacebar tighter */
  .spacebar{padding:5px 12px 0}

  /* topbar: drop fixed height, wrap views to a second row */
  .topbar{height:auto;flex-wrap:wrap;align-items:center;padding:8px 12px 0;gap:8px;row-gap:0}
  .brand .wm{display:none}
  .brand{order:0;padding-bottom:8px;flex:0 0 auto}
  .search{order:1;flex:1 1 0;min-width:0;padding-bottom:8px}
  .actions{order:2;flex:0 0 100%;min-width:0;display:flex;flex-wrap:wrap;overflow:visible;gap:6px;padding-bottom:8px;}
  .actions::-webkit-scrollbar{display:none}
  .actions>*{flex:0 0 auto}
  #authEmail{display:none}
  .topbar,.subbar,.spacebar{max-width:100%;min-width:0}
  #addBtn{display:inline-flex;align-items:center}
  #roomScanBtn{display:none}
  #authChip.shelf-account{display:flex;max-width:100%;margin-left:auto}
  #views{display:none!important}
  #mLayoutBtn{display:none!important}
  .ov-l{display:none}
  #ovBtn{padding:6px 9px}
  .seg button{padding:5px 8px}
  .m-hdrop{display:inline-flex;align-items:center}
  .m-hdrop.v-hidden{display:none!important}
  #themeBtn{width:36px;height:36px;padding:0;justify-content:center}

  /* views strip: bleeds edge-to-edge, scrollable, flat */
  .views{
    order:3;flex:0 0 calc(100% + 24px);margin-left:-12px;margin-right:-12px;
    padding:5px 12px;border-radius:0;background:transparent;
    border:none;border-top:1px solid var(--line);
    overflow-x:auto;scrollbar-width:none;justify-content:flex-start;
  }
  .views::-webkit-scrollbar{display:none}
  .views button{padding:5px 10px;font-size:var(--fs-xs);flex-shrink:0}
  .views button.on{background:var(--surface-2)}
  [data-theme="workshop"] .views button.on{background:var(--surface-3)}

  /* search input shorter */
  .search input{padding:7px 12px 7px 34px}
  .search svg{left:11px;width:15px;height:15px}

  /* subbar tighter */
  .subbar{padding:5px 12px;min-height:0;flex-wrap:wrap;row-gap:6px}
  .wallctl{gap:6px}

  /* FAB replaced by inline Add button */
  .mob-fab{display:none}

  .scroller{padding-bottom:84px}
}

/* iPad / tablet: same compaction, but use the extra width — keep Add inline, drop the FAB */
@media (min-width:641px) and (any-pointer:coarse), (min-width:641px) and (max-width:1024px){
  .actions{flex:1 1 100%;max-width:100%;width:auto;overflow:visible;padding-bottom:8px}
  #addBtn{display:flex}
  .mob-fab{display:none}
  .scroller{padding-bottom:84px}
}

/* ------------------------------ View/Filter + Dock-More bottom sheets ------------------------------ */
#mVFBtn{display:none}
.vf-scrim{position:fixed;inset:0;z-index:150;background:var(--scrim);opacity:0;pointer-events:none;transition:opacity var(--t-base);-webkit-backdrop-filter:var(--scrim-blur);backdrop-filter:var(--scrim-blur)}
.vf-scrim.show{opacity:1;pointer-events:auto}
/* Closed sheets are translated off-screen but were still focusable — a keyboard
   user tabbing the page fell into 11 invisible controls. visibility:hidden takes
   them out of the tab order; it is delayed so the slide-out still animates. */
.vf-sheet{visibility:hidden;transition:transform var(--t-slow) var(--ease),visibility 0s linear var(--t-slow);position:fixed;left:0;right:0;bottom:0;z-index:151;background:var(--surface);border-top:1px solid var(--line);border-radius:var(--r-lg) var(--r-lg) 0 0;box-shadow:var(--shadow-lg);transform:translateY(100%);display:flex;flex-direction:column;max-height:88dvh;overflow:hidden}
.vf-sheet.show{transform:translateY(0);visibility:visible;transition:transform var(--t-slow) var(--ease),visibility 0s}
.vf-handle{width:36px;height:4px;border-radius:var(--r-xs);background:var(--line-2);margin:12px auto 4px;flex-shrink:0}
.vf-sheet-title{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:4px 20px 12px;flex-shrink:0;font-weight:var(--fw-semi)}
.vf-body{overflow-y:auto;padding:0 16px;display:flex;flex-direction:column;padding-bottom:max(24px,env(safe-area-inset-bottom))}
.vf-section{padding:10px 0 8px}
.vf-label{font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:600;letter-spacing:0;color:var(--muted);margin-bottom:9px}
.vf-pills{display:flex;flex-wrap:wrap;gap:8px}
.vf-pill{height:38px;padding:0 15px;border:1px solid var(--line);background:var(--surface-2);color:var(--ink-2);border-radius:var(--r-md);font-size:var(--fs-sm);font-weight:600;display:inline-flex;align-items:center;gap:6px;transition:var(--t-fast);white-space:nowrap;cursor:pointer}
.vf-pill:hover{color:var(--ink);border-color:var(--line-2)}
.vf-pill.on{background:var(--accent-strong);color:var(--on-accent);border-color:var(--accent)}
.vf-sep{height:1px;background:var(--line);margin:4px 0}
.dm-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:10px 16px max(20px,env(safe-area-inset-bottom))}
.dm-btn{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;padding:14px 8px;border:1px solid var(--line);background:var(--surface-2);border-radius:var(--r-md);font-size:var(--fs-xs);font-weight:600;color:var(--ink-2);min-height:72px;transition:var(--t-fast);cursor:pointer}
.dm-btn:hover{background:var(--surface-3);color:var(--ink)}
.dm-btn svg{width:22px;height:22px;flex:0 0 auto}
  .lend-sheet-body{overflow-y:auto;padding:8px 18px 0;display:flex;flex-direction:column;gap:18px}
  .lend-sheet-section{display:flex;flex-direction:column;gap:9px}
  .lend-sheet-label{font:var(--fs-xs) var(--font-ui);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}
  .lend-people{display:flex;gap:8px;overflow-x:auto;padding-bottom:3px;scrollbar-width:none}
  .lend-people::-webkit-scrollbar{display:none}
  .lend-person{flex:0 0 auto;display:flex;align-items:center;gap:8px;max-width:210px;padding:9px 12px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);color:var(--ink-2);font-weight:600}
  .lend-person.on{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--surface));color:var(--ink)}
  .lend-avatar{width:28px;height:28px;border-radius:50%;display:grid;place-items:center;background:var(--surface-3);font:800 var(--fs-micro) var(--font-display);flex:0 0 auto}
  .lend-input{width:100%;box-sizing:border-box;background:var(--surface-2);border:1px solid var(--line-2);border-radius:var(--r-md);padding:12px;color:var(--ink);font-family:inherit}
  .lend-date-row{display:flex;gap:8px;flex-wrap:wrap}
  .lend-date-row .vf-pill{height:36px;padding:0 12px}
  .lend-summary{padding:13px 14px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--line);font-size:var(--fs-sm);line-height:1.45;color:var(--ink-2)}
  .lend-sheet-foot{display:flex;gap:9px;padding:14px 18px max(14px,env(safe-area-inset-bottom));border-top:1px solid var(--line);margin-top:16px}
  .lend-sheet-foot .btn{flex:1;justify-content:center}

/* ------------------------------ phone layout (≤700px) ------------------------------ */
@media(max-width:700px){
  /* single-row topbar: [mark] [search···] [+Add] [Filters▾] */
  .topbar{flex-wrap:nowrap;padding:6px 10px;gap:8px;min-height:0;row-gap:0}
  .vhead{display:none!important}
  .vhead.kit-mobile-head{display:flex!important;align-items:flex-start;gap:12px;margin-bottom:16px}
  .vhead.kit-detail-head{display:flex!important}
  /* Match the scroller's 30px top padding so rows cannot show above the pinned bar. */
  .kit-detail-backbar{display:flex;position:sticky;top:-30px;z-index:10;align-items:center;min-height:var(--target-min);padding:var(--s-2) 0;margin-bottom:var(--s-3);background:var(--bg);border-bottom:1px solid var(--line)}
  .kit-detail-backbar .tbtn{min-height:var(--target-min);max-width:100%;white-space:normal;text-align:left}
  .vhead.kit-mobile-head>div{max-width:100%}
  .brand{order:0;padding-bottom:0;flex:0 0 auto}
  .search{order:1;flex:1 1 auto;min-width:0;max-width:none;padding-bottom:0}
  .actions{order:2;flex:0 0 auto;width:auto;overflow:visible;padding-bottom:0;display:flex!important;gap:6px;flex-wrap:nowrap;align-items:center}
  .actions>*{display:none!important}
  #addBtn{display:inline-flex!important}
  #mVFBtn{display:inline-flex!important;gap:5px;padding:0 11px}
  /* hide subbar & views — content moves to VF sheet */
  #viewDropBtn{display:none!important}
  .views{display:none!important}
  .subbar{display:none!important}
  /* spacebar: keep but compact */
  .spacebar{padding:0 10px!important;border-bottom:1px solid var(--line)}
  .sp-tab{font-size:var(--fs-xs);padding:3px 10px}
  /* Locations thumbnail scale on small phones */
  :root{
    --thumb-sm:clamp(96px,26vw,120px);
    --thumb-md:clamp(110px,30vw,148px);
    --thumb-lg:clamp(130px,38vw,180px);
    --os-item-gap:8px; --os-folder-gap:12px;
  }
  /* Locations: tighter item cards — fits 3 cols on most phones */
  .os-items-wrap{grid-template-columns:repeat(auto-fill,minmax(clamp(108px,28vw,150px),1fr))!important;gap:8px!important}
  /* Locations: folder icons — 2-3 cols */
  .os-icon-grid{grid-template-columns:repeat(auto-fill,minmax(clamp(120px,34vw,165px),1fr))!important;gap:12px!important}
  .os-icon-label{font-size:var(--fs-xs)}
  .os-icon-count{font-size:var(--fs-xs)}
}

/* ------------------------------ mobile item detail (≤700px) ------------------------------ */
@media(max-width:700px){
  /* Panel: slides up from bottom instead of right */
  .panel{top:auto;bottom:0;right:0;left:0;width:100%;max-width:100%;
    height:92dvh;border-left:none;border-top:1px solid var(--line);
    border-radius:var(--r-lg) var(--r-lg) 0 0;overflow:hidden;
    transform:translateY(calc(100% + 2px))}
  .panel.show{transform:translateY(0)}
  /* compact panel header with drag handle */
  .pc-head{padding:8px 16px 8px;position:relative}
  .pc-head::before{content:"";display:block;width:36px;height:4px;border-radius:var(--r-xs);
    background:var(--line-2);margin:0 auto 8px}
  /* Hero photo: fixed compact height, always cover-cropped, no letterbox */
  .panel .photo-slot{border-radius:0!important;border:none!important;
    border-bottom:1px solid var(--line)!important;overflow:hidden!important;
    height:200px!important;aspect-ratio:unset!important}
  /* Force cover fill — absolute fill bypasses grid percentage-height ambiguity */
  .panel .photo-slot>img{position:absolute!important;inset:0!important;
    width:100%!important;height:100%!important;
    object-fit:cover!important;object-position:center!important;
    max-height:none!important;display:block!important}
  #readPhotoSlot{
    aspect-ratio:4/3!important;
    height:auto!important;
    width:100%!important;
    flex:0 0 auto!important;
    box-sizing:border-box!important;
    overflow:hidden!important;
    position:relative!important;
    border-radius:0!important;
    border:none!important;
    border-bottom:1px solid var(--line)!important;
  }
  #readPhotoSlot>img{
    position:absolute!important;
    inset:0!important;
    width:100%!important;
    height:100%!important;
    object-fit:cover!important;
    object-position:center!important;
  }
  /* Hide the multi-photo strip; hero is enough for read mode */
  .panel .photo-strip{display:block}
  /* Name block: add breathing room after the hero, tighter font */
  .panel .read-title{font-size:var(--fs-lg)}
  .panel #pcBody>div:has(.read-title){padding:14px 18px 4px}
  /* footer safe-area padding on mobile */
  .panel .pc-foot{padding-bottom:max(12px,env(safe-area-inset-bottom))}
  /* mobile action bar (appended to #panel as flex sibling of #pcFoot) */
  #mItemBar{display:flex;gap:8px;
    padding:10px 14px max(10px,env(safe-area-inset-bottom));
    border-top:1px solid var(--line);background:var(--surface);flex:0 0 auto}
  #mItemBar .btn{flex:0 0 auto;min-width:max-content;justify-content:center;text-align:center;white-space:nowrap}
  #mItemBar #mMoreBtn{margin-right:auto}
  /* collapsible section wrapper */
  .m-coll{border-top:1px solid var(--line)}
  .m-coll-hdr{appearance:none;border:0;background:transparent;box-sizing:border-box;width:100%;min-height:44px;text-align:left;display:flex;align-items:center;justify-content:space-between;
    padding:13px 0;cursor:pointer;-webkit-tap-highlight-color:transparent;
    user-select:none;font-family:var(--font-ui);font-size:var(--fs-xs);
    letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:var(--fw-semi)}
  .m-coll-hdr .m-chv{transition:transform var(--t-base);flex:0 0 auto}
  .m-coll.open .m-coll-hdr .m-chv{transform:rotate(180deg)}
  .m-coll-body{display:none;padding-bottom:14px}
  .m-coll.open .m-coll-body{display:block}
}

body[data-booting] #stage{visibility:hidden}
body[data-booting] header,body[data-booting] .subbar{pointer-events:none;opacity:.5}
body[data-booting]::after{content:"";position:fixed;top:50%;left:50%;transform:translate(-50%,-50%);width:26px;height:26px;border:2px solid var(--line-2);border-top-color:var(--accent);border-radius:50%;animation:boot-spin var(--t-slow) linear infinite;z-index:9999}
@keyframes boot-spin{to{transform:translate(-50%,-50%) rotate(360deg)}}
#authChip{display:none;align-items:center;gap:6px;flex-shrink:0}
#authEmail{font-size:var(--fs-micro);font-family:var(--font-mono);color:var(--muted);letter-spacing:.03em;max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* ------------------- SUBSCRIPTIONS ------------------- */
.subs-wrap{padding:24px 20px 80px;width:100%}
.subs-header{background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-lg);padding:22px 24px;margin-bottom:24px;display:flex;align-items:center;gap:16px}
.subs-total-label{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:6px;font-weight:var(--fw-semi)}
.subs-total-mo{font-family:var(--font-display);font-weight:800;font-size:var(--fs-2xl);color:var(--accent-ink);line-height:1}
.subs-total-yr{font-size:var(--fs-xs);color:var(--ink-2);margin-top:5px;font-family:var(--font-mono)}
.subs-empty{text-align:center;padding:60px 20px;color:var(--muted)}
.subs-empty h3{font-size:var(--fs-md);margin-bottom:8px;color:var(--ink-2);font-weight:700}
.subs-section-hd{display:flex;align-items:baseline;gap:10px;margin:0 0 12px}
.subs-section-hd strong{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);font-weight:var(--fw-semi)}
.subs-section-hd span{font-size:var(--fs-xs);color:var(--muted)}
.subs-section{margin-bottom:28px}
.subs-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(min(100%,360px),1fr));gap:8px;min-height:56px;border-radius:var(--r-md);transition:box-shadow var(--t-base),background var(--t-base)}
.sub-drop-zone.sub-drop-over{background:color-mix(in srgb,var(--accent) 8%,transparent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 50%,transparent);outline:2px dashed color-mix(in srgb,var(--accent) 60%,transparent);outline-offset:2px}
.sub-row[draggable="true"]{cursor:grab}.sub-row[draggable="true"]:active{cursor:grabbing}
.sub-row{display:flex;align-items:center;gap:14px;padding:12px 16px;border:1px solid var(--line);border-radius:var(--r-md);cursor:pointer;background:var(--surface);transition:border-color var(--t-base),box-shadow var(--t-base)}
.sub-row:hover{border-color:var(--line-2);box-shadow:var(--shadow)}
.sub-icon{width:40px;height:40px;border-radius:var(--r-md);display:flex;align-items:center;justify-content:center;flex-shrink:0;font-family:var(--font-display);font-weight:800;font-size:var(--fs-control);color:#fff;overflow:hidden;letter-spacing:-.02em}
.sub-icon img{width:22px;height:22px;object-fit:contain}
.sub-name{font-weight:600;font-size:var(--fs-base)}
.sub-meta{font-size:var(--fs-micro);color:var(--muted);margin-top:2px}
.sub-cost-main{font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:700}
.sub-cost-eq{font-size:var(--fs-micro);color:var(--muted);font-family:var(--font-mono)}
.sub-del{background:none;border:none;color:var(--muted);cursor:pointer;padding:4px 8px;font-size:var(--fs-control);opacity:.45;line-height:1;flex-shrink:0}
.sub-del:hover{opacity:1;color:var(--danger,#e05)}
.icon-grid{display:grid;grid-template-columns:repeat(6,1fr);gap:6px;margin:4px 0 14px}
.icon-grid .icon-tile{aspect-ratio:1;border-radius:var(--r-sm);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:2px solid transparent;cursor:pointer;background:var(--surface-2);transition:border-color var(--t-fast),background var(--t-fast);padding:4px}
.icon-grid .icon-tile:hover{border-color:var(--line-2)}
.icon-grid .icon-tile.picked{border-color:var(--accent);background:color-mix(in oklab,var(--accent),transparent 84%)}
.icon-grid .icon-tile img{width:20px;height:20px;object-fit:contain}
.icon-grid .icon-tile-lbl{font-size:var(--fs-xs);font-family:var(--font-ui);color:var(--muted);text-align:center;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;width:100%;padding:0 2px;line-height:1.2}
.subs-rev{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}
.subs-rev-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.subs-rev-head strong{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);font-weight:var(--fw-semi)}
.subs-rev-head span{font-size:var(--fs-micro);color:var(--muted)}
.sub-rev-row{display:grid;grid-template-columns:20px 28px 1fr 74px 90px 78px;gap:7px;align-items:center;padding:5px 2px;border-bottom:1px solid var(--line)}
.sub-rev-row.off{opacity:.38}
.sub-rev-icon{width:28px;height:28px;border-radius:var(--r-sm);background:var(--surface-2);display:flex;align-items:center;justify-content:center;overflow:hidden}
.sub-rev-icon img{width:16px;height:16px;object-fit:contain}
.sub-rev-cost{font-size:var(--fs-xs);font-family:var(--font-mono)}
.sub-rev-cycle{font-size:var(--fs-xs)}
.sub-rev-slug{font-size:var(--fs-micro);font-family:var(--font-mono)}

/* ===== LANDING (logged-out pro storefront) ===== */
#landing{display:none;min-height:100vh;background:radial-gradient(1200px 720px at 88% -10%,rgba(207,90,38,.06),transparent 60%),radial-gradient(900px 600px at 6% 8%,rgba(207,90,38,.035),transparent 55%),#14110b;color:#efe7d6;font-family:var(--font-ui);-webkit-font-smoothing:antialiased}
#landing *{box-sizing:border-box;margin:0;padding:0}
#landing a{color:inherit;text-decoration:none}
#landing button{font-family:inherit;cursor:pointer;color:inherit;border:none;background:none}
#landing .lw{max-width:1180px;margin:0 auto;padding:0 24px}
#landing .l-nav{position:sticky;top:0;z-index:20;backdrop-filter:blur(12px);background:color-mix(in oklab,#14110b,transparent 22%);border-bottom:1px solid #332a1c}
#landing .l-nav-in{display:flex;align-items:center;justify-content:space-between;height:64px}
#landing .l-brand{display:flex;align-items:center;gap:11px}
#landing .l-brand > .landing-lockup{height:32px;width:auto;display:block;max-width:none;flex-shrink:0}
#landing .l-mark{width:34px;height:34px;border-radius:var(--r-sm);background:var(--accent-strong);display:grid;place-items:center;box-shadow:0 6px 18px -8px var(--accent)}
#landing .l-mark svg{width:19px;height:19px}
#landing .l-wm{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);letter-spacing:-.01em;line-height:1}
#landing .l-wm small{display:block;font-family:var(--font-mono);font-weight:400;font-size:var(--fs-nano);letter-spacing:.22em;color:#8f8268;margin-top:3px}
#landing .l-nav-cta{display:flex;align-items:center;gap:10px}
#landing .lb{display:inline-flex;align-items:center;gap:8px;border-radius:var(--r-md);font-weight:700;font-size:var(--fs-control);padding:10px 18px;transition:var(--t-base);white-space:nowrap;border:1px solid transparent}
#landing .lb.ghost{border-color:#433726;color:#c3b69d}
#landing .lb.ghost:hover{border-color:#574832;color:#efe7d6}
#landing .lb.primary{background:var(--accent-strong);color:var(--on-accent);box-shadow:0 10px 26px -12px var(--accent)}
#landing .lb.primary:hover{transform:translateY(-1px);box-shadow:0 16px 34px -14px var(--accent)}
#landing .lb.lg{padding:14px 26px;font-size:var(--fs-md)}
#landing .l-hero{padding:64px 0 36px;display:grid;grid-template-columns:1.04fr 1fr;gap:54px;align-items:center}
#landing .l-eye{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink);margin-bottom:20px;font-weight:var(--fw-semi)}
#landing .l-h1{font-family:var(--font-display);font-weight:900;letter-spacing:-.02em;line-height:1.02;font-size:clamp(38px,5vw,62px);margin-bottom:20px}
#landing .l-h1 em{font-style:normal;color:var(--accent-ink)}
#landing .l-sub{font-size:var(--fs-md);line-height:1.55;color:#c3b69d;max-width:30em;margin-bottom:30px}
#landing .l-cta{display:flex;gap:12px;flex-wrap:wrap;align-items:center}
#landing .l-trust{margin-top:24px;font-family:var(--font-mono);font-size:var(--fs-micro);letter-spacing:.04em;color:#8f8268}
#landing .l-trust b{color:#c3b69d;font-weight:400}
#landing .lmock{background:#1a150e;border:1px solid #332a1c;border-radius:var(--r-lg);box-shadow:var(--shadow-lg);overflow:hidden;transform:perspective(1600px) rotateY(-6deg) rotateX(2deg);transition:transform var(--t-slow) var(--ease)}
#landing .lmock:hover{transform:perspective(1600px) rotateY(-2deg) rotateX(1deg)}
.l-hero-video{width:auto;height:min(61.2vh,527px);max-width:100%;aspect-ratio:914/1804;justify-self:center;border-radius:var(--r-xl);overflow:hidden;background:#0c0a06;border:1px solid #332a1c;box-shadow:var(--shadow-lg)}
.l-hero-video video{width:100%;height:100%;object-fit:contain;display:block;background:#0c0a06}
#landing .lmock-bar{display:flex;align-items:center;gap:6px;padding:11px 14px;border-bottom:1px solid #332a1c;background:#211b13}
#landing .ltab{display:inline-flex;align-items:center;gap:7px;font-size:var(--fs-xs);font-weight:700;color:#efe7d6;padding:6px 11px;border-radius:var(--r-sm);background:#272015}
#landing .ltab.dim{background:transparent;color:#6c6250;font-size:var(--fs-micro);font-weight:600;opacity:.7;text-decoration:none;transition:opacity var(--t-base)}
#landing .ltab.dim:hover{opacity:1;color:#8f8268}
#landing .ltab .n{font-family:var(--font-mono);font-size:var(--fs-micro);color:var(--accent-ink);background:#1a150e;border-radius:var(--r-xs);padding:1px 5px}
#landing .lmock-body{padding:16px 16px 20px}
#landing .lsec{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.08em;text-transform:uppercase;color:#6c6250;margin:4px 2px 11px;display:flex;align-items:center;gap:8px;font-weight:var(--fw-semi)}
#landing .lsec .c{flex:1;height:1px;background:#332a1c}
#landing .lgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:11px}
#landing .ltile{background:#211b13;border:1px solid #332a1c;border-radius:var(--r-md);overflow:hidden;transition:transform var(--t-base),border-color var(--t-base)}
#landing .ltile:hover{transform:translateY(-2px);border-color:#433726}
#landing .ltile.lhero{grid-column:1/-1}
#landing .lph{aspect-ratio:16/11;background:#1a150e;position:relative;overflow:hidden;border-bottom:1px solid #332a1c}
#landing .ltile.lhero .lph{aspect-ratio:21/9}
#landing .lini{font-family:var(--font-display);font-weight:800;font-size:var(--fs-xl);color:#5a5141;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}
#landing .ltile.lhero .lini{font-size:44px}
#landing .lph img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
#landing .ltile.noimg .lph img{display:none}
#landing .ldot{position:absolute;top:8px;right:8px;width:9px;height:9px;border-radius:50%;border:2px solid #211b13}
#landing .ldot.home{background:#79b487} #landing .ldot.out{background:#d79a3e}
#landing .lmeta{padding:9px 10px 11px}
#landing .lnm{font-family:var(--font-display);font-weight:700;font-size:var(--fs-sm);line-height:1.15;margin-bottom:5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#landing .lln{font-family:var(--font-mono);font-size:var(--fs-micro);color:#8f8268}
#landing .lln.flag{color:#d2603a}
#landing .l-band{padding:34px 0 18px}
#landing .l-band-h{text-align:center;max-width:34em;margin:0 auto 40px}
#landing .l-band-h h2{font-family:var(--font-display);font-weight:800;font-size:clamp(28px,3.4vw,40px);letter-spacing:-.02em;line-height:1.08;margin-bottom:14px;color:#efe7d6}
#landing .l-band-h p{color:#c3b69d;font-size:var(--fs-md);line-height:1.5}
#landing .l-feats{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
#landing .l-feat{background:#1a150e;border:1px solid #332a1c;border-radius:var(--r-md);padding:22px 20px 24px;transition:var(--t-base)}
#landing .l-feat:hover{border-color:#433726;transform:translateY(-3px)}
#landing .l-feat .ic{width:40px;height:40px;border-radius:var(--r-md);background:#272015;border:1px solid #332a1c;display:grid;place-items:center;color:var(--accent-ink);margin-bottom:16px}
#landing .l-feat .ic svg{width:21px;height:21px;display:block;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#landing .l-feat h3{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);margin-bottom:8px;color:#efe7d6}
#landing .l-feat p{font-size:var(--fs-control);line-height:1.5;color:#c3b69d}
#landing .l-close{margin:64px 0 0;padding:56px 40px;text-align:center;border-radius:var(--r-xl);background:radial-gradient(700px 380px at 50% -30%,rgba(207,90,38,.16),transparent 65%),#1a150e;border:1px solid #332a1c}
#landing .l-close h2{font-family:var(--font-display);font-weight:900;font-size:clamp(30px,4vw,46px);letter-spacing:-.02em;line-height:1.04;margin-bottom:16px;color:#efe7d6}
#landing .l-close p{color:#c3b69d;font-size:var(--fs-md);margin-bottom:28px}
#landing .l-close .note{font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.04em;color:#8f8268;margin:20px 0 0}
#landing .l-foot{padding:36px 0 48px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;border-top:1px solid #332a1c;margin-top:56px}
#landing .l-foot span{font-family:var(--font-mono);font-size:var(--fs-micro);color:#8f8268;letter-spacing:.04em}
#landing .l-foot a{color:#c3b69d}
#landing .l-foot a:hover{color:var(--accent-ink)}
@media(max-width:900px){#landing .l-hero{grid-template-columns:1fr;gap:40px;padding:44px 0 24px}#landing .lmock{transform:none}#landing .lmock:hover{transform:none}#landing .l-feats{grid-template-columns:repeat(2,1fr)}}
@media(max-width:560px){#landing .l-brand > .landing-lockup{height:26px}#landing .l-feats{grid-template-columns:1fr}#landing .lgrid{grid-template-columns:repeat(2,1fr)}}
body[data-guest] .spacebar,
body[data-guest] .topbar,
body[data-guest] #stage,
body[data-guest] .scrim,
body[data-guest] #panel,
body[data-guest] .toast,
body[data-guest] .mob-fab,
body[data-guest] #dock,
body[data-guest] #modalOverlay,
body[data-guest] #belltray{display:none!important}
/* ===== HELP OVERLAY ===== */
#helpOverlay{position:fixed;inset:0;z-index:200;background:var(--bg);display:flex;flex-direction:column;overflow:hidden}
.help-head{display:flex;align-items:center;gap:12px;padding:14px 18px;border-bottom:1px solid var(--line);flex-shrink:0}
.help-head-title{font-size:var(--fs-md);font-weight:800;font-family:var(--font-display);letter-spacing:-.01em;flex:1}
.help-body{flex:1;overflow-y:auto;padding:24px 18px}
.help-inner{max-width:600px;margin:0 auto}
.help-sec{font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);padding:28px 0 10px;border-bottom:1px solid var(--line);margin-bottom:4px}
.help-sec:first-child{padding-top:4px}
.help-item{border-bottom:1px solid var(--line)}
.help-q{display:flex;align-items:center;justify-content:space-between;width:100%;padding:13px 0;background:none;border:none;color:var(--ink);font-family:var(--font-ui);font-size:var(--fs-control);font-weight:600;text-align:left;cursor:pointer;gap:12px}
.help-q:hover{color:var(--accent-ink)}
.help-chev{flex-shrink:0;width:16px;height:16px;stroke:var(--muted);fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform var(--t-base)}
.help-item.open .help-chev{transform:rotate(180deg)}
.help-a{display:none;padding:0 0 14px;color:var(--ink-2);font-size:var(--fs-control);line-height:1.6}
.help-item.open .help-a{display:block}
/* ===== FEEDBACK BETA ===== */
#fb-btn{display:none}
body[data-beta] #fb-btn{display:flex}
#fb-overlay{display:none;position:fixed;inset:0;z-index:200;background:var(--scrim);backdrop-filter:var(--scrim-blur);align-items:flex-end;justify-content:flex-end;padding:22px}
#fb-overlay.open{display:flex}
#fb-card{background:var(--surface-1,#1e1810);border:1px solid var(--border,#3d3020);border-radius:var(--r-lg);padding:22px;width:340px;max-width:calc(100vw - 44px);box-shadow:var(--shadow-lg)}
#fb-card h3{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);margin-bottom:14px;color:var(--text-1,#efe7d6)}
.fb-types{display:flex;gap:6px;margin-bottom:14px}
.fb-type{flex:1;padding:7px 4px;border-radius:var(--r-sm);border:1px solid var(--border,#3d3020);background:var(--surface-2,#2a2118);color:var(--text-2,#c3ae8f);font-family:var(--font-ui);font-size:var(--fs-xs);font-weight:700;letter-spacing:.04em;text-align:center;cursor:pointer;transition:var(--t-base)}
.fb-type:hover{border-color:var(--accent);color:var(--accent-ink)}
.fb-type.sel{background:var(--accent-strong);border-color:var(--accent);color:var(--on-accent)}
#fb-msg{width:100%;height:90px;resize:none;background:var(--surface-2,#2a2118);border:1px solid var(--border,#3d3020);border-radius:var(--r-sm);color:var(--text-1,#efe7d6);font-family:var(--font-ui);font-size:var(--fs-control);padding:10px 12px;transition:border-color var(--t-base);display:block}
#fb-msg:focus{border-color:var(--accent)}
#fb-msg::placeholder{color:var(--text-3,#8f7a60)}
.fb-foot{display:flex;align-items:center;justify-content:space-between;margin-top:12px}
#fb-cancel{background:none;border:none;color:var(--text-2,#c3ae8f);font-size:var(--fs-sm);cursor:pointer;padding:4px 8px;font-family:inherit}
#fb-cancel:hover{color:var(--text-1,#efe7d6)}
#fb-send{background:var(--accent-strong);color:var(--on-accent);border:none;border-radius:var(--r-sm);padding:9px 20px;font-family:var(--font-ui);font-weight:700;font-size:var(--fs-control);cursor:pointer;transition:background var(--t-base)}
#fb-send:hover:not(:disabled){background:#b84e20}
#fb-send:disabled{opacity:.5;cursor:not-allowed}
@media (min-width:641px){
  #addBtn{display:flex !important;}
  .mob-fab{display:none !important;}
}
.kit-rchips{display:flex;flex-wrap:wrap;gap:6px}
.kit-chip{display:inline-flex;align-items:center;gap:6px}
.kit-chip-x{background:none;border:none;color:var(--muted);cursor:pointer;font-size:var(--fs-micro);padding:0;line-height:1}
.kit-chip-x:hover{color:var(--ink)}
.kit-none{color:var(--muted);font-size:var(--fs-sm)}
.kit-add-sel{margin-top:6px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-sm);color:var(--ink);font-family:inherit;padding:7px 10px;max-width:100%}
.ph-cell.sel-on,.mtile.sel-on{outline:3px solid var(--accent);outline-offset:-3px;z-index:1}
.mtile{position:relative}
.sel-check{position:absolute;top:4px;left:4px;width:20px;height:20px;border-radius:50%;color:#fff;display:flex;align-items:center;justify-content:center;font-size:var(--fs-xs);font-weight:700;z-index:2;box-shadow:var(--shadow-sm)}
.selection-tile>.sel-check{position:absolute;top:4px;right:4px;left:auto;bottom:auto;width:20px;height:20px;box-sizing:border-box;margin:0;padding:0;transform:none;translate:none;z-index:3;accent-color:var(--accent);cursor:pointer}
.mtile.selection-tile>.sel-check{position:static;order:-1;flex:0 0 20px;min-width:0;min-height:0}
:is(.ph-cell.selection-tile>.sel-check,.shelf-select-checkbox){appearance:none;-webkit-appearance:none;top:0;right:0;width:44px;height:44px;border:0;border-radius:0;background:transparent;box-shadow:none}
.shelf-select-checkbox{position:relative;flex:0 0 44px;margin:0;cursor:pointer}
:is(.ph-cell.selection-tile>.sel-check,.shelf-select-checkbox)::before{content:"";position:absolute;top:6px;right:6px;width:22px;height:22px;box-sizing:border-box;border:2px solid #fff;border-radius:50%;background:rgba(0,0,0,.15);box-shadow:0 1px 4px rgba(0,0,0,.3);pointer-events:none}
:is(.ph-cell.selection-tile>.sel-check,.shelf-select-checkbox):checked::before{background:var(--accent)}
:is(.ph-cell.selection-tile>.sel-check,.shelf-select-checkbox):checked::after{content:"";position:absolute;top:11px;right:14px;width:5px;height:9px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg);pointer-events:none}
:is(.ph-cell.selection-tile>.sel-check,.shelf-select-checkbox):focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.ph-cell.selection-tile.sel-on{outline:3px solid var(--accent);outline-offset:-3px}
.sel-bar{position:fixed;left:50%;transform:translateX(-50%);bottom:calc(16px + env(safe-area-inset-bottom));z-index:600;display:flex;flex-wrap:nowrap;width:max-content;max-width:calc(100% - 24px);box-sizing:border-box;gap:6px;align-items:center;background:var(--surface);border:1px solid var(--line-strong);border-radius:var(--r-md);padding:8px;box-shadow:var(--shadow)}
.sel-bar .sel-count{font-weight:700;font-size:var(--type-body);white-space:nowrap;flex:0 0 auto}
.sel-bar .sel-actions-track>button{display:inline-flex;align-items:center;gap:5px}
.sel-bar .sel-actions-track>button svg{flex:none}
.sel-actions-wrap{position:relative;flex:1 1 auto;min-width:0}
.sel-actions{overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:thin}
.sel-actions-track{display:flex;gap:8px;width:max-content;padding-right:16px}
.sel-actions-wrap.can-scroll-right .sel-actions::after{content:"";position:absolute;right:0;top:0;bottom:0;width:24px;background:linear-gradient(to right,transparent,var(--surface));pointer-events:none}
.sel-bar #selDone{flex-shrink:0}
.sel-bar button{border:none;border-radius:var(--r-sm);padding:calc((var(--target-min) - 1lh)/2) 12px;font-size:var(--type-control);font-weight:600;font-family:inherit;cursor:pointer;background:var(--surface-2);color:var(--ink);white-space:nowrap;flex:0 0 auto}
body:has(> .sel-bar) #dock{display:none!important}
.sel-bar button.prim{background:var(--accent-strong);color:var(--on-accent)}
.sel-bar button.ghost{background:transparent;color:var(--muted)}
#demoBanner{display:none;position:fixed;top:0;left:0;right:0;z-index:9000;background:var(--surface-2);border-bottom:1px solid var(--line);color:var(--ink-2);font-size:var(--fs-sm);font-family:var(--font-ui);padding:7px 14px;gap:14px;align-items:center;grid-template-columns:minmax(0,1fr) auto minmax(0,1fr);min-height:36px}
body[data-demo] #demoBanner{display:grid}
body[data-demo] .spacebar{margin-top:36px}
#demoBanner a{color:var(--accent-ink);text-decoration:none;font-weight:600}
#demoBanner a:hover{text-decoration:underline}
.demo-banner-left{display:flex;align-items:center;gap:14px;min-width:0}
.demo-banner-back,.demo-banner-controls,.demo-banner-signup{white-space:nowrap}
.demo-banner-copy{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--ink-2)}
.demo-banner-controls{justify-self:center}
.demo-banner-signup{justify-self:end}
@media(max-width:700px){
  #demoBanner{padding:7px 8px;gap:8px;font-size:var(--fs-xs)}
  .demo-banner-copy{display:none}
  .demo-banner-left{gap:0}
}
#tourOverlay{display:none;position:fixed;inset:0;z-index:9500}
#tourRing{position:fixed;border-radius:var(--r-md);box-shadow:0 0 0 9999px rgba(8,5,2,.66),0 0 0 2px #cf5a26;transition:all var(--t-base) var(--ease);pointer-events:none}
#tourCard{position:fixed;background:#1a1410;border:1px solid #332a1c;border-radius:var(--r-md);padding:18px 18px 14px;box-shadow:var(--shadow-lg);font-family:var(--font-ui);color:#efe7d6;max-width:360px;transition:left var(--t-base),top var(--t-base)}
#tourTitle{font-family:var(--font-display);font-weight:800;font-size:var(--fs-md);letter-spacing:-.01em;margin-bottom:7px}
#tourBody{font-size:var(--fs-control);line-height:1.55;color:#c3b69d;margin-bottom:15px}
#tourFoot{display:flex;align-items:center;justify-content:space-between;gap:12px}
#tourSkip{background:none;border:none;color:var(--muted);font-size:var(--fs-sm);cursor:pointer;font-family:inherit;padding:4px 12px}
#tourSkip:hover{color:var(--ink-2)}
#tourNext{background:var(--accent-strong);color:var(--on-accent);border:none;border-radius:var(--r-sm);padding:9px 16px;font-size:var(--fs-sm);font-weight:700;cursor:pointer;font-family:inherit}
#tourNext:hover{background:var(--accent)}
#tourDots{display:flex;gap:6px}
#tourDots span{width:6px;height:6px;border-radius:50%;background:#433726}
#tourDots span.on{background:var(--accent-strong)}
.arch-list{display:flex;flex-direction:column;gap:10px;padding:0 0 40px}
.arch-card{display:flex;align-items:center;gap:14px;background:var(--surface,#211b13);border:1px solid var(--border,#332a1c);border-radius:var(--r-md);padding:14px 16px;transition:border-color var(--t-base)}
.arch-card:hover{border-color:#5a4630}
.arch-card-icon{flex-shrink:0;width:40px;height:40px;border-radius:var(--r-sm);background:rgba(207,90,38,.12);display:flex;align-items:center;justify-content:center;color:var(--accent-ink)}
.arch-card-icon svg{width:20px;height:20px}
.arch-card-body{flex:1;min-width:0}
.arch-card-name{font-family:var(--font-display);font-weight:700;font-size:var(--fs-base);letter-spacing:-.01em;color:var(--ink,#efe7d6);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin-bottom:3px}
.arch-card-meta{display:flex;align-items:center;gap:6px;font-size:var(--fs-xs);color:var(--muted,#8f7a60);margin-bottom:4px;flex-wrap:wrap}
.arch-label-code{font-family:var(--font-mono);font-size:var(--fs-micro);font-weight:700;color:var(--accent-ink);letter-spacing:.04em;background:rgba(207,90,38,.1);border-radius:var(--r-xs);padding:1px 6px}
.arch-unlabelled{color:var(--muted,#8f7a60) !important;background:transparent !important}
.arch-label-pending{color:var(--muted,#8f7a60) !important;background:rgba(143,122,96,.08) !important}
.arch-del-btn{color:var(--muted,#8f7a60) !important;padding:5px 7px !important;opacity:.55}
.arch-del-btn:hover{color:#e06060 !important;opacity:1}
.arch-label-hero{font-family:var(--font-mono);font-size:38px;font-weight:700;color:var(--accent-ink);letter-spacing:.08em;margin-bottom:14px}
.arch-meta-sep{opacity:.4}
.arch-loc{display:inline-flex;align-items:center;gap:3px;color:var(--muted,#8f7a60)}
.arch-card-projects{font-size:var(--fs-sm);color:var(--text-2,#c3ae8f);line-height:1.45}
.arch-dim{color:var(--muted,#8f7a60);font-style:italic}
.arch-search-wrap{margin-bottom:18px;position:relative}
.arch-search-wrap input{width:100%;box-sizing:border-box;padding:10px 38px 10px 14px}
.arch-search-wrap input:focus{border-color:var(--accent)}
.arch-search-wrap .arch-search-clear{position:absolute;right:10px;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--muted,#8f7a60);cursor:pointer;font-size:var(--fs-md);padding:2px 4px;line-height:1}
.arch-result-group{margin-bottom:22px}
.arch-result-drv{display:flex;align-items:flex-start;gap:10px;padding:10px 14px;background:var(--surface,#211b13);border-radius:var(--r-md) var(--r-md) 0 0;border:1.5px solid var(--border,#332a1c);border-bottom:none}
.arch-result-drv-info{flex:1;min-width:0}
.arch-result-drv-name{font-weight:700;font-size:var(--fs-control);color:var(--ink,#efe7d6)}
.arch-result-drv-meta{font-size:var(--fs-xs);color:var(--muted,#8f7a60);margin-top:2px}
.arch-result-files{border:1.5px solid var(--border,#332a1c);border-top:none;border-radius:0 0 var(--r-md) var(--r-md);overflow:hidden}
.arch-result-file{display:flex;align-items:center;gap:8px;padding:7px 14px;font-size:var(--fs-sm);color:var(--text-2,#c3ae8f);border-top:1px solid rgba(51,42,28,.5)}
.arch-result-file:first-child{border-top:none}
.arch-result-file .arch-result-path{color:var(--muted,#8f7a60);font-size:var(--fs-micro);margin-top:1px}
.arch-result-more{padding:7px 14px;font-size:var(--fs-xs);color:var(--accent-ink);cursor:pointer;background:none;border:none;border-top:1px solid rgba(51,42,28,.5);width:100%;text-align:left;font-family:inherit}
.arch-result-more:hover{background:rgba(207,90,38,.06)}
/* ---- drive browse ---- */
#drvBrowseWrap{display:flex;flex-direction:column;height:100%;min-height:300px}
.drv-browse-bar{padding:12px 16px 8px;border-bottom:1px solid var(--border,#332a1c)}
.drv-browse-bar input{width:100%;box-sizing:border-box;padding:7px 11px}
.drv-browse-bar input:focus{border-color:var(--accent)}
.drv-browse-crumb{display:flex;align-items:center;flex-wrap:wrap;gap:1px;padding:7px 12px;border-bottom:1px solid var(--border,#332a1c);min-height:34px}
.drv-crumb-seg{background:none;border:none;color:var(--muted,#8f7a60);font-size:var(--fs-xs);cursor:pointer;padding:2px 5px;border-radius:var(--r-xs);font-family:inherit;white-space:nowrap}
.drv-crumb-seg:hover{color:var(--text,#efe7d6);background:rgba(255,255,255,.06)}
.drv-crumb-seg.drv-crumb-active{color:var(--text,#efe7d6);cursor:default;font-weight:500}
.drv-crumb-sep{color:var(--border,#332a1c);font-size:var(--fs-micro);padding:0 1px;user-select:none}
.drv-browse-tree{flex:1;overflow-y:auto;padding:4px 0}
.drv-browse-loading,.drv-browse-empty{padding:18px 18px;color:var(--muted,#8f7a60);font-size:var(--fs-sm);font-style:italic}
.drv-row{display:flex;align-items:center;gap:9px;padding:6px 16px;font-size:var(--fs-sm);width:100%;border:none;background:none;font-family:inherit;cursor:default;color:var(--text-2,#c3ae8f);text-align:left;line-height:1.4}
button.drv-row{cursor:pointer}
button.drv-row:hover{background:rgba(207,90,38,.07)}
.drv-arr{width:12px;font-size:var(--fs-nano);color:var(--muted,#8f7a60);flex-shrink:0;text-align:center}
.drv-ri{flex-shrink:0;color:var(--muted,#8f7a60);display:flex;align-items:center}
.drv-rn{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.drv-row.drv-dir .drv-rn{color:var(--text,#efe7d6);font-weight:500}
.drv-search-path{font-size:var(--fs-micro);color:var(--muted,#8f7a60);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:160px;flex-shrink:0}
.arch-search-status{font-size:var(--fs-sm);color:var(--muted,#8f7a60);margin-bottom:14px}
.arch-type-row{display:flex;gap:4px;margin:-4px 0 16px;flex-wrap:wrap}
.arch-type-btn{border:1px solid var(--border,#332a1c);background:transparent;color:var(--muted,#8f7a60);border-radius:var(--r-sm);padding:5px 11px;font-size:var(--fs-xs);font-weight:600;font-family:inherit;cursor:pointer;transition:var(--t-fast);line-height:1}
.arch-type-btn:hover{color:var(--ink,#efe7d6);border-color:var(--line-strong,#4a3d2a)}
.arch-type-btn.on{background:var(--accent-strong);color:var(--on-accent);border-color:var(--accent)}
.drv-type-row{display:flex;gap:4px;padding:6px 16px 8px;flex-wrap:wrap;border-bottom:1px solid var(--border,#332a1c)}
.drv-type-btn{border:1px solid var(--border,#332a1c);background:transparent;color:var(--muted,#8f7a60);border-radius:var(--r-xs);padding:4px 9px;font-size:var(--fs-xs);font-weight:600;font-family:inherit;cursor:pointer;transition:var(--t-fast);line-height:1}
.drv-type-btn:hover{color:var(--ink,#efe7d6)}
.drv-type-btn.on{background:var(--accent-strong);color:var(--on-accent);border-color:var(--accent)}
/* client tag chips */
.drv-tag-chip{display:inline-flex;align-items:center;gap:4px;background:rgba(207,90,38,.1);border:1px solid rgba(207,90,38,.28);color:var(--accent-ink);border-radius:var(--r-xl);padding:2px 9px;font-size:var(--fs-xs);font-weight:600;line-height:1.6;white-space:nowrap}
.drv-tag-chip .drv-tag-x{background:none;border:none;color:inherit;opacity:.6;cursor:pointer;padding:0;line-height:1;font-size:var(--fs-micro);font-family:inherit}
.drv-tag-chip .drv-tag-x:hover{opacity:1}
.arch-card-tags{display:flex;flex-wrap:wrap;gap:5px;margin-top:7px}
.arch-tag-suggest-row{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0 4px}
.arch-tag-suggest-item{border:1px solid var(--border,#332a1c);border-radius:var(--r-sm);padding:5px 10px;font-size:var(--fs-sm);cursor:pointer;background:transparent;color:var(--muted,#8f7a60);font-family:inherit;transition:var(--t-fast);line-height:1;white-space:nowrap}
.arch-tag-suggest-item:hover{border-color:var(--accent);color:var(--ink,#efe7d6)}
.arch-tag-suggest-item.checked{background:rgba(207,90,38,.12);border-color:rgba(207,90,38,.45);color:var(--ink,#efe7d6)}
.arch-tag-suggest-item.checked::before{content:"✓\00a0";font-size:var(--fs-micro);color:var(--accent-ink)}
.arch-tag-add-row{display:flex;gap:7px;margin-top:8px}
.arch-tag-add-inp{flex:1;padding:7px 11px}
.arch-tag-add-inp:focus{border-color:var(--accent)}
.arch-tag-manual-chips{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;min-height:2px}
.arch-panel-tag-add{background:none;border:1.5px dashed var(--border,#332a1c);border-radius:var(--r-xl);color:var(--muted,#8f7a60);font-size:var(--fs-xs);padding:2px 9px;cursor:pointer;font-family:inherit;transition:var(--t-fast);line-height:1.6;white-space:nowrap}
.arch-panel-tag-add:hover{border-color:var(--accent);color:var(--accent-ink)}
.arch-tag-match-section{margin-bottom:16px}
.arch-tag-match-label{font-size:var(--fs-micro);font-weight:700;color:var(--muted,#8f7a60);text-transform:uppercase;letter-spacing:.06em;margin-bottom:7px}
.arch-tag-match-card{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--surface,#211b13);border:1.5px solid var(--border,#332a1c);border-radius:var(--r-md);margin-bottom:6px;cursor:default;transition:border-color var(--t-base)}
.arch-tag-match-card.clickable{cursor:pointer}
.arch-tag-match-card.clickable:hover{border-color:var(--accent)}
.arch-tag-match-name{font-weight:700;font-size:var(--fs-control);color:var(--ink,#efe7d6)}
.arch-tag-match-meta{font-size:var(--fs-xs);color:var(--muted,#8f7a60);margin-top:3px;display:flex;align-items:center;gap:6px}
.arch-card-right{flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:8px}
.arch-last-scanned{font-size:var(--fs-xs);color:var(--muted,#8f7a60);white-space:nowrap}
.arch-scan-btn{font-size:var(--fs-xs) !important;padding:7px 11px !important;display:inline-flex;align-items:center;gap:5px}
.arch-card.arch-card-clickable{cursor:pointer;transition:border-color var(--t-base)}
.arch-card.arch-card-clickable:hover{border-color:var(--accent)}
.arch-detail-header{background:var(--surface,#211b13);border:1.5px solid var(--border,#332a1c);border-radius:var(--r-md);padding:18px 20px;margin-bottom:18px}
.arch-detail-header-top{display:flex;align-items:flex-start;gap:14px}
.arch-detail-icon{flex-shrink:0;color:var(--muted,#8f7a60);margin-top:2px}
.arch-detail-name{font-size:var(--fs-md);font-weight:700;color:var(--ink,#efe7d6)}
.arch-detail-meta{font-size:var(--fs-xs);color:var(--muted,#8f7a60);margin-top:4px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.arch-detail-summary{font-size:var(--fs-sm);color:var(--text-2,#c3ae8f);margin-top:10px;line-height:1.5}
.arch-breadcrumb{display:flex;align-items:center;gap:4px;flex-wrap:wrap;font-size:var(--fs-sm);margin-bottom:14px;color:var(--muted,#8f7a60)}
.arch-breadcrumb-seg{color:var(--accent-ink);cursor:pointer;background:none;border:none;font-family:inherit;font-size:inherit;padding:2px 4px;border-radius:var(--r-xs)}
.arch-breadcrumb-seg:hover{background:rgba(207,90,38,.1)}
.arch-breadcrumb-sep{opacity:.5}
.arch-breadcrumb-cur{color:var(--ink,#efe7d6);padding:2px 4px}
.arch-tree{border:1.5px solid var(--border,#332a1c);border-radius:var(--r-md);overflow:hidden}
.arch-tree-row{display:flex;align-items:center;gap:8px;padding:8px 14px;font-size:var(--fs-sm);color:var(--text-2,#c3ae8f);border-top:1px solid rgba(51,42,28,.4);cursor:default;user-select:none}
.arch-tree-row:first-child{border-top:none}
.arch-tree-row.arch-tree-dir{cursor:pointer;color:var(--ink,#efe7d6)}
.arch-tree-row.arch-tree-dir:hover{background:rgba(207,90,38,.06)}
.arch-tree-row.arch-tree-open{background:rgba(207,90,38,.04)}
.arch-tree-children{border-top:1px solid rgba(51,42,28,.4)}
.arch-tree-loading{padding:10px 14px;font-size:var(--fs-sm);color:var(--muted,#8f7a60);font-style:italic}
.arch-tree-empty{padding:14px;font-size:var(--fs-sm);color:var(--muted,#8f7a60);font-style:italic;text-align:center}
.arch-back-btn{display:inline-flex;align-items:center;gap:6px;margin-bottom:16px;font-size:var(--fs-sm);color:var(--muted,#8f7a60);cursor:pointer;background:none;border:none;font-family:inherit;padding:0}
.arch-back-btn:hover{color:var(--ink,#efe7d6)}
.drv-panel-icon{display:flex;align-items:center;justify-content:center;height:100%;color:var(--muted,#8f7a60)}
/* ── migrate / column-mapper ── */
.mig-source-btns{display:flex;flex-wrap:wrap;gap:8px;margin-top:6px}
.mig-source-btn{flex:1 1 180px;min-width:0;padding:11px 13px;border:1.5px solid var(--line,#332a1c);border-radius:var(--r-md);background:var(--surface,#211b13);color:var(--ink,#efe7d6);font-family:inherit;font-size:var(--fs-sm);cursor:pointer;text-align:left;line-height:1.45;transition:border-color var(--t-base),background var(--t-base)}
.mig-source-btn:hover{border-color:var(--accent);background:var(--surface-2,#2a2118)}
.mig-source-btn strong{display:block;font-size:var(--fs-control);margin-bottom:3px}
.mig-source-btn span{color:var(--muted,#8f7a60);font-size:var(--fs-xs)}
.modal-card.enrichment-modal{width:min(780px,94vw);max-height:min(900px,90vh)}
.enrichment-body{gap:12px}
.enrichment-guide{display:flex;flex-direction:column;gap:6px;padding:11px 12px;border:1px solid color-mix(in srgb,var(--accent) 35%,var(--line));border-radius:var(--r-md);background:color-mix(in srgb,var(--accent) 7%,var(--surface))}
.enrichment-guide strong{font:700 var(--fs-xs) var(--font-ui);letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink)}
.enrichment-guide code{display:block;overflow-x:auto;padding:7px 8px;border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font:var(--fs-xs) var(--font-mono);white-space:nowrap}
.enrichment-guide span{font-size:var(--fs-xs);color:var(--ink-2);line-height:1.5}
.enrichment-download{align-self:flex-start;padding:8px 11px;border:1px solid var(--line-strong);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-2);font:600 var(--fs-xs) var(--font-ui);cursor:pointer}
.enrichment-download:hover{border-color:var(--accent);color:var(--ink)}
.enrichment-download:disabled{opacity:.55;cursor:wait}
.enrichment-drop{cursor:pointer;min-height:86px;box-sizing:border-box}
.enrichment-drop[hidden],.enrichment-preview[hidden]{display:none}
.enrichment-status{display:flex;align-items:center;gap:9px;min-height:20px;color:var(--ink-2);font-size:var(--fs-xs);line-height:1.45;overflow-wrap:anywhere}
.enrichment-status:is(.enrichment-error,.enrichment-success){padding:var(--s-3);border:1px solid currentColor;border-radius:var(--r-sm);font-size:var(--fs-sm);line-height:var(--lh-body)}
.enrichment-status.enrichment-error{color:var(--danger-ink);background:color-mix(in srgb,var(--danger) 10%,var(--surface))}
.enrichment-status.enrichment-success{color:var(--ok-ink);background:color-mix(in srgb,var(--ok) 10%,var(--surface))}
.enrichment-spinner{width:var(--icon-md);height:var(--icon-md);flex:none;animation:spin calc(3 * var(--t-slow)) linear infinite}
@media(prefers-reduced-motion:reduce){.enrichment-spinner{animation:none}}
.enrichment-retry{flex:0 0 auto;padding:6px 9px;border:1px solid currentColor;border-radius:var(--r-sm);background:transparent;color:inherit;font:600 var(--fs-xs) var(--font-ui);cursor:pointer}
.enrichment-preview{display:flex;flex-direction:column;gap:8px;max-height:42vh;overflow-y:auto;padding-top:8px;border-top:1px solid var(--line)}
.enrichment-counts{display:flex;flex-wrap:wrap;gap:5px 14px;font-size:var(--fs-xs);color:var(--ink-2)}
.enrichment-counts strong{color:var(--ink)}
.enrichment-no-creates,.enrichment-no-changes{margin:0;color:var(--muted);font-size:var(--fs-xs);line-height:1.45}
.enrichment-change{padding:10px;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2)}
.enrichment-change.enrichment-status-conflict{border-color:color-mix(in srgb,var(--danger,#c0392b) 45%,var(--line))}
.enrichment-change.enrichment-status-skipped{opacity:.82}
.enrichment-change-head{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:6px;color:var(--ink);font-size:var(--fs-sm)}
.enrichment-item-id{font:var(--fs-micro) var(--font-mono);color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.enrichment-row-meta{display:flex;flex-wrap:wrap;gap:5px 12px;margin:-2px 0 7px;color:var(--muted);font-size:var(--fs-micro);line-height:1.4}
.enrichment-row-meta>span:first-child{font-weight:700;color:var(--ink-2)}
.enrichment-field-change{display:grid;grid-template-columns:auto minmax(94px,.7fr) minmax(0,1fr) auto minmax(0,1fr);gap:6px;align-items:baseline;color:var(--ink-2);font-size:var(--fs-xs);padding:4px 0;cursor:pointer}
.enrichment-field-change input{width:15px;height:15px;margin:0;accent-color:var(--accent);align-self:center}
.enrichment-field-label{font-weight:600;color:var(--muted)}
.enrichment-value{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.enrichment-value.new{color:var(--accent-ink);font-weight:600}
.enrichment-arrow{color:var(--muted);text-align:center}
.enrichment-skipped{display:flex;flex-direction:column;gap:5px;padding:9px 10px;border:1px dashed var(--line-strong);border-radius:var(--r-sm);font-size:var(--fs-xs);color:var(--ink-2)}
.enrichment-skipped strong{color:var(--ink)}
.enrichment-skipped div{display:flex;gap:8px;justify-content:space-between;border-top:1px solid var(--line);padding-top:5px}
.enrichment-skipped div span:first-child{font-family:var(--font-mono);color:var(--muted);overflow:hidden;text-overflow:ellipsis}
@media(max-width:700px){
  .mig-source-btn{flex-basis:100%}
  .modal-card.enrichment-modal{width:100%;height:100%;max-height:100%;border-radius:0}
  .enrichment-preview{max-height:none}
  .enrichment-field-change{grid-template-columns:auto 1fr;gap:3px 7px}
  .enrichment-field-label{grid-column:2}
  .enrichment-field-change .enrichment-value{grid-column:2;white-space:normal;overflow:visible;overflow-wrap:anywhere}
  .enrichment-arrow{display:none}
  .enrichment-skipped div{display:block}
}
.col-map-wrap{overflow-x:auto;margin:8px 0}
.col-map-table{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}
.col-map-table th{text-align:left;padding:6px 10px;color:var(--ink-2,#c3ae8f);font-weight:600;border-bottom:1.5px solid var(--line,#332a1c);font-size:var(--fs-xs);text-transform:uppercase;letter-spacing:.05em}
.col-map-table td{padding:6px 10px;border-bottom:1px solid var(--line,#332a1c)}
.col-map-col{color:var(--ink,#efe7d6);font-weight:500;white-space:nowrap}
.col-map-sample{color:var(--muted,#8f7a60);font-size:var(--fs-xs);max-width:140px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.col-map-sel{width:100%;padding:5px 7px;cursor:pointer}
.col-map-sel:focus{border-color:var(--accent)}
.mig-depth{margin:10px 0 0;padding:10px 12px;background:var(--surface-2,#2a2118);border-radius:var(--r-sm);font-size:var(--fs-sm)}
.mig-depth label{display:flex;align-items:center;gap:8px;cursor:pointer;color:var(--ink,#efe7d6);line-height:1.4}
.mig-depth input[type=checkbox]{accent-color:var(--accent);width:14px;height:14px;flex-shrink:0}
.mig-space-row{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:var(--fs-sm);color:var(--ink-2,#c3ae8f)}
.mig-space-sel{padding:5px 9px;background:var(--surface,#211b13);border:1.5px solid var(--line,#332a1c);border-radius:var(--r-sm);color:var(--ink,#efe7d6);font-family:inherit;cursor:pointer}
/* ---- accessory peek popover ---- */
.acc-peek{position:fixed;z-index:9100;min-width:190px;max-width:290px;pointer-events:auto}
.acc-peek-title{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:9px;font-weight:var(--fw-semi)}
.acc-peek-list{display:flex;flex-direction:column;gap:5px;margin-bottom:10px}
.acc-peek-row{font-size:var(--fs-control);font-weight:500;color:var(--ink);display:flex;align-items:center;gap:8px;line-height:1.3}
.acc-peek-row::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--muted);flex-shrink:0}
.acc-peek-open{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.06em;text-transform:uppercase;color:var(--accent-ink);background:none;border:none;cursor:pointer;padding:0;display:block;width:100%;text-align:left;border-top:1px solid var(--line);padding-top:9px;margin-top:2px;font-weight:var(--fw-semi)}
.acc-peek-open:hover{opacity:.78}
/* card accessory badge (main wall) */
.card-acc-badge{position:absolute;top:7px;right:7px;background:rgba(0,0,0,.65);color:#fff;font-size:var(--fs-micro);font-weight:700;font-family:var(--font-mono);border-radius:var(--r-xs);padding:2px 6px;line-height:1.3;cursor:pointer;z-index:2}
/* ---- acc section in detail panel ---- */
.acc-list-row{font-size:var(--fs-control);font-weight:500;color:var(--ink);display:flex;align-items:center;gap:8px;cursor:pointer;padding:3px 0;border-radius:var(--r-xs);line-height:1.3}
.acc-list-row:hover{color:var(--accent-ink)}
.acc-list-row::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--muted);flex-shrink:0}
.acc-none{color:var(--muted);font-size:var(--fs-sm);margin-bottom:6px}
.acc-add-row{display:flex;gap:7px;margin-top:8px}
.acc-add-inp{flex:1;min-width:0;padding:6px 10px}
.acc-add-inp:focus{border-color:var(--line-2,#4a3c28)}
.acc-add-btn{cursor:pointer;white-space:nowrap;flex-shrink:0}
/* ---- Scan Drawer ---- */
.sd-card{display:flex;align-items:flex-start;gap:10px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px}
.sd-conf{width:8px;height:8px;border-radius:50%;flex-shrink:0;margin-top:8px}
.sd-fields{flex:1;display:flex;flex-direction:column;gap:5px;min-width:0}
.sd-name{width:100%;padding:6px 8px;font-weight:600}
.sd-name:focus{border-color:var(--accent)}
.sd-row2{display:flex;gap:6px}
.sd-cat{flex:1;padding:5px 6px;min-width:0}
.sd-type{width:100px;padding:5px 8px}
.sd-del{flex-shrink:0;width:26px;height:26px;border:none;border-radius:var(--r-xs);background:transparent;color:var(--muted);font-size:var(--fs-sm);cursor:pointer;margin-top:1px;line-height:1}
.sd-del:hover{background:var(--surface-3);color:#e44}
.sd-evidence{font-family:var(--font-ui);font-size:var(--fs-xs);color:var(--muted);letter-spacing:.02em;font-style:italic}
.sd-card-actions{display:flex;flex-direction:column;gap:4px;flex-shrink:0;margin-top:1px}
.sd-add-btn{width:26px;height:26px;border:1.5px solid rgba(61,179,106,.5);border-radius:var(--r-xs);background:transparent;color:rgba(61,179,106,.8);font-size:var(--fs-md);line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;font-weight:700}
.sd-add-btn:hover{background:rgba(61,179,106,.12);border-color:#3db36a;color:#3db36a}
.sd-poss-card{opacity:.7}
.sd-poss-head{font-family:var(--font-ui);font-size:var(--fs-xs);letter-spacing:.07em;text-transform:uppercase;color:var(--muted);padding:10px 16px 8px;border-top:1px solid var(--line);cursor:pointer;display:flex;align-items:center;gap:6px;user-select:none;font-weight:var(--fw-semi)}
.sd-poss-head:hover{color:var(--ink)}
.sd-spinner{width:36px;height:36px;border:3px solid var(--line);border-top-color:var(--accent);border-radius:50%;animation:sd-spin var(--t-slow) linear infinite;flex-shrink:0}
@keyframes sd-spin{to{transform:rotate(360deg)}}
@media(max-width:700px){
  #wallctl .seg,
  #mLayoutBtn,
  #mWhereBtn,
  #viewDropBtn,
  #tipsBtn,
  #importNavBtn,
  #exportCsvBtn,
  #importUpdateBtn { display:none !important; }
  #dockHomeBtn{display:none!important}
}
.grp-bar{display:none}
#dockShelfBtn,#dockCaptureBtn,#dockActivityBtn{display:none}
@media(max-width:700px){
  .topbar .brand{display:none!important}
  .topbar .search{flex:1;min-width:0}
  .topbar .search input{font-size:var(--fs-md);padding-top:12px;padding-bottom:12px}
  #mVFBtn{flex:0 0 auto;padding:10px 12px}
  .grp-bar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 0 10px}
  #grpBtn{font-size:var(--fs-base);padding:11px 16px;border-radius:var(--r-pill);font-weight:600}
  #grpBtn b{font-weight:700}
  .grp-count{font-family:var(--font-ui);font-size:var(--fs-control);color:var(--muted);white-space:nowrap}
  #filters.status-empty{display:none!important}
  #filters::-webkit-scrollbar{display:none}
  #dockShelfBtn,#dockCaptureBtn,#dockActivityBtn{display:flex}
  #dockScanBtn,#dockLocBtn,#mobFab,#addBtn{display:none!important}
  .dock .dbtn.m-dock .di{height:30px;width:auto;display:grid;place-items:center}
  .dock .dbtn.m-dock .di svg{width:20px;height:20px}
  #dockCaptureBtn .di{width:54px;background:var(--accent-strong);color:var(--on-accent);border-radius:var(--r-pill);padding:0}
  #dockCaptureBtn .di svg{width:18px;height:18px}
}

/* ------------------------------ QR sticker scanner ------------------------------ */
.qrscan-shell{position:fixed;inset:0;z-index:240;background:#0b0906;color:#fff;display:none;flex-direction:column}
.qrscan-shell.open{display:flex}
.qrscan-head{min-height:58px;display:flex;align-items:center;gap:12px;padding:calc(10px + env(safe-area-inset-top)) 16px 10px;background:rgba(11,9,6,.94);border-bottom:1px solid rgba(255,255,255,.12)}
.qrscan-head strong{font-family:var(--font-display);font-size:var(--fs-md)}.qrscan-head span{font-size:var(--fs-xs);color:rgba(255,255,255,.6)}
.qrscan-close{margin-left:auto;border:1px solid rgba(255,255,255,.2);background:rgba(255,255,255,.08);color:#fff;border-radius:var(--r-sm);padding:8px 13px;font-weight:700}
.qrscan-main{min-height:0;flex:1;display:grid;grid-template-columns:minmax(280px,1.2fr) minmax(320px,.8fr)}
.qrscan-camera{position:relative;min-height:300px;background:#000;overflow:hidden}
.qrscan-camera video{width:100%;height:100%;object-fit:cover;display:block}
.qrscan-frame{position:absolute;left:50%;top:50%;width:min(58vw,310px);aspect-ratio:1;transform:translate(-50%,-50%);border:2px solid rgba(255,255,255,.85);border-radius:var(--r-lg);box-shadow:0 0 0 9999px rgba(0,0,0,.32);pointer-events:none}
.qrscan-frame:after{content:"Point at a Shelf sticker";position:absolute;left:50%;bottom:-36px;transform:translateX(-50%);font:var(--fs-micro) var(--font-mono);white-space:nowrap;color:#fff;text-shadow:0 1px 4px #000}
.qrscan-side{background:var(--surface);color:var(--ink);padding:16px;overflow-y:auto}
.qrscan-manual{display:flex;gap:8px;margin-bottom:14px}.qrscan-manual input{min-width:0;flex:1;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);padding:10px 12px;font-family:var(--font-mono);font-weight:700;text-transform:uppercase;min-height:var(--target-min);box-sizing:border-box}
/* Codes are typed in caps, but the hint stays a sentence. */
.qrscan-manual input::placeholder{font-family:var(--font-ui);font-weight:var(--fw-regular);text-transform:none;letter-spacing:0}
/* Camera error sits at the top of the viewfinder so it never collides with the mode toggle at the bottom. */
.qrscan-camera-error{position:absolute;inset:var(--s-3) var(--s-3) auto;z-index:3;padding:var(--s-2) var(--s-3);background:rgba(0,0,0,.78);color:#fff;border-radius:var(--r-sm);font-size:var(--fs-sm);text-align:center}
.qrscan-manual button,.qrscan-action{border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink-2);padding:8px 11px;font-size:var(--fs-xs);font-weight:700}
.qrscan-action.primary{background:var(--accent-strong);border-color:var(--accent);color:var(--on-accent)}
.qrscan-title{font:700 var(--fs-xs) var(--font-ui);letter-spacing:.02em;text-transform:uppercase;color:var(--muted);margin:4px 0 9px}
.qrscan-results{display:flex;flex-direction:column;gap:8px}
.qrscan-row{border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);padding:11px}
.qrscan-row-top{display:flex;gap:10px;align-items:flex-start}.qrscan-code{font:700 var(--fs-xs) var(--font-mono);color:var(--accent-ink)}.qrscan-state{font-size:var(--fs-sm);font-weight:700;margin-top:3px}.qrscan-time{margin-left:auto;font:var(--fs-nano) var(--font-mono);color:var(--muted)}
.qrscan-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px}
.qrscan-pick{margin-top:9px}.qrscan-pick input{width:100%;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink);padding:8px 10px}
.qrscan-kind{display:flex;gap:5px;margin-bottom:7px}.qrscan-kind button{flex:1;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);color:var(--ink-2);padding:7px 4px;font-size:var(--fs-micro);font-weight:700}.qrscan-kind button.active{border-color:var(--accent);color:var(--accent-ink)}
.qrscan-matches{display:flex;flex-direction:column;gap:4px;margin-top:5px;max-height:180px;overflow:auto}.qrscan-match{border:0;border-radius:var(--r-sm);background:var(--surface);color:var(--ink);padding:8px 9px;text-align:left;font-size:var(--fs-xs);font-weight:600}
.qrscan-empty{font-size:var(--fs-xs);color:var(--muted);padding:18px 4px;text-align:center}
@media(max-width:700px){.qrscan-main{display:flex;flex-direction:column}.qrscan-camera{flex:0 0 42vh}.qrscan-side{flex:1}.qrscan-frame{width:min(66vw,270px)}}
/* Shared touch targets affect hit areas only, never painted geometry. */
@media(pointer:coarse){
.home-qa-btn,.home-resume,#kitGroupBy{min-height:44px}
.settings-member-add input,.settings-member-add select{min-height:44px}
.ph-category-toggle{min-height:44px;display:flex;align-items:center}
:is(.ss-settings .ss-chip button,.category-grip,.category-menu summary,.app-help-back,#capSameItem,#addPhoneNewCode){position:relative}
:is(.ss-settings .ss-chip button,.category-grip,.category-menu summary,.app-help-back,#capSameItem,#addPhoneNewCode)::before{--shelf-touch-target-rule:1;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;pointer-events:auto}
:where(:is(.sp-action-overflow .pc-action-more,.sp-add,.modal-h .x,.kit-free-row .kit-free-delete,.idx-btn-keep,.idx-btn-discard,.grid-checkbox-hit,.tosort-check,.arch-breadcrumb-seg,.chk,.tbtn,.seg button,#wallctl .seg button,.views button,.grid-inline-status button,.toast-undo-btn)){--shelf-touch-target-rule:1;position:relative}
 :is(.sp-action-overflow .pc-action-more,.sp-add,.modal-h .x,.kit-free-row .kit-free-delete,.idx-btn-keep,.idx-btn-discard,.grid-checkbox-hit,.tosort-check,.arch-breadcrumb-seg,.chk,.tbtn,.seg button,#wallctl .seg button,.views button,.grid-inline-status button,.toast-undo-btn)::before{--shelf-touch-target-rule:1;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;background:transparent;border:0;pointer-events:auto}
}
/* Labels provide the checkbox hit area; native checkbox glyphs stay compact. */
.chk input[type="checkbox"]{width:18px;height:18px;padding:0;margin:0;flex:0 0 18px}

/* ==== [item-view-readability] ================================================= */

/* Item View readability — STYLE.md §9. Scoped to #panel (Item View) only. */
#panel .rrow{font-size:var(--fs-md);gap:14px}
#panel .rrow .rk{font-family:var(--font-ui);font-size:var(--fs-control);font-weight:600;letter-spacing:0;text-transform:none;color:var(--ink-2);flex:0 0 104px;padding-top:2px}
#panel .read-sub{font-family:var(--font-ui);font-size:var(--fs-control);letter-spacing:0}
#panel .ph-photo-count{font:500 var(--fs-sm) var(--font-ui);letter-spacing:0;text-transform:none}
#panel .m-coll-hdr{font:700 var(--fs-base) var(--font-ui);letter-spacing:0;text-transform:none;color:var(--ink)}
#panel .rchip{font-family:var(--font-ui);font-size:var(--fs-sm)}
#panel .sticker-action,#panel .serial-snap-btn,#panel .man-find-btn{font:600 var(--fs-sm) var(--font-ui);letter-spacing:0;text-transform:none;padding:9px 12px}
/* Edit is the only orange button in Item View */
#panel .sticker-action.primary{border-color:var(--line-2);background:var(--surface-2);color:var(--ink)}

/* ==== [tag-suggestions] ======================================================= */

.cp-wrap .cp-sugs:empty{display:none}
.cp-wrap .cp-inp-row + .cp-sugs{margin-top:8px}

/* ==== [read-sections-order] =================================================== */

@media (max-width:899px){
  #panel .m-coll.m-coll-empty .m-coll-hdr{color:var(--muted);font-weight:500}
  #panel .m-coll.m-coll-empty.open .m-coll-hdr{color:var(--ink-2)}
}

/* ==== [grid-readability] ====================================================== */

/* Grid table: readable type + user text size (S / M / L). */
.grid-size{display:inline-flex;align-items:center;height:40px;border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);overflow:hidden}
.grid-size-btn{appearance:none;border:0;background:none;color:var(--ink-2);font-family:var(--font-ui);font-weight:700;width:36px;height:100%;cursor:pointer;line-height:1}
.grid-size-btn+.grid-size-btn{border-left:1px solid var(--line)}
.grid-size-btn:hover{color:var(--ink)}
.grid-size-btn.on{background:color-mix(in oklab,var(--accent),transparent 88%);color:var(--accent-ink)}
.grid-size-s{font-size:var(--fs-xs)}.grid-size-m{font-size:var(--fs-base)}.grid-size-l{font-size:var(--fs-md)}
.grid-workspace .grid-table th{font-family:var(--font-ui);font-weight:700;letter-spacing:0}
.grid-workspace .grid-status{color:var(--ink-2)}
.grid-workspace .grid-num{font-family:var(--font-ui)}
.grid-workspace .grid-out{color:var(--warn-ink);font-weight:600}
.grid-workspace .grid-footer{font-family:var(--font-ui)}
/* S */
.grid-workspace[data-grid-text="s"] .grid-table th{height:36px;font-size:var(--fs-xs)}
.grid-workspace[data-grid-text="s"] .grid-table td{height:38px;font-size:var(--fs-sm)}
.grid-workspace[data-grid-text="s"] .grid-status{font-size:var(--fs-xs)}
.grid-workspace[data-grid-text="s"] .grid-out{font-size:var(--fs-micro)}
.grid-workspace[data-grid-text="s"] .grid-footer{font-size:var(--fs-xs)}
/* M (default) */
.grid-workspace[data-grid-text="m"] .grid-table th{height:40px;font-size:var(--fs-sm)}
.grid-workspace[data-grid-text="m"] .grid-table td{height:52px;font-size:var(--fs-base)}
.grid-workspace[data-grid-text="m"] .grid-thumb{width:40px;height:40px}
.grid-workspace[data-grid-text="m"] .grid-col-thumb,.grid-workspace[data-grid-text="m"] .grid-table .grid-thumb-cell{width:52px}
.grid-workspace[data-grid-text="m"] .grid-status{font-size:var(--fs-sm)}
.grid-workspace[data-grid-text="m"] .grid-out{font-size:var(--fs-xs)}
.grid-workspace[data-grid-text="m"] .grid-footer{font-size:var(--fs-sm)}
.grid-workspace[data-grid-text="m"] .grid-col-qty{width:84px}
.grid-workspace[data-grid-text="m"] .grid-col-date{width:128px}
/* L */
.grid-workspace[data-grid-text="l"] .grid-table{min-width:1280px}
.grid-workspace[data-grid-text="l"] .grid-table th{height:46px;font-size:var(--fs-base)}
.grid-workspace[data-grid-text="l"] .grid-table td{height:62px;font-size:var(--fs-md)}
.grid-workspace[data-grid-text="l"] .grid-thumb{width:48px;height:48px}
.grid-workspace[data-grid-text="l"] .grid-col-thumb,.grid-workspace[data-grid-text="l"] .grid-table .grid-thumb-cell{width:60px}
.grid-workspace[data-grid-text="l"] .grid-status{font-size:var(--fs-base)}
.grid-workspace[data-grid-text="l"] .grid-status.pill{min-height:28px;padding:3px 10px}
.grid-workspace[data-grid-text="l"] .grid-out{font-size:var(--fs-control)}
.grid-workspace[data-grid-text="l"] .grid-footer{font-size:var(--fs-control)}
.grid-workspace[data-grid-text="l"] .grid-col-qty{width:96px}
.grid-workspace[data-grid-text="l"] .grid-col-status{width:124px}
.grid-workspace[data-grid-text="l"] .grid-col-date{width:148px}
.grid-workspace[data-grid-text="s"] .grid-col-qty{width:74px}
/* Keep the full List scrollable; separate borders support sticky cells in Safari. */
.grid-workspace .grid-table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch;max-width:100%}
.grid-workspace[data-grid-text] .grid-table-wrap>.grid-table{width:100%;min-width:max(100%,1120px);border-collapse:separate;border-spacing:0}
.grid-workspace .grid-table-wrap>.grid-table th:first-child,
.grid-workspace .grid-table-wrap>.grid-table td:first-child{position:sticky;left:0;z-index:2;background:var(--surface)}
.grid-workspace .grid-table-wrap>.grid-table tr.grid-row:hover td:first-child,
.grid-workspace .grid-table-wrap>.grid-table tr.grid-row.in-kit td:first-child{background:var(--surface)}

/* ==== [where-menu] ============================================================ */

.where-menu{max-height:min(62vh,460px);overflow-y:auto;min-width:220px;max-width:calc(100vw - 16px)}
.where-menu .where-row{display:flex;align-items:center;justify-content:space-between;gap:14px}
.where-menu .where-row{padding-left:calc(var(--s-3) + var(--where-depth,0) * var(--s-4))}
.where-menu .where-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.where-menu .where-sub{color:var(--ink-2)}
.where-menu .where-sub.ctx-on{color:var(--accent-ink)}
.where-menu .where-n{flex:0 0 auto;font-size:.85em;color:var(--muted);font-variant-numeric:tabular-nums}
.where-menu .ctx-sec{font:600 var(--fs-sm) var(--font-ui);letter-spacing:0;text-transform:none;color:var(--muted);padding:8px 12px 4px}

/* ==== [desktop-item-sections] ================================================= */

@media (min-width:701px){
  #panel .d-coll{border-top:1px solid var(--line)}
  #panel .d-coll .m-coll-hdr{display:flex;width:100%;align-items:center;justify-content:space-between;appearance:none;border:0;background:none;padding:12px 0;cursor:pointer;font:700 var(--fs-base) var(--font-ui);letter-spacing:0;text-transform:none;color:var(--ink);text-align:left}
  #panel .d-coll .m-chv{transition:transform var(--t-base);flex:0 0 auto}
  #panel .d-coll.open .m-chv{transform:rotate(180deg)}
  #panel .d-coll .m-coll-body{display:none;padding-bottom:12px}
  #panel .d-coll.open .m-coll-body{display:block}
  #panel .d-coll.m-coll-empty .m-coll-hdr{color:var(--muted);font-weight:500}
  #panel .d-coll.m-coll-empty.open .m-coll-hdr{color:var(--ink-2)}
  #panel .d-coll .m-coll-hdr:hover{color:var(--ink)}
}

/* ==== [grid-group-row] ======================================================== */
.grid-inline-editor{
  --grid-inline-popover-pad:var(--s-2);
  position:fixed;z-index:var(--z-menu);width:max-content;max-width:calc(100vw - (var(--s-2) * 2));
  max-height:calc(100dvh - (var(--s-2) * 2));overflow:auto;padding:var(--s-1);
  border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface);
  box-shadow:var(--shadow-lg);color:var(--ink);font-family:var(--font-ui);font-size:var(--fs-sm);
}
.grid-inline-head{display:flex;align-items:center;gap:var(--s-2);min-height:var(--ctl-sm);font-weight:var(--fw-bold)}
.grid-inline-editor [hidden]{display:none}
.grid-inline-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.grid-inline-close{margin-left:auto;border:0;background:none;color:var(--muted);font-size:var(--fs-lg);line-height:1;min-width:var(--target-min);min-height:var(--target-min);cursor:pointer}
.grid-inline-search-wrap{margin-bottom:var(--s-2)}
.grid-inline-search,.grid-inline-create-input{box-sizing:border-box;width:100%;min-height:var(--target-min);padding:var(--s-2);border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font:inherit}
.grid-inline-search:focus,.grid-inline-create-input:focus{border-color:var(--accent);outline:0;box-shadow:var(--focus-ring)}
.grid-inline-options{display:flex;flex-direction:column;gap:var(--s-1);max-height:calc(var(--ctl-lg) * 6);overflow-y:auto}
.grid-inline-option{display:flex;flex-shrink:0;align-items:center;justify-content:space-between;gap:var(--s-2);min-height:var(--target-min);padding:var(--s-2);border:1px solid transparent;border-radius:var(--r-sm);background:transparent;color:var(--ink-2);font:inherit;text-align:left;cursor:pointer}
.grid-inline-option:hover,.grid-inline-option.is-active{border-color:var(--line);background:var(--surface-2);color:var(--ink)}
.grid-inline-option.is-current{font-weight:var(--fw-bold);color:var(--ink)}
.grid-inline-option:focus-visible,.grid-inline-new:focus-visible,.grid-inline-close:focus-visible,.grid-inline-create-confirm:focus-visible{outline:0;box-shadow:var(--focus-ring)}
.grid-inline-tick{color:var(--accent-ink);font-weight:var(--fw-bold)}
.grid-inline-empty{padding:var(--s-3) var(--s-2);color:var(--muted);text-align:center}
.grid-inline-new{width:100%;min-height:var(--target-min);margin-top:var(--s-2);padding:var(--s-2);border:0;border-top:1px solid var(--line);background:none;color:var(--accent-ink);font:var(--fw-bold) var(--fs-sm) var(--font-ui);text-align:left;cursor:pointer}
.grid-inline-create{display:flex;gap:var(--s-2);align-items:center}
.grid-inline-create-input{min-width:0;flex:1}
.grid-inline-create-confirm{flex:0 0 auto}
.grid-inline-error{margin:var(--s-2) 0 0;color:var(--danger-ink);font-size:var(--fs-xs);line-height:var(--lh-snug)}
.grid-inline-confirm p{margin:var(--s-2) 0;color:var(--ink-2);line-height:var(--lh-snug)}
.grid-inline-confirm-actions{display:flex;gap:var(--s-2);flex-wrap:wrap}
.grid-inline-confirm-actions .tbtn,.grid-inline-create-confirm{min-height:var(--target-min)}
.grid-inline-editor.is-busy{pointer-events:none;opacity:.7}
.grid-category-cell[role="button"]{cursor:pointer}
.grid-table td.grid-category-cell[role="button"]:hover{background:var(--surface-3);box-shadow:inset 0 0 0 1px var(--line)}
@media (hover:none),(any-pointer:coarse){
  .grid-category-cell[role="button"]{text-decoration:underline dotted var(--muted);text-underline-offset:var(--s-1)}
}
.grid-name[role="button"]{cursor:pointer}
.grid-category-cell[role="button"]:focus-visible,.grid-name[role="button"]:focus-visible{outline:0;box-shadow:var(--focus-ring)}
.inline-cell-undo-note{display:block;flex:1 1 100%;margin-top:var(--s-1);color:var(--ink-2);font-size:var(--fs-xs);line-height:var(--lh-snug)}
.toast:has(.inline-cell-undo-note){flex-wrap:wrap;max-width:calc(100vw - var(--s-4))}

.grid-workspace .grid-group-row td{font-family:var(--font-ui);font-weight:400;letter-spacing:0;color:var(--muted)}
.grid-workspace .grid-group-name{font-weight:700;color:var(--ink);margin-right:10px}
.grid-workspace[data-grid-text="s"] .grid-group-row td{font-size:var(--fs-sm);height:38px}
.grid-workspace[data-grid-text="m"] .grid-group-row td{font-size:var(--fs-base);height:44px}
.grid-workspace[data-grid-text="l"] .grid-group-row td{font-size:var(--fs-md);height:52px}

/* ==== [typography] ===========================================================
   The single place where UI type steps between breakpoints.

   Contract:
   · A component may step DOWN one size on small screens.
   · A component NEVER changes font-family across a breakpoint. Space Mono is
     reserved for numerals, codes and serials; it is not a label face.
   · Base rules above carry the SMALL-SCREEN value. This block carries the
     desktop step. Nothing else in this file may set font-family on a label.

   Replaces the former mobile-shelf / mobile-menus / mobile-activity /
   mobile-edit / mobile-lend / desktop-readability patch sheets.
   ============================================================================ */

/* ---- small screens only --------------------------------------------------
   These re-assert label sizes against the narrow-viewport layout blocks
   earlier in this file, which target the same elements at equal specificity.
   -------------------------------------------------------------------------- */
@media (max-width:899px){
  .sp-tab{font-size:var(--fs-control)}
  .grp-count,.shelf-count{font-size:var(--fs-control)}
  .activity-head p{font-size:var(--fs-base)}
  .activity-row .ln{font-size:var(--fs-md)}

  .os-ctx-menu{min-width:200px;padding:6px}
  .os-ctx-menu button{font-size:var(--fs-md);min-height:var(--target-min);padding:10px 14px}
  .add-menu-row{font-size:var(--fs-md);min-height:48px;padding:12px 16px}
  .add-menu-row small{font-size:var(--fs-sm);margin-top:3px}

  .vf-sheet-title{font:700 var(--fs-md) var(--font-ui);letter-spacing:0;text-transform:none;color:var(--ink)}
  .vf-label{font:600 var(--fs-control) var(--font-ui);letter-spacing:0;text-transform:none;color:var(--muted)}
  .vf-pill{font-size:var(--fs-base)}
  .dm-btn{font-size:var(--fs-control)}

  .cp-sel{font-size:var(--fs-base);padding:6px 8px 6px 12px}
  .cp-sel button{width:20px;height:20px;font-size:var(--fs-micro)}
  .loc-pick-btn .lpb-chevron{font-size:var(--fs-control)}

  .lend-sheet-label{font:600 var(--fs-control) var(--font-ui);letter-spacing:0;text-transform:none;color:var(--ink-2)}
  .lend-summary{background:none;border:none;padding:2px 0;font-size:var(--fs-control);color:var(--muted)}
  .lend-date-row .vf-pill{font-size:var(--fs-base)}
  #lendDate{display:block;box-sizing:border-box;width:100%;max-width:100%;min-width:0;min-height:48px;-webkit-appearance:none;appearance:none;text-align:left}
  #lendDate::-webkit-date-and-time-value{text-align:left;min-height:1.4em}
}

/* ---- desktop step -------------------------------------------------------- */
@media (min-width:900px){
  .brand .wm small{font-size:var(--fs-micro)}
  .seg-l{font-size:var(--fs-control);text-transform:capitalize}

  .sp-n,.view-drop-btn .vdct,.bird-head .gc{font-size:var(--fs-xs);font-weight:600;letter-spacing:0}

  .vhead .vsub,.vsub{font-size:var(--fs-control)}
  .tgroup .tg-label{font-size:var(--fs-sm)}
  .shelf-count,.grp-count{font-size:var(--fs-sm)}
  .minichip{font-size:var(--fs-xs)}


  .mtile .mn{font-size:var(--fs-sm)}
  .mtile .mq{font-size:var(--fs-xs)}
  .canvas-hint{font-size:var(--fs-sm)}
  .os-icon-count{font-size:var(--fs-sm)}

  .os-ctx-menu .ctx-sec{font:600 var(--fs-xs) var(--font-ui);letter-spacing:0;text-transform:none;color:var(--muted)}
  .os-ctx-menu button{font-size:var(--fs-control)}

  .pc-head .t{font-size:var(--fs-control)}
  .man-lnk{font-size:var(--fs-sm);padding:2px 6px}
  .ai-enrich-btn{font-size:var(--fs-control);min-height:0}
  form .danger,.danger{font-size:var(--fs-control);padding:4px 0}

  .home-greeting-date{font-size:var(--fs-control)}
  .home-section-title{font-size:var(--fs-sm)}
  .activity-meta{font-size:var(--fs-control);margin-top:3px}

  .kit-card .km{font-size:var(--fs-sm)}
  .lrow .lm,.lm{font-size:var(--fs-sm)}
  .lrow .lstatus{font-size:var(--fs-sm)}
  .lbtn{font-size:var(--fs-sm)}
}

/* The view switcher remains the single view menu on desktop and tablet. */
@media (min-width:701px) and (max-width:1024px){
  #viewDropBtn{display:flex!important}
}

/* Where is a first-class wall control, including the compact phone chrome.
   Guest and crew restrictions above intentionally remain authoritative. */
@media (max-width:700px){
  body:not([data-guest-mode]):not([data-crew]) .topbar .actions #mWhereBtn:not(.v-hidden){display:inline-flex!important}
  body:not([data-guest-mode]):not([data-crew]) .topbar .actions #mWhereBtn.v-hidden{display:none!important}
}

/* ==== [a11y] =================================================================
   Focus, hit targets and reduced motion. This section is a contract, not a
   suggestion: every interactive element in the app gets a visible keyboard
   focus indicator and a 44×44 hit area.

   Before this existed the app had 34 `outline:none` declarations against 9
   `:focus-visible` rules, and 22 of 34 tab stops had no visible focus state.
   Those suppressions have been removed rather than fought — :focus-visible
   only fires for keyboard users, so mouse clicks stay ring-free without them.
   ============================================================================ */

/* ---- focus ---------------------------------------------------------------
   Two indicators on purpose: the outline survives forced-colors / Windows
   high-contrast, the ring reads better against the app's own surfaces.
   -------------------------------------------------------------------------- */
:focus-visible{
  outline:2px solid var(--focus-outline);
  outline-offset:2px;
  box-shadow:var(--focus-ring);
  border-radius:var(--r-sm);
}
/* A control filled with the accent needs a ring that is NOT the accent, or it
   disappears into its own background. White reads on the orange fill; the outer
   accent ring still separates it from the page. */
.tbtn.primary:focus-visible,.btn.primary:focus-visible,.fchip.on:focus-visible,
.grid-chip.on:focus-visible,.vf-pill.on:focus-visible,.sale-corner:focus-visible,
.man-save-btn:focus-visible,.idx-add-all:focus-visible,.rename-sug-yes:focus-visible,
.rs-create:focus-visible,.wz-primary:focus-visible,.vo-save:focus-visible,
.bulk-save:focus-visible,.cap-sum-more:focus-visible,.wlc-primary:focus-visible,
.ai-snap-btn:focus-visible,.cap-desk-choose:focus-visible,.loc-add-ok:focus-visible,
.acc-add-btn:focus-visible,.gsb-btn:focus-visible,.cap-guest-save:focus-visible,
.sortbar-go:focus-visible,.kit-sugg-add:focus-visible,#tourNext:focus-visible,
#fb-send:focus-visible,#bnFeedback:focus-visible{
  outline-color:var(--on-accent);
  outline-offset:-4px;
  box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--focus-outline);
}

/* Controls inside a horizontal scroller: an outline drawn OUTSIDE the box gets
   clipped by the scroll container, so you see the left and right strokes and
   never a closed ring. Draw it inside instead. */
.actions > *:focus-visible,.filters > *:focus-visible,
.spacebar *:focus-visible,.subbar > * > *:focus-visible{
  outline-offset:-3px;
  box-shadow:none;
}
/* Elements whose own radius must win over the generic ring radius. */
.card:focus-visible,.os-card:focus-visible,.kit-card:focus-visible,.lrow:focus-visible,
.modal-card:focus-visible,.cluster:focus-visible{border-radius:var(--r-md)}
.fchip:focus-visible,.grid-chip:focus-visible,.chip:focus-visible,
.vf-pill:focus-visible,.pchip:focus-visible{border-radius:var(--r-pill)}
/* Inset the ring where an element sits flush against a container edge. */
.views button:focus-visible,.seg button:focus-visible,.dock .dbtn:focus-visible,
.grid-table th:focus-visible,.grid-size-btn:focus-visible{outline-offset:-2px}
/* Never show the ring on a scroll container that only receives focus
   programmatically. */
.scroller:focus-visible,.canvas-vp:focus-visible{outline:none;box-shadow:none}

@media (forced-colors:active){
  :focus-visible{outline:3px solid Highlight;outline-offset:2px}
}

/* ---- hit targets ---------------------------------------------------------
   STYLE.md §6 requires 44×44 everywhere. Compact controls keep their visual
   size and grow their hit area with a transparent ::after, so density is
   preserved — this is the "don't just make everything bigger" rule.
   -------------------------------------------------------------------------- */
.hit-44{position:relative}
.hit-44::after{
  content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:max(100%,var(--target-min));height:max(100%,var(--target-min));
}

/* ---- motion ------------------------------------------------------------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.001ms!important;animation-iteration-count:1!important;
    transition-duration:var(--t-fast)!important;scroll-behavior:auto!important;
  }
}

/* ==== [hit-targets] ==========================================================
   STYLE.md §6: every interactive target is at least 44×44.

   Two techniques, chosen per control so density is preserved:
   A. Grow the control, where its container already has the room (tabs inside a
      taller bar, buttons inside a toolbar). Costs no extra chrome height.
   B. Keep the visual size and extend the hit area with a transparent ::after,
      where shrinking the visual would cost information density (table
      checkboxes, status pills, breadcrumb segments).

   Before this section there were 21 distinct sub-44 targets, the worst being
   26px-tall space tabs and a 15px-tall demo banner link.
   ============================================================================ */

/* ---- A. controls that can simply grow ------------------------------------ */
.sp-tab{padding-block:0;min-height:var(--target-min);align-items:center}
.brand{min-height:var(--target-min);align-self:center}
.topbar a.brand,.topbar .brand{padding-block:7px}
.x{width:var(--target-min);height:var(--target-min)}
.vf-pill{height:var(--target-min)}
.grid-size{height:var(--target-min)}
.brand{min-width:var(--target-min)}
#tourSkip,#tourNext,.tour-card button{min-height:var(--target-min);display:inline-flex;align-items:center;justify-content:center}

/* Demo banner: links were 15px tall. Give them a real target and let the strip
   carry it. Demo chrome only — it is not part of the signed-in app. */
#demoBanner{min-height:var(--target-min);padding-block:0}
#demoBanner a{display:inline-flex;align-items:center;justify-content:center;min-height:var(--target-min);min-width:var(--target-min);padding-inline:6px}
.demo-banner-controls{display:inline-flex;align-items:center;gap:4px}

/* ---- B. keep the visual, extend the hit area ----------------------------- */
.grid-table .grid-check input[type="checkbox"],
.grid-status,
.os-pbseg,
.grid-size-btn{position:relative}
.grid-table .grid-check input[type="checkbox"]::before,
.grid-status::before,
.os-pbseg::before,
.grid-size-btn::before{
  content:"";position:absolute;left:50%;top:50%;translate:-50% -50%;
  width:max(100%,var(--target-min));height:max(100%,var(--target-min));
}
/* The checkbox already uses ::after for its tick, so its hit area rides on
   ::before; keep the tick centred above it. */
.grid-table .grid-check input[type="checkbox"]::after{position:relative;z-index:1}


/* ==== [button-primitive] =====================================================
   One button. Before this, 20 feature modals each re-declared "accent fill,
   white text" with their own radius, padding and — the real tell — Space Mono
   at 10–12px with letter-spacing, a face the canonical .btn never used.

   These selectors are aliases, not new classes: the markup is untouched. Each
   rule above keeps only its LAYOUT declarations (flex, gap, margin, alignment);
   appearance comes from here, so every primary action in the app is now the
   same button.
   ============================================================================ */
.man-save-btn,.idx-add-all,.rename-sug-yes,.rs-create,.wz-primary,.vo-save,.bulk-save,.cap-sum-more,.wlc-primary,.ai-snap-btn,.cap-desk-choose,.loc-add-ok,.acc-add-btn,.gsb-btn,.cap-guest-save,.sortbar-go,.kit-sugg-add,.man-cancel-btn,.idx-add-sel,.rename-sug-no{
  font-family:var(--font-ui);
  font-size:var(--fs-control);
  font-weight:var(--fw-bold);
  letter-spacing:var(--ls-normal);
  border-radius:var(--r-md);
  padding:var(--s-3) var(--s-4);
  min-height:var(--target-min);
  border:1px solid transparent;
  cursor:pointer;
  transition:background var(--t-fast),border-color var(--t-fast),color var(--t-fast),filter var(--t-fast);
}
.man-save-btn,.idx-add-all,.rename-sug-yes,.rs-create,.wz-primary,.vo-save,.bulk-save,.cap-sum-more,.wlc-primary,.ai-snap-btn,.cap-desk-choose,.loc-add-ok,.acc-add-btn,.gsb-btn,.cap-guest-save,.sortbar-go,.kit-sugg-add{background:var(--accent-strong);color:var(--on-accent)}
.man-save-btn:hover,.idx-add-all:hover,.rename-sug-yes:hover,.rs-create:hover,.wz-primary:hover,.vo-save:hover,.bulk-save:hover,.cap-sum-more:hover,.wlc-primary:hover,.ai-snap-btn:hover,.cap-desk-choose:hover,.loc-add-ok:hover,.acc-add-btn:hover,.gsb-btn:hover,.cap-guest-save:hover,.sortbar-go:hover,.kit-sugg-add:hover{filter:brightness(1.06)}
.man-cancel-btn,.idx-add-sel,.rename-sug-no{background:var(--surface-2);color:var(--ink);border-color:var(--line)}
.man-cancel-btn:hover,.idx-add-sel:hover,.rename-sug-no:hover{border-color:var(--line-2)}


/* ==== [field-primitive] ======================================================
   One text field. ~20 inputs each declared their own surface, border, radius
   and font; radii alone ran 5/6/7/8/9/10/11px. Layout (width, flex, padding,
   min-height, resize) stays with each component — only the surface is shared.
   ============================================================================ */
.kit-free-add input,.kit-list-note,.kit-create-input,.icon-picker-search,.bk-fld,.wz-inp,.wz-sel,.vo-fld,.lcv-cinput,.nf-field input,.lnk-srch,.drv-browse-bar input,.arch-tag-add-inp,.acc-add-inp,.sd-name,.sd-cat,.sd-type,.fld input,.fld textarea,.fld select,.spot-add,.rs-sp-add,.arch-search-wrap input,.imp-row input[type=text],.col-map-sel,.serial-confirm-input{
  background:var(--surface-2);
  border:1px solid var(--line);
  border-radius:var(--r-sm);
  color:var(--ink);
  font-family:var(--font-ui);
  transition:border-color var(--t-fast),background var(--t-fast);
}
.kit-free-add input:focus,.kit-list-note:focus,.kit-create-input:focus,.icon-picker-search:focus,.bk-fld:focus,.wz-inp:focus,.wz-sel:focus,.vo-fld:focus,.lcv-cinput:focus,.nf-field input:focus,.lnk-srch:focus,.drv-browse-bar input:focus,.arch-tag-add-inp:focus,.acc-add-inp:focus,.sd-name:focus,.sd-cat:focus,.sd-type:focus,.fld input:focus,.fld textarea:focus,.fld select:focus,.spot-add:focus,.rs-sp-add:focus,.arch-search-wrap input:focus,.imp-row input[type=text]:focus,.col-map-sel:focus,.serial-confirm-input:focus{
  border-color:var(--line-strong);
  background:var(--surface);
}
.kit-free-add input:disabled,.kit-list-note:disabled,.kit-create-input:disabled,.icon-picker-search:disabled,.bk-fld:disabled,.wz-inp:disabled,.wz-sel:disabled,.vo-fld:disabled,.lcv-cinput:disabled,.nf-field input:disabled,.lnk-srch:disabled,.drv-browse-bar input:disabled,.arch-tag-add-inp:disabled,.acc-add-inp:disabled,.sd-name:disabled,.sd-cat:disabled,.sd-type:disabled,.fld input:disabled,.fld textarea:disabled,.fld select:disabled,.spot-add:disabled,.rs-sp-add:disabled,.arch-search-wrap input:disabled,.imp-row input[type=text]:disabled,.col-map-sel:disabled,.serial-confirm-input:disabled{opacity:.55;cursor:not-allowed}


/* ==== [menu-primitive] =======================================================
   One popover surface. Ten dropdowns each declared their own background,
   border colour, radius, shadow and padding; borders alternated between --line
   and --line-2 and padding ran 4/5/6/13px. Position, z-index and min-width stay
   with each component — only the surface is shared.

   Behaviour (Escape, outside-click, focus return) is wired once in index.html;
   see closeAllMenus().
   ============================================================================ */
.add-menu,.os-ctx-menu,.lnk-dd,.lcv-dd,.pc-action-menu,.ph-photo-menu,.acc-peek,.view-menu-float,.loc-action-menu,.where-menu{
  background:var(--surface);
  border:1px solid var(--line);
  border-radius:var(--r-md);
  box-shadow:var(--shadow-lg);
  padding:var(--s-1);
}
.acc-peek{padding:var(--s-3) var(--s-4)}
/* rows inside any menu */
.add-menu > button,.os-ctx-menu > button,.lnk-dd > button,.lcv-dd > button,.pc-action-menu > button,.ph-photo-menu > button,.acc-peek > button,.view-menu-float > button,.loc-action-menu > button,.where-menu > button{
  border-radius:var(--r-xs);
}

/* ==== [responsive] ===========================================================
   Page layout uses three breakpoints: 640 (phone), 900 (tablet), 1280 (desktop).
   Component-internal queries (a modal grid, a picker's columns) may still react
   at their own size — those are container concerns, not page layout.

   The rules below replace the wrapping behaviour that made the top chrome grow
   as the screen shrank: 62px at 1440, 112px at 1280, 116px at 1180 and below.
   The toolbar now scrolls horizontally instead of wrapping to a second row, so
   nothing is hidden and nothing is stacked. The primary action stays pinned.
   ============================================================================ */

/* ---- toolbar: one row at every width ------------------------------------- */
.topbar{flex-wrap:nowrap;gap:var(--s-3);min-height:62px}
.brand{flex:0 0 auto}
/* Search is the primary way into a large shelf, so it gets the room and the
   tool buttons scroll instead. */
.search{flex:1 1 280px;min-width:0;max-width:520px}
.actions{
  flex:0 1 auto;min-width:0;flex-wrap:nowrap;
  overflow-x:auto;overflow-y:visible;
  scrollbar-width:none;-ms-overflow-style:none;
  /* NOT justify-content:flex-end. On a scroll container that pushes overflow
     off the START edge, where scrollLeft cannot reach it — the controls are
     unreachable, not merely hidden, and scrollWidth still equals clientWidth
     so the bug is invisible to the obvious test. Right-align with an auto
     start margin instead: identical when it fits, scrollable when it does not. */
  justify-content:flex-start;
  scroll-padding-inline-end:var(--s-3);
}
.actions > *:first-child{margin-inline-start:auto}
.actions::-webkit-scrollbar{display:none}
.actions > *{flex:0 0 auto}
/* The primary action never scrolls out of reach. */
.actions #addBtn{position:sticky;right:0;z-index:1;box-shadow:-10px 0 12px -8px var(--surface)}

@media (max-width:1279px){
  /* Secondary chrome steps down before the toolbar has to wrap. */
  .topbar{gap:var(--s-2);padding-inline:var(--s-3)}
}

@media (max-width:899px){
  .topbar{padding-inline:var(--s-3)}
  /* The wordmark is the brand; keep it, drop only the strapline. */
  .brand .wm small{display:none}
}

/* ---- subbar: scroll, never wrap ------------------------------------------ */
.subbar{flex-wrap:nowrap;overflow-x:auto;overflow-y:visible;scrollbar-width:none;-ms-overflow-style:none}
.subbar::-webkit-scrollbar{display:none}
.subbar > *{flex:0 0 auto}
#wallctl{flex-wrap:nowrap}

/* Photos size against the available wall, including an open inspector. */
.ph-grid-photos,.photo-collections-grid.ph-grid{grid-template-columns:repeat(auto-fill,minmax(calc((100% - (var(--shelf-photo-cols,8) - 1)*2px)/var(--shelf-photo-cols,8)),1fr))}
/* ---- dock: a phone and tablet pattern, not a desktop one ----------------- */
@media (min-width:1280px){
  body.panel-open .ph-grid-photos{grid-template-columns:repeat(auto-fill,minmax(min(100%,calc((100vw - 240px)/var(--shelf-photo-cols,8))),1fr))}
  #dock{display:none!important}
  .scroller{padding-bottom:var(--s-7)}
}
#dock{padding-bottom:var(--safe-b);height:auto;min-height:calc(var(--dock-h) + var(--safe-b))}

/* ---- item panel: stop colliding with the dock ---------------------------- */
:root{--dock-clear:calc(var(--dock-h) + var(--safe-b))}
@media (min-width:1280px){ :root{--dock-clear:0px} }
/* In drawer mode the panel stops above the dock instead of running under it.
   height:auto is required — the base rule sets height:100%, which ignores
   `bottom`. The mobile bottom-sheet variant keeps its own geometry. */
@media (min-width:640px){
  .panel{bottom:var(--dock-clear);height:auto}
}
.pc-foot{padding-bottom:max(var(--s-3),var(--safe-b))}

/* The wordmark is the brand. The old tablet rule hid it entirely, leaving a
   bare orange square wedged against the search field; only the strapline goes. */
@media (max-width:1024px), (any-pointer:coarse){
  .brand .wm{display:block}
}
@media (max-width:899px){
  .brand .wm small{display:none}
}
@media (max-width:639px){
  .brand .wm{display:none}
}

/* ---- touch equivalents for hover-only affordances -------------------------
   On a touch device there is no hover, so anything revealed by :hover is
   invisible and effectively missing. The pattern already existed for
   .tosort-check; this extends it to the rest rather than leaving five
   affordances reachable only with a mouse. -------------------------------- */
@media (hover:none),(any-pointer:coarse){
  .ph-thumb .ph-thumb-crop,
  .os-icon .os-icon-cam,
  .loc-card .loc-cam,
  .photo-slot .ph-corner-cam,
  .grid-row .grid-kit-toggle{opacity:1;visibility:visible;pointer-events:auto}
  /* Space tabs are the exception: one "…" per tab turned the tab bar into a
     row of dots. Only the tab you are on offers its actions. */
  .sp-tab-wrap:has(.sp-tab.on) .sp-action-overflow,
  .sp-tab-wrap.touch-actions .sp-action-overflow{opacity:1;visibility:visible;pointer-events:auto}
}



/* ---- scroll affordance ----------------------------------------------------
   The toolbar and filter rows scroll instead of wrapping (that is what took
   ~95px off the tablet chrome). A scrollable row that ends flush at the edge
   reads as a truncated row, so both get a fade that only appears when there is
   more to reach. ---------------------------------------------------------- */
.actions,.filters,.subbar,.spacebar,.views{
  scroll-snap-type:none;
  -webkit-overflow-scrolling:touch;
  mask-image:linear-gradient(to right,#000 calc(100% - 28px),transparent 100%);
  mask-repeat:no-repeat;
}
/* .actions keeps no fade: the sticky Add button sits at the right edge and a
   mask would fade the primary action itself. Its inset shadow does that job. */
.actions{mask-image:none}
/* Remove the fade once the row fits; JS sets data-scrollable when it overflows. */
.filters:not([data-scrollable]),.subbar:not([data-scrollable]),
.spacebar:not([data-scrollable]),.views:not([data-scrollable]){mask-image:none}

/* ---- bird's-eye tile thumbnail --------------------------------------------
   The Everything view is the product's answer to "what do I own", and it was
   the only view that showed no photographs at all. A 26px thumbnail identifies
   the item without changing the tile size, so density is untouched. */
.mtile .mth{
  flex:0 0 22px;width:22px;height:22px;border-radius:var(--r-xs);
  overflow:hidden;display:grid;place-items:center;background:var(--surface-2);
}
.mtile .mth img{width:100%;height:100%;object-fit:cover;display:block}
.mtile .mth svg{width:13px;height:13px}
.mtile .mth-ini{font-family:var(--font-display);font-weight:var(--fw-black);font-size:var(--fs-micro);color:var(--ini)}
@media (max-width:639px){ .mtile .mth{flex-basis:32px;width:32px;height:32px} }

/* ==== [status] ===============================================================
   One drawing per state. "Faulty" was previously drawn four different ways:
   a rounded badge on cards, a bare "!" on bird's-eye tiles, a warning glyph in
   Grid and a hand-rolled red circle with its own hex in Locations.
   ============================================================================ */
/* The faulty mark — rendered only by ShelfStatus.faultyMark() (status.js).
   Positioning classes (.card-faulty, .os-faulty, .mf, .grid-fault) may place
   it, but must not restyle it. */
.st-faulty-mark{
  display:inline-grid;place-items:center;flex:0 0 auto;vertical-align:middle;
  width:18px;height:18px;border-radius:var(--r-xs);
  background:color-mix(in oklab,var(--danger),transparent 84%);
  color:var(--danger-ink);
  font-family:var(--font-ui);font-weight:var(--fw-black);font-size:var(--fs-xs);line-height:1;
}
.st-faulty-mark.os-faulty{position:absolute;top:6px;left:6px;right:auto;z-index:3}
.st-faulty-mark.grid-fault{margin-left:var(--s-1)}
.read-status-dot{display:inline-block;width:8px;height:8px;border-radius:var(--r-pill);vertical-align:middle;margin-right:var(--s-1)}
.read-status-faulty{display:inline-flex;align-items:center;gap:var(--s-1);color:var(--danger-ink);font-weight:var(--fw-semi)}
.read-faulty{display:flex;align-items:flex-start;gap:var(--s-3);margin:var(--s-3) 0 0;padding:var(--s-3);border:1px solid color-mix(in oklab,var(--danger),transparent 60%);border-radius:var(--r-md);background:color-mix(in oklab,var(--danger),transparent 90%);color:var(--danger-ink);font-size:var(--fs-sm)}
.read-faulty strong{display:block;font-size:var(--fs-base)}
.read-faulty small{display:block;margin-top:var(--s-1);font-size:var(--fs-sm);color:var(--ink)}

/* ---- travel cases ------------------------------------------------------- */
.travel-picker,.travel-checklist{display:grid;gap:var(--s-2)}
.travel-case-choice,.travel-checklist label{
  min-height:var(--target-min);border:1px solid var(--line);border-radius:var(--r-sm);
  background:var(--surface-2);color:var(--ink);font:var(--fw-semi) var(--fs-control)/1.2 var(--font-ui);
  padding:var(--s-3);text-align:left;
}
.travel-case-choice{cursor:pointer}
.travel-checklist label{display:flex;align-items:center;gap:var(--s-2)}
.travel-checkout-groups{display:grid;gap:var(--s-3);margin-top:var(--s-4)}
.travel-checkout-group{display:grid;gap:var(--s-1)}
.travel-checkout-group h3{margin:0;color:var(--ink);font:var(--fw-bold) var(--fs-sm)/1.2 var(--font-ui)}
.travel-checkout-group label{display:flex;align-items:center;gap:var(--s-2);flex-wrap:wrap;color:var(--ink-2);font:var(--fw-regular) var(--fs-sm)/1.3 var(--font-ui)}
.travel-checkout-group small{flex-basis:100%;padding-left:var(--s-6);color:var(--muted);font:var(--fw-regular) var(--fs-xs)/1.3 var(--font-ui)}
.travel-checkout-empty,.travel-case-automatic{margin:0;color:var(--muted);font:var(--fw-regular) var(--fs-sm)/1.4 var(--font-ui)}
.travel-create-case-item{border:0;background:transparent;color:var(--accent-ink);font:var(--fw-bold) var(--fs-sm)/1.2 var(--font-ui);padding:var(--s-2) 0;text-align:left}
.travel-toggle{display:flex;align-items:center;gap:var(--s-2);font:var(--fw-semi) var(--fs-control)/1.2 var(--font-ui);margin-bottom:var(--s-4)}
.travel-form-error{min-height:var(--fs-control);color:var(--danger-ink);font:var(--fw-medium) var(--fs-sm)/1.3 var(--font-ui);margin-top:var(--s-2)}
.travel-packed-line{color:var(--st-packed-ink)}
.travel-packed-line small{color:var(--ink-2);font:var(--fw-regular) var(--fs-xs)/1.3 var(--font-ui)}
.travel-text-button{min-height:var(--target-min);border:0;background:transparent;color:var(--accent-ink);font:var(--fw-bold) var(--fs-control)/1 var(--font-ui);cursor:pointer;padding:0}
.travel-accessories{display:flex;align-items:center;gap:var(--s-1);flex-wrap:wrap}
.travel-case-controls,.travel-case-hint{
  display:flex;align-items:center;gap:var(--s-3);flex-wrap:wrap;padding:var(--s-3);
  border:1px solid var(--line);border-radius:var(--r-md);background:var(--surface-2);
  color:var(--ink-2);font:var(--fw-regular) var(--fs-sm)/1.4 var(--font-ui);margin-bottom:var(--s-4);
}
.travel-case-controls strong{color:var(--ink);font:var(--fw-bold) var(--fs-control)/1.2 var(--font-ui)}
.travel-case-controls div{display:flex;gap:var(--s-2);margin-left:auto}
.travel-case-group-title{font:var(--fw-bold) var(--fs-md)/1.2 var(--font-display);margin:var(--s-5) 0 var(--s-2)}
.kit-case-parent .grid-name{font-weight:var(--fw-bold)}
.kit-case-expand{border:0;background:transparent;color:var(--accent-ink);font:inherit;padding:0 var(--s-2) 0 0}
.kit-case-member-count{display:block;margin-top:var(--s-1);color:var(--muted);font:var(--fw-regular) var(--fs-xs)/1.2 var(--font-ui)}
.kit-case-child{color:var(--muted)}
.kit-case-child .grid-name{padding-left:var(--s-6)}
.kit-case-child-empty td{padding:var(--s-3);color:var(--muted);font:var(--fw-regular) var(--fs-sm)/1.3 var(--font-ui)}
@media (max-width:639px){
  .travel-case-controls div{width:100%;margin-left:0}
  .travel-case-controls .btn{flex:1}
}

/* Status dots read from the one status palette, so a colour means the same
   thing on a card, a tile, a row, a table cell and the item panel. */
.card-status .dot,.lrow .lstatus .dot,.st .bd,.pc-badge .dot{background:var(--st)}
.card-status.athome .dot{background:var(--st-home)}

/* Grid status cells: one pill grammar, coloured from the status palette. */
.grid-status.pill.st-home{color:var(--st-home-ink);border-color:color-mix(in oklab,var(--st-home),transparent 55%);background:color-mix(in oklab,var(--st-home),transparent 90%)}
.grid-status.pill.st-homeless{color:var(--st-nohome-ink);border-color:color-mix(in oklab,var(--st-nohome),transparent 55%);background:color-mix(in oklab,var(--st-nohome),transparent 90%)}
.grid-status.pill.st-packed{color:var(--st-packed-ink);border-color:color-mix(in oklab,var(--st-packed),transparent 55%);background:color-mix(in oklab,var(--st-packed),transparent 90%)}
.grid-status.pill.st-in-use{color:var(--st-in-use-ink);border-color:color-mix(in oklab,var(--st-in-use),transparent 55%);background:color-mix(in oklab,var(--st-in-use),transparent 90%)}
.grid-status.pill.st-on-load{color:var(--st-on-load-ink);border-color:color-mix(in oklab,var(--st-on-load),transparent 55%);background:color-mix(in oklab,var(--st-on-load),transparent 90%)}
.grid-status.pill.st-lent{color:var(--st-lent-ink);border-color:color-mix(in oklab,var(--st-lent),transparent 55%);background:color-mix(in oklab,var(--st-lent),transparent 90%)}
.grid-status.pill.st-missing{color:var(--st-missing-ink);border-color:color-mix(in oklab,var(--st-missing),transparent 55%);background:color-mix(in oklab,var(--st-missing),transparent 90%)}

/* ---- states --------------------------------------------------------------
   Canvas is a pan/zoom surface, so its empty state is pinned to the viewport
   rather than to the (empty) world. */
.canvas-empty{position:fixed;inset:0;display:grid;place-items:center;pointer-events:none}
.canvas-empty .empty{pointer-events:auto}

/* One loading state for the whole app. Views used to show either nothing, a
   bare "Loading…" string, or a wireframe of empty grid cells. body[data-booting]
   is already set for the duration of boot(). */
body[data-booting] .scroller{position:relative}
body[data-booting] .scroller::after{
  content:"";position:absolute;left:50%;top:38%;width:26px;height:26px;margin-left:-13px;
  border:2px solid var(--line-2);border-top-color:var(--accent);border-radius:50%;
  animation:shelfSpin 700ms linear infinite;
}
@keyframes shelfSpin{to{transform:rotate(360deg)}}
.cap-roll-button{width:auto;min-width:160px;border-radius:12px;padding:14px 22px;font-family:inherit;font-size:15px;font-weight:600;color:#111;background:#fff}
/* A claimed phone replaces the starter choices with a full-width live gallery. */
.onboard.handoff-connected>h1,
.onboard.handoff-connected .ob-links,
.onboard.handoff-connected .ob-cards>.ob-card:not(.ob-primary),
.handoff-connected .ob-primary>h2,
.handoff-connected .ob-primary>p,
.handoff-connected .ob-primary>.ob-new-code{display:none}
.onboard.handoff-connected .ob-cards{display:block}
.handoff-connected .ob-primary{display:block;cursor:default;min-height:300px}
.handoff-connected .ob-primary:hover{transform:none}
.handoff-connected .ob-connected{font-family:var(--font-display);font-size:24px;line-height:1.3;margin:0 0 8px}
.handoff-connected .ob-live-count{font-size:14px;margin-bottom:20px}
.handoff-connected .ob-live-items{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px;text-align:left}
.handoff-connected .ob-live-item{display:flex;flex-direction:column;align-items:stretch;gap:0;overflow:hidden;border:1px solid var(--line);border-radius:12px;background:var(--surface);color:var(--ink)}
.handoff-connected .ob-live-item img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;border-radius:0}
.handoff-connected .ob-live-media,.handoff-connected .ob-live-thumb{display:block;width:100%;height:auto;aspect-ratio:4/3;border-radius:0}
.handoff-connected .ob-live-item>span{padding:12px;font-size:14px;font-weight:700;color:inherit;overflow-wrap:anywhere}
.handoff-connected .ob-live-photo-fallback{display:grid;place-items:center;aspect-ratio:4/3;padding:12px;box-sizing:border-box;background:var(--surface-2);color:var(--muted);font-size:13px;text-align:center}
.handoff-connected .ob-live-item [hidden]{display:none}
.handoff-connected .ob-live-done{margin-top:24px;min-width:120px}
.cap-desk-content.handoff-connected{display:block;overflow:auto}
.cap-desk-content.handoff-connected>.cap-desk-grid,
.cap-desk-content.handoff-connected>.cap-desk-drop-area,
.cap-desk-content.handoff-connected>.cap-desk-zone,
.handoff-connected .cap-handoff-title,
.handoff-connected .cap-handoff-copy,
.handoff-connected .cap-webcam{display:none}
.cap-desk-content.handoff-connected .cap-handoff{display:block;min-height:100%;box-sizing:border-box;padding:28px;overflow:visible;border:0;text-align:left}
.handoff-connected #capDeskLive{width:100%;max-width:1100px;margin:auto}
@media (prefers-reduced-motion:reduce){
  body[data-booting] .scroller::after{animation:none;border-top-color:var(--line-2)}
}

/* ---- Settings page ---- */
.categories-breadcrumb{display:flex;align-items:center;gap:10px;margin-bottom:26px;color:var(--muted);font-size:var(--fs-sm)}
.categories-breadcrumb .settings-action{background:none;border-color:transparent;padding-left:0}
.settings-content.settings-categories{max-width:1050px}
.categories-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:24px}
.categories-heading .btn{flex-shrink:0;min-height:44px}
.categories-heading .settings-description{max-width:470px;margin-bottom:26px}
.categories-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin:4px 0 20px}
.categories-input{box-sizing:border-box;min-width:0;min-height:44px;border:1px solid var(--line);border-radius:var(--r-md);padding:10px 12px;background:var(--surface);color:var(--ink);font:inherit}
.categories-toolbar input{flex:1;min-width:160px}
.categories-toolbar select{max-width:100%}
.categories-toolbar [hidden]{display:none}
.categories-list.settings-card{padding:0 16px;margin-bottom:16px}
.category-row{position:relative;display:flex;align-items:center;gap:12px;min-height:64px;border-bottom:1px solid var(--line);transition:background-color .4s ease}
.category-row-new{background-color:var(--accent-soft,color-mix(in srgb,var(--accent) 14%,transparent));transition:none}
@media(prefers-reduced-motion:reduce){
  .category-row{transition:none}
}
.category-row:last-child{border-bottom:0}
.category-grip{display:grid;place-items:center;flex:0 0 32px;min-height:44px;border:0;background:transparent;color:var(--muted);font-size:26px;cursor:grab;touch-action:none;user-select:none}
.category-grip:active{cursor:grabbing}
.category-dragging{opacity:.55;background:var(--surface-2)}
.category-drop-target{box-shadow:inset 0 -3px var(--accent)}
.category-swatch{position:relative;display:block;flex:0 0 22px;height:22px;border-radius:50%;border:1px solid var(--line-strong);cursor:pointer}
.category-swatch input[type=color]{position:absolute;inset:-10px;width:42px;height:42px;opacity:0;cursor:pointer;padding:0;border:0}
.category-swatch:focus-within{outline:2px solid var(--focus-outline);outline-offset:3px}
.category-name-cell{flex:1;min-width:0}
.category-name{min-height:44px;width:100%;text-align:left;border:0;background:none;padding:8px 0;color:var(--ink);font-size:var(--fs-base);font-weight:650;overflow-wrap:anywhere;cursor:text}
.category-count{font:400 var(--fs-sm)/1.4 var(--font-mono);color:var(--muted);white-space:nowrap}
.category-menu{position:relative;flex:0 0 36px}
.category-menu summary{display:grid;place-items:center;list-style:none;min-height:44px;cursor:pointer;font-size:25px;border-radius:var(--r-md)}
.category-menu summary::-webkit-details-marker{display:none}
.category-menu[open] summary,.category-menu summary:hover{background:var(--surface-2)}
.category-menu[open]{z-index:3}
.category-menu-pop{position:absolute;right:0;top:44px;width:185px;max-width:70vw;border:1px solid var(--line);border-radius:var(--r-md);padding:6px;background:var(--surface);box-shadow:var(--shadow)}
.category-menu-pop button{display:block;width:100%;min-height:44px;padding:10px;text-align:left;border:0;background:none;color:var(--ink);font-size:var(--fs-sm);border-radius:var(--r-md)}
.category-menu-pop button:hover{background:var(--surface-2)}
.category-menu-pop hr{border:0;border-top:1px solid var(--line);margin:4px}
.category-menu-pop .category-delete,.category-error,#categoryDeleteError{color:var(--danger)}
.categories-delete-confirm{background:var(--danger)!important;color:#fff!important;border-color:var(--danger)!important}
.category-add-row,.category-rename-form{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:10px 0}
.category-add-row input,.category-rename-form input{flex:1;min-width:100px;width:100px}
.category-add-row{justify-content:flex-end}
.category-add-row input{flex:0 0 100%;width:100%;min-width:0}
.category-error{flex-basis:100%;font-size:var(--fs-sm)}
.categories-duplicate{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;padding:16px;margin-bottom:18px;background:var(--surface-2);border:1px solid var(--line);border-radius:var(--r-md)}
.categories-duplicate p{margin:0;flex:1;min-width:180px;line-height:1.5}
.categories-inline-actions,.categories-chips{display:flex;gap:8px;flex-wrap:wrap}
.categories-suggestions{margin-top:24px}
.categories-note{font-size:var(--fs-sm);margin-top:20px}
.categories-status{font-size:var(--fs-sm);color:var(--muted);overflow-wrap:anywhere}
.categories-status:empty{display:none}
.categories-empty{padding:20px 0;color:var(--muted)}
.settings-categories button:disabled{cursor:default;opacity:.55}
@media(max-width:700px){
  .categories-heading{flex-direction:column;gap:0}
  .categories-heading>.btn{margin-bottom:20px}
  .categories-list.settings-card{padding:0 10px}
  .category-row{gap:9px;min-height:60px}
  .category-grip{flex-basis:26px}
  .category-rename-form .btn{padding:8px}
}
#settingsPage.settings-page{
  position:fixed;inset:0;z-index:var(--z-panel);display:flex;flex-direction:column;
  min-height:100dvh;background:var(--bg);color:var(--ink);font-family:var(--font-ui);
}
/* Author display:flex must not override a retained page's native hidden state. */
#settingsPage.settings-page[hidden],#wzOverlay[hidden]{display:none!important}
.settings-page button{font-family:var(--font-ui)}
.settings-save-bar{position:sticky;bottom:0;flex:none;display:flex;align-items:center;gap:12px;padding:14px max(24px,env(safe-area-inset-right)) max(14px,env(safe-area-inset-bottom)) max(24px,env(safe-area-inset-left));background:var(--surface);border-top:1px solid var(--line);z-index:2}
.settings-save-bar[hidden]{display:none}
.settings-save-bar>strong{white-space:nowrap}
.settings-save-bar .business-status{flex:1;margin:0}
.settings-save-bar .btn{flex:none;min-height:44px}
.business-card-footer:has(.business-status:empty){display:none}
#settingsPage input:-webkit-autofill{-webkit-box-shadow:0 0 0 1000px var(--surface-2) inset;-webkit-text-fill-color:var(--ink);caret-color:var(--ink)}
@media(max-width:700px){.settings-save-bar{flex-wrap:wrap;padding-left:18px;padding-right:18px}.settings-save-bar>strong{flex:1}.settings-save-bar .business-status:empty{display:none}.settings-save-bar .business-status:not(:empty){order:4;flex-basis:100%}}
.settings-page button:focus-visible{outline:2px solid var(--focus-outline);outline-offset:2px}
.settings-topbar{
  height:64px;min-height:64px;display:flex;align-items:center;gap:28px;padding:0 28px;
  border-bottom:1px solid var(--line);background:var(--surface);
}
.settings-shelf-back,.settings-mobile-back{
  display:inline-flex;align-items:center;min-height:44px;border:0;background:transparent;
  color:var(--ink-2);font-size:var(--fs-sm);font-weight:700;padding:0 8px;border-radius:var(--r-md);
}
.settings-shelf-back:hover,.settings-mobile-back:hover{background:var(--surface-2);color:var(--ink)}
.settings-topbar-title{font:800 20px/1 var(--font-display);letter-spacing:-.035em}
.settings-layout{display:grid;grid-template-columns:280px minmax(0,1fr);flex:1;min-height:0}
.settings-nav{
  display:flex;flex-direction:column;gap:28px;overflow-y:auto;min-height:0;
  padding:32px 16px 22px 28px;background:var(--surface);border-right:1px solid var(--line);
}
.settings-nav-group{display:flex;flex-direction:column;gap:3px}
.settings-eyebrow{
  padding:0 12px 9px;font:700 var(--fs-xs)/1.3 var(--font-ui);
  color:var(--muted);letter-spacing:.06em;text-transform:uppercase;
}
.settings-nav-item{
  width:100%;min-height:44px;display:flex;align-items:center;justify-content:space-between;
  border:1px solid transparent;background:transparent;border-radius:var(--r-md);
  color:var(--ink-2);padding:9px 12px;text-align:left;font-size:var(--fs-control);font-weight:650;
}
.settings-nav-item:hover{background:var(--surface-2);color:var(--ink)}
.settings-nav-item[aria-current="page"]{background:var(--surface-3);border-color:var(--line);color:var(--ink)}
.settings-nav-item.settings-danger-text{color:color-mix(in srgb,var(--danger-ink) 85%,var(--ink))}
.settings-nav-arrow{display:none;color:var(--muted);font-size:23px;line-height:1}
.settings-nav-footer{margin-top:auto;border-top:1px solid var(--line);padding:21px 12px 0}
.settings-signed-in{display:flex;flex-direction:column;gap:5px;color:var(--muted);font-size:var(--fs-xs);line-height:1.4}
.settings-signed-in strong{color:var(--ink-2);font-size:var(--fs-sm);font-weight:600;overflow-wrap:anywhere}
.settings-signout{margin-top:12px;min-height:44px;border:0;border-radius:var(--r-md);background:transparent;color:var(--ink-2);padding:0 12px;font-size:var(--fs-sm);font-weight:700}
.settings-signout:hover{background:var(--surface-2);color:var(--ink)}
.settings-content{
  width:100%;max-width:820px;min-width:0;overflow-y:auto;padding:54px 48px 90px;
  scrollbar-gutter:stable;
}
.settings-content-eyebrow{padding:0;margin:0 0 13px;color:var(--accent-ink)}
.settings-heading{margin:0;font:800 clamp(30px,3vw,40px)/1.1 var(--font-display);letter-spacing:-.045em}
.settings-description{margin:12px 0 35px;color:var(--ink-2);font-size:var(--fs-base);line-height:1.55}
.settings-card{
  margin:0 0 22px;padding:8px 24px 3px;background:var(--surface);
  border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-sm);
}
.settings-card-title{
  margin:0;padding:17px 0 12px;font:800 var(--fs-sm)/1.4 var(--font-display);
  color:var(--muted);letter-spacing:.02em;
}
.business-card{padding-bottom:18px}
.lending-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.lending-card [hidden]{display:none!important}
.lending-weekdays{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:8px 18px}
.lending-weekdays label{display:flex;align-items:center;gap:8px;min-height:44px}
.lending-toggle-row{display:flex;align-items:center;justify-content:space-between;gap:18px;min-height:44px}
.lending-toggle-row label{cursor:pointer;flex:1;padding:10px 0}
.lending-toggle-copy{flex:1;min-width:0}
.lending-toggle-copy label{display:block;padding:8px 0 2px}
.lending-toggle-description{margin:0 0 8px;color:var(--muted);font-size:var(--fs-sm);line-height:1.4}
.lending-toggle-row input[type=checkbox],.lending-weekdays input{width:20px;height:20px;accent-color:var(--accent-ink)}
.settings-page button.settings-switch[aria-pressed]{position:relative;display:grid;place-items:center;flex:0 0 44px;align-self:center;box-sizing:border-box;width:44px;min-width:44px;max-width:44px;height:44px;min-height:44px;max-height:44px;padding:0;border:0;appearance:none;-webkit-appearance:none;background:transparent;box-shadow:none;cursor:pointer}
.settings-page button.settings-switch[aria-pressed]::before{content:"";grid-area:1/1;box-sizing:border-box;width:40px;height:24px;border:0;border-radius:999px;background:var(--line-2);transition:background-color var(--t-fast)}
.settings-page button.settings-switch[aria-pressed]::after{content:"";position:absolute;left:5px;top:13px;width:18px;height:18px;border-radius:50%;background:var(--ink-2);transition:transform var(--t-fast),background var(--t-fast)}
.settings-page button.settings-switch[aria-pressed=true]::before{background:var(--accent-strong)}
.settings-page button.settings-switch[aria-pressed=true]::after{transform:translateX(16px);background:#fff}
.settings-page button.settings-switch[aria-pressed]:focus-visible{outline:none}
.settings-page button.settings-switch[aria-pressed]:focus-visible::before{box-shadow:var(--focus-ring)}
@media(max-width:480px){.lending-grid{grid-template-columns:1fr}}
.business-fields{display:grid;gap:18px;padding:8px 0 22px}
.business-field{display:flex;flex-direction:column;gap:7px;min-width:0}
.business-field label,.business-logo-label{font-size:var(--fs-sm);font-weight:700;color:var(--ink)}
.business-field-hint{color:var(--muted);font-size:var(--fs-sm)}
.business-field input,.business-field select,.business-field textarea{
  width:100%;min-height:44px;padding:10px 12px;border:1px solid var(--line-2);
  border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);font:inherit;
}
.business-field textarea{resize:vertical;min-height:94px}
.business-field :is(input,select,textarea):focus-visible{outline:2px solid var(--accent-ink);outline-offset:2px}
.business-field [aria-invalid="true"]{border-color:var(--danger-ink)}
.business-field-error{color:var(--danger-ink);font-size:var(--fs-sm)}
.business-field-error:empty{display:none}
.business-card-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;border-top:1px solid var(--line);padding-top:16px}
.business-card-footer .btn{flex:none;min-height:44px}
.business-card button:disabled{opacity:.45;cursor:not-allowed}
.business-status{margin:0;color:var(--muted);font-size:var(--fs-sm);line-height:1.5;overflow-wrap:anywhere}
.business-logo{display:flex;align-items:center;gap:18px;padding:12px 0 24px}
.business-logo-preview{width:64px;height:64px;flex:none;display:grid;place-items:center;border:1px solid var(--line);border-radius:var(--r-sm);overflow:hidden;background:var(--surface-2);color:var(--muted);font-size:12px}
.business-logo-preview img{width:64px;height:64px;object-fit:cover}
.business-logo-actions{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.business-logo-actions [hidden]{display:none!important}
.business-logo-label,.business-logo-actions .business-status{flex-basis:100%}
@media(max-width:700px){.business-card-footer{align-items:flex-start;flex-direction:column}.business-card-footer .btn{align-self:flex-end}.business-card{padding-bottom:18px!important}}
.settings-row{
  display:flex;align-items:center;justify-content:space-between;gap:28px;
  min-height:89px;padding:18px 0;border-top:1px solid var(--line);
}
.settings-row-copy{min-width:0}
.settings-row h3{margin:0 0 5px;font:750 var(--fs-base)/1.3 var(--font-display)}
.settings-row p{margin:0;color:var(--muted);font-size:var(--fs-sm);line-height:1.45}
.settings-action{
  flex:0 0 auto;min-height:44px;min-width:92px;padding:8px 14px;
  border:1px solid var(--line-2);border-radius:var(--r-md);
  background:var(--surface-2);color:var(--ink);font-size:var(--fs-sm);font-weight:700;
}
.settings-action:hover{border-color:var(--line-strong);background:var(--surface-3)}
/* Anchors styled as actions look like the buttons beside them, not links. */
a.settings-action,a.dm-btn{text-decoration:none;color:var(--ink)}
a.settings-action{display:inline-flex;align-items:center;justify-content:center}
.settings-plan-actions{display:flex;align-items:center;gap:11px}
.settings-plan-name{
  display:inline-flex;align-items:center;min-height:34px;padding:6px 12px;
  border-radius:var(--r-md);background:var(--surface-3);
  color:var(--ink-2);font:700 var(--fs-xs)/1.2 var(--font-ui);
}
.settings-card-danger{border-color:var(--danger)}
.settings-card-danger .settings-card-title,.settings-card-danger h3{color:var(--danger-ink)}
.settings-action-danger{color:var(--danger-ink);border-color:var(--danger);background:var(--surface)}
.settings-action-danger:hover{border-color:var(--danger-ink);background:var(--surface-2)}
.settings-mobile-back{display:none}
.settings-team-card{padding:22px 24px}
.settings-team-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:18px}
.settings-team-header h2{margin:0;font:800 17px/1.3 var(--font-display)}
.settings-team-header p{margin:5px 0 0;color:var(--muted);font-size:var(--fs-sm);line-height:1.5}
.settings-team-count{flex-shrink:0;text-align:right;white-space:nowrap;font:var(--fs-micro)/1.5 var(--font-mono);color:var(--muted)}
.settings-team-invite,.settings-team-link{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.settings-team-invite input,.settings-team-link input{flex:1;min-width:100px;min-height:44px;width:0;background:var(--surface-2);border:1px solid var(--line-2);border-radius:var(--r-md);padding:11px 12px;color:var(--ink)}
.settings-team-link input{font-family:var(--font-mono);font-size:var(--fs-xs)}
.settings-team-card .btn{min-height:44px;min-width:44px;flex-shrink:0;white-space:nowrap;padding:9px 12px}
.settings-team-card .btn:disabled{opacity:.55}
.settings-team-card input:focus-visible{outline:2px solid var(--focus-outline);outline-offset:2px}
.settings-team-create{margin-top:10px}
.settings-team-message,.settings-team-empty{margin:10px 0;color:var(--muted);font-size:var(--fs-sm);line-height:1.5}
.settings-team-message:empty{display:none}
.settings-team-label{margin-top:20px;font:var(--fs-xs)/1.4 var(--font-ui);letter-spacing:.02em;color:var(--muted)}
.settings-person-row{display:flex;align-items:center;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}
.settings-person-row:last-child{border-bottom:0}
.settings-person-avatar{width:36px;height:36px;flex:0 0 36px;border-radius:9px;background:var(--surface-2);display:grid;place-items:center;font-weight:800}
.settings-person-copy{min-width:0;flex:1}
.settings-person-name{font-weight:700;overflow-wrap:anywhere}
.settings-person-email{font-size:var(--fs-xs);color:var(--muted);overflow-wrap:anywhere}
.settings-person-meta{font:var(--fs-xs)/1.5 var(--font-ui);color:var(--muted);margin-top:3px;overflow-wrap:anywhere}
@media(max-width:700px){
  .settings-topbar{padding:0 18px;gap:16px}
  .settings-topbar-title{font-size:18px}
  .settings-layout{display:block;overflow-y:auto;overscroll-behavior:contain}
  .settings-nav{overflow:visible;padding:25px 18px max(30px,env(safe-area-inset-bottom));gap:25px;border:0;background:transparent}
  .settings-nav-group{gap:5px}
  .settings-eyebrow{padding-left:5px;padding-bottom:8px}
  .settings-nav-item{padding:12px 15px;border-color:var(--line);background:var(--surface);min-height:54px}
  .settings-nav-item[aria-current="page"]{background:var(--surface);border-color:var(--line)}
  .settings-nav-arrow{display:block}
  .settings-nav-footer{margin-top:10px;padding:22px 5px 0}
  .settings-content{max-width:none;overflow:visible;padding:21px 18px 70px;scrollbar-gutter:auto}
  .settings-content-eyebrow{margin-top:22px}
  .settings-mobile-back{display:inline-flex;padding:0 4px}
  .settings-heading{font-size:32px}
  .settings-description{margin-bottom:27px}
  .settings-card{padding:5px 17px 1px}
  .settings-team-card{padding:18px 17px}
  .settings-team-header{flex-wrap:wrap;gap:8px}
  .settings-team-count{margin-left:auto}
  .settings-team-link input,.settings-team-invite input{flex-basis:100%;width:100%}
  .settings-person-row{gap:8px}
  .settings-row{gap:12px;align-items:flex-start;min-height:90px}
  .settings-action{min-width:78px}
  .settings-plan-actions{flex-direction:column;align-items:flex-end;gap:7px}
  .settings-page:not(.settings-list-only) .settings-nav{display:none}
  .settings-page.settings-list-only .settings-content{display:none}
}

/* Unified Shelf chrome: legacy controls stay mounted for compatibility. */
#mWhereBtn,#dmScanBtn,#dmLocBtn{display:none!important}
#shelfSelectBtn,#shelfMoreBtn{display:none}
#dmSheet .shelf-more-groups{display:block;overflow-y:auto;padding:4px 16px max(18px,env(safe-area-inset-bottom))}
.shelf-more-section{margin:0 0 14px}
.shelf-more-section h3{margin:8px 0 8px;font:600 var(--fs-xs) var(--font-ui);letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.shelf-more-tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}
.bookings-section{margin:20px 0;scroll-margin-top:16px}
.bookings-section>h2{font:600 16px var(--font-ui);margin:0 0 12px}
.booking-header-actions{display:flex;gap:8px;flex-wrap:wrap}
.booking-list{display:grid;gap:10px}
.booking-card,.booking-loan-group{min-width:0;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface);overflow:hidden}
.booking-card .lrow{border:0;background:transparent}
.booking-card .la{flex-wrap:wrap}
.booking-ended{color:var(--muted);font-size:12px}
.booking-overdue{color:var(--danger-ink);font-size:12px;font-weight:600}
.booking-due,.booking-group-count{color:var(--muted);font-size:12px}
.booking-group-summary{display:flex;align-items:center;gap:12px;padding:16px;min-height:60px;cursor:pointer;list-style:none}
.booking-group-summary::-webkit-details-marker{display:none}
.booking-group-title{flex:1;min-width:0;font-weight:600;overflow-wrap:anywhere}
.booking-group-kind{font-weight:400;font-size:var(--fs-xs);color:var(--muted);margin-left:5px}
.booking-group-chevron{color:var(--muted);transition:transform .15s}
.booking-loan-group[open]>.booking-group-summary .booking-group-chevron{transform:rotate(180deg)}
.booking-items{display:grid;border-top:1px solid var(--line)}
.booking-item{display:flex;align-items:center;gap:12px;width:100%;min-height:60px;padding:10px 16px;border:0;border-bottom:1px solid var(--line);background:transparent;color:var(--ink);text-align:left;font:inherit;cursor:pointer}
.booking-item:last-child{border-bottom:0}
.booking-item:hover{background:var(--surface-2)}
.booking-item>img,.booking-item-placeholder{width:38px;height:38px;flex:0 0 38px;object-fit:cover;border-radius:5px;background:var(--surface-2)}
.booking-item>span:not(.booking-item-placeholder){overflow-wrap:anywhere}
.booking-quantity{margin-left:auto;flex-shrink:0;color:var(--muted);font-size:12px}
.booking-empty{padding:12px 16px 16px;color:var(--muted);font-size:13px}
.booking-empty strong{font-weight:500;color:var(--ink)}
.booking-empty p{margin:5px 0 0}
.booking-item-details>summary{cursor:pointer;color:var(--muted);padding:0 16px 12px;font-size:12px}
.bookings-past>summary{cursor:pointer;font:600 16px var(--font-ui);margin:0 0 12px}
.booking-item:focus-visible,.booking-group-summary:focus-visible,.bookings-past>summary:focus-visible,.booking-item-details>summary:focus-visible{outline:2px solid var(--accent);outline-offset:-3px}
@media(max-width:700px),(pointer:coarse) and (min-width:701px) and (max-width:1366px){
  .booking-card .lrow{align-items:flex-start;flex-direction:column;gap:12px}
  .booking-card .la{width:100%;justify-content:flex-start}
  .booking-card .lbtn{min-height:44px}
  .booking-group-summary{flex-wrap:wrap;gap:8px 12px}
  .booking-group-title{flex-basis:calc(100% - 24px);order:0}
  .booking-group-chevron{order:1}
  .booking-group-count{order:2}
  .booking-group-summary>.booking-due,.booking-group-summary>.booking-overdue{order:3;margin-left:auto}
}
.os-tree-edit{flex:0 0 auto;border:1px solid var(--line);border-radius:var(--r-sm);background:var(--surface-2);color:var(--ink);min-width:34px;min-height:34px;cursor:pointer}
@media(hover:hover) and (pointer:fine){
  .os-location-rail .os-tree-edit{opacity:0}
  .os-location-rail .os-tree-row:hover .os-tree-edit,.os-location-rail .os-tree-row:focus-within .os-tree-edit{opacity:1}
}
@media(hover:none),(pointer:coarse){.os-location-rail .os-tree-edit{opacity:1;min-width:44px;min-height:44px;padding:5px}}
.os-edit-done{margin:8px 0 12px}
@media(max-width:700px){
  .shelf-more-tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(min-width:701px){
  .topbar{height:auto;min-height:64px;display:flex;flex-wrap:nowrap!important;gap:10px;align-items:center;padding:8px 16px;overflow:visible}
  .topbar .brand{order:0;padding:0;min-width:32px;flex:0 0 auto}
  .topbar #mLayoutBtn{order:1;display:inline-flex!important;flex:0 0 auto;gap:7px;margin:0;padding:0 11px;min-height:40px;white-space:nowrap}
  #mLayoutBtn>svg{width:17px;height:17px}
  .topbar .search{order:2;flex:1 1 0;min-width:0;max-width:none;padding-bottom:0}
  .topbar .actions{order:3;display:flex!important;flex:0 0 auto;width:auto;gap:7px;flex-wrap:nowrap;overflow:visible;padding:0}
  .topbar .actions>*:first-child{margin-inline-start:0}
  .topbar #mVFBtn,.topbar #shelfSelectBtn,.topbar #qrScanNavBtn,.topbar #addBtn{display:inline-flex!important;position:relative;inset:auto;flex:0 0 auto;min-height:40px;padding:0 10px;white-space:nowrap;box-shadow:none}
  .topbar #shelfSelectBtn[hidden]{display:none!important}
  .topbar #tipsBtn,.topbar #themeBtn,.topbar #wizardBtn,.topbar #authChip,.topbar #viewDropBtn{display:none!important}
  .topbar #mVFBtn{gap:6px}
  #mVFBtn>svg:last-of-type{display:none}
  .subbar #wallctl{display:none!important}
  .subbar{padding-block:8px;min-height:0;gap:8px}
  .subbar:has(.filters:empty){display:none}
  .shelf-inventory-view #stageInner>.vhead:not(.arch-head){display:none!important}
  .shelf-inventory-view .os-location-title{display:none}
  .os-pathbar.os-path-root{display:none}
  .os-new-space-main{display:none}
  #spacebar .sp-action-overflow{display:none!important}
  #spacebar{padding-top:4px!important;padding-bottom:4px!important}
  .scroller{padding-top:16px}
  .os-location-header{margin-bottom:16px;gap:12px}
  .os-location-shell{gap:20px}
  .grid-tools{flex-wrap:nowrap;gap:10px;position:relative}
  .grid-tools .grid-chips{flex:1 1 auto;min-width:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .shelf-table-tools{flex:0 0 auto;position:relative}
  .shelf-table-tools>summary{display:inline-flex;align-items:center;min-height:40px;list-style:none;cursor:pointer;white-space:nowrap}
  .shelf-table-tools>summary::-webkit-details-marker{display:none}
  .shelf-table-tools:not([open])>.grid-actions{display:none}
  .shelf-table-tools[open]>.grid-actions{position:fixed;right:auto;z-index:9999;display:flex;flex-direction:column;align-items:stretch;gap:5px;width:240px;padding:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-lg)}
  .shelf-table-tools .grid-size{justify-content:center}
  .shelf-filter-menu{min-width:225px;max-height:calc(100dvh - 90px);overflow-y:auto}
  .shelf-filter-menu>button{display:flex;align-items:center;justify-content:space-between;gap:24px}
  #dock{display:none!important}
  :root{--dock-clear:0px}
}
@media(min-width:701px) and (max-width:1279px){
  .topbar .brand{width:34px;overflow:hidden}
  .topbar .brand>svg{width:34px!important;height:34px;max-width:none;overflow:visible}
  .topbar .brand>svg text{display:none}
}
@media(min-width:701px) and (pointer:fine){
  .topbar #shelfMoreBtn{display:inline-flex!important;align-items:center;justify-content:center;min-width:40px;min-height:40px;font-size:23px}
  #dmSheet.shelf-more-dropdown{left:auto;right:16px;top:72px;bottom:auto;width:380px;max-height:calc(100dvh - 88px);border:1px solid var(--line);border-radius:var(--r-md);transform:none;box-shadow:var(--shadow-lg)}
  #dmSheet.shelf-more-dropdown .vf-handle{display:none}
  #dmSheet.shelf-more-dropdown .vf-sheet-title{padding-top:14px}
}
@media(pointer:coarse){
  .topbar .actions #shelfMoreBtn{display:none!important}
:where(:root body :is(#filters.filters,#shelfCategoryChips,#panel,#shelfFilterMenu,dialog,#modal,.topbar,.subbar) :is(.item-sheet-pencil,.iu-qty-stepper button,.ph-corner-cam,header button,.shelf-filter-toggle,#shelfFilterMenu button,#modal a):not(.ph-corner-cam):not(.ph-cam-hint)){--shelf-touch-target-rule:1;position:relative}
  :root body :is(#filters.filters,#shelfCategoryChips,#panel,#shelfFilterMenu,dialog,#modal,.topbar,.subbar) :is(.item-sheet-pencil,.iu-qty-stepper button,.ph-corner-cam,header button,.shelf-filter-toggle,#shelfFilterMenu button,#modal a)::before{--shelf-touch-target-rule:1;content:"";position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);width:44px;height:44px;background:transparent;border:0;pointer-events:auto}
}
@media(pointer:coarse) and (min-width:701px) and (max-width:1366px){
  :root{--dock-clear:calc(var(--dock-h) + var(--safe-b))}
  /* The dock owns Add wherever the dock is shown: the top bar does not repeat
     it on tablets. (Scan stays: on the Shelf screen it has no other entry.) */
  .topbar #addBtn{display:none!important}
  #dock{display:flex!important;position:fixed;inset:auto 0 0;justify-content:space-around;min-height:calc(60px + var(--safe-b));z-index:var(--z-dock);background:var(--surface);padding:0 8px var(--safe-b);border-top:1px solid var(--line)}
  /* Keep tablet modal actions above the dock; only the body may scroll. */
  .modal{bottom:var(--dock-clear)}
  .modal .modal-card{max-height:100%}
  .modal .modal-h,.modal .modal-f{flex-shrink:0}
  .modal .modal-b{min-height:0}
  #dock>.dbtn{display:none!important}
  #dock>#dockFieldBtn,#dock>#dockShelfBtn,#dock>#dockBookingsBtn,#dock>#dockCaptureBtn,#dock>#dockMoreBtn{display:flex!important;flex:1 1 0;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:8px 3px;min-width:0;min-height:60px}
  #dock .di{width:22px;height:22px}
  #dock>.dbtn span{font-size:var(--fs-xs)}
  .scroller{padding-bottom:calc(80px + var(--safe-b))}
  body[data-crew="1"] #dock>#dockCrewBookBtn{display:flex!important;flex:1 1 0}
  body[data-crew="1"] #dock>#dockShelfBtn,body[data-crew="1"] #dock>#dockCaptureBtn,body[data-crew="1"] #dock>#dockMoreBtn{display:none!important}
  #dmSheet{left:50%;right:auto;width:min(640px,100%);transform:translate(-50%,100%)}
  #dmSheet.show{transform:translate(-50%,0)}
}

/* Match isFieldNav(): the More sheet has the same content on phones and iPads. */
@media(max-width:700px),(pointer:coarse) and (min-width:701px) and (max-width:1366px){
  #dmSheet .shelf-more-section[data-group="data"]{display:none!important}
}

/* Full-screen setup owns its Back/Cancel controls. Phones and touch iPads use
   the same #dock; match isFieldNav(), including landscape iPads at 1366px.
   Import uses the shared modal, so recognise only its real stage markers,
   never every .show modal (Field quick actions must retain their dock).
   closeModal() leaves content mounted for 250ms: .show + aria-hidden is the
   live state, not marker presence. Removed/hidden pages reveal the original
   dock automatically, without changing the selected tab or inline styles.
   fullscreen-dock.js retains import identity while spreadsheet detection
   replaces all body markers, but only while the same modal header survives. */
@media(max-width:700px),(pointer:coarse) and (min-width:701px) and (max-width:1366px){
  body:has(> #settingsPage.settings-page:not([hidden])) #dock,
  body:has(> #wzOverlay:not([hidden])) #dock,
  body:has(#modal.show[data-fullscreen-import]:not([hidden]):not([aria-hidden="true"])) #dock,
  body:has(#modal.show:not([hidden]):not([aria-hidden="true"]) #modalCard :is(
    #impPathXero,
    #impScopeNext,
    #impDrop,
    #impProg,
    #impRetry,
    #impAdd,
    #rgsCommit,
    #migDrop,
    #migReviewBtn,
    #csvColumnsContinue,
    #enrichmentFooter
  )) #dock{display:none!important}
}

/* Phone-only tidy chrome. Do not widen this breakpoint to tablets. */
@media(max-width:700px){
  .topbar{height:auto;min-height:56px;display:flex;flex-wrap:nowrap!important;align-items:center;gap:6px;padding:6px 10px;overflow:visible}
  .topbar .brand,.topbar #viewDropBtn,.topbar #views{display:none!important}
  .topbar #mLayoutBtn{order:0;display:inline-flex!important;flex:0 0 auto;align-items:center;gap:5px;min-height:44px;margin:0;padding:0 8px;white-space:nowrap}
  .topbar #mLayoutBtn>svg{display:none}
  .topbar .search{order:1;flex:1 1 0;min-width:0;max-width:none;padding:0}
  .topbar .search input{width:100%;min-width:0;min-height:44px;padding-block:10px;font-size:16px}
  .topbar .actions{order:2;display:flex!important;flex:0 0 auto;width:auto;gap:0;padding:0;overflow:visible;flex-wrap:nowrap}
  .topbar .actions>:not(#mVFBtn):not(#shelfSelectBtn){display:none!important}
  .topbar .actions #shelfSelectBtn{display:inline-flex!important;min-height:44px;padding:0 8px}
  .topbar .actions #shelfSelectBtn[hidden]{display:none!important}
  body:not([data-guest-mode]):not([data-crew]) .topbar .actions #mWhereBtn:not(.v-hidden){display:none!important}
  .topbar .actions #mVFBtn{display:inline-flex!important;align-items:center;gap:5px;min-height:44px;padding:0 8px;white-space:nowrap}
  .topbar #mVFBtn>svg{display:none}
  #spacebar{flex-wrap:nowrap!important;overflow-x:auto;overflow-y:hidden;padding:4px 10px!important;gap:4px;scrollbar-width:none}
  #spacebar .sp-tab-wrap,#spacebar .sp-tab,#spacebar .sp-add{flex:0 0 auto}
  #spacebar .sp-action-overflow{display:none!important}
  .subbar #wallctl,.home-views-row,.home-views-section,.os-location-title,.os-pathbar.os-path-root,.os-new-space-main,.activity-head{display:none!important}
  .subbar{display:flex!important;min-height:0;padding:0 10px;gap:0;border:0}
  .subbar:has(.filters:empty){display:none!important}
  body:not(.phone-field-view) .scroller{padding-top:16px}
  #stageInner>.vhead:not(.kit-mobile-head):not(.kit-detail-head):not(.arch-head):not(.tosort-head){display:none!important}
  .grid-tools{flex-wrap:nowrap;align-items:center;gap:8px;position:relative}
  .grid-tools .grid-chips{flex:1 1 0;width:auto;min-width:0;flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}
  .shelf-table-tools{flex:0 0 auto;position:relative}
  .shelf-table-tools>summary{display:inline-flex;align-items:center;min-height:44px;list-style:none;cursor:pointer;white-space:nowrap}
  .shelf-table-tools>summary::-webkit-details-marker{display:none}
  .shelf-table-tools:not([open])>.grid-actions{display:none}
  .shelf-table-tools[open]>.grid-actions{position:fixed;right:auto;z-index:9999;display:flex;flex-direction:column;align-items:stretch;gap:5px;width:min(240px,calc(100vw - 32px));padding:10px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-lg)}
  .shelf-table-tools .grid-size{justify-content:center}
  .shelf-filter-menu{min-width:210px;max-width:calc(100vw - 16px);max-height:calc(100dvh - 90px);overflow-y:auto}
  .shelf-filter-menu>button{display:flex;align-items:center;justify-content:space-between;gap:24px;min-height:44px}
  #layoutMenuPop>button{min-height:44px}
  body.phone-field-view .topbar,body.phone-field-view #spacebar,body.phone-field-view .subbar{display:none!important}
}

/* Wrapped searches have one surface: the wrapper owns border and focus.
   Keep this contract after generic input and keyboard-focus rules so neither
   native search styling nor the app-wide ring decorates the inner input. */
body :is(.search,.field-search,.field-search-box) > input,
body :is(.search,.field-search,.field-search-box) > input:is(:hover,:active,:focus,:focus-visible,:disabled){
  border:0;
  outline:0;
  box-shadow:none;
  background:transparent;
  appearance:none;
  -webkit-appearance:none;
}
body :is(.search,.field-search,.field-search-box):focus-within{
  border-color:var(--focus-outline);
}
body :is(.search,.field-search,.field-search-box):has(> :focus-visible){
  outline:2px solid var(--focus-outline);
  outline-offset:2px;
  box-shadow:none;
}
@media (forced-colors:active){
  body :is(.search,.field-search,.field-search-box):has(> :focus-visible){
    outline:3px solid Highlight;
    outline-offset:2px;
  }
}

/* ==== [filter-sheet] ==========================================================
   Phone Filter uses the bottom-sheet pattern already used by Ask and More. */
.shelf-filter-scrim{position:fixed;inset:0;z-index:9998;padding:0;border:0;border-radius:0;box-shadow:none;background:var(--scrim);backdrop-filter:var(--scrim-blur);min-width:0;max-height:none}
.os-ctx-menu.shelf-filter-sheet{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:9999;box-sizing:border-box;width:100%;max-width:none;max-height:min(75dvh,640px);overflow-y:auto;overscroll-behavior:contain;padding:var(--s-2) var(--s-3) calc(var(--s-4) + env(safe-area-inset-bottom));border-radius:var(--r-xl) var(--r-xl) 0 0;border-bottom:0}
.shelf-filter-sheet .shelf-filter-grab{width:40px;height:4px;margin:var(--s-1) auto var(--s-2);border-radius:var(--r-pill);background:var(--line-2)}
.shelf-filter-sheet>button{min-height:var(--target-min)}
.shelf-filter-sheet .shelf-filter-footer{position:sticky;bottom:calc(-1 * (var(--s-4) + env(safe-area-inset-bottom)));z-index:1;margin-top:var(--s-2);padding:var(--s-2) 0 calc(var(--s-4) + env(safe-area-inset-bottom));background:var(--surface);border-top:1px solid var(--line-2)}
.shelf-filter-sheet .shelf-filter-footer .btn.primary{min-height:var(--target-min);justify-content:center;background:var(--accent-strong);color:var(--on-accent);font-weight:600}
/* P20: the compact review entry point is strictly phone-only. */
.shelf-jobs-today{display:none}
.subbar #filters>.fchip[data-status],.subbar #filters>#shelfTodoBtn,.subbar #filters>[data-organise-tosort]{order:-1}
.shelf-todo-sheet{position:fixed;inset:auto 0 0;margin:0;width:100%;max-width:none;max-height:85dvh;box-sizing:border-box;overflow-y:auto;padding:16px 16px calc(16px + env(safe-area-inset-bottom));border:1px solid var(--line);border-bottom:0;border-radius:18px 18px 0 0;background:var(--surface);color:var(--ink);box-shadow:var(--shadow-lg);font-family:var(--font-ui)}
.shelf-todo-sheet::backdrop{background:rgba(20,17,11,.45)}
.shelf-todo-popover{inset:auto;margin:0;width:360px;max-width:calc(100vw - 16px);border:1px solid var(--line);border-radius:14px;padding:16px;z-index:10000}
.shelf-todo-head{display:flex;align-items:center;justify-content:space-between;gap:12px}
.shelf-todo-head h2,.shelf-jobs-today h2{margin:0;font:700 18px/1.3 var(--font-display)}
.shelf-todo-head button{min-width:44px;min-height:44px}
.shelf-job-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 0;border-bottom:1px solid var(--line)}
.shelf-job-row>button{flex:1;min-height:44px;border:0;background:transparent;color:var(--ink);text-align:left;font:600 14px/1.4 var(--font-ui);padding:10px 8px;border-radius:var(--r-sm)}
.shelf-job-row>button[data-todo-sort]{flex:0 1 auto;color:var(--accent-ink);background:var(--surface-2)}
.shelf-todo-recent{margin:20px 8px 4px;font:700 12px/1.4 var(--font-ui);color:var(--muted)}
.shelf-job-row>button:focus-visible,.shelf-todo-head button:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.shelf-jobs-empty{color:var(--muted);font-size:14px}
@media(max-width:700px){
  .shelf-jobs-today{display:block;margin:20px 0;padding:16px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md)}
}
/* P23: side-by-side sorting must shrink the actual shell, not cover its
   content or merely pad the inner grid. Tabs own their horizontal overflow. */
@media(min-width:701px){
  body.ss-open>#spacebar,body.ss-open>header.topbar,body.ss-open>.subbar,body.ss-open>#stage{
    min-width:0;max-width:100%;
  }
  body.ss-open #spacebar{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden}
  body.ss-open #spacebar>*{flex-shrink:0}
  body.ss-open .topbar{gap:8px;padding-inline:12px;display:grid;grid-template-columns:auto auto minmax(140px,1fr)}
  body.ss-open .topbar .search{min-width:140px;flex:1 1 160px}
  body.ss-open .topbar .search.shelfy-search-host input{box-sizing:border-box;flex:1 1 0;width:0;min-width:44px;padding-inline:0!important;text-indent:8px}
  body.ss-open .topbar .search.shelfy-search-host>svg{display:none}
  body.ss-open .topbar .shelfy-search-chip{position:relative;inset:auto;transform:none;flex:none}
  body.ss-open .topbar .actions{min-width:0;flex:0 1 auto;grid-column:1/-1;flex-wrap:wrap;overflow-x:visible}
  /* This introductory coach is positioned against pre-sort viewport
     coordinates. It must not hang across the split workspace. */
  body.ss-open .shelfy-coach{display:none}
  body.ss-open .subbar{flex-wrap:wrap}
}
/* P22: bound the column-flex shell itself, not its painted overflow. Safari
   must not use the intrinsic width of the shelf/collection strips as the
   cross-axis minimum. Each strip owns its horizontal scrolling. Desktop and
   the sidebar's padding/width contract are deliberately untouched. */
@media(max-width:700px){
  body>#spacebar,body>header.topbar,body>.subbar,body>#stage,
  #stage>.scroller,#stageInner{
    box-sizing:border-box;min-width:0;max-width:100%;
  }
  body>#spacebar,body>header.topbar,body>.subbar,body>#stage{width:100%}
  .topbar .search{box-sizing:border-box;min-width:0;max-width:100%}
  /* The global Ask integration reserves 100px of right padding, on top of
     the old 34px magnifier inset. Padding is a real input minimum even with
     min-width:0: the input otherwise paints into Filter's left edge.
     Put Ask in flow at its full width; the input, not its padding, shrinks. */
  .topbar .search.shelfy-search-host input{box-sizing:border-box;flex:1 1 0;width:0;max-width:100%;padding-inline:0!important;text-indent:8px}
  .topbar .search.shelfy-search-host>.shelfy-search-chip{position:relative;inset:auto;transform:none;flex:0 0 78px;margin-right:4px}
  .topbar .search.shelfy-search-host>svg{display:none}
}
.shelf-filter-search-header{position:sticky;top:0;z-index:2;background:var(--surface);padding:4px 0}
.shelf-filter-menu .shelf-category-clear{display:block;width:auto;margin-left:auto;text-decoration:underline}
.shelf-filter-menu .shelf-category-option.ctx-on{background:var(--accent-strong);color:var(--on-accent);border-radius:var(--r-sm)}
.shelf-category-check{display:inline-block;width:16px;flex:0 0 16px}
.shelf-filter-menu .shelf-category-search{min-height:44px}
.shelf-filter-menu:not(.shelf-filter-sheet){max-height:calc(100dvh - 32px);overflow-y:auto}

/* Kit details on a phone: grid children must shrink, or date inputs push the
   sheet past the screen edge. Gig-time presets use theme tokens, not the
   browser's default white buttons. */
.kit-edit-body input,.kit-edit-body select,.kit-edit-body textarea{max-width:100%;min-width:0;box-sizing:border-box}
.kit-edit-body input[type=date]{width:100%}
.jt-edit button{min-height:40px;padding:6px 12px;border:1px solid var(--line);border-radius:999px;background:var(--surface-2);color:var(--ink);font:500 var(--fs-xs)/1.2 var(--font-ui);cursor:pointer}
.jt-edit button:hover{border-color:var(--line-strong)}
.jt-edit legend{font:600 var(--fs-control)/1.3 var(--font-ui);color:var(--ink)}
/* askText(): the in-app replacement for window.prompt() */
dialog.ask-text{border:1px solid var(--line);border-radius:var(--r-lg,16px);padding:0;width:min(420px,calc(100vw - 32px));background:var(--surface);color:var(--ink);box-shadow:var(--shadow-lg)}
dialog.ask-text::backdrop{background:rgb(0 0 0 / 45%)}
.ask-text-form{display:grid;gap:12px;padding:20px}
.ask-text-form h2{margin:0;font:800 var(--fs-lg,20px)/1.2 var(--font-display)}
.ask-text-hint{margin:0;color:var(--muted);font-size:var(--fs-sm,14px)}
.ask-text-input{width:100%;box-sizing:border-box;min-height:48px;font-size:16px}
.ask-text-err{margin:0;min-height:0;color:var(--danger-ink);font-size:var(--fs-sm,14px)}
.ask-text-err:empty{display:none}
.ask-text-f{display:flex;justify-content:flex-end;gap:10px}
.ask-text-f .btn{min-height:44px}
/* Centred on phones too: a bottom-anchored dialog can sit behind the iOS keyboard. */
/* Phones: Bookings, Activity and Overview keep the search box but not the
   Shelf-only controls (space tabs, View, Filter). See shelf-chrome.js. */
@media (max-width:700px),(pointer:coarse) and (max-width:1366px){
  body.shelf-aux-view #spacebar,
  body.shelf-aux-view .topbar #mLayoutBtn,
  body.shelf-aux-view .topbar #mVFBtn{display:none!important}
}
.settings-space-actions{display:flex;gap:var(--s-2);flex:none}
.settings-space-actions .settings-action:disabled{opacity:.45;cursor:not-allowed}
.settings-space-add{margin-top:var(--s-3);flex:none;align-self:flex-start}
/* Phones: Add opens as a bottom sheet, like Filter, Ask and More. */
@media (max-width:700px){
  .add-menu-overlay{background:rgb(0 0 0 / 40%)}
  .add-menu{left:0!important;right:0!important;top:auto!important;bottom:0!important;width:100%;max-height:min(80dvh,640px)!important;box-sizing:border-box;border-radius:20px 20px 0 0!important;padding:10px 8px calc(12px + env(safe-area-inset-bottom))!important}
  .add-menu::before{content:"";display:block;width:36px;height:4px;margin:0 auto 8px;border-radius:4px;background:var(--line-strong,var(--line))}
  .add-menu .add-menu-row{min-height:52px}
}
/* Inline new/rename location: input and an Add button side by side */
.lpk-create-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.lpk-create-row .lpk-create-input{flex:1 1 160px;min-width:0}
.lpk-create-row .lpk-create-save{flex:0 0 auto;min-height:44px;padding-inline:16px}
.lpk-create-row .lpk-create-error{flex-basis:100%}
/* Capture summary: "Sort now"/"Done" is where you're going, so it's the
   primary button; "Capture more" and "Back" step back to secondary. Guests keep
   "Save your shelf" as their one primary. */
.cap-sum-foot:not(:has(.cap-guest-save)) .cap-sum-done{flex:1;min-height:48px;padding:12px 16px;border-radius:var(--r-md);background:var(--accent);color:white;font:700 var(--fs-control)/1.2 var(--font-ui)}
.cap-sum-foot:not(:has(.cap-guest-save)) .cap-sum-done:hover{filter:brightness(1.08);color:white}
.cap-sum-foot:not(:has(.cap-guest-save)) .cap-sum-more{flex:0 1 auto;background:rgb(255 255 255 / 12%);border:1px solid rgb(255 255 255 / 20%);color:white}
.cap-sum-foot:not(:has(.cap-guest-save)) .cap-sum-more:hover{background:rgb(255 255 255 / 18%)}
/* Phones hide view headings, but To sort needs one: it's where capture lands,
   and the top bar only names the layout. */
.shelf-inventory-view #stageInner>.vhead.tosort-head{display:flex!important;align-items:center;justify-content:space-between;gap:12px}
.shelf-floating-menu:is(.grid-actions,.os-ctx-menu){box-sizing:border-box;max-width:var(--menu-max-width);max-height:var(--menu-max-height);min-width:0;overflow:auto}
.shelf-table-tools .grid-actions{flex-wrap:nowrap}
.shelf-table-tools .grid-actions>.grid-action{white-space:normal;overflow-wrap:anywhere;min-width:0;text-align:left}
