/* Ink IDX Engine — brand styling (Deep Navy / Ink Blue / Warm White / Soft Stone / Warm Bronze)
   Bronze doctrine (v0.29.1, Claude round 2): --ink-bronze (#A98A54, 3.26:1 on
   white) is DECORATIVE only — rules, borders, underline accents, marker
   glyphs. Wherever bronze carries text — as a color, or as the background
   behind white text — the declaration uses --ink-bronze-text (#8C7346,
   4.51:1), the same shade the digest email adopted in v0.29.0. */
.ink-idx { --ink-navy:#0F2B5B; --ink-blue:#1E4E9E; --ink-charcoal:#1A1A1A; --ink-warm:#FAF7F1; --ink-stone:#E6DDCF; --ink-bronze:#A98A54; --ink-bronze-text:#8C7346; --text-muted:rgb(26 26 26 / .72); --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:24px; --space-6:32px; --space-7:48px; --space-8:72px; --radius-card:10px; --control-h:48px; --hairline:1px solid var(--ink-stone); --shadow-hover:0 8px 24px rgb(15 43 91 / .08); --ease-out:cubic-bezier(.2,.7,.2,1); --dur:240ms; font-family:'Montserrat',sans-serif; color:var(--ink-charcoal); }
@media (prefers-reduced-motion: reduce) { .ink-idx *, .ink-idx *::before, .ink-idx *::after { animation:none !important; transition:none !important; } }
.ink-idx h1, .ink-idx h2, .ink-idx h3 { font-family:'Playfair Display',serif; color:var(--ink-navy); }

.ink-idx-search { display:grid; grid-template-columns:repeat(12,1fr); gap:14px; background:var(--ink-stone); padding:20px; border-radius:8px; margin-bottom:18px; }
.ink-span-2 { grid-column:span 2; } .ink-span-3 { grid-column:span 3; } .ink-span-5 { grid-column:span 5; }
@media (max-width:860px) { .ink-idx-search > * { grid-column:span 6 !important; } .ink-idx-search > .ink-span-5:first-child { grid-column:span 12 !important; } }
.ink-idx-field label { display:block; font-size:12px; letter-spacing:.12em; text-transform:uppercase; color:var(--ink-navy); margin-bottom:6px; font-weight:600; }
.ink-idx-field select, .ink-idx-field input { width:100%; height:var(--control-h); padding:0 16px; border:1px solid #cbbfa9; border-radius:4px; background:#fff; font:inherit; font-size:16px; box-sizing:border-box; }
.ink-idx-submit { display:flex; align-items:flex-end; justify-content:flex-end; }
.ink-idx-submit button { height:var(--control-h); white-space:nowrap; padding:0 30px; }
.ink-idx-submit button, .ink-button { background:var(--ink-navy); color:var(--ink-warm); border:none; padding:12px 22px; border-radius:4px; font:inherit; font-weight:600; cursor:pointer; text-decoration:none; display:inline-block; }
.ink-results-bar { display:flex; align-items:center; justify-content:space-between; flex-wrap:wrap; gap:8px 20px; margin:6px 0 16px; }
.ink-results-bar .ink-idx-count { margin:0; }
.ink-sort-form { display:inline-flex; align-items:center; gap:8px; font-size:14.5px; color:var(--ink-charcoal); }
.ink-sort-form select { height:40px; padding:0 10px; border:1px solid #cbbfa9; border-radius:4px; background:#fff; font:inherit; font-size:14.5px; }
.ink-idx-submit button:hover, .ink-button:hover { background:var(--ink-blue); color:var(--ink-warm); }
.ink-button-alt { background:var(--ink-bronze-text); color:#fff; }
.ink-button-alt:hover { background:var(--ink-navy); }
.ink-idx-count { font-size:15px; color:#555; margin:6px 0 16px; }
.ink-homes-page .entry-title, .ink-homes-page .page-title { display:none; }
.ink-homes-page .current-menu-item > a, .ink-homes-page .current_page_item > a { position:relative; }
.ink-homes-page .current-menu-item > a::after, .ink-homes-page .current_page_item > a::after { content:''; position:absolute; left:0; right:0; bottom:-8px; height:2px; background:var(--ink-bronze); }

.ink-idx-hero { background:var(--ink-navy); color:var(--ink-warm); border-radius:10px; padding:34px 30px; margin-bottom:20px; text-align:center; }
.ink-idx-hero .ink-idx-eyebrow { letter-spacing:.18em; text-transform:uppercase; font-size:12px; color:var(--ink-bronze-text); margin:0 auto; max-width:none; font-weight:700; }
.ink-hero-rule { display:block; width:32px; height:1px; background:var(--ink-bronze); margin:12px auto 14px; }
.ink-idx-hero h1, .ink-idx-hero h2 { color:var(--ink-warm); font-size:34px; margin:0 0 10px; }
.ink-idx-hero p { max-width:640px; margin:0 auto; line-height:1.65; }
.ink-card { transition:box-shadow var(--dur) var(--ease-out); }
.ink-card:hover { box-shadow:var(--shadow-hover); }
@keyframes ink-rise { from { opacity:0; transform:translateY(8px); } to { opacity:1; transform:translateY(0); } }
.ink-idx-grid > .ink-card, .ink-idx-grid > .ink-my-cell { animation:ink-rise var(--dur) var(--ease-out) both; }
.ink-idx-grid > :nth-child(2) { animation-delay:40ms; } .ink-idx-grid > :nth-child(3) { animation-delay:80ms; } .ink-idx-grid > :nth-child(4) { animation-delay:120ms; } .ink-idx-grid > :nth-child(5) { animation-delay:160ms; } .ink-idx-grid > :nth-child(6) { animation-delay:200ms; } .ink-idx-grid > :nth-child(7) { animation-delay:240ms; } .ink-idx-grid > :nth-child(8) { animation-delay:280ms; } .ink-idx-grid > :nth-child(n+9) { animation-delay:0ms; }
.ink-card-photo img { transition:transform .6s ease; }
.ink-card:hover .ink-card-photo img { transform:scale(1.05); }
.ink-card-photo { overflow:hidden; }
.ink-related { margin:34px 0 6px; }
.ink-related h2 { margin-bottom:16px; }
/* The withdrawn rail (Claude round 3, item 1): four matches are
   a choice and should read as one — the rail takes its own grid
   (four across at desktop, two at tablet, one on phones) instead
   of the search grid's three-plus-orphan. The two-class selectors
   outrank the base .ink-idx-grid templates at every width. */
@media (min-width:1024px) { .ink-idx-grid.ink-similar-rail { grid-template-columns:repeat(4,1fr); } }
@media (min-width:641px) and (max-width:1023px) { .ink-idx-grid.ink-similar-rail { grid-template-columns:repeat(2,1fr); } }
@media (max-width:640px) { .ink-idx-grid.ink-similar-rail { grid-template-columns:1fr; } }
/* The rail's spec line (Claude round 4, item 1b): each value is
   its own span in a wrapping flex row, so the line wraps only
   between values; the dot separators are suppressed in this
   context — no separator can trail a line end or lead the next
   line — and the gap carries the rhythm instead. */
.ink-similar-rail .ink-card-facts-rail { display:flex; flex-wrap:wrap; column-gap:10px; row-gap:2px; }
.ink-similar-rail .ink-spec { white-space:nowrap; }
.ink-sticky-cta { display:none; }
@media (max-width:860px) {
  .ink-sticky-cta { display:flex; position:fixed; left:0; right:0; bottom:0; z-index:60; background:var(--ink-navy); padding:10px 12px; gap:10px; box-shadow:0 -4px 18px rgba(15,43,91,.25); }
  .ink-sticky-cta a { flex:1; text-align:center; background:var(--ink-bronze-text); color:#fff; padding:12px 8px; border-radius:4px; font-weight:600; text-decoration:none; }
  .ink-sticky-cta a.alt { background:transparent; border:1px solid var(--ink-warm); color:var(--ink-warm); }
  .ink-detail-wrap { padding-bottom:calc(132px + env(safe-area-inset-bottom, 0px)); }
  .ink-idx-hero h1, .ink-idx-hero h2 { font-size:27px; }
}

.ink-idx-grid { display:grid; grid-template-columns:repeat(auto-fill,minmax(280px,1fr)); gap:24px; }
.ink-card { background:var(--ink-warm); border:1px solid var(--ink-stone); border-radius:var(--radius-card); overflow:hidden; display:flex; flex-direction:column; }
.ink-card-photo { position:relative; display:block; aspect-ratio:4/3; background:var(--ink-stone); flex:none; }
.ink-card-photo img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; object-position:50% 55%; display:block; }
.ink-card-nophoto { display:flex; flex-direction:column; gap:10px; align-items:center; justify-content:center; width:100%; height:100%; color:var(--ink-navy); font-size:13px; letter-spacing:.02em; text-decoration:none; }
.ink-house-glyph { width:44px; height:44px; }
.ink-house-glyph path { fill:none; stroke:var(--ink-navy); stroke-width:1.5; stroke-linecap:round; stroke-linejoin:round; }
.ink-detail-nophoto { display:flex; flex-direction:column; gap:12px; align-items:center; justify-content:center; background:#FAF7F1; border:1px solid #E6DDCF; border-radius:10px; height:240px; max-height:240px; color:var(--ink-navy); font-size:13px; letter-spacing:.02em; }
.ink-detail-nophoto .ink-house-glyph { width:56px; height:56px; }
.ink-cta-people { display:flex; align-items:center; gap:14px; margin-bottom:20px; }
.ink-cta-faces { display:inline-flex; flex:none; }
.ink-cta-face-wrap { width:56px; height:56px; border-radius:50%; overflow:hidden; border:2px solid var(--ink-warm); flex:none; display:block; box-sizing:border-box; }
.ink-cta-face-wrap-2 { margin-left:-12px; }
.ink-cta-face { width:100%; height:100%; object-fit:cover; object-position:50% 0%; display:block; }
.ink-cta-face-1 { transform:scale(1.166); transform-origin:38% 0%; }
.ink-cta-face-2 { object-position:50% 7%; }
.ink-cta-names { display:flex; flex-direction:column; font-weight:700; font-size:17px; line-height:1.25; }
.ink-cta-sub { font-weight:400; font-size:13px; opacity:.75; }
.ink-related-eyebrow { letter-spacing:.18em; text-transform:uppercase; font-size:12px; color:var(--ink-bronze-text); font-weight:700; margin:0 0 6px; }
.ink-related-eyebrow + h2 { margin-top:0; }
.ink-card-badge { position:absolute; top:20px; left:12px; background:var(--ink-bronze-text); color:#fff; font-family:'Montserrat',sans-serif; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; padding:4px 10px; border-radius:20px; }
.ink-detail-price .ink-card-badge { position:static; vertical-align:middle; }
.ink-card-body { padding:20px 24px 24px; }
.ink-card-price { font-family:'Playfair Display',serif; font-size:24px; color:var(--ink-navy); margin:0 0 6px; font-variant-numeric:lining-nums tabular-nums; }
.ink-cur { font-size:.85em; vertical-align:.08em; }
.ink-card-rule { display:block; width:24px; height:1px; background:var(--ink-bronze); margin:0 0 10px; }
.ink-card-facts { margin:0 0 14px; color:#555; font-size:14px; min-height:20px; }
.ink-card-title { margin:0 0 2px; font-size:19px; line-height:1.25; }
.ink-card-title a { color:var(--ink-navy); text-decoration:none; }
.ink-card-title a:hover { text-decoration:underline; text-decoration-color:var(--ink-bronze); text-decoration-thickness:1px; text-underline-offset:4px; }
.ink-card-city { margin:0; color:#555; font-size:14px; }
.ink-card-courtesy { margin:0; font-size:13px; color:var(--text-muted); line-height:1.45; min-height:38px; }
.ink-card-per { font-family:'Montserrat',sans-serif; font-size:15px; color:rgb(26 26 26 / .6); margin-left:4px; }
.ink-detail-price .ink-card-per { font-size:17px; }
.ink-badge-lease { background:transparent; color:var(--ink-blue); border:1.5px solid var(--ink-blue); font-family:'Montserrat',sans-serif; font-size:12px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; }
.ink-detail-price .ink-badge-lease { background:transparent; }
.ink-badge-second { top:52px; }
.ink-card-ntreis { position:absolute; left:12px; bottom:12px; z-index:2; display:flex; align-items:center; background:#fff; border-radius:999px; padding:4px 8px; box-shadow:0 2px 8px rgba(15,43,91,.18); line-height:0; pointer-events:none; }
.ink-card-ntreis img { height:16px; width:auto; display:block; }

.ink-idx-pages { margin:26px 0; display:flex; gap:12px; flex-wrap:wrap; align-items:center; }
.ink-idx-pages a, .ink-idx-pages span { min-width:40px; height:40px; padding:0 10px; display:inline-flex; align-items:center; justify-content:center; border:1px solid #d8cdb8; border-radius:4px; text-decoration:none; color:var(--ink-navy); font-size:15px; font-variant-numeric:tabular-nums; box-sizing:border-box; }
.ink-idx-pages a:hover { background:var(--ink-stone); }
.ink-idx-pages .current { background:var(--ink-navy); color:var(--ink-warm); border-color:var(--ink-navy); }
.ink-idx-pages .gap { border:none; min-width:0; padding:0; color:var(--text-muted); }
.ink-idx-pages .ink-page-nav { min-width:0; padding:0 14px; }
.ink-idx-empty { background:var(--ink-stone); padding:22px; border-radius:8px; }

.ink-detail-wrap { width:100%; max-width:1080px; margin:0 auto; padding:10px 20px 40px; }
/* The withdrawn composition (Claude round 4, item 2): heading,
   copy, button, rail, and band share this one container at one
   width whether or not a rail renders — paired with the pinned
   width:100% on .ink-detail-wrap above, the no-rail page can no
   longer sit in a narrower column than the with-rail page. */
.ink-withdrawn { width:100%; }
/* "Ask us" must read as a link (round 4, item 3): an underline
   with a small offset; color and weight stay the text's own. */
.ink-withdrawn .ink-ask-link { text-decoration:underline; text-underline-offset:3px; }
.ink-detail-back a { color:var(--ink-blue); text-decoration:none; font-size:14px; }
.ink-detail-title { font-size:40px; margin:8px 0 2px; }
.ink-detail-city { color:#555; margin:0 0 6px; font-size:17px; }
.ink-detail-price { font-family:'Playfair Display',serif; font-size:30px; color:var(--ink-navy); margin:0 0 6px; }
.ink-detail-strip { font-size:17px; color:var(--ink-charcoal); margin:0 0 18px; }
.ink-gallery { display:grid; grid-template-columns:2fr 1fr 1fr; grid-template-rows:repeat(2,196px); gap:8px; }
.ink-gallery-single { grid-template-columns:1fr; grid-template-rows:392px; }
.ink-gimg { position:relative; display:block; padding:0; border:0; background:var(--ink-stone); cursor:pointer; overflow:hidden; border-radius:6px; }
.ink-gimg:first-child { border-radius:10px 6px 6px 10px; }
.ink-gimg-hero { grid-row:span 2; }
.ink-gimg img { position:absolute; inset:0; width:100%; height:100%; object-fit:cover; display:block; }
.ink-gallery-all { position:absolute; right:10px; bottom:10px; background:rgba(255,255,255,.95); color:var(--ink-navy); font-size:13px; font-weight:600; padding:8px 14px; border-radius:20px; box-shadow:0 2px 8px rgba(15,43,91,.2); }
@media (max-width:700px) { .ink-gallery { grid-template-columns:1fr 1fr; grid-template-rows:220px 110px 110px; } .ink-gimg-hero { grid-column:span 2; grid-row:auto; } }
.ink-lightbox { position:fixed; inset:0; z-index:2000; background:rgba(10,16,28,.94); display:flex; align-items:center; justify-content:center; }
.ink-lightbox[hidden] { display:none; }
.ink-lb-img { max-width:92vw; max-height:88vh; border-radius:6px; }
.ink-lb-close, .ink-lb-prev, .ink-lb-next { position:absolute; background:rgba(255,255,255,.12); color:#fff; border:0; width:48px; height:48px; border-radius:50%; font-size:26px; line-height:1; cursor:pointer; display:flex; align-items:center; justify-content:center; }
.ink-lb-close:hover, .ink-lb-prev:hover, .ink-lb-next:hover { background:rgba(255,255,255,.25); }
.ink-lb-close { top:18px; right:18px; }
.ink-lb-prev { left:18px; top:50%; transform:translateY(-50%); }
.ink-lb-next { right:18px; top:50%; transform:translateY(-50%); }
.ink-lb-count { position:absolute; bottom:18px; left:50%; transform:translateX(-50%); color:#fff; font-size:14px; font-variant-numeric:tabular-nums; letter-spacing:.06em; }
.ink-detail-facts { display:grid; grid-template-columns:repeat(4,1fr); gap:16px; margin:26px 0 6px; }
@media (max-width:700px) { .ink-detail-facts { grid-template-columns:repeat(2,1fr); } }
.ink-fact { background:var(--ink-warm); border:1px solid #e7dfd2; border-radius:8px; padding:12px 14px; }
.ink-fact-label { display:block; font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--text-muted); margin-bottom:4px; }
.ink-fact-value { font-weight:600; color:var(--ink-navy); }
.ink-costs { background:var(--ink-warm); border:1px solid var(--ink-stone); border-radius:10px; padding:20px 22px; margin:20px 0 2px; }
.ink-costs h2 { margin:0 0 8px; }
.ink-costs-row { display:flex; align-items:baseline; gap:18px; padding:9px 0; border-bottom:1px solid #eee5d5; }
.ink-costs-rows .ink-costs-row:last-child { border-bottom:0; padding-bottom:2px; }
.ink-costs-label { flex:none; font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--text-muted); }
.ink-costs-value { margin-left:auto; min-width:0; overflow-wrap:break-word; text-align:right; font-weight:600; color:var(--ink-navy); }
.ink-costs-note { font-size:13px; line-height:1.6; color:var(--text-muted); margin:12px 0 0; }
@media (max-width:700px) { .ink-costs { padding:16px; } }
@media (max-width:480px) { .ink-costs-row { display:block; } .ink-costs-value { display:block; margin-left:0; margin-top:2px; text-align:left; } }
.ink-updates { margin:24px 0 4px; }
.ink-details { margin:24px 0 4px; }
.ink-details h2 { margin:0 0 4px; }
.ink-dgroup { border-bottom:1px solid var(--ink-stone); }
.ink-details .ink-dgroup:first-of-type { border-top:1px solid var(--ink-stone); }
.ink-dgroup-title { margin:0; font-size:inherit; }
.ink-dgroup-head { display:flex; align-items:center; gap:10px; width:100%; padding:12px 2px; margin:0; background:transparent; border:0; border-radius:4px; cursor:pointer; font-family:'Montserrat',sans-serif; font-size:12px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; text-align:left; color:var(--ink-blue); }
.ink-dgroup-head:focus-visible { outline:2px solid var(--ink-blue); outline-offset:2px; }
/* Item 11 (Claude's review): the solid Ink Blue bar a reviewer
   caught on hover ("Lot & Utilities", cursor over it) is theme
   button styling leaking through — no state of this stylesheet
   ever filled the header. The hover now spends itself on the
   spec's own language — a faint Soft Stone tint under Deep Navy
   text — and the pin is scoped + stated (0-3-0) so a theme's
   two-class hover rule cannot outrank it again. Focus and open
   states stay transparent; the 2px ring above remains
   :focus-visible's alone, and no state carries an Ink Blue fill. */
.ink-dgroup-head:focus, .ink-dgroup-head[aria-expanded="true"] { background:transparent; }
.ink-idx .ink-dgroup-head:hover { background:rgb(230 221 207 / .35); color:var(--ink-navy); }
.ink-dgroup-name { font-size:12px; font-weight:600; letter-spacing:.12em; text-transform:uppercase; }
.ink-dgroup-chev { margin-left:auto; flex:none; color:var(--text-muted); transition:transform 160ms ease; }
.ink-dgroup-head[aria-expanded="true"] .ink-dgroup-chev { transform:rotate(180deg); }
.ink-dgroup-body { display:grid; grid-template-rows:1fr; transition:grid-template-rows 160ms ease; }
.ink-dgroup-closed .ink-dgroup-body { grid-template-rows:0fr; }
.ink-dgroup-rows { overflow:hidden; min-height:0; }
/* Item 14 (Claude's review): a fixed label column, values
   left-aligned — a long value (Interior Features runs to a
   paragraph) wraps under itself in one clean column instead of
   ragging against a right-aligned edge. */
.ink-drow { display:grid; grid-template-columns:200px 1fr; column-gap:18px; align-items:baseline; padding:7px 0; }
/* Hairlines between the rows of an open group (Claude's review):
   every row carries the 1px Soft Stone line except the last — none
   above the first row, none below the last, the costs panel's rhythm. */
.ink-dgroup-rows .ink-drow { border-bottom:1px solid var(--ink-stone); }
.ink-dgroup-rows .ink-drow:last-of-type { border-bottom:0; }
.ink-dgroup-rows .ink-drow:last-child { padding-bottom:12px; }
.ink-drow-label { flex:none; font-size:11px; letter-spacing:.12em; text-transform:uppercase; color:var(--text-muted); }
.ink-drow-value { min-width:0; overflow-wrap:break-word; text-align:left; font-weight:600; color:var(--ink-navy); }
.ink-drow-note { font-size:13px; line-height:1.6; color:var(--text-muted); margin:8px 0 4px; }
.ink-drow-value .ink-ntreis-logo { height:20px; width:auto; display:inline-block; vertical-align:-5px; }
@media (max-width:640px) { .ink-drow { grid-template-columns:140px 1fr; } }
.ink-detail-courtesy { font-size:13px; line-height:1.6; color:var(--text-muted); margin:10px 0 4px; }
.ink-detail-mapsec { margin:26px 0; }
.ink-detail-mapsec iframe { width:100%; height:320px; border:0; border-radius:10px; display:block; background:var(--ink-stone); }
.ink-detail-mapsec p { margin:8px 0 0; font-size:14px; }
.ink-detail-mapsec a { color:var(--ink-blue); }
.ink-detail-remarks { margin:24px 0; line-height:1.7; max-width:680px; }
.ink-remarks-list { list-style:none; margin:14px 0 0; padding:0; }
.ink-remarks-list li { display:flex; align-items:baseline; padding:7px 0 7px 20px; position:relative; border-bottom:1px solid #eee5d5; }
.ink-remarks-list li::before { content:'\2013'; position:absolute; left:2px; color:var(--ink-bronze); font-weight:700; }
.ink-remarks-fig { margin-left:auto; padding-left:18px; font-variant-numeric:tabular-nums; color:var(--text-muted); white-space:nowrap; }
.ink-detail-cta { background:var(--ink-navy); color:var(--ink-warm); border-radius:10px; padding:48px; margin:30px 0; }
.ink-detail-cta h2 { color:var(--ink-warm); margin-top:0; }
.ink-detail-cta .ink-button { background:var(--ink-bronze-text); color:#fff; margin-right:10px; }
.ink-detail-cta .ink-button-alt { background:transparent; border:1px solid var(--ink-warm); color:var(--ink-warm); }
.ink-detail-cta .ink-cta-text { display:inline-flex; align-items:center; gap:8px; }
.ink-cta-text-icon { flex:none; }
.ink-cta-consent { font-size:13px; line-height:1.55; opacity:.72; margin:14px 0 0; }
/* Item 15 (Claude's review): both band buttons stand exactly 48px
   tall on one shared top edge — same box, same line-height, tops
   aligned by the row itself; the portraits block above can offset
   neither. */
.ink-cta-actions { display:flex; flex-wrap:wrap; align-items:flex-start; gap:12px; }
.ink-detail-cta .ink-cta-actions .ink-button { height:48px; box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; line-height:1.25; margin:0; padding-top:0; padding-bottom:0; }
.ink-compliance { border-top:1px solid #e7dfd2; margin-top:30px; padding-top:16px; font-size:13px; line-height:1.6; color:var(--text-muted); }

/* ---- Phase 4: mobile ---- */
.ink-filters-btn, .ink-sheet-head, .ink-sheet-backdrop, .ink-sticky-bar, .ink-more-wrap, .ink-gallery-count, .ink-gallery-dots, .ink-seg { display:none; }
.ink-sheet { display:contents; }
.ink-idx :focus-visible, .ink-lightbox :focus-visible { outline:2px solid var(--ink-blue); outline-offset:2px; }
.ink-sticky-cta { padding-bottom:calc(10px + env(safe-area-inset-bottom, 0px)); transition:transform .25s var(--ease-out), opacity .25s var(--ease-out); }
.ink-sticky-cta.ink-cta-hidden { transform:translateY(110%); opacity:0; pointer-events:none; }
/* v0.26.0: while any field has focus (the on-screen keyboard is up),
   the sticky bar leaves the screen entirely — it must never cover
   the form being typed into. The focusin/focusout pair in ink-idx.js
   owns the body class; this rule outranks the bar's mobile display. */
body.ink-field-focus .ink-sticky-cta { display:none; }
.ink-detail-page #ast-scroll-top, .ink-detail-page .ast-scroll-to-top, .ink-detail-page #ast-scroll-to-top { display:none !important; }
.ink-filters-count { display:inline-flex; align-items:center; justify-content:center; min-width:20px; height:20px; padding:0 5px; border-radius:10px; background:var(--ink-bronze-text); color:#fff; font-size:12px; font-weight:700; vertical-align:2px; }

@media (max-width:700px) {
  /* Hero: one sentence, balanced headline, compact band */
  .ink-idx-hero { padding:32px 20px; }
  .ink-idx-hero h1 { font-size:30px; text-wrap:balance; }
  .ink-hero-extra { display:none; }
  /* Search: Keywords row + Filters button; the rest lives in a bottom sheet */
  .ink-idx-search { display:flex; flex-direction:column; gap:12px; padding:16px; }
  .ink-idx-search > .ink-idx-field { grid-column:auto; }
  .ink-filters-btn { display:flex; align-items:center; justify-content:center; gap:8px; height:48px; border:1.5px solid var(--ink-navy); background:#fff; color:var(--ink-navy); border-radius:4px; font:inherit; font-weight:600; cursor:pointer; }
  .ink-sheet { display:block; position:fixed; left:0; right:0; bottom:0; z-index:1600; background:var(--ink-warm); border-radius:16px 16px 0 0; box-shadow:0 -12px 40px rgba(10,16,28,.3); padding:8px 20px calc(16px + env(safe-area-inset-bottom, 0px)); max-height:86vh; overflow-y:auto; transform:translateY(105%); transition:transform .3s var(--ease-out); }
  body.ink-sheet-open .ink-sheet { transform:translateY(0); }
  .ink-sheet-head { display:flex; align-items:center; justify-content:space-between; font-family:'Playfair Display',serif; font-size:20px; color:var(--ink-navy); padding:10px 0 6px; }
  .ink-sheet-close { background:none; border:0; font-size:30px; line-height:1; color:var(--ink-navy); width:44px; height:44px; cursor:pointer; }
  .ink-sheet .ink-idx-field { margin-bottom:14px; }
  .ink-sheet .ink-idx-submit { position:sticky; bottom:0; background:var(--ink-warm); padding-top:8px; }
  .ink-sheet .ink-idx-submit button { width:100%; }
  .ink-sheet-backdrop { position:fixed; inset:0; z-index:1550; background:rgba(10,16,28,.45); }
  body.ink-sheet-open .ink-sheet-backdrop { display:block; }
  body.ink-sheet-open { overflow:hidden; }
  /* Segmented Beds/Baths inside the sheet */
  .ink-seg { display:flex; gap:6px; }
  .ink-seg button { flex:1; height:44px; border:1px solid #cbbfa9; background:#fff; border-radius:22px; font:inherit; font-size:15px; color:var(--ink-charcoal); cursor:pointer; }
  .ink-seg button.active { background:var(--ink-navy); border-color:var(--ink-navy); color:var(--ink-warm); font-weight:600; }
  .ink-sheet .ink-seg-field select { display:none; }
  /* Sticky results bar */
  .ink-sticky-bar { display:flex; align-items:center; gap:10px; position:fixed; top:0; left:0; right:0; z-index:1400; height:52px; padding:0 12px; background:var(--ink-warm); border-bottom:1px solid var(--ink-stone); transform:translateY(-105%); transition:transform .25s var(--ease-out); }
  .ink-sticky-bar.show { transform:translateY(0); }
  .ink-sticky-count { font-size:14px; font-weight:600; color:var(--ink-navy); white-space:nowrap; }
  .ink-sticky-filters { height:40px; padding:0 14px; border:1.5px solid var(--ink-navy); background:#fff; color:var(--ink-navy); border-radius:20px; font:inherit; font-size:14px; font-weight:600; cursor:pointer; }
  .ink-sticky-sort { margin-left:auto; display:inline-flex; align-items:center; gap:6px; font-size:14px; }
  .ink-sticky-sort select { height:40px; border:1px solid #cbbfa9; border-radius:4px; background:#fff; font:inherit; font-size:16px; }
  /* Cards: one column, 16px gutters, 20px inner padding */
  .ink-idx-grid { grid-template-columns:1fr; gap:16px; }
  .ink-card-body { padding:20px; }
  /* Pagination becomes Show-more */
  .ink-idx-pages { display:none; }
  .ink-more-wrap { display:block; text-align:center; margin:22px 0 6px; }
  .ink-more-btn { width:100%; height:52px; background:var(--ink-navy); color:var(--ink-warm); border:0; border-radius:6px; font:inherit; font-size:16px; font-weight:600; cursor:pointer; }
  .ink-more-btn[disabled] { opacity:.6; }
  .ink-more-count { font-size:13.5px; color:#555; margin:10px 0 0; }
  /* Gallery: full-bleed swipe carousel */
  .ink-gallery-pos { position:relative; margin:0 -20px; }
  .ink-gallery { display:flex; overflow-x:auto; scroll-snap-type:x mandatory; gap:0; margin:0; padding:0; border-radius:0; scrollbar-width:none; }
  .ink-gallery::-webkit-scrollbar { display:none; }
  .ink-gallery .ink-gimg { flex:0 0 100%; scroll-snap-align:start; border-radius:0; aspect-ratio:4/3; }
  .ink-gallery-count { display:block; position:absolute; right:12px; bottom:12px; background:rgba(10,16,28,.72); color:#fff; font-size:13px; padding:4px 10px; border-radius:12px; font-variant-numeric:tabular-nums; z-index:2; }
  .ink-gallery-dots { display:flex; gap:5px; position:absolute; left:50%; transform:translateX(-50%); bottom:14px; max-width:60%; overflow:hidden; z-index:2; }
  .admin-bar .ink-sticky-bar { top:46px; }
  .ink-gdot { width:3px; height:3px; border-radius:50%; background:rgba(255,255,255,.55); flex:none; }
  .ink-gdot.active { background:#fff; }
  .ink-gallery-all { bottom:34px; }
  /* Mobile polish (from Stephen's phone review, Oct 15) */
  .ink-results-bar .ink-sort-form { display:none; }
  .ink-results-bar { flex-direction:column; align-items:flex-start; gap:10px; }
  .ink-watch-row { display:inline-flex; flex-wrap:wrap; align-items:center; gap:6px 10px; }
  #ink-watch-search { white-space:nowrap; }
  .ink-cta-actions { display:flex; flex-direction:column; gap:12px; }
  .ink-cta-actions .ink-button { display:block; width:100%; text-align:center; padding:16px 18px; margin:0; box-sizing:border-box; }
  .ink-cta-actions .ink-button.ink-cta-text { display:flex; justify-content:center; }
  .ink-gdot:nth-child(n+15) { display:none; }
}
.ink-homes-page #ast-scroll-top, .ink-homes-page .ast-scroll-to-top, .ink-homes-page #ast-scroll-to-top { display:none !important; }
@media (max-width:640px) { .ink-detail-cta { padding:40px 24px; } .ink-detail-title { font-size:30px; } }

/* Phase 2 — saves, capture, My Ink */
.ink-card-photo-link { display:block; height:100%; }
.ink-card-body { display:flex; flex-direction:column; flex:1; }
.ink-card-courtesy { margin-top:auto; padding-top:10px; }
.ink-heart { position:absolute; top:12px; right:12px; z-index:3; width:40px; height:40px; padding:0; border-radius:50%; border:none; background:rgba(255,255,255,.94); color:var(--ink-navy); cursor:pointer; box-shadow:0 2px 8px rgba(15,43,91,.18); display:flex; align-items:center; justify-content:center; transition:transform .2s ease, color .2s ease, background .2s ease; }
.ink-card-photo .ink-heart::after { content:''; position:absolute; inset:-2px; border-radius:50%; }
.ink-heart svg { display:block; }
.ink-heart svg path { fill:none; stroke:currentColor; stroke-width:1.6; }
.ink-heart:hover { transform:scale(1.08); }
.ink-heart.saved { background:var(--ink-bronze-text); color:#fff; }
.ink-heart.saved svg path { fill:currentColor; stroke:none; }
@keyframes ink-pop { 0% { transform:scale(1); } 50% { transform:scale(1.12); } 100% { transform:scale(1); } }
.ink-heart.ink-pop { animation:ink-pop 160ms var(--ease-out); }
.ink-detail-price { display:flex; align-items:center; flex-wrap:wrap; gap:16px; }
.ink-price-main { display:inline-flex; align-items:baseline; }
/* Item 10 (Claude's review): the price cluster, the status badge,
   and the watch pill form ONE flex line that never wraps internally
   — the three ride 16px apart, centered on the price's line box,
   and the outer row may only ever wrap the group as a unit. */
.ink-price-group { display:inline-flex; align-items:center; flex-wrap:nowrap; gap:16px; }
.ink-watch-btn { position:relative; width:auto; height:42px; border-radius:21px; padding:0 18px; gap:8px; background:#fff; border:1.5px solid var(--ink-bronze); color:var(--ink-bronze-text); box-shadow:none; font-family:'Montserrat',sans-serif; }
.ink-watch-btn svg { width:17px; height:17px; }
.ink-watch-btn span { font-size:14px; font-weight:600; line-height:1; }
.ink-watch-btn.saved { background:var(--ink-bronze-text); color:#fff; }
.ink-idx-count { display:flex; align-items:center; flex-wrap:wrap; gap:8px 14px; }
.ink-watch-row { display:inline-flex; align-items:center; gap:10px; }
#ink-watch-search { background:transparent; border:1px solid var(--ink-navy); color:var(--ink-navy); padding:7px 14px; border-radius:20px; font:inherit; font-size:13.5px; font-weight:600; cursor:pointer; }
#ink-watch-search:hover { background:var(--ink-navy); color:var(--ink-warm); }
.ink-watch-note { font-size:13px; color:#8a8172; }
.ink-capture { display:none; position:fixed; inset:0; z-index:200; background:rgba(15,43,91,.55); align-items:center; justify-content:center; padding:18px; }
.ink-capture.open { display:flex; }
.ink-capture-card { position:relative; background:var(--ink-warm); border-radius:12px; max-width:430px; width:100%; padding:30px 28px; box-shadow:0 24px 60px rgba(0,0,0,.3); }
.ink-capture-card h3 { font-family:'Playfair Display',serif; color:var(--ink-navy); margin:4px 0 8px; font-size:25px; }
.ink-capture-card .ink-idx-eyebrow { letter-spacing:.22em; text-transform:uppercase; font-size:11px; color:var(--ink-bronze-text); font-weight:700; margin:0; }
.ink-capture-card p { line-height:1.6; color:#444; }
.ink-capture-card input { width:100%; padding:12px; margin:6px 0; border:1px solid #d8cdb8; border-radius:4px; font:inherit; box-sizing:border-box; }
.ink-capture-card button[type="submit"] { width:100%; background:var(--ink-navy); color:var(--ink-warm); border:none; padding:13px; border-radius:4px; font:inherit; font-weight:700; cursor:pointer; margin-top:8px; }
.ink-capture-card button[type="submit"]:hover { background:var(--ink-blue); }
.ink-capture-close { position:absolute; top:8px; right:12px; background:none; border:none; font-size:26px; color:#8a8172; cursor:pointer; }
.ink-capture-msg { min-height:20px; font-size:14px; }
.ink-capture-msg.ok { color:#2c6e2c; font-weight:600; }
.ink-my-h { margin:30px 0 14px; }
.ink-my-cell { display:flex; flex-direction:column; }
.ink-my-cell .ink-card { flex:1; }
.ink-my-note { background:#fdf6e3; border:1px solid var(--ink-bronze); color:var(--ink-navy); border-radius:6px; padding:8px 12px; font-size:13.5px; margin:10px 0 0; text-align:center; }
.ink-my-searches { line-height:2; }
/* v0.26.0 history: the quiet promise under Recently viewed, and the
   minimal cell a departed listing leaves behind — a statement and a
   door, nothing of the listing itself. */
.ink-my-quiet { color:var(--text-muted); font-size:13.5px; margin:12px 0 0; max-width:62ch; }
.ink-my-gone { align-items:flex-start; justify-content:center; gap:6px; padding:20px; border:1px dashed var(--ink-stone); border-radius:var(--radius-card); background:var(--ink-warm); }
.ink-my-gone-note { font-family:'Playfair Display',serif; font-size:19px; color:var(--ink-navy); margin:0; }
.ink-my-gone-link { margin:0; }
.ink-my-cadence { color:#8a8172; font-size:13px; }
.ink-my-search-note { display:block; line-height:1.5; font-size:13.5px; color:var(--ink-bronze-text); }
/* Sign out (v0.31.0): the identity line under the My Ink hero and
   its control — a quiet text link in the site system (bronze text
   token), never a button box; hover/active hold charcoal, :focus
   stays transparent with the ring on :focus-visible only (the
   v0.29.1/v0.30.0 toggle discipline, applied here too). */
.ink-my-identity { margin:16px 0 0; font-size:14px; color:var(--ink-charcoal); }
.ink-my-identity-label { font-weight:700; }
.ink-signout { background:none; border:none; padding:0; font:inherit; color:var(--ink-bronze-text); text-decoration:underline; text-underline-offset:3px; cursor:pointer; }
.ink-signout:hover, .ink-signout:active { color:var(--ink-charcoal); }
.ink-signout:focus { background:transparent; }
.ink-signout:focus-visible { outline:2px solid var(--ink-blue); outline-offset:2px; }
.ink-my-signout-note { color:var(--text-muted); font-size:13.5px; line-height:1.55; margin:6px 0 0; max-width:62ch; }

/* ---- Life Anchors: places (Spec Phase 2) ---- */
.ink-around { margin:28px 0 8px; }
.ink-around-eyebrow { font-family:Montserrat,sans-serif; font-weight:600; font-size:12px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-bronze-text); margin:0 0 10px; }
.ink-places { background:#FAF7F1; border:1px solid var(--ink-stone); border-radius:12px; padding:20px 22px; }
.ink-places-h { font-family:"Playfair Display",serif; font-weight:600; font-size:23px; color:var(--ink-navy); margin:0 0 8px; }
.ink-places-p { font-size:15.5px; line-height:1.55; margin:0 0 6px; max-width:580px; }
.ink-places-note { font-size:14px; color:rgba(26,26,26,.72); margin:10px 0 0; }
.ink-places-promise { font-size:13px; line-height:1.55; color:rgba(26,26,26,.72); margin:16px 0 0; max-width:620px; }
.ink-pf-label { display:block; font-weight:600; font-size:13.5px; margin:14px 0 6px; }
.ink-pf-label input { display:block; width:100%; height:48px; margin-top:6px; padding:0 14px; border:1px solid var(--ink-stone); border-radius:8px; background:var(--ink-warm); font:inherit; font-size:16px; font-weight:400; box-sizing:border-box; }
.ink-pf-chips { display:flex; flex-wrap:wrap; gap:8px; margin-top:2px; }
.ink-pf-chip { display:inline-flex; align-items:center; gap:6px; padding:8px 13px; border:1px solid var(--ink-stone); border-radius:999px; background:var(--ink-warm); font:inherit; font-size:13.5px; font-weight:600; color:var(--ink-ink); cursor:pointer; }
.ink-pf-chip svg { width:16px; height:16px; }
.ink-pf-chip.on { border-color:var(--ink-navy); background:rgba(15,43,91,.06); color:var(--ink-navy); }
.ink-pf-go { margin-top:16px; background:var(--ink-bronze-text); color:var(--ink-warm); }
.ink-pf-go:hover { background:var(--ink-navy); color:var(--ink-warm); }
.ink-pf-status { font-size:14px; margin:10px 0 0; min-height:20px; }
.ink-pf-suggs { display:flex; flex-direction:column; gap:8px; margin-top:10px; }
.ink-pf-suggs[hidden] { display:none; }
.ink-pf-sugg-lead { font-size:13px; font-weight:600; color:rgba(26,26,26,.72); margin:0; }
.ink-pf-sugg { display:flex; align-items:center; gap:8px; width:100%; box-sizing:border-box; text-align:left; padding:10px 13px; border:1px solid var(--ink-stone); border-radius:8px; background:var(--ink-warm); font:inherit; font-size:13.5px; font-weight:600; color:var(--ink-ink); cursor:pointer; }
.ink-pf-sugg:hover { border-color:var(--ink-navy); background:rgba(15,43,91,.06); }
.ink-pf-sugg.on { border-color:var(--ink-navy); background:rgba(15,43,91,.06); }
.ink-pf-dir-main { display:flex; flex-direction:column; gap:1px; min-width:0; }
.ink-pf-dir-name { font-weight:600; }
.ink-pf-dir-meta { font-size:12px; font-weight:500; color:rgba(26,26,26,.62); }
.ink-pf-dir-foot { font-size:11.5px; color:rgba(26,26,26,.5); margin:0; padding:0 2px; }
.ink-places-attrib { font-size:12px; color:rgba(26,26,26,.55); margin:6px 0 0; }
.ink-pf-sugg svg { width:16px; height:16px; flex:none; color:var(--ink-navy); }
.ink-place-rows { margin:2px 0; }
.ink-place-row { display:flex; align-items:center; gap:10px; padding:10px 0; border-bottom:1px solid #eee7da; animation:inkPlaceIn .24s var(--ease-out); }
.ink-place-row:last-child { border-bottom:0; }
.ink-place-icon { display:inline-flex; color:var(--ink-navy); flex:none; }
.ink-place-icon svg { width:20px; height:20px; }
.ink-place-label { font-weight:600; font-size:15.5px; white-space:nowrap; }
/* Everyday block (v0.29.0): the label column never wraps and
   never shrinks — "Nearest grocery" / "Nearest park" stand in
   one piece at desktop and at 390px alike. Sizing for a 390px
   row: icon 20 + gaps 20 + label 132 leaves ~146px for the
   name·distance cluster, whose glued tail (see the PHP
   ink_idx_place_dist_html) wraps only between name words. */
.ink-places-block .ink-place-label { flex:0 0 auto; min-width:132px; }
.ink-place-primary { font-size:10.5px; font-weight:700; letter-spacing:.08em; text-transform:uppercase; color:var(--ink-bronze-text); }
.ink-place-dist { margin-left:auto; font-weight:600; font-size:15.5px; color:var(--ink-navy); font-variant-numeric:tabular-nums; white-space:nowrap; }
.ink-place-x { display:inline-flex; align-items:center; justify-content:center; width:32px; height:32px; margin-left:2px; background:none; border:0; border-radius:50%; color:rgba(26,26,26,.45); cursor:pointer; flex:none; }
.ink-place-x:hover { color:var(--ink-navy); background:rgba(15,43,91,.06); }
.ink-places-addlink { background:none; border:0; padding:10px 0 0; font:inherit; font-size:14.5px; font-weight:600; color:var(--ink-bronze-text); text-decoration:underline; text-underline-offset:3px; cursor:pointer; }
/* Phase 4: server-rendered blocks below the visitor's places — names
   here (groceries, parks) can run long, so their values wrap
   instead of holding the visitor rows' single line. */
.ink-places-block { margin-top:20px; }
.ink-places-block-h { font-family:Montserrat,sans-serif; font-weight:600; font-size:12px; letter-spacing:.14em; text-transform:uppercase; color:var(--ink-navy); margin:0 0 2px; }
.ink-places-block .ink-place-dist { white-space:normal; text-align:right; }
.ink-places-source { font-size:12.5px; color:rgba(26,26,26,.72); margin:8px 0 0; }
/* Everyday life, your way (v0.28.0): depth and personalization
   arrive by the visitor's own hand, so these styles only ever
   dress what a toggle or a pin brought into being. */
.ink-place-row-sub .ink-place-icon { width:20px; }
.ink-place-row-yours .ink-place-label { color:var(--ink-bronze-text); }
.ink-pins-slot:empty { display:none; }
/* v0.29.0: when the visitor's own grocery rows stand in the
   stores slot, a hairline in the block's own separator tone
   divides them from the factual "Nearest grocery" list below
   (the last row inside the slot carries no border of its own,
   so the slot's line + the rows' 10px rhythm do the spacing).
   JS fills the slot's innerHTML, so :not(:empty) tracks the
   rows exactly — no rows, no line. */
.ink-pins-slot[data-pins-slot="stores"]:not(:empty) { border-bottom:1px solid #eee7da; }
.ink-your-store-tag { flex:none; font-size:11px; font-weight:700; letter-spacing:.06em; text-transform:uppercase; color:var(--ink-bronze-text); border:1px solid var(--ink-bronze); border-radius:999px; padding:2px 8px; white-space:nowrap; }
/* v0.29.1 (Claude round 2): a tagged row's cluster + tag ride
   in .ink-place-main — the cluster is nowrap there, so name
   and distance stay on ONE line and the tag can never squeeze
   them into wrapping mid-name. The wrapper (and its row)
   flex-wrap, so the tag sits after the cluster when the line
   has room for both and drops below it — right-aligned by
   justify-content — when it does not; if the whole wrapper
   cannot fit beside the label it takes a line of its own,
   where the cluster has the row's full width. Untagged rows
   keep the v0.29.0 behaviour: the name may wrap between its
   words, the distance tail glued. */
.ink-place-main { margin-left:auto; display:flex; align-items:center; justify-content:flex-end; flex-wrap:wrap; column-gap:10px; row-gap:4px; min-width:0; }
.ink-place-main .ink-place-dist { margin-left:0; }
.ink-place-row-tagged, .ink-place-row-yours { flex-wrap:wrap; }
.ink-places-block .ink-place-row-tagged .ink-place-dist, .ink-places-block .ink-place-row-yours .ink-place-dist { white-space:nowrap; }
.ink-place-more { padding:0 0 4px; }
.ink-place-more-toggle, .ink-everyday-toggle { background:none; border:0; padding:8px 0 2px; font:inherit; font-size:14px; font-weight:600; color:var(--ink-bronze-text); text-decoration:underline; text-underline-offset:3px; cursor:pointer; }
/* v0.29.1 (Claude round 2): the Everyday toggles are text
   buttons with background:none — the theme's :focus fill (a
   solid Ink Blue box) leaks onto them after a mouse click
   and stays while they hold focus. No :focus or open state
   of these controls carries a fill, and the outline belongs
   to :focus-visible alone (keyboard), restated at 0-3-0 so
   the theme cannot outrank it. The audited family travels
   together: both Everyday toggles, the places add-link (the
   same background:none anatomy), and the explorer/pin pill
   buttons, whose own warm fill a theme :focus could
   otherwise repaint blue. */
.ink-idx .ink-place-more-toggle:focus, .ink-idx .ink-everyday-toggle:focus, .ink-idx .ink-places-addlink:focus,
.ink-idx .ink-place-more-toggle[aria-expanded="true"], .ink-idx .ink-everyday-toggle[aria-expanded="true"] { background:transparent; outline:none; }
.ink-idx .ink-place-more-toggle:focus-visible, .ink-idx .ink-everyday-toggle:focus-visible, .ink-idx .ink-places-addlink:focus-visible { outline:2px solid var(--ink-blue); outline-offset:2px; }
.ink-idx .ink-explorer-chip:focus, .ink-idx .ink-store-pin:focus, .ink-idx .ink-store-unpin:focus, .ink-idx .ink-cat-pin:focus, .ink-idx .ink-cat-unpin:focus { background:var(--ink-warm); }
.ink-idx .ink-explorer-chip.on:focus, .ink-idx .ink-store-pin:hover:focus, .ink-idx .ink-store-unpin:hover:focus, .ink-idx .ink-cat-pin:hover:focus, .ink-idx .ink-cat-unpin:hover:focus { background:rgb(15 43 91 / .06); }
/* v0.30.0: the same family on :hover / :active. The toggles had
   NO hover rule of ours at all, so the theme's generic
   button:hover (white text on a filled box) repainted them
   mid-hover — white on the cream panel, the label gone. The
   whole audited family now holds its colors in every state,
   restated at 0-3-0 like the :focus rules above: the text
   toggles keep their bronze text on transparency (hover,
   active, and open-and-hovered alike); the chips and pin
   buttons keep dark text on their warm fill. */
.ink-idx .ink-place-more-toggle:hover, .ink-idx .ink-everyday-toggle:hover,
.ink-idx .ink-place-more-toggle:active, .ink-idx .ink-everyday-toggle:active,
.ink-idx .ink-place-more-toggle[aria-expanded="true"]:hover, .ink-idx .ink-everyday-toggle[aria-expanded="true"]:hover { color:var(--ink-bronze-text); background:transparent; }
.ink-idx .ink-explorer-chip:hover, .ink-idx .ink-explorer-chip:active { color:var(--ink-charcoal); background:var(--ink-warm); border-color:var(--ink-navy); }
.ink-idx .ink-explorer-chip.on:hover, .ink-idx .ink-explorer-chip.on:active { color:var(--ink-navy); background:rgba(15,43,91,.06); border-color:var(--ink-navy); }
.ink-idx .ink-store-pin:hover, .ink-idx .ink-store-unpin:hover, .ink-idx .ink-cat-pin:hover, .ink-idx .ink-cat-unpin:hover,
.ink-idx .ink-store-pin:active, .ink-idx .ink-store-unpin:active, .ink-idx .ink-cat-pin:active, .ink-idx .ink-cat-unpin:active { color:var(--ink-charcoal); }
.ink-place-more-list { padding-top:2px; }
.ink-grocery-store { display:flex; align-items:center; flex-wrap:wrap; gap:10px; padding:8px 0 8px 30px; border-bottom:1px solid #f1eadd; }
.ink-grocery-store:last-child { border-bottom:0; }
.ink-grocery-store .ink-place-dist { margin-left:0; white-space:normal; text-align:left; font-size:14.5px; }
.ink-store-action { margin-left:auto; flex:none; display:inline-flex; align-items:center; gap:8px; }
/* The expander's pinned rows obey the tagged-row law
   (v0.29.1): the cluster is nowrap; the row wraps, so the
   tag + Remove ride after the cluster or below it — they
   never squeeze the name·distance line. */
.ink-grocery-store-pinned .ink-place-dist { white-space:nowrap; }
.ink-pin-state { font-size:12.5px; font-weight:700; color:var(--ink-bronze-text); }
.ink-store-pin, .ink-store-unpin, .ink-cat-pin, .ink-cat-unpin { padding:6px 11px; border:1px solid var(--ink-stone); border-radius:999px; background:var(--ink-warm); font:inherit; font-size:12.5px; font-weight:600; color:var(--ink-ink); cursor:pointer; }
.ink-store-pin:hover, .ink-store-unpin:hover, .ink-cat-pin:hover, .ink-cat-unpin:hover { border-color:var(--ink-navy); background:rgba(15,43,91,.06); }
.ink-everyday-explore { margin-top:6px; }
.ink-explorer { margin-top:8px; }
.ink-explorer-chips { display:flex; flex-wrap:wrap; gap:8px; }
.ink-explorer-chip { display:inline-flex; align-items:center; gap:6px; padding:8px 13px; border:1px solid var(--ink-stone); border-radius:999px; background:var(--ink-warm); font:inherit; font-size:13.5px; font-weight:600; color:var(--ink-ink); cursor:pointer; }
.ink-explorer-chip:hover { border-color:var(--ink-navy); }
.ink-explorer-chip.on { border-color:var(--ink-navy); background:rgba(15,43,91,.06); color:var(--ink-navy); }
.ink-explorer-results { margin-top:4px; }
.ink-explorer-results .ink-place-row { padding:8px 0; }
.ink-explorer-note { font-size:13.5px; color:rgba(26,26,26,.72); margin:8px 0 0; }
.ink-explorer-pinrow { margin-top:10px; display:flex; align-items:center; gap:10px; flex-wrap:wrap; }
.ink-explorer-pinrow:empty { display:none; }
@keyframes inkPlaceIn { from { opacity:0; transform:translateY(4px); } to { opacity:1; transform:none; } }
@media (prefers-reduced-motion: reduce) { .ink-place-row { animation:none; } }

/* Item 12 (Claude's review): the Around panel gives before it
   asks — at desktop widths the visitor's places (form + saved
   list) stand in the LEFT column and everyday life + schools in
   the RIGHT; below desktop the columns stack and the life column
   orders itself above the form. */
@media (min-width:1024px) {
  .ink-around-cols { display:grid; grid-template-columns:1.15fr .85fr; gap:28px; align-items:start; }
}
@media (max-width:1023px) {
  .ink-around-cols { display:flex; flex-direction:column; gap:20px; }
  .ink-around-life { order:-1; }
}
.ink-around-life .ink-places-block { margin-top:0; }
.ink-around-life .ink-places-block + .ink-places-block { margin-top:20px; }

/* Invitation tile in the results grid */
.ink-anchor-tile { grid-column:1 / -1; position:relative; background:var(--ink-stone); border-top:2px solid var(--ink-bronze); border-radius:12px; padding:24px 22px 20px; }
.ink-tile-h { font-family:"Playfair Display",serif; font-weight:600; font-size:25px; color:var(--ink-navy); margin:0 40px 8px 0; }
.ink-tile-p { font-size:15.5px; line-height:1.55; margin:0 0 4px; max-width:640px; }
.ink-tile-x { position:absolute; top:10px; right:10px; display:inline-flex; align-items:center; justify-content:center; width:36px; height:36px; background:none; border:0; border-radius:50%; color:rgba(26,26,26,.55); cursor:pointer; }
.ink-tile-x:hover { color:var(--ink-navy); background:rgba(255,255,255,.5); }
.ink-anchor-tile .ink-places { background:transparent; border:0; padding:0; }
.ink-anchor-tile-m { display:none; }
.ink-my .ink-places { margin-bottom:26px; }
@media (max-width:700px) {
  .ink-anchor-tile-d { display:none; }
  .ink-anchor-tile-m { display:block; }
  .ink-places { padding:16px; }
  .ink-tile-h { font-size:22px; }
}

/* ---- Life Anchors: proximity in search (Spec Phase 3) ---- */
.ink-near2-field[hidden] { display:none; }
.ink-near-addlink { display:inline-block; margin-top:8px; font-size:13.5px; font-weight:600; color:var(--ink-blue); }
.ink-near-addlink[hidden] { display:none; }
.ink-dist-note { font-size:13.5px; color:var(--text-muted); margin:0 0 14px; }
.ink-card-dist { position:relative; display:flex; align-items:center; gap:6px; margin:10px 0 0; min-height:20px; font-size:14px; line-height:1.4; color:var(--ink-blue); }
.ink-card-dist-none { margin-bottom:0; }
.ink-dist-pin { flex:none; display:block; }
.ink-dist-num { font-weight:600; font-variant-numeric:tabular-nums; white-space:nowrap; }
.ink-dist-from { white-space:nowrap; overflow:hidden; text-overflow:ellipsis; }
.ink-dist-more { flex:none; margin-left:2px; padding:2px 7px; border:1px solid var(--ink-stone); border-radius:10px; background:#fff; color:var(--ink-blue); font:inherit; font-size:12.5px; font-weight:600; line-height:1.2; cursor:pointer; }
.ink-dist-more:hover { border-color:var(--ink-blue); }
.ink-dist-pop { position:absolute; left:0; bottom:calc(100% + 6px); z-index:5; min-width:176px; background:var(--ink-warm); border:1px solid var(--ink-stone); border-radius:8px; box-shadow:0 10px 30px rgb(15 43 91 / .14); padding:8px 12px; display:flex; flex-direction:column; gap:4px; }
.ink-dist-pop[hidden] { display:none; }
.ink-dist-pop-row { display:flex; align-items:baseline; justify-content:space-between; gap:16px; font-size:13.5px; color:var(--ink-charcoal); }
.ink-dist-pop-num { font-weight:600; color:var(--ink-blue); font-variant-numeric:tabular-nums; white-space:nowrap; }
