/* MostHost · Alpine paper collection. Functional type stays clean and upright. */
:root {
  --board:#e8edea; --board-2:#dce6e5; --paper:#fffef8; --manila:#edf1eb;
  --surface:#f5f4ed; --paper-edge:#d4dcd5; --field-edge:#7f908b; --rule:#dce1d9;
  --ink:#203d42; --ink-2:#53676a; --ink-3:#566a6a;
  --moss:#2f6451; --amber:#93541f; --navy:#25677d; --mustard:#c69349; --red:#ac4839;
  --accent-ink:#fffef8; --blue-soft:#e0edf0; --green-soft:#e6eddf;
  --tape:rgba(199,171,112,.32); --radius:8px;
  --shadow-flat:0 2px 2px #274c4410,0 7px 16px -12px #183d4555;
  --shadow-lift:0 4px 0 -2px var(--paper),0 5px 0 -2px var(--paper-edge),0 14px 28px -18px #173c4570;
  --fx:.2s cubic-bezier(.2,.7,.3,1);
  --body-font:"Karla",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  --display-font:"Bricolage Grotesque",ui-sans-serif,system-ui,sans-serif;
  --brand-most:#075f66; --brand-host:#172a3a;
  --word-most:var(--brand-most); --word-host:var(--brand-host);
  color-scheme:light;
}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --board:#142c32;--board-2:#10272d;--paper:#233e43;--manila:#29484a;--surface:#1b3339;
  --paper-edge:#456160;--field-edge:#7d9895;--rule:#3c5658;--ink:#f4f4e8;--ink-2:#c7d5ce;--ink-3:#adc2bf;
  --moss:#a2cfb0;--amber:#ebbd7b;--navy:#a3d5e3;--mustard:#e0b46d;--red:#f3a18c;
  --accent-ink:#15333c;--blue-soft:#294b57;--green-soft:#314d40;--word-most:var(--ink);--word-host:var(--ink);color-scheme:dark;
}}
:root[data-theme="dark"]{
  --board:#142c32;--board-2:#10272d;--paper:#233e43;--manila:#29484a;--surface:#1b3339;
  --paper-edge:#456160;--field-edge:#7d9895;--rule:#3c5658;--ink:#f4f4e8;--ink-2:#c7d5ce;--ink-3:#adc2bf;
  --moss:#a2cfb0;--amber:#ebbd7b;--navy:#a3d5e3;--mustard:#e0b46d;--red:#f3a18c;
  --accent-ink:#15333c;--blue-soft:#294b57;--green-soft:#314d40;--word-most:var(--ink);--word-host:var(--ink);color-scheme:dark;
}
/* Room at the top for the status bar (v1.69.3). In a browser tab this is 0.
   Installed on an iPhone, iOS blurs the page under its status bar, and on
   some versions that band reaches past what safe-area-inset-top reports (it
   can even report 0), so the app adds a little more of its own. Everything
   that sits against the top of the screen uses this, not the env() value. */
:root{--top-safe:env(safe-area-inset-top,0px)}
@supports(-webkit-touch-callout:none){@media(display-mode:standalone){:root{--top-safe:calc(env(safe-area-inset-top,0px) + 14px)}}}
*,*::before,*::after{box-sizing:border-box}
html{min-height:100%;scroll-padding-top:calc(100px + var(--top-safe))}
body{margin:0;min-height:100dvh;background:var(--board);color:var(--ink);font:400 16px/1.55 var(--body-font);-webkit-font-smoothing:antialiased}
body::before{content:"";position:fixed;inset:0;z-index:100;pointer-events:none;opacity:.075;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)' opacity='.6'/%3E%3C/svg%3E")}
[hidden]{display:none!important}
button,input,select,textarea{font:inherit;color:inherit}
button{border:0;background:none;cursor:pointer;padding:0;touch-action:manipulation}
button,a,input,textarea,select{-webkit-tap-highlight-color:transparent}
:focus-visible{outline:3px solid var(--navy);outline-offset:4px}
img{max-width:100%;display:block}
a{color:var(--navy);text-underline-offset:3px}
.sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
svg.i{width:1.25em;height:1.25em;fill:none;stroke:currentColor;stroke-width:1.35;stroke-linecap:round;stroke-linejoin:round;flex:none}
.app{position:relative;min-height:100dvh;background:var(--surface);max-width:1600px;margin:auto;box-shadow:0 0 80px #153a3810}
.topbar{height:calc(84px + var(--top-safe));position:sticky;top:0;z-index:40;display:flex;align-items:center;gap:14px;padding:calc(16px + var(--top-safe)) 32px 16px;background:var(--paper);border-bottom:1px solid var(--paper-edge)}
.brand{margin:0;font:800 28px/1 var(--display-font);letter-spacing:-1.2px;color:var(--ink)}
.brand span{color:var(--navy)}
.topbar .brand{order:-1;min-width:177px}
.topbar .tb-context{border-left:1px solid var(--rule);padding-left:28px;font-size:14px;color:var(--ink-2)}
.tb-right{display:flex;align-items:center;gap:8px;margin-left:auto}
.tb-right .todo-label{font-size:14px;font-weight:700;margin-left:7px}
.icon-btn{position:relative;min-width:44px;height:44px;display:inline-flex;justify-content:center;align-items:center;flex:none;border-radius:7px;color:var(--ink-2);transition:background var(--fx),color var(--fx)}
.icon-btn:hover{background:var(--manila);color:var(--navy)}
#btnTodo{width:auto;padding:0 12px;background:var(--green-soft);color:var(--moss)}
.badge{position:absolute;top:-4px;right:-4px;min-width:22px;height:22px;padding:0 5px;border-radius:50%;border:2px solid var(--paper);background:var(--amber);color:var(--accent-ink);font-size:12px;font-weight:700;line-height:18px;text-align:center}
main{padding:34px 44px 115px;margin-left:228px;min-width:0}
.tabbar{position:fixed;z-index:35;top:calc(84px + var(--top-safe));bottom:0;left:max(0px,calc((100vw - 1600px)/2));width:228px;background:var(--paper);border-right:1px solid var(--paper-edge);padding:32px 18px;display:flex;flex-direction:column;gap:8px}
.tabbar::before{content:"YOUR WORKSPACE";font-size:12px;letter-spacing:.14em;font-weight:700;color:var(--ink-3);padding:0 16px 13px}
.tabbar::after{content:var(--tagline,"Good company.\A A great stay.");white-space:pre-line;margin-top:auto;padding:26px 16px 2px;border-top:1px solid var(--rule);font:600 20px/1.4 var(--display-font);letter-spacing:-.5px;color:var(--ink-3)}
.tabbar button{position:relative;display:flex;align-items:center;gap:13px;padding:14px 16px;text-align:left;color:var(--ink-2);font-weight:600;font-size:15px;border:1px solid transparent;border-radius:6px;min-height:51px}
.tabbar button:hover{background:var(--manila)}
.tabbar button[aria-current="true"]{color:var(--navy);background:var(--blue-soft);border-color:var(--paper-edge);box-shadow:var(--shadow-flat);font-weight:700}
.tabbar button[aria-current="true"]::after{content:"";position:absolute;right:-1px;top:-1px;width:13px;height:13px;background:linear-gradient(45deg,var(--paper-edge) 49%,var(--paper) 50%);border-bottom-left-radius:3px}
.page-intro{position:relative;display:flex;justify-content:space-between;gap:24px;align-items:center;margin:0 0 28px;min-height:94px}
.eyebrow{display:block;font-size:12px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;color:var(--moss);margin:0 0 8px}
.page-intro h2{font:700 clamp(30px,3vw,42px)/1.12 var(--display-font);letter-spacing:-1.5px;margin:0 0 10px}
.page-intro p{margin:0;color:var(--ink-2);font-size:16px;max-width:480px}
.page-intro .btn{flex:none}
.collection-banner{display:grid;grid-template-columns:1fr 1fr;position:relative;overflow:hidden;background:var(--paper);border:1px solid var(--paper-edge);box-shadow:var(--shadow-lift);border-radius:10px 10px 2px 10px;margin-bottom:30px;min-height:240px}
.collection-banner .page-intro{margin:0;padding:30px;display:block;align-self:center;z-index:1}
.collection-banner .page-intro p{max-width:320px}
.collection-banner .page-intro .btn{margin-top:22px}
.collection-art{min-width:0;overflow:hidden;position:relative;background:#f7f5ed}
.collection-art img{width:100%;height:100%;min-height:240px;object-fit:cover;object-position:center}
.collection-art::before{content:"";position:absolute;z-index:1;inset:0;background:linear-gradient(90deg,var(--paper),transparent 17%);pointer-events:none}
.section-head{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin:30px 0 14px}
.section-head:first-child{margin-top:0}
.section-head h2{font:700 21px/1.3 var(--display-font);letter-spacing:-.6px;margin:0}
.section-head .count{font-size:13px;color:var(--ink-3);font-weight:500}
.card,.row,.plan-head,.day,.todo{background:var(--paper);border:1px solid var(--paper-edge);border-radius:var(--radius);box-shadow:var(--shadow-flat)}
.card{position:relative}
.list{display:flex;flex-direction:column;gap:12px}
.row{display:flex;gap:15px;align-items:center;padding:15px;width:100%;text-align:left;transition:transform var(--fx),box-shadow var(--fx),border-color var(--fx)}
.row:hover{border-color:color-mix(in srgb,var(--navy) 50%,var(--paper-edge));box-shadow:var(--shadow-lift)}
.row:active{transform:translateY(1px)}
.row-body{min-width:0;flex:1;display:flex;flex-direction:column;justify-content:center;gap:5px}
.row-title{display:block;font:700 17px/1.35 var(--body-font);color:var(--ink);overflow-wrap:anywhere}
.row-sub{display:block;font-size:14px;line-height:1.5;color:var(--ink-2)}
.dot{opacity:.5;padding:0 6px}
.thumb{width:64px;height:64px;flex:none;border-radius:5px;overflow:hidden;background:var(--blue-soft);border:1px solid var(--paper-edge);display:grid;place-items:center;color:var(--navy);position:relative}
.thumb img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.thumb img.papercraft-ph{object-fit:contain;padding:5px}
.thumb .ph{position:relative;font-size:24px}
.thumb.has-photo{border:4px solid var(--paper);box-shadow:0 1px 5px #193c4030;transform:rotate(-2deg)}
.thumb-btn{display:block;flex:none;border-radius:5px}
.thumb-btn:hover .thumb{outline:2px solid var(--navy);outline-offset:3px}
.visit-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.itin-row{position:relative;display:grid;grid-template-columns:64px minmax(0,1fr) 38px;gap:14px;padding:22px!important;min-height:167px;border-radius:8px 2px 8px 8px;box-shadow:var(--shadow-lift)}
.itin-row::after{content:"";position:absolute;right:-1px;top:-1px;width:20px;height:20px;background:linear-gradient(45deg,var(--paper-edge) 48%,var(--surface) 51%);border-bottom-left-radius:4px;pointer-events:none}
.itin-row .row-title{font:700 22px/1.25 var(--display-font);letter-spacing:-.6px}
.itin-row .thumb{width:64px;height:76px}
.itin-row .row-body{align-self:stretch}
.itin-row .more-btn{width:38px;min-width:38px}
.visit-meta{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center;font-size:13px;color:var(--ink-2);margin-top:8px}
.visit-status{display:inline-flex;align-items:center;gap:5px;background:var(--green-soft);color:var(--moss);padding:3px 9px;border-radius:3px;font-weight:700}
.itin-row[data-bucket="upcoming"] .visit-status{background:var(--blue-soft);color:var(--navy)}
.itin-row[data-bucket="past"] .visit-status{background:var(--manila);color:var(--ink-2)}
.date-paper{display:flex;flex-direction:column;align-items:center;justify-content:center;line-height:1;gap:7px;width:100%;height:100%;background:var(--blue-soft);color:var(--navy)}
.date-paper small{font:700 12px/1 var(--body-font);letter-spacing:.12em;text-transform:uppercase}
.date-paper strong{font:700 30px/1 var(--display-font)}
.st-none{color:var(--ink-3)}.st-booked{color:var(--moss);font-weight:700}.st-needs{color:var(--amber);font-weight:700}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:12px 18px;min-height:46px;border-radius:5px;border:1px solid transparent;font-size:15px;font-weight:700;background:var(--navy);color:var(--accent-ink);text-decoration:none;box-shadow:0 3px 0 color-mix(in srgb,var(--navy) 60%,#092631);transition:transform var(--fx),filter var(--fx)}
.btn:hover{filter:brightness(1.06);transform:translateY(-1px)}.btn:active{transform:translateY(2px);box-shadow:none}
.btn.ghost{background:transparent;color:var(--ink);border-color:var(--paper-edge);box-shadow:none}
.btn.quiet{background:var(--manila);color:var(--ink);border-color:var(--paper-edge);box-shadow:0 2px 0 var(--paper-edge)}
.btn.danger{background:var(--red);color:var(--accent-ink)}.btn.wide{width:100%}.btn svg{width:18px;height:18px}.btn[disabled]{opacity:.45;pointer-events:none}
.fab{position:fixed;right:max(30px,calc((100vw - 1600px)/2 + 30px));bottom:28px;z-index:45;display:flex;align-items:center;gap:9px;padding:16px 20px;min-height:56px;border-radius:7px;background:var(--navy);color:var(--accent-ink);font-size:15px;font-weight:700;box-shadow:0 4px 0 color-mix(in srgb,var(--navy) 60%,#092631),0 12px 24px #173c4530;transition:transform var(--fx)}
.fab svg{width:22px;height:22px}.fab:hover{transform:translateY(-3px)}
.empty{text-align:center;padding:40px 24px;border:1px dashed var(--paper-edge);background:var(--paper);border-radius:var(--radius);color:var(--ink-2)}
.empty h3{font:700 22px/1.3 var(--display-font);color:var(--ink);margin:0 0 8px}.empty p{margin:0 auto;font-size:16px;max-width:440px}.empty .btn{margin-top:20px}
.plan-head{display:flex;gap:18px;align-items:center;padding:24px;margin:0 0 18px;border-top:4px solid var(--navy)}
.plan-head h2{font:700 27px/1.2 var(--display-font);letter-spacing:-.8px;margin:0 0 7px}
.plan-head .row-sub{font-size:15px}
.days-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:20px;align-items:start;margin-top:24px}
.day{position:relative;margin-top:20px;padding:0 20px 20px 32px;overflow:hidden}
.days-grid>.day{margin:0}
.day::before{content:"";position:absolute;left:17px;top:0;bottom:0;width:1px;background:var(--rule)}
.day .holes{display:none}
.day-title{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:18px 20px 16px 32px;margin:0 -20px 12px -32px;border-bottom:1px solid var(--rule);font:700 19px/1.3 var(--display-font);background:var(--manila);letter-spacing:-.4px}
.day-title small{font:400 13px/1.3 var(--body-font);color:var(--ink-2);margin-left:auto}
.day.is-today{border-color:var(--navy)}.day.is-today .day-title{background:var(--blue-soft)}
.day.is-today .day-title::after{content:var(--w-today,"Today");padding:3px 8px;border-radius:3px;font:700 12px/1.4 var(--body-font);background:var(--navy);color:var(--accent-ink)}
.slot{padding:10px 0;border-bottom:1px dashed var(--rule)}.slot:last-child{border-bottom:0;padding-bottom:0}
.slot-head{display:flex;align-items:center;justify-content:space-between;gap:8px;min-height:32px}.slot-name{font-size:14px;font-weight:700;color:var(--ink-2)}
.slot-add{display:inline-flex;align-items:center;gap:4px;color:var(--navy);font-size:14px;font-weight:700;padding:7px 8px;min-height:36px;border-radius:4px}.slot-add:hover{background:var(--blue-soft)}.slot-add svg{width:15px;height:15px}
.slot-items{display:flex;flex-direction:column;gap:8px;margin:8px 0 4px}
.entry{display:flex;gap:10px;align-items:center;width:100%;padding:12px 10px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:5px;text-align:left}
.entry:hover{border-color:var(--navy)}
.entry .kind,.pickbtn .kind{width:34px;height:34px;flex:none;border-radius:5px;display:grid;place-items:center;background:var(--paper);color:var(--navy);border:1px solid var(--paper-edge)}
.entry .kind svg{width:18px;height:18px}.entry .kind.photo{padding:0;overflow:hidden}.entry .kind.photo img{width:100%;height:100%;object-fit:cover}
.entry-body{min-width:0;flex:1;display:block}.entry>.i{width:16px;color:var(--ink-3)}
.entry-title{display:flex;flex-wrap:wrap;align-items:center;gap:5px;font-size:15px;font-weight:700;line-height:1.4;min-width:0}
.entry-title .tt{overflow-wrap:anywhere}.entry-sub{display:block;font-size:14px;line-height:1.45;color:var(--ink-2);margin-top:4px}.entry-sub .time{font-weight:700;color:var(--ink);font-variant-numeric:tabular-nums}
.tag{display:inline-block;flex:none;font-size:12px;line-height:1.4;font-weight:700;padding:2px 6px;border-radius:3px;background:var(--paper);border:1px solid var(--paper-edge);color:var(--ink-2)}
.tag.flag{background:var(--green-soft);color:var(--moss);border-color:transparent}
.entry.ghosted{background:var(--paper);border-style:dashed}.entry.ghosted .entry-title{font-weight:500;color:var(--ink-2)}
.entry.travel{background:var(--blue-soft)}.flight{font-weight:700}
.entry-note,.note{display:block;font:400 15px/1.55 var(--body-font);color:var(--ink-2);margin-top:6px}
.note{padding:9px 12px;border-left:3px solid var(--mustard);background:color-mix(in srgb,var(--mustard) 9%,transparent);border-radius:0 3px 3px 0}
/* A place's own notes inside the Host Plan (v1.6.0): guest notes in mustard, like the guest link; host-only notes in slate so the two can't be mixed up. */
.item-note{font-size:14px;line-height:1.45;padding:6px 10px;text-align:left}
.item-note.host-only{border-left-color:var(--ink-3);background:color-mix(in srgb,var(--ink-3) 9%,transparent)}
.note-who{display:block;font:700 12px/1.3 var(--body-font);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-3);margin-bottom:1px}
.daytitle{width:100%;padding:10px 8px;font:600 16px/1.4 var(--body-font);border:0;border-bottom:1px dashed var(--rule);background:transparent;color:var(--ink);margin:0 0 8px;border-radius:0}
.daytitle::placeholder{font:400 14px/1.5 var(--body-font);color:var(--ink-3)}
.stay-card{display:flex;gap:12px;align-items:flex-start;padding:13px;background:var(--green-soft);border:1px solid var(--paper-edge);border-radius:5px;margin:8px 0 4px}
.travel-bar{display:flex;align-items:center;gap:12px;width:100%;text-align:left;margin-top:18px;padding:16px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:6px;font-size:15px;font-weight:600;box-shadow:var(--shadow-flat)}
.travel-bar svg{color:var(--navy)}.travel-bar .go{margin-left:auto}
.pending-bar{position:sticky;top:calc(94px + var(--top-safe));z-index:30;display:flex;align-items:center;gap:12px;margin:18px 0;padding:14px 16px;background:var(--navy);color:var(--accent-ink);border-radius:6px;font-size:14px;box-shadow:var(--shadow-lift)}
.pending-bar b{display:block;font-size:16px}.pending-bar .cancel{margin-left:auto;padding:8px 12px;border:1px solid currentColor;border-radius:4px;font-size:14px;font-weight:700}
.slot.drop-ok,.day.drop-ok{background:var(--green-soft);outline:2px dashed var(--moss);outline-offset:3px;border-radius:4px}
.swipe{position:relative;display:flex;overflow:hidden;border-radius:5px}.swipe-del{position:absolute;inset:0 0 0 auto;width:76px;background:var(--red);color:var(--accent-ink);display:grid;place-items:center}.swipe-del svg{width:22px;height:22px}
.swipe-front{position:relative;flex:1;min-width:0;background:var(--paper);transition:transform var(--fx);will-change:transform}.swipe.dragging .swipe-front{transition:none}.swipe.lifted{opacity:.3}
.drag-ghost{position:fixed;z-index:95;pointer-events:none;width:250px;opacity:.95;transform:rotate(-2deg);box-shadow:0 20px 34px #143a4560}body.dragging-entry{touch-action:none;user-select:none}
.libbar{display:flex;gap:10px;align-items:center;margin:0 0 26px;padding:14px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:6px}
.libbar .btn{font-size:14px;padding:9px 14px;min-height:42px}.libbar .btn .n{padding:0 6px;border-radius:3px;margin-left:3px;font-size:12px;background:var(--navy);color:var(--accent-ink)}
.library-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.lib-row{padding:18px!important;flex-wrap:wrap;gap:12px;min-height:126px}.lib-row .row-body{flex-basis:calc(100% - 100px)}.lib-row .heart{margin-left:auto}
.lib-row .more-btn{margin-left:0}.lib-row .thumb{background:var(--green-soft);color:var(--moss)}
.heart{display:grid;place-items:center;width:44px;height:40px;color:var(--ink-3);flex:none;border-radius:5px;transition:color var(--fx),transform var(--fx)}.heart svg{width:20px;height:20px}.heart:hover{background:var(--manila)}.heart[aria-pressed="true"]{color:var(--red)}.heart[aria-pressed="true"] svg{color:var(--red)}.heart:active{transform:scale(.9)}
.hero{width:100%;height:210px;object-fit:cover;background:var(--manila)}.filter-note{font-size:14px;color:var(--ink-2);margin:0 0 14px}
.scrim{position:fixed;inset:0;z-index:60;background:#122e3866;backdrop-filter:blur(5px);display:flex;align-items:center;justify-content:center;padding:24px;animation:fade .16s ease both}
.sheet{width:100%;max-width:570px;max-height:88dvh;overflow-y:auto;overscroll-behavior:contain;background:var(--paper);border:1px solid var(--paper-edge);border-radius:10px;box-shadow:0 4px 0 -1px var(--paper-edge),0 30px 100px #102c4666;padding-bottom:20px;animation:rise .22s ease both}
.sheet-head{position:sticky;top:0;z-index:2;display:flex;gap:12px;align-items:flex-start;background:var(--paper);padding:24px 24px 20px;border-bottom:1px solid var(--rule)}
.sheet-head h2{flex:1;margin:0;font:700 26px/1.2 var(--display-font);letter-spacing:-.7px}.sheet-head p{margin:7px 0 0;font-size:15px;color:var(--ink-2);line-height:1.5}
.sheet-body{padding:22px 24px 4px}.sheet-foot{display:flex;gap:12px;padding:18px 24px 4px}.sheet-foot .btn{flex:1}.grabber{display:none}
.about-sheet .sheet-head{position:sticky;overflow:hidden;isolation:isolate;min-height:166px;align-items:flex-start}
.about-sheet .sheet-head::before{content:"";position:absolute;z-index:-1;inset:0 0 0 18%;background:url("../images/about-mosthost.jpg") 67% 54%/cover no-repeat;-webkit-mask-image:linear-gradient(90deg,transparent 0%,#000 48%);mask-image:linear-gradient(90deg,transparent 0%,#000 48%);pointer-events:none}
.about-sheet .sheet-head>div{position:relative;z-index:1;max-width:65%}
.about-sheet .sheet-head .icon-btn{position:absolute;top:6px;right:6px;z-index:2;color:#fff;background:rgba(20,28,36,.45);border-radius:50%}
.about-sheet .sheet-head .icon-btn:hover{background:rgba(20,28,36,.6)}
/* v1.121.28: the words are the developer's note, as on the plans window.
   It lies flat with whole-pixel lines, like the tip windows (v1.127.1). */
.about-sheet .sheet-body{padding-top:20px}
.field{margin-bottom:18px}.field>label{display:block;font-size:14px;font-weight:700;margin-bottom:7px;color:var(--ink)}
.field .hint,.hint{font-size:13px;color:var(--ink-2);margin-top:7px;line-height:1.5;overflow-wrap:anywhere}
input[type=text],input[type=email],input[type=password],input[type=date],input[type=time],input[type=url],input[type=tel],input[type=number],select,textarea{width:100%;min-width:0;padding:12px 13px;min-height:48px;background:var(--paper);color:var(--ink);border:1px solid var(--field-edge);border-radius:5px;box-shadow:inset 0 2px 3px #173e4510;appearance:none;font-size:16px;line-height:1.5}
input:focus,textarea:focus,select:focus{border-color:var(--navy)}
select{background-image:url("data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%20width%3D%2212%22%20height%3D%2212%22%20viewBox%3D%220%200%2024%2024%22%20fill%3D%22none%22%20stroke%3D%22%23637776%22%20stroke-width%3D%222.4%22%20stroke-linecap%3D%22round%22%20stroke-linejoin%3D%22round%22%3E%3Cpath%20d%3D%22M3%207.5Q7.4%2011.6%2012%2016.5Q16.5%2011.9%2021%207.5%22%2F%3E%3C%2Fsvg%3E");background-repeat:no-repeat;background-position:right 13px center;padding-right:36px}
textarea{min-height:100px;resize:vertical}input::placeholder,textarea::placeholder{color:var(--ink-3);opacity:1}.two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.check{display:flex;align-items:center;gap:12px;padding:13px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:5px;font-size:15px;cursor:pointer}.check input{width:20px;height:20px;accent-color:var(--navy);flex:none}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:9px}.chip{padding:8px 12px;min-height:38px;border-radius:4px;font-size:14px;font-weight:600;background:var(--manila);border:1px solid var(--paper-edge);color:var(--ink-2)}
.chip[aria-pressed="true"]{background:var(--navy);color:var(--accent-ink);border-color:var(--navy)}.chip.add{border-style:dashed;color:var(--navy)}
.seg{display:inline-flex;flex-wrap:wrap;background:var(--manila);border:1px solid var(--paper-edge);border-radius:5px;padding:4px;gap:4px}.seg button{padding:8px 12px;min-height:38px;font-size:14px;font-weight:600;color:var(--ink-2);border-radius:3px}.seg button[aria-pressed="true"]{background:var(--paper);color:var(--navy);box-shadow:var(--shadow-flat)}
.pickbtn{display:flex;gap:14px;align-items:center;width:100%;text-align:left;padding:16px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:6px;margin-bottom:12px}.pickbtn:hover{border-color:var(--navy)}.pickbtn b{display:block;font-size:16px;font-weight:700;color:var(--ink)}.pickbtn span{display:block;font-size:14px;line-height:1.5;color:var(--ink-2)}.pickbtn .kind{display:grid}
.detail-hero{height:200px;background:var(--manila);position:relative}.detail-hero img{width:100%;height:100%;object-fit:cover}
.meta{display:flex;flex-wrap:wrap;gap:8px 16px;font-size:14px;color:var(--ink-2);margin:0 0 16px}.stars{display:inline-flex;align-items:center;gap:5px;color:var(--amber);font-weight:700}.stars .n{color:var(--ink)}.stars .c{color:var(--ink-2);font-weight:400}
.dl{display:flex;flex-direction:column;margin:16px 0}.dl a,.dl div.i-row{display:flex;gap:12px;align-items:flex-start;padding:13px 2px;border-bottom:1px solid var(--rule);font-size:15px;line-height:1.5;text-decoration:none;color:var(--ink);overflow-wrap:anywhere}.dl a:last-child,.dl div.i-row:last-child{border:0}.dl svg{color:var(--navy);margin-top:2px}.dl a span u{text-decoration:none;color:var(--navy);font-weight:600}
.hours{font-size:14px;margin:5px 0 0}.hours div{display:flex;justify-content:space-between;gap:12px;padding:6px 0;border-bottom:1px dashed var(--rule)}.hours div:last-child{border:0}.hours .d{color:var(--ink-2)}.hours .t{font-variant-numeric:tabular-nums}.hours .today{font-weight:700}
.todo{display:flex;align-items:flex-start;gap:13px;padding:15px}.bubble{display:grid;place-items:center;flex:none;width:26px;height:26px;border:2px solid var(--ink-3);border-radius:5px;color:transparent;margin-top:1px}.bubble[aria-pressed="true"]{background:var(--moss);border-color:var(--moss);color:var(--accent-ink)}.bubble svg{width:16px;height:16px;stroke-width:1.8}
.todo-text{font-size:16px;line-height:1.45}.todo-sub{font-size:13px;color:var(--ink-2);margin-top:5px}.todo.done .todo-text{text-decoration:line-through;color:var(--ink-3)}.auto-tag{display:inline-block;font-size:12px;font-weight:700;color:var(--amber);background:color-mix(in srgb,var(--amber) 10%,transparent);padding:2px 7px;border-radius:3px;margin-left:6px}
.drawer{position:fixed;inset:0 auto 0 0;z-index:70;overflow:auto;width:min(360px,88vw);background:var(--paper);border-right:1px solid var(--paper-edge);box-shadow:14px 0 40px #102c4640;padding:calc(var(--top-safe) + 28px) 24px 28px;animation:slidein .2s ease both;display:flex;flex-direction:column}
.drawer h2{margin:0 0 10px;font:800 30px/1 var(--display-font);letter-spacing:-1px}.drawer .tagline{font-size:15px;line-height:1.55;color:var(--ink-2);margin:0 0 28px}.drawer nav{display:flex;flex-direction:column;gap:7px}.drawer nav button{display:flex;gap:12px;align-items:center;padding:14px 10px;border-radius:5px;font-size:16px;font-weight:600;text-align:left}.drawer nav button:hover{background:var(--manila)}.drawer nav button small{margin-left:auto;font-size:12px;font-weight:400;color:var(--ink-2)}.drawer .foot{margin-top:auto;padding-top:28px;font-size:13px;color:var(--ink-2);line-height:1.6}
.ctx{width:min(330px,88vw);background:var(--paper);border:1px solid var(--paper-edge);border-radius:8px;box-shadow:0 14px 40px #102c4660;overflow:hidden;animation:pop .15s ease both}.ctx button{display:flex;gap:12px;align-items:center;width:100%;padding:16px 18px;border-bottom:1px solid var(--rule);font-size:15px;font-weight:600;text-align:left}.ctx button:last-child{border:0}.ctx button:hover{background:var(--manila)}.ctx button.danger{color:var(--red)}.ctx .ctx-title{padding:14px 18px;background:var(--manila);font-size:14px;color:var(--ink-2);border-bottom:1px solid var(--rule)}
.toast{position:fixed;left:50%;translate:-50% 0;bottom:100px;z-index:90;max-width:min(550px,90vw);background:var(--ink);color:var(--paper);border:1px solid var(--paper-edge);border-radius:6px;padding:14px 20px;font-size:15px;font-weight:600;box-shadow:var(--shadow-lift);text-align:center;animation:rise .18s ease both}
.share-band{padding:18px 22px;background:var(--blue-soft);border-left:4px solid var(--navy);color:var(--ink);border-radius:5px;margin-bottom:22px;font-size:15px;line-height:1.6}.share-band b{font:700 20px/1.3 var(--display-font);display:block;margin-bottom:6px}
.linkbox{display:flex;gap:10px;align-items:center;padding:13px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:5px;font:13px/1.5 ui-monospace,monospace;word-break:break-all;max-height:120px;overflow:auto;color:var(--ink-2)}
.gate{position:fixed;inset:0;z-index:80;overflow-y:auto;background:var(--surface);display:grid;grid-template-columns:minmax(0,1.15fr) minmax(400px,1fr);min-height:100dvh}
.gate-scene{position:relative;display:flex;flex-direction:column;justify-content:space-between;padding:52px 48px;background:#f7f5ed;color:#203d42;border-right:1px solid #d4dcd5;overflow:hidden}
.gate-scene .brand{position:relative;z-index:1;font-size:34px;color:#203d42}.gate-scene .brand span{color:#25677d}.gate-scene>img{width:calc(100% + 64px);max-width:none;align-self:center;margin:16px -32px;mix-blend-mode:multiply;transition:opacity .24s ease}.gate-scene>img.gate-art-fade,.collection-art img.visits-art-fade{opacity:0!important}
.gate-scene-copy{position:relative;max-width:450px;margin-top:auto}.gate-scene-copy h2{font:700 clamp(30px,3.2vw,48px)/1.12 var(--display-font);letter-spacing:-1.6px;margin:0 0 15px}.gate-scene-copy p{font-size:17px;line-height:1.6;color:#53676a;margin:0}
.gate-panel{padding:64px 48px;display:flex;flex-direction:column;justify-content:center;align-items:center;min-width:0}
.gate-panel>h1,.gate-panel>.lede,.gate-card,.gate-panel>.skip,.gate-kicker{width:100%;max-width:390px}
.gate-panel h1{font:700 37px/1.15 var(--display-font);letter-spacing:-1.2px;text-align:left;margin:0 0 14px}.gate .lede{font-size:16px;line-height:1.6;color:var(--ink-2);margin:0 0 30px}
.gate-kicker{font-size:12px;letter-spacing:.14em;font-weight:700;color:var(--moss);margin:0 0 12px;text-transform:uppercase}
.gate-card{position:relative;background:var(--paper);padding:28px;border:1px solid var(--paper-edge);border-radius:8px 2px 8px 8px;box-shadow:var(--shadow-lift)}
.gate-card::after{content:"";position:absolute;right:-1px;top:-1px;width:21px;height:21px;background:linear-gradient(45deg,var(--paper-edge) 49%,var(--surface) 51%);border-bottom-left-radius:4px}
.gate .skip{display:block;margin-top:22px;text-align:center;font-size:15px;color:var(--ink-2);text-decoration:underline;text-underline-offset:4px;padding:12px;min-height:48px}.gate .skip:hover{color:var(--navy)}
.guest-app main{margin-left:0;max-width:1000px;margin-right:auto;margin-left:auto;padding:32px 28px 70px!important}.guest-app .topbar{justify-content:center}.guest-app .brand{min-width:0}
/* Regular text remains legible even in older inline templates. */
.row-sub[style],.sheet p[style],.sheet .hint[style]{font-size:max(.875rem,14px)!important}
@keyframes rise{from{transform:translateY(12px);opacity:0}to{transform:none;opacity:1}}@keyframes fade{from{opacity:0}to{opacity:1}}@keyframes slidein{from{transform:translateX(-100%)}to{transform:none}}@keyframes pop{from{transform:scale(.97);opacity:0}to{transform:none;opacity:1}}
@media(min-width:1400px){main{padding-left:56px;padding-right:56px}.collection-banner{grid-template-columns:1fr 1.15fr}.collection-art img{max-height:310px}}
@media(max-width:1150px){main{padding:28px 28px 110px;margin-left:204px}.tabbar{width:204px;padding:30px 12px}.topbar{padding-left:24px;padding-right:24px}.topbar .brand{min-width:160px}.visit-grid,.days-grid{grid-template-columns:1fr}.itin-row{min-height:140px}.collection-banner .page-intro{padding:26px}.collection-banner .page-intro h2{font-size:34px}.gate-scene{padding:40px 30px}.gate-panel{padding:48px 32px}.library-grid{grid-template-columns:1fr}.lib-row{flex-wrap:nowrap;min-height:100px}.lib-row .row-body{flex-basis:auto}}
@media(max-width:800px){
 .topbar{height:calc(72px + var(--top-safe));padding:calc(14px + var(--top-safe)) 20px 14px}.topbar .brand{font-size:26px;min-width:0}.topbar .tb-context{display:none}.tb-right .todo-label{display:none}#btnTodo{padding:0;width:44px}
 main{margin-left:0;padding:26px 24px 124px}.tabbar{position:fixed;top:auto;left:0;right:0;bottom:0;width:auto;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));padding:8px 10px calc(env(safe-area-inset-bottom) + 9px);gap:4px;border-right:0;border-top:1px solid var(--paper-edge);box-shadow:0 -6px 28px #123b3e10}
 .tabbar::before,.tabbar::after{display:none}.tabbar button{display:flex;flex-direction:column;justify-content:center;gap:6px;padding:9px 2px;min-height:60px;font-size:12px;line-height:1.15;text-align:center}.tabbar button svg{width:21px;height:21px}.tabbar button[aria-current="true"]::after{width:9px;height:9px}
 .fab{right:22px;bottom:calc(env(safe-area-inset-bottom) + 98px);padding:15px 19px}.toast{bottom:calc(env(safe-area-inset-bottom) + 167px)}.pending-bar{top:calc(82px + var(--top-safe))}.collection-banner{min-height:225px}.collection-art img{min-height:225px}.page-intro h2{font-size:34px}.visit-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.itin-row{grid-template-columns:54px minmax(0,1fr);padding:19px!important;gap:12px}.itin-row .thumb{width:54px;height:68px}.itin-row .more-btn{position:absolute;bottom:12px;right:8px}.itin-row .visit-meta{padding-right:26px}.itin-row .row-title{font-size:20px}.library-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.lib-row{flex-wrap:wrap}.lib-row .row-body{flex-basis:calc(100% - 90px)}
 .gate{grid-template-columns:1fr}.gate-scene{padding:24px 28px;min-height:250px;max-height:285px;display:block;border-right:0;border-bottom:1px solid #d4dcd5}.gate-scene .brand{font-size:28px}.gate-scene>img{position:absolute;width:400px;right:-5px;top:-15px;margin:0;opacity:.9}.gate-scene-copy{padding-top:48px;max-width:230px}.gate-scene-copy h2{font-size:30px}.gate-scene-copy p{display:none}.gate-panel{padding:32px 24px 24px;justify-content:flex-start}.gate-panel h1{font-size:30px}.gate .lede{margin-bottom:22px}.gate-card{padding:24px}.gate-panel .gate-kicker{display:none}
}
@media(max-width:540px){
 .topbar{padding:calc(12px + var(--top-safe)) 14px 12px;gap:8px;height:calc(68px + var(--top-safe))}.topbar .brand{font-size:25px}.tb-right{gap:3px}.icon-btn{min-width:40px;width:40px;height:40px}#btnTodo{width:40px}
 main{padding:22px 16px 128px}.page-intro{align-items:flex-start;gap:12px;margin-bottom:22px}.page-intro h2{font-size:32px;letter-spacing:-1px}.page-intro p{font-size:15px}.page-intro>.btn{font-size:14px;padding:10px 12px}.collection-banner{display:block;min-height:0;margin-bottom:27px}.collection-banner .page-intro{padding:22px 22px 18px;max-width:none}.collection-banner .page-intro h2{font-size:34px}.collection-banner .page-intro p{max-width:285px}.collection-banner .page-intro .btn{margin-top:17px}.collection-art{height:170px}.collection-art img{height:255px;min-height:0;object-fit:cover;object-position:center;position:relative;top:-60px}.collection-art::before{background:linear-gradient(180deg,var(--paper),transparent 22%)}
 .section-head{margin-top:26px}.section-head h2{font-size:20px}.visit-grid,.library-grid{grid-template-columns:1fr}.itin-row{grid-template-columns:57px minmax(0,1fr) 32px;min-height:143px;padding:19px 14px 19px 18px!important;gap:12px}.itin-row .thumb{width:57px;height:74px}.itin-row .row-title{font-size:22px}.itin-row .more-btn{position:static;min-width:32px;width:32px}.itin-row .visit-meta{padding-right:0}.row{gap:12px}.row-sub{font-size:14px}.lib-row{padding:15px!important;gap:9px;flex-wrap:nowrap}.lib-row .thumb{width:48px;height:54px}.lib-row .row-body{flex-basis:auto}.lib-row .heart{width:32px}.lib-row .more-btn{width:32px;min-width:32px}.lib-row .row-title{font-size:16px}.lib-row .row-sub{font-size:14px}.libbar{padding:10px;gap:8px;margin-bottom:22px}.libbar .btn{flex:1;min-width:0;padding:9px 10px}.thumb{width:55px;height:55px}
 .fab{padding:15px 18px;right:18px}.fab span{font-size:14px}.tabbar{padding-left:5px;padding-right:5px;gap:2px}.tabbar button{font-size:12px;letter-spacing:-.3px}
 .plan-head{padding:18px 15px;gap:12px}.plan-head h2{font-size:24px}.plan-head .row-sub{font-size:14px}.plan-head .thumb-btn .thumb{width:48px;height:48px}.plan-head .thumb-btn .thumb svg.ph{width:26px;height:26px}.days-grid{gap:16px;margin-top:20px}.day{padding-left:24px;padding-right:14px}.day::before{left:11px}.day-title{padding-left:24px;padding-right:14px;margin-left:-24px;margin-right:-14px;font-size:18px}.day-title small{font-size:13px}.pending-bar{top:78px}.entry-title{font-size:15px}.slot-name{font-size:14px}.entry .kind{width:29px;height:29px}
 .scrim{padding:0;align-items:flex-end}.sheet{max-height:91dvh;border-radius:14px 14px 0 0;border-bottom:0;padding-bottom:calc(env(safe-area-inset-bottom) + 20px)}.sheet-head{padding:18px 20px 16px}.sheet-head h2{font-size:24px}.sheet-body{padding:19px 20px 4px}.sheet-foot{padding:16px 20px 4px;gap:10px}.grabber{display:block;width:40px;height:4px;border-radius:3px;background:var(--paper-edge);margin:9px auto 0}.two{gap:10px}.sheet .row{padding:12px}.sheet .row .thumb{width:48px;height:48px}
 .gate-scene{min-height:200px;max-height:200px;padding:22px 24px}.gate-scene>img{width:295px;right:-35px;top:3px;opacity:.9}.gate-scene-copy{padding-top:32px;max-width:190px}.gate-scene-copy h2{font-size:26px;letter-spacing:-.9px}.gate-scene .brand{font-size:26px}.gate-panel{padding-top:27px}.gate-panel h1{font-size:29px}.gate-card{padding:22px}.gate-panel>.skip{margin-top:14px}.guest-app main{padding:22px 16px 50px!important}
}
@media(max-width:360px){.topbar{gap:5px;padding-left:10px;padding-right:10px}.topbar .brand{font-size:23px}.tabbar button{font-size:12px;letter-spacing:-.6px}.tabbar button svg{width:19px;height:19px}.itin-row{grid-template-columns:48px minmax(0,1fr) 26px;gap:9px}.itin-row .thumb{width:48px}.itin-row .row-title{font-size:20px}.lib-row{flex-wrap:wrap}.lib-row .row-body{flex-basis:calc(100% - 70px)}.sheet-foot{flex-wrap:wrap}.sheet-foot .btn{min-width:120px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;transition-duration:.01ms!important;scroll-behavior:auto!important}}


.nav-short{display:none}
@media(max-width:800px){.nav-wide{display:none}.nav-short{display:inline}.tabbar button{font-size:14px;letter-spacing:-.3px}}
@media(max-width:540px){.page-intro{flex-wrap:wrap}.gate-scene>img{mask-image:linear-gradient(90deg,transparent,#000 25%)}}
@media(max-width:360px){.tabbar button{font-size:14px;letter-spacing:-.5px}.tabbar{padding-left:2px;padding-right:2px}}

/* Second edition: folded paper identity and functional icon family. */
.brand-lockup{display:flex;align-items:center;gap:11px}
.brand-logo{width:48px;height:48px;flex:none;object-fit:contain;border-radius:8px;background:var(--brand-most);box-shadow:0 2px 3px #142e3820}
/* Approved lowercase wordmark: fixed navy host, selected icon color on most.
   In dark mode both words are the cream of the headings (v1.70.7), except on
   the sign-in picture, which stays pale in dark mode too. */
.brand-name{font-family:"Bricolage Grotesque",ui-sans-serif,system-ui,sans-serif;font-weight:650;font-variation-settings:"opsz" 24,"wght" 650;letter-spacing:-.014em;white-space:nowrap}
.brand .brand-name>.brand-most{color:var(--word-most)}
.brand .brand-name>.brand-host{color:var(--word-host)}
.gate-scene .brand-logo{width:68px;height:68px;border-radius:10px}
.gate-scene .brand-name{--word-most:var(--brand-most);--word-host:var(--brand-host)}
.topbar .brand{min-width:177px;font-size:25px}
.topbar{gap:18px}
.topbar .tb-context{padding-left:20px}
.drawer .brand-logo{width:44px;height:44px}
.collection-art img{object-fit:contain;object-position:center;background:#f7f5ed;transition:opacity .24s ease}
.gate-scene>img{object-fit:contain;max-height:52dvh}
@media(prefers-reduced-motion:reduce){.gate-scene>img,.collection-art img{transition:none!important}}
/* v1.15.0: the icons are hand-drawn outlines (tools/make-icons.py), so the
   cut-paper fill that used to be set here is gone and `svg.i` near the top
   of this file draws them: no fill, a round-ended stroke in the text colour. */
svg.i{overflow:visible}
.tabbar button svg{width:27px;height:27px}
.icon-btn svg{width:23px;height:23px}
.thumb svg.ph{width:32px;height:32px}
@media(max-width:1150px){.topbar .brand{min-width:0}.topbar .tb-context{border:0;padding-left:8px}}
@media(max-width:800px){.topbar{gap:12px}.topbar .brand-logo{width:42px;height:42px}.topbar .brand{font-size:24px}.gate-scene .brand-logo{width:52px;height:52px}.gate-scene-copy{padding-top:30px}.gate-scene>img{height:auto;max-height:none;right:-10px;top:18px;width:345px;mask-image:linear-gradient(90deg,transparent,#000 24%)}.tabbar button svg{width:26px;height:26px}}
@media(max-width:540px){.topbar{gap:8px}.topbar .brand{font-size:22px;gap:8px}.topbar .brand-logo{width:38px;height:38px;border-radius:6px}.gate-scene .brand{font-size:26px;gap:10px}.gate-scene .brand-logo{width:48px;height:48px}.gate-scene>img{width:250px;top:37px;right:-30px}.gate-scene-copy{padding-top:20px;max-width:225px}.gate-scene-copy h2{font-size:clamp(18px,6vw,23px)}.collection-art img{height:170px;top:0;object-fit:contain}.collection-art::before{background:linear-gradient(180deg,var(--paper),transparent 12%)}.tabbar{padding-top:6px}.tabbar button{gap:4px}}
@media(max-width:360px){.topbar .brand{font-size:20px;gap:6px}.topbar .brand-logo{width:32px;height:32px}.topbar{gap:5px}.topbar .tb-right{gap:0}.topbar .icon-btn{min-width:34px;width:34px}.gate-scene>img{right:-50px;opacity:.8}}
/* The sign-in picture on phones and tablets (v1.70.7): the full height of the
   heading, from the very top of the screen. Only the logo and words keep
   clear of the status bar, so the heading grows by that much. */
@media(max-width:800px){.gate-scene{padding-top:calc(24px + var(--top-safe));min-height:calc(250px + var(--top-safe));max-height:calc(285px + var(--top-safe))}.gate-scene>img{top:0;width:375px;height:100%;object-fit:cover}}
@media(max-width:540px){.gate-scene{padding-top:calc(22px + var(--top-safe));min-height:calc(200px + var(--top-safe));max-height:calc(200px + var(--top-safe))}.gate-scene>img{width:min(calc(100vw - 100px),300px);mask-image:linear-gradient(90deg,transparent,#000 30%)}}

.mealfilter{margin:0 0 14px}
.kindtag{display:inline-block;font-size:12px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);border:1px solid var(--paper-edge);border-radius:3px;padding:0 5px;margin-right:7px}
/* Tab scenes share the Visits banner image sizing and left fade. */

/* v1.0.5: compact tab banners, visit photos, and keyboard-safe search. */
.tab-scene,.collection-banner{min-height:200px}
.tab-scene .page-intro,.collection-banner .page-intro{padding-top:22px;padding-bottom:22px}
.has-visit-photo .collection-art img{object-fit:cover;height:100%;min-height:220px}
.has-visit-photo .collection-art::before{display:none}
.search-layer{align-items:flex-start!important;padding:12px!important;overflow:hidden}
.search-sheet{display:flex;flex-direction:column;height:min(650px,var(--search-height,calc(100dvh - 24px)));max-height:var(--search-height,calc(100dvh - 24px));min-height:0;overflow:hidden;padding-bottom:0;animation:none}
.search-sheet .grabber{display:none}
.search-sheet .sheet-head{position:static;flex:none;padding:18px 20px 14px}
.search-sheet .sheet-head p{font-size:14px}
.search-sheet .sheet-body{display:flex;flex-direction:column;flex:1;min-height:0;overflow:hidden;padding:16px 20px 0}
.search-field{flex:none;margin-bottom:12px}
.search-results{min-height:0;flex:1;overflow-y:auto;overscroll-behavior:contain;padding:0 3px max(20px,env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch}
.search-field input{font-size:16px}.search-row{display:flex;gap:8px}.search-row input{flex:1}.search-row .btn{flex:none;min-height:48px;padding:12px 16px}
@media(max-width:540px){.collection-banner,.tab-scene{min-height:0}.has-visit-photo .collection-art img{height:170px;min-height:0}.search-sheet{border-radius:10px;border:1px solid var(--paper-edge)}.search-sheet .sheet-head{padding:14px 16px 12px}.search-sheet .sheet-body{padding:12px 16px 0}.search-sheet .sheet-head h2{font-size:22px}}

/* v1.1.6: on phones and small tablets the tab banners take about a quarter of the
   screen. The words sit over the left of the picture, which fades out behind them,
   the way the sign-in screen does it. */
@media(max-width:800px){
 .collection-banner,.tab-scene{display:block;position:relative;min-height:180px;height:auto;margin-bottom:22px}
 .collection-banner .page-intro,.tab-scene .page-intro{position:relative;z-index:2;max-width:55%;padding:20px 0 20px 20px;margin:0}
 .collection-banner .page-intro h2{font-size:30px;letter-spacing:-.9px;margin:0 0 6px;text-shadow:0 0 12px var(--paper)}
 .collection-banner .page-intro p{font-size:14px;line-height:1.4;max-width:none;margin:0;color:var(--ink-2);text-shadow:0 0 6px var(--paper),0 0 12px var(--paper)}
 .collection-banner .page-intro .eyebrow{font-size:12px;line-height:1.25;letter-spacing:.06em;margin-bottom:6px}
 .collection-banner .collection-art,.tab-scene .collection-art{position:absolute;inset:0 0 0 36%;height:auto;display:block;background:transparent;
  -webkit-mask-image:linear-gradient(90deg,transparent 12%,#000 55%);mask-image:linear-gradient(90deg,transparent 12%,#000 55%)}
 .collection-banner .collection-art::before{display:none}
 .collection-banner .collection-art img,.tab-scene .collection-art img{position:absolute;top:0;left:0;width:100%;height:100%;min-height:0;max-height:none;object-fit:cover;object-position:center;background:transparent}
}

/* v1.1.7: the "Get the app" pop-up. It sits above the tab bar and lifts the
   add button and toasts out of its way while it's showing. */
.getapp{position:fixed;z-index:44;left:calc(max(0px,(100vw - 1600px)/2) + 258px);bottom:24px;max-width:min(430px,calc(100vw - 290px));display:flex;align-items:center;gap:9px;padding:6px 4px 6px 9px;background:var(--paper);color:var(--ink);border:1px solid var(--paper-edge);border-radius:8px 8px 2px 8px;box-shadow:var(--shadow-lift);animation:rise .18s ease both}
.getapp img{width:30px;height:30px;border-radius:6px;flex:none}
.getapp-copy{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}
.getapp-copy b{font:700 13.5px/1.2 var(--display-font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}/* Amber, not navy, so it isn't mistaken for the add buttons. */
.getapp .getapp-go{flex:none;margin:0;padding:7px 11px;min-height:0;font-size:13px;background:var(--amber);color:var(--accent-ink);box-shadow:0 2px 0 color-mix(in srgb,var(--amber) 60%,#2a1606)}
.getapp .getapp-x{flex:none;min-width:32px;width:32px;height:32px}
.getapp .getapp-x .i{width:14px;height:14px}
.getapp-steps{margin:0 0 14px;padding-left:22px;line-height:1.6}
.getapp-steps li{margin-bottom:6px}
.getapp-steps .i{width:18px;height:18px;vertical-align:-3px}
body.has-getapp .fab{bottom:var(--getapp-top,108px)}
body.has-getapp .toast{bottom:calc(var(--getapp-top,108px) + 70px)}
@media(max-width:1150px){.getapp{left:232px;max-width:min(500px,calc(100vw - 262px))}}
@media(max-width:800px){.getapp{left:12px;right:12px;max-width:none}}
/* Phones: the logo goes so the heading fits on one line. */
@media(max-width:540px){.getapp-copy b{font-size:13.5px}.getapp{gap:8px;padding-left:12px}.getapp img{display:none}}
@media(max-width:380px){.getapp-copy b{font-size:13px}.getapp{gap:6px;padding-left:10px}.getapp .getapp-go{padding:7px 9px;font-size:12.5px}.getapp .getapp-x{min-width:28px;width:28px}}
@media(max-width:340px){.getapp-copy b{font-size:12.5px}.getapp{gap:5px;padding-left:9px}.getapp .getapp-go{padding:6px 8px;font-size:12px}}

/* v1.2.0–v1.2.4: a guest link opens as an invitation envelope (js/invite.js).
   The envelope, card and paper decorations use fixed paper colours so they
   read as paper in light and dark mode alike; only the backdrop follows the theme. */
.invite{--inv-top:#f3e4d6;--inv-mid:#eef0e6;--inv-bottom:#dfe9ea;--inv-glow:#fffaf0;--inv-warm:#ffd9a36b;--inv-hint:#53676a;
 position:fixed;inset:0;z-index:200;display:grid;place-items:center;overflow:hidden;cursor:pointer;-webkit-tap-highlight-color:transparent;
 background:radial-gradient(75% 32% at 50% 0%,var(--inv-warm),transparent 72%),radial-gradient(55% 40% at 50% 50%,var(--inv-glow),transparent 72%),linear-gradient(165deg,var(--inv-top),var(--inv-mid) 52%,var(--inv-bottom));
 animation:inv-in .3s ease both}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .invite{--inv-top:#1d3439;--inv-mid:#162d33;--inv-bottom:#1d2a3a;--inv-glow:#2f4d52;--inv-warm:#e3a45a3d;--inv-hint:#c7d5ce}}
[data-theme="dark"] .invite{--inv-top:#1d3439;--inv-mid:#162d33;--inv-bottom:#1d2a3a;--inv-glow:#2f4d52;--inv-warm:#e3a45a3d;--inv-hint:#c7d5ce}
body.inviting{overflow:hidden}

/* The backdrop: a leafy garland (hearth and home, not party bunting — v1.2.5),
   confetti and leaf sprigs over a faint paper grain and a warm firelight glow. */
.inv-backdrop{position:absolute;inset:0;pointer-events:none}
.inv-classic{position:absolute;inset:0;animation:inv-in .4s ease both}
.inv-classic::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(0deg,transparent 0 3px,#0000000a 3px 4px)}
.inv-confetti{position:absolute;left:-4%;top:-4%;width:108%;height:108%;opacity:.6;filter:drop-shadow(0 1px 1px #0000002e)}
.inv-garland{position:absolute;top:calc(var(--top-safe) + 10px);left:50%;width:min(520px,104vw);height:auto;translate:-50% 0;transform-origin:50% 0;filter:drop-shadow(0 3px 3px #00000029)}
.inv-leaves{position:absolute;bottom:-14px;width:min(170px,40vw);height:auto;filter:drop-shadow(0 3px 4px #00000033)}
.inv-leaves-l{left:-18px;transform-origin:0 100%}
/* Mirrored about its own centre: mirroring about the right edge threw it off screen. */
.inv-leaves-r{right:-18px;transform:scaleX(-1);transform-origin:50% 100%}
.invite:not(.is-still) .inv-confetti{animation:inv-drift 16s ease-in-out infinite alternate}
.invite:not(.is-still) .inv-garland{animation:inv-sway 6s ease-in-out infinite alternate}
.invite:not(.is-still) .inv-leaves-l{animation:inv-leaf 7s ease-in-out infinite alternate}
.invite:not(.is-still) .inv-leaves-r{animation:inv-leaf-r 8s ease-in-out infinite alternate}

/* The envelope: white paper, shaded at the folds. It is a button, so it opens by tap, click or keyboard. */
.inv-stage{--w:min(330px,82vw);position:relative;width:var(--w);display:flex;flex-direction:column;align-items:center;perspective:1400px;transition:transform .85s cubic-bezier(.25,.8,.25,1) .9s}
.inv-envelope{all:unset;box-sizing:border-box;position:relative;display:block;width:var(--w);height:calc(var(--w)*.66);border-radius:6px;cursor:pointer;animation:inv-drop .65s cubic-bezier(.2,.9,.3,1.12) both}
.inv-envelope:focus-visible{outline:3px solid #25677d;outline-offset:8px}
.inv-back,.inv-front,.inv-pocket,.inv-flap,.inv-flap i{position:absolute;inset:0;display:block}
.inv-back{border-radius:6px;background:linear-gradient(180deg,var(--env-a,#e9e4d9),var(--env-b,#f2eee6));box-shadow:0 28px 46px -20px #1b2a3085,0 2px 0 #d8d0c1}
.inv-card{position:absolute;left:12px;right:12px;top:10px;height:calc(100% - 18px);z-index:1;display:flex;flex-direction:column;align-items:center;gap:3px;padding:14px 16px;text-align:center;color:#203d42;border-radius:3px;background:#fbf5e6 repeating-linear-gradient(0deg,transparent 0 3px,#0000000a 3px 4px);box-shadow:inset 0 0 0 1px #e6dcc4,inset 0 0 0 5px #fbf5e6,inset 0 0 0 6px #dcc49a,0 2px 6px #0000001f}
.inv-hello{font:600 29px/1 "Caveat","Bradley Hand","Segoe Print",cursive;color:#93541f;margin-top:4px}
.inv-title{font:700 20px/1.2 var(--display-font);letter-spacing:-.4px;margin-top:4px;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.inv-when{font:500 13px/1.35 var(--body-font);color:#53676a}
/* Shapes are cut with clip-path, which also cuts any shadow on the same
   element, so the shadow sits on an unclipped wrapper. */
.inv-front{z-index:2;filter:drop-shadow(0 -1px 1px #6b5a3a33) drop-shadow(0 -3px 6px #6b5a3a1c)}
.inv-pocket{border-radius:0 0 6px 6px;background:linear-gradient(0deg,var(--env-c,#fffefb),var(--env-b,#f6f3ec));clip-path:polygon(0 0,50% 56%,100% 0,100% 100%,0 100%)}
.inv-pocket::before,.inv-pocket::after{content:"";position:absolute;inset:0}
.inv-pocket::before{background:linear-gradient(90deg,var(--env-a,#ebe6dc),var(--env-b,#f7f4ee));clip-path:polygon(0 0,50% 56%,0 100%)}
.inv-pocket::after{background:linear-gradient(270deg,var(--env-a,#ebe6dc),var(--env-b,#f7f4ee));clip-path:polygon(100% 0,50% 56%,100% 100%)}
.inv-flap{z-index:3;transform-origin:50% 0;filter:drop-shadow(0 2px 1px #6b5a3a3d) drop-shadow(0 6px 8px #6b5a3a21)}
.inv-flap i{background:linear-gradient(180deg,var(--env-a,#efebe2),var(--env-c,#faf8f3));clip-path:polygon(0 0,100% 0,50% 60%)}
.inv-seal{position:absolute;z-index:4;left:50%;top:60%;width:54px;height:54px;margin:-27px 0 0 -27px;border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle at 36% 30%,var(--env-seal-1,#cf6d40),var(--env-seal-2,#9b4322) 72%);box-shadow:0 0 0 3px var(--env-seal-3,#a54b26),0 0 0 5px color-mix(in srgb,var(--env-seal-2,#9b4322) 33%,transparent),0 4px 8px #3a1a0a66,inset 0 -3px 6px #0000004d}
.inv-seal img{width:30px;height:30px;border-radius:50%;box-shadow:0 0 0 2px #e7a57f66}
.inv-hint{margin:34px 0 0;min-height:1.3em;font:600 15px/1.3 var(--body-font);letter-spacing:.02em;text-align:center;color:var(--inv-hint);animation:inv-hint .5s ease .5s both}

/* Waiting to be opened: the hint breathes and the seal gives a small nudge. */
.invite.is-ready:not(.is-open):not(.is-still) .inv-hint{animation:inv-hint .5s ease .5s both,inv-breathe 2.4s ease-in-out 1s infinite}
.invite.is-ready:not(.is-open):not(.is-still) .inv-seal{animation:inv-nudge 2.6s ease-in-out 1.2s infinite}

/* Opening. */
.invite.is-open .inv-seal{animation:inv-seal .4s ease-in both}
.invite.is-open .inv-flap{animation:inv-flap .6s cubic-bezier(.4,0,.2,1) .3s both}
.invite.is-open .inv-flap i{animation:inv-lining .6s linear .3s both}
.invite.is-open .inv-card{animation:inv-rise .85s cubic-bezier(.25,.8,.25,1) .9s both}
.invite.is-open .inv-stage{transform:translateY(calc(var(--w)*.2))}
.invite.is-done{animation:inv-out .5s ease both;pointer-events:none}
.invite.is-done .inv-stage{transition-delay:0s;transition-duration:.5s}
.invite.is-done.is-open .inv-stage{transform:translateY(calc(var(--w)*.2)) scale(1.06)}

@keyframes inv-in{from{opacity:0}}
@keyframes inv-out{to{opacity:0}}
@keyframes inv-hint{from{opacity:0;transform:translateY(6px)}}
@keyframes inv-breathe{50%{opacity:.55}}
@keyframes inv-nudge{0%,70%,100%{transform:none}78%{transform:rotate(-9deg) scale(1.06)}86%{transform:rotate(7deg) scale(1.06)}93%{transform:rotate(-3deg)}}
@keyframes inv-drift{to{transform:translate(-10px,-18px) rotate(1.5deg)}}
@keyframes inv-sway{from{transform:rotate(-1.2deg)}to{transform:rotate(1.2deg)}}
@keyframes inv-leaf{to{transform:rotate(3deg)}}
@keyframes inv-leaf-r{from{transform:scaleX(-1)}to{transform:scaleX(-1) rotate(3deg)}}
@keyframes inv-drop{from{transform:translateY(-44px) rotate(-5deg) scale(.92);opacity:0}to{transform:none;opacity:1}}
@keyframes inv-seal{to{transform:translateY(-16px) scale(1.25) rotate(14deg);opacity:0}}
@keyframes inv-flap{
 0%{transform:rotateX(0);z-index:3}
 49%{z-index:3}
 50%{z-index:0}
 100%{transform:rotateX(180deg);z-index:0}}
/* Past halfway the flap shows its inside: a patterned lining. */
@keyframes inv-lining{
 0%,49%{background:linear-gradient(180deg,var(--env-a,#efebe2),var(--env-c,#faf8f3))}
 50%,100%{background:repeating-linear-gradient(45deg,var(--env-lin-1,#25677d) 0 6px,var(--env-lin-2,#2e7890) 6px 12px)}}
@keyframes inv-rise{to{transform:translateY(-72%) rotate(-1.5deg)}}

/* Reduce Motion (v1.2.3): the same two pictures, sealed then opened, joined by
   fades instead of movement. Nothing drifts, sways or nudges. */
.invite.is-still .inv-envelope{animation:none}
.invite.is-still .inv-stage{transition:opacity .26s ease}
.invite.is-still.is-fading .inv-stage{opacity:0}
.invite.is-still.is-open .inv-seal{animation:none;opacity:0}
.invite.is-still.is-open .inv-flap{animation:none;transform:rotateX(180deg);z-index:0}
.invite.is-still.is-open .inv-flap i{animation:none;background:repeating-linear-gradient(45deg,var(--env-lin-1,#25677d) 0 6px,var(--env-lin-2,#2e7890) 6px 12px)}
.invite.is-still.is-open .inv-card{animation:none;transform:translateY(-72%) rotate(-1.5deg)}
.invite.is-still.is-open .inv-stage,.invite.is-still.is-done .inv-stage{transform:translateY(calc(var(--w)*.2))}

/* v1.3.0: soundtracks (js/sound.js). The picker in the visit form, the guest
   page's round speaker button, and the credit line under the plan. */
.sound-row{display:flex;gap:9px;align-items:center}
.sound-row select{flex:1;min-width:0}
.sound-row .sound-prev{flex:none;min-height:0;margin:0;padding:10px 14px;font-size:14px}
.sound-toggle{position:fixed;z-index:150;right:max(16px,env(safe-area-inset-right));bottom:calc(env(safe-area-inset-bottom) + 18px);width:48px;height:48px;display:grid;place-items:center;border-radius:50%;background:var(--paper);color:var(--ink);border:1px solid var(--paper-edge);box-shadow:var(--shadow-lift)}
.sound-toggle svg{width:22px;height:22px}
.sound-toggle[aria-pressed="false"]{color:var(--ink-2)}
body.has-envbadge .sound-toggle{bottom:calc(env(safe-area-inset-bottom) + 36px)}
.sound-credit{margin:22px 0 0;text-align:center;font-size:12.5px;color:var(--ink-2)}
.sound-credit a{color:inherit;text-decoration:underline;text-underline-offset:2px}
/* v1.4.5: the fixed speaker button (48px, 16px from the right) covered the end
   of long credits. Keep the text out of that corner, and leave room below so
   scrolling to the bottom lifts the credit above the button. */
.sound-credit{padding:0 64px;margin-bottom:64px}

/* v1.4.2: on guest links the day headings, the day's own title and the slot
   names are hand-lettered, loaded by renderShared. Satisfy since v1.4.6 (was
   Patrick Hand; the owner wanted warmer and less like a child's hand). It has
   one weight, so it's set regular and larger instead of bolded, with no extra
   letter-spacing because its letters join. */
.guest-app .day-title,.guest-app .day-note,.guest-app .slot-name{font-family:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;font-weight:400;letter-spacing:0}
.guest-app .day-title{font-size:26px;line-height:1.2}
.guest-app .day-note{font-size:21px;line-height:1.35;color:var(--ink)}
.guest-app .slot-name{font-size:20px;line-height:1.2;color:var(--ink-2)}
@media(max-width:540px){.guest-app .day-title{font-size:25px}.guest-app .slot-name{font-size:19px}}
/* v1.4.3: every other title on a guest link too: the visit's name, "Plans for
   your stay", place names, arrival/departure and the Stay line (all .tt).
   Subtext keeps Karla. The visit name's size is set inline, hence !important. */
/* v1.4.7–1.4.8: every title inside a day entry (restaurants, activities,
   meals, arrival/departure, Stay) went back to the plain bold Karla at the
   owner's request. The hand is kept for the visit name and "Plans for your
   stay" here, plus the day headings, day titles and slot names above. */
.guest-app .plan-head h2,.guest-app .share-band b{font-family:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;font-weight:400;letter-spacing:0}
.guest-app .plan-head h2{font-size:35px!important;line-height:1.15}
.guest-app .share-band b{font-size:27px;line-height:1.2}
@media(max-width:540px){.guest-app .plan-head h2{font-size:32px!important}}

/* ── which copy am I looking at? ── */
.envbadge{position:fixed;left:0;right:0;bottom:0;z-index:120;pointer-events:none;
  text-align:center;font:700 10.5px/1.9 "Karla",sans-serif;letter-spacing:.08em;
  text-transform:uppercase;color:#2A2823;background:repeating-linear-gradient(
    45deg,#E7B33F,#E7B33F 10px,#d9a63a 10px,#d9a63a 20px);
  box-shadow:0 -2px 8px -4px rgba(0,0,0,.5)}
body.has-envbadge .tabbar{padding-bottom:calc(env(safe-area-inset-bottom) + 26px)}

/* Guest preview (v1.6.1): a phone-sized window on wide screens, the whole screen on phones. */
.scrim.preview-layer{align-items:center}
.preview-panel{display:flex;flex-direction:column;width:min(440px,100%);height:min(880px,100%);background:var(--paper);border:1px solid var(--paper-edge);border-radius:10px;overflow:hidden;box-shadow:0 4px 0 -1px var(--paper-edge),0 30px 100px #102c4666;animation:rise .22s ease both}
.preview-panel .sheet-head{padding:16px 16px 14px 20px}
.preview-panel .sheet-head h2{font-size:22px}
.preview-panel .sheet-head p{font-size:14px;margin-top:4px}
.preview-frame{flex:1;width:100%;min-height:0;border:0;background:var(--board)}
.preview-panel .empty{margin:20px}
@media(max-width:540px){.scrim.preview-layer{padding:0!important}.preview-panel{width:100%;height:100dvh;border:0;border-radius:0;padding-top:var(--top-safe)}}

/* To-do tab (v1.6.2): the checklists moved from the top bar to a fifth tab. */
.tabbar .tab-icon{position:relative;display:inline-flex;flex:none}
.tabbar .tab-icon .badge{top:-7px;right:-11px;min-width:20px;height:20px;font-size:12px;line-height:16px}
.todo-page{max-width:760px}
.todo-page .list{display:flex;flex-direction:column;gap:9px}
.todo-add{display:flex;flex-wrap:wrap;gap:9px;padding:12px;margin:0 0 12px}
.todo-add input{flex:2 1 220px}.todo-add select{flex:1 1 180px}.todo-add .btn{flex:none}
/* "Example" on the samples the app ships with (v1.11.0) */
.ex-tag{display:inline-block;vertical-align:middle;margin-left:8px;padding:2px 7px;border-radius:3px;background:var(--manila);border:1px dashed var(--paper-edge);color:var(--ink-2);font:700 12px/1.5 var(--body-font);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}
.plan-head h2 .ex-tag{font-size:12px;vertical-align:5px}
/* "Save this itinerary" on a guest link (v1.9.2). It rides along under the
   top bar, which is itself sticky and changes height at each width. */
.save-band{position:sticky;top:calc(84px + var(--top-safe));z-index:30;display:flex;align-items:center;gap:10px;margin:0 0 20px;padding:9px 12px;background:var(--manila);border:1px dashed var(--paper-edge);border-radius:6px;box-shadow:var(--shadow-flat)}
.save-band .kind{width:32px;height:32px;flex:none;border-radius:5px;display:grid;place-items:center;background:var(--paper);color:var(--mustard);border:1px solid var(--paper-edge)}
.save-band .btn{font-size:14px;padding:9px 15px;min-height:40px}
@media(max-width:800px){.save-band{top:calc(72px + var(--top-safe))}}
@media(max-width:540px){.save-band{top:calc(68px + var(--top-safe))}}
/* A switch that can't be used says so, and looks it (v1.8.1) */
/* A tick box inside a .field (v1.108.0): .field>label is a block, which put
   the words on the box's baseline instead of centred beside it. */
.field>label.check{display:flex}
.check:has(input:disabled){opacity:.55;cursor:not-allowed}.check input:disabled{cursor:not-allowed}
/* Profile (v1.7.0): the round picture top right, its menu and form */
.avatar-btn{flex:none;display:grid;place-items:center;width:46px;height:46px;margin-left:4px;border-radius:50%}
.avatar{--av:40px;width:var(--av);height:var(--av);flex:none;display:inline-grid;place-items:end center;overflow:hidden;border-radius:50%;background:var(--manila);color:var(--navy);box-shadow:0 0 0 2px var(--paper),0 0 0 3px var(--paper-edge),var(--shadow-flat)}
.avatar-badge-wrap{position:relative;display:inline-flex;line-height:0}.avatar-subscriber-star{position:absolute;right:-4px;bottom:-4px;z-index:1;width:17px;height:17px;object-fit:contain;pointer-events:none;filter:drop-shadow(0 1px 1px #172a3a66)}
/* v1.124.2: in the profile menu the star grows with the 76px picture, and a
   gold "MostHost Subscriber" line sits under the name and city. The gold is
   darkened on light paper so the words reach 4.5:1. */
.profile-head .avatar-badge-wrap{flex:none}
.profile-head .avatar-subscriber-star{width:32px;height:32px;right:-7px;bottom:-7px;filter:drop-shadow(0 1px 2px #172a3a66)}
.profile-head p.pm-member{margin-top:4px;font-weight:800;color:var(--member-ink,#94650a);letter-spacing:.1px}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .profile-head p.pm-member{--member-ink:#f0b33a}}
:root[data-theme="dark"] .profile-head p.pm-member{--member-ink:#f0b33a}
:root[data-contrast="more"] .profile-head p.pm-member{--member-ink:#7a5200}
@media(prefers-color-scheme:dark){:root[data-contrast="more"]:not([data-theme="light"]) .profile-head p.pm-member{--member-ink:#f5c25a}}
:root[data-contrast="more"][data-theme="dark"] .profile-head p.pm-member{--member-ink:#f5c25a}
.avatar img{width:100%;height:100%;object-fit:cover;display:block;align-self:stretch}
.avatar svg.i{width:82%;height:82%;filter:none;overflow:hidden}
.avatar-btn:hover .avatar{box-shadow:0 0 0 2px var(--paper),0 0 0 3px var(--navy),var(--shadow-flat)}.avatar-btn:focus-visible{outline:2px solid var(--navy);outline-offset:2px}
/* v1.121.23: Most Host subscribers and free passes wear a soft gold ring,
   the colour of the profile star (most-host-star.png's face). */
.avatar.is-member,.profile-head .avatar.is-member{--member-gold:#f0b33a;box-shadow:0 0 0 2px var(--paper),0 0 0 4px var(--member-gold),0 0 10px 3px #f0b33a80,var(--shadow-flat)}
.avatar-btn:hover .avatar.is-member{box-shadow:0 0 0 2px var(--paper),0 0 0 4px var(--member-gold),0 0 14px 5px #f0b33a99,var(--shadow-flat)}
.drawer.drawer-right{inset:0 0 0 auto;border-right:0;border-left:1px solid var(--paper-edge);box-shadow:-14px 0 40px #102c4640;animation-name:slideinright}
@keyframes slideinright{from{transform:translateX(100%)}to{transform:none}}
.profile-head{display:flex;align-items:center;gap:16px;margin:4px 0 18px}.profile-head .avatar{box-shadow:0 0 0 3px var(--paper),0 0 0 4px var(--paper-edge),var(--shadow-flat)}
.drawer .profile-head h2{margin:0 0 4px;font:800 24px/1.1 var(--display-font);letter-spacing:-.6px;overflow-wrap:anywhere}.profile-head p{margin:0;font-size:14px;line-height:1.4;color:var(--ink-2)}
.drawer-right>.btn{margin-bottom:18px}.drawer nav button{white-space:nowrap}.drawer nav button small{white-space:normal;text-align:right;padding-left:10px}
.profile-photo{display:flex;align-items:center;gap:18px;margin:4px 0 18px}.profile-photo .avatar{box-shadow:0 0 0 3px var(--paper),0 0 0 4px var(--paper-edge),var(--shadow-flat)}.profile-photo-btns{display:flex;flex-wrap:wrap;gap:8px}.profile-photo-btns [hidden]{display:none}
.profile-danger{margin-top:22px;padding-top:14px;border-top:1px solid var(--rule)}.btn.danger-text{color:var(--red)}.profile-danger .hint{margin-top:6px}
@media(max-width:360px){.avatar-btn{width:40px;height:40px;margin-left:0}.avatar-btn .avatar{--av:34px!important}}
/* Guest replies in the Host Plan (v1.6.6) */
.reply-card{padding:14px 16px;margin-bottom:10px}.reply-head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px 12px;margin-bottom:6px}.reply-head b{font-size:16px}
.reply-notes{margin:0 0 8px;font-size:15px;line-height:1.5;white-space:pre-wrap;overflow-wrap:anywhere}.reply-card .row-sub svg{width:14px;height:14px;vertical-align:-2px;color:var(--navy)}
@media(max-width:800px){.tabbar{grid-template-columns:repeat(5,minmax(0,1fr))}}
@media(max-width:400px){.tabbar button{font-size:12px!important;letter-spacing:-.4px!important}}

/* v1.13.3: the button that offers the tour sits at the top of the Visits
   tab, above the "Your visits" banner, until it's closed. */
.tourpill{display:flex;align-items:center;gap:2px;width:fit-content;max-width:100%;margin:0 0 18px;padding:4px;background:var(--paper);color:var(--ink);border:1px solid var(--paper-edge);border-radius:8px 8px 8px 2px;box-shadow:var(--shadow-flat)}
.tourpill-go{display:flex;align-items:center;gap:9px;min-width:0;padding:9px 12px 9px 9px;border-radius:6px;font:700 15px/1.1 var(--body-font);color:var(--ink);text-align:left}
.tourpill-go:hover{background:var(--manila)}
.tourpill-go .i{flex:none;width:22px;height:22px;color:var(--amber)}
.tourpill .tourpill-x{min-width:34px;width:34px;height:34px}.tourpill .tourpill-x .i{width:13px;height:13px}
.tp-short{display:none}
@media(max-width:540px){.tourpill{margin-bottom:14px}.tp-long{display:none}.tp-short{display:inline}}

/* The tour itself: everything but the part being explained is dimmed, and
   the page can't be tapped until the tour closes. The dimming is light on
   purpose (v1.15.8: 40% in light mode, 55% in dark; it was 64% and 80%), so
   the rest of the tab can still be read behind it. The gold ring and the
   card's own shadow are what make them stand out. */
.tour{position:fixed;inset:0;z-index:85}
.tour-hole{position:fixed;border-radius:9px;pointer-events:none;box-shadow:0 0 0 3px var(--mustard),0 0 0 200vmax #0f272f66}
.tour.no-hole{background:#0f272f66}.tour.no-hole .tour-hole{display:none}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .tour-hole{box-shadow:0 0 0 3px var(--mustard),0 0 0 200vmax #030b0e8c}:root:not([data-theme="light"]) .tour.no-hole{background:#030b0e8c}}
[data-theme="dark"] .tour-hole{box-shadow:0 0 0 3px var(--mustard),0 0 0 200vmax #030b0e8c}[data-theme="dark"] .tour.no-hole{background:#030b0e8c}
.tour.tour-moving .tour-hole,.tour.tour-moving .tour-card{transition:top .32s cubic-bezier(.2,.7,.3,1),left .32s cubic-bezier(.2,.7,.3,1),width .32s cubic-bezier(.2,.7,.3,1),height .32s cubic-bezier(.2,.7,.3,1)}
/* v1.13.1: the tab bar rises above the dimming, so the tab being explained
   shows as the current one. Its own background is dimmed to match, and the
   other tabs fade; it can't be tapped until the tour ends. */
body.touring .tabbar{z-index:86;pointer-events:none;box-shadow:inset 0 0 0 200vmax #0f272f66}
body.touring .tabbar button:not([aria-current="true"]),body.touring .tabbar::before,body.touring .tabbar::after{opacity:.72}
body.touring .tabbar button[aria-current="true"]{outline:3px solid var(--mustard);outline-offset:1px}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) body.touring .tabbar{box-shadow:inset 0 0 0 200vmax #030b0e8c}}
[data-theme="dark"] body.touring .tabbar{box-shadow:inset 0 0 0 200vmax #030b0e8c}
.tour-card{position:fixed;max-height:calc(100dvh - 24px);overflow:auto;padding:14px 18px 16px;background:var(--paper);color:var(--ink);border:1px solid var(--paper-edge);border-radius:8px;box-shadow:var(--shadow-lift),0 20px 44px -14px #07181e99;animation:pop .2s ease both}
.tour-card::before{content:"";position:absolute;top:-1px;left:50%;width:78px;height:16px;margin-left:-39px;background:var(--tape);transform:rotate(-2deg)}
.tour-top{display:flex;align-items:center;justify-content:space-between;gap:8px;margin:0 -8px 2px 0}
.tour-where{font-size:12px;letter-spacing:.12em;text-transform:uppercase;font-weight:700;color:var(--ink-3)}
.tour-acts{display:flex;align-items:center;gap:2px}
.tour-card .tour-x,.tour-card .tour-edit{min-width:32px;width:32px;height:32px}.tour-card .tour-x .i,.tour-card .tour-edit .i{width:13px;height:13px}
.tour-card .tour-edit[hidden]{display:none}
/* The form for changing a step's words opens over the tour (v1.81.0). */
.scrim.tourwords-layer{z-index:96}
.tw-count.is-over{color:var(--red);font-weight:700}
.tw-problem{color:var(--red)}
.tour-card h2{margin:0 0 6px;font:800 23px/1.15 var(--display-font);letter-spacing:-.5px}
.tour-text{font-size:15.5px;line-height:1.5;color:var(--ink-2)}.tour-text b{color:var(--ink)}
.tour-bar{height:4px;margin:14px 0 13px;border-radius:2px;background:var(--rule);overflow:hidden}
.tour-bar i{display:block;height:100%;background:var(--navy);transition:width .3s ease}
.tour-card.is-center .tour-bar{visibility:hidden;margin:8px 0 6px}
.tour-foot{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:8px}
.tour-foot .btn{min-height:42px;padding:10px 16px}
.tour-foot .btn svg{width:16px;height:16px}
@media(max-width:540px){.tour-card{padding:12px 16px 14px}.tour-card h2{font-size:21px}.tour-text{font-size:15px}.tour-foot .btn{flex:1 1 auto;padding:10px 12px}}

/* v1.14.0 */
/* Cover photo: the button under the visit's name in the Host Plan, and the
   picker in the visit form. */
.plan-head .thumb-btn .thumb{cursor:pointer}
.cover-pick{display:flex;flex-wrap:wrap;gap:11px;align-items:center}
.cover-current .thumb{width:100%;height:150px}
.cover-gallery{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:12px}
.cover-choice{min-width:0;padding:5px;text-align:left;border:1px solid var(--paper-edge);border-radius:7px;background:var(--paper);color:var(--ink);cursor:pointer}
.cover-choice img{display:block;width:100%;height:auto;aspect-ratio:4/3;object-fit:cover;border-radius:4px;background:var(--manila)}
.cover-choice span{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;min-height:3.6em;padding:5px 2px 1px;font-size:12px;line-height:1.2;white-space:normal;overflow:hidden}
.cover-choice[aria-pressed="true"]{border-color:var(--navy);box-shadow:inset 0 0 0 2px var(--navy);background:var(--blue-soft)}
.cover-choice:focus-visible{outline:3px solid var(--navy);outline-offset:2px}
@media(max-width:540px){.cover-gallery{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.cover-current .thumb{height:120px}}
/* Pictures for home-cooked meals */
.meal-icons{display:grid;grid-template-columns:repeat(auto-fill,minmax(46px,1fr));gap:7px}
.meal-icon{display:grid;place-items:center;height:46px;border-radius:6px;border:1px solid var(--paper-edge);background:var(--green-soft);color:var(--moss)}
.meal-icon svg{width:28px;height:28px}
.meal-icon:hover{border-color:var(--moss)}
.meal-icon[aria-pressed="true"]{border-color:var(--navy);box-shadow:inset 0 0 0 2px var(--navy);background:var(--blue-soft);color:var(--navy)}
/* A note for this visit or every visit */
.note-scope{margin-top:8px}
/* Notes can run over several lines now that they can be added to */
.note,.entry-note{white-space:pre-line}
/* "Enter it by hand" under the search */
.byhand-hint{margin-right:auto;align-self:center}

/* v1.14.1: the note at the end of each day, and Things to bring */
.daynote{display:block;width:100%;min-height:44px;margin:12px 0 0;padding:9px 11px;border:1px dashed var(--paper-edge);border-radius:5px;background:transparent;font:400 15px/1.5 var(--body-font);color:var(--ink);resize:none;overflow:hidden}
.daynote::placeholder{color:var(--ink-3);font-size:14px}
.daynote:focus{border-style:solid;border-color:var(--navy);outline:none}
.day-endnote{margin:12px 0 0}
.bring-card{padding:18px 18px 16px;margin-top:22px}
.bring-card .section-head{margin-top:0}
.bring-list{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.bring-item{align-items:center;padding:10px 12px}
.bring-item .icon-btn{margin:-8px -6px -8px auto}
button.bring-item{width:100%;text-align:left;cursor:pointer;font:inherit;color:inherit}
.bring-item.done .bubble{background:var(--moss);border-color:var(--moss);color:var(--accent-ink)}
.bring-add{display:flex;gap:9px}.bring-add input{flex:1;min-width:0}.bring-add .btn{flex:none}
.guest-app .bring-card h2{font-family:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;font-weight:400;letter-spacing:0;font-size:28px}

/* v1.15.0 ───────────────────────────────────────── */
/* Filled where an outline wouldn't read: a favourite's heart, rating stars. */
.heart[aria-pressed="true"] svg.i,.stars svg.i{fill:currentColor}
.tabbar button[aria-current="true"] svg.i{stroke-width:1.55}
.tabbar button img.tab-art{width:27px;height:27px;object-fit:contain;flex:none}
.tabbar .tab-icon img.tab-art{display:block}
@media(max-width:1150px){.tabbar button img.tab-art{width:26px;height:26px}}
@media(max-width:800px){.tabbar button img.tab-art{width:21px;height:21px}}
@media(max-width:360px){.tabbar button img.tab-art{width:19px;height:19px}}
.fab svg.i,.btn svg.i{stroke-width:1.55}

/* The logo is a button back to Visits. */
.brand-home{font:inherit;letter-spacing:inherit;color:inherit;padding:0;border-radius:8px;cursor:pointer}
.brand-home:focus-visible{outline:2px solid var(--navy);outline-offset:4px}

/* Visits: pencil and Share side by side on each visit; the Examples group. */
.itin-row{grid-template-columns:64px minmax(0,1fr) auto}
.row-actions{display:flex;align-items:flex-start;gap:2px}
.itin-row .more-btn,.itin-row .share-btn{width:38px;min-width:38px}
.examples-group .section-head{flex-wrap:wrap;gap:8px 12px}
.clear-ex{min-height:0;padding:7px 12px;font-size:13.5px}
.clear-ex svg{width:15px;height:15px}
@media(max-width:800px){
  .itin-row{grid-template-columns:54px minmax(0,1fr)}
  .itin-row .row-actions{position:absolute;bottom:10px;right:8px}
  .itin-row .more-btn{position:static}
  .itin-row .visit-meta{padding-right:74px}
}
@media(max-width:540px){
  .itin-row{grid-template-columns:57px minmax(0,1fr)}
  .itin-row .row-actions{bottom:12px;right:10px}
  .itin-row .more-btn,.itin-row .share-btn{width:38px;min-width:38px;height:38px}
  .itin-row .visit-meta{padding-right:80px}
}
@media(max-width:360px){.itin-row{grid-template-columns:48px minmax(0,1fr)}}

/* Host Plan: the visit picker sits above the visit's name. */
/* The way to another visit, so it has to look like one (v1.82.4). The chevron
   is a drawn icon because select's own is a fixed gray, too faint in either theme. */
.plan-switch{margin:0 0 16px;padding:12px 14px 14px;background:var(--blue-soft);border:1px solid var(--paper-edge);border-left:5px solid var(--navy);border-radius:var(--radius);box-shadow:var(--shadow-flat)}
.plan-switch>label{font:700 18px/1.25 var(--display-font);letter-spacing:-.2px;margin-bottom:8px}
.plan-switch-box{position:relative;flex:1;min-width:0}
.plan-switch select{min-height:54px;padding:13px 46px 13px 14px;border:2px solid var(--navy);background-image:none;font-size:17px;font-weight:700;text-overflow:ellipsis;cursor:pointer}
.plan-switch-box svg.i{position:absolute;right:14px;top:50%;width:22px;height:22px;transform:translateY(-50%) rotate(90deg);color:var(--navy);pointer-events:none}
@media(min-width:760px){.plan-switch{display:flex;align-items:center;gap:16px}.plan-switch>label{margin:0;flex:none}}

/* A day: parts of the day appear once they hold something; the add buttons
   sit under them. */
.slot.part .slot-head{min-height:26px}
.slot.part .slot-name{font-size:13px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3)}
.day-add{display:flex;flex-wrap:wrap;gap:8px;padding:12px 0;border-bottom:1px dashed var(--rule)}
.day-add-btn{flex:1 1 150px;min-height:42px;padding:9px 12px;font-size:14.5px}
/* One line always (v1.52.1): short words in a narrow row, full ones in a wide row. */
.day-add{container-type:inline-size}
.day-add:not(.is-pending){flex-wrap:nowrap}
.day-add:not(.is-pending) .day-add-btn{flex:1 1 auto;min-width:0;padding:9px 6px;gap:6px;white-space:nowrap}
.day-add-btn .add-long{display:none}
@container (min-width: 470px){ .day-add-btn .add-long{display:inline} .day-add-btn .add-short{display:none} }
.day-add-btn.here{flex:1 1 100%;background:var(--moss);box-shadow:0 3px 0 color-mix(in srgb,var(--moss) 60%,#092631)}
.day-add-btn svg{width:16px;height:16px}
.tag.meal-tag{background:var(--blue-soft);color:var(--navy);border-color:transparent}

/* Ideas: the holding area above the days. */
.ideas-card{padding:18px 18px 6px;margin:18px 0 0;border-style:dashed}
.ideas-card .section-head{margin-top:0}
.ideas-card .day-add{border-bottom:0;padding-top:4px}
.ideas-list{margin:0 0 10px}
.entry.idea{cursor:grab;user-select:none;-webkit-user-select:none}
.idea-go{min-height:0;padding:7px 11px;font-size:13.5px;flex:none}

/* Choosing an activity or meal: Google's results, then adding by hand. */
.pick-head{margin:16px 0 8px}.pick-head h2{font-size:15px}
.byhand{margin:14px 0 6px;padding-top:12px;border-top:1px dashed var(--rule);display:flex;flex-direction:column;gap:8px}
.byhand .hint{margin:0 0 2px}
#hits:empty{display:none}

/* v1.15.10: a search result Google lists as closed says so */
.closed-note{color:var(--amber);font-weight:700;font-size:12.5px}

/* v1.16.0: tick boxes and plus buttons on plan entries and library rows,
   Google ratings, the bar that appears while things are ticked, the
   "Clear this itinerary" button, and Ideas beside the days on wide screens. */
.pick-box{display:grid;place-items:center;flex:none;width:24px;height:24px;cursor:pointer}
.pick-box input{width:19px;height:19px;margin:0;accent-color:var(--navy);cursor:pointer}
.entry.picked,.lib-row.picked{outline:2px solid var(--navy);outline-offset:-2px}

.swipe-front.entry{gap:8px;padding-left:7px;padding-right:4px}
.entry-open{display:flex;gap:10px;align-items:center;flex:1;min-width:0;text-align:left}
.entry-copy{min-width:36px;width:36px;height:36px;color:var(--ink-3)}
.entry-copy svg{width:18px;height:18px}

.tag.rating-tag{display:inline-flex;align-items:center;gap:3px;color:var(--ink)}
.rating-tag svg{width:12px;height:12px;color:var(--mustard);fill:currentColor}
.row-title .rating-tag{margin-left:8px;vertical-align:2px;font-family:var(--body-font)}

/* Library rows as a grid: tick, picture, name, then plus / heart / pencil on
   a line of their own (at every width since v1.88.0: at 44px they left the
   name no room beside them on a tablet). */
.lib-row{display:grid!important;grid-template-columns:auto auto minmax(0,1fr);grid-template-areas:"pick thumb body" "acts acts acts";column-gap:12px;row-gap:2px}
.lib-row .pick-box{grid-area:pick}.lib-row .thumb{grid-area:thumb}.lib-row .row-body{grid-area:body}
.lib-acts{grid-area:acts;display:flex;justify-content:flex-end;align-items:center;gap:2px}
.lib-row .lib-acts .heart{margin-left:0}
.lib-row .add-btn{color:var(--ink-3)}.lib-row .add-btn svg{width:20px;height:20px}
@media(max-width:540px){.lib-row{column-gap:10px}.lib-row .add-btn{min-width:36px;width:36px;height:38px}}

.sel-bar{position:fixed;z-index:46;left:calc(max(0px,(100vw - 1600px)/2) + 258px);right:max(30px,calc((100vw - 1600px)/2 + 30px));bottom:24px;display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;padding:12px 14px 12px 18px;background:var(--ink);color:var(--paper);border-radius:8px;box-shadow:var(--shadow-lift)}
.sel-n{font-weight:700;font-size:15px}
.sel-acts{display:flex;flex-wrap:wrap;gap:8px;margin-left:auto}
.sel-bar .sel-x{order:3}
.sel-bar .btn{min-height:40px;padding:8px 14px;font-size:14px}
.sel-bar .btn svg{width:16px;height:16px}
.sel-bar .btn.ghost{color:var(--paper);border-color:color-mix(in srgb,var(--paper) 45%,transparent)}
body:has(.sel-bar) main{padding-bottom:230px}
@media(max-width:1150px){.sel-bar{left:232px;right:24px}}
@media(max-width:800px){
  .sel-bar{left:12px;right:12px;bottom:calc(env(safe-area-inset-bottom) + 92px);padding:10px 12px;gap:8px}
  .sel-n{flex:1}
  .sel-bar .sel-x{order:0;min-height:34px;padding:5px 10px;font-size:13px}
  .sel-acts{flex:1 1 100%;margin-left:0;flex-wrap:nowrap}
  .sel-acts .btn{flex:1 1 auto;padding:8px 10px}
}

.clear-plan{display:flex;justify-content:center;margin:28px 0 0}
.clear-plan .btn{color:var(--red)}

@media(min-width:1151px){
  .plan-cols{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:24px;align-items:start;margin-top:24px}
  .plan-side{grid-column:2;grid-row:1;position:sticky;top:calc(100px + var(--top-safe));max-height:calc(100dvh - 116px - var(--top-safe));overflow-y:auto;overscroll-behavior:contain;border-radius:6px}
  .plan-main{grid-column:1;grid-row:1;min-width:0}
  .plan-side .ideas-card{margin:0}
  .plan-main .days-grid{grid-template-columns:1fr;margin-top:0}
  body:has(.pending-bar) .plan-side{top:calc(172px + var(--top-safe));max-height:calc(100dvh - 188px - var(--top-safe))}
}

/* v1.17.0: the search box on the Activities and Meals tabs with its ways
   out under the list, and the gap an entry is being dragged into. */
.lib-search{margin:0 0 16px}
.lib-search input{width:100%}
.lib-row[hidden]{display:none!important}
.lib-more{align-items:flex-start;margin-top:18px}
.lib-more[hidden]{display:none}
.lib-more .btn{min-width:min(100%,280px)}
.swipe.drop-before{box-shadow:0 -4px 0 0 var(--moss)}
.swipe.drop-after{box-shadow:0 4px 0 0 var(--moss)}


/* v1.17.4: Morning, Afternoon and Evening always show in the Host Plan */
.slot.part.is-empty{padding-bottom:6px;border-bottom:1px dashed var(--rule)}


/* v1.17.6: a bin on each plan entry, left of its plus */
.entry-del{min-width:36px;width:36px;height:36px;color:var(--ink-3)}
.entry-del svg{width:17px;height:17px}
.entry-del:hover{color:var(--red)}
.entry-del+.entry-copy{margin-left:-6px}
@media(max-width:540px){.entry-del,.entry-copy{min-width:30px;width:30px}}

/* v1.17.11: room under the last row for the floating add button. Scrolled right
   to the bottom of Visits, Activities or Meals, the button used to sit on
   top of the last listing; now the page runs on far enough for the listing
   to clear it. The button is 56px tall and sits 28px up on a wide screen,
   98px (above the tab bar) on a narrow one, and at --getapp-top when the
   "Get the app" pop-up is under it. Only where the button is showing. */
body:has(#fabHost .fab:not([hidden])) main{padding-bottom:132px}
@media(max-width:800px){body:has(#fabHost .fab:not([hidden])) main{padding-bottom:calc(env(safe-area-inset-bottom) + 182px)}}
body.has-getapp:has(#fabHost .fab:not([hidden])) main{padding-bottom:calc(var(--getapp-top,108px) + 84px)}

/* v1.17.12: pull down to refresh. The browser's own pull-to-reload is turned
   off so ours runs instead: it syncs before it reloads anything. */
html,body{overscroll-behavior-y:contain}
.ptr{--mat-h:74px;--mat-w:206px;--mat:#25677d;--mat-ink:#fffef8;--mat-lift:color-mix(in srgb,var(--mat) 84%,#fff);--mat-deep:color-mix(in srgb,var(--mat) 66%,#000);--mat-deepest:color-mix(in srgb,var(--mat) 48%,#000);position:fixed;left:50%;z-index:39;width:var(--mat-w);height:var(--mat-h);margin-left:calc(var(--mat-w) / -2);pointer-events:none;opacity:0;transition:opacity .2s ease .42s}
.ptr.on{opacity:1;transition:opacity .1s}
.ptr-face,.ptr-roll,.ptr-t{position:absolute;left:0}
.ptr-face{inset:0;display:grid;place-items:center;box-sizing:border-box;background:linear-gradient(180deg,var(--mat-deep),var(--mat-deepest));border-radius:0 0 7px 7px;box-shadow:0 4px 0 var(--mat-deepest),0 5px 0 color-mix(in srgb,var(--mat) 34%,#000),0 14px 16px -7px #0b263599;clip-path:inset(-2px -10px calc((1 - var(--p,0)) * 100% - max(0px,(var(--p,0) - .92) * 325px)) -10px);transform-origin:50% 0;transition:clip-path .42s cubic-bezier(.3,.7,.3,1)}
.ptr-face::before{content:"";position:absolute;inset:0 6px 6px;border-radius:0 0 5px 5px;background:radial-gradient(ellipse 62% 70% at 50% 46%,#ffffff33,#fff0 74%),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.8' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .7 -.22'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E"),url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18'%3E%3Cg fill='none' stroke-linecap='round'%3E%3Cpath transform='translate(0 .6)' d='M.9 1.5h7.2M.9 4.5h7.2M.9 7.5h7.2M9.9 10.5h7.2M9.9 13.5h7.2M9.9 16.5h7.2M10.5.9v7.2M13.5.9v7.2M16.5.9v7.2M1.5 9.9v7.2M4.5 9.9v7.2M7.5 9.9v7.2' stroke='%23000' stroke-opacity='.17' stroke-width='2.1'/%3E%3Cpath d='M.9 1.5h7.2M.9 4.5h7.2M.9 7.5h7.2M9.9 10.5h7.2M9.9 13.5h7.2M9.9 16.5h7.2M10.5.9v7.2M13.5.9v7.2M16.5.9v7.2M1.5 9.9v7.2M4.5 9.9v7.2M7.5 9.9v7.2' stroke='%23ffe9c4' stroke-opacity='.2' stroke-width='1.5'/%3E%3C/g%3E%3C/svg%3E"),linear-gradient(180deg,var(--mat-lift),var(--mat));box-shadow:inset 0 2px 3px #ffffff40,inset 0 -7px 9px -3px #0000004d,inset 7px 0 8px -5px #00000038,inset -7px 0 8px -5px #00000038,0 2px 3px #00000059}
.ptr-face b{position:relative;padding:0 6px 5px;font:400 36px/1 Satisfy,Caveat,cursive;color:var(--mat-ink);text-shadow:0 1.5px 1px #0000004d,0 -1px 1px #0000002e}
.ptr-roll{left:-3px;right:-3px;top:-10px;width:auto;height:23px;border-radius:12px;background:repeating-linear-gradient(90deg,#00000017 0 2px,#0000 2px 6px),linear-gradient(180deg,var(--mat-deep),color-mix(in srgb,var(--mat) 62%,#fff) 36%,var(--mat) 60%,var(--mat-deep) 82%,var(--mat-deepest));box-shadow:inset 7px 0 6px -5px #00000066,inset -7px 0 6px -5px #00000066,0 4px 5px #0b263580;transform:translateY(calc(var(--p,0) * var(--mat-h))) scaleY(calc(1 - var(--p,0) * .5));opacity:calc(1.4 - var(--p,0));transition:transform .42s cubic-bezier(.3,.7,.3,1),opacity .2s}
.ptr.ready .ptr-roll,.ptr.busy .ptr-roll{opacity:0}
.ptr-t{left:50%;top:22px;padding:5px 12px;background:var(--paper);color:var(--ink);border:1px solid var(--paper-edge);border-radius:999px;box-shadow:var(--shadow-lift);font-size:13.5px;font-weight:700;white-space:nowrap;transform:translate(-50%,calc(var(--p,0) * var(--mat-h)));transition:transform .42s cubic-bezier(.3,.7,.3,1),opacity .12s}
.ptr:not(.on) .ptr-t{opacity:0}
.ptr.held .ptr-face,.ptr.held .ptr-roll,.ptr.held .ptr-t{transition:none}
.ptr.busy .ptr-face{animation:ptr-sway 1.7s ease-in-out .35s infinite}
@keyframes ptr-sway{0%,100%{transform:skewX(0)}30%{transform:skewX(1.6deg)}70%{transform:skewX(-1.6deg)}}
@media(prefers-reduced-motion:reduce){.ptr.busy .ptr-face{animation:none}}

/* v1.17.14: the details sheet. Rating in the heading beside the tags line, and
   the row saying when it's planned for. */
.head-line{display:flex;flex-wrap:wrap;align-items:center;gap:4px 14px}
.head-stars{font-size:14px}
.when-row{margin:0 0 16px}

/* v1.17.16: hosting mode. The bar under the visit's name that switches between
   the trimmed plan and the full editing view, and the plan without its
   Ideas column. */
.mode-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px 14px;margin:14px 0 0}
.mode-bar .btn{min-height:42px;padding:9px 14px;font-size:14.5px}
.mode-bar .btn svg{width:16px;height:16px}
.mode-tag{display:inline-flex;align-items:center;gap:7px;padding:6px 11px;border-radius:999px;background:var(--green-soft);color:var(--moss);font-size:13.5px;font-weight:700}
.mode-tag svg{width:15px;height:15px}
.mode-tag.editing{background:var(--blue-soft);color:var(--navy)}
.plan-cols.hosting{display:block}
.plan-cols.hosting .days-grid{margin-top:24px}
.plan-cols.hosting .swipe-front.entry{padding-left:10px;padding-right:10px}

/* v1.17.18: pictures on plan entries big enough to make out, in the Host
   Plan and on guest links (they were 34px, 29px on a phone). Notes and
   travel rows keep the small square. */
.swipe .entry:not(.ghosted) .kind,
.guest-app .day .entry:not(.ghosted):not(.travel) .kind{width:88px;height:88px;border-radius:7px}
.swipe .entry:not(.ghosted) .kind svg,
.guest-app .day .entry:not(.ghosted):not(.travel) .kind svg{width:40px;height:40px}
@media(max-width:540px){
  .swipe .entry:not(.ghosted) .kind,
  .guest-app .day .entry:not(.ghosted):not(.travel) .kind{width:72px;height:72px}
  .swipe .entry:not(.ghosted) .kind svg,
  .guest-app .day .entry:not(.ghosted):not(.travel) .kind svg{width:34px;height:34px}
}
/* v1.17.18: the tag chooser's search box and "More tags" */
.tagpick .tag-q{margin-bottom:9px}
.tagpick .chips{margin-bottom:0}
.chip[hidden]{display:none}
.tag-more{min-height:0;margin-top:9px;padding:7px 12px;font-size:13.5px}
.tag-more[hidden]{display:none}

/* v1.17.19: holding a tag opens its menu, so it mustn't start selecting text or the phone's own callout */
.tagpick .chip{-webkit-touch-callout:none;user-select:none;-webkit-user-select:none}

/* v1.17.21: chosen tags lead the row and can be dragged into order; the two
   that show in plans wear a yellow outline. */
.tagpick .chip.chosen{cursor:grab;touch-action:none}
.tagpick .chip.shows{outline:3px solid var(--mustard);outline-offset:2px}
.tagpick .chip.lifting{opacity:.6;cursor:grabbing}
.tagpick .chips{row-gap:11px}

/* v1.17.41: the picture picker's pictures at a size that can be made out
   (they were 28px in 46px squares), and the two big choices in Add to Meals. */
.meal-icons{grid-template-columns:repeat(auto-fill,minmax(74px,1fr));gap:9px}
.meal-icon{height:74px}
.meal-icon svg{width:60px;height:60px}
.meal-icon[hidden]{display:none}
.pickbtn.pick-big{gap:18px}
.pickbtn.pick-big .kind{width:88px;height:88px;border-radius:8px}
.pickbtn.pick-big .kind svg{width:74px;height:74px}
@media(max-width:540px){
  .meal-icons{grid-template-columns:repeat(auto-fill,minmax(64px,1fr))}
  .meal-icon{height:64px}.meal-icon svg{width:52px;height:52px}
  .pickbtn.pick-big .kind{width:72px;height:72px}.pickbtn.pick-big .kind svg{width:60px;height:60px}
}

/* v1.17.43: bigger tab icons (they were 27px, 21px in the phone's bottom
   bar), and no "YOUR WORKSPACE" label over the tabs on wide screens. In the
   bottom bar the padding and gap give back what the bigger picture takes, so
   the bar stays the height the floating button and the toasts are placed
   against. */
.tabbar::before{display:none}
.tabbar button img.tab-art{width:40px;height:40px}
.tabbar button{gap:14px;min-height:60px}
@media(max-width:1150px){.tabbar button img.tab-art{width:38px;height:38px}}
@media(max-width:800px){
  .tabbar button img.tab-art{width:31px;height:31px}
  .tabbar button{gap:3px;padding:5px 2px;min-height:60px}
}
@media(max-width:360px){.tabbar button img.tab-art{width:27px;height:27px}}

/* v1.17.47: a visit's cover fills the left of its card and fades into the
   text. The card's earlier column and padding rules, set per screen width,
   are overridden here in one place: one column for the text, the row's
   buttons after it, and room on the left for the picture. */
.itin-row{grid-template-columns:minmax(0,1fr) auto!important;padding-left:calc(35% + 12px)!important}
.itin-cover{position:absolute;left:0;top:0;bottom:0;width:35%;padding:0;border-radius:7px 0 0 7px;overflow:hidden;cursor:pointer}
.itin-cover img{width:100%;height:100%;object-fit:cover;display:block;
  -webkit-mask-image:linear-gradient(90deg,#000 58%,transparent);mask-image:linear-gradient(90deg,#000 58%,transparent)}
.itin-cover img.is-default{object-position:38% 15%}
.itin-cover:hover img{filter:brightness(1.08)}
.itin-cover:focus-visible{outline:2px solid var(--navy);outline-offset:-3px}
/* v1.17.48: the text starts clear of the picture's fade, not inside it. The
   picture is 35% of the card (it was 41%) and the text begins a gap past its
   edge. Moving the text alone was tried first: two-across cards are only
   ~475px wide, and the name and dates wrapped. */
@media(max-width:540px){.itin-row{padding-left:calc(35% + 9px)!important}.itin-row .row-title{font-size:20px}}

/* v1.17.47: buttons in the Host Plan big enough for a thumb. The three
   beside Morning, Afternoon and Evening and the bin and plus on each entry
   are 44px squares (they were 30 to 36) with icons to match. On a phone the
   bin and plus stack, so the entry's own text keeps its width. */
.slot.part .slot-head{gap:0;min-height:44px}
.entry-acts{display:flex;align-items:center;flex:none;gap:2px}
.entry-del,.entry-copy{min-width:44px;width:44px;height:44px}
.entry-del svg,.entry-copy svg{width:23px;height:23px}
.entry-del+.entry-copy{margin-left:0}
/* v1.109.1: a card with notes stacks its buttons at every width (the owner's
   request). Side by side, four of them left the notes a column a word wide,
   even on a computer, where a day is only a few hundred pixels across. */
.entry.has-notes .entry-acts{flex-direction:column;gap:4px}
@media(max-width:540px){
  .entry-acts{flex-direction:column;gap:4px}
  .entry-del,.entry-copy{min-width:44px;width:44px;height:44px}
}

/* v1.18.0: Terms & privacy pages, the links to them, Stop sharing, and the bin on a guest reply. */
.legal{font-size:15px;line-height:1.6;color:var(--ink)}
.legal h3{font:800 17px/1.25 var(--display-font);margin:24px 0 8px;letter-spacing:-.2px}
.legal p{margin:0 0 11px}.legal ul{margin:0 0 12px;padding-left:20px}.legal li{margin-bottom:6px}
.legal a,.legal-foot a,.legal-agree a,.fb-privacy a{color:var(--navy);text-decoration:underline;text-underline-offset:3px}
.legal-date{color:var(--ink-2);font-size:13.5px}
.legal-table{overflow-x:auto;margin:0 0 14px}
.legal table{border-collapse:collapse;width:100%;font-size:14px;line-height:1.45}
.legal th,.legal td{text-align:left;vertical-align:top;padding:8px 10px;border:1px solid var(--rule)}
.legal th{font-weight:700;background:color-mix(in srgb,var(--rule) 35%,transparent)}
.legal-todo{background:#ffe08a;color:#3a2c00;padding:0 3px;border-radius:2px}
.legal-draft{margin:0 0 14px;padding:10px 12px;border:1.5px dashed var(--amber);border-radius:4px;font-size:14px;line-height:1.45}
.legal-switch{margin-bottom:14px}
.legal-foot{margin:18px 0 0;text-align:center;font-size:13.5px;color:var(--ink-2)}
.legal-agree{margin:9px 0 0;text-align:center}
.fb-privacy{margin:12px 0 0}
.share-on{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px 14px;margin-top:16px;padding-top:14px;border-top:1px solid var(--rule);font-size:14px;line-height:1.4;color:var(--ink-2)}
.share-on span{flex:1 1 200px}.share-on svg{width:15px;height:15px;vertical-align:-2px}
.reply-head .reply-del{margin:-8px -8px -8px auto;color:var(--ink-2)}
.reply-head{align-items:center}
.scrim.legal-layer,.scrim.support-layer{z-index:96}
/* v1.19.0: the small "Forgot your password?" link under the sign-in buttons. */
.linkbtn{display:block;margin:10px auto 0;padding:6px 8px;font:inherit;font-size:14px;color:var(--navy);text-decoration:underline;text-underline-offset:3px;background:none;border:0;cursor:pointer}
/* v1.22.0: the date beside each entry under "What's changed". */
.legal-when{font:400 13px/1 var(--body-font);color:var(--ink-2);margin-left:6px;letter-spacing:0}
/* v1.23.0: early access on the sign-in screen. */
.gate-more{margin-top:20px;padding-top:18px;border-top:1px solid var(--rule);font-size:14.5px;line-height:1.5;color:var(--ink-2)}
.gate-more p{margin:0 0 12px}.gate-more .linkbtn{margin-top:12px}
.gate-h{font:700 22px/1.2 var(--display-font);letter-spacing:-.5px;margin:0 0 8px}
/* v1.24.0 */
/* Visits tab: each group after the first gets the room above its heading
   that .section-head:first-child was taking away ("Past visits" sat right
   under the card above it). */
.visit-group+.visit-group{margin-top:34px}
/* Papercraft pictures fill their frames. The files had wide empty margins,
   now trimmed (a 3% margin is left in each), and the pictures were being
   drawn at under half the frame's width in plans. */
.thumb img.papercraft-ph{padding:2px}
.kind svg.paper{width:92%!important;height:92%!important}
.meal-icon svg.paper{width:88%;height:88%}
/* v1.26.0: what's already in the host's own list, shown while adding. */
.own-matches{margin:0 0 16px;padding:12px 12px 4px;border:1.5px dashed var(--mustard);border-radius:8px;background:color-mix(in srgb,var(--mustard) 9%,transparent)}
.own-matches[hidden]{display:none}
.own-head{font:700 13px/1.2 var(--body-font);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);margin:0 0 9px}
.own-foot{margin:8px 2px 8px}
.own-inline{margin:10px 0 0}
/* v1.27.0: "Done 3 times, last in July 2025" on activity and meal cards. */
.used-line{color:var(--moss);font-size:13px}
.used-detail{margin:0 0 14px;font-weight:500}.used-detail svg{width:15px;height:15px;vertical-align:-2px}
.part-lock{color:var(--amber);font-weight:700}
/* v1.28.0: the address row in the details is a button now (it asks which maps), and the two choices are links. */
.dl .dl-btn{display:flex;gap:12px;align-items:flex-start;width:100%;text-align:left;font:inherit;font-size:15px;line-height:1.5;color:var(--ink);background:none;border:0;border-bottom:1px solid var(--rule);padding:13px 2px;cursor:pointer;overflow-wrap:anywhere}
.dl .dl-btn:last-child{border-bottom:0}.dl .dl-btn span u{text-decoration:none;color:var(--navy);font-weight:600}
a.pickbtn.maps-pick{text-decoration:none;color:inherit}
/* v1.28.1: the address row once a maps app is remembered, with the way to change it under it. */
.dl .dl-dir{display:flex;flex-direction:column;border-bottom:1px solid var(--rule)}
.dl .dl-dir:last-child{border-bottom:0}
.dl .dl-dir>a,.dl .dl-dir>.dl-btn{border-bottom:0}
.dl .dl-change{margin:-6px 0 10px 34px;padding:4px 0;font-size:13.5px;text-align:left;align-self:flex-start}
/* v1.29.0: the gear beside "Your list" (the standard checklist), the grocery
   list under it, and ingredients on one of your own meals. */
.section-head .std-gear{align-self:center;margin:-12px auto -12px -6px}
.grocery-head{margin-top:38px}
.grocery-foot{display:flex;justify-content:flex-end;margin-top:10px}
.std-sheet .todo{margin-bottom:7px}
.std-add,.ing-add{display:flex;gap:9px}
.std-add input,.ing-add input{flex:1;min-width:0}
.std-add .btn,.ing-add .btn{flex:none}
.ing-list{display:flex;flex-direction:column;gap:6px;margin-bottom:9px}
.ing-list:empty{display:none}
.ing-item{display:flex;align-items:center;gap:8px;padding:2px 2px 2px 12px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:5px;font-size:15px}
.ing-item>span{flex:1;min-width:0;overflow-wrap:anywhere}
.ing-item .icon-btn{min-width:40px;width:40px;height:40px}
.ing-show{margin:0 0 12px;padding-left:20px;font-size:15px;line-height:1.6;color:var(--ink-2)}
.grocery-pick{display:flex;flex-direction:column;gap:7px}
.grocery-pick .check small{display:block;font-size:12.5px;color:var(--ink-3)}
/* v1.30.0: the cart on your own meals in the Host Plan, "Gather groceries" (was "Export grocery list") under Travel. */
.entry-cart{min-width:44px;width:44px;height:44px;color:var(--ink-3)}
.entry-cart svg{width:23px;height:23px}
.entry-cart:hover{color:var(--navy)}
.grocery-pick .grocery-meal{font:700 15px/1.3 var(--body-font);margin:12px 2px 2px}
.grocery-pick .grocery-meal:first-child{margin-top:0}

/* App icon choices in Settings → Display. */
.app-icon-field{border-top:1px solid var(--rule);padding-top:18px;margin-top:24px}
.app-icon-preview-row{display:flex;align-items:center;gap:14px;margin:-1px 0 18px}
.app-icon-preview{display:grid;place-items:center;flex:none;width:72px;height:72px;padding:5px;border:1px solid var(--paper-edge);border-radius:13px;box-shadow:var(--shadow-flat);overflow:hidden}
.app-icon-preview img{width:100%;height:100%;object-fit:contain}
.app-icon-label{font-size:13px;font-weight:700;color:var(--ink-2);margin:0 0 8px}
.app-icon-styles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-bottom:17px}
.app-icon-style{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0;padding:7px 4px 6px;border:1px solid var(--paper-edge);border-radius:6px;background:var(--manila);font-size:12px;line-height:1.2;color:var(--ink-2)}
.app-icon-style[aria-pressed="true"]{border:2px solid var(--navy);padding:6px 3px 5px;color:var(--ink);background:var(--paper)}
.app-icon-thumb{display:grid;place-items:center;width:48px;height:48px;border-radius:9px;overflow:hidden;box-shadow:0 1px 3px #102c4628}
.app-icon-thumb img{width:100%;height:100%;object-fit:contain}
.app-icon-style>span:last-child{display:block;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.app-icon-colors{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;margin:2px 0 4px}
.app-icon-color{display:flex;flex-direction:column;align-items:center;gap:7px;min-width:0;padding:5px 0 2px;font-size:12px;line-height:1.2;text-align:center;color:var(--ink-2)}
.app-icon-color[aria-pressed="true"]{color:var(--ink);font-weight:700}
.app-icon-dot{display:grid;place-items:center;flex:none;box-sizing:border-box;width:36px;height:36px;padding:3px;border:1px solid var(--paper-edge);border-radius:50%;background:var(--paper)}
.app-icon-color[aria-pressed="true"] .app-icon-dot{border:2px solid var(--navy);padding:2px;box-shadow:0 0 0 2px var(--paper),0 0 0 3px var(--navy)}
.app-icon-dot span{display:block;width:100%;height:100%;border-radius:50%;background:var(--app-icon-swatch)}
@media(max-width:420px){.app-icon-styles{gap:5px}.app-icon-style{font-size:12px}.app-icon-color{font-size:12px}.app-icon-thumb{width:42px;height:42px}.app-icon-preview-row{gap:11px}}
/* v1.32.0: importing a recipe from a link, and a meal's instructions. */
.recipe-import{padding:12px;background:var(--manila);border:1px dashed var(--paper-edge);border-radius:6px}
.hint.import-ok{color:var(--moss);font-weight:600}
.hint.import-bad{color:var(--red);font-weight:600}
.steps-box{min-height:220px;line-height:1.5}
.hint .src-rm{display:inline;margin:0;padding:0;font-size:inherit}
.steps-show{margin:0;padding-left:26px;font-size:15px;line-height:1.6;color:var(--ink-2);list-style:decimal outside}
.steps-show li{margin-bottom:16px;padding-left:4px}
.steps-show li:last-child{margin-bottom:0}
.steps-show li::marker{font-weight:700;color:var(--ink)}
/* v1.32.3: Add to grocery list at the top of a meal's details. */
.grocery-top{margin:0 0 16px}
.when-row+.grocery-top{margin-top:12px}
.ing-show{margin-bottom:0}

/* v1.33.0: "Your turn to host" at the foot of a guest link. The picture's own
   cream background is kept behind it in both themes, as on the sign-in screen. */
.host-invite{margin-top:30px;padding:0;overflow:hidden;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);align-items:stretch;border:1px solid var(--paper-edge);box-shadow:var(--shadow-lift)}
.host-invite-art{display:block;width:100%;height:100%;min-height:240px;object-fit:cover;object-position:right center;background:#f9f4ea}
.host-invite-copy{padding:26px 26px 24px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center}
.host-invite-kick{margin:0 0 4px;font:700 12.5px/1.3 var(--body-font);letter-spacing:.9px;text-transform:uppercase;color:var(--amber)}
.host-invite h2{margin:0 0 10px;font-family:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;font-weight:400;letter-spacing:0;font-size:38px;line-height:1.1;color:var(--ink)}
.host-invite-copy>p:not(.host-invite-kick):not(.hint){margin:0 0 18px;font-size:16px;line-height:1.6;color:var(--ink-2)}
.host-invite .btn{font-size:16px;padding:13px 22px;min-height:50px;text-decoration:none}
.host-invite .hint{margin:12px 0 0}
@media(max-width:700px){
 .host-invite{grid-template-columns:1fr}
 .host-invite-art{height:auto;min-height:0;aspect-ratio:3/2}
 .host-invite-copy{padding:20px 18px 22px}
 .host-invite h2{font-size:34px}
 .host-invite .btn{width:100%;justify-content:center}
}

/* v1.33.1: the guest reply form folded to one row until it's wanted. */
.fb-fold{display:flex;align-items:center;gap:14px}
.fb-fold-text{flex:1;min-width:0}
.fb-fold h2{margin:0;font-size:19px;line-height:1.25}
.fb-fold p{margin:3px 0 0;font-size:14.5px;line-height:1.45;color:var(--ink-2)}
.fb-fold .btn{flex:none;min-height:44px}
.fb-card.is-open .fb-fold{margin-bottom:14px}
.fb-card.is-open .fb-fold .btn,.fb-card.is-open .fb-fold p{display:none}
@media(max-width:420px){.fb-fold .btn{padding-left:12px;padding-right:12px;font-size:14px}}

/* A copy of another host's plan (v1.35.0, js/hostcopy.js): news of their
   changes rides with the travel bars; the note that updates have ended is quieter. */
.copy-bar>svg:first-child{color:var(--amber)}
.copy-ended{margin-top:18px;padding:12px 14px;border:1px dashed var(--paper-edge);border-radius:6px;line-height:1.5}
.copy-ended .linkbtn{margin-left:6px}

/* Saying goodbye and thank you (v1.36.0). On a guest link from the visit's
   last day, "Say thank you" sits at the top; once it's sent, "Your turn to
   host" moves up under it. In the Host Plan, the goodbye card rides under
   Guest replies. */
.thanks-card{margin:0 0 22px;padding:20px 22px 18px;border-top:4px solid var(--amber)}
.thanks-kick{margin:0 0 2px;font:700 12.5px/1.3 var(--body-font);letter-spacing:.9px;text-transform:uppercase;color:var(--amber)}
.thanks-card h2{margin:0 0 8px;font-family:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;font-weight:400;letter-spacing:0;font-size:36px;line-height:1.1;color:var(--ink)}
.thanks-lead{margin:0 0 14px;font-size:16px;line-height:1.55;color:var(--ink-2)}
.thanks-picks{flex-wrap:wrap}
.thanks-picks .chip{max-width:100%;white-space:normal;text-align:left;line-height:1.3}
.thanks-card textarea{min-height:92px}
.thanks-card.is-sent{border-top-color:var(--moss);padding:15px}
.host-invite.after-thanks{margin:0 0 26px}
.goodbye-card{position:relative;display:flex;gap:14px;align-items:flex-start;margin-top:10px;padding:16px 50px 16px 16px;border-left:4px solid var(--amber)}
.goodbye-card.is-sent{border-left-color:var(--moss)}
.day .goodbye-card{margin:4px 0 16px}
.goodbye-card>.kind{flex:none;width:40px;height:40px;display:grid;place-items:center;border-radius:50%;background:var(--blue-soft);color:var(--navy)}
.goodbye-card>.kind svg{width:22px;height:22px}
.goodbye-copy{flex:1;min-width:0}
.goodbye-copy h3{margin:0 0 4px;font-size:18px;line-height:1.25}
.goodbye-copy p{margin:0 0 12px;font-size:15px;line-height:1.5;color:var(--ink-2)}
.goodbye-acts{display:flex;flex-wrap:wrap;gap:8px}
.goodbye-acts .btn{min-height:44px}
.goodbye-x{position:absolute;top:6px;right:6px;color:var(--ink-2)}
.reply-thanks{margin:0 0 6px;font-size:14.5px;color:var(--ink-2)}
.reply-thanks svg{width:14px;height:14px;vertical-align:-2px;color:var(--amber)}
.reply-thanks b{color:var(--ink)}
@media(max-width:520px){
 .goodbye-card>.kind{display:none}
 .thanks-card{padding:16px 15px 15px}
 .thanks-picks{gap:6px}
 .thanks-picks .chip{font-size:13.5px;padding:6px 10px;min-height:0}
 .goodbye-acts .btn{flex:1 1 100%;justify-content:center}
}
/* The host's goodbye note (v1.36.2), at the top of "Say thank you". */
.goodbye-note{margin:0 0 18px;padding:14px 16px;border-radius:5px;background:var(--blue-soft);border-left:4px solid var(--navy)}
.goodbye-note-kick{margin:0 0 4px;font:700 12.5px/1.3 var(--body-font);letter-spacing:.9px;text-transform:uppercase;color:var(--navy)}
.goodbye-note-text{margin:0;font-size:17px;line-height:1.55;color:var(--ink);white-space:pre-wrap;overflow-wrap:anywhere}
.goodbye-mine{margin:-4px 0 12px;font-size:14.5px;line-height:1.5;color:var(--ink-2);font-style:italic;white-space:pre-wrap;overflow-wrap:anywhere}
.goodbye-card.is-sent h3{margin-bottom:10px}.goodbye-card.is-sent .goodbye-mine{margin-top:0}

/* v1.37.1 (the owner's request): the three buttons beside Morning,
   Afternoon and Evening look like small copies of the Add an activity /
   Add a meal / Add a note buttons under the day's title, icon only, so
   they read as buttons. They were bare 44px icons (v1.17.47). */
.slot.part .slot-head{gap:6px}

/* v1.38.0: the countdown on a guest link, under the visit's dates. */
.countdown{display:flex;align-items:center;gap:14px;margin-top:14px;padding:12px 16px;border-radius:6px;background:var(--blue-soft);border:1px dashed var(--paper-edge)}
.countdown-n{flex:none;min-width:64px;padding:2px 10px 4px;border-radius:5px;background:var(--paper);border:1px solid var(--paper-edge);box-shadow:0 2px 0 var(--paper-edge);text-align:center;font-family:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;font-size:44px;line-height:1.1;color:var(--ink)}
.countdown-words{display:flex;flex-direction:column;font-size:15px;line-height:1.4;color:var(--ink-2)}
.countdown-words b{font-family:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;font-weight:400;font-size:28px;line-height:1.15;color:var(--ink)}
@media(max-width:540px){.countdown-n{font-size:38px;min-width:56px}.countdown-words b{font-size:25px}}
/* v1.38.1: Satisfy keeps a deep empty band under its letters, so ordinary
   centring left the number about 8px high in its tile. The tile is a fixed
   height, centred with flex, and the digits are nudged down by the gap
   between the font's box and its ink (measured: 0.14em). */
.countdown-n{display:flex;align-items:center;justify-content:center;height:56px;padding:0 10px;line-height:1;box-sizing:border-box}
.countdown-n>span{position:relative;top:.14em}
@media(max-width:540px){.countdown-n{height:50px}}
/* v1.38.2–3: "days to go" alone, centred on the middle of the number by
   the body of its small letters (a, s, o), which is what the eye judges;
   centring it ascenders-to-descenders (v1.38.2) looked raised to the owner.
   With flex centring alone the words sat about 4.5px low, hence the lift. */
.countdown-words{align-self:stretch;justify-content:center}
.countdown-words b{display:block;line-height:1;position:relative;top:-.03em}

/* v1.39.0: Add to calendar. On a guest link it sits in the save band beside
   Save itinerary (the owner's labels since v1.40.1, in full at every width;
   it said just "Calendar" on phones before); the window's choices are links
   styled like the share sheet's. */
/* The star shows on phones again (v1.55.4, the owner's call): with Add to
   calendar inside Save itinerary since v1.50.0 there's room for it. */
@media(max-width:480px){
 .save-band .btn{white-space:nowrap;padding-left:11px;padding-right:11px}.save-band{gap:8px;padding-left:10px;padding-right:10px;flex-wrap:wrap}
 .save-band [data-wifi]{gap:6px}}
@media(max-width:360px){.save-band .btn{font-size:13.5px;padding-left:9px;padding-right:9px}}
.save-band [data-wifi]{margin-left:auto}
/* Once used, Save itinerary sits at the foot of a guest link (v1.60.0), and
   the Wi-Fi button keeps the top band to itself. */
.save-band.at-foot{position:static;margin:20px 0 0}
.save-band.only-wifi [data-wifi]{margin-left:0}
a.cal-opt{text-decoration:none;color:inherit}
.cal-opt.is-waiting{opacity:.5;pointer-events:none}

/* v1.41.0: Export itinerary. The PDF preview is full-screen with a bar
   above it (since v1.41.2 the pages are pictures drawn on the device). */
.print-layer{position:fixed;inset:0;z-index:9000;display:flex;flex-direction:column;background:#e8edea}
.print-bar{display:flex;align-items:center;gap:10px;padding:12px 16px;background:var(--surface,#fffef8);border-bottom:1px solid var(--paper-edge);color:var(--ink)}
.print-bar-text{flex:1;min-width:0;display:flex;flex-direction:column;font-size:14px;line-height:1.4;color:var(--ink-2)}
.print-bar-text>b{font-size:16px;color:var(--ink)}
.print-scroll{flex:1;overflow:auto;padding:24px 12px 60px;-webkit-overflow-scrolling:touch}
body.printing{overflow:hidden}
@media(max-width:560px){.print-bar{flex-wrap:wrap}.print-bar-text{flex-basis:100%}.print-bar .btn{flex:1}}

/* v1.41.2: the preview shows the PDF's own pages, drawn on the device. */
.print-pages{display:flex;flex-direction:column;align-items:center;gap:18px}
.print-page{display:block;width:100%;max-width:760px;height:auto;background:#fff;border-radius:3px;box-shadow:0 2px 0 #d4dcd5,0 18px 40px -24px rgba(32,61,66,.45)}

/* v1.42.0: "Remind me about bookings" and its number of days, in Notifications. */
.booking-days{display:flex;align-items:center;gap:10px;font-size:15px;color:var(--ink-2)}
.booking-days input{width:76px;min-height:40px;text-align:center}
.booking-days input:disabled{opacity:.5}

/* v1.43.0: the clock note under a time box, with its Change link inline. */
.clock-hint{margin-top:4px}
.clock-hint .linkbtn{display:inline;margin:0 0 0 4px;padding:0;font-size:inherit}

/* v1.44.0: "Show more covers" under the first few; "Show more backgrounds" too (v1.70.11). */
.cover-more{margin-top:10px}

/* v1.45.0: a surprise on a guest link, and its tick box in the form. */
.entry.is-surprise{border-style:dashed;border-color:var(--amber);background:color-mix(in srgb,var(--amber) 9%,transparent)}
.entry.is-surprise .tt{font-style:italic}
/* v1.61.4: the sealed envelope is 52px; at 20px it couldn't be made out. */
.surprise-field>.check{display:flex;margin-bottom:0}
.surprise-field .check span{display:flex;align-items:center;gap:10px}
.surprise-field .check svg{width:52px;height:52px;flex:none;margin:-6px 0}
.surprise-when{color:var(--amber);font-weight:600}
/* v1.47.4: a guest chooses when to open a surprise once it is ready. */
.surprise-reveal{margin-top:10px;min-height:44px;padding:8px 20px}
.surprise-reveal[hidden]{display:none}
.surprise-revealed{animation:surprise-glow 1.2s ease-out}
.surprise-announcement{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.surprise-confetti{position:fixed;inset:0;z-index:10000;pointer-events:none;overflow:hidden}
.surprise-confetti i{position:absolute;width:8px;height:12px;border-radius:1px;animation:surprise-pop 1.3s ease-out both}
.surprise-confetti i:nth-child(3n){width:6px;height:9px}
@keyframes surprise-pop{
  0%{opacity:1;transform:translate(-50%,-50%) rotate(0)}
  45%{opacity:1;transform:translate(var(--confetti-x),var(--confetti-y)) rotate(var(--confetti-turn))}
  100%{opacity:0;transform:translate(var(--confetti-x),calc(var(--confetti-y) + var(--confetti-fall))) rotate(calc(var(--confetti-turn) + 120deg))}
}
@keyframes surprise-glow{0%{box-shadow:0 0 0 3px var(--amber)}100%{box-shadow:0 0 0 0 transparent}}
@media(prefers-reduced-motion:reduce){.surprise-confetti{display:none}.surprise-revealed{animation:none}}
/* v1.46.0: the smarter grocery list. Send beside its heading, the people
   stepper and "How the amounts were worked out" in the tick sheet, and the
   ways to send it on. */
.grocery-head .groc-send{margin:-10px 0 -10px auto;padding:7px 13px;min-height:38px;font-size:14px}
.grocery-head .groc-send svg{width:16px;height:16px}
.groc-people{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;margin-bottom:12px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:6px}
.groc-people b{display:block;font-size:15px}
.groc-people small{display:block;font-size:13px;color:var(--ink-3);margin-top:2px}
.stepper{display:flex;align-items:center;gap:4px;flex:none}
.stepper .icon-btn{min-width:44px;width:44px;height:44px;font-size:22px;font-weight:700;line-height:1;border:1px solid var(--paper-edge);border-radius:50%;background:var(--paper)}
.stepper .icon-btn svg{width:18px;height:18px}
.stepper output{min-width:34px;text-align:center;font:700 20px/1 var(--display-font)}
.groc-noserv{margin:0 2px 12px}
.groc-how{margin:0 2px 14px;font-size:14px;color:var(--ink-2)}
.groc-how summary{cursor:pointer;font-weight:600;color:var(--navy)}
.groc-how ul{margin:8px 0 0;padding-left:20px;line-height:1.55}
.grocery-pick .check small.groc-note{color:var(--amber);font-weight:600}
.groc-sendbtns{display:flex;flex-direction:column;gap:9px}
.groc-sendbtns a.btn{text-decoration:none;justify-content:center}
.groc-howto{margin-top:16px;font-size:14px;line-height:1.55;color:var(--ink-2)}
.groc-howto p{margin:0 0 10px}

/* ── House guide (v1.48.0, js/guide.js) ───────────────────────── */
/* The button on a guest link, under Save itinerary: a taped paper card. */
.guide-band{position:relative;display:flex;align-items:center;gap:16px;width:100%;margin:6px 0 26px;padding:16px 18px 16px 14px;text-align:left;background:var(--paper);border:1px solid var(--paper-edge);border-radius:var(--radius);box-shadow:var(--shadow-lift);transition:transform var(--fx),box-shadow var(--fx)}
.guide-band:hover{transform:translateY(-2px)}
.guide-band::before{content:"";position:absolute;top:-9px;left:30px;width:74px;height:18px;background:var(--tape);transform:rotate(-4deg)}
.guide-band-art{flex:none;width:68px;height:68px;display:grid;place-items:center;border-radius:50%;background:var(--green-soft)}
.guide-band-art img{width:56px;height:56px;object-fit:contain}
.guide-band-text{flex:1;min-width:0}
.guide-band-text b{display:block;font:400 31px/1.1 "Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;color:var(--ink)}
.guide-band-text small{display:block;margin-top:4px;font-size:15px;line-height:1.4;color:var(--ink-2)}
.guide-band-go{flex:none;pointer-events:none}
.guide-band-go svg{margin-right:-4px}
.guide-band-chev{display:none;color:var(--navy)}
@media(max-width:540px){
  .guide-band{gap:13px;padding:14px 12px 14px 12px}
  .guide-band-art{width:56px;height:56px}.guide-band-art img{width:46px;height:46px}
  .guide-band-text b{font-size:27px}.guide-band-text small{font-size:14px}
  .guide-band-go{display:none}.guide-band-chev{display:block}
}

/* The booklet: a sheet of paper on the board, its own scrolling page. */
.scrim.guide-layer{padding:0;align-items:stretch;justify-content:center;background:#0f2a33b8}
.guide-book{position:relative;width:min(860px,100%);height:100dvh;overflow-y:auto;overscroll-behavior:contain;background:var(--board);box-shadow:0 0 90px #0a1f2a90;animation:rise .25s ease both}
.gb-bar{position:sticky;top:0;z-index:3;display:flex;align-items:center;gap:10px;padding:8px 10px 8px 24px;padding-top:calc(var(--top-safe) + 8px);background:color-mix(in srgb,var(--paper) 90%,transparent);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);border-bottom:1px solid var(--paper-edge)}
.gb-bar-title{flex:1;font:700 13px/1.2 var(--body-font);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2)}
.gb-paper{position:relative;width:calc(100% - 48px);max-width:740px;margin:30px auto 48px;padding:0 0 36px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:4px;box-shadow:var(--shadow-lift)}
.gb-paper::before{content:"";position:absolute;top:-10px;left:50%;width:96px;height:20px;margin-left:-48px;background:var(--tape);transform:rotate(-2deg)}
.gb-cover{padding:44px 32px 6px;text-align:center}
.gb-photo{position:relative;max-width:540px;margin:0 auto 26px;padding:10px 10px 12px;background:#fffef8;box-shadow:0 2px 3px #0002,0 14px 30px -16px #0007;transform:rotate(-1.3deg)}
.gb-photo::before,.gb-photo::after{content:"";position:absolute;top:-9px;width:70px;height:20px;background:var(--tape)}
.gb-photo::before{left:-14px;transform:rotate(-32deg)}.gb-photo::after{right:-14px;transform:rotate(32deg)}
.gb-photo img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:1px}
.gb-art{width:128px;height:128px;object-fit:contain;margin:0 auto 6px}
.gb-kicker{margin:0;font:700 12.5px/1 var(--body-font);letter-spacing:.24em;text-transform:uppercase;color:var(--amber)}
.gb-cover h1{margin:10px 0 0;font:400 50px/1.1 "Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;letter-spacing:0;color:var(--ink);overflow-wrap:anywhere}
.gb-sub{margin:8px 0 0;font-size:15px;color:var(--ink-2)}
.gb-welcome{position:relative;margin:26px 40px 4px;padding:20px 26px 22px 30px;font:500 24px/34px "Caveat","Bradley Hand","Segoe Print",cursive;color:var(--ink);white-space:pre-line;overflow-wrap:anywhere;background:color-mix(in srgb,var(--mustard) 8%,var(--paper));background-image:repeating-linear-gradient(to bottom,transparent 0 33px,color-mix(in srgb,var(--navy) 16%,transparent) 33px 34px);background-position:0 18px;border-left:3px solid color-mix(in srgb,var(--red) 45%,transparent);border-radius:2px;box-shadow:var(--shadow-flat)}
.gb-nav{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin:30px 32px 0}
.gb-nav button{padding:8px 14px;min-height:40px;border-radius:999px;font-size:14px;font-weight:700;color:var(--navy);background:var(--blue-soft);border:1px solid var(--paper-edge)}
.gb-nav button:hover{background:var(--manila)}
.gb-sec{margin-top:30px;padding:30px 40px 0;border-top:1px dashed var(--paper-edge)}
.gb-sec-head{display:flex;align-items:center;gap:14px;margin-bottom:10px}
.gb-sec-head img{flex:none;width:62px;height:62px;object-fit:contain}
.gb-sec-head h2{margin:0;font:400 34px/1.15 "Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;letter-spacing:0;color:var(--ink)}
.gb-item{display:grid;grid-template-columns:40px minmax(0,1fr);gap:14px;padding:16px 0;border-bottom:1px solid var(--rule)}
.gb-item:last-child{border-bottom:0}
.gb-ic{width:40px;height:40px;display:grid;place-items:center;border-radius:50%;background:var(--blue-soft);color:var(--navy)}
.gb-ic svg{width:22px;height:22px}
.gb-item h3{margin:9px 0 5px;font:700 12.5px/1.3 var(--body-font);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2)}
.gb-text{font-size:17px;line-height:1.6;color:var(--ink);white-space:pre-line;overflow-wrap:anywhere}
.gb-text a,.gb-doc-body a,.gb-finding a{color:var(--navy);font-weight:600}
.gb-address{font-size:20px;font-weight:700;line-height:1.45}
.gb-maps{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}
.gb-maps .btn{min-height:42px;padding:8px 14px;font-size:14px;text-decoration:none}
.gb-finding{margin-top:14px;padding:10px 14px;font-size:16px;line-height:1.55;white-space:pre-line;overflow-wrap:anywhere;border-left:3px solid var(--mustard);background:color-mix(in srgb,var(--mustard) 9%,transparent);border-radius:0 3px 3px 0}
.gb-finding b{display:block;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--amber);margin-bottom:2px;white-space:normal}
/* An uploaded Word document, set in the booklet's own type. */
.gb-doc.alone{border-top:0;margin-top:14px}
.gb-doc-body{font-size:17px;line-height:1.65;color:var(--ink);overflow-wrap:anywhere}
.gb-doc-body p{margin:0 0 14px}
.gb-doc-body h3,.gb-doc-body h4,.gb-doc-body h5{margin:26px 0 10px;color:var(--ink)}
.gb-doc-body h3{font:400 32px/1.15 "Satisfy","Caveat","Bradley Hand","Segoe Print",cursive}
.gb-doc-body h4{font:700 21px/1.3 var(--display-font);letter-spacing:-.3px}
.gb-doc-body h5{font:700 13px/1.3 var(--body-font);letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2)}
.gb-doc-body>:first-child{margin-top:0}
.gb-doc-body ul,.gb-doc-body ol{margin:0 0 14px;padding-left:26px}
.gb-doc-body li{margin:0 0 6px}.gb-doc-body li.gb-l1{margin-left:22px}.gb-doc-body li.gb-l2{margin-left:44px}.gb-doc-body li.gb-l3{margin-left:66px}
.gb-doc-body ul li::marker{color:var(--amber)}
.gb-doc-img{margin:6px auto 20px;max-width:560px;padding:8px;background:#fffef8;box-shadow:0 2px 3px #0002,0 12px 26px -16px #0006}
.gb-doc-img img{width:100%;height:auto}
.gb-table{overflow-x:auto;margin:0 0 18px}
.gb-table table{width:100%;border-collapse:collapse;font-size:15.5px;line-height:1.5}
.gb-table td{padding:9px 12px;border:1px solid var(--rule);vertical-align:top}
.gb-table tr:first-child td{background:var(--manila);font-weight:700}
/* A PDF: each page as a sheet. */
.gb-doc.is-pdf.alone{padding-top:26px}
.gb-pdfpage{margin:0 0 20px;background:#fff;border:1px solid var(--paper-edge);box-shadow:0 2px 3px #0001,0 14px 28px -18px #0006}
.gb-pdfpage img{width:100%;height:auto}
.gb-end{display:flex;justify-content:center;margin-top:34px;padding:0 24px}
.gb-end .btn{min-width:min(100%,260px)}
@media(max-width:600px){
  .gb-bar{padding-left:18px}
  .gb-paper{width:100%;margin:0;border:0;border-radius:0;box-shadow:none;padding-bottom:calc(env(safe-area-inset-bottom) + 30px)}
  .gb-paper::before{display:none}
  .gb-cover{padding:30px 20px 4px}
  .gb-cover h1{font-size:40px}
  .gb-photo{margin-bottom:22px}
  .gb-art{width:104px;height:104px}
  .gb-welcome{margin:22px 16px 4px;padding:16px 18px 18px 22px;font-size:22px;line-height:31px;background-image:repeating-linear-gradient(to bottom,transparent 0 30px,color-mix(in srgb,var(--navy) 16%,transparent) 30px 31px);background-position:0 15px}
  .gb-nav{margin:24px 16px 0;justify-content:flex-start}
  .gb-sec{padding:26px 20px 0;margin-top:26px}
  .gb-sec-head img{width:52px;height:52px}
  .gb-sec-head h2{font-size:30px}
  .gb-item{grid-template-columns:34px minmax(0,1fr);gap:12px}
  .gb-ic{width:34px;height:34px}.gb-ic svg{width:19px;height:19px}
  .gb-item h3{margin-top:7px}
  .gb-text,.gb-doc-body{font-size:16.5px}
  .gb-maps .btn{flex:1 1 140px;justify-content:center}
  .gb-doc-body h3{font-size:29px}
  .gb-pdfpage{margin-left:-8px;margin-right:-8px}
}

/* The host's side: the Host Plan bar, the list of guides and the form. */
.guide-list{display:flex;flex-direction:column;gap:8px}
.guide-row{display:flex;align-items:center;gap:6px;padding:4px 4px 4px 0;background:var(--surface);border:1px solid var(--paper-edge);border-radius:6px}
.guide-row.on{border-color:var(--navy);background:var(--blue-soft)}
.guide-pick{flex:1;min-width:0;display:flex;align-items:center;gap:12px;padding:12px 14px;text-align:left}
.guide-pick .bubble{border-radius:50%}
.guide-row.on .bubble{background:var(--navy);border-color:var(--navy);color:var(--accent-ink)}
.guide-row-text b{display:block;font-size:16px}
.guide-row-text small{display:block;font-size:13.5px;color:var(--ink-2)}
.guide-form .gf-sec{display:flex;align-items:center;gap:10px;margin:28px 0 14px;padding-top:18px;border-top:1px solid var(--rule);font:700 19px/1.25 var(--display-font);letter-spacing:-.3px}
.guide-form .gf-sec img{width:38px;height:38px;object-fit:contain}
.guide-form .field textarea{min-height:0;resize:vertical}
.guide-form .gf-hint{margin:-3px 0 7px}
.guide-upload{display:flex;flex-direction:column;gap:10px;padding:16px;margin-bottom:6px;border:1px dashed var(--paper-edge);border-radius:6px;background:var(--surface)}
.guide-upload-text b{display:block;font-size:15.5px}
.guide-upload-text span{display:block;font-size:14px;color:var(--ink-2);line-height:1.5;margin-top:3px}
.guide-upload .hint:empty{display:none}
.gf-docrow{display:flex;align-items:center;gap:10px;padding:10px 12px;margin-bottom:9px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:5px}
.gf-docrow span{flex:1;min-width:0}.gf-docrow b{display:block;font-size:15px;overflow-wrap:anywhere}.gf-docrow small{display:block;font-size:13px;color:var(--ink-2)}
.gf-docrow .btn{flex:none;min-height:38px;padding:7px 12px;font-size:14px}
.gf-photo img{width:100%;max-width:360px;aspect-ratio:4/3;object-fit:cover;border-radius:4px;border:1px solid var(--paper-edge);margin-bottom:10px}
.gf-photo-btns{display:flex;flex-wrap:wrap;gap:8px}
.gf-danger{margin-top:26px;padding-top:14px;border-top:1px solid var(--rule)}
.gf-danger:empty{display:none}
.guide-form .gf-who{margin:0 0 18px}

/* ── Wi-Fi on guest links (v1.49.0, js/guide.js) ─────────────── */
.save-band [data-wifi] svg{width:21px;height:21px;stroke-width:1.7}
/* The speaker, in the guest top bar right of the name (v1.50.0). The two
   sides share the space equally, so the name stays centred. */
.guest-app .topbar .brand{order:0}
.guest-app .topbar .tb-side{flex:1 1 0;min-width:0;display:flex;align-items:center}
.guest-app .topbar #soundSlot{justify-content:flex-end}      /* the speaker at the far right (v1.50.1) */
.sound-toggle.in-bar{position:static;width:40px;height:40px;flex:none;box-shadow:none}
.sound-toggle.in-bar svg{width:20px;height:20px}
.wifi-card{display:flex;flex-direction:column;gap:10px}
.wifi-row{display:flex;align-items:center;gap:12px;padding:14px 14px 14px 16px;background:var(--surface);border:1px solid var(--paper-edge);border-radius:7px}
.wifi-row-text{flex:1;min-width:0}
.wifi-label{display:block;font-size:12.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-2)}
.wifi-value{display:block;margin-top:3px;font-size:21px;font-weight:700;line-height:1.3;color:var(--ink);overflow-wrap:anywhere;user-select:all;-webkit-user-select:all}
.wifi-value.hidden-pass{letter-spacing:.18em;color:var(--ink-2);user-select:none;-webkit-user-select:none}
.wifi-value.mono{font-family:ui-monospace,"SF Mono",Menlo,Consolas,monospace;font-size:20px;letter-spacing:.02em}
.wifi-row .btn{flex:none;min-height:42px;padding:8px 14px;font-size:14px}
.wifi-note{padding:10px 14px;font-size:15.5px;line-height:1.55;white-space:pre-line;overflow-wrap:anywhere;border-left:3px solid var(--mustard);background:color-mix(in srgb,var(--mustard) 9%,transparent);border-radius:0 3px 3px 0}
.guide-form .gf-wifi-ic{width:38px;height:38px;display:grid;place-items:center;border-radius:50%;background:var(--blue-soft);color:var(--navy)}
.guide-form .gf-wifi-ic svg{width:22px;height:22px}

/* ── Passwords on guest links (v1.51.0, js/sharing.js) ────────── */
.pass-box{margin-top:14px}
.pass-box .check span b{display:block}.pass-box .check span small{display:block;font-size:13px;color:var(--ink-2);margin-top:2px;line-height:1.45}
.pass-box .pass-field{margin:12px 0 0}
.share-pass{display:flex;align-items:center;gap:10px;margin-top:10px;font-size:14px;color:var(--ink-2)}
.share-pass span{flex:1;min-width:0}.share-pass small{display:block;font-size:12px;letter-spacing:.12em;text-transform:uppercase}
.share-pass b{color:var(--ink);font-size:16px;overflow-wrap:anywhere}
.share-pass .btn{min-height:38px;padding:7px 12px;font-size:14px}
.lock-wrap{display:grid;place-items:center;min-height:60vh;padding:24px 0}
.lock-card{width:min(420px,100%);padding:30px 26px 24px;text-align:center;background:var(--paper);border:1px solid var(--paper-edge);border-radius:var(--radius);box-shadow:var(--shadow-lift);position:relative}
.lock-card::before{content:"";position:absolute;top:-9px;left:50%;width:80px;height:18px;margin-left:-40px;background:var(--tape);transform:rotate(-2deg)}
.lock-ic{display:inline-grid;place-items:center;width:58px;height:58px;border-radius:50%;background:var(--blue-soft);color:var(--navy)}
.lock-ic svg{width:30px;height:30px}
.lock-card h2{margin:14px 0 6px;font:400 32px/1.15 "Satisfy","Caveat",cursive}
.lock-card p{margin:0 0 18px;color:var(--ink-2);font-size:15.5px}
.lock-row{display:flex;gap:8px;margin-bottom:12px}.lock-row input{flex:1;min-width:0;font-size:17px}
.lock-msg{min-height:1.4em;margin:12px 0 0!important;color:var(--amber)!important;font-weight:600}
.rec-tag{display:inline-block;margin-left:6px;padding:1px 7px;border-radius:3px;font:700 12px/1.6 var(--body-font);font-style:normal;letter-spacing:.06em;text-transform:uppercase;vertical-align:2px;background:var(--green-soft);color:var(--moss)}

/* ── The visit's tools in the Host Plan (v1.52.0, js/plan.js) ────
   One grid of small tiles where six full-width bars used to stack: three
   across (two rows), or all in one row on a wide screen (--n is the count). */
.plan-tools{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:18px}
@media(min-width:1100px){.plan-tools{grid-template-columns:repeat(var(--n,6),minmax(0,1fr))}}
.tool-tile{position:relative;display:flex;flex-direction:column;align-items:flex-start;gap:8px;min-width:0;padding:12px 12px 11px;text-align:left;background:var(--paper);border:1px solid var(--paper-edge);border-radius:7px;box-shadow:var(--shadow-flat);transition:background var(--fx),border-color var(--fx)}
.tool-tile:hover{background:var(--manila);border-color:color-mix(in srgb,var(--navy) 35%,var(--paper-edge))}
.tool-ic{flex:none;width:34px;height:34px;display:grid;place-items:center;border-radius:50%;background:var(--blue-soft);color:var(--navy)}
.tool-ic svg{width:19px;height:19px}
/* Papercraft tiles (v1.121.26, the owner's request: the same size to the
   eye). The picture is a square as wide as the tile, so every picture in a
   row is the same size whatever the words under it do. The name may take two
   lines and the status three (Spanish and French on a phone); the tiles in a
   row stretch to the tallest. The files in images/plan-tools/ are fitted by
   tools/fit-plan-tools.py, which trims each to its artwork and sizes them to
   look alike: run new art through it. */
.tool-tile.tool-papercraft{align-items:stretch;justify-content:flex-start;gap:0;padding:6px 6px 10px;border-radius:18px}
.tool-art-papercraft{display:block;flex:none;width:100%;aspect-ratio:1;box-sizing:border-box}
.tool-art-papercraft img{display:block;width:100%;height:100%;object-fit:contain}
.tool-papercraft .tool-text{flex:none;padding:4px 2px 0;text-align:center}
.tool-papercraft .tool-text b,.tool-papercraft .tool-text small{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden;white-space:normal;overflow-wrap:anywhere}
.tool-papercraft .tool-text b{font-size:14.5px;line-height:1.2}
.tool-papercraft .tool-text small{font-size:12.5px;line-height:1.25;-webkit-line-clamp:3}
.tool-text{width:100%;min-width:0}
.tool-text b{display:block;font-size:14.5px;line-height:1.25;color:var(--ink)}
.tool-text small{display:block;margin-top:2px;font-size:12.5px;line-height:1.3;color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tool-tile.has-news{border-color:var(--amber)}
.tool-new{position:absolute;top:-8px;right:8px;padding:1px 7px;border-radius:3px;background:var(--amber);color:var(--accent-ink);font-size:12px;font-weight:700;line-height:1.6}
.tool-papercraft .tool-new{top:5px;right:5px;padding:1px 7px;border-radius:12px;font-size:12px;line-height:1.4}
@media(max-width:1099px){.plan-tools.one-over .tool-tile:last-child{grid-column:1/-1;flex-direction:row;align-items:center;gap:11px}}
/* a papercraft tile left over keeps its size, in the middle column (v1.121.26) */
@media(max-width:1099px){.plan-tools.one-over .tool-tile.tool-papercraft:last-child{grid-column:2;flex-direction:column;align-items:stretch;gap:0}}
@media(max-width:600px){
  .plan-tools{gap:8px;margin-top:14px}
  .tool-tile{gap:7px;padding:10px 10px 9px}
  .tool-ic{width:30px;height:30px}.tool-ic svg{width:17px;height:17px}
  .tool-text b{font-size:13.5px}
  .tool-text small{font-size:12px}
  .tool-tile.tool-papercraft{padding:4px 4px 8px;border-radius:15px}
  .tool-papercraft .tool-text{padding:3px 1px 0}
  .tool-papercraft .tool-text b{font-size:13px}
  .tool-papercraft .tool-text small{font-size:12px}
  .tool-papercraft .tool-new{top:3px;right:3px;padding:0 6px}
}

/* ── A day's heading and add buttons stay put while scrolling (v1.53.0) ──
   Guest links too since v1.59.0 (.guest-app; --day-base there is measured
   by guestStickTops in js/sharing.js, under the Save itinerary band). The day
   card's clipping becomes overflow:clip, which, unlike hidden, lets things
   inside it stick; an older browser keeps hidden and simply doesn't stick.
   --day-base and --dh are measured by dayStickTops (js/plan.js). The button
   row gets the card's paper, with the margin line drawn back in at 17px. */
@supports (overflow:clip){ .days-grid .day,.guest-app .day{overflow:clip} }
.days-grid .day-title,.guest-app .day-title{position:sticky;top:var(--day-base,calc(84px + var(--top-safe)));z-index:8}
.days-grid .day-add{position:sticky;top:calc(var(--day-base,calc(84px + var(--top-safe))) + var(--dh,58px));z-index:7;margin:0 -20px 0 -32px;padding:12px 20px 12px 32px;background:linear-gradient(var(--rule),var(--rule)) 17px 0/1px 100% no-repeat,var(--paper)}

/* ── Guest surveys (v1.54.0, js/survey.js) ───────────────────── */
/* The host's window */
.survey-build .gf-sec{display:flex;align-items:center;gap:8px;margin:20px 0 12px;font:700 18px/1.25 var(--display-font);letter-spacing:-.3px}
.survey-build .gf-sec:first-of-type{margin-top:4px}
.survey-build .gf-sec svg{width:20px;height:20px;color:var(--navy)}
.survey-pick{display:flex;flex-direction:column;gap:8px}
.survey-cand{gap:12px;padding:9px 12px}
.survey-cand .thumb{width:44px;height:44px}
.survey-cand span b{display:block;font-size:15px;line-height:1.3}
.survey-cand span small{display:block;font-size:13px;color:var(--ink-2);margin-top:1px}
.survey-add{display:flex;gap:8px;margin-top:10px}
.survey-add .btn{flex:1 1 0;min-height:42px;font-size:14.5px}
.survey-add .btn svg{width:16px;height:16px}
.survey-state{margin:4px 0 0;font-weight:600}
.survey-close{margin-top:14px}
.survey-results{margin:0 0 12px;padding-left:24px}
.survey-results li{margin:0 0 7px}
.survey-results li::marker{font-weight:700;color:var(--amber)}
.survey-results .sv-name{font-weight:700}
.survey-results small{display:block;font-size:13px;color:var(--ink-2)}
.survey-wish{margin:0 0 8px;padding:9px 12px;font-size:15px;line-height:1.5;border-left:3px solid var(--mustard);background:color-mix(in srgb,var(--mustard) 9%,transparent);border-radius:0 3px 3px 0;overflow-wrap:anywhere}
.survey-wish b{display:block;font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--amber)}
/* In Guest replies */
.reply-rank{margin:6px 0 8px;padding-left:24px;font-size:15px}
.reply-rank li{margin-bottom:3px}
/* The guest's card, under Save itinerary */
.survey-card{position:relative;display:flex;align-items:center;gap:14px;margin:0 0 24px;padding:14px 16px 14px 14px;background:var(--blue-soft);border:1px solid var(--paper-edge);border-radius:var(--radius);box-shadow:var(--shadow-flat)}
.survey-card-art{flex:none;width:60px;height:60px;display:grid;place-items:center;border-radius:50%;background:var(--paper)}
.survey-card-art img{width:48px;height:48px;object-fit:contain}
.survey-card-text{flex:1;min-width:0}
.survey-card-text b{display:block;font:400 27px/1.15 "Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;color:var(--ink)}
.survey-card-text small{display:block;margin-top:3px;font-size:14.5px;line-height:1.4;color:var(--ink-2)}
.survey-card .btn{flex:none}
@media(max-width:540px){
  .survey-card{flex-wrap:wrap;gap:12px;padding:14px 12px}
  .survey-card-art{width:50px;height:50px}.survey-card-art img{width:40px;height:40px}
  .survey-card-text b{font-size:24px}
  .survey-card .btn{flex:1 1 100%}
}
/* The guest's ranking */
.rank-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.rank-row{position:relative;display:flex;align-items:center;gap:11px;padding:8px 6px 8px 10px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:7px;box-shadow:var(--shadow-flat);transition:box-shadow var(--fx)}
.rank-row.dragging{z-index:5;box-shadow:0 12px 26px -10px #0b263080;border-color:var(--navy);transition:none}
.rank-n{flex:none;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;background:var(--navy);color:var(--accent-ink);font-weight:700;font-size:14px}
.rank-row .kind{flex:none;width:52px;height:52px;border-radius:6px;overflow:hidden;display:grid;place-items:center;background:var(--blue-soft)}
.rank-row .kind img{width:100%;height:100%;object-fit:cover}
.rank-row .kind svg{width:30px;height:30px}
.rank-text{flex:1;min-width:0}
.rank-text b{display:block;font-size:15.5px;line-height:1.3;overflow-wrap:anywhere}
.rank-text small{display:block;font-size:13px;color:var(--ink-2)}
.rank-grip{flex:none;width:44px;height:44px;display:grid;place-items:center;border-radius:6px;color:var(--ink-2);cursor:grab;touch-action:none}
.rank-grip:hover{background:var(--manila)}
.rank-row.dragging .rank-grip{cursor:grabbing}
.rank-grip svg{width:22px;height:22px}

/* ── The forecast in a day heading (v1.55.0, js/weather.js) ──────── */
.wx-slot:empty{display:none}
.wx-badge{display:inline-flex;align-items:center;gap:5px;padding:2px 9px 2px 6px;border-radius:999px;background:var(--paper);border:1px solid var(--paper-edge);font:600 14px/1.5 var(--body-font);letter-spacing:0;color:var(--ink);white-space:nowrap;vertical-align:middle}
.wx-badge svg{width:19px;height:19px;color:var(--navy);stroke-width:1.6}
.wx-badge b{font-weight:700}
a.wx-badge{text-decoration:none;cursor:pointer;transition:background var(--fx),border-color var(--fx)}
a.wx-badge:hover{background:var(--blue-soft);border-color:color-mix(in srgb,var(--navy) 35%,var(--paper-edge))}
.wx-badge small{display:inline-flex;align-items:center;gap:1px;margin-left:2px;font-size:13px;font-weight:700;color:var(--navy)}
.wx-badge small svg{width:13px;height:13px}
/* Guest links: the heading is hand-lettered, the badge stays plain. */
.guest-app .day-title{display:flex;flex-wrap:wrap;align-items:center;gap:4px 12px}
.guest-app .day-title .wx-badge{font-size:15px}

/* ── A day hour by hour (v1.55.2, js/weather.js wxDaySheet) ──────
   Chart marks have their own colours, checked with the charting guide's
   palette validator on these surfaces (light #fffef8, dark #233e43): the
   app's own blue and amber read as grey at mark size. Words stay in the
   text colours. */
:root{--wx-temp:#eb6834;--wx-rain:#2a78d6}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){--wx-temp:#e2622e;--wx-rain:#3987e5}}
:root[data-theme="dark"]{--wx-temp:#e2622e;--wx-rain:#3987e5}
button.wx-badge{cursor:pointer;transition:background var(--fx),border-color var(--fx)}
button.wx-badge:hover{background:var(--blue-soft);border-color:color-mix(in srgb,var(--navy) 35%,var(--paper-edge))}
.wx-sum{display:flex;align-items:center;gap:16px;margin:0 0 16px}
.wx-sum-ic{flex:none;width:56px;height:56px;display:grid;place-items:center;border-radius:50%;background:var(--blue-soft);color:var(--navy)}
.wx-sum-ic svg{width:32px;height:32px;stroke-width:1.5}
.wx-sum-nums{display:flex;flex-wrap:wrap;gap:6px 22px}
.wx-sum-nums span{display:flex;flex-direction:column}
.wx-sum-nums b{font:700 26px/1.1 var(--body-font);color:var(--ink)}
.wx-sum-nums small{font-size:12.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}
.wx-chart{min-height:40px}
.wx-plot{position:relative}
.wx-plot svg{display:block;max-width:100%;overflow:visible;outline:none}
.wx-plot svg:focus-visible{outline:3px solid var(--navy);outline-offset:4px;border-radius:4px}
.wx-ttl{font:700 12px var(--body-font);letter-spacing:.08em;text-transform:uppercase;fill:var(--ink-2);paint-order:stroke;stroke:var(--paper);stroke-width:5px;stroke-linejoin:round}
.wx-tick{font:500 12px var(--body-font);fill:var(--ink-3);font-variant-numeric:tabular-nums}
.wx-lbl{font:700 12.5px var(--body-font);fill:var(--ink)}
.wx-grid{stroke:var(--rule);stroke-width:1}
.wx-vgrid{stroke:var(--rule);stroke-width:1;opacity:.75}
.wx-axis{stroke:var(--ink-3);stroke-width:1}
.wx-hr{font:700 13px var(--body-font);fill:var(--ink-2)}
.wx-line{fill:none;stroke:var(--wx-temp);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}
.wx-area{fill:var(--wx-temp);opacity:.1}
.wx-dot,.wx-hot{fill:var(--wx-temp);stroke:var(--paper);stroke-width:2}
.wx-bar{fill:var(--wx-rain)}
.wx-bar.on{opacity:.75}
.wx-cross{stroke:var(--ink-3);stroke-width:1}
.wx-hit{fill:transparent;cursor:crosshair;touch-action:pan-y}
.wx-tip{position:absolute;top:22px;z-index:2;min-width:150px;max-width:220px;padding:8px 11px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:6px;box-shadow:0 8px 22px -10px #0b263070;font-size:13px;pointer-events:none}
.wx-tip-h{font-weight:600;color:var(--ink-2);margin-bottom:4px}
.wx-tip-r{display:flex;align-items:baseline;gap:7px}
.wx-tip-r b{font-size:15px;color:var(--ink)}
.wx-tip-r span{color:var(--ink-2)}
.wx-key{flex:none;width:12px;height:2px;align-self:center;background:var(--ink-3)}
.wx-key.t{background:var(--wx-temp)}.wx-key.p{background:var(--wx-rain)}
.wx-hours-wrap{margin:0 -24px 16px;overflow-x:auto;scrollbar-width:thin}
.wx-hours{display:flex;gap:8px;list-style:none;margin:0;padding:2px 24px 8px}
.wx-hour{flex:none;width:72px;display:flex;flex-direction:column;align-items:center;gap:3px;padding:9px 4px;background:var(--surface);border:1px solid var(--paper-edge);border-radius:7px;text-align:center}
.wx-hour svg{width:24px;height:24px;color:var(--navy)}
.wx-hour b{font-size:16px;color:var(--ink)}
.wx-h-time{font-size:12.5px;font-weight:700;color:var(--ink-2)}
.wx-h-pop{display:inline-flex;align-items:center;gap:1px;font-size:12.5px;font-weight:700;color:var(--ink-2)}
.wx-h-pop svg{width:12px;height:12px}
.wx-hour small{font-size:12px;color:var(--ink-3);line-height:1.2}
.wx-src{margin:12px 0 0}
.wx-src a{font-weight:600}
@media(max-width:540px){.wx-hours-wrap{margin:0 -20px 16px}.wx-hours{padding:2px 20px 8px}.wx-sum-nums b{font-size:23px}}

/* When to leave for the airport (v1.56.0, js/airport.js): a line under a
   flight in the Host Plan, and the sheet it opens. */
.entry.travel .entry-body{min-width:0}
.air-line{display:flex;align-items:flex-start;gap:6px;margin-top:6px;padding:6px 9px;min-height:34px;width:100%;
  text-align:left;font:inherit;font-size:13.5px;font-weight:600;line-height:1.35;color:var(--navy);
  background:var(--manila);border:1px dashed var(--paper-edge);border-radius:5px;cursor:pointer}
.air-line svg.i{width:18px;height:18px;flex:0 0 18px;margin-top:-1px}
.air-line.air-ask{font-weight:500;color:var(--ink-2)}
.air-line.is-bad{color:var(--amber)}
/* A day's map and travel times (v1.67.0, js/routes.js). */
.route-btn{display:flex;width:100%;min-height:38px;margin:0 0 4px;justify-content:center}
.leg-line{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;width:100%;margin:2px 0;padding:3px 8px 3px 14px;
  font:inherit;font-size:13px;font-weight:600;color:var(--ink-2);background:none;border:0;
  border-left:2px dashed var(--paper-edge);cursor:pointer;text-align:left}
.leg-line[hidden]{display:none}
.leg-bit{display:inline-flex;align-items:center;gap:4px}
.leg-bit svg.i{width:17px;height:17px;flex:0 0 17px}
.leg-far{font-weight:400;color:var(--ink-3)}
.leg-none{font-weight:500;color:var(--amber)}
.rt-map{display:flex;align-items:center;justify-content:center;min-height:120px;margin:0 0 12px;overflow:hidden;
  background:var(--manila);border:1px solid var(--paper-edge);border-radius:6px}
.rt-map[hidden]{display:none}
.rt-map img{display:block;width:100%;height:auto}
.rt-list{list-style:none;margin:0 0 10px;padding:0}
.rt-stop{display:flex;gap:10px;align-items:flex-start}
.rt-pin{flex:0 0 26px;height:26px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  font-size:13.5px;font-weight:700;color:#fff;background:#2f4b6e}
.rt-pin.is-home{background:#b5651d}
.rt-name{display:flex;flex-direction:column;min-width:0;line-height:1.35}
.rt-name span{font-size:13.5px;color:var(--ink-2);overflow-wrap:anywhere}
.rt-leg{display:flex;flex-wrap:wrap;align-items:center;gap:4px 10px;margin:4px 0 4px 12px;padding:5px 0 5px 22px;
  font-size:14px;font-weight:600;color:var(--ink-2);border-left:2px dashed var(--paper-edge)}
.rt-go{margin-left:auto;font-size:13.5px}
.rt-on{margin:10px 2px}
.rt-home{display:block;margin:0 0 10px}
.air-goal{font-size:15.5px;line-height:1.5;margin:0 0 8px}
.air-bag{margin:0 0 12px}
.air-card{display:flex;gap:12px;align-items:flex-start;padding:12px 13px;margin:0 0 10px;background:var(--paper);
  border:1px solid var(--paper-edge);border-radius:6px;box-shadow:var(--shadow-flat)}
.air-card > svg.i{width:26px;height:26px;flex:0 0 26px;color:var(--navy);margin-top:2px}
.air-card > div{display:flex;flex-direction:column;gap:3px;min-width:0}
.air-card b{font-size:17px}
.air-card span{font-size:14px;color:var(--ink-2);line-height:1.4}
.air-card .air-mode{font-size:12.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}
.air-card a{font-size:14px;font-weight:600;margin-top:3px}
.air-card.is-none b{font-size:15px}
.air-where{display:flex;flex-direction:column;gap:8px;margin:14px 0 10px;padding:11px 0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule)}
.air-where > div{display:flex;gap:10px;align-items:flex-start;font-size:14.5px;line-height:1.4}
.air-where svg{width:18px;height:18px;flex:0 0 18px;margin-top:2px;color:var(--ink-2)}
.air-where small{display:block;font-size:12.5px;color:var(--ink-2)}
.air-btns{display:flex;flex-direction:column;gap:8px;margin-top:12px}

/* v1.58.0: music from Spotify, Apple Music or YouTube (js/sound.js). The
   link box in the visit form, and the card on a guest link whose player
   only loads when Play here is pressed. */
.music-pick{margin-top:10px}
.music-pick .sound-row input{flex:1;min-width:0}
.music-pick-msg{display:flex;align-items:flex-start;gap:6px;min-height:1.4em;color:var(--ink)}
.music-pick-msg svg{flex:none;width:17px;height:17px;margin-top:1px;color:var(--moss)}
.music-pick-msg.is-bad{color:var(--red)}
.music-frame{position:relative;margin-top:12px;border-radius:12px;background:var(--manila)}
.music-frame::before{content:var(--w-player,"Loading the player…");position:absolute;inset:0;display:grid;place-items:center;font-size:14px;color:var(--ink-2)}
.music-embed{position:relative;display:block;width:100%;border:0;border-radius:12px;background:transparent}
.music-embed.is-short{height:152px}
.music-embed.is-tall{height:352px}
.music-embed.is-apple.is-short{height:175px}
.music-embed.is-apple.is-tall{height:450px}
.music-embed.is-youtube{aspect-ratio:16/9;height:auto;border-radius:6px;background:#000}
.music-card{position:relative;margin:6px 0 22px;padding:12px 14px 14px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:var(--radius);box-shadow:var(--shadow-lift)}
.music-card::before{content:"";position:absolute;top:-9px;right:34px;width:74px;height:18px;background:var(--tape);transform:rotate(3deg)}
.music-card-title{margin:0;font:400 26px/1.15 "Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;color:var(--ink)}
.music-card .music-frame{margin-top:8px}
.music-card .music-embed.is-youtube{max-height:240px}

/* v1.58.4: the three music companies' marks right of the soundtrack title. */
.sound-label-row{display:flex;align-items:center;gap:10px;margin-bottom:7px}
.sound-label-row label{margin:0;font-size:14px;font-weight:700;color:var(--ink)}
.music-logos{display:inline-flex;gap:6px;flex:none}
.music-logos img{display:block;width:22px;height:22px}
/* v1.70.10: the Guest itinerary themes heading in the visit form, and the fold-out
   name and picture for one plan entry in its day-and-time form. */
.themes-head{margin:26px 0 16px;padding-top:18px;border-top:1px solid var(--rule)}
.themes-head h3{margin:0;font:700 19px/1.25 var(--display-font);letter-spacing:-.3px;color:var(--ink)}
.themes-head p{margin:5px 0 0;font-size:14px;line-height:1.45;color:var(--ink-2)}
.ef-own{margin:0 0 18px;border:1px solid var(--rule);border-radius:10px;padding:0 12px}
.ef-own>summary{display:flex;align-items:center;gap:8px;padding:11px 0;cursor:pointer;font-weight:700;font-size:14px;color:var(--navy);list-style:none}
.ef-own>summary::-webkit-details-marker{display:none}
.ef-own>summary svg.i{width:18px;height:18px;flex:none}
.ef-own[open]>summary{margin-bottom:6px}

/* ── The shared photo album and scrapbook (v1.62.0, js/album.js) ─────────
   Strips of small taped photos under a day or an entry, the album card on a
   guest link, the host's album window, one photo large, and the scrapbook:
   cut-paper sheets, photos on white cards held with tape, captions in
   Caveat, headings in Satisfy. */
:root{--hand:"Satisfy","Caveat","Bradley Hand","Segoe Print",cursive;--scrawl:"Caveat","Bradley Hand","Segoe Print",cursive}
.al-slot:empty{display:none}
.al-strip{display:flex;flex-wrap:wrap;gap:9px;margin:6px 0 10px 4px}
.al-mini,.al-more{position:relative;width:60px;height:60px;padding:3px 3px 3px;background:#fffef8;border:0;border-radius:1px;box-shadow:0 1px 2px #0003,0 6px 12px -8px #0006;transform:rotate(-2deg);cursor:zoom-in}
.al-mini:nth-child(2n){transform:rotate(1.6deg)}.al-mini:nth-child(3n){transform:rotate(-.8deg)}
.al-mini::before{content:"";position:absolute;top:-6px;left:50%;width:26px;height:10px;margin-left:-13px;background:var(--tape);transform:rotate(-4deg)}
.al-mini img{display:block;width:100%;height:100%;object-fit:cover}
.al-more{display:grid;place-items:center;font:700 14px/1 var(--body-font);color:var(--ink-2);background:var(--manila)}
.al-mini:focus-visible,.al-more:focus-visible{outline:2px solid var(--navy);outline-offset:2px}
.al-day{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin:12px 0 0}
.al-day .al-strip{margin:4px 0}
.al-day-add{min-height:40px;padding:8px 13px;font-size:14px}
.al-day-add svg{width:20px;height:20px}
/* the album card on a guest link */
.album-card{position:relative;margin:16px 0;padding:16px}
.album-card::before{content:"";position:absolute;top:-9px;right:28px;width:78px;height:18px;background:var(--tape);transform:rotate(3deg)}
.al-card-head{display:flex;gap:12px;align-items:center}
.al-card-head .kind{display:grid;place-items:center;width:46px;height:46px;flex:none;border-radius:50%;background:var(--manila);border:1px solid var(--paper-edge);color:var(--navy)}
.al-card-head .kind svg{width:24px;height:24px}
.al-card-head h2{margin:0;font:400 28px/1.1 var(--hand)}
.al-card-head p{margin:2px 0 0;color:var(--ink-2);font-size:15px}
.al-pile{position:relative;display:block;width:100%;height:150px;margin:14px 0 6px;padding:0;background:none;border:0;cursor:pointer}
.al-pile img{position:absolute;top:10px;left:50%;width:132px;height:112px;margin-left:-66px;object-fit:cover;padding:5px 5px 14px;background:#fffef8;box-shadow:0 2px 3px #0002,0 12px 22px -14px #0007}
.al-pile img:nth-child(1){transform:translateX(-62%) rotate(-7deg)}
.al-pile img:nth-child(2){transform:translateX(52%) rotate(6deg)}
.al-pile img:nth-child(3){transform:translateX(-12%) rotate(-2deg) translateY(6px)}
.al-pile img:nth-child(4){transform:translateX(18%) rotate(3deg) translateY(-4px)}
.al-card-acts{display:flex;flex-wrap:wrap;gap:9px;margin-top:10px}
.al-card-acts .btn{flex:1 1 180px;justify-content:center}
.al-privacy{margin:8px 0 0}
/* the host's album window */
.al-top{display:flex;flex-wrap:wrap;gap:9px;margin-bottom:6px}
.al-top .btn{flex:1 1 160px;justify-content:center}
.al-sec h3{margin:18px 0 8px;font:700 13px/1.3 var(--body-font);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2)}
.al-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:10px}
.al-tile{position:relative;aspect-ratio:1;padding:4px;background:#fffef8;border:1px solid var(--paper-edge);border-radius:2px;box-shadow:var(--shadow-flat);overflow:hidden;cursor:pointer}
.al-tile img{width:100%;height:100%;object-fit:cover;display:block}
.al-from{position:absolute;left:6px;bottom:6px;max-width:calc(100% - 12px);padding:2px 6px;border-radius:3px;background:#0f2a33cc;color:#fff;font:700 12px/1.4 var(--body-font);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.al-tcap{position:absolute;left:6px;right:6px;top:6px;padding:1px 5px;border-radius:3px;background:#fffef8e6;color:#203d42;font:600 15px/1.2 var(--scrawl);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.al-empty{display:flex;gap:12px;align-items:center;margin:14px 0 4px;padding:14px;border:1px dashed var(--paper-edge);border-radius:6px;color:var(--ink-2)}
.al-empty svg{width:30px;height:30px;flex:none;color:var(--navy)}.al-empty p{margin:0}
.al-pick{display:grid;gap:10px;margin-bottom:14px}
.al-pick-row{display:flex;gap:11px;align-items:center}
.al-pick-row img{width:64px;height:64px;flex:none;object-fit:cover;padding:3px;background:#fffef8;box-shadow:0 1px 3px #0003;transform:rotate(-2deg)}
.al-pick-row:nth-child(2n) img{transform:rotate(2deg)}
.al-pick-row input{flex:1;min-width:0}
.al-edit-ph{margin:0 auto 14px;max-width:360px;padding:8px 8px 10px;background:#fffef8;box-shadow:0 2px 3px #0002,0 12px 24px -14px #0007;transform:rotate(-1deg)}
.al-edit-ph img{display:block;width:100%;max-height:300px;object-fit:contain}
.al-entry .btn{margin-top:4px}
/* hosting mode: the album large, the other tiles folded (v1.64.0) */
.tools-hosting{display:flex;flex-direction:column;gap:10px;margin-top:16px}
.tools-hosting .plan-tools{margin-top:0}
.tools-hosting .plan-tools[hidden]{display:none}
.tool-tile.tool-hero{flex-direction:row;align-items:center;gap:14px;width:100%;min-height:84px;padding:14px 16px;background:var(--navy);border-color:var(--navy)}
.tool-tile.tool-hero:hover{background:color-mix(in srgb,var(--navy) 88%,var(--ink));border-color:var(--navy)}
.tool-hero .tool-ic{width:48px;height:48px;background:var(--accent-ink);color:var(--navy)}
.tool-hero .tool-ic svg{width:26px;height:26px}
.tool-hero .tool-art-hero{flex:none;width:64px;height:64px;padding:3px;border-radius:12px;background:var(--accent-ink)}
.tool-hero .tool-text{flex:1;width:auto}
.tool-hero .tool-text b{font:800 20px/1.2 var(--display-font);color:var(--accent-ink)}
.tool-hero .tool-text small{font-size:14px;color:var(--accent-ink);opacity:.85;white-space:normal}
.tool-pile{flex:none;display:flex;padding-right:4px}
.tool-pile img{width:50px;height:50px;object-fit:cover;background:#fffef8;border:3px solid #fffef8;box-shadow:0 2px 5px #0005;transform:rotate(-4deg)}
.tool-pile img+img{margin-left:-24px;transform:rotate(3deg)}
.tool-pile img:nth-child(3){transform:rotate(-1deg)}
.tools-more{position:relative;display:flex;align-items:center;gap:8px;width:100%;min-height:44px;padding:9px 14px;font-size:14.5px;font-weight:700;color:var(--ink);text-align:left;background:var(--paper);border:1px solid var(--paper-edge);border-radius:7px}
.tools-more:hover{background:var(--manila)}
.tools-more>span:first-child{flex:1;min-width:0}
.tools-more .tool-new{position:static}
.tools-more svg{flex:none;width:18px;height:18px;transition:transform .15s}
.tools-more[aria-expanded="true"] svg{transform:rotate(90deg)}
@media(max-width:600px){
  .tool-tile.tool-hero{gap:11px;min-height:74px;padding:12px}
  .tool-hero .tool-ic{width:42px;height:42px}
  .tool-hero .tool-text b{font-size:18px}
  .tool-hero .tool-text small{font-size:13px}
  .tool-pile img{width:42px;height:42px}
}
/* the camera beside a planned thing (v1.63.0) */
.entry-cam{min-width:44px;width:44px;height:44px}
.entry-cam svg{width:23px;height:23px}
.al-cam-row{position:relative}
.al-cam-row>.entry-cam{position:absolute;top:4px;right:4px;z-index:1}
.al-cam-row>.entry .entry-title{padding-right:40px}
.entry.has-cam{position:relative}
.entry.has-cam .entry-acts{position:absolute;top:4px;right:4px;z-index:1}
.entry.has-cam .entry-title{padding-right:40px}
.swipe+.al-slot .al-strip{margin:8px 0 12px 4px}
/* one photo, large */
.scrim.al-layer{background:#0b1e25e6}
.al-light{position:relative;display:flex;flex-direction:column;align-items:center;gap:12px;width:min(920px,100%);max-height:calc(100dvh - 40px)}
.al-x{position:absolute;top:-6px;right:-6px;z-index:2;background:var(--paper)}
.al-big{margin:0;padding:10px 10px 14px;background:#fffef8;box-shadow:0 20px 60px -20px #000c;max-width:100%;transform:rotate(-.6deg)}
.al-big img{display:block;max-width:100%;max-height:calc(100dvh - 300px);margin:0 auto;object-fit:contain}
.al-big figcaption{display:flex;flex-direction:column;align-items:center;gap:1px;padding-top:8px;text-align:center;color:#203d42}
.al-cap{font:400 24px/1.2 var(--scrawl)}.al-cap:empty{display:none}
.al-by{font:700 12.5px/1.4 var(--body-font);color:#53676a}
.al-where{font:400 12.5px/1.4 var(--body-font);color:#53676a}.al-where:empty{display:none}
.al-nav{display:flex;align-items:center;gap:12px;color:#fff}
.al-nav .btn{background:var(--paper)}
.al-count{min-width:60px;text-align:center;font-weight:700}
.al-acts:empty{display:none}.al-acts .btn{background:var(--paper)}
/* the goodbye window's photos */
.gb-photos{display:flex;align-items:center;gap:12px;margin:2px 0 14px;padding:12px;border:1px dashed var(--paper-edge);border-radius:6px;background:var(--manila)}
.gb-photos>.kind{display:grid;place-items:center;width:44px;height:44px;flex:none;color:var(--navy)}
.gb-photo-pile{position:relative;width:64px;height:54px;flex:none}
.gb-photo-pile img{position:absolute;top:4px;left:8px;width:46px;height:42px;object-fit:cover;padding:2px;background:#fffef8;box-shadow:0 1px 3px #0004}
.gb-photo-pile img:nth-child(1){transform:rotate(-8deg) translateX(-6px)}.gb-photo-pile img:nth-child(2){transform:rotate(6deg) translateX(6px)}
.gb-photo-text{flex:1;min-width:0}.gb-photo-text b{display:block}.gb-photo-text small{display:block;color:var(--ink-2);font-size:13.5px;line-height:1.4}
.goodbye-acts .btn svg{width:20px;height:20px}
/* the scrapbook */
.scrap-book{background:#e9dfcc}
:root[data-theme="dark"] .scrap-book{background:#2b2a24}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) .scrap-book{background:#2b2a24}}
.sb-bar .btn{min-height:38px;padding:7px 12px;font-size:14px}
.sb-paper{position:relative;width:calc(100% - 32px);max-width:780px;margin:28px auto 36px;padding:34px 30px 30px;background:#f6f0e2;color:#203d42;border-radius:3px;box-shadow:0 2px 0 #d8cdb4,0 22px 50px -26px #0009;
  background-image:radial-gradient(#00000008 1px,transparent 1px);background-size:5px 5px}
.sb-paper::before{content:"";position:absolute;top:-11px;left:50%;width:110px;height:22px;margin-left:-55px;background:rgba(238,214,148,.8);transform:rotate(-2deg)}
.sb-cover{text-align:center;margin-bottom:22px}
.sb-kicker{margin:0;font:700 12.5px/1.3 var(--body-font);letter-spacing:.2em;text-transform:uppercase;color:#93541f}
.sb-cover h1{margin:6px 0 4px;font:400 clamp(38px,8vw,58px)/1.1 var(--hand);color:#203d42}
.sb-sub{margin:0;font:700 15px/1.4 var(--body-font);color:#53676a}
.sb-note{position:relative;max-width:520px;margin:20px auto 0;padding:16px 22px 14px;background:#fffef8;box-shadow:0 2px 3px #0002;transform:rotate(-.8deg);
  font:400 24px/30px var(--scrawl);color:#203d42;white-space:pre-line;background-image:repeating-linear-gradient(transparent 0 29px,#dce1d9 29px 30px);background-position:0 12px}
.sb-note::before{content:"";position:absolute;top:-9px;left:50%;width:84px;height:18px;margin-left:-42px;background:rgba(238,214,148,.8);transform:rotate(2deg)}
.sb-day{margin-top:34px;padding-top:18px;border-top:2px dashed #d8cdb4}
.sb-day h2{display:flex;flex-direction:column;margin:0;font:400 34px/1.15 var(--hand);color:#203d42}
.sb-dayn{font:700 12.5px/1.3 var(--body-font);letter-spacing:.18em;text-transform:uppercase;color:#93541f;margin-bottom:2px}
.sb-daytitle{margin:2px 0 0;font:400 24px/1.25 var(--scrawl);color:#53676a}
.sb-entry{margin-top:20px}
.sb-tag{display:inline-flex;flex-direction:column;padding:6px 16px 6px 22px;background:#fffef8;border:1px solid #d4dcd5;clip-path:polygon(0 0,100% 0,100% 100%,0 100%,9px 50%);font:700 15px/1.3 var(--body-font);color:#25677d}
.sb-tag small{font:700 12px/1.3 var(--body-font);letter-spacing:.14em;text-transform:uppercase;color:#93541f}
.sb-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:26px 22px;margin-top:18px;align-items:start}
@media(min-width:720px){.sb-grid{grid-template-columns:repeat(3,minmax(0,1fr))}}
.sb-ph{position:relative;margin:0;padding:8px 8px 10px;background:#fffef8;box-shadow:0 2px 3px #0002,0 14px 26px -16px #0008;transform:rotate(-1.6deg);break-inside:avoid}
.sb-ph:nth-child(2n){transform:rotate(1.4deg)}.sb-ph:nth-child(3n){transform:rotate(-.5deg)}.sb-ph:nth-child(5n){transform:rotate(2.2deg)}
.sb-ph::before{content:"";position:absolute;top:-9px;left:50%;width:64px;height:18px;margin-left:-32px;background:rgba(238,214,148,.82);transform:rotate(-3deg)}
.sb-ph:nth-child(2n)::before{transform:rotate(4deg)}
.sb-ph img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:#e3dccd}
.sb-ph figcaption{display:flex;flex-direction:column;align-items:center;padding-top:6px;text-align:center}
.sb-cap{font:400 21px/1.15 var(--scrawl);color:#203d42;overflow-wrap:anywhere}
.sb-by{font:700 12px/1.4 var(--body-font);color:#53676a}
.sb-by::before{content:"— "}
.sb-empty{text-align:center;color:#53676a}
.sb-foot{margin:30px 0 0;text-align:center;font:700 12px/1 var(--body-font);letter-spacing:.18em;text-transform:uppercase;color:#93541f99}
@media(max-width:520px){.sb-paper{padding:28px 16px 22px}.sb-grid{gap:20px 14px}.sb-cap{font-size:19px}}
/* Print (computers): only the scrapbook, on plain pages. */
@media print{
  body.scrap-printing{background:#fff}
  body.scrap-printing #app,body.scrap-printing #fabHost,body.scrap-printing .toast,body.scrap-printing .scrim:not(.scrap-layer){display:none!important}
  body.scrap-printing .scrim.scrap-layer{position:static;display:block;padding:0;background:none}
  body.scrap-printing .scrap-book{position:static;height:auto;overflow:visible;box-shadow:none;width:100%;background:#fff;animation:none}
  body.scrap-printing .sb-bar,body.scrap-printing .scrap-book .gb-end{display:none}
  body.scrap-printing .sb-paper{margin:0 auto;box-shadow:none;width:100%;max-width:none}
  body.scrap-printing .sb-grid{grid-template-columns:repeat(3,minmax(0,1fr))}
  body.scrap-printing .sb-day{break-before:auto}
  body.scrap-printing .sb-day h2{break-after:avoid}
}
/* Eight tiles (with the album) sit in two rows of four on a wide screen. */
@media(min-width:1100px){.plan-tools.many{grid-template-columns:repeat(4,minmax(0,1fr))}}

/* Day templates (v1.65.0): the line under a day's add buttons, the card under
   Ideas (folded above the days on a phone), and Undo on the toast. */
/* One row at the top of a day (v1.67.1, equal sizes v1.67.2). Four buttons of
   one size at every width. Under 470px wide each is a tile with its icon over
   its word; wider, the icon sits beside the word; wide enough, the three add
   buttons say their full names. Ideas shares .day-add and has no .has-tools,
   so it stays as it was. */
.daytitle{padding:6px 8px;margin:0 0 2px}
/* A phone's day card has narrower sides than the row's margins assumed, which
   pushed the row past the card and the page sideways. */
@media(max-width:540px){ .days-grid .day-add{margin:0 -14px 0 -24px;padding-left:24px;padding-right:14px;background-position:11px 0,0 0} }
.days-grid .day-add.has-tools{padding-top:8px;padding-bottom:8px}
.day-add.has-tools{gap:6px}
.day-tpl{display:block;margin:6px 0 0 auto;font-size:13.5px}
.day-add.has-tools .day-add-btn{flex:1 1 0;min-width:0;flex-direction:column;gap:3px;min-height:52px;padding:6px 1px;font-size:12px;line-height:1.15;letter-spacing:0}
.day-add.has-tools .day-add-btn svg{width:18px;height:18px}
@container (max-width: 469px){ .day-add.has-tools .add-long{display:none} .day-add.has-tools .add-short{display:inline} }
@container (min-width: 470px){
  .day-add.has-tools .add-long{display:none}
  .day-add.has-tools .add-short{display:inline}
  .day-add.has-tools .day-add-btn{flex-direction:row;gap:5px;min-height:40px;padding:8px 4px;font-size:13.5px}
}
@container (min-width: 600px){
  .day-add.has-tools .add-long{display:inline}
  .day-add.has-tools .add-short{display:none}
}
.plan-side .tpl-card{margin-top:14px}
.tpl-card{padding-bottom:14px}
.tpl-card>summary{cursor:pointer;list-style:none;margin:0;padding:0;gap:8px}
.tpl-card>summary::-webkit-details-marker{display:none}
.tpl-card>summary .count{margin-left:auto}
.tpl-card>summary svg{width:16px;height:16px;flex:none;transition:rotate .15s}
.tpl-card[open]>summary{margin-bottom:10px}
.tpl-card[open]>summary svg{rotate:90deg}
.tpl-row{padding-right:4px}
.tpl-add{padding:8px 0 4px;border-bottom:0}
#tpparts .slot.part.is-empty{padding-bottom:10px}
.toast-act{margin-left:14px;padding:4px 0;font:inherit;font-weight:700;color:inherit;text-decoration:underline;text-underline-offset:3px;background:none;border:0;cursor:pointer}
.ps-steps{margin:0;padding:0;list-style:none;display:grid;gap:14px}
.ps-steps>li{display:grid;gap:8px}
.ps-steps b{color:var(--ink)}
.ps-steps p{margin:0;font-size:15px;line-height:1.5;color:var(--ink-2)}
.ps-sec{margin:0 0 16px}
.ps-sec h3{margin:0 0 6px;font-size:15px;font-weight:700;color:var(--ink)}
.ps-sec.ps-warn h3{color:var(--amber)}
.ps-list{margin:0;padding:0;list-style:none;display:grid;gap:7px}
.ps-list li{padding:8px 10px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:6px;font-size:15px;line-height:1.4;color:var(--ink);overflow-wrap:anywhere}
.ps-list small{display:block;font-size:14px;color:var(--ink-2)}
.ps-alert{margin:0 0 14px;padding:10px 12px;border-left:3px solid var(--mustard);background:var(--manila);border-radius:4px;font-size:15px;line-height:1.45;color:var(--ink)}

/* Homes (v1.68.0, js/homes.js): a row is the home, with its guide under it. */
.home-row{flex-wrap:wrap;padding:0;gap:0}
.home-row .guide-pick{padding:11px 12px 9px 14px}
.home-row .guide-row-text{flex:1;min-width:0;overflow-wrap:anywhere}
/* The house's photo beside a home (v1.108.0). */
.home-photo{flex:0 0 auto;width:56px;height:56px;border-radius:6px;overflow:hidden;background:var(--manila);border:1px solid var(--paper-edge)}
.home-photo img{display:block;width:100%;height:100%;object-fit:cover}
.home-pencil{flex:0 0 auto;color:var(--ink-2)}
.home-pencil svg{width:20px;height:20px}
.home-tag{margin-left:6px;padding:1px 7px;font-size:12px;font-weight:600;color:var(--ink-2);background:var(--blue-soft);border-radius:999px;vertical-align:1px}
.home-guide{flex:1 0 100%;display:flex;align-items:center;gap:10px;min-height:44px;padding:8px 14px;text-align:left;border-top:1px solid var(--rule)}
.home-guide svg{width:20px;height:20px;flex:0 0 20px;color:var(--ink-2)}
.home-guide b{display:block;font-size:14.5px}
.home-guide small{display:block;font-size:13px;color:var(--ink-2)}
.home-main-tick{display:flex;align-items:flex-start;gap:10px;margin:2px 0 12px;font-size:15px;cursor:pointer}
.home-main-tick input{width:20px;height:20px;margin:2px 0 0;flex:0 0 20px}
.home-main-tick small{display:block;font-size:13.5px;color:var(--ink-2)}

/* Importing a Google Maps list (v1.69.0) */
.gmi-names{min-height:190px;line-height:1.5}
.gmi-lists{display:grid;gap:8px;margin-bottom:14px}
.gmi-lists small{color:var(--ink-3);font-size:13px;margin-left:4px}
.gmi-bar{display:block;width:100%;height:12px;accent-color:var(--navy)}
.gmi-row{padding:12px;margin-bottom:8px;background:var(--manila);border:1px solid var(--paper-edge);border-radius:6px}
.gmi-tick{display:flex;align-items:flex-start;gap:12px;cursor:pointer}
.gmi-tick input{flex:none;width:20px;height:20px;margin-top:2px;accent-color:var(--navy)}
.gmi-tick .row-body{min-width:0}
/* Updating places from Google (v1.114.0, js/placeupdate.js) */
.gmi-row>.row-body{display:block;min-width:0}
.gmi-row .row-sub s{color:var(--ink-3)}
.gmi-row .row-sub b{font-weight:700}
.linkbtn.pu-one{display:flex;align-items:center;gap:6px;margin:12px 0 4px;padding:6px 0}
.linkbtn.pu-one svg{width:18px;height:18px}
.pu-when{margin:12px 0 4px}
.gmi-addr{font-size:13px;color:var(--ink-3)}
.gmi-kind{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 0 32px}
.gmi-kind .chip{min-height:44px}
.sheet-foot:has(.gmi-all){position:sticky;bottom:0;flex-wrap:wrap;background:var(--paper);border-top:1px solid var(--rule);padding-bottom:12px}
.sheet-foot .gmi-all{flex:1 0 100%;margin:0;text-align:left}
.gmi-link{margin-top:16px}
.sheet-foot:has(.gmi-link){flex-wrap:wrap}
.sheet-foot .gmi-link{flex:1 0 100%;margin:2px 0 0;text-align:center}

/* Notifications (v1.69.4): one heading per subject. Each tick box and its
   words share one line, centred on each other; whatever explains a row lines
   up under its words. These rows stay out of .field, whose label rule would
   turn .check back into a block and drop the words to the box's baseline. */
.notify-group{--notify-indent:53px;margin-bottom:20px}
.notify-group h3{font:700 14px/1.3 var(--body-font);color:var(--ink);margin:0 0 7px}
.notify-group>.check{min-height:48px;padding:0 13px;margin:0 0 8px;line-height:1.25}
.notify-group>.hint{margin:0 0 10px var(--notify-indent)}
.notify-group>.hint:empty{display:none}
.notify-group>.booking-days,.notify-group>.rain-opts{margin:0 0 10px var(--notify-indent)}
.notify-group>.notify-foot{margin:2px 0 0}
.rain-opt{display:flex;align-items:center;justify-content:space-between;gap:12px;font-size:15px;color:var(--ink-2)}
.rain-opt+.rain-opt{margin-top:8px}
.rain-opt label{white-space:nowrap}
.rain-opt select{width:108px;flex:none;min-height:40px}
@media(max-width:350px){.notify-group>.rain-opts{margin-left:14px}}

/* Guest link themes (v1.70.0, js/backdrops.js). The same four layers sit behind
   the envelope (.bd-inv) and, held still, behind the itinerary (.bd-page). The
   page gains room at its head and foot so the scene shows on a phone too, where
   the cards nearly fill the width. */
.bd,.bd-sky,.bd-scatter,.bd-foot,.bd-top{position:absolute;display:block}
.bd,.bd-sky,.bd-scatter{inset:0}
.bd{overflow:hidden;pointer-events:none}
.bd-page{position:fixed;inset:0 0 auto;height:100lvh;z-index:-1}
.bd-inv{animation:inv-in .4s ease both}
.bd-sky{background:linear-gradient(180deg,var(--bd-1),var(--bd-2) 55%,var(--bd-3))}
.bd-sky::after{content:"";position:absolute;inset:0;background:#0b1c22;opacity:var(--bd-veil,0)}
.bd-scatter{background:var(--bd-tile) 0 0/360px,var(--bd-tile) 130px 210px/510px;opacity:var(--bd-sprinkle,.3)}
.bd-foot{left:0;right:0;bottom:0;height:max(clamp(230px,38vh,430px),32.5vw);background:var(--bd-scene) center bottom/cover no-repeat;filter:brightness(var(--bd-dim,1))}
.bd-top{left:0;right:0;top:0;height:clamp(96px,18.33vw,330px);background:var(--bd-hang) center top/cover no-repeat;filter:brightness(var(--bd-dim,1));transform-origin:50% 0}
.bd-page .bd-top{top:var(--guest-bar,84px)}
.bd-inv .bd-top{top:var(--top-safe)}
.invite:not(.is-still) .bd-scatter{animation:inv-drift 16s ease-in-out infinite alternate}
.invite:not(.is-still) .bd-top{animation:inv-sway 6s ease-in-out infinite alternate}
[data-backdrop] .guest-app{background:none;box-shadow:none}
[data-backdrop] .guest-app main{padding-top:clamp(92px,10.5vw,158px)!important;padding-bottom:calc(clamp(230px,38vh,430px)*.82)!important}
[data-backdrop] .inv-hint{padding:4px 13px;border-radius:8px;background:#fffdf6e8;color:#2c464c;box-shadow:0 1px 4px #10262c40}
[data-backdrop] .sound-credit,[data-backdrop] .photo-credit,[data-backdrop] .legal-foot{width:fit-content;max-width:100%;margin-left:auto;margin-right:auto;padding:6px 14px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:9px;box-shadow:var(--shadow-flat)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){--bd-veil:.5;--bd-dim:.74}}
:root[data-theme="dark"]{--bd-veil:.5;--bd-dim:.74}
@media print{.bd{display:none}}

/* The SVG layers above belonged to the former synthetic scenery.
   These guest themes use one shared, tactile papercraft scene per theme;
   show it as an all-over scene in the envelope and behind the itinerary. */
.bd-page .bd-scatter,.bd-page .bd-top,.bd-inv .bd-scatter,.bd-inv .bd-top,.bd-mini .bd-scatter,.bd-mini .bd-top{display:none}
.bd-page .bd-foot,.bd-inv .bd-foot{inset:0;width:100%;height:100%;background-position:center;background-size:cover}
.bd-page .bd-foot::after,.bd-inv .bd-foot::after{content:"";position:absolute;inset:0;pointer-events:none;background:linear-gradient(180deg,color-mix(in srgb,var(--paper) 18%,transparent),transparent 28%,color-mix(in srgb,var(--paper) 22%,transparent) 52%,transparent 76%,color-mix(in srgb,var(--paper) 18%,transparent))}

[data-backdrop="beach"]{--bd-1:#c9ecea;--bd-2:#fdf1d6;--bd-3:#fbdcb8;
 --bd-scene:url(../images/backdrops/beach-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="city"]{--bd-1:#33486e;--bd-2:#8d7ea6;--bd-3:#f2b78e;
 --bd-scene:url(../images/backdrops/city-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="nature"]{--bd-1:#dceee3;--bd-2:#f4f3dd;--bd-3:#fbe6c3;
 --bd-scene:url(../images/backdrops/nature-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="party"]{--bd-1:#fbe5dd;--bd-2:#f1e4f3;--bd-3:#dbeef2;
 --bd-scene:url(../images/backdrops/party-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="holidays"]{--bd-1:#17344a;--bd-2:#2d5b6b;--bd-3:#a9c9d2;
 --bd-scene:url(../images/backdrops/holidays-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="thanksgiving"]{--bd-1:#f8e3bd;--bd-2:#f7cf9a;--bd-3:#efb37a;
 --bd-scene:url(../images/backdrops/thanksgiving-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="relaxingVisit"]{--bd-1:#dbe9df;--bd-2:#f2e8d5;--bd-3:#dfc7ad;
 --bd-scene:url(../images/backdrops/relaxing-visit-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="lakeGetaway"]{--bd-1:#b8d8df;--bd-2:#d9e6df;--bd-3:#9fc9cb;
 --bd-scene:url(../images/backdrops/lake-getaway-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="catchingUp"]{--bd-1:#54445d;--bd-2:#9f6f65;--bd-3:#e4b77f;
 --bd-scene:url(../images/backdrops/catching-up-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="newBaby"]{--bd-1:#dfe9de;--bd-2:#f6eddb;--bd-3:#edd4d0;
 --bd-scene:url(../images/backdrops/new-baby-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="wedding"]{--bd-1:#dce7df;--bd-2:#f3e4d9;--bd-3:#eac9c2;
 --bd-scene:url(../images/backdrops/wedding-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="familyReunion"]{--bd-1:#dceee3;--bd-2:#f4f1dc;--bd-3:#c9dba8;
 --bd-scene:url(../images/backdrops/family-reunion-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="graduation"]{--bd-1:#243858;--bd-2:#a68453;--bd-3:#e5c987;
 --bd-scene:url(../images/backdrops/graduation-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="julyCanada"]{--bd-1:#182f53;--bd-2:#a84945;--bd-3:#e7c8a4;
 --bd-scene:url(../images/backdrops/fourth-july-canada-day-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="snowWeekend"]{--bd-1:#91b1c4;--bd-2:#dfe8e9;--bd-3:#f4e7d3;
 --bd-scene:url(../images/backdrops/snow-weekend-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="hikingTrip"]{--bd-1:#617d6b;--bd-2:#c8d5bd;--bd-3:#e5ddc5;
 --bd-scene:url(../images/backdrops/hiking-trip-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="easterSpring"]{--bd-1:#c9e7ec;--bd-2:#f4e8df;--bd-3:#dcebd1;
 --bd-scene:url(../images/backdrops/easter-spring-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="hanukkah"]{--bd-1:#17294f;--bd-2:#254d83;--bd-3:#d3b66c;
 --bd-scene:url(../images/backdrops/hanukkah-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="eid"]{--bd-1:#0b4248;--bd-2:#176d70;--bd-3:#d6ad69;
 --bd-scene:url(../images/backdrops/eid-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="diwali"]{--bd-1:#8f263e;--bd-2:#da6e2e;--bd-3:#f1c45d;
 --bd-scene:url(../images/backdrops/diwali-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="lunarNewYear"]{--bd-1:#8d1d28;--bd-2:#c23c32;--bd-3:#e9c277;
 --bd-scene:url(../images/backdrops/lunar-new-year-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}
[data-backdrop="newYearsEve"]{--bd-1:#111f3a;--bd-2:#254b69;--bd-3:#caa15b;
 --bd-scene:url(../images/backdrops/new-years-eve-scene.jpg);--bd-hang:var(--bd-scene);--bd-tile:none;--bd-sprinkle:0}

.bd-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:4px}
.bd-choice{min-width:0;padding:5px;text-align:left;border:1px solid var(--paper-edge);border-radius:7px;background:var(--paper);color:var(--ink);cursor:pointer;--bd-dim:1;--bd-veil:0}
.bd-choice[aria-pressed="true"]{border-color:var(--navy);box-shadow:inset 0 0 0 2px var(--navy);background:var(--blue-soft)}
.bd-choice:focus-visible{outline:3px solid var(--navy);outline-offset:2px}
.bd-mini{position:relative;display:block;aspect-ratio:4/3;overflow:hidden;border-radius:4px;background:linear-gradient(165deg,#f3e4d6,#eef0e6 52%,#dfe9ea)}
.bd-mini .bd-sky{display:none}.bd-mini .bd-foot{inset:0;height:auto;background-position:center;background-size:cover}
.bd-mini i{position:absolute;left:50%;top:40%;width:42%;aspect-ratio:3/2;translate:-50% -50%;border-radius:2px;background:linear-gradient(0deg,var(--env-c,#fffefb),var(--env-b,#f6f3ec));box-shadow:0 2px 5px #1b2a3055}
.bd-mini i::before{content:"";position:absolute;inset:0 0 34%;background:var(--env-a,#ebe6dc);clip-path:polygon(0 0,100% 0,50% 100%)}
.bd-mini i::after{content:"";position:absolute;left:50%;top:66%;width:22%;aspect-ratio:1;translate:-50% -50%;border-radius:50%;background:var(--env-seal-2,#9b4322)}
.bd-name{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:3;min-height:3.6em;padding:5px 2px 1px;font-size:12px;line-height:1.2;white-space:normal;overflow:hidden}
.bd-preview{margin-top:10px}
@media(max-width:540px){.bd-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}}

/* Book reservation on a plan card (v1.71.1): its own row under the card, lined
   up with the text. The left padding is the card's tick box, the picture and
   their gaps, so it changes with the picture size. */
.entry.has-book{flex-wrap:wrap}
.entry.has-book .entry-open{flex:1 1 0}
.entry-book{order:3;flex:0 0 100%;display:flex;padding:2px 0 6px calc(24px + 8px + 88px + 10px)}
.plan-cols.hosting .entry-book{padding-left:calc(88px + 10px)}
.book-btn{min-height:40px;padding:6px 14px;font-size:14.5px;gap:7px;text-decoration:none}
.book-btn svg{width:18px;height:18px}
.entry-book{flex-wrap:wrap;align-items:center;gap:6px 12px}
.book-tick{display:inline-flex;align-items:center;gap:6px;min-height:40px;font-size:14.5px;color:var(--ink-2);cursor:pointer}
.book-tick input{width:19px;height:19px;margin:0;accent-color:var(--navy);cursor:pointer}
/* On a phone the button and its tick box only fit side by side if the row
   starts at the picture's left edge instead of under the text. */
@media (max-width:640px){
  .entry-book{padding-left:calc(24px + 8px)}
  .plan-cols.hosting .entry-book{padding-left:0}
}
@media (max-width:370px){.entry-book{padding-left:0}}

/* v1.74.0: ticking things off. tickDone holds the row for a moment so the
   check and the pencil line can be seen being drawn. */
.todo.ticking .todo-text{text-decoration:none;color:var(--ink-3)}
.todo.ticking .tick-words{background:linear-gradient(currentColor,currentColor) no-repeat 0 58%/100% 1.5px;-webkit-box-decoration-break:clone;box-decoration-break:clone;animation:tick-strike .24s ease-out .05s both}
.todo.ticking .bubble{animation:tick-pop .3s cubic-bezier(.3,1.6,.5,1)}
.todo.ticking .bubble svg{stroke-dasharray:34;animation:tick-draw .22s ease-out both}
@keyframes tick-strike{from{background-size:0 1.5px}to{background-size:100% 1.5px}}
@keyframes tick-draw{from{stroke-dashoffset:34}to{stroke-dashoffset:0}}
@keyframes tick-pop{0%{transform:scale(.82) rotate(-6deg)}60%{transform:scale(1.14) rotate(3deg)}100%{transform:none}}
/* v1.74.0: the wax seal, between "Share link" and the phone's share menu. The
   envelope and wax match the one a guest opens (.inv-seal, .inv-flap). */
.scrim.seal-layer{background:#0f2a33c7}
.seal-stage{position:relative;display:flex;flex-direction:column;align-items:center;gap:20px;width:min(320px,100%)}
.seal-letter{position:relative;width:100%;aspect-ratio:3/2;animation:seal-in .44s cubic-bezier(.25,1.3,.5,1) both}
.seal-paper{position:absolute;inset:0;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 12px 16px #0a1c2466)}
.seal-paper polygon,.seal-paper rect{stroke-linejoin:round}
.sp-sheet{fill:#f3ebda}
.sp-inside{fill:#cdbd9d}
.sp-side{fill:#eadfc8;stroke:#a08c67;stroke-width:1.4}
.sp-bottom{fill:#f2e9d6;stroke:#a08c67;stroke-width:1.4}
.sp-shadow{fill:#5e4c2d;opacity:.28}
.sp-top{fill:#f9f3e6;stroke:#a08c67;stroke-width:1.4}
.sp-fold{fill:#fbf6ea;stroke:#a08c67;stroke-width:1.4}
.sp-under{fill:#6b5a3a;stroke:none}
.sp-keelflap{fill:#a8956f}
.sp-keel{stroke:#7d6a47;stroke-width:2;stroke-linecap:round;opacity:0}
.seal-paper [data-p="c1"],.seal-paper [data-p="c2"],.seal-paper [data-p="s1"],.seal-paper [data-p="s2"]{opacity:0}
.seal-to{position:absolute;left:12px;right:12px;bottom:10px;transition:opacity .2s;text-align:center;font:600 22px/1.15 Caveat,cursive;color:#4a4034;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.seal-press{position:absolute;z-index:2;left:50%;top:60%;width:76px;height:76px;margin:-38px 0 0 -38px;padding:0;border:0;border-radius:50%;display:grid;place-items:center;cursor:pointer;background:radial-gradient(circle at 36% 30%,var(--env-seal-1,#cf6d40),var(--env-seal-2,#9b4322) 72%);box-shadow:0 0 0 3px var(--env-seal-3,#a54b26),0 12px 20px #3a1a0a73,inset 0 -3px 6px #0000004d;animation:seal-wait 2.2s ease-in-out .5s infinite}
.seal-press img{width:38px;height:38px;border-radius:50%;box-shadow:0 0 0 2px #e7a57f66}
.seal-press::after{content:"";position:absolute;inset:-3px;border-radius:50%;border:2px solid var(--env-seal-2,#9b4322);opacity:0;pointer-events:none}
.seal-hint{margin:0;font:600 16px/1.3 var(--body-font);color:#fff;text-align:center}
.seal-other{min-height:44px;padding:8px 14px;border:0;background:none;font:500 14px/1.3 var(--body-font);color:#ffffffd0;text-decoration:underline;text-underline-offset:3px;cursor:pointer}
.is-pressed .seal-letter{animation:seal-thud .3s ease-out both}
.is-pressed .seal-press{cursor:default;animation:seal-stamp .3s ease-in both;border-radius:48% 52% 51% 49%/52% 47% 53% 48%;box-shadow:0 0 0 3px var(--env-seal-3,#a54b26),0 2px 4px #3a1a0a73,inset 0 -3px 6px #0000004d}
.is-pressed .seal-press::after{animation:seal-ring .46s ease-out .11s both}
.is-pressed .seal-other{opacity:0;pointer-events:none;transition:opacity .15s}
.is-folding .seal-hint{opacity:0;transition:opacity .15s}
.is-folding .seal-letter{animation:none}
.is-folding .seal-to{opacity:0}
.is-folding .seal-press{animation:none;pointer-events:none;transform:scale(.7);opacity:0;transition:transform .32s ease-in,opacity .32s ease-in}
.is-flying .seal-letter{animation:seal-fly .9s cubic-bezier(.45,.05,.7,.4) both}
@keyframes seal-in{from{transform:translateY(-34px) rotate(-3deg);opacity:0}to{transform:none;opacity:1}}
@keyframes seal-wait{0%,100%{transform:scale(1.1)}50%{transform:scale(1.16)}}
@keyframes seal-stamp{0%{transform:scale(1.16)}40%{transform:scale(.9)}70%{transform:scale(1.03)}100%{transform:none}}
@keyframes seal-thud{0%,30%{transform:none}48%{transform:translateY(4px) scale(1.012,.982)}100%{transform:none}}
@keyframes seal-ring{from{transform:scale(1);opacity:.75}to{transform:scale(1.55);opacity:0}}
@keyframes seal-fly{0%{transform:scale(.84)}24%{transform:translate(-24px,22px) scale(.84)}100%{transform:translate(60vmax,-54vmax) scale(.5)}}

/* v1.75.0: the plan feels like paper. A card lands a little crooked and
   settles (planLanded); one taken off closes up while a paper ball rolls away
   (crumple). The Reduce Motion rule near the top covers these. */
.swipe.just-landed{animation:entry-land .38s cubic-bezier(.25,1.2,.5,1)}
@keyframes entry-land{0%{transform:translateY(-16px) rotate(-1.8deg) scale(1.02);opacity:.3}60%{transform:translateY(1px) rotate(.5deg);opacity:1}100%{transform:none}}
.drag-ghost{animation:drag-lift .16s ease-out both}
@keyframes drag-lift{from{transform:rotate(0) scale(.98);box-shadow:0 2px 6px #143a4530}to{transform:rotate(-2.5deg) scale(1.03);box-shadow:0 20px 34px #143a4560}}
.swipe.crumpling{pointer-events:none;opacity:0;transition:height .22s ease-in,opacity .16s ease-in}
.swipe.crumpling .swipe-del{visibility:hidden}
.swipe.crumpling .swipe-front{transform:scale(.3,.5) rotate(6deg)!important;transition:transform .18s ease-in}
.paper-ball{position:fixed;z-index:90;width:36px;height:36px;pointer-events:none;animation:paper-ball .62s cubic-bezier(.3,.1,.6,1) both}
.paper-ball svg{display:block;width:100%;height:100%;overflow:visible;filter:drop-shadow(0 3px 3px #143a4540)}
.paper-ball polygon{fill:#f3ebda;stroke:#a08c67;stroke-width:1.4;stroke-linejoin:round}
.paper-ball path{fill:none;stroke:#b9a988;stroke-width:1;stroke-linecap:round;stroke-linejoin:round}
@keyframes paper-ball{0%{transform:scale(.3);opacity:0}18%{transform:scale(1);opacity:1}70%{opacity:1}100%{transform:translate(var(--ball-x,120px),34px) rotate(560deg) scale(.8);opacity:0}}
/* v1.75.0: a day with something in all three parts, and the doorbell's shake. */
.day-full{display:inline-flex;flex-direction:column;align-items:center;margin:0 2px;transform:rotate(-3deg);color:var(--moss)}
.day-full b{font:700 19px/1 Caveat,cursive}
.day-full svg{width:62px;height:7px;margin-top:-1px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round}
.just-full .day-full{animation:day-full-in .34s cubic-bezier(.3,1.5,.5,1)}
.just-full .day-full path{stroke-dasharray:72;animation:day-full-line .4s ease-out .12s both}
@keyframes day-full-in{from{transform:rotate(-3deg) scale(.6);opacity:0}to{transform:rotate(-3deg);opacity:1}}
@keyframes day-full-line{from{stroke-dashoffset:72}to{stroke-dashoffset:0}}
.rung{animation:bell-shake .7s ease-in-out}
@keyframes bell-shake{0%,100%{transform:none}15%{transform:rotate(-2deg)}30%{transform:rotate(2deg)}45%{transform:rotate(-1.4deg)}60%{transform:rotate(1.4deg)}80%{transform:rotate(-.6deg)}}
/* v1.75.0: the countdown on a visit's card. */
.visit-countdown{display:block;margin-bottom:3px;padding-right:12px;font:600 19px/1.15 Caveat,cursive;color:var(--moss)}

/* v1.76.0: paper weather, js/delight.js. .wx-paper rests behind the words of
   a day's heading (sticky with a z-index, so -1 stays above its background);
   .wx-fall is the one short fall, hung from the heading, over the card. */
.wx-paper,.wx-fall{position:absolute;pointer-events:none;overflow:hidden}
.wx-paper{inset:0;z-index:-1}
.wx-fall{left:0;right:0;top:0;height:230px;z-index:9}
.wx-paper i,.wx-fall i{position:absolute;width:var(--s);height:var(--s);filter:drop-shadow(0 1px 0 #1b35471f)}
.wx-paper[data-kind="rain"] i,.wx-fall[data-kind="rain"] i{height:calc(var(--s) * 1.35);background:#79b9d0;clip-path:polygon(50% 0,74% 38%,88% 62%,82% 84%,62% 98%,38% 98%,18% 84%,12% 62%,26% 38%);rotate:12deg}
.wx-paper[data-kind="snow"] i,.wx-fall[data-kind="snow"] i{width:calc(var(--s) * 1.75);height:calc(var(--s) * 1.75);background:#dcebf3;clip-path:polygon(50% 0,60% 33%,93% 25%,70% 50%,93% 75%,60% 67%,50% 100%,40% 67%,7% 75%,30% 50%,7% 25%,40% 33%)}
.wx-paper[data-kind="snow"] i,.wx-fall[data-kind="snow"] i{filter:drop-shadow(0 0 1px #1b3547cc) drop-shadow(0 1px 1px #1b354759)}
.wx-fall i{top:-16px;opacity:0;animation-name:wx-fall;animation-timing-function:cubic-bezier(.35,.1,.6,1);animation-fill-mode:forwards}
.wx-fall[data-kind="snow"] i{animation-name:wx-drift;animation-timing-function:ease-in-out}
@keyframes wx-fall{0%{opacity:0;translate:10px 0}12%{opacity:1}80%{opacity:1}100%{opacity:0;translate:-16px 236px}}
@keyframes wx-drift{0%{opacity:0;translate:0 0;rotate:0deg}12%{opacity:1}35%{translate:12px 80px}65%{translate:-8px 160px}85%{opacity:1}100%{opacity:0;translate:7px 236px;rotate:150deg}}
@media print{.wx-paper,.wx-fall{display:none}}

/* ═══ The owner's dashboard (v1.78.0, js/dash.js) ═══
   --dv1 to 8 are chart identity colours, --dvo1 to 4 an ordered ramp for steps,
   --dvs1 to 5 a one-hue ramp for "more is darker". All were put through the
   colour-blindness and contrast checks against --paper on both themes; change
   one and check again. Numbers and labels stay in the ink colours: a colour
   only ever sits on a mark. */
:root{--dv1:#1a72a0;--dv2:#c0622f;--dv3:#1f8a70;--dv4:#d19a22;--dv5:#c9638c;--dv6:#3e7d3a;--dv7:#6a57c9;--dv8:#c94c4c;
  --dvo1:#7fb4cf;--dvo2:#4f94b6;--dvo3:#2a7699;--dvo4:#18577a;
  --dvs1:#dcebf2;--dvs2:#b3d3e2;--dvs3:#7fb4cf;--dvs4:#3f8bad;--dvs5:#18577a;--dvs-ink:#fffef8;
  --dv-good:#2f6451;--dv-bad:#ac4839;--dv-grid:#e3e6df;--dv-base:#c7cfc8}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]){
  --dv1:#3b9fd0;--dv2:#d9702f;--dv3:#1f9e78;--dv4:#c98500;--dv5:#d9558a;--dv6:#3f9a3f;--dv7:#9085e9;--dv8:#e66767;
  --dvo1:#2c6f8f;--dvo2:#3a8db3;--dvo3:#62acd0;--dvo4:#9acbe2;
  --dvs1:#2c4e56;--dvs2:#2f6a7c;--dvs3:#3a8db3;--dvs4:#73b6d6;--dvs5:#b6dcec;--dvs-ink:#15333c;
  --dv-good:#a2cfb0;--dv-bad:#f3a18c;--dv-grid:#35505300;--dv-grid:#35504f;--dv-base:#4a6566}}
:root[data-theme="dark"]{
  --dv1:#3b9fd0;--dv2:#d9702f;--dv3:#1f9e78;--dv4:#c98500;--dv5:#d9558a;--dv6:#3f9a3f;--dv7:#9085e9;--dv8:#e66767;
  --dvo1:#2c6f8f;--dvo2:#3a8db3;--dvo3:#62acd0;--dvo4:#9acbe2;
  --dvs1:#2c4e56;--dvs2:#2f6a7c;--dvs3:#3a8db3;--dvs4:#73b6d6;--dvs5:#b6dcec;--dvs-ink:#15333c;
  --dv-good:#a2cfb0;--dv-bad:#f3a18c;--dv-grid:#35504f;--dv-base:#4a6566}
.dash{position:fixed;inset:0;z-index:85;overflow-y:auto;overscroll-behavior:contain;background:var(--surface);color:var(--ink);font-size:15px}
.dash-top{display:flex;align-items:center;gap:14px;padding:calc(14px + var(--top-safe)) 28px 12px;background:var(--paper);border-bottom:1px solid var(--paper-edge)}
.dash-title{flex:1;min-width:0}.dash-title h1{font:700 28px/1.1 var(--display-font);letter-spacing:-1px;margin:0}.dash-title p{margin:3px 0 0;font-size:13px;color:var(--ink-2)}
.dash-source{display:inline-flex;border:1px solid var(--paper-edge);border-radius:6px;overflow:hidden;background:var(--manila)}
.dash-source button{padding:9px 12px;min-height:40px;font-size:13px;font-weight:700;color:var(--ink-2)}.dash-source button[aria-pressed="true"]{background:var(--navy);color:var(--accent-ink)}
.dash-mockband{padding:9px 28px;background:#f6e3ad;color:#203d42;font-size:14px;border-bottom:1px solid #d9c07f}
.dash-sticky{position:sticky;top:0;z-index:5;background:var(--surface);border-bottom:1px solid var(--paper-edge);box-shadow:0 8px 14px -14px #173c4570}
.dash-filters{padding:12px 28px 4px}
.dash-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.dash-chips{display:inline-flex;gap:6px;flex-wrap:wrap}.dash-chips button,.dash-more{padding:8px 12px;min-height:40px;border-radius:5px;border:1px solid var(--paper-edge);background:var(--paper);font-size:14px;font-weight:700;color:var(--ink)}
.dash-chips button[aria-pressed="true"]{background:var(--navy);border-color:var(--navy);color:var(--accent-ink)}
.dash-more{margin-left:auto}.dash-more[aria-expanded="true"]{background:var(--blue-soft)}
.dash-range{display:flex;align-items:center;gap:16px;padding:10px 0 8px}.dash-range>span{flex:none;font-size:13px;font-weight:700;color:var(--ink-2);min-width:200px}
.dash-slider{--a:0;--b:1;position:relative;flex:1;height:30px;min-width:0}
.dash-slider::before{content:"";position:absolute;left:0;right:0;top:13px;height:4px;border-radius:2px;background:linear-gradient(90deg,var(--paper-edge) calc(var(--a)*100%),var(--navy) calc(var(--a)*100%) calc(var(--b)*100%),var(--paper-edge) calc(var(--b)*100%))}
.dash-slider input{position:absolute;inset:0;width:100%;height:30px;margin:0;background:none;appearance:none;-webkit-appearance:none;pointer-events:none;border:0;padding:0}
.dash-slider input::-webkit-slider-runnable-track{background:none;height:30px}.dash-slider input::-moz-range-track{background:none}
.dash-slider input::-webkit-slider-thumb{-webkit-appearance:none;pointer-events:auto;width:24px;height:24px;margin-top:3px;border-radius:50%;background:var(--paper);border:3px solid var(--navy);box-shadow:0 1px 3px #173c4540;cursor:grab}
.dash-slider input::-moz-range-thumb{pointer-events:auto;width:18px;height:18px;border-radius:50%;background:var(--paper);border:3px solid var(--navy);cursor:grab}
.dash-pop{display:none;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px 14px;padding:6px 0 12px}.dash-filters.open .dash-pop{display:grid;max-height:52vh;overflow:auto}
.dash-pick{display:block;min-width:0}.dash-pick>span{display:block;font-size:12.5px;font-weight:700;color:var(--ink-2);margin-bottom:4px}
.dash-pick select{padding-top:8px;padding-bottom:8px;min-height:42px;font-size:14px}
.dash-clear{align-self:end;min-height:42px;padding:0 12px;color:var(--navy);font-weight:700;text-align:left;text-decoration:underline;text-underline-offset:3px}
.dash-note{grid-column:1/-1;margin:0;font-size:12.5px;color:var(--ink-2)}
.dash-nav{display:flex;gap:4px;padding:2px 24px 8px;overflow-x:auto;scrollbar-width:none}.dash-nav::-webkit-scrollbar{display:none}
.dash-nav button{flex:none;padding:7px 10px;min-height:36px;font-size:13.5px;font-weight:700;color:var(--ink-2);border-radius:4px}.dash-nav button:hover{background:var(--manila);color:var(--navy)}
.dash-body{padding:20px 28px 70px;max-width:1500px;margin:auto;transition:opacity .15s}.dash-body.loading{opacity:.55}
.dash-empty{padding:60px 16px;text-align:center;color:var(--ink-2)}.dash-empty h3{font:700 22px/1.2 var(--display-font);color:var(--ink);margin:0 0 8px}
.dash-focus{margin:0 0 12px;padding:9px 12px;background:var(--blue-soft);border-radius:5px;font-size:14px}
.dv-sec{margin:0 0 34px;scroll-margin-top:150px}.dv-sec>h2{font:700 24px/1.2 var(--display-font);letter-spacing:-.7px;margin:0 0 4px}
.dv-intro{margin:0 0 12px;color:var(--ink-2);font-size:14.5px}.dv-sec>h2+.dv-tiles,.dv-sec>h2+.dv-grid{margin-top:12px}
.dv-tiles{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;margin-bottom:12px}
.dv-tile{position:relative;background:var(--paper);border:1px solid var(--paper-edge);border-radius:7px;padding:13px 14px 12px;box-shadow:var(--shadow-flat);min-width:0}
.dv-tile.big{grid-column:span 2;grid-row:span 2;display:flex;flex-direction:column;justify-content:center}.dv-tile.big .dv-value{font-size:52px;letter-spacing:-2px}.dv-tile.big .dv-spark{width:100%;height:46px;position:static;margin-top:10px}
.dv-label{font-size:13px;font-weight:700;color:var(--ink-2);line-height:1.3}
.dv-value{font:700 28px/1.15 var(--body-font);margin:6px 0 2px;letter-spacing:-.6px}.dv-value.none{font-size:14px;font-weight:600;color:var(--ink-3);letter-spacing:0;margin:10px 0 4px}
.dv-foot{display:flex;flex-wrap:wrap;gap:2px 8px;align-items:baseline;font-size:12.5px;min-height:18px}
.dv-sub{font-size:12.5px;color:var(--ink-2)}.dv-delta{font-weight:700;color:var(--ink-2);white-space:nowrap}.dv-delta span{font-size:10px}.dv-delta.good{color:var(--dv-good)}.dv-delta.bad{color:var(--dv-bad)}
.dv-spark{display:block;width:96px;height:26px;margin-top:6px;overflow:visible}.dv-spark polyline{fill:none;stroke:var(--ink-3);stroke-width:1.5;stroke-linecap:round;stroke-linejoin:round}.dv-spark circle{fill:var(--dv1);stroke:var(--paper);stroke-width:2}
.dv-grid{display:flex;flex-wrap:wrap;gap:12px}
.dv-card{background:var(--paper);border:1px solid var(--paper-edge);border-radius:7px;padding:14px 16px 10px;box-shadow:var(--shadow-flat);min-width:0;flex:1 1 340px;display:flex;flex-direction:column}.dv-card.wide{flex-basis:100%}
.dv-card>header{display:flex;align-items:flex-start;gap:10px}.dv-card h3{flex:1;margin:0;font:700 16px/1.3 var(--body-font)}
.dv-tbl{flex:none;padding:3px 9px;min-height:30px;border:1px solid var(--paper-edge);border-radius:4px;font-size:12.5px;font-weight:700;color:var(--ink-2);background:var(--paper)}.dv-tbl[aria-pressed="true"]{background:var(--blue-soft);color:var(--ink)}
.dv-what{margin:4px 0 0;font-size:13px;color:var(--ink-2)}.dv-body{flex:1;margin-top:10px;min-width:0}
.dv-card>footer{display:flex;flex-wrap:wrap;gap:2px 12px;justify-content:space-between;margin-top:10px;padding-top:7px;border-top:1px solid var(--rule);font-size:11.5px;color:var(--ink-3)}.dv-off{font-weight:700;color:var(--amber)}
.dv-card.as-table .dv-body{display:none}.dv-table{margin-top:10px}
.dv-scroll{overflow-x:auto}.dv-table table{width:100%;border-collapse:collapse;font-size:13.5px;font-variant-numeric:tabular-nums}
.dv-table th,.dv-table td{padding:6px 8px;border-bottom:1px solid var(--rule);text-align:right;white-space:nowrap}.dv-table th:first-child,.dv-table td:first-child{text-align:left;white-space:normal;font-weight:600}.dv-table thead th{color:var(--ink-2);font-size:12.5px}
.dv-table{max-height:340px;overflow:auto}
.dv-none{padding:24px 10px;text-align:center;font-size:14px;color:var(--ink-2)}
.dv-legend{display:flex;flex-wrap:wrap;gap:4px 14px;font-size:12.5px;color:var(--ink-2);margin:0 0 6px}.dv-legend span{display:inline-flex;align-items:center;gap:6px}.dv-legend i{width:12px;height:12px;border-radius:3px;flex:none}.dv-legend b{color:var(--ink);font-weight:700}
.dv-chart{position:relative;min-height:200px;outline-offset:2px;touch-action:pan-y}.dv-chart svg{display:block}
.dv-chart .g{stroke:var(--dv-grid);stroke-width:1}.dv-chart .a{fill:var(--ink-3);font-size:11px;font-variant-numeric:tabular-nums}.dv-chart .t{fill:var(--ink-2);font-size:12px;font-weight:700}
.dv-chart .l{fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.dv-chart .w{opacity:.1}.dv-chart .e{stroke:var(--paper);stroke-width:2}.dv-chart .c{stroke:var(--ink-3);stroke-width:1}.dv-chart .h{fill:var(--manila)}
.dv-tip{position:fixed;z-index:95;pointer-events:none;max-width:240px;padding:8px 10px;background:var(--ink);color:var(--paper);border-radius:6px;font-size:12.5px;box-shadow:var(--shadow-lift)}
.dv-tip .h{font-weight:600;opacity:.8;margin-bottom:3px}.dv-tip .r{display:flex;align-items:center;gap:7px}.dv-tip .r i{width:12px;height:3px;border-radius:2px;flex:none}.dv-tip .r b{font-size:14px}.dv-tip .r span{opacity:.82}
.dv-bars,.dv-funnel{display:flex;flex-direction:column;gap:7px;margin:0;padding:0;list-style:none}
.dv-bar,.dv-funnel li{display:grid;grid-template-columns:minmax(92px,38%) 1fr;gap:10px;align-items:center;font-size:13.5px;border-radius:3px}.dv-funnel li{grid-template-columns:minmax(96px,34%) 1fr 42px}
.dv-bar .n,.dv-funnel .n{line-height:1.25;overflow-wrap:anywhere}.dv-bar .t,.dv-funnel .t{display:flex;align-items:center;gap:7px;min-width:0}
.dv-bar i,.dv-funnel i{display:block;height:16px;flex:0 1 auto;max-width:calc(100% - 52px);border-radius:0 4px 4px 0}.dv-bar b,.dv-funnel b{font-size:13px;font-weight:700;white-space:nowrap;font-variant-numeric:tabular-nums}
.dv-funnel .p{text-align:right;font-size:12.5px;color:var(--ink-2);font-variant-numeric:tabular-nums}
.dv-parts{display:flex;gap:2px;height:20px;margin:4px 0 8px}.dv-parts i{min-width:3px}.dv-parts i:first-child{border-radius:4px 0 0 4px}.dv-parts i:last-child{border-radius:0 4px 4px 0}
.dv-map{display:grid;grid-template-columns:repeat(11,1fr);gap:2px;max-width:440px;margin:auto}
.dv-map span{aspect-ratio:1;display:flex;align-items:center;justify-content:center;font-size:10.5px;font-weight:700;border-radius:3px;background:var(--manila);color:var(--ink-3)}
.dv-map .s1,.dv-scale .s1,.dv-cohort .s1{background:var(--dvs1);color:var(--ink)}.dv-map .s2,.dv-scale .s2,.dv-cohort .s2{background:var(--dvs2);color:var(--ink)}.dv-map .s3,.dv-scale .s3,.dv-cohort .s3{background:var(--dvs3);color:#102c33}
.dv-map .s4,.dv-scale .s4,.dv-cohort .s4{background:var(--dvs4);color:var(--dvs-ink)}.dv-map .s5,.dv-scale .s5,.dv-cohort .s5{background:var(--dvs5);color:var(--dvs-ink)}
.dv-scale{display:flex;align-items:center;justify-content:center;gap:2px;margin-top:9px;font-size:12px;color:var(--ink-2)}.dv-scale i{width:22px;height:11px}.dv-scale span:first-child{margin-right:6px}.dv-scale span:last-child{margin-left:6px}
.dv-cohort{border-collapse:separate;border-spacing:2px;font-size:12.5px;font-variant-numeric:tabular-nums;margin:auto}.dv-cohort th{font-weight:600;color:var(--ink-2);padding:3px 6px;white-space:nowrap;text-align:right}
.dv-cohort td{min-width:40px;height:28px;text-align:center;border-radius:3px;font-weight:700}.dv-cohort td.q{color:var(--ink-3)}
.dv-meters{display:flex;flex-direction:column;gap:14px}.dv-track{height:10px;border-radius:5px;background:var(--dvs1);overflow:hidden;margin:6px 0 4px}.dv-track i{display:block;height:100%;background:var(--dv1)}.dv-meter.warn .dv-track i{background:#fab219}.dv-meter.bad .dv-track i{background:var(--red)}
.dv-costs{display:grid;grid-template-columns:repeat(auto-fill,minmax(130px,1fr));gap:9px 12px}.dv-costs span{display:block;font-size:12.5px;font-weight:700;color:var(--ink-2);margin-bottom:3px}.dv-costs input{min-height:42px;padding-top:7px;padding-bottom:7px}
.dv-model{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,250px),1fr));gap:12px}
.dv-model fieldset{margin:0;padding:10px 12px 4px;min-width:0;border:1px solid var(--paper-edge);border-radius:6px;background:var(--manila)}.dv-model legend{padding:0 5px;font-size:13px;font-weight:700}
.dv-field{display:block;margin-bottom:9px}.dv-field>span:first-child{display:block;font-size:13px;font-weight:600;margin-bottom:3px}
.dv-input{display:flex;align-items:center;gap:6px}.dv-input i{font-style:normal;font-weight:700;color:var(--ink-2)}.dv-input input{min-height:42px;padding-top:7px;padding-bottom:7px;background:var(--paper)}
.dv-field small{display:block;margin-top:3px;font-size:12px;line-height:1.35;color:var(--ink-2)}.dv-field small:empty{display:none}.dv-field small button{color:var(--navy);font-weight:700;text-decoration:underline;text-underline-offset:2px;min-height:28px}
.dv-goal{margin-top:20px;padding-top:14px;border-top:1px solid var(--paper-edge)}.dv-goal h4{margin:0;font:700 16px/1.3 var(--body-font)}
.dv-goal-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:4px 14px;margin-top:10px}.dv-goal-fields select{min-height:42px;padding-top:7px;padding-bottom:7px}
.dv-goal .dv-tile .dv-sub{display:block}.dv-goal .btn{margin-top:10px}
.dv-items{margin-top:20px;padding-top:14px;border-top:1px solid var(--paper-edge)}.dv-items h4{margin:0;font:700 16px/1.3 var(--body-font)}.dv-items h5{margin:14px 0 0;font:700 14px/1.3 var(--body-font)}.dv-items .dv-tile .dv-sub{display:block}
.dv-item-table{max-height:none;margin-top:10px}.dv-item-table td{min-width:112px}.dv-item-table tr>:first-child{position:sticky;left:0;z-index:1;min-width:128px;background:var(--paper)}.dv-item-table thead th{font-size:12.5px;vertical-align:bottom}.dv-item-table input{min-height:40px;width:100%;min-width:0;padding-top:6px;padding-bottom:6px}
.dv-warn{margin:12px 0 0;padding:9px 12px;border-radius:5px;background:var(--blue-soft);font-size:14px}
.dv-model-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:16px 0 8px}.dv-model-head h4{margin:0;font:700 15px/1.3 var(--body-font)}.dv-model-head .dash-chips button{min-height:34px;padding:4px 10px;font-size:13px}
.dv-model-table{max-height:none}.dv-model-table td{min-width:66px}.dv-model-table tr>:first-child{position:sticky;left:0;min-width:136px;background:var(--paper)}.dv-model-table thead th{color:var(--ink);font-size:13.5px}.dv-model-table tr.sub th,.dv-model-table tr.sub td{font-weight:700}.dv-model-table tr.big th,.dv-model-table tr.big td{font-weight:700;background:var(--blue-soft);color:var(--ink)}.dv-model-table tr.big>:first-child{background:var(--blue-soft)}
.dv-even{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:10px;margin-top:10px}.dv-even .dv-tile{box-shadow:none;background:var(--manila)}
.dv-score{display:flex;align-items:center;gap:14px}.dv-score .dv-value{font-size:40px;margin:0}
.dv-diverge{display:flex;gap:2px;height:18px;margin:10px 0 8px}.dv-diverge i{min-width:0}.dv-diverge i:first-child{border-radius:4px 0 0 4px}.dv-diverge i:last-child{border-radius:0 4px 4px 0}
.dv-diverge .lo,.dv-legend .lo{background:var(--dv8)}.dv-diverge .mid,.dv-legend .mid{background:var(--dv-base)}.dv-diverge .hi,.dv-legend .hi{background:var(--dv1)}
.score-row{display:grid;grid-template-columns:repeat(11,1fr);gap:4px}.score-row button{min-height:44px;border:1px solid var(--paper-edge);border-radius:5px;background:var(--manila);font-weight:700;font-size:14px}.score-row button:hover{background:var(--blue-soft)}
.score-ends{display:flex;justify-content:space-between;font-size:12.5px;color:var(--ink-2);margin-top:6px}
@media(max-width:700px){
  .dash-top{padding-left:16px;padding-right:12px;gap:8px}.dash-title h1{font-size:23px}.dash-source button{padding:7px 8px;font-size:12px}
  .dash-mockband{padding:8px 16px;font-size:13px}.dash-filters{padding:10px 16px 2px}.dash-nav{padding:2px 12px 6px}.dash-body{padding:16px 16px 70px}
  .dash-row,.dash-chips{flex-wrap:nowrap;gap:4px}.dash-chips button,.dash-more{padding:7px 7px;font-size:13px;white-space:nowrap}.dash-slider{flex:none}.dash-range{display:none;flex-direction:column;align-items:stretch;gap:2px;padding:7px 0 4px}.dash-filters.open .dash-range{display:flex}.dash-range>span{min-width:0}
  .dv-tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.dv-tile{padding:11px 11px 10px}.dv-value{font-size:24px}.dv-tile.big{grid-row:auto}.dv-tile.big .dv-value{font-size:48px}
  .dv-card{padding:12px 12px 9px}.dv-map span{font-size:9px}
  .score-row{grid-template-columns:repeat(6,1fr)}
}

/* The swans nuzzling (js/delight.js): a stand-in for the logo. A press means nothing was covering it, so it goes on top. */
.nuzzle{position:fixed;z-index:130;pointer-events:none;box-shadow:0 2px 3px #142e3820;overflow:hidden}
.nuzzle canvas{display:block;width:100%;height:100%}
.nuzzle-heart{position:absolute;left:50.5%;top:43.5%;width:17%;height:17%;opacity:0;fill:#e0654f;stroke:#fff6ea;stroke-width:1.7;stroke-linejoin:round}

/* Small secrets (js/delight.js): written by hand, not printed. */
.gf-bold{margin-top:5px;font:600 22px/1.15 "Caveat","Bradley Hand","Segoe Print",cursive;color:var(--ink)}
.gf-bold:empty{display:none}
.toast.rest-note{font:600 23px/1.2 "Caveat","Bradley Hand","Segoe Print",cursive;cursor:pointer}

/* Paper Plane (js/plane.js). Holding the airplane on the Visits tab tips it up, slowly. */
#btnInvite{touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
#btnInvite svg{transition:transform .2s}
#btnInvite.plane-hold svg{transition:transform 3s linear;transform:rotate(-16deg) translateY(-2px)}
.scrim.plane-ask,.scrim.plane-layer{z-index:97}                    /* above the sign-in screen */
.fly-card{width:min(400px,100%);overflow:hidden;background:var(--paper);border:1px solid var(--paper-edge);border-radius:12px 3px 12px 3px;box-shadow:var(--shadow-lift);animation:flyPop .42s cubic-bezier(.2,1.5,.4,1) both}
@keyframes flyPop{from{opacity:0;transform:translateY(22px) rotate(-3deg) scale(.92)}to{opacity:1;transform:none}}
.fly-scene{display:block;width:100%;height:auto;aspect-ratio:400/176}
.fly-puff{animation:flyDrift 7s ease-in-out infinite alternate}
.fly-puff:nth-of-type(2){animation-duration:9s;animation-delay:-3s}
@keyframes flyDrift{from{translate:-6px 0}to{translate:8px 0}}
.fly-flag{transform-box:fill-box;transform-origin:50% 100%;animation:flyWave 1.6s ease-in-out infinite alternate}
@keyframes flyWave{from{transform:rotate(-8deg)}to{transform:rotate(10deg)}}
.fly-words{padding:18px 22px 4px;text-align:center}
.fly-words h2{margin:0 0 7px;font:800 28px/1.14 var(--display-font);letter-spacing:-.6px;color:var(--ink)}
.fly-words p{margin:0 0 8px;font-size:15.5px;line-height:1.4;color:var(--ink-2)}
.fly-words .fly-note{margin-bottom:9px;font-size:14px}.fly-note b{color:var(--ink)}
.fly-words .fly-best{display:inline-block;margin:3px 0 4px;padding:4px 11px;border-radius:5px;background:var(--blue-soft);color:var(--ink);font-size:14px}
.fly-acts{display:flex;gap:10px;padding:12px 22px 20px}.fly-acts .btn{flex:1}.fly-acts .btn:last-child{flex:1.5}
.plane-hud{position:absolute;z-index:2;top:calc(10px + var(--top-safe));left:50%;translate:-50% 0;min-width:112px;padding:5px 14px 6px;text-align:center;pointer-events:none;background:var(--paper);border:1px solid var(--paper-edge);border-radius:7px 2px 7px 2px;box-shadow:var(--shadow-flat);font-variant-numeric:tabular-nums}
.plane-score{display:block;font:800 25px/1.08 var(--display-font);color:var(--ink)}
.plane-best{display:block;font-size:12.5px;font-weight:600;color:var(--ink-2)}.plane-best i{font-style:normal}
.plane-hud.is-best{animation:hudBest .5s ease}.plane-hud.is-best .plane-best{color:var(--moss)}
@keyframes hudBest{40%{scale:1.14}}
.plane-mult{display:block;margin:1px 0 2px;font:800 15px/1.15 var(--display-font);color:var(--ink-2)}
.plane-mult.is-on{color:var(--red)}
.plane-mult.is-up{animation:multUp .45s ease}.plane-mult.is-reset{animation:multReset .4s ease}
@keyframes multUp{40%{scale:1.45}}
@keyframes multReset{25%{translate:-4px 0}50%{translate:4px 0}75%{translate:-2px 0}}
.scrim.plane-layer{padding:0!important;background:none;backdrop-filter:none;-webkit-backdrop-filter:none}
.plane-game{position:absolute;inset:0;overflow:hidden;background:var(--surface);touch-action:none}
/* Nothing on the page can be selected or long-pressed while a flight is open (v1.99.2). */
html.plane-playing,html.plane-playing *{-webkit-user-select:none!important;user-select:none!important;-webkit-touch-callout:none!important;-webkit-tap-highlight-color:transparent}
.plane-game canvas{display:block;width:100%;height:100%;outline:none;cursor:pointer;touch-action:none;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.plane-quit{position:absolute;z-index:2;top:calc(10px + var(--top-safe));right:max(10px,env(safe-area-inset-right));background:var(--paper);box-shadow:var(--shadow-flat)}
.plane-hint{text-wrap:balance;position:absolute;left:16px;right:16px;bottom:calc(14% + env(safe-area-inset-bottom));margin:0;text-align:center;pointer-events:none;font:700 21px/1.25 var(--display-font);color:#203d42}
.plane-hint small{display:block;margin-top:6px;font:500 15.5px/1.35 var(--body-font)}
:root[data-theme="dark"] .plane-hint{color:#f4f4e8}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .plane-hint{color:#f4f4e8}}
.plane-back{position:absolute;z-index:2;top:calc(82px + var(--top-safe));left:12px;right:12px;width:fit-content;margin:0 auto;display:flex;align-items:center;gap:12px;padding:6px 7px 6px 14px;border-radius:7px;background:var(--paper);border:1px solid var(--paper-edge);box-shadow:var(--shadow-flat);font-size:15px;font-weight:700;color:var(--ink)}
.plane-back .btn{min-height:34px;padding:6px 13px;font-size:14px}
.plane-end{position:absolute;z-index:2;top:50%;left:50%;translate:-50% -50%;width:min(340px,calc(100vw - 32px));padding:24px;text-align:center;background:var(--paper);border:1px solid var(--paper-edge);border-radius:8px 2px 8px 2px;box-shadow:var(--shadow-lift)}
.plane-end p{margin:0}
.plane-end-tag{font-size:15px;font-weight:700;color:var(--moss)}
.plane-end h2{margin:2px 0 3px;font:800 46px/1.05 var(--display-font);letter-spacing:-1px;font-variant-numeric:tabular-nums;color:var(--ink)}
.plane-end-best{font-size:14px;color:var(--ink-2)}.plane-end-best:empty{display:none}
.plane-end-mail{margin:8px 0 18px!important;font-size:15.5px;color:var(--ink)}
.plane-end-acts{display:flex;gap:10px;justify-content:center}.plane-end-acts .btn{flex:1}
.plane-game [hidden]{display:none}

/* Accessibility, first batch (v1.88.0). */
main:focus{outline:none}          /* it takes focus when a tab opens, for screen readers; it isn't a control */
/* Thumb-sized buttons on Activities and Meals rows, and a to-do's box: it
   still looks 26px, but the press counts out to 44. */
.lib-row .lib-acts .add-btn,.lib-row .lib-acts .heart,.lib-row .lib-acts .more-btn{min-width:44px;width:44px;height:44px}
button.bubble{position:relative}
button.bubble::after{content:"";position:absolute;left:50%;top:50%;width:44px;height:44px;translate:-50% -50%}
@media(max-width:360px){.app-icon-colors{grid-template-columns:repeat(3,minmax(0,1fr))}}   /* "Terracotta" needs the room at 12px */
.entry-order{display:flex;gap:8px;margin:0 0 14px}
.entry-order .btn{flex:1;min-width:0}
.entry-order .btn[aria-disabled="true"]{opacity:.55}
/* Short screens: a phone on its side, or the page zoomed right up. The bars
   that normally stick would cover half of it, so they scroll away instead. */
@media(max-height:500px){
  html{scroll-padding-top:0}
  .topbar,.save-band,.days-grid .day-title,.guest-app .day-title,.days-grid .day-add{position:relative;top:auto}
}

/* Ideas and day templates wear the same card as the plan (v1.88.1): the big
   picture, the words beside it, and the bin at the far right. "Add to a day"
   sits under the words, so nothing wraps below the picture. The column beside
   the days is a little wider to give the words room. */
.entry.idea{gap:10px;padding:10px 4px 10px 8px;background:var(--paper)}
.entry.idea .kind{width:88px;height:88px;border-radius:7px}
.entry.idea .kind svg{width:40px;height:40px}
.entry.idea .idea-go{display:inline-flex;margin-top:8px}
.entry.idea .tpl-edit:hover{color:var(--navy)}
@media(max-width:540px){
  .entry.idea .kind{width:72px;height:72px}
  .entry.idea .kind svg{width:34px;height:34px}
}
@media(min-width:1151px){
  .plan-cols{grid-template-columns:minmax(0,1fr) clamp(300px,27vw,360px)}
  .plan-side .ideas-card{padding-left:14px;padding-right:14px}
  .plan-side .entry.idea .kind{width:72px;height:72px}
  .plan-side .entry.idea .kind svg{width:34px;height:34px}
}

/* Reading options (v1.90.0, js/reading.js). Text size and plain lettering are
   set by changing the loaded rules; contrast is the colors here. Each block
   beats the matching one at the top of this file. */
:root[data-plain]{--hand:var(--display-font);--scrawl:var(--body-font)}
:root[data-contrast="more"]{
  --ink:#0d2226;--ink-2:#1d3539;--ink-3:#1d3539;--paper-edge:#6d7f7a;--field-edge:#3f524e;--rule:#7f908b;
  --moss:#1c4a39;--amber:#6f3c10;--navy:#124e62;--red:#8b2f22;--board:#f4f7f5;--board-2:#ebf1ef;--paper:#fff;
}
@media(prefers-color-scheme:dark){:root[data-contrast="more"]:not([data-theme="light"]){
  --ink:#fff;--ink-2:#f0f5f1;--ink-3:#e6efec;--paper-edge:#94aaa7;--field-edge:#c1d3d0;--rule:#7f9896;
  --moss:#c4e8cf;--amber:#ffd9a3;--navy:#c6eaf4;--red:#ffc4b5;--board:#0c1e23;--board-2:#09191d;--paper:#163036;
}}
:root[data-contrast="more"][data-theme="dark"]{
  --ink:#fff;--ink-2:#f0f5f1;--ink-3:#e6efec;--paper-edge:#94aaa7;--field-edge:#c1d3d0;--rule:#7f9896;
  --moss:#c4e8cf;--amber:#ffd9a3;--navy:#c6eaf4;--red:#ffc4b5;--board:#0c1e23;--board-2:#09191d;--paper:#163036;
}
.reading-toggle{font:700 17px/1 var(--display-font);color:var(--ink)}
.days-grid>.day{min-width:0}
:root:is([data-textsize="large"],[data-textsize="largest"]) label.check{align-items:center}
/* Bigger text on a phone: the picture sits over the words and the card's
   buttons under them, or the words get a column a few letters wide. */
@media(max-width:540px){
  :root:is([data-textsize="large"],[data-textsize="largest"]) .entry{flex-wrap:wrap}
  :root:is([data-textsize="large"],[data-textsize="largest"]) .entry-open{flex:1 1 0;min-width:0;flex-direction:column;align-items:flex-start}
  :root:is([data-textsize="large"],[data-textsize="largest"]) .entry-open .entry-body{width:100%}
  :root:is([data-textsize="large"],[data-textsize="largest"]) .guest-app .entry{flex-direction:column;align-items:flex-start}
  :root:is([data-textsize="large"],[data-textsize="largest"]) .guest-app .entry-body{width:100%}
  /* The sticky bands would fill the screen, so only the day's name stays up. */
  :root:is([data-textsize="large"],[data-textsize="largest"]) .save-band:not(.at-foot),:root:is([data-textsize="large"],[data-textsize="largest"]) .days-grid .day-add{position:relative;top:auto}
  :root:is([data-textsize="large"],[data-textsize="largest"]) .entry:not(.has-cam) .entry-acts{flex:1 0 100%;flex-direction:row;justify-content:flex-end}
}
@media(max-width:400px){
  :root:is([data-textsize="large"],[data-textsize="largest"]) .day-add.has-tools .day-add-btn{flex:1 1 calc(50% - 6px);white-space:normal}
  :root:is([data-textsize="large"],[data-textsize="largest"]) .tabbar button{letter-spacing:-.2px}
}

/* ── The guestbook and its stickers (v1.94.0, js/guestbook.js) ─────────── */
.gbk-card{position:relative;display:flex;align-items:center;gap:13px;width:100%;margin:0 0 14px;padding:11px 14px 11px 11px;text-align:left;color:var(--ink);background:var(--paper);border:1px solid var(--paper-edge);border-radius:var(--radius,8px);box-shadow:0 2px 0 var(--paper-edge)}
.gbk-card-book{flex:0 0 auto;width:64px;height:64px;filter:drop-shadow(0 2px 2px #0003)}
.gbk-card-text{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.gbk-card-text b{font:700 18px/1.2 var(--display-font)}
.gbk-card-text small{font-size:14px;line-height:1.3;color:var(--ink-2)}
.gbk-cloth{position:relative;isolation:isolate;overflow:hidden;width:calc(100% - 32px);max-width:780px;margin:24px auto 0;padding:14px;background:#898f70;border-radius:10px 12px 12px 8px;box-shadow:0 3px 0 #666c52,0 20px 40px -24px #0009}
.gbk-cover-art{position:absolute;z-index:0;inset:0;width:100%;height:100%;object-fit:cover;object-position:center;pointer-events:none}
.gbk-foil{position:relative;z-index:1;padding:30px 16px 26px;text-align:center;color:#0b2729}
.gbk-kicker{margin:0;font:700 12.5px/1.3 var(--body-font);letter-spacing:.2em;text-transform:uppercase}
.gbk-foil h1{margin:6px 0 4px;font:400 clamp(38px,9vw,56px)/1.15 var(--hand);color:#0b2729;overflow-wrap:anywhere}
.gbk-facts{margin:6px 0 0;font:700 14.5px/1.4 var(--body-font)}.gbk-facts span{white-space:nowrap}
.gbk-tabs{justify-content:center;margin:18px 16px 4px}
.gbk-tabs .chip{font:400 22px/1 var(--scrawl);padding:6px 16px}  /* handwritten, like the guests' names (v1.121.25) */
.gbk-panel{width:calc(100% - 32px);max-width:780px;margin:0 auto}
.gbk-panel[hidden]{display:none}
.gbk-year{display:flex;align-items:center;gap:12px;margin:26px 0 0;font:400 30px/1.1 var(--hand);color:var(--ink)}
.gbk-year::before,.gbk-year::after{content:"";flex:1;border-top:2px dashed var(--paper-edge)}
.gbk-page{position:relative;margin-top:22px;padding:24px 22px 20px;scroll-margin-top:calc(var(--top-safe) + 66px);color:#203d42;background:#f6f0e2 repeating-linear-gradient(#0000 0 33px,#c9d8d344 33px 34px);border-radius:3px;box-shadow:0 2px 0 #d8cdb4,0 18px 40px -26px #0009}
.gbk-page::before{content:"";position:absolute;top:-10px;left:50%;width:100px;height:20px;margin-left:-50px;background:rgba(238,214,148,.8);transform:rotate(-2deg)}
.gbk-head{display:flex;align-items:center;gap:16px}
.gbk-cover{flex:0 0 auto;width:112px;height:84px;object-fit:cover;padding:5px;background:#fffef8;box-shadow:0 2px 3px #0002;transform:rotate(-2.4deg)}
.gbk-title{min-width:0}
.gbk-title h3{margin:0;font:400 30px/1.12 var(--hand);color:#203d42;overflow-wrap:anywhere}
.gbk-title .ex-tag{vertical-align:middle;margin-left:8px}
.gbk-guests{margin:3px 0 0;font:700 15px/1.35 var(--body-font);color:#25677d}
.gbk-sub{margin:2px 0 0;font:600 14px/1.35 var(--body-font);color:#53676a}
.gbk-stuck-row{display:flex;flex-wrap:wrap;gap:4px;margin-top:14px}
.gbk-stuck{padding:2px;background:none;border:0;min-width:44px;min-height:44px}
.gbk-stuck img{display:block;width:70px;height:70px;filter:drop-shadow(0 1.5px 1.5px #0004)}
.gbk-stuck.s0 img{transform:rotate(-7deg)}.gbk-stuck.s1 img{transform:rotate(5deg)}.gbk-stuck.s2 img{transform:rotate(-3deg)}.gbk-stuck.s3 img{transform:rotate(8deg)}
.gbk-note{margin:16px 0 0;padding:0 4px}
.gbk-note blockquote{margin:0;font:400 25px/1.3 var(--scrawl);color:#203d42;overflow-wrap:anywhere}
.gbk-note figcaption{margin-top:3px;font:700 14px/1.4 var(--body-font);color:#93541f}
.gbk-note figcaption::before{content:"— "}
.gbk-note figcaption span{display:block;font-weight:600;color:#53676a}
.gbk-note figcaption span::before{content:none}
.gbk-photos{margin-top:22px}
.gbk-foot{display:flex;flex-wrap:wrap;gap:10px;margin-top:20px}
.gbk-foot .btn{flex:1 1 auto;justify-content:center;color:#203d42;background:#fffef8;border:1px solid #b9c4bd}
.gbk-empty{margin:30px 0;text-align:center;color:var(--ink-2)}
.stk-group{margin-top:26px}
.stk-group h3{margin:0 0 12px;font:700 13px/1.2 var(--body-font);letter-spacing:.16em;text-transform:uppercase;color:var(--ink-2)}
.stk-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(94px,1fr));gap:14px 6px;padding:16px 10px;background:#f6f0e2;border-radius:6px;box-shadow:0 2px 0 #d8cdb4}
.stk-cell{display:flex;flex-direction:column;align-items:center;gap:3px;min-height:44px;padding:2px;text-align:center;background:none;border:0;color:#203d42}
.stk-cell img{width:84px;height:84px;filter:drop-shadow(0 1.5px 1.5px #0004)}
.stk-name{font:700 14px/1.2 var(--body-font)}
.stk-when{font:600 12.5px/1.25 var(--body-font);color:#53676a}
.stk-cell.off img,.stk-detail.off img{filter:grayscale(1) contrast(.7);opacity:.33}
.stk-cell.off .stk-name{font-weight:600;color:#53676a}
.stk-new{margin-top:22px;padding:14px 12px 16px;background:#fff6d6;border:2px dashed #e0a93b;border-radius:8px;box-shadow:0 0 0 4px #fff6d6,0 3px 10px #e0a93b40}
.stk-new h3{margin:0 0 10px;font:700 13px/1.2 var(--body-font);letter-spacing:.16em;text-transform:uppercase;color:#93541f}
.stk-new-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:10px}
.stk-new-card{display:flex;align-items:center;gap:12px;min-height:44px;padding:8px 10px;text-align:left;background:#fffef8;border:0;border-radius:6px;box-shadow:0 2px 0 #ead9a6;color:#203d42}
.stk-new-card img{flex:0 0 auto;width:96px;height:96px;filter:drop-shadow(0 1.5px 1.5px #0004)}
.stk-new-words{display:flex;flex-direction:column;gap:3px;min-width:0}
.stk-new-card .stk-name{font-size:17px}
.stk-new-how{font:600 14px/1.35 var(--body-font);color:#203d42}
.stk-new-card.land{animation:stk-land .5s cubic-bezier(.2,1.5,.4,1) both}
.stk-new-card.land img{animation:stk-glow 2.4s ease-out .5s both}
@keyframes stk-glow{0%,100%{filter:drop-shadow(0 1.5px 1.5px #0004)}35%{filter:drop-shadow(0 0 10px #e0a93b) drop-shadow(0 1.5px 1.5px #0004)}}
@keyframes stk-land{from{opacity:0;transform:scale(1.7) rotate(-14deg)}to{opacity:1;transform:none}}
.stk-detail{text-align:center}
.stk-detail img{width:150px;height:150px;filter:drop-shadow(0 2px 3px #0005)}
.stk-detail p{margin:12px 0 0;font-size:17px;line-height:1.4;color:var(--ink)}
.stk-detail .stk-sub{margin-top:5px;font-size:15px;color:var(--ink-2)}
@media(max-width:600px){.gbk-cloth{padding:10px}.gbk-cover-art{object-fit:fill}.gbk-foil{padding:16px 12px 14px}.gbk-kicker{font-size:11px;letter-spacing:.14em}.gbk-foil h1{font-size:clamp(30px,8vw,36px);margin:4px 0 2px}.gbk-facts{margin:4px 0 0;font-size:12.5px;line-height:1.25}}
.gbk-people{list-style:none;margin:22px 0 0;padding:6px 18px;background:#f6f0e2;border-radius:3px;box-shadow:0 2px 0 #d8cdb4}
.gbk-people li+li{border-top:1px solid #d8cdb4}
.gbk-people button{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:2px 12px;width:100%;min-height:48px;padding:9px 0;text-align:left;background:none;border:0;color:#203d42}
.gbk-who{font:400 25px/1.15 var(--scrawl)}
.gbk-whats{font:600 14px/1.3 var(--body-font);color:#53676a}
@media(max-width:520px){.gbk-page{padding:22px 15px 16px}.gbk-cover{width:88px;height:68px}.gbk-title h3{font-size:27px}.gbk-head{gap:12px}}
/* Who an example recipe came from (v1.95.0) */
.dl a:has(+ .recipe-credit){border-bottom:0;padding-bottom:6px}
.dl .recipe-credit{margin:0;padding:0 2px 10px;font-size:13px;line-height:1.45;color:var(--ink-2)}

/* The booking and takeout companies' own app icons (v1.99.0, js/detail.js):
   rounded like an icon on a phone, a hairline so white ones keep an edge. */
.brand-logo{display:inline-block;flex:none;object-fit:cover;border-radius:22%;box-shadow:0 0 0 1px var(--paper-edge)}
.pickbtn .brand-logo.kind{width:34px;height:34px;padding:0;border:0;background:none}
.dl .brand-logo.dl-logo{width:22px;height:22px;margin-top:2px}
.book-btn .brand-logo.btn-logo{width:18px;height:18px}
.brand-strip{display:flex!important;gap:5px;margin-top:5px}
.brand-strip .brand-logo{width:18px;height:18px}

/* Visit card dates (v1.100.0): "Sun, Oct 25 – Thu, Oct 29, 2026 | 5 days".
   Wrap between the dates, never inside one. The "|" sits in the day
   count's left padding; .vd-line is pulled 1.4em left inside a clipped
   box, so when the count wraps to the start of a line its "|" falls in
   the clipped strip and only "5 days" shows. */
.visit-dates{display:block;overflow:hidden}
.visit-dates .vd-line{display:flex;flex-wrap:wrap;margin-left:-1.4em}
.visit-dates .vd-range,.visit-dates .vd-days{padding-left:1.4em}
.visit-dates .vd-range>span,.visit-dates .vd-days{white-space:nowrap}
.visit-dates .vd-days{position:relative}
.visit-dates .vd-days::before{content:"|";position:absolute;left:.5em;opacity:.7}
/* Languages (v1.102.0): "(in English)" beside the Terms and Privacy Policy links. */
.legal-en{white-space:nowrap}
/* The note on the translations (v1.103.0): a window for hosts, a quiet line at the foot of guest links. */
.lang-notice{margin:0;font-size:calc(15.5px*var(--text,1));line-height:1.55}
.lang-note{max-width:620px;margin:22px auto 0;text-align:center;font-size:13px;line-height:1.5;color:var(--ink-2)}
[data-backdrop] .lang-note{padding:8px 14px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:9px;box-shadow:var(--shadow-flat)}

/* Why a guest link needs a password: it carries the Wi-Fi (v1.104.1). */
.pass-why{margin-top:6px}
.pass-why:empty{display:none}

/* A favorite day's picture (v1.105.0): in the list of favorite days, and the
   fold-out of pictures in its form. */
.tpl-pick .kind{flex:none;width:52px;height:52px;border-radius:6px;overflow:hidden;display:grid;place-items:center;background:var(--paper);color:var(--navy);border:1px solid var(--paper-edge)}
.tpl-pick .kind.photo{padding:0}.tpl-pick .kind img{width:100%;height:100%;object-fit:cover}
.tpl-pick .kind svg{width:30px;height:30px}
.ef-own.tpl-pics{margin:12px 0 8px}
.ef-own.tpl-pics[open]{padding-bottom:12px}

/* v1.110.0 (the owner's requests): days always run one under another, never
   side by side, however wide the screen; and a small "Clear" beside every
   exact-time box (timeClearWire in js/state.js). */
.time-wrap{display:flex;flex-wrap:wrap;align-items:center;column-gap:10px}
.time-wrap>input{flex:1 1 150px;min-width:0}   /* too narrow for that, and Clear goes under it */
.time-clear{flex:none;padding:4px 2px;min-height:36px;font:inherit;font-size:calc(14px*var(--text,1));color:var(--navy);text-decoration:underline;text-underline-offset:3px;background:none;border:0;cursor:pointer}
.time-clear[hidden]{display:none}

/* Keeping to the content rules (v1.111.0, js/report.js). The Report link at
   the foot of a shared plan, its window, the Host Plan's notice and the
   owner's Reports and blocks section in the dashboard. */
.report-foot{margin:16px 0 0;text-align:center}
.report-foot .linkbtn{display:inline-flex;align-items:center;gap:6px;margin:0;min-height:44px;font-size:calc(13.5px*var(--text,1));color:var(--ink-2)}
.report-foot svg.i{width:16px;height:16px}
[data-backdrop] .report-foot .linkbtn{padding:6px 14px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:9px;box-shadow:var(--shadow-flat)}
.report-urgent{margin:0 0 14px;padding:11px 13px;border-left:4px solid var(--red);background:var(--manila);border-radius:5px;font-size:calc(14.5px*var(--text,1));line-height:1.5;font-weight:700}
.report-why{margin:0 0 12px;padding:0;border:0;display:grid;gap:7px}
.report-why legend{padding:0;margin-bottom:7px;font-weight:700;font-size:calc(14px*var(--text,1))}
.report-why .check{padding:10px 12px}
.mod-note{display:flex;align-items:flex-start;gap:10px;margin-top:14px;padding:12px 14px;border:1px solid var(--paper-edge);border-left:4px solid var(--red);border-radius:6px;background:var(--paper);line-height:1.5;font-size:calc(14.5px*var(--text,1))}
.mod-note svg.i{flex:none;margin-top:2px}
.dash-mod{padding-top:0}
#dashBody{padding-bottom:20px}
.mod-card input{width:100%;margin-top:9px}
.mod-row{display:flex;gap:8px;margin-top:9px}.mod-row input{flex:1;min-width:0;margin-top:0}
.mod-acts{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 6px}
.mod-facts{display:grid;grid-template-columns:auto 1fr;gap:4px 14px;margin:12px 0 4px;font-size:14px}
.mod-facts dt{font-weight:700;color:var(--ink-2)}.mod-facts dd{margin:0;overflow-wrap:anywhere}
.mod-table{width:100%;border-collapse:collapse;font-size:13.5px}
.mod-table th,.mod-table td{text-align:left;padding:7px 8px;border-bottom:1px solid var(--rule);vertical-align:top}
.mod-table .linkbtn{margin:0;padding:0 2px;font-size:13.5px}
.mod-what{overflow-wrap:anywhere;max-width:340px}
@media (max-width:700px){.mod-table thead{display:none}.mod-table tr{display:grid;grid-template-columns:1fr auto;padding:6px 0;border-bottom:1px solid var(--rule)}.mod-table td{border:0;padding:2px 0}}

/* Co-hosting (v1.113.0, js/cohost.js): the line under the visit's name in
   the Host Plan, and the Co-hosts window. */
.cohost-line{display:flex;align-items:center;gap:12px;width:100%;margin-top:14px;padding:12px 14px;text-align:left;background:var(--paper);border:1px solid var(--paper-edge);border-left:4px solid var(--navy);border-radius:6px;box-shadow:var(--shadow-flat);color:var(--ink);font:inherit;cursor:pointer}
.cohost-line>svg:first-child{flex:none;color:var(--navy)}
.cohost-line>span:not(.go){display:flex;flex-direction:column;gap:2px;min-width:0}
.cohost-line b{font-size:15px;line-height:1.35}
.cohost-line small{font-size:13px;line-height:1.4;color:var(--ink-2)}
.cohost-line .go{margin-left:auto;flex:none}
.cohost-line.has-problem{border-left-color:var(--amber)}
.cohost-line.has-problem small{color:var(--ink)}
.cohost-tag{background:var(--paper);border-style:solid;color:var(--navy)}
.cohost-list{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:8px}
.cohost-member{display:flex;align-items:center;gap:12px;padding:10px 12px;background:var(--paper);border:1px solid var(--paper-edge);border-radius:6px}
.cohost-member .kind{flex:none;display:grid;place-items:center;width:36px;height:36px;border-radius:50%;background:var(--manila);color:var(--navy)}
.cohost-member .cm-name{display:flex;flex-direction:column;flex:1;min-width:0;line-height:1.35}
.cohost-member .cm-name small{font-size:13px;color:var(--ink-2)}
.cohost-member .btn{flex:none}
.cohost-what{margin-top:12px}
.cohost-what summary{cursor:pointer;font-weight:600;padding:11px 0}
.cohost-what p{margin:4px 0 8px;line-height:1.5}
.linkbtn.danger-link{color:var(--red)}

/* Credits for the example photos under CC BY (v1.116.0, photoCreditsHTML):
   under a place's picture in its details, at the foot of the Host Plan and of
   a guest link. Small, like the soundtrack's credit. */
.photo-credit{margin:18px auto 0;max-width:640px;padding:0 16px;text-align:center;font-size:12.5px;line-height:1.45;color:var(--ink-2)}
.photo-credit a{color:inherit;text-decoration:underline;text-underline-offset:2px}
.sheet .photo-credit{margin:0 0 10px;padding:0;text-align:left}

/* Plans and the paywall (v1.121.0, js/plans.js). The window is a sheet with
   the porch as its picture: a Yearly / Monthly choice, the two plans side by
   side (the Most Host column on blue paper, the row that brought the host
   here on yellow), the always-free line, and the developer's note on lined
   paper. Colours are the theme tokens, so dark mode and stronger contrast
   follow by themselves. */
/* The paywall fits one screen (v1.121.4): compact sizes, all multiplied by
   --pwk, which paywallFit (js/plans.js) lowers until nothing scrolls. Two
   tables side by side from 780px wide; on a phone they stack as one. */
.pw-sheet{--pwk:1;padding-bottom:0}
.pw-sheet .sheet-head{position:relative;overflow:hidden;min-height:calc(118px*var(--pwk,1))}
.pw-sheet .sheet-head>div{position:relative;z-index:1;max-width:64%}
.pw-porch{position:absolute;top:0;right:0;bottom:0;width:62%;height:100%;object-fit:cover;object-position:70% 55%;-webkit-mask-image:linear-gradient(to right,transparent 0,#000 55%);mask-image:linear-gradient(to right,transparent 0,#000 55%);pointer-events:none}
.pw-sheet .sheet-head .icon-btn{position:absolute;top:6px;right:6px;z-index:2;color:#fff;background:rgba(20,28,36,.45);border-radius:50%}
.pw-sheet .sheet-head .icon-btn:hover{background:rgba(20,28,36,.6)}
.pw-sheet .sheet-head{padding:calc(16px*var(--pwk,1)) 22px calc(12px*var(--pwk,1))}
.pw-sheet .sheet-head h2{font-size:calc(27px*var(--pwk,1))}
.pw-sheet .sheet-head p{margin-top:2px;font-size:calc(16px*var(--pwk,1));line-height:1.35}
.pw-sheet .sheet-body{padding-top:calc(14px*var(--pwk,1))}
.pw-sheet .sheet-foot{position:sticky;bottom:0;z-index:2;background:var(--paper);padding-top:calc(12px*var(--pwk,1));padding-bottom:calc(env(safe-area-inset-bottom) + 12px)}
.pw-sheet .sheet-foot .btn{min-height:46px;padding:0 12px;white-space:nowrap;font-size:16px}
.pw-sheet .sheet-foot .btn.ghost{flex:0 0 auto;min-width:96px}
.pw{display:flex;flex-direction:column;gap:calc(10px*var(--pwk,1))}
.pw-period{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.pw-period button{position:relative;display:flex;align-items:center;justify-content:center;gap:8px;min-height:44px;padding:6px 10px;border:1px solid var(--field-edge,var(--paper-edge));border-radius:7px;background:var(--paper);color:var(--ink);cursor:pointer;transition:border-color var(--fx),box-shadow var(--fx)}
.pw-period button b{font-size:calc(16.5px*var(--pwk,1))}
.pw-period button span{font-size:calc(15.5px*var(--pwk,1));color:var(--ink-2)}
.pw-period button em{position:absolute;top:-9px;right:8px;padding:1px 7px;border-radius:999px;background:var(--mustard);color:#2a1d07;font-style:normal;font-size:13px;font-weight:700;transform:rotate(2deg)}
.pw-period button[aria-checked="true"]{border-color:var(--navy);box-shadow:inset 0 0 0 2px var(--navy);background:var(--blue-soft)}
.pw-period button:focus-visible{outline:3px solid var(--navy);outline-offset:2px}
.pw-table{width:100%;table-layout:fixed;border-collapse:separate;border-spacing:0;line-height:1.25}
.pw-table th,.pw-table td{padding:calc(6px*var(--pwk,1)) 6px;border-bottom:1px dashed var(--rule,var(--paper-edge));vertical-align:middle}
.pw-table thead th{width:calc(84px*var(--pwk,1));font:700 calc(17.5px*var(--pwk,1))/1.15 var(--display-font);text-align:center;border-bottom:1px solid var(--paper-edge);padding-top:calc(8px*var(--pwk,1))}
.pw-table thead th small{display:block;margin-top:2px;font:400 calc(13.5px*var(--pwk,1))/1.2 var(--body-font);color:var(--ink-2)}
.pw-table tbody th{text-align:left;font-weight:400;font-size:calc(18px*var(--pwk,1));color:var(--ink-2)}
.pw-table tbody th b{font-weight:700;color:var(--ink)}
.pw-table tbody th small{font-size:calc(16px*var(--pwk,1))}
.pw-table td{width:calc(84px*var(--pwk,1));text-align:center;white-space:nowrap;font-size:calc(15.5px*var(--pwk,1));color:var(--ink-2)}
.pw-table thead td{width:auto}
.pw-table .pw-most{background:var(--blue-soft);color:var(--ink);font-weight:600}
/* Words that need two lines in an 84px cell (v1.121.29: Type by hand / Automatic pull). */
.pw-table td.pw-wrap{white-space:normal;font-size:calc(14.5px*var(--pwk,1));line-height:1.15}
.pw-table thead .pw-most{border-radius:8px 8px 0 0;color:var(--navy)}
.pw-table tbody tr:last-child .pw-most{border-radius:0 0 8px 8px;border-bottom:0}
.pw-table tbody tr:last-child th,.pw-table tbody tr:last-child td{border-bottom:0}
.pw-table tr.is-why th,.pw-table tr.is-why td:not(.pw-most){background:color-mix(in srgb,var(--mustard) 22%,transparent)}
.pw-table tr.is-why th{box-shadow:inset 3px 0 0 var(--mustard)}
.pw-yes{display:inline-grid;place-items:center;width:calc(24px*var(--pwk,1));height:calc(24px*var(--pwk,1));border-radius:50%;background:var(--navy);color:var(--accent-ink)}
.pw-yes svg{width:calc(15px*var(--pwk,1));height:calc(15px*var(--pwk,1))}
.pw-no{color:var(--ink-3);font-size:calc(18px*var(--pwk,1))}
@media(min-width:780px){
  .pw-sheet{max-width:900px}
  .pw-tables{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:start}
}
/* Your plan, for someone already on Most Host (v1.121.16, the owner's call):
   no table to fit, so about half the width. */
.pw-sheet.pw-mine{max-width:480px}
@media(max-width:779px){
  /* One table to the eye: the second one's heading is for screen readers. */
  .pw-table+.pw-table thead :is(th,td){height:0;padding-top:0;padding-bottom:0;border:0;font-size:0;line-height:0;overflow:hidden}
  .pw-table+.pw-table thead .pw-most{border-radius:0}
  .pw-table+.pw-table thead small{display:none}
  .pw-table:first-child tbody tr:last-child .pw-most{border-radius:0}
  .pw-table:first-child tbody tr:last-child th,.pw-table:first-child tbody tr:last-child td{border-bottom:1px dashed var(--rule,var(--paper-edge))}
}
@media(max-width:560px){
  .pw-sheet{max-height:calc(100dvh - var(--top-safe,0px) - 2px)}
  .pw-sheet .sheet-head{min-height:0;padding:calc(12px*var(--pwk,1)) 18px calc(9px*var(--pwk,1))}
  .pw-sheet>.grabber{display:none}
  .pw-sheet .sheet-body{padding:calc(12px*var(--pwk,1)) 16px 0}
  .pw-sheet .sheet-foot{padding:calc(10px*var(--pwk,1)) 16px calc(env(safe-area-inset-bottom) + 10px)}
  .pw-table th,.pw-table td{padding-left:4px;padding-right:4px}
  .pw-sheet .sheet-head h2{font-size:calc(24px*var(--pwk,1))}
  .pw-sheet .sheet-head p{font-size:calc(15px*var(--pwk,1))}
  .pw{gap:calc(8px*var(--pwk,1))}
  .pw-table th,.pw-table td{padding-top:calc(4px*var(--pwk,1));padding-bottom:calc(4px*var(--pwk,1))}
  .pw-table td,.pw-table thead th{width:calc(80px*var(--pwk,1))}
  .pw-table tbody th small{font-size:calc(14px*var(--pwk,1))}
  .pw-small{font-size:calc(14.5px*var(--pwk,1))}
}
.pw-love{display:flex;gap:12px;align-items:flex-start;padding:calc(8px*var(--pwk,1)) 12px calc(10px*var(--pwk,1));border-radius:6px;background:var(--manila);border:1px solid var(--paper-edge)}
.pw-sign{white-space:nowrap;line-height:1}
.pw-love img{flex:none;width:calc(40px*var(--pwk,1));height:calc(40px*var(--pwk,1));border-radius:9px;background:var(--navy);padding:4px;margin-top:5px}
/* The ruled lines are drawn on the note itself, one under each line of
   writing (1lh). Every note lies flat and its line height is a whole number of
   pixels (v1.127.2, the owner's catch): tilted, a 1px rule breaks into steps,
   and a line of 27.35px puts each rule a different distance off the pixel
   grid, so some look thick, some thin and some broken. round() keeps it whole
   while the paywall shrinks its words to fit (--pwk); a browser without it
   keeps the plain px. The heart is kept from stretching its line (.pw-sign). */
.pw-love p{margin:0;font:600 calc(20px*var(--pwk,1))/27px var(--scrawl);color:var(--ink);
  line-height:round(calc(27px*var(--pwk,1)),1px);
  background-image:linear-gradient(to bottom,transparent calc(100% - 4px),color-mix(in srgb,var(--navy) 22%,transparent) calc(100% - 4px) calc(100% - 3px),transparent calc(100% - 3px));
  background-size:100% 27px;background-size:100% 1lh;background-repeat:repeat-y}
.pw-small{margin:0;font-size:calc(16px*var(--pwk,1));line-height:1.4}
.pw-go{flex:1}
@media(max-width:560px){.pw-love img{display:none}.pw-love{padding:calc(6px*var(--pwk,1)) 10px calc(7px*var(--pwk,1))}.pw-love p{font-size:calc(22px*var(--pwk,1));line-height:30px;line-height:round(calc(30px*var(--pwk,1)),1px)}}

/* The little "Most Host" tag on locked covers, backgrounds and app icons. */
.mh-chip{display:inline-block;padding:2px 7px;border-radius:999px;background:var(--navy);color:var(--accent-ink);font-size:11.5px;font-weight:700;line-height:1.4;white-space:nowrap;vertical-align:middle}
.cover-choice,.bd-choice,.app-icon-style{position:relative}
.cover-choice .mh-chip,.bd-choice .mh-chip,.app-icon-style .mh-chip{position:absolute;top:9px;right:9px;display:inline-block;min-height:0;padding:2px 7px;-webkit-line-clamp:unset;overflow:visible;box-shadow:0 1px 3px rgba(0,0,0,.25)}
.app-icon-style .mh-chip{top:3px;right:3px;font-size:10.5px;padding:1px 6px}
.cover-choice.is-locked img,.bd-choice.is-locked .bd-mini,.app-icon-style.is-locked .app-icon-thumb{filter:saturate(.75);opacity:.82}
.cover-choice.is-locked[aria-pressed="true"] img,.bd-choice.is-locked[aria-pressed="true"] .bd-mini{filter:none;opacity:1}
.drawer nav button.pm-plan{background:var(--blue-soft);color:var(--navy)}
.drawer nav button.pm-plan:hover{background:color-mix(in srgb,var(--navy) 18%,var(--blue-soft))}
.pp-row{display:flex;align-items:center;gap:10px}
.plan-chipline .mh-chip{margin-left:6px}
/* A one-time tip after Not now (v1.122.0, js/plans.js) */
.tip{display:grid;gap:14px}
/* The tip windows' and About's notes keep one size and never shrink to fit
   (v1.122.1). */
.tip-sheet .pw-love p,.about-sheet .pw-love p{font-size:21px;line-height:28px}
.tip-five{width:100%;justify-content:center;font-size:calc(17px*var(--text,1));padding:13px 16px}
.tip-own{margin:0}
.tip-own-row{display:flex;align-items:center;gap:8px}
.tip-dollar{font-weight:700;font-size:calc(18px*var(--text,1));color:var(--ink-2)}
.tip-own-row input{flex:1;min-width:0;max-width:160px}
.tip-own .hint.tip-warn{color:var(--amber);font-weight:700;margin-top:6px}
.tip-small{margin:0}
.tip-sheet .sheet-foot .btn.wide{flex:1}

/* Which copy to keep (v1.122.2, js/refresh.js) */
.copy-pick{display:grid;grid-template-columns:1fr;gap:9px;margin-bottom:10px}
@media (min-width:480px){.copy-pick{grid-template-columns:1fr 1fr}}
.copy-box{background:var(--surface);border:1px solid var(--paper-edge);border-radius:8px;padding:10px 12px;min-width:0;overflow-wrap:anywhere}
.copy-h{font-size:12px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2);margin-bottom:4px}
.copy-n{font-weight:700;color:var(--ink)}

/* Cancelling, and the offer to stay first (v1.123.0, js/plans.js) */
.stay-cancel{margin:14px auto 0;color:var(--ink-2)}
.stay-offer{display:grid;gap:14px}
.stay-deal{background:var(--surface);border:1px solid var(--paper-edge);border-radius:8px;padding:12px 14px;text-align:center}
.stay-deal h3{margin:4px 0 6px;font-size:calc(18px*var(--text,1))}
.stay-deal p{margin:0;color:var(--ink-2);font-size:calc(15px*var(--text,1));line-height:1.45}
.stay-price{display:flex;justify-content:center;align-items:baseline;gap:8px;color:var(--ink)}
.stay-price s{color:var(--ink-2);font-size:calc(17px*var(--text,1))}
.stay-price b{font:700 calc(34px*var(--text,1))/1.1 var(--display-font);color:var(--navy)}
.stay-price span{color:var(--ink-2);font-size:calc(15px*var(--text,1))}
.stay-yes{width:100%;justify-content:center;font-size:calc(17px*var(--text,1));padding:13px 16px}
/* Extra visits for bringing people in (v1.124.0, js/referrals.js) */
.ref-hint{display:flex;gap:8px;align-items:flex-start;margin-top:10px;color:var(--ink-2)}
.ref-hint svg{flex:none;width:20px;height:20px;margin-top:1px}
.pw-refer .linkbtn{display:inline;margin:0 0 0 4px;padding:0;font-size:inherit}

/* Upgrade, left of the profile picture (v1.125.0): a small gold paper tab
   with the Most Host star. On phones the star goes and the wordmark shrinks a little, so the bar still fits. */
.upgrade-btn{flex:none;display:inline-flex;align-items:center;gap:5px;height:34px;padding:0 11px 0 8px;margin-left:2px;border-radius:999px;border:1px solid #c98f1f;background:#f7d27a;color:#3b2a06;font-size:13.5px;font-weight:800;letter-spacing:.01em;white-space:nowrap;box-shadow:0 2px 0 #c98f1f;transition:transform var(--fx),filter var(--fx)}
.upgrade-btn:hover{filter:brightness(1.04);transform:translateY(-1px)}.upgrade-btn:active{transform:translateY(1px);box-shadow:none}
.upgrade-btn img{width:18px;height:18px;object-fit:contain}
.upgrade-btn[hidden]{display:none}
@media(max-width:440px){.upgrade-btn{height:32px;padding:0 10px;font-size:12.5px}.upgrade-btn img{display:none}
 .topbar.has-upgrade{gap:6px}.topbar.has-upgrade .brand{font-size:20px;gap:6px}.topbar.has-upgrade .brand-logo{width:34px;height:34px}.topbar.has-upgrade .icon-btn{min-width:36px;width:36px}}
@media(max-width:380px){.upgrade-btn{padding:0 9px;font-size:12px}.topbar.has-upgrade{gap:5px}.topbar.has-upgrade .brand-logo{width:32px;height:32px}.topbar.has-upgrade .icon-btn{min-width:34px;width:34px}}
@media(max-width:340px){.upgrade-btn{padding:0 8px}.topbar.has-upgrade{gap:4px;padding-left:8px;padding-right:8px}.topbar.has-upgrade .brand{font-size:17px;gap:5px}.topbar.has-upgrade .brand-logo{width:30px;height:30px}}

/* "Are you a person?" (v1.130.0, js/support.js): Cloudflare draws the box
   only if it wants a tick, so the place for it takes no room until then. */
.human-box{width:100%;min-width:0}
.human-box:has(iframe){margin:8px 0}

/* The age tick on Create your account (v1.131.0) */
.age-tick{margin:0 0 12px}.age-tick[hidden]{display:none}

/* The register of privacy incidents (v1.133.0, js/incidents.js) */
.inc-form{border-top:1px solid var(--paper-edge);margin:12px 0 18px;padding-top:12px}.inc-form h4{margin:0 0 10px;font:700 17px/1.3 var(--display-font)}
.inc-field{margin:0 0 12px}.inc-field input,.inc-field select,.inc-field textarea{width:100%}.inc-field .dv-what{margin:4px 0 0}

/* "+1 visit" on the Visits tab's airplane (v1.139.0): a pill while inviting a
   friend can still earn a free visit. Quieter than the gold Upgrade beside it:
   paper with a navy edge. At 360px and under with Upgrade showing, only "+1" is left
   beside the airplane, so the two pills and the wordmark still fit. */
#btnInvite.invite-pill{min-width:0;width:auto;height:34px;gap:5px;padding:0 11px 0 8px;border-radius:999px;border:1px solid var(--navy);background:var(--paper);color:var(--navy);font-size:13.5px;font-weight:800;letter-spacing:.01em;white-space:nowrap}
#btnInvite.invite-pill:hover{background:var(--manila)}
#btnInvite.invite-pill svg{width:19px;height:19px}
.invite-word[hidden]{display:none}
@media(max-width:440px){.topbar #btnInvite.invite-pill{min-width:0;width:auto;height:32px;padding:0 9px 0 7px;font-size:12.5px}}
@media(max-width:360px){.topbar.has-upgrade #btnInvite.invite-pill{padding:0 8px 0 6px;gap:3px;margin-right:4px}.topbar.has-upgrade #btnInvite.invite-pill .invite-word{font-size:0}.topbar.has-upgrade #btnInvite.invite-pill .invite-word::after{content:"+1";font-size:12.5px}}
/* The invite window's heading (v1.139.0): the Host Plan's picture, cropped to
   the house and its path, behind the paywall's fade and corner X. */
.invite-sheet .pw-porch.invite-porch{object-position:55% 50%}
.invite-sheet .sheet-head>div{max-width:66%}
