.couple-shell,.couple-screen{position:absolute;inset:0;min-height:0;background:var(--bg);color:var(--ink)}
.couple-screen{display:none;flex-direction:column;overflow:hidden}.couple-screen.active{display:flex}
#couple-home-body,#couple-select-body,#couple-form-body{flex:1;min-height:0;display:flex;flex-direction:column;overflow:hidden}
.couple-scroll{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;padding-bottom:calc(18px + var(--sab));overscroll-behavior:contain}
.couple-link{width:28px;height:56px;border-radius:50%;color:var(--ink2);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.couple-link::after{content:'♡';font-size:18px;line-height:1;color:var(--ink2-soft,var(--ink2))}
.couple-content{padding:10px 16px 0;display:flex;flex-direction:column;gap:14px}
.couple-legacy-note{margin:0 16px 4px;padding:12px 14px;border-radius:16px;background:var(--surface);border:.5px solid var(--border)}.couple-content .couple-legacy-note{margin:0}.couple-legacy-note p{margin:0 0 6px;font-size:13px;line-height:1.55;color:var(--ink)}
.couple-section{background:var(--bg);border:none;border-radius:var(--r);padding:14px;box-shadow:var(--shadow)}
.couple-note-preview{border-radius:16px;background:var(--surface);box-shadow:0 1px 2px rgba(80,100,120,.04),0 6px 18px rgba(120,140,160,.08);padding:12px 14px;font-size:13.5px;line-height:1.55;color:var(--ink2)}
.wish-mini,.task-row,.note-row,.memory-mini{display:flex;align-items:flex-start;gap:9px;padding:9px 0;border-bottom:1px solid color-mix(in srgb,var(--border) 72%,transparent)}.wish-mini:last-child,.task-row:last-child,.note-row:last-child,.memory-mini:last-child{border-bottom:none}.wish-mini button,.task-row button,.note-row button{border:none;background:var(--surface-alt);color:var(--ink2);border-radius:12px;padding:6px 8px;font-family:inherit;font-size:12px}
.wish-mini b{display:block;font-size:13.5px;font-weight:600;color:var(--ink)}.wish-mini em{display:block;margin-top:2px;font-size:11.5px;font-style:normal;color:var(--ink2)}.wish-mini .done{color:var(--ink2)}.wish-mini.is-done{opacity:.78}.mini-dot{width:8px;height:8px;border-radius:50%;background:var(--pri);flex-shrink:0}.mini-dot.alt{background:var(--period-ovulation)}.mini-dot.soft{background:var(--green)}
.timeline{padding:0 4px}
.couple-empty{margin:16px;background:var(--bg);border:none;border-radius:20px;padding:20px;text-align:center;box-shadow:var(--shadow)}.couple-empty svg{width:44px;height:44px;color:var(--ink2-soft,var(--ink2));margin-bottom:10px}.couple-empty h2{font-size:17px;margin-bottom:6px}.couple-empty p{font-size:13px;line-height:1.5;color:var(--ink2)}.couple-empty button,.couple-primary{margin-top:12px;border:none;border-radius:14px;background:var(--pri-pale);color:var(--accent-text);font-family:inherit;font-weight:700;padding:10px 14px}
.couple-onboarding{min-height:calc(100% - 50px);padding:52px 28px 24px;text-align:center;display:flex;flex-direction:column;align-items:center}.couple-onboarding h1{font-family:var(--font-display);font-size:24px;line-height:1.18;font-weight:600;letter-spacing:0;margin:0 0 14px;color:var(--ink)}.couple-onboarding p{font-size:14px;line-height:1.75;color:var(--ink2);margin:0}.couple-onboarding span{margin-top:12px;font-size:12px;color:var(--ink2)}
.couple-onboard-page h1,.couple-onboard-empty h1,.couple-onboard-confirm h1{font-family:var(--font-display);font-size:24px;line-height:1.18;font-weight:600;letter-spacing:0;margin:0;color:var(--ink)}.couple-onboard-confirm{min-height:calc(100% - 48px);padding:34px 22px 22px;text-align:center;display:flex;flex-direction:column;align-items:center}.couple-onboard-confirm h1{max-width:260px;margin-bottom:26px;font-size:25px}.couple-first-day{width:100%;display:flex;flex-direction:column;align-items:center;gap:10px}.couple-first-day h2{font-family:var(--font-display);font-size:18px;line-height:1.32;font-weight:500;letter-spacing:0;color:var(--ink);margin:0 0 4px}.couple-first-day p{font-size:12.5px;line-height:1.55;color:var(--ink2);margin:2px 0 8px}.couple-date-card{width:min(220px,100%);border:none;border-radius:24px;background:var(--bg);box-shadow:var(--shadow-in);color:var(--ink);font-family:inherit;padding:14px 14px 12px;display:grid;grid-template-columns:1fr auto;grid-template-areas:"year icon" "day icon" "week icon";align-items:center;text-align:center}.couple-date-card span{grid-area:year;font-size:13px;color:var(--ink2);font-weight:700}.couple-date-card b{grid-area:day;font-family:var(--font-display);font-size:28px;line-height:1.18;font-weight:600}.couple-date-card em{grid-area:week;font-size:13px;color:var(--ink2);font-style:normal}.couple-date-card i{grid-area:icon;display:flex;color:var(--ink2-soft,var(--ink2))}.couple-calendar{width:100%;padding-top:8px;border-top:1px solid var(--border);animation:coupleCalIn .18s ease-out}.couple-cal-head{height:34px;display:grid;grid-template-columns:38px 1fr 38px;align-items:center}.couple-cal-head button{border:none;background:transparent;color:var(--ink2);display:flex;align-items:center;justify-content:center}.couple-cal-head b{font-size:14px;color:var(--ink);font-weight:800}.couple-week-row,.couple-cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px}.couple-week-row span{font-size:11px;color:var(--ink2);font-weight:800;padding:5px 0}.couple-cal-grid button,.couple-cal-grid .cal-empty{aspect-ratio:1;border:none;border-radius:999px;background:transparent;color:var(--ink);font-family:inherit;font-size:13px}.couple-cal-grid button{position:relative}.couple-cal-grid button.today:not(.selected)::after{content:"";position:absolute;left:50%;bottom:4px;width:4px;height:4px;border-radius:50%;background:var(--ink2-soft,var(--ink2));transform:translateX(-50%)}.couple-cal-grid button.selected{background:var(--pri-pale);color:var(--ink);box-shadow:var(--shadow-in);font-weight:900}.couple-cal-grid button:disabled{color:var(--ink2-soft,var(--ink2));opacity:.38}.couple-today-btn{align-self:center;border:none;background:transparent;color:var(--ink);font-family:inherit;font-weight:800;font-size:12px;padding:8px 12px;margin-top:2px}.couple-onboard-confirm .couple-primary{min-width:188px;margin-top:6px}@keyframes coupleCalIn{from{opacity:.3;transform:translateY(-4px)}to{opacity:1;transform:translateY(0)}}@media(prefers-reduced-motion:reduce){.couple-calendar{animation:none}}
.couple-form-body{flex:1;min-height:0;overflow-y:auto;padding:14px;padding-bottom:calc(20px + var(--sab));display:flex;flex-direction:column;gap:10px}.couple-field{display:flex;flex-direction:column;gap:6px}.couple-field span{font-size:12px;color:var(--ink2);font-weight:600}.couple-field input,.couple-field textarea,.couple-field select{border:none;background:var(--bg);box-shadow:var(--shadow-in);color:var(--ink);border-radius:14px;padding:11px 12px;font-family:inherit;font-size:14px;outline:none}.couple-field textarea{min-height:140px;resize:vertical}.couple-actions{display:flex;gap:8px;margin-top:4px}.couple-actions button{flex:1;border:none;border-radius:14px;padding:11px 10px;font-family:inherit;font-weight:700}.couple-actions .ghost{background:var(--surface-alt);color:var(--ink2)}.couple-actions .danger{background:var(--coral-soft);color:var(--coral-text)}
.couple-calendar{position:fixed;z-index:60;width:min(340px,calc(100vw - 40px));max-width:calc(100vw - 40px);padding:12px 14px 10px;border:1px solid var(--border);border-radius:24px;background:color-mix(in srgb,var(--bg) 94%,transparent);box-shadow:0 18px 42px rgba(46,62,80,.18),var(--shadow);animation:coupleCalIn .16s ease-out}.couple-cal-head{height:36px;display:flex;align-items:center;justify-content:center;gap:18px}.couple-cal-head button{width:40px;height:40px;border:none;background:transparent;color:var(--ink2);display:flex;align-items:center;justify-content:center}.couple-cal-head b{min-width:128px;font-size:14px;color:var(--ink);font-weight:800;text-align:center}.couple-week-row,.couple-cal-grid{display:grid;grid-template-columns:repeat(7,36px);justify-content:center;gap:2px}.couple-week-row{margin-top:2px}.couple-week-row span{font-size:10.5px;color:var(--ink2);font-weight:800;padding:4px 0}.couple-cal-grid button,.couple-cal-grid .cal-empty{width:36px;height:34px;border:none;border-radius:999px;background:transparent;color:var(--ink);font-family:inherit;font-size:12.5px}.couple-cal-grid button{position:relative}.couple-cal-grid button.today:not(.selected)::after{content:"";position:absolute;left:50%;bottom:3px;width:4px;height:4px;border-radius:50%;background:var(--ink2-soft,var(--ink2));transform:translateX(-50%)}.couple-cal-grid button.selected{background:var(--pri-pale);color:var(--ink);box-shadow:var(--shadow-in);font-weight:900}.couple-cal-grid button:disabled{color:var(--ink2-soft,var(--ink2));opacity:.38}.couple-today-btn{align-self:center;border:none;background:transparent;color:var(--ink);font-family:inherit;font-weight:800;font-size:12px;padding:7px 12px;margin-top:6px}@keyframes coupleCalIn{from{opacity:.2;transform:translateY(4px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}@media(max-width:370px){.couple-calendar{padding-left:10px;padding-right:10px}.couple-week-row,.couple-cal-grid{grid-template-columns:repeat(7,34px)}}@media(prefers-reduced-motion:reduce){.couple-calendar{animation:none}}
.couple-settings{gap:18px}.couple-settings-hero{text-align:center;padding:10px 0 4px}.couple-settings-hero h1{font-family:var(--font-display);font-size:23px;line-height:1.2;margin:0;color:var(--ink)}.couple-settings-hero p{font-size:13px;color:var(--ink2);margin-top:5px}.couple-settings-group{display:flex;flex-direction:column;gap:2px}.couple-settings-group h3{font-size:12px;color:var(--ink2);font-weight:800;margin:0 2px 6px}.settings-row{width:100%;min-height:48px;border:none;background:transparent;border-radius:14px;padding:10px 2px;display:grid;grid-template-columns:auto minmax(0,1fr) 18px;align-items:center;gap:10px;text-align:left;color:var(--ink);font-family:inherit}.settings-row:active{background:var(--surface-alt)}.settings-row span{font-size:14px}.settings-row b{min-width:0;justify-self:end;display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink2);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.settings-row i{display:flex;color:var(--ink2-soft,var(--ink2))}.style-thumb{width:28px;height:20px;border-radius:8px;background:linear-gradient(135deg,var(--pri-pale),var(--bg));box-shadow:var(--shadow-in);flex:0 0 auto}.style-preview{display:block;height:76px;border-radius:14px;margin-bottom:8px;box-shadow:var(--shadow-in)}.style-preview.paper{background:linear-gradient(135deg,var(--pri-pale),var(--bg))}.style-preview.dusk{background:linear-gradient(135deg,#d8dde8,#f2e2d4)}
.couple-choice{border:none;background:var(--bg);border-radius:18px;padding:12px;box-shadow:var(--shadow);display:flex;align-items:center;gap:10px;text-align:left;color:var(--ink);font-family:inherit}.couple-choice b{display:block;font-size:14px}.couple-choice span{font-size:12px;color:var(--ink2)}
.mood-options{display:flex;flex-wrap:wrap;gap:7px}.mood-options button{border:none;border-radius:999px;background:var(--bg);box-shadow:var(--shadow-in);color:var(--ink2);padding:7px 13px;font-family:inherit;font-size:12.5px;font-weight:600}.mood-options button.active{background:var(--pri-pale);box-shadow:var(--shadow),inset 0 0 0 1.5px var(--pri-deep);color:var(--accent-text)}
.mood-more-toggle{align-self:flex-start;border:none;background:none;color:var(--accent-text);font-family:inherit;font-size:12px;font-weight:600;padding:2px 0;cursor:pointer}
.mood-today-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-bottom:6px}
.mood-today-card{background:var(--bg);box-shadow:var(--shadow);border-radius:16px;padding:14px;display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px}
.mood-today-card.readonly{opacity:.92}
.mood-today-card b{font-size:12.5px;color:var(--ink2);font-weight:600}
.mood-today-val{font-size:15px;font-weight:700;color:var(--accent-text)}
.mood-today-card p{font-size:11.5px;color:var(--ink2);line-height:1.4}
.mood-field-title{font-size:12px;font-weight:600;color:var(--ink2);margin-top:6px}
.mood-timeline{display:flex;flex-direction:column;gap:8px}
.mood-timeline-row{display:flex;align-items:baseline;gap:7px;font-size:12.5px;color:var(--ink2);padding:8px 0;border-bottom:.5px solid color-mix(in srgb,var(--border) 72%,transparent)}
.mood-timeline-row:last-child{border-bottom:none}
.mood-timeline-row b{color:var(--ink);font-weight:600;flex-shrink:0}
.mood-timeline-row em{font-style:normal;color:var(--ink2);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mood-timeline-row time{margin-left:auto;font-size:11px;color:var(--ink2);flex-shrink:0}
.note-author{display:inline-block;font-size:11px;font-weight:700;color:var(--accent-text);margin-right:6px}
@media(max-width:390px){.quick-row{grid-template-columns:repeat(2,1fr)}.couple-content{padding-left:12px;padding-right:12px}}
/* 设置 / 今天的心情 / 碎碎念: flat --surface cards with hairline dividers, like the home page */
.couple-field input,.couple-field textarea{background:var(--surface);box-shadow:none;border:1px solid var(--border)}
.couple-actions button{min-height:46px;border-radius:12px;cursor:pointer}.couple-actions .ghost{background:var(--surface);border:1px solid var(--border);color:var(--ink)}.couple-actions .couple-primary{margin-top:0;background:var(--pri);color:var(--on-pri,#fff)}
.couple-set-group{background:var(--surface);border-radius:18px;box-shadow:0 1px 2px rgba(80,100,120,.04),0 6px 18px rgba(120,140,160,.08);overflow:hidden}
.couple-set-row{width:100%;min-height:56px;border:none;background:transparent;padding:12px 16px;display:grid;grid-template-columns:22px minmax(0,1fr) auto 16px;align-items:center;gap:12px;text-align:left;color:var(--ink);font-family:inherit;cursor:pointer}.couple-set-row+.couple-set-row{border-top:1px solid var(--border)}.couple-set-row:active{background:var(--surface-alt)}
.couple-set-row>svg{width:20px;height:20px;color:var(--ink2)}.couple-set-row>svg:last-child{width:16px;height:16px}
.couple-set-row b{display:block;font-size:14.5px;font-weight:500}.couple-set-row em{display:block;margin-top:3px;font-style:normal;font-size:12px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.couple-set-val{min-width:0;max-width:150px;display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--ink2)}.couple-set-val>span:last-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.couple-settings-group h3{font-size:15px;font-weight:700;color:var(--ink);margin:0 4px 10px}
.mood-today-grid{gap:0;margin-bottom:4px;padding:16px 0;background:var(--surface);border-radius:18px;box-shadow:0 1px 2px rgba(80,100,120,.04),0 6px 18px rgba(120,140,160,.08)}
.mood-today-card{background:transparent;box-shadow:none;border-radius:0;padding:4px 12px;gap:6px}.mood-today-card+.mood-today-card{border-left:1px solid var(--border)}
.mood-today-card b{font-size:14px;color:var(--ink)}.mood-today-val{font-size:13.5px;font-weight:500}
.mood-options{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}.mood-options button{border-radius:12px;background:var(--surface);box-shadow:none;border:1px solid var(--border);padding:11px 4px;font-size:14px;color:var(--ink);cursor:pointer}
.mood-more-toggle{align-self:flex-end;display:flex;align-items:center;gap:4px;font-weight:500}.mood-more-toggle svg{width:14px;height:14px;transform:rotate(90deg)}.mood-more-toggle.is-open svg{transform:rotate(-90deg)}
.couple-empty-card{display:flex;flex-direction:column;align-items:center;gap:10px;padding:26px 16px;border-radius:18px;background:var(--surface);box-shadow:0 1px 2px rgba(80,100,120,.04),0 6px 18px rgba(120,140,160,.08);color:var(--ink2);font-size:13.5px}.couple-empty-card svg{width:38px;height:38px;color:var(--ink2);stroke-width:1.2}
/* 情侣空间首页 (docs/COUPLE_SPACE_REDESIGN.md): the blurred background shows through glass cards; the only warm colours are the three
   --couple-* variables (我们的颜色, set per space on .couple-shell); everything else is the theme's ink and surface, so dark mode follows */
.couple-shell{--couple-accent:#F7C6D0;--couple-accent-deep:#B65E76;--couple-paper:#FFF1F4;--couple-companion:#D6E2F5;--couple-mix:#fff;--couple-fade:100%;--couple-on-paper:color-mix(in srgb,var(--couple-accent-deep) 45%,#3a3a3a);--couple-glass:color-mix(in srgb,var(--surface) 52%,transparent);--couple-glass-line:color-mix(in srgb,var(--surface) 78%,transparent)}
#couple-home-body{position:relative}
.couple-bg{position:absolute;inset:0;overflow:hidden;z-index:0;background:var(--bg)}
/* 默认背景: 我们的颜色 (accent + companion) washed over the paper; it does not move while the page scrolls. Dark mode: the same
   wash mixed with the theme's dark ground at about half strength. A photo / the desktop wallpaper is painted on .couple-bg-layer instead. */
.couple-bg[data-mode="default"]{background:
  radial-gradient(70% 34% at 12% 6%,color-mix(in srgb,color-mix(in srgb,var(--couple-accent) 75%,var(--couple-mix)) var(--couple-fade),transparent) 0%,transparent 70%),
  radial-gradient(60% 30% at 95% 22%,color-mix(in srgb,color-mix(in srgb,var(--couple-companion) 90%,var(--couple-mix)) var(--couple-fade),transparent) 0%,transparent 72%),
  radial-gradient(80% 30% at 20% 58%,color-mix(in srgb,color-mix(in srgb,var(--couple-companion) 70%,var(--couple-mix)) var(--couple-fade),transparent) 0%,transparent 70%),
  radial-gradient(70% 30% at 90% 80%,color-mix(in srgb,color-mix(in srgb,var(--couple-accent) 60%,var(--couple-mix)) var(--couple-fade),transparent) 0%,transparent 70%),
  linear-gradient(180deg,var(--couple-ground-top,var(--couple-paper)) 0%,var(--couple-ground-bottom,color-mix(in srgb,var(--couple-companion) 35%,#fff)) 100%)}
.couple-bg[data-mode="default"]::after{content:none}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell{--couple-mix:var(--bg);--couple-fade:45%;--couple-ground-top:color-mix(in srgb,var(--couple-paper) 10%,var(--bg));--couple-ground-bottom:color-mix(in srgb,var(--couple-companion) 14%,var(--bg))}}
:root[data-theme="dark"] .couple-shell{--couple-mix:var(--bg);--couple-fade:45%;--couple-ground-top:color-mix(in srgb,var(--couple-paper) 10%,var(--bg));--couple-ground-bottom:color-mix(in srgb,var(--couple-companion) 14%,var(--bg))}
/* no picture: a gradient circle with a serif initial */
.couple-initial{width:100%;height:100%;border-radius:50%;display:grid;place-items:center;font-family:var(--font-display);font-weight:500;color:#fff;text-shadow:0 1px 3px color-mix(in srgb,var(--couple-accent-deep) 70%,transparent),0 0 1px color-mix(in srgb,var(--couple-accent-deep) 60%,transparent);line-height:1}
.couple-initial.is-me{background:linear-gradient(150deg,color-mix(in srgb,var(--couple-accent) 60%,#fff),var(--couple-accent))}
.couple-initial.is-ta{background:linear-gradient(150deg,color-mix(in srgb,var(--couple-companion) 70%,#fff),color-mix(in srgb,var(--couple-companion) 60%,var(--couple-accent-deep)))}
.couple-pair-av .couple-initial{font-size:30px}.couple-mini-av .couple-initial,.couple-check .couple-initial{font-size:12px}
.couple-pair-av:has(.couple-initial){border-color:#fff}.couple-bg-layer{position:absolute;inset:0;background-position:center;background-repeat:no-repeat}
.couple-bg::after{content:'';position:absolute;inset:0;background:linear-gradient(180deg,color-mix(in srgb,var(--couple-paper) 35%,transparent),transparent 40%)}
.couple-home{position:relative;z-index:1;padding:calc(10px + env(safe-area-inset-top,0px)) 0 calc(24px + var(--sab))}
.couple-glass,.couple-glass-btn{background:var(--couple-glass);-webkit-backdrop-filter:blur(16px) saturate(150%);backdrop-filter:blur(16px) saturate(150%);border:1px solid var(--couple-glass-line);box-shadow:0 10px 26px rgba(60,85,125,.12)}
.couple-topbar{display:flex;justify-content:space-between;padding:0 16px}.couple-glass-btn{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;color:var(--ink);cursor:pointer}.couple-glass-btn svg{width:19px;height:19px}
.couple-hero{text-align:center;padding:4px 16px 20px}
.couple-pair{position:relative;width:220px;height:104px;margin:0 auto}.couple-pair-av{position:absolute;top:8px;left:30px;width:88px;height:88px;border-radius:50%;border:3px solid color-mix(in srgb,var(--surface) 92%,transparent);background:var(--surface-alt);box-shadow:0 8px 20px rgba(60,85,125,.18);display:grid;place-items:center;font-family:var(--font-display);font-size:26px;color:var(--ink)}.couple-pair-av+.couple-knot+.couple-pair-av{left:auto;right:30px}
.couple-pair-av img{width:100%;height:100%;border-radius:50%;object-fit:cover}.couple-pair-av .avatar-placeholder svg{width:34px;height:34px;color:var(--ink2)}
.couple-pair-av small{position:absolute;bottom:-4px;left:50%;transform:translateX(-50%);max-width:84px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-body);font-size:10.5px;line-height:1.5;padding:1px 8px;border-radius:10px;background:color-mix(in srgb,var(--surface) 88%,transparent);color:var(--ink2)}
.couple-knot{position:absolute;left:50%;top:40px;transform:translateX(-50%);z-index:2;width:34px;height:34px;border-radius:50%;background:var(--couple-paper);border:1.5px solid var(--surface);display:grid;place-items:center;box-shadow:0 0 0 6px color-mix(in srgb,var(--couple-accent) 35%,transparent),0 0 22px color-mix(in srgb,var(--couple-accent) 85%,transparent)}
.couple-knot svg{width:17px;height:17px;fill:var(--couple-accent);stroke:var(--couple-accent-deep);stroke-width:1.4}
.couple-with{margin-top:10px;font-size:14px;color:var(--ink2);letter-spacing:.1em}
.couple-day{margin:2px 0 0;font-family:var(--font-display);font-weight:500;line-height:1;color:var(--ink)}.couple-day span{font-size:18px;color:var(--ink2)}.couple-day b{font-size:68px;font-weight:500;margin:0 8px;text-shadow:0 2px 16px color-mix(in srgb,var(--surface) 90%,transparent)}
.couple-since{margin-top:8px;font-size:12px;color:var(--ink2);letter-spacing:.08em}
.couple-sign{margin:10px auto 0;max-width:280px;font-family:var(--font-display);font-style:italic;font-size:13.5px;line-height:1.6;color:var(--ink2)}
.couple-content{padding:0 16px;display:flex;flex-direction:column;gap:14px}
.couple-glass{border-radius:24px;padding:18px 18px 16px}
.couple-card-title{display:flex;justify-content:space-between;align-items:baseline;gap:10px;margin:0 0 14px;font-family:var(--font-display);font-size:17px;font-weight:500;color:var(--ink)}
.couple-link-btn{border:none;background:transparent;color:var(--accent-text);font-family:var(--font-body);font-size:12px;font-weight:500;padding:0;white-space:nowrap;cursor:pointer}
.couple-who-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.couple-who{min-width:0;border-radius:16px;padding:12px;background:color-mix(in srgb,var(--surface) 45%,transparent);display:flex;flex-direction:column;gap:7px}
.couple-who-name{display:flex;align-items:center;gap:8px;min-width:0}.couple-mini-av{width:26px;height:26px;flex-shrink:0;border-radius:50%;overflow:hidden;background:var(--surface-alt);display:grid;place-items:center;font-size:12px;color:var(--ink)}.couple-mini-av img{width:100%;height:100%;object-fit:cover}.couple-mini-av svg{width:14px;height:14px;color:var(--ink2)}
.couple-who p{margin:0;font-size:12.5px;line-height:1.5;color:var(--ink2)}
.mood-side-name{min-width:0;font-size:14px;font-weight:500;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.mood-side-tag{font-size:13.5px;font-weight:600;color:var(--accent-text)}
.mood-side-note{display:block;margin-top:2px;font-size:12px;line-height:1.4;color:var(--ink2);overflow:hidden;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
.mood-side-empty.has-dot::before{content:'';display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--green);margin-right:6px;vertical-align:1px}
.couple-idle-tag{margin-left:5px;padding:1px 6px;border-radius:7px;font-size:10px;font-weight:500;color:var(--ink2);background:color-mix(in srgb,var(--surface) 55%,transparent);vertical-align:1px}
.couple-who-mood{border:none;background:transparent;padding:0;text-align:left;font-family:inherit;cursor:pointer}
.couple-quick-moods{display:flex;flex-wrap:wrap;gap:5px}.couple-quick-moods button{min-width:30px;height:26px;padding:0 8px;border:none;border-radius:13px;background:color-mix(in srgb,var(--surface) 78%,transparent);color:var(--ink);font-family:inherit;font-size:12px;cursor:pointer}
.couple-sticky{position:relative;display:block;width:calc(100% - 12px);margin:18px 6px 4px;padding:16px 16px 14px;border:none;border-radius:4px 4px 14px 4px;background:var(--couple-paper);transform:rotate(-1.2deg);box-shadow:0 6px 14px color-mix(in srgb,var(--couple-accent-deep) 16%,transparent);font-family:var(--font-display);text-align:left;cursor:pointer}
.couple-sticky::before{content:'';position:absolute;top:-9px;left:50%;width:64px;height:18px;transform:translateX(-50%) rotate(2deg);border-radius:2px;background:color-mix(in srgb,var(--couple-accent) 75%,transparent)}
.couple-sticky>span{font-family:var(--font-body);font-size:11px;letter-spacing:.1em;color:var(--couple-on-paper)}.couple-sticky p{margin:6px 0 0;font-size:14.5px;line-height:1.6;color:var(--couple-on-paper)}
.couple-acts{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:16px}.couple-acts button{display:flex;align-items:center;justify-content:center;gap:6px;padding:10px 0;border-radius:14px;background:color-mix(in srgb,var(--surface) 55%,transparent);border:1px solid var(--couple-glass-line);color:var(--ink);font-family:inherit;font-size:13px;cursor:pointer}.couple-acts svg{width:16px;height:16px;color:var(--ink2)}
.couple-anni{width:100%;display:flex;align-items:center;gap:16px;border:none;background:transparent;padding:0;text-align:left;font-family:inherit;color:var(--ink);cursor:pointer}
.ann-days{width:78px;flex-shrink:0;border-radius:12px;overflow:hidden;text-align:center;background:var(--surface);box-shadow:0 4px 10px rgba(60,85,125,.1);color:var(--accent-text)}
.ann-days i{display:block;font-style:normal;font-size:11px;letter-spacing:.1em;padding:4px 0;background:var(--couple-accent);color:var(--couple-on-paper)}.ann-days b{display:block;padding-top:6px;font-family:var(--font-display);font-weight:500;font-size:32px;line-height:1.15}.ann-days small{display:block;padding-bottom:7px;font-size:11px;color:var(--ink2)}
.couple-anni-main{flex:1;min-width:0;display:flex;flex-direction:column}.couple-anni-main>b{font-family:var(--font-display);font-size:17px;font-weight:500}.couple-anni-main>span{margin-top:4px;font-size:12.5px;color:var(--ink2)}
.couple-bar{display:block;height:5px;margin-top:10px!important;border-radius:4px;overflow:hidden;background:color-mix(in srgb,var(--surface) 60%,transparent)}.couple-bar i{display:block;height:100%;min-width:6px;border-radius:4px;background:linear-gradient(90deg,var(--couple-accent),color-mix(in srgb,var(--couple-accent) 70%,var(--couple-accent-deep)))}
.couple-tickets{display:flex;flex-direction:column;gap:10px}
.couple-ticket{position:relative;display:flex;border-radius:16px;overflow:hidden;background:color-mix(in srgb,var(--surface) 70%,transparent);-webkit-mask:radial-gradient(circle 8px at calc(100% - 74px) 0,transparent 98%,#000) top/100% 51% no-repeat,radial-gradient(circle 8px at calc(100% - 74px) 100%,transparent 98%,#000) bottom/100% 51% no-repeat;mask:radial-gradient(circle 8px at calc(100% - 74px) 0,transparent 98%,#000) top/100% 51% no-repeat,radial-gradient(circle 8px at calc(100% - 74px) 100%,transparent 98%,#000) bottom/100% 51% no-repeat}
.couple-ticket-main{flex:1;min-width:0;padding:12px 14px}.couple-ticket-main>span{font-size:10.5px;letter-spacing:.12em;color:var(--ink2)}
.couple-ticket-main b{display:flex;align-items:center;gap:10px;margin-top:4px;font-family:var(--font-display);font-size:18px;font-weight:500;color:var(--ink);overflow-wrap:anywhere}
.couple-route-line{position:relative;flex:1;min-width:24px;height:0;border-top:1.5px dashed color-mix(in srgb,var(--ink2) 45%,transparent)}.couple-route-line svg{position:absolute;left:50%;top:-9px;width:16px;height:16px;transform:translateX(-50%) rotate(90deg);fill:var(--couple-accent);stroke:var(--couple-accent-deep);stroke-width:1.2}
.couple-ticket-stub{width:74px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;text-align:center;border-left:2px dashed color-mix(in srgb,var(--ink2) 30%,transparent);background:var(--couple-paper);font-size:10.5px;color:var(--couple-on-paper)}.couple-ticket-stub b{font-family:var(--font-display);font-size:13px;font-weight:500}
.couple-ticket.is-done .couple-ticket-main b{color:var(--ink2)}
.couple-add-wish{width:100%;margin-top:10px;padding:11px;border-radius:16px;border:1.5px dashed var(--couple-glass-line);background:transparent;color:var(--ink2);font-family:inherit;font-size:13px;cursor:pointer}
.couple-soft-empty{margin:0;font-size:13px;line-height:1.6;color:var(--ink2)}
.timeline{position:relative;padding-left:26px}.timeline::before{content:'';position:absolute;left:8px;top:6px;bottom:6px;width:1.5px;background:linear-gradient(180deg,var(--couple-accent),transparent)}
.time-item{position:relative;display:block;width:100%;padding:0 0 14px;border:none;background:none;text-align:left;font:inherit;color:inherit;cursor:pointer}.time-item:last-child{padding-bottom:0}
.time-item::before{content:'';position:absolute;left:-23px;top:4px;width:11px;height:11px;border-radius:50%;background:var(--couple-paper);border:2px solid var(--couple-accent);box-sizing:border-box}
.time-main{display:block;min-width:0}.time-main time{font-size:11px;color:var(--ink2)}.time-main h3{margin-top:3px;font-family:var(--font-display);font-size:14.5px;font-weight:500;color:var(--ink)}.time-main p{margin-top:2px;font-size:12px;line-height:1.45;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* 我们的颜色 / 我们的背景 (settings) */
.couple-accent-custom{background:conic-gradient(var(--couple-accent),var(--pri-pale),var(--surface-alt),var(--couple-accent))}
.couple-bg-thumb{height:180px;border-radius:18px;background:var(--surface-alt) center/cover no-repeat;border:1px solid var(--border)}
.couple-set-row[aria-pressed] .couple-set-val svg{width:18px;height:18px;color:var(--pri-deep)}
.couple-seg{display:grid;grid-template-columns:1fr 1fr;gap:6px;padding:4px;border-radius:14px;background:var(--surface-alt)}.couple-seg button{border:none;border-radius:10px;padding:9px 6px;background:transparent;color:var(--ink2);font-family:inherit;font-size:13px;cursor:pointer}.couple-seg button[aria-checked="true"]{background:var(--surface);color:var(--ink);font-weight:600;box-shadow:0 1px 3px rgba(60,85,125,.12)}
/* 写信 / 小纸条 / 今天一起做 (docs/COUPLE_SUBPAGES_REDESIGN.md): same background layer, glass and --couple-* colours as the home page.
   Letter papers (data-paper) and note papers (data-note-bg) are fixed colours with their own ink, in every theme; follow = 我们的颜色. */
#couple-form-body{position:relative}
.couple-sub{position:relative;z-index:1;padding:calc(10px + env(safe-area-inset-top,0px)) 16px calc(28px + var(--sab))}
.couple-sub-top{display:flex;align-items:center;gap:12px;margin-bottom:18px}.couple-sub-top h2{flex:1;margin:0;font-family:var(--font-display);font-size:19px;font-weight:500;color:var(--ink)}
.couple-glass-pill{display:flex;align-items:center;gap:4px;padding:7px 12px;border-radius:16px;background:var(--couple-glass);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border:1px solid var(--couple-glass-line);color:var(--ink2);font-family:inherit;font-size:12.5px;cursor:pointer}.couple-glass-pill svg{width:15px;height:15px}
.couple-badge{min-width:17px;height:17px;padding:0 5px;border-radius:9px;display:grid;place-items:center;font-size:11px;background:var(--couple-accent);color:var(--couple-on-paper)}
.couple-sub-body{display:flex;flex-direction:column;gap:14px}
.couple-sub-title{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin:10px 4px 0;font-family:var(--font-display);font-size:15px;font-weight:500;color:var(--ink)}.couple-sub-title small{font-family:var(--font-body);font-size:12px;font-weight:400;color:var(--ink2)}
.couple-pad{padding:16px 18px}
.couple-cta{height:50px;border:none;border-radius:25px;display:flex;align-items:center;justify-content:center;gap:8px;font-family:var(--font-display);font-size:15px;font-weight:500;cursor:pointer;color:var(--couple-on-paper);background:linear-gradient(180deg,color-mix(in srgb,var(--couple-accent) 85%,#fff),var(--couple-accent));box-shadow:inset 0 1px 0 rgba(255,255,255,.9),0 8px 18px color-mix(in srgb,var(--couple-accent-deep) 22%,transparent)}.couple-cta svg{width:18px;height:18px}
.couple-swatch-scroll{display:flex;gap:10px;overflow-x:auto;padding:4px;scrollbar-width:none}.couple-swatch-scroll::-webkit-scrollbar{display:none}
.couple-letter-swatch,.couple-note-swatch{flex-shrink:0;border:2px solid color-mix(in srgb,var(--surface) 90%,transparent);box-shadow:0 2px 6px rgba(60,85,125,.15);cursor:pointer;padding:0}
.couple-letter-swatch{width:26px;height:26px;border-radius:50%;background:var(--paper)}.couple-note-swatch{width:30px;height:24px;border-radius:3px 3px 8px 3px;background:var(--note)}
.couple-letter-swatch[aria-checked="true"],.couple-note-swatch[aria-checked="true"]{outline:2px solid var(--couple-accent-deep);outline-offset:2px}
.couple-paper-row{display:flex;align-items:center;gap:10px;margin:0 4px;font-size:12.5px;color:var(--ink2)}.couple-paper-row .couple-swatch-scroll{flex:1;min-width:0}.couple-paper-row em{flex-shrink:0;font-style:normal;font-size:12px}
/* letter papers: --paper (ground), --paper-line (rule colour, 22%), --paper-ink (text) */
[data-paper]{--paper:var(--couple-paper);--paper-line:var(--couple-accent-deep);--paper-ink:#4a4a52}
[data-paper="cream"]{--paper:#FFF8E6;--paper-line:#C99A2E;--paper-ink:#4a4a52}[data-paper="mist"]{--paper:#F8FAFC;--paper-line:#8796AB;--paper-ink:#3f4a5c}[data-paper="rose"]{--paper:#FDEFF2;--paper-line:#C27A8C;--paper-ink:#5a4148}
[data-paper="apricot"]{--paper:#FFEFE3;--paper-line:#C2703E;--paper-ink:#5a4436}[data-paper="mint"]{--paper:#EEF8F2;--paper-line:#5E9E7E;--paper-ink:#3c5248}[data-paper="sky"]{--paper:#EDF4FC;--paper-line:#5B83BC;--paper-ink:#3a4a62}
[data-paper="lilac"]{--paper:#F5F1FD;--paper-line:#8A72BE;--paper-ink:#4a4260}[data-paper="kraft"]{--paper:#EADBC1;--paper-line:#9A7A4C;--paper-ink:#4f3d26}[data-paper="night"]{--paper:#33405C;--paper-line:#AFC0DE;--paper-ink:#EEF1F7}
.letter-sheet{--ink:var(--paper-ink);--ink2:color-mix(in srgb,var(--paper-ink) 85%,var(--paper));position:relative;padding:26px 24px 22px;border-radius:6px 6px 22px 6px;background:var(--paper);color:var(--ink);box-shadow:0 14px 30px rgba(60,85,125,.16);font-family:var(--font-display)}
.letter-to{font-size:19px;font-weight:500}
.letter-sheet input,.letter-sheet textarea{display:block;width:100%;border:none;outline:none;background:transparent;color:var(--ink);font-family:inherit;-webkit-appearance:none;appearance:none;padding:0}
.letter-sheet input{margin-top:14px;height:34px;font-size:14px}
.letter-sheet textarea,.letter-read-body{min-height:306px;font-size:15px;line-height:34px;resize:none;overflow:hidden;background-image:repeating-linear-gradient(180deg,transparent 0 33px,color-mix(in srgb,var(--paper-line) 22%,transparent) 33px 34px);background-attachment:local}
.letter-read-title{margin:14px 0 0;height:34px;line-height:34px;font-size:15px;font-weight:600}.letter-read-body{white-space:pre-wrap;overflow-wrap:anywhere;min-height:204px}
.letter-sign{margin-top:4px;text-align:right;font-size:14.5px}.letter-sign small{display:block;margin-top:4px;font-size:12px;color:var(--ink2)}
.letter-seal{position:absolute;left:22px;bottom:20px;width:46px;height:46px;border-radius:50%;display:grid;place-items:center;transform:rotate(-10deg);background:var(--couple-accent);box-shadow:inset 0 -3px 6px color-mix(in srgb,var(--couple-accent-deep) 35%,transparent),0 3px 8px color-mix(in srgb,var(--couple-accent-deep) 30%,transparent)}.letter-seal svg{width:20px;height:20px;fill:var(--couple-paper)}
.couple-envelopes{display:grid;grid-template-columns:1fr 1fr;gap:10px}.couple-envelopes.is-list{grid-template-columns:1fr}
.couple-envelope{position:relative;overflow:hidden;padding:12px;border-radius:16px;text-align:left;font-family:inherit;color:var(--ink);cursor:pointer;min-width:0}
.couple-envelope::before{content:'';position:absolute;left:0;right:0;top:0;height:26px;background:linear-gradient(160deg,transparent 49%,color-mix(in srgb,var(--surface) 55%,transparent) 50%) left/50% 100% no-repeat,linear-gradient(200deg,transparent 49%,color-mix(in srgb,var(--surface) 55%,transparent) 50%) right/50% 100% no-repeat}
.couple-envelope-who{display:flex;align-items:center;gap:6px;margin-top:16px;font-size:12px;color:var(--ink2)}.couple-envelope-who .couple-mini-av{width:22px;height:22px}
.couple-envelope b{display:block;margin-top:6px;font-family:var(--font-display);font-size:14px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.couple-envelope time{font-size:11px;color:var(--ink2)}
.couple-unread-dot{position:absolute;right:10px;top:10px;width:8px;height:8px;border-radius:50%;background:var(--couple-accent-deep)}
.couple-reader{position:fixed;inset:0;z-index:70;overflow-y:auto;scrollbar-width:none;padding:calc(12px + env(safe-area-inset-top,0px)) 16px calc(24px + var(--sab));background:color-mix(in srgb,var(--bg) 55%,transparent);-webkit-backdrop-filter:blur(18px);backdrop-filter:blur(18px);animation:coupleCalIn .18s ease-out}
.couple-reader-top{display:flex;justify-content:flex-end;margin-bottom:12px}.couple-reader .letter-sheet{padding-bottom:76px}
/* note papers */
[data-note-bg]{--note:var(--couple-paper)}[data-note-bg="warm"]{--note:#FFF1BF}[data-note-bg="peach"]{--note:#FFDCC6}[data-note-bg="rose"]{--note:#FBD9E0}[data-note-bg="mint"]{--note:#D5F0E2}[data-note-bg="sky"]{--note:#D7E8FA}[data-note-bg="lilac"]{--note:#E6DDF8}[data-note-bg="lemon"]{--note:#F6F3C2}[data-note-bg="mist"]{--note:#F6F8FB}
.couple-sticky[data-note-bg]{background:var(--note)}
.note-big{--ink:#4a4a52;--ink2:#5d6168;position:relative;display:block;margin:14px 10px 0;padding:26px 20px 16px;border-radius:4px 4px 20px 4px;background:var(--note);transform:rotate(-1.5deg);box-shadow:0 14px 26px color-mix(in srgb,var(--couple-accent-deep) 18%,transparent);font-family:var(--font-display);cursor:text}
.note-big::before{content:'';position:absolute;top:-11px;left:50%;width:84px;height:22px;transform:translateX(-50%) rotate(3deg);background:color-mix(in srgb,var(--couple-accent) 78%,transparent)}
.note-big-head{display:block;font-size:12px;letter-spacing:.12em;color:var(--couple-on-paper)}
.note-big textarea{display:block;width:100%;height:150px;margin-top:10px;border:none;outline:none;background:transparent;resize:none;padding:0;font-family:inherit;font-size:17px;line-height:1.7;color:var(--ink)}
.note-big-foot{display:flex;justify-content:space-between;font-family:var(--font-body);font-size:12px;color:var(--ink2)}
.couple-opts{border-radius:20px;padding:4px 16px}.couple-opt{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;font-size:14px;color:var(--ink)}.couple-opt+.couple-opt{border-top:1px solid var(--couple-glass-line)}
.couple-opt>span{flex-shrink:0}.couple-opt small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink2)}.couple-opt .couple-swatch-scroll{min-width:0}
.couple-switch{position:relative;width:44px;height:26px;flex-shrink:0;border:none;border-radius:13px;background:color-mix(in srgb,var(--ink2) 30%,transparent);cursor:pointer;transition:background .15s}.couple-switch::after{content:'';position:absolute;left:3px;top:3px;width:20px;height:20px;border-radius:50%;background:var(--surface);box-shadow:0 1px 3px rgba(0,0,0,.15);transition:left .15s}
.couple-switch[aria-checked="true"]{background:var(--couple-accent)}.couple-switch[aria-checked="true"]::after{left:21px}
.note-wall{display:grid;grid-template-columns:1fr 1fr;gap:14px 12px;padding:4px 6px}
.note-stuck{--ink:#4a4a52;--ink2:#5d6168;position:relative;min-width:0;padding:16px 12px 10px;border-radius:3px 3px 14px 3px;background:var(--note);transform:rotate(var(--tilt,0deg));box-shadow:0 6px 14px rgba(60,85,125,.12);font-family:var(--font-display);font-size:13.5px;line-height:1.6;color:var(--ink);-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.note-stuck::before{content:'';position:absolute;top:-7px;left:50%;width:44px;height:14px;transform:translateX(-50%);background:rgba(255,255,255,.7)}.note-stuck p{margin:0;overflow-wrap:anywhere}
.note-by{display:flex;align-items:center;gap:5px;margin-top:8px;font-family:var(--font-body);font-size:11px;color:var(--ink2)}.note-by .couple-mini-av{width:16px;height:16px;font-size:9px}
/* 今天一起做 */
.couple-progress{display:flex;align-items:center;gap:16px;padding:18px;border-radius:24px}.couple-progress>span:last-child{display:flex;flex-direction:column;min-width:0}.couple-progress b{font-family:var(--font-display);font-size:17px;font-weight:500;color:var(--ink)}.couple-progress small{margin-top:6px;font-size:12.5px;color:var(--ink2)}
.couple-ring{width:78px;height:78px;flex-shrink:0;border-radius:50%;display:grid;place-items:center;background:conic-gradient(var(--couple-accent) 0 var(--done),color-mix(in srgb,var(--surface) 55%,transparent) var(--done) 100%)}
.couple-ring>span{width:62px;height:62px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--couple-paper);font-family:var(--font-display);font-size:20px;color:var(--couple-on-paper)}.couple-ring small{font-size:12px;margin:0;color:var(--couple-on-paper)}
.couple-add-row{display:flex;align-items:center;gap:10px;padding:6px 6px 6px 16px;border-radius:26px}.couple-add-row input{flex:1;min-width:0;border:none;outline:none;background:transparent;font-family:inherit;font-size:14px;color:var(--ink)}
.couple-add-row button{width:40px;height:40px;flex-shrink:0;border:none;border-radius:50%;display:grid;place-items:center;background:var(--couple-accent);color:var(--couple-on-paper);cursor:pointer}.couple-add-row svg{width:19px;height:19px}
.couple-ideas-label{margin:0 4px -2px;font-size:11px;color:var(--ink2)}
.couple-ideas{display:flex;flex-wrap:wrap;gap:8px;margin:-4px 4px 0}.couple-ideas button{padding:6px 11px;border-radius:14px;border:1px dashed var(--couple-glass-line);background:color-mix(in srgb,var(--surface) 50%,transparent);color:var(--ink2);font-family:inherit;font-size:12px;cursor:pointer}
.couple-task{display:flex;align-items:center;gap:12px;padding:14px 14px 14px 16px;border-radius:20px;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.couple-task-main{flex:1;min-width:0;display:flex;flex-direction:column}.couple-task-main b{font-family:var(--font-display);font-size:15px;font-weight:500;color:var(--ink);overflow-wrap:anywhere}.couple-task-main small{font-size:11.5px;color:var(--ink2)}
.couple-task.is-both{background:color-mix(in srgb,var(--couple-paper) 88%,transparent)}.couple-task.is-both .couple-task-main b{color:var(--couple-on-paper)}.couple-task.is-both .couple-task-main small{color:var(--couple-on-paper)}
.couple-stamp{flex-shrink:0;padding:2px 8px;border-radius:12px;border:1.5px solid var(--couple-accent-deep);transform:rotate(-6deg);font-family:var(--font-display);font-size:11px;color:var(--couple-on-paper)}
.couple-checks{display:flex;gap:6px;flex-shrink:0}.couple-check{width:34px;height:34px;padding:0;border-radius:50%;border:1.5px dashed var(--ink2);display:grid;place-items:center;overflow:hidden;background:color-mix(in srgb,var(--surface) 35%,transparent);color:var(--ink2);font-family:var(--font-display);font-size:12px;cursor:pointer}
.couple-check-ta{cursor:default}
.couple-check.is-done{border:2px solid var(--couple-accent);background:var(--couple-accent);color:var(--couple-on-paper)}.couple-check img{width:100%;height:100%;object-fit:cover}.couple-check .avatar-placeholder svg{width:16px;height:16px}
.couple-progress .couple-ring b{font-size:20px;font-weight:500;color:var(--couple-on-paper)}
.couple-reader::-webkit-scrollbar{display:none}
/* 层次与阴影 (docs/DESIGN_RULES.md §5): outer glass cards, inner solid-paper blocks, coloured shadows that fall downward. Only background,
   border and shadow: no font, size or weight is touched. --tint / --tint-deep are 我们的颜色 here; other apps take --pri / --pri-deep. */
.couple-shell{--tint:var(--couple-accent);--tint-deep:var(--couple-accent-deep);
  --ls-glass:linear-gradient(170deg,rgba(255,255,255,.78) 0%,rgba(255,255,255,.58) 100%);--ls-edge:rgba(255,255,255,.95);--ls-hi:#fff;--ls-inner:#fff;--ls-glow:#fff;
  --ls-a:10%;--ls-b:30%;--ls-c:32%;--ls-d:22%;--ls-n1:10%;--ls-n2:35%;--ls-av:40%;
  --ls-glass-shadow:inset 0 1.5px 0 var(--ls-hi),inset 0 -1px 0 color-mix(in srgb,var(--tint) var(--ls-b),transparent),0 1px 2px color-mix(in srgb,var(--tint-deep) var(--ls-a),transparent),0 18px 36px -14px color-mix(in srgb,var(--tint-deep) var(--ls-c),transparent);
  --ls-inner-shadow:0 1px 2px color-mix(in srgb,var(--tint-deep) var(--ls-a),transparent),0 6px 14px -6px color-mix(in srgb,var(--tint-deep) var(--ls-d),transparent);
  --ls-note-shadow:0 2px 3px color-mix(in srgb,var(--tint-deep) var(--ls-n1),transparent),0 12px 20px -10px color-mix(in srgb,var(--tint-deep) var(--ls-n2),transparent)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell{--ls-glass:linear-gradient(rgba(40,46,58,.62),rgba(40,46,58,.62));--ls-edge:rgba(255,255,255,.12);--ls-hi:rgba(255,255,255,.14);--ls-inner:rgba(255,255,255,.08);--ls-glow:transparent;--ls-a:5%;--ls-b:15%;--ls-c:16%;--ls-d:11%;--ls-n1:5%;--ls-n2:18%;--ls-av:20%}}
:root[data-theme="dark"] .couple-shell{--ls-glass:linear-gradient(rgba(40,46,58,.62),rgba(40,46,58,.62));--ls-edge:rgba(255,255,255,.12);--ls-hi:rgba(255,255,255,.14);--ls-inner:rgba(255,255,255,.08);--ls-glow:transparent;--ls-a:5%;--ls-b:15%;--ls-c:16%;--ls-d:11%;--ls-n1:5%;--ls-n2:18%;--ls-av:20%}
.couple-glass{background:var(--ls-glass);border:1px solid var(--ls-edge);box-shadow:var(--ls-glass-shadow)}
/* inner: solid paper + small shadow (buttons, blocks, tickets, the torn calendar page, the mood areas) */
.couple-glass-btn,.couple-glass-pill,.couple-who,.couple-acts button,.couple-ticket,.couple-check:not(.is-done){background:var(--ls-inner);border-color:transparent;box-shadow:var(--ls-inner-shadow)}
.couple-acts button{border:none}.couple-acts svg,.couple-glass-btn svg,.couple-glass-pill svg{color:var(--tint-deep)}
.ann-days{background-image:linear-gradient(var(--ls-inner),var(--ls-inner));box-shadow:var(--ls-inner-shadow)}
.couple-tickets{filter:drop-shadow(0 1px 1px color-mix(in srgb,var(--tint-deep) var(--ls-a),transparent)) drop-shadow(0 6px 7px color-mix(in srgb,var(--tint-deep) var(--ls-d),transparent))}
.couple-ticket{box-shadow:none}
/* small tags / mood pills, dashed 添加 boxes */
.couple-quick-moods button{background:color-mix(in srgb,var(--tint) 22%,var(--ls-inner));border:1px solid color-mix(in srgb,var(--tint) 55%,transparent)}
.couple-add-wish,.couple-ideas button{background:color-mix(in srgb,var(--tint) 8%,color-mix(in srgb,var(--ls-inner) 50%,transparent));border-color:color-mix(in srgb,var(--tint) 60%,var(--ls-inner))}
/* paper notes */
.couple-sticky,.note-big,.note-stuck,.letter-sheet{box-shadow:var(--ls-note-shadow)}
/* accents: a glow ring on the big avatars, light around the big number */
.couple-pair-av{box-shadow:0 0 0 6px color-mix(in srgb,var(--tint) 18%,transparent),0 12px 24px -8px color-mix(in srgb,var(--tint-deep) var(--ls-av),transparent)}
.couple-day b{text-shadow:0 0 30px color-mix(in srgb,var(--tint) 70%,var(--ls-glow)),0 2px 0 var(--ls-hi)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell .couple-acts svg,:root:not([data-theme="light"]) .couple-shell .couple-glass-btn svg,:root:not([data-theme="light"]) .couple-shell .couple-glass-pill svg{color:var(--tint)}}
:root[data-theme="dark"] .couple-shell .couple-acts svg,:root[data-theme="dark"] .couple-shell .couple-glass-btn svg,:root[data-theme="dark"] .couple-shell .couple-glass-pill svg{color:var(--tint)}
/* 设置 / 我们的空间 / 引导页 (docs/COUPLE_SETTINGS_REDESIGN.md): the same background layer, outer glass + inner paper, coloured initials */
#couple-select-body{position:relative}
/* a card that carries its own colours (a space in the list): the shadows are worked out again against ITS --tint */
.couple-tint-scope{--ls-glass-shadow:inset 0 1.5px 0 var(--ls-hi),inset 0 -1px 0 color-mix(in srgb,var(--tint) var(--ls-b),transparent),0 1px 2px color-mix(in srgb,var(--tint-deep) var(--ls-a),transparent),0 18px 36px -14px color-mix(in srgb,var(--tint-deep) var(--ls-c),transparent);--ls-inner-shadow:0 1px 2px color-mix(in srgb,var(--tint-deep) var(--ls-a),transparent),0 6px 14px -6px color-mix(in srgb,var(--tint-deep) var(--ls-d),transparent)}
/* avatars: a coloured circle with a 3px white edge, the glow ring of the big ones */
.couple-av-lg,.couple-av-sm{position:relative;flex-shrink:0;border-radius:50%;border:3px solid #fff;display:grid;place-items:center;overflow:visible;background:var(--surface-alt);color:#fff;font-family:var(--font-display)}
.couple-av-lg img,.couple-av-sm img{width:100%;height:100%;border-radius:50%;object-fit:cover}
.couple-av-lg{width:76px;height:76px;box-shadow:0 0 0 6px color-mix(in srgb,var(--tint) 18%,transparent),0 12px 24px -8px color-mix(in srgb,var(--tint-deep) var(--ls-av),transparent)}.couple-av-lg .couple-initial{font-size:26px}
.couple-av-lg.is-xl{width:92px;height:92px;z-index:1}.couple-av-lg.is-xl .couple-initial{font-size:30px}
.couple-av-sm{width:46px;height:46px;border-width:2px;box-shadow:0 6px 12px -6px color-mix(in srgb,var(--tint-deep) var(--ls-av),transparent)}.couple-av-sm .couple-initial{font-size:16px}
.couple-av-sm+.couple-av-sm{margin-left:-12px}
/* settings */
.couple-set-pair{position:relative;display:flex;justify-content:center;margin:10px 0 0}.couple-set-pair .couple-av-lg+.couple-knot+.couple-av-lg{margin-left:-16px}
.couple-set-pair .couple-knot{top:24px;width:28px;height:28px;box-shadow:0 0 0 5px color-mix(in srgb,var(--couple-accent) 35%,transparent)}.couple-set-pair .couple-knot svg{width:14px;height:14px}
.couple-settings-hero h1{margin-top:14px}.couple-settings-hero p b{font-weight:inherit;color:var(--couple-accent-ink)}
.couple-set-group.couple-glass{padding:4px 14px;border-radius:22px;overflow:visible}
.couple-glass .couple-set-row{min-height:0;padding:13px 0;grid-template-columns:30px minmax(0,1fr) auto 16px;border-radius:0}.couple-glass .couple-set-row+.couple-set-row,.couple-glass .couple-inline+.couple-set-row{border-top:1px solid color-mix(in srgb,var(--couple-accent) 22%,transparent)}
.couple-glass .couple-set-row:active{background:transparent}.couple-set-row.is-static{cursor:default;padding-bottom:8px}
.couple-set-ic{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--tint-deep)}.couple-set-ic svg{width:16px;height:16px;color:inherit}
.couple-inline{display:flex;gap:8px;padding:2px 0 14px 42px}
.couple-sw{position:relative;width:30px;height:30px;padding:0;border:3px solid #fff;border-radius:50%;box-shadow:0 2px 6px rgba(60,70,90,.15);cursor:pointer;overflow:hidden}
.couple-sw[aria-checked="true"],.couple-sw[data-on="true"]{box-shadow:0 0 0 2px var(--couple-accent-deep),0 2px 6px rgba(60,70,90,.15);overflow:visible}
.couple-sw.couple-accent-custom input{position:absolute;inset:-6px;width:calc(100% + 12px);height:calc(100% + 12px);opacity:0;cursor:pointer}
.couple-bgs{gap:8px}.couple-bgopt{flex:1;min-width:0;padding:0;border:none;background:transparent;font-family:inherit;font-size:11px;color:var(--ink2);text-align:center;cursor:pointer}.couple-bgopt[aria-checked="true"]{color:var(--ink)}
.couple-bgthumb{display:grid;place-items:center;height:54px;margin-bottom:5px;border-radius:12px;border:2px solid #fff;box-shadow:0 2px 6px rgba(60,70,90,.12);background-size:cover;background-position:center;font-style:normal;font-size:20px;color:var(--couple-accent-ink)}
.couple-bgopt[aria-checked="true"] .couple-bgthumb{box-shadow:0 0 0 2px var(--couple-accent-deep),0 2px 6px rgba(60,70,90,.12)}
.couple-bgthumb.is-default{background:radial-gradient(70% 50% at 20% 15%,color-mix(in srgb,var(--couple-accent) 75%,#fff),transparent 70%),radial-gradient(60% 50% at 90% 60%,color-mix(in srgb,var(--couple-companion) 90%,#fff),transparent 70%),var(--couple-paper)}
.couple-bgthumb.is-desktop{background-color:#cfdced;background-image:linear-gradient(160deg,#a9c6e6,#e8eef5 50%,#9cbbe0)}.couple-bgthumb.is-desktop[style]{background-image:none}
.couple-bgthumb.is-photo{background-color:var(--ls-inner)}
/* 我们的空间 */
.couple-space-lead{margin:4px 6px 0;font-family:var(--font-display);font-size:13px;color:var(--ink2)}
.couple-space-list{display:flex;flex-direction:column;gap:12px}
.couple-space-card{width:100%;display:flex;align-items:center;gap:14px;padding:14px;border-radius:22px;text-align:left;font-family:inherit;color:var(--ink);cursor:pointer}
.couple-space-card.is-locked{cursor:default}
.couple-space-mini{display:flex;flex-shrink:0}.couple-space-main{flex:1;min-width:0}.couple-space-main b{display:block;font-size:14px}
.couple-space-sub{display:block;margin-top:3px;font-size:12px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.couple-dot{display:inline-block;width:10px;height:10px;margin-right:5px;border-radius:50%;background:var(--couple-accent);vertical-align:-1px}
.couple-cur{flex-shrink:0;padding:3px 9px;border-radius:10px;border:1px solid color-mix(in srgb,var(--couple-accent) 60%,transparent);background:color-mix(in srgb,var(--couple-accent) 30%,var(--ls-inner));color:var(--couple-accent-ink);font-style:normal;font-size:11px}
.couple-space-card>svg{width:16px;height:16px;flex-shrink:0;color:var(--ink2)}
.couple-add-space{padding:16px;border-radius:22px;border:1.5px dashed color-mix(in srgb,var(--couple-accent) 70%,var(--ls-inner));background:color-mix(in srgb,var(--couple-accent) 8%,color-mix(in srgb,var(--ls-inner) 50%,transparent));color:var(--couple-accent-ink);font-family:var(--font-display);font-size:14px;cursor:pointer}
/* 引导页 */
.couple-ob{min-height:0;padding:20px 12px 8px}
.couple-ob-pair{display:flex;justify-content:center;align-items:center}
.couple-ob-slot{width:92px;height:92px;margin-left:-14px;border-radius:50%;border:2px dashed color-mix(in srgb,var(--couple-accent-deep) 45%,transparent);display:grid;place-items:center;background:color-mix(in srgb,var(--ls-inner) 55%,transparent);color:var(--couple-accent-ink);font-size:26px}
.couple-ob h1{margin:30px 0 14px}
.couple-ob-card{align-self:stretch;margin:26px 0 0;padding:14px 18px;text-align:left}
.couple-ob-row{display:flex;align-items:center;gap:12px;padding:7px 0;font-family:var(--font-display);font-size:14px;color:var(--ink)}
.couple-ob-row i{width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--couple-accent-ink)}.couple-ob-row svg{width:16px;height:16px}
.couple-ob-cta{align-self:stretch;margin:26px 18px 0}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell :is(.couple-set-ic,.couple-ob-row i){color:var(--tint)}:root:not([data-theme="light"]) .couple-shell .couple-settings-hero p b,:root:not([data-theme="light"]) .couple-shell .couple-add-space,:root:not([data-theme="light"]) .couple-shell .couple-cur{color:var(--tint)}}
:root[data-theme="dark"] .couple-shell :is(.couple-set-ic,.couple-ob-row i){color:var(--tint)}:root[data-theme="dark"] .couple-shell .couple-settings-hero p b,:root[data-theme="dark"] .couple-shell .couple-add-space,:root[data-theme="dark"] .couple-shell .couple-cur{color:var(--tint)}
.couple-ob .couple-av-lg,.couple-ob .couple-initial,.couple-ob .couple-ob-slot{margin-top:0}.couple-ob .couple-initial{color:#fff}.couple-ob .couple-ob-slot{color:var(--couple-accent-ink);font-size:26px}
.couple-ob-list{align-self:stretch;display:flex;flex-direction:column;gap:12px;margin-top:26px;text-align:left}
.couple-ob-empty{align-self:stretch;display:flex;flex-direction:column;align-items:center}
.couple-ob .couple-space-card span{margin-top:0;color:var(--ink)}.couple-ob .couple-space-card .couple-space-sub{margin-top:3px;font-size:12px;color:var(--ink2)}
/* 细节页 (docs/COUPLE_DETAILS_REDESIGN.md): the centred modal, 我们的日子, 想和你一起, 我们的轨迹, the white-glass toast. Same layering as the pages
   around it: outer glass, inner paper, coloured shadows; no font, size or weight of existing text changes. */
/* ── centred modal ── */
.couple-modal-ov{position:absolute;inset:0;z-index:80;display:flex;align-items:center;justify-content:center;padding:40px 16px;background:color-mix(in srgb,var(--couple-accent-deep) 18%,rgba(40,40,60,.2));-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);animation:coupleCalIn .16s ease-out}
.couple-modal{width:100%;max-height:100%;overflow-y:auto;scrollbar-width:none;padding:20px;border-radius:28px;border:1px solid var(--ls-edge);background:linear-gradient(180deg,var(--couple-modal-top,#fff),var(--couple-modal-bottom,color-mix(in srgb,var(--couple-paper) 70%,#fff)));box-shadow:inset 0 1.5px 0 var(--ls-hi),0 24px 50px -14px color-mix(in srgb,var(--couple-accent-deep) 45%,transparent);color:var(--ink);outline:none}
.couple-modal::-webkit-scrollbar{display:none}
.couple-modal-head{display:flex;justify-content:space-between;align-items:center;gap:12px}.couple-modal-head h2{margin:0;font-family:var(--font-display);font-size:18px;font-weight:500;overflow-wrap:anywhere}
.couple-modal-x{flex-shrink:0;width:32px;height:32px;border:none;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--couple-accent-ink);cursor:pointer}.couple-modal-x svg{width:14px;height:14px}
.couple-modal-sub{margin:6px 0 0;font-family:var(--font-display);font-size:12.5px;color:var(--ink2)}
.couple-modal-ok{width:100%;margin-top:18px}
.couple-m-field,.couple-where,.couple-m-result,.ccal{background:var(--ls-inner);box-shadow:var(--ls-inner-shadow)}
/* ── 在一起的日子 ── */
.couple-datehero{display:flex;align-items:center;gap:16px;margin:16px 0 10px}
.couple-mp{position:relative;width:70px;height:78px;flex-shrink:0;padding-top:6px;overflow:hidden;border-radius:6px 6px 14px 14px;text-align:center;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow)}
.couple-mp i{position:absolute;top:-1px;width:6px;height:12px;border-radius:3px;background:var(--couple-accent-deep);z-index:2}.couple-mp i:first-child{left:16px}.couple-mp i:nth-child(2){right:16px}
.couple-mp-top{display:block;height:22px;margin:-6px 0 6px;background:var(--couple-accent)}
.couple-mp b{display:block;font-family:var(--font-display);font-size:30px;font-weight:500;line-height:1}.couple-mp small{font-size:10px;color:var(--ink2)}
.couple-dh b{display:block;font-family:var(--font-display);font-size:20px;font-weight:500}.couple-dh span{font-family:var(--font-display);font-size:13px;color:var(--ink2)}.couple-dh em{font-style:normal;font-size:15px;color:var(--couple-accent-ink)}
.ccal{border-radius:20px;padding:12px 10px 8px}
.ccal-hd{display:flex;justify-content:space-between;align-items:center;padding:0 6px 6px;font-family:var(--font-display);font-size:15px}.ccal-hd span:last-child{display:flex;gap:6px}
.ccal-hd button{width:26px;height:26px;border:none;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 18%,var(--ls-inner));color:var(--couple-accent-ink);font-size:15px;cursor:pointer}.ccal-hd button:disabled{opacity:.4;cursor:default}
.ccal-wk,.ccal-gd{display:grid;grid-template-columns:repeat(7,1fr);text-align:center}.ccal-wk span{padding:4px 0;font-size:11px;color:var(--ink2)}
.ccal-gd>*{position:relative;height:36px;padding:0;border:none;background:transparent;display:grid;place-items:center;font-family:var(--font-display);font-size:14.5px;color:var(--ink);z-index:0}.ccal-gd button{cursor:pointer}
.ccal-gd .out,.ccal-gd .fut{color:color-mix(in srgb,var(--ink2) 45%,transparent)}.ccal-gd .fut{cursor:default}
.ccal-gd .sel{color:var(--couple-on-paper)}.ccal-gd .sel::before{content:'';position:absolute;width:32px;height:32px;border-radius:50%;z-index:-1;background:var(--couple-accent);box-shadow:0 4px 10px -2px color-mix(in srgb,var(--couple-accent-deep) 45%,transparent)}
.ccal-gd .sel::after{content:'♥';position:absolute;top:0;right:6px;font-size:9px;color:var(--couple-accent-ink)}
.ccal-gd .today:not(.sel)::after{content:'';position:absolute;bottom:3px;width:4px;height:4px;border-radius:50%;background:var(--couple-accent-deep)}
/* ── names / signature ── */
.couple-namehero{display:flex;flex-direction:column;align-items:center;margin:14px 0 6px}.couple-namehero .couple-av-lg{margin-bottom:2px}
.couple-name-pv{margin:14px 0 0;font-family:var(--font-display);font-size:13px;color:var(--ink2);text-align:center}.couple-name-pv b{font-weight:500;color:var(--ink)}
.couple-m-field{margin-top:16px;padding:14px 16px 12px;border-radius:18px}
.couple-m-in{display:flex;align-items:center;gap:8px;padding-bottom:8px;border-bottom:1.5px solid color-mix(in srgb,var(--couple-accent) 70%,var(--ls-inner))}.couple-m-in input{flex:1;min-width:0;border:none;outline:none;background:transparent;color:var(--ink);font-family:var(--font-display);font-size:22px;padding:0}.couple-m-in small{font-size:12px;color:var(--ink2)}
.couple-m-field p{margin:8px 0 0;font-size:12px;color:var(--ink2)}
.couple-chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:12px}.couple-chips.is-center{justify-content:center;gap:7px;margin-top:6px}.couple-chips-lab{width:100%;margin-bottom:-2px;font-size:12px;color:var(--ink2)}
.couple-chip{padding:6px 13px;border-radius:16px;border:1px solid color-mix(in srgb,var(--couple-accent) 55%,transparent);background:color-mix(in srgb,var(--couple-accent) 18%,var(--ls-inner));color:var(--couple-accent-ink);font-family:var(--font-display);font-size:13px;cursor:pointer}.couple-chip.on{background:var(--couple-accent);color:var(--couple-on-paper)}
.couple-signpad{position:relative;margin:22px 6px 0;padding:22px 18px 14px;border-radius:4px 4px 18px 4px;background:var(--couple-paper);transform:rotate(-1deg);box-shadow:var(--ls-note-shadow)}
.couple-signpad::before{content:'';position:absolute;top:-9px;left:50%;width:70px;height:18px;transform:translateX(-50%) rotate(2deg);background:color-mix(in srgb,var(--couple-accent) 75%,transparent)}
.couple-signpad textarea{display:block;width:100%;min-height:92px;resize:none;border:none;outline:none;background:transparent;padding:0;font-family:var(--font-display);font-size:17px;line-height:1.8;color:var(--couple-on-paper)}
.couple-signpad-ft{display:flex;justify-content:space-between;font-size:11.5px;color:var(--couple-on-paper)}
.couple-where{display:flex;align-items:center;gap:8px;margin-top:16px;padding:10px 12px;border-radius:14px;font-size:12px;color:var(--ink2)}.couple-where i{display:grid;place-items:center;color:var(--couple-accent-ink)}.couple-where svg{width:15px;height:15px}.couple-where b{display:block;font-family:var(--font-display);font-weight:500;font-size:13px;color:var(--ink)}
/* ── 记下一个日子 ── */
.couple-m-name{margin-top:14px;padding:4px 2px 10px;border-bottom:1.5px solid color-mix(in srgb,var(--couple-accent) 70%,var(--ls-inner))}.couple-m-name input{width:100%;border:none;outline:none;background:transparent;color:var(--ink);font-family:var(--font-display);font-size:21px;padding:0}
.couple-modal .couple-seg{margin-top:14px;background:color-mix(in srgb,var(--couple-accent) 14%,var(--ls-inner))}.couple-modal .couple-seg button{font-family:var(--font-display)}.couple-modal .couple-seg button[aria-checked="true"]{background:var(--ls-inner);color:var(--couple-accent-ink);box-shadow:0 1px 4px color-mix(in srgb,var(--couple-accent-deep) 18%,transparent)}
.couple-stepper{display:flex;align-items:center;justify-content:center;gap:18px;margin:18px 0 6px}.couple-stepper>button{width:38px;height:38px;border:none;border-radius:50%;display:grid;place-items:center;font-size:20px;background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--couple-accent-ink);cursor:pointer}
.couple-stepper>div{display:flex;align-items:baseline;gap:4px;font-family:var(--font-display);font-size:15px;color:var(--ink)}.couple-stepper input{width:3.2em;border:none;outline:none;background:transparent;text-align:center;font-family:var(--font-display);font-size:40px;font-weight:500;color:var(--ink);padding:0;-moz-appearance:textfield}.couple-stepper input::-webkit-outer-spin-button,.couple-stepper input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}
.couple-m-result{display:flex;align-items:center;gap:10px;margin-top:16px;padding:12px 14px;border-radius:16px;font-family:var(--font-display);font-size:13.5px;color:var(--ink)}.couple-m-result b{font-weight:500;color:var(--couple-accent-ink)}.couple-m-result small{font-size:12px;color:var(--ink2)}.couple-m-heart{color:var(--couple-accent-ink)}
.couple-m-pv{margin:16px 2px 8px;font-family:var(--font-display);font-size:11.5px;color:var(--ink2)}
.couple-wi{display:flex;align-items:baseline;gap:6px;margin-top:14px;padding:4px 2px 10px;border-bottom:1.5px solid color-mix(in srgb,var(--couple-accent) 70%,var(--ls-inner));font-family:var(--font-display)}.couple-wi small{font-size:15px;color:var(--ink2);flex-shrink:0}.couple-wi input{flex:1;min-width:0;border:none;outline:none;background:transparent;color:var(--ink);font-family:var(--font-display);font-size:21px;padding:0}
.couple-acts-list{display:grid;gap:8px;margin-top:16px}
.couple-actrow{height:48px;display:flex;align-items:center;gap:10px;padding:0 16px;border:none;border-radius:16px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink);font-family:var(--font-display);font-size:14.5px;text-align:left;cursor:pointer}
.couple-actrow i{width:28px;height:28px;border-radius:9px;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--couple-accent-ink)}.couple-actrow svg{width:14px;height:14px}
.couple-actrow.is-danger{color:var(--coral-text)}.couple-actrow.is-danger i{background:color-mix(in srgb,var(--coral) 16%,var(--ls-inner));color:var(--coral)}
/* ── shared bits of the list pages ── */
.couple-add-btn{width:38px;height:38px;border:none;border-radius:50%;display:grid;place-items:center;background:linear-gradient(180deg,color-mix(in srgb,var(--couple-accent) 70%,#fff),var(--couple-accent));color:var(--couple-on-paper);box-shadow:var(--ls-inner-shadow);cursor:pointer}.couple-add-btn svg{width:19px;height:19px}
.couple-intro{margin:2px 6px 0;font-family:var(--font-display);font-size:13px;color:var(--ink2)}.couple-intro b{font-weight:500;color:var(--couple-accent-ink)}
.couple-pad{padding:16px 18px;border-radius:18px}
.cw-tabs{display:flex;gap:7px;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:2px 16px 4px}.cw-tabs::-webkit-scrollbar{display:none}
.cw-tab{flex-shrink:0;padding:6px 12px;border-radius:15px;border:1px solid var(--ls-edge);background:color-mix(in srgb,var(--ls-inner) 60%,transparent);color:var(--ink2);font-family:var(--font-display);font-size:12.5px;cursor:pointer}.cw-tab.on{background:var(--ls-inner);color:var(--couple-accent-ink);box-shadow:0 4px 10px -4px color-mix(in srgb,var(--couple-accent-deep) 30%,transparent)}
/* ── 我们的日子 ── */
.couple-days-hero{text-align:center;margin:4px 0 0}.couple-days-hero small{font-family:var(--font-display);font-size:13px;letter-spacing:.1em;color:var(--ink2)}
.couple-days-hero div{margin-top:2px;font-family:var(--font-display);font-size:15px;color:var(--ink)}.couple-days-hero b{margin:0 6px;font-size:46px;font-weight:500;text-shadow:0 0 30px color-mix(in srgb,var(--couple-accent) 70%,var(--ls-glow)),0 2px 0 var(--ls-hi)}
.couple-dcard{width:100%;display:flex;align-items:center;gap:14px;padding:12px;border-radius:22px;text-align:left;font-family:inherit;color:var(--ink);cursor:pointer}.div.couple-dcard{cursor:default}
.couple-dcard.is-past{opacity:.72}
.couple-dcard .ann-days{width:66px;border-radius:12px}.couple-dcard .ann-days b{font-size:26px;padding-top:3px;line-height:1.2}.couple-dcard .ann-days b.is-sm{font-size:20px;padding:8px 0 6px}.couple-dcard .ann-days i{font-size:10.5px;padding:3px 0}.couple-dcard .ann-days small{font-size:10px;padding-bottom:5px}
.couple-dcard-main{flex:1;min-width:0;display:flex;flex-direction:column}.couple-dcard-main>b{display:flex;align-items:center;gap:6px;font-family:var(--font-display);font-size:16px;font-weight:500;overflow-wrap:anywhere}
.couple-tag{flex-shrink:0;padding:1px 7px;border-radius:8px;background:color-mix(in srgb,var(--couple-accent) 25%,var(--ls-inner));color:var(--couple-accent-ink);font-family:var(--font-body);font-size:10.5px;font-weight:400}.couple-tag.is-y{background:color-mix(in srgb,var(--couple-companion) 55%,var(--ls-inner));color:color-mix(in srgb,var(--couple-companion) 40%,var(--ink))}
.couple-dcard-line{margin-top:3px;font-family:var(--font-display);font-size:12.5px;color:var(--ink2)}
.couple-dcard .couple-bar{margin-top:8px!important;height:4px}
.couple-ms{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:2px 16px 8px}.couple-ms::-webkit-scrollbar{display:none}
.couple-msc{flex:0 0 auto;min-width:92px;padding:10px 12px;border-radius:16px;text-align:left;border:1.5px dashed color-mix(in srgb,var(--couple-accent) 70%,var(--ls-inner));background:color-mix(in srgb,var(--couple-accent) 8%,color-mix(in srgb,var(--ls-inner) 50%,transparent));color:var(--ink);font-family:inherit;cursor:pointer}
.couple-msc b{display:block;font-family:var(--font-display);font-size:15px;font-weight:500}.couple-msc small{font-size:11px;color:var(--ink2)}.couple-msc em{display:block;margin-top:4px;font-style:normal;font-size:11px;color:var(--couple-accent-ink)}
/* ── 想和你一起: one ticket shape per category ── */
.cw-list{display:flex;flex-direction:column;gap:12px;filter:drop-shadow(0 1px 1px color-mix(in srgb,var(--tint-deep) var(--ls-a),transparent)) drop-shadow(0 8px 9px color-mix(in srgb,var(--tint-deep) var(--ls-d),transparent))}
.cw-tk{position:relative;width:100%;display:flex;padding:0;border:none;border-radius:16px;overflow:hidden;background:var(--ls-inner);color:var(--ink);font-family:inherit;text-align:left;cursor:pointer;-webkit-mask:radial-gradient(circle 7px at calc(100% - 76px) 0,transparent 98%,#000) top/100% 51% no-repeat,radial-gradient(circle 7px at calc(100% - 76px) 100%,transparent 98%,#000) bottom/100% 51% no-repeat;mask:radial-gradient(circle 7px at calc(100% - 76px) 0,transparent 98%,#000) top/100% 51% no-repeat,radial-gradient(circle 7px at calc(100% - 76px) 100%,transparent 98%,#000) bottom/100% 51% no-repeat}
div.cw-tk{cursor:default}
.cw-main{flex:1;min-width:0;padding:12px 14px}.cw-lab{display:flex;justify-content:space-between;gap:8px;font-size:10.5px;letter-spacing:.12em;color:var(--ink2)}.cw-lab em{font-style:normal;letter-spacing:0;color:var(--couple-accent-ink);white-space:nowrap}
.cw-big{display:flex;align-items:center;gap:8px;margin-top:5px;font-family:var(--font-display);font-size:18px;font-weight:500;overflow-wrap:anywhere}
.cw-line{position:relative;flex:1;min-width:24px;height:0;border-top:1.5px dashed color-mix(in srgb,var(--ink2) 45%,transparent)}.cw-line svg{position:absolute;left:50%;top:-9px;width:16px;height:16px;transform:translateX(-50%) rotate(90deg);fill:var(--couple-accent);stroke:var(--couple-accent-deep);stroke-width:1.2}
.cw-stub{width:76px;flex-shrink:0;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:2px;border-left:2px dashed color-mix(in srgb,var(--couple-accent) 70%,var(--ls-inner));background:color-mix(in srgb,var(--couple-accent) 16%,var(--ls-inner))}
.cw-stub b{font-family:var(--font-display);font-size:13.5px;font-weight:500;color:var(--couple-accent-ink)}.cw-stub small{font-size:10.5px;color:var(--ink2)}
.cw-tk.is-movie .cw-main{padding-left:22px;background:repeating-linear-gradient(180deg,color-mix(in srgb,var(--couple-companion) 90%,#888) 0 5px,transparent 5px 9px) 8px 0/6px 100% no-repeat}.cw-tk.is-movie .cw-stub{background:color-mix(in srgb,var(--couple-companion) 40%,var(--ls-inner))}
.cw-tk.is-coupon .cw-stub{background:color-mix(in srgb,#FFE39E 35%,var(--ls-inner))}
.cw-tk.is-gift .cw-main{padding-left:30px}.cw-tk.is-gift .cw-main::before{content:'';position:absolute;left:11px;top:50%;width:9px;height:9px;margin-top:-5px;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--ink2) 55%,transparent)}.cw-tk.is-gift .cw-stub{background:color-mix(in srgb,#FFCBA8 38%,var(--ls-inner))}
.cw-tk.is-star .cw-stub{background:color-mix(in srgb,#D8CBF3 38%,var(--ls-inner))}
.cw-tk.is-coupon .cw-stub b,.cw-tk.is-gift .cw-stub b,.cw-tk.is-star .cw-stub b,.cw-tk.is-movie .cw-stub b{color:var(--ink)}
.cw-tk.is-done{opacity:.78}.cw-tk.is-done .cw-stub{background:color-mix(in srgb,var(--couple-accent) 16%,var(--ls-inner))}.cw-tk.is-done .cw-stub b{color:var(--couple-accent-ink)}
.cw-stamp{position:absolute;right:100px;bottom:12px;padding:2px 8px;border-radius:8px;border:2px solid color-mix(in srgb,var(--couple-accent-deep) 70%,transparent);color:color-mix(in srgb,var(--couple-accent-deep) 80%,transparent);font-family:var(--font-display);font-size:12px;letter-spacing:.1em;transform:rotate(-12deg);pointer-events:none}
.couple-modal .cw-tk{filter:drop-shadow(0 1px 1px color-mix(in srgb,var(--tint-deep) var(--ls-a),transparent)) drop-shadow(0 6px 7px color-mix(in srgb,var(--tint-deep) var(--ls-d),transparent))}
/* ── 我们的轨迹 ── */
.ct-day{display:flex;align-items:baseline;gap:8px;margin:12px 4px 0}.ct-day b{font-family:var(--font-display);font-size:15px;font-weight:500}.ct-day small{font-family:var(--font-display);font-size:12px;color:var(--ink2)}
.ct-day em{margin-left:auto;padding:2px 8px;border-radius:9px;background:color-mix(in srgb,var(--couple-accent) 25%,var(--ls-inner));color:var(--couple-accent-ink);font-style:normal;font-size:11px}
.ct-tl{position:relative;padding-left:60px}.ct-tl::before{content:'';position:absolute;left:44px;top:8px;bottom:8px;width:1.5px;background:linear-gradient(180deg,var(--couple-accent),color-mix(in srgb,var(--couple-accent) 30%,transparent))}
.ct-ev{position:relative;margin-bottom:10px}.ct-t{position:absolute;left:-62px;top:14px;width:30px;text-align:right;font-size:10.5px;color:var(--ink2)}.ct-dot{position:absolute;left:-21px;top:16px;width:11px;height:11px;border-radius:50%;background:var(--ls-inner);border:2.5px solid var(--couple-accent);box-sizing:border-box}
.ct-card{width:100%;display:flex;align-items:flex-start;gap:11px;padding:12px;border:none;border-radius:16px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink);font-family:inherit;text-align:left}button.ct-card{cursor:pointer}
.ct-ic{flex-shrink:0;width:32px;height:32px;border-radius:10px;display:grid;place-items:center;color:var(--couple-accent-ink)}.ct-ic svg{width:16px;height:16px}
.ct-ic.is-letter{background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner))}
.ct-ic.is-mood{background:color-mix(in srgb,#FFE39E 35%,var(--ls-inner));color:color-mix(in srgb,#FFE39E 40%,var(--ink))}
.ct-ic.is-day{background:color-mix(in srgb,var(--couple-companion) 55%,var(--ls-inner));color:color-mix(in srgb,var(--couple-companion) 40%,var(--ink))}
.ct-ic.is-wish{background:color-mix(in srgb,#D8CBF3 45%,var(--ls-inner));color:color-mix(in srgb,#D8CBF3 35%,var(--ink))}
.ct-ic.is-note{background:color-mix(in srgb,#FFCBA8 40%,var(--ls-inner));color:color-mix(in srgb,#FFCBA8 35%,var(--ink))}
.ct-ic.is-task{background:color-mix(in srgb,#BFE6D2 40%,var(--ls-inner));color:color-mix(in srgb,#BFE6D2 35%,var(--ink))}
.ct-m{flex:1;min-width:0}.ct-m h4{margin:0;font-family:var(--font-display);font-size:14.5px;font-weight:500}.ct-m p{margin:3px 0 0;font-size:12px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ct-mood{display:inline-block;margin-top:4px;padding:1px 8px;border-radius:9px;background:color-mix(in srgb,#FFE39E 40%,var(--ls-inner));color:var(--ink);font-family:var(--font-display);font-size:11.5px}
.ct-quote{margin-top:5px;padding:6px 10px;border-radius:4px 12px 12px 12px;background:var(--couple-paper);font-family:var(--font-display);font-size:12.5px;color:var(--couple-on-paper);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ct-go{align-self:center;color:var(--ink2)}.ct-more{text-align:center}
.ct-start{text-align:center;margin:10px 0 0}.ct-start i{width:40px;height:40px;margin:0 auto 6px;border-radius:50%;display:grid;place-items:center;background:var(--ls-inner);box-shadow:0 0 0 6px color-mix(in srgb,var(--couple-accent) 22%,transparent);color:var(--couple-accent-ink)}.ct-start svg{width:18px;height:18px;fill:currentColor;stroke:none}
.ct-start b{display:block;font-family:var(--font-display);font-size:14px;font-weight:500}.ct-start small{font-family:var(--font-display);font-size:12px;color:var(--ink2)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell{--couple-modal-top:var(--surface);--couple-modal-bottom:var(--surface-alt)}:root:not([data-theme="light"]) .couple-shell :is(.couple-modal-x){color:var(--tint)}}
:root[data-theme="dark"] .couple-shell{--couple-modal-top:var(--surface);--couple-modal-bottom:var(--surface-alt)}:root[data-theme="dark"] .couple-shell :is(.couple-modal-x){color:var(--tint)}
/* the fields in the modals have their own underline / paper: the focus is shown on that, not by the browser's outline */
.couple-m-in:focus-within,.couple-m-name:focus-within,.couple-wi:focus-within{border-bottom-color:var(--couple-accent-deep)}
.couple-signpad:focus-within{box-shadow:var(--ls-note-shadow),0 0 0 2px color-mix(in srgb,var(--couple-accent-deep) 55%,transparent)}
.couple-shell{--cw-stub-ink:var(--couple-accent-deep)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell{--cw-stub-ink:var(--ink)}:root:not([data-theme="light"]) .couple-shell :is(.couple-chip:not(.on),.cw-tab.on,.couple-modal-x,.couple-actrow i:not(.x)){color:var(--tint)}:root:not([data-theme="light"]) .couple-shell .couple-add-btn{color:var(--couple-on-paper)}}
:root[data-theme="dark"] .couple-shell{--cw-stub-ink:var(--ink)}:root[data-theme="dark"] .couple-shell :is(.couple-chip:not(.on),.cw-tab.on,.couple-modal-x,.couple-actrow i:not(.x)){color:var(--tint)}:root[data-theme="dark"] .couple-shell .couple-add-btn{color:var(--couple-on-paper)}
.cw-stub b,.cw-tk.is-done .cw-stub b{color:var(--cw-stub-ink)}
.cw-stub small{color:color-mix(in srgb,var(--cw-stub-ink) 72%,transparent)}
/* accent colour used AS text: the deep tone on light grounds, the soft accent itself on dark ones (text on an accent fill keeps --couple-on-paper) */
.couple-shell{--couple-accent-ink:var(--couple-accent-deep)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell{--couple-accent-ink:var(--couple-accent)}}
:root[data-theme="dark"] .couple-shell{--couple-accent-ink:var(--couple-accent)}
/* 今天的心情 / 建立情侣空间 / 失效与准备中的提示页 / 导入旧空间的提示条: the same glass + paper as the pages around them */
.couple-pagewrap{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain;scrollbar-width:none}.couple-pagewrap::-webkit-scrollbar{display:none}
.couple-sub-top h2 small{display:block;margin-top:2px;font-family:var(--font-body);font-size:12px;font-weight:400;color:var(--ink2)}
.mood-today-grid{margin-bottom:0;padding:16px 0}
.couple-av-lg.is-md{width:52px;height:52px;border-width:2px;box-shadow:0 8px 16px -8px color-mix(in srgb,var(--tint-deep) var(--ls-av),transparent)}.couple-av-lg.is-md .couple-initial{font-size:18px}
.mood-today-card{align-items:center}
.mood-options button{background:var(--ls-inner);border:none;box-shadow:var(--ls-inner-shadow);color:var(--ink)}
.couple-sub-body .mood-options button.active{background:color-mix(in srgb,var(--couple-accent) 30%,var(--ls-inner));box-shadow:var(--ls-inner-shadow),inset 0 0 0 1.5px var(--couple-accent-deep);color:var(--accent-text)}
.mood-more-toggle{color:var(--couple-accent-ink)}
.couple-mood-note{margin-top:0;padding:12px 14px}.couple-mood-note textarea{display:block;width:100%;min-height:96px;resize:none;border:none;outline:none;background:transparent;padding:0;color:var(--ink);font-family:inherit;font-size:14px;line-height:1.7;box-shadow:none}
.mood-timeline.couple-glass{padding:6px 16px;gap:0}
.couple-empty-card.couple-glass{box-shadow:var(--ls-glass-shadow)}
.couple-sub-title svg{width:16px;height:16px;margin-right:6px;vertical-align:-2px;color:var(--ink2)}
.couple-ob-pair .couple-knot{position:relative;left:auto;top:auto;transform:none;margin:0 -12px;z-index:2;flex-shrink:0}
.couple-ob-pair .couple-av-lg{flex-shrink:0}
.couple-onboard-confirm.couple-ob{padding:10px 8px 8px}.couple-onboard-confirm h1{margin:26px 0 22px;font-size:25px}
.couple-first-day{width:100%;display:flex;flex-direction:column;align-items:center;gap:10px}
.couple-first-day h2{margin:0 0 4px;font-family:var(--font-display);font-size:18px;line-height:1.32;font-weight:500;color:var(--ink)}.couple-first-day p{margin:2px 0 8px;font-size:12.5px;line-height:1.55;color:var(--ink2)}
.couple-date-card{width:min(240px,100%);border:none;border-radius:24px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink);font-family:inherit;padding:14px 16px 12px;cursor:pointer}
.couple-date-card i{color:var(--couple-accent-ink)}
.couple-calendar{background:var(--couple-modal-top,#fff);border:1px solid var(--ls-edge);box-shadow:inset 0 1.5px 0 var(--ls-hi),0 24px 50px -14px color-mix(in srgb,var(--couple-accent-deep) 45%,transparent)}
.couple-cal-head button{border-radius:50%;background:color-mix(in srgb,var(--couple-accent) 18%,var(--ls-inner));color:var(--couple-accent-ink)}
.couple-cal-grid button.selected{background:var(--couple-accent);color:var(--couple-on-paper);box-shadow:0 4px 10px -2px color-mix(in srgb,var(--couple-accent-deep) 45%,transparent)}
.couple-cal-grid button.today:not(.selected)::after{background:var(--couple-accent-deep)}
.couple-today-btn{color:var(--couple-accent-ink)}
.couple-empty.couple-glass{margin:0;padding:22px 20px;border-radius:22px;text-align:center}.couple-empty.couple-glass svg{color:var(--couple-accent-ink);margin-bottom:8px}.couple-empty.couple-glass .couple-cta{margin:16px 0 0;width:100%}
.couple-legacy-note{margin:0 0 14px;padding:14px 16px;border-radius:22px;border:1px solid var(--ls-edge);background:var(--ls-glass);box-shadow:var(--ls-glass-shadow);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);display:flex;flex-direction:column;gap:10px}
.couple-legacy-note p{margin:0;font-size:12.5px;line-height:1.6;color:var(--ink2)}
.couple-legacy-note .couple-link-btn{align-self:flex-start;padding:7px 14px;border-radius:16px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--couple-accent-ink);font-size:13px}
.couple-empty.couple-glass button.couple-cta{margin:16px 0 0;width:100%;padding:0;border-radius:25px;background:linear-gradient(180deg,color-mix(in srgb,var(--couple-accent) 85%,#fff),var(--couple-accent));color:var(--couple-on-paper);font-weight:inherit}
.couple-pagewrap .couple-onboarding>p.couple-glass{align-self:stretch;margin:0}
.couple-cal-head button{width:34px;height:34px}.couple-cal-head button svg{width:17px;height:17px}

/* ── 愿望票 (2026-10-15): eight kinds, one classic admission-ticket silhouette. The mask (concave corners, side notches, the
   two bites at the seam) is on .cwt-tk; the shadow lives on the button around it, since a mask would clip its own shadow. ── */
.couple-shell{--cwt-paper:#fff}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell{--cwt-paper:var(--surface)}}
:root[data-theme="dark"] .couple-shell{--cwt-paper:var(--surface)}
.cwt{--c:#f7dde3;--d:#a4566b;position:relative;display:block;width:100%;padding:0;border:none;background:none;font-family:inherit;text-align:left;color:var(--ink);cursor:pointer;
  filter:drop-shadow(0 1px 1px rgb(110 70 90/14%)) drop-shadow(0 8px 12px rgb(140 90 115/13%));
  transition:transform .25s cubic-bezier(.3,1.5,.5,1),opacity .3s;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:pan-y}
div.cwt{cursor:default}
.cwt.is-trip{--c:#f7dde3;--d:#a4566b}.cwt.is-movie{--c:#dde6f3;--d:#4f6a8f}.cwt.is-coupon{--c:#f6ebcb;--d:#8a6d2e}.cwt.is-gift{--c:#f8e0d3;--d:#a3613f}
.cwt.is-food{--c:#dcecdf;--d:#4f7d5c}.cwt.is-show{--c:#e6def5;--d:#6b5a9c}.cwt.is-memo{--c:#f1e1db;--d:#94604f}.cwt.is-star{--c:#e2e8ef;--d:#56677d}
.cwt-tk{--seam:calc(100% - 92px);position:relative;display:flex;gap:12px;height:88px;padding:6px;box-sizing:border-box;
  background:linear-gradient(180deg,color-mix(in srgb,var(--c) 40%,var(--cwt-paper)),color-mix(in srgb,var(--c) 75%,var(--cwt-paper)));
  -webkit-mask:radial-gradient(circle 11px at 0 0,#0000 98%,#000),radial-gradient(circle 11px at 100% 0,#0000 98%,#000),radial-gradient(circle 11px at 0 100%,#0000 98%,#000),radial-gradient(circle 11px at 100% 100%,#0000 98%,#000),radial-gradient(circle 7px at var(--seam) 0,#0000 98%,#000),radial-gradient(circle 7px at var(--seam) 100%,#0000 98%,#000),radial-gradient(circle 4px at 0 50%,#0000 98%,#000),radial-gradient(circle 4px at 100% 50%,#0000 98%,#000);
  -webkit-mask-composite:source-in;
  mask:radial-gradient(circle 11px at 0 0,#0000 98%,#000),radial-gradient(circle 11px at 100% 0,#0000 98%,#000),radial-gradient(circle 11px at 0 100%,#0000 98%,#000),radial-gradient(circle 11px at 100% 100%,#0000 98%,#000),radial-gradient(circle 7px at var(--seam) 0,#0000 98%,#000),radial-gradient(circle 7px at var(--seam) 100%,#0000 98%,#000),radial-gradient(circle 4px at 0 50%,#0000 98%,#000),radial-gradient(circle 4px at 100% 50%,#0000 98%,#000);
  mask-composite:intersect}
.cwt-tk::after{content:"";position:absolute;left:var(--seam);top:9px;bottom:9px;border-left:2px dotted color-mix(in srgb,var(--d) 35%,var(--cwt-paper))}
.cwt-main{position:relative;flex:1;min-width:0;border-radius:4px;padding:9px 12px 0 16px;
  background:linear-gradient(180deg,var(--cwt-paper) 55%,color-mix(in srgb,var(--c) 12%,var(--cwt-paper)));
  box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--c) 70%,var(--cwt-paper)),inset 0 0 0 3px var(--cwt-paper),inset 0 0 0 3.6px color-mix(in srgb,var(--c) 70%,var(--cwt-paper)),0 1px 2px rgb(110 70 90/12%)}
.cwt-main::before{content:"";position:absolute;inset:0;pointer-events:none;background:var(--d);opacity:.2;
  -webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='70'%3E%3Cg fill='%23000'%3E%3Cpath d='M14 9l1.3 3 3 1.3-3 1.3-1.3 3-1.3-3-3-1.3 3-1.3z'/%3E%3Cpath d='M78 40l.9 2.1 2.1.9-2.1.9-.9 2.1-.9-2.1-2.1-.9 2.1-.9z'/%3E%3Cpath d='M104 12l.7 1.6 1.6.7-1.6.7-.7 1.6-.7-1.6-1.6-.7 1.6-.7z'/%3E%3Ccircle cx='44' cy='20' r='1.2'/%3E%3Ccircle cx='60' cy='58' r='1'/%3E%3Ccircle cx='24' cy='52' r='1.4'/%3E%3Ccircle cx='96' cy='60' r='1'/%3E%3Ccircle cx='114' cy='36' r='1.2'/%3E%3Cpath d='M40 44c-1.5-1.6-4-.2-3 1.8.6 1.2 3 2.7 3 2.7s2.4-1.5 3-2.7c1-2-1.5-3.4-3-1.8z'/%3E%3C/g%3E%3C/svg%3E") 0 0/120px 70px;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='120' height='70'%3E%3Cg fill='%23000'%3E%3Cpath d='M14 9l1.3 3 3 1.3-3 1.3-1.3 3-1.3-3-3-1.3 3-1.3z'/%3E%3Cpath d='M78 40l.9 2.1 2.1.9-2.1.9-.9 2.1-.9-2.1-2.1-.9 2.1-.9z'/%3E%3Cpath d='M104 12l.7 1.6 1.6.7-1.6.7-.7 1.6-.7-1.6-1.6-.7 1.6-.7z'/%3E%3Ccircle cx='44' cy='20' r='1.2'/%3E%3Ccircle cx='60' cy='58' r='1'/%3E%3Ccircle cx='24' cy='52' r='1.4'/%3E%3Ccircle cx='96' cy='60' r='1'/%3E%3Ccircle cx='114' cy='36' r='1.2'/%3E%3Cpath d='M40 44c-1.5-1.6-4-.2-3 1.8.6 1.2 3 2.7 3 2.7s2.4-1.5 3-2.7c1-2-1.5-3.4-3-1.8z'/%3E%3C/g%3E%3C/svg%3E") 0 0/120px 70px}
.cwt-main>*{position:relative}
.cwt-lab{display:flex;justify-content:space-between;align-items:center;gap:8px;font-size:10.5px;letter-spacing:.12em;color:var(--d)}
.cwt-lab em{font-style:normal;font-size:11px;letter-spacing:.06em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40%}
.cwt-big{display:flex;align-items:center;gap:8px;margin-top:7px;font-family:var(--font-display);font-size:17px;font-weight:500;color:var(--ink);white-space:nowrap;min-width:0}
.cwt-dest{overflow:hidden;text-overflow:ellipsis;min-width:0}
.cwt-line{flex:1;min-width:20px;height:1px;border-top:1px dashed color-mix(in srgb,var(--d) 50%,var(--cwt-paper));position:relative}
.cwt-line::after{content:"✦";position:absolute;left:50%;top:-9px;transform:translateX(-50%);color:var(--d);font-size:11px;font-style:normal}
.cwt-stub{width:80px;flex:none;border-radius:4px;display:flex;padding:6px;box-sizing:border-box;
  background:linear-gradient(180deg,color-mix(in srgb,var(--c) 70%,var(--cwt-paper)),var(--c) 60%,color-mix(in srgb,var(--c) 88%,var(--d)));box-shadow:inset 0 1px 0 rgb(255 255 255/80%),0 1px 2px rgb(110 70 90/12%)}
.cwt-frame{flex:1;border:1px solid rgb(255 255 255/85%);border-radius:3px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;color:var(--d)}
.cwt-frame svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:1.3;stroke-linecap:round;stroke-linejoin:round;margin-bottom:2px;opacity:.85}
.cwt-frame b{font-weight:500;font-size:13.5px;letter-spacing:.06em}
.cwt-frame small{font-size:10px;opacity:.75;letter-spacing:.04em}
.cwt-list{display:flex;flex-direction:column;gap:14px}
.couple-modal .cwt{margin-top:2px}
/* done: the stub is gone, its rim remains, a round stamp in its place */
.cwt.is-done .cwt-stub{background:none;box-shadow:none}.cwt.is-done .cwt-frame{visibility:hidden}
.cwt-stamp{position:absolute;right:13px;top:50%;width:54px;height:54px;margin-top:-27px;border-radius:50%;border:1.5px solid var(--d);box-shadow:inset 0 0 0 3px var(--cwt-paper),inset 0 0 0 4px color-mix(in srgb,var(--d) 55%,transparent);
  display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11.5px;line-height:1.15;letter-spacing:.06em;color:var(--d);transform:rotate(-14deg);background:color-mix(in srgb,var(--cwt-paper) 60%,transparent)}
.cwt-stamp small{font-size:9px;opacity:.85}
.cwt.is-done .cwt-big{color:var(--ink2)}
/* gestures */
.cwt.is-hop{animation:cwtHop .34s cubic-bezier(.3,1.6,.5,1)}
@keyframes cwtHop{40%{transform:translateY(-5px) rotate(-1.2deg)}70%{transform:translateY(1px) rotate(.5deg)}}
.cwt .cwt-stub{transition:transform .65s cubic-bezier(.4,0,.6,1)}
.cwt.is-holding .cwt-stub{transform:rotate(5deg) translate(3px,2px)}
.cwt.is-holding .cwt-main{animation:cwtShiver .65s linear}
@keyframes cwtShiver{20%{transform:translateX(-.5px)}40%{transform:translateX(.6px)}60%{transform:translateX(-.8px)}80%{transform:translateX(1px)}}
.cwt.is-torn .cwt-stub{visibility:hidden}
.cwt-piece{position:fixed;z-index:200;margin:0;pointer-events:none;transition:transform .75s cubic-bezier(.5,0,.7,.4),opacity .75s}
.cwt-piece.is-falling{transform:translate(26px,260px) rotate(32deg);opacity:0}
.cwt.is-crumple{animation:cwtCrumple .5s cubic-bezier(.5,0,.7,.4) forwards;pointer-events:none}
@keyframes cwtCrumple{30%{transform:scale(.92,.8) rotate(3deg)}100%{transform:scale(.08) rotate(-40deg);opacity:0}}
.couple-actrow.is-armed{background:color-mix(in srgb,var(--coral) 14%,var(--ls-inner))}
.cwt-kinds{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.cwt-kinds .couple-chip{padding:6px 0;text-align:center}
@media(prefers-reduced-motion:reduce){.cwt.is-hop,.cwt.is-holding .cwt-main,.cwt.is-crumple{animation:none}.cwt .cwt-stub,.cwt-piece{transition:none}}

/* ── 首页交互 (2026-10-15) ── */
/* 戳一下 */
button.couple-knot{padding:0;cursor:pointer;font:inherit}
.couple-knot svg{transition:transform .3s cubic-bezier(.3,1.8,.5,1)}
.couple-knot.is-beat svg{animation:coupleBeat .5s cubic-bezier(.3,1.8,.5,1)}
@keyframes coupleBeat{30%{transform:scale(1.45)}60%{transform:scale(.9)}}
.couple-pair .couple-pair-av{transition:transform .35s cubic-bezier(.3,1.6,.5,1)}
.couple-pair.is-lean .couple-pair-av:first-child{transform:translateX(8px) rotate(4deg)}
.couple-pair.is-lean .couple-pair-av:last-child{transform:translateX(-8px) rotate(-4deg)}
.couple-poke-ring{position:absolute;left:50%;top:57px;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;border:2px solid var(--couple-accent);pointer-events:none;animation:couplePokeRing .7s ease-out forwards;z-index:1}
@keyframes couplePokeRing{to{transform:scale(2.6);opacity:0}}
.couple-poke-heart{position:absolute;left:50%;top:48px;font-size:14px;color:var(--couple-accent-deep);pointer-events:none;z-index:3;animation:couplePokeUp 1.1s ease-out forwards}
@keyframes couplePokeUp{0%{opacity:1;transform:translate(-50%,0) scale(.6)}100%{opacity:0;transform:translate(calc(-50% + var(--dx)),-90px) scale(1.15)}}
.couple-poke-line{height:18px;margin:2px 0 0;font-size:12px;color:var(--couple-accent-ink);opacity:0;transition:opacity .3s}
.couple-poke-line.on{opacity:1}
/* 纸条盒 entry */
.couple-box-pill{display:inline-flex;align-items:center;gap:4px;border:1px solid color-mix(in srgb,var(--couple-accent) 60%,transparent);background:var(--ls-inner);border-radius:999px;padding:3px 11px;font-family:var(--font-body);font-size:12px;color:var(--ink2);cursor:pointer}
.couple-box-pill b{font-weight:500;color:var(--couple-accent-ink)}
/* 贴纸条 / 揭纸条 */
.couple-sticky.is-dropping{animation:coupleDrop .65s cubic-bezier(.3,1.4,.5,1)}
@keyframes coupleDrop{0%{transform:translateY(-230px) rotate(-12deg);opacity:0}60%{opacity:1}}
.couple-sticky.is-dropping::before{animation:coupleTape .35s .55s cubic-bezier(.2,1.6,.5,1) backwards}
@keyframes coupleTape{0%{transform:translateX(-50%) scaleX(0) translateY(-6px)}}
.couple-sticky[data-peel]{touch-action:pan-x;user-select:none;-webkit-user-select:none;transform-origin:8% 0}
.couple-sticky.is-peeling,.couple-sticky.is-flying{z-index:6}
.couple-sticky.is-peeling{transition:none;box-shadow:0 18px 30px color-mix(in srgb,var(--couple-accent-deep) 25%,transparent)}
.couple-sticky.is-back{transition:transform .45s cubic-bezier(.3,1.6,.5,1)}
.couple-sticky.is-flying{transition:transform .55s cubic-bezier(.5,-.2,.6,1),opacity .55s;opacity:0}
.couple-curl{position:absolute;right:0;bottom:0;width:calc(var(--peel,0)*70px);height:calc(var(--peel,0)*70px);border-radius:0 0 14px 0;pointer-events:none;
  background:linear-gradient(315deg,transparent 48%,color-mix(in srgb,var(--couple-accent-deep) 18%,transparent) 50%,#fff 56%,color-mix(in srgb,var(--couple-accent) 40%,#fff) 78%)}
.couple-peel-hint{margin:2px 0 0;text-align:center;font-size:11px;color:var(--ink2);letter-spacing:.04em;opacity:.8}
/* 下一个纪念日: a little desk calendar on two rings */
.couple-anni{cursor:default}
.couple-anni-main{border:none;background:none;padding:0;text-align:left;font-family:inherit;color:inherit;cursor:pointer}
.ann-flip{position:relative;width:78px;height:96px;flex-shrink:0;perspective:420px;cursor:pointer;-webkit-tap-highlight-color:transparent}
.ann-flip .ann-face{position:absolute;inset:0;width:auto;backface-visibility:hidden;-webkit-backface-visibility:hidden;transform-origin:50% 0;transition:transform .6s cubic-bezier(.3,1.3,.5,1)}
.ann-flip .ann-face.is-back{transform:rotateX(180deg)}
.ann-flip .ann-face.is-back b{font-size:28px;color:var(--couple-accent-ink)}
.ann-flip.is-flipped .ann-face:not(.is-back){transform:rotateX(-180deg)}
.ann-flip.is-flipped .ann-face.is-back{transform:rotateX(0)}
.ann-ring{position:absolute;top:-5px;left:20px;width:5px;height:11px;border-radius:3px;background:linear-gradient(color-mix(in srgb,var(--couple-accent) 40%,#fff),var(--couple-accent-deep));box-shadow:0 1px 2px rgb(120 70 90/30%);z-index:3}
.ann-ring.is-r{left:auto;right:20px}
.ann-flip.is-tick .ann-face:not(.is-back) b{animation:coupleTick .45s cubic-bezier(.3,1.6,.5,1)}
@keyframes coupleTick{35%{transform:translateY(-6px) scale(1.12)}}
/* 我们的最近 */
.cr-day-t{margin:2px 2px 6px;font-size:11.5px;letter-spacing:.14em;color:var(--ink2)}
.cr-list{margin-bottom:10px}
.cr-row{width:100%;display:flex;align-items:center;gap:12px;padding:8px 0;border:none;border-bottom:1px solid color-mix(in srgb,var(--couple-accent) 25%,transparent);background:none;text-align:left;font-family:inherit;color:var(--ink);cursor:pointer}
.cr-list .cr-row:last-child{border-bottom:0}
.cr-text{min-width:0;flex:1}.cr-text b{display:block;font-weight:500;font-size:14px}
.cr-text small{display:block;margin-top:1px;font-size:11.5px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.cr-mini{flex:none;width:40px;height:32px;display:grid;place-items:center;position:relative}
.cr-note::before{content:"";width:28px;height:26px;background:var(--note,var(--couple-paper));border-radius:2px 2px 7px 2px;transform:rotate(-4deg);box-shadow:0 2px 5px rgb(150 100 120/18%)}
.cr-note::after{content:"";position:absolute;top:2px;left:50%;width:14px;height:5px;margin-left:-7px;background:color-mix(in srgb,var(--couple-accent) 85%,transparent)}
.cr-note.is-ta::after{background:color-mix(in srgb,var(--couple-companion) 90%,#7d8ea8)}
.cr-letter::before{content:"";width:34px;height:23px;border-radius:3px;background:linear-gradient(150deg,transparent 48%,color-mix(in srgb,var(--couple-accent) 70%,#fff) 50%,transparent 54%),linear-gradient(210deg,transparent 48%,color-mix(in srgb,var(--couple-accent) 70%,#fff) 50%,transparent 54%),color-mix(in srgb,var(--couple-accent) 35%,#fff);box-shadow:0 2px 5px rgb(150 100 120/18%)}
.cr-mood>*{width:28px;height:28px;border-radius:50%;overflow:hidden;box-shadow:0 0 0 2px #fff}.cr-mood img{width:100%;height:100%;object-fit:cover}
.cr-ticket::before{content:"";width:34px;height:20px;border-radius:3px;background:linear-gradient(90deg,#fff 68%,color-mix(in srgb,var(--couple-accent) 60%,#fff) 68%);box-shadow:0 2px 5px rgb(150 100 120/18%);transform:rotate(-5deg)}
.cr-ticket.is-done::before{background:linear-gradient(90deg,#fff 68%,transparent 68%)}
.cr-day svg{width:18px;height:18px;fill:var(--couple-accent);stroke:var(--couple-accent-deep);stroke-width:1.2}
/* 寄信 */
.letter-sheet{transform-origin:50% 33%;transition:transform .5s cubic-bezier(.5,0,.3,1),opacity .3s}
.letter-sheet.is-fold1{transform:perspective(900px) rotateX(68deg) scaleY(.5)}
.letter-sheet.is-fold2{transform:perspective(900px) rotateX(80deg) scale(.42,.18) translateY(220px);opacity:0}
.couple-send{position:relative;height:0}
.couple-env{position:absolute;left:50%;bottom:120px;width:230px;height:150px;margin-left:-115px;opacity:0;transform:scale(.6);transition:transform .45s cubic-bezier(.3,1.5,.5,1),opacity .25s;z-index:5}
.couple-env svg{width:100%;height:100%;overflow:visible}
.couple-env rect{fill:color-mix(in srgb,var(--couple-accent) 30%,#fff);stroke:color-mix(in srgb,var(--couple-accent) 70%,#fff)}
.couple-env .flap{fill:none;stroke:color-mix(in srgb,var(--couple-accent-deep) 40%,#fff);stroke-width:1.5}.couple-env .fold{stroke:color-mix(in srgb,var(--couple-accent) 75%,#fff);stroke-width:1.2}
.couple-env-seal{position:absolute;left:50%;top:62px;width:44px;height:44px;margin-left:-22px;border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle at 35% 30%,color-mix(in srgb,var(--couple-accent-deep) 55%,#fff),var(--couple-accent-deep));opacity:0;transform:scale(2.4);transition:transform .3s cubic-bezier(.3,1.6,.5,1),opacity .15s;box-shadow:0 3px 8px rgb(120 50 70/30%)}
.couple-env-seal svg{width:18px;height:18px;fill:#fff;stroke:none}
.couple-send.is-in .couple-env{opacity:1;transform:scale(1)}
.couple-send.is-sealed .couple-env-seal{opacity:1;transform:scale(1)}
.couple-send.is-fly .couple-env{transition:transform .9s cubic-bezier(.6,-.3,.4,1),opacity .9s;transform:translate(150px,-520px) rotate(-22deg) scale(.35);opacity:0}
@media(prefers-reduced-motion:reduce){.couple-knot.is-beat svg,.couple-sticky.is-dropping,.couple-sticky.is-dropping::before,.ann-flip.is-tick b{animation:none}.ann-flip .ann-face,.letter-sheet{transition:none}}

/* ── 纸条盒 (2026-10-15): an open box per month, its colours from 我们的颜色 ── */
.couple-shell{--cb-kraft:color-mix(in srgb,var(--couple-accent) 35%,var(--couple-paper));--cb-kraft-d:color-mix(in srgb,var(--couple-accent) 65%,var(--couple-paper))}
.cb-open{position:relative;height:262px;margin:20px 0 0;touch-action:pan-y;transition:transform .45s cubic-bezier(.4,0,.2,1),opacity .45s}
.cb-open.is-away{transform:translateY(60px) scale(.6);opacity:0}
.cb-o-lid{position:absolute;left:4px;right:4px;top:0;height:46px;border-radius:12px 12px 4px 4px;background:linear-gradient(180deg,color-mix(in srgb,var(--couple-accent) 25%,#fff),var(--cb-kraft-d));transform:perspective(500px) rotateX(48deg);transform-origin:50% 100%}
.cb-o-back{position:absolute;left:10px;right:10px;top:40px;bottom:60px;border-radius:10px 10px 0 0;background:linear-gradient(180deg,var(--cb-kraft-d),var(--cb-kraft))}
.cb-dvs{position:absolute;inset:0}
.cb-dv{position:absolute;left:24px;right:24px;bottom:56px;height:118px;padding:0;border:none;background:none;cursor:pointer;font-family:inherit;transition:transform .45s cubic-bezier(.3,1.2,.5,1),opacity .35s;transform:translateY(calc(var(--k,0) * -19px - 4px)) scale(calc(1 - var(--k,0) * .04))}
.cb-dv[data-gone]{transform:translateY(70px) rotateX(-60deg) scale(.95);opacity:0;pointer-events:none}
.cb-dv-body{position:absolute;inset:0;border-radius:6px;background:color-mix(in srgb,var(--couple-paper) 70%,#fff);border-top:1.5px solid color-mix(in srgb,var(--couple-accent) 55%,#fff);box-shadow:0 -2px 8px color-mix(in srgb,var(--couple-accent-deep) 12%,transparent)}
.cb-tab{position:absolute;top:-24px;height:26px;padding:3px 11px 0;border-radius:9px 9px 0 0;white-space:nowrap;font-size:12.5px;letter-spacing:.04em;background:color-mix(in srgb,var(--couple-accent) 38%,var(--couple-paper));color:color-mix(in srgb,var(--couple-accent-deep) 80%,#fff);border:1.5px solid color-mix(in srgb,var(--couple-accent) 55%,#fff);border-bottom:0;transition:background .3s,transform .3s}
.cb-tab small{font-size:10px;margin-left:3px;opacity:.7}
.cb-dv.is-cur .cb-tab{background:var(--couple-accent);color:var(--couple-accent-deep);border-color:var(--couple-accent);font-weight:500;transform:translateY(-3px);height:29px;box-shadow:0 -3px 8px color-mix(in srgb,var(--couple-accent-deep) 18%,transparent)}
.cb-peek{position:absolute;top:-30px;left:40%;width:38%;height:60px;border-radius:4px;background:var(--note);transform:rotate(3deg);opacity:0;transition:opacity .3s .15s;z-index:-1}
.cb-dv.is-cur .cb-peek{opacity:1}
.cb-front{position:absolute;left:0;right:0;bottom:0;height:84px;z-index:50;border-radius:4px 4px 16px 16px;display:flex;align-items:center;justify-content:space-between;padding:0 14px;background:linear-gradient(180deg,color-mix(in srgb,var(--couple-accent) 65%,#fff),var(--couple-accent));box-shadow:0 14px 26px color-mix(in srgb,var(--couple-accent-deep) 25%,transparent),inset 0 2px 0 rgb(255 255 255/60%)}
.cb-arrow{width:32px;height:32px;border-radius:50%;border:none;background:rgb(255 255 255/60%);color:var(--couple-accent-deep);font-size:16px;cursor:pointer}
.cb-arrow:disabled{opacity:.3}
.cb-label-btn{border:none;border-radius:6px;padding:7px 18px;background:color-mix(in srgb,var(--couple-paper) 40%,#fff);box-shadow:0 1px 3px rgb(150 90 110/15%);font-family:inherit;color:#4a4a52;cursor:pointer;text-align:center}
.cb-label-btn b{display:block;font-family:var(--font-display);font-size:15px;font-weight:500;letter-spacing:.12em}
.cb-label-btn small{font-size:10.5px;color:#6f7280}
.cb-desk{display:flex;flex-wrap:wrap;gap:14px 12px;justify-content:center;align-items:flex-start;margin-top:20px}
.cb-desk-t{width:100%;margin:0;text-align:center;font-family:var(--font-body);font-size:12.5px;font-weight:400;letter-spacing:.1em;color:var(--ink2)}
.cb-note{--ink:#4a4a52;position:relative;width:calc(50% - 8px);box-sizing:border-box;padding:18px 12px 12px;border-radius:5px 5px 14px 5px;background:var(--note);transform:rotate(var(--r));box-shadow:0 8px 16px color-mix(in srgb,var(--couple-accent-deep) 14%,transparent);animation:cbOut .5s cubic-bezier(.3,1.4,.5,1) backwards;color:var(--ink)}
.cb-note.is-long{width:100%}
.cb-note::before{content:"";position:absolute;top:-7px;left:50%;width:54px;height:16px;margin-left:-27px;background:color-mix(in srgb,var(--couple-accent) 88%,transparent)}
.cb-note.is-ta::before{background:color-mix(in srgb,var(--couple-companion) 92%,#7d8ea8)}
.cb-note p{margin:4px 0 0;font-size:14px;line-height:1.6}
.cb-who{font-size:10.5px;letter-spacing:.06em;color:#6f7280}
@keyframes cbOut{0%{opacity:0;transform:translateY(-110px) rotate(calc(var(--r) * -4)) scale(.6)}}
.cb-more{position:relative;width:calc(50% - 8px);height:86px;border:none;background:none;cursor:pointer;font-family:inherit;padding:0}
.cb-more i{position:absolute;inset:6px 6px 0;border-radius:5px 5px 12px 5px;background:var(--note);transform:rotate(var(--r)) translateY(var(--y));box-shadow:0 4px 10px color-mix(in srgb,var(--couple-accent-deep) 14%,transparent)}
.cb-more span{position:absolute;inset:0;display:grid;place-items:center;font-size:13px;color:#4a4a52;z-index:3}
.cb-shelf{display:flex;gap:12px;overflow-x:auto;scrollbar-width:none;padding:8px 4px 14px;margin-top:6px;border-bottom:6px solid color-mix(in srgb,var(--couple-accent) 55%,#fff);border-radius:0 0 4px 4px}
.cb-box{flex:none;position:relative;width:96px;height:78px;border:none;background:none;padding:0;cursor:pointer;font-family:inherit;transition:transform .3s cubic-bezier(.3,1.5,.5,1)}
.cb-box:active{transform:scale(.94)}.cb-box.is-open{opacity:.45;pointer-events:none}
.cb-body{position:absolute;left:0;right:0;bottom:0;height:60px;border-radius:4px 4px 10px 10px;background:linear-gradient(180deg,color-mix(in srgb,var(--couple-accent) 65%,#fff),var(--couple-accent));box-shadow:0 6px 12px color-mix(in srgb,var(--couple-accent-deep) 20%,transparent)}
.cb-lid{position:absolute;left:-3px;right:-3px;top:4px;height:18px;z-index:2;border-radius:6px 6px 3px 3px;background:linear-gradient(180deg,color-mix(in srgb,var(--couple-accent) 30%,#fff),color-mix(in srgb,var(--couple-accent) 75%,#fff))}
.cb-label{position:absolute;left:12px;right:12px;bottom:12px;z-index:2;padding:3px 0;border-radius:4px;background:color-mix(in srgb,var(--couple-paper) 40%,#fff);font-size:12px;line-height:1.3;color:#4a4a52;text-align:center}
.cb-label small{display:block;font-size:9.5px;color:#6f7280}
.cb-empty{text-align:center;margin-top:20px}.cb-empty p{margin:0 0 6px;font-size:15px}.cb-empty small{font-size:12px;color:var(--ink2);line-height:1.6}
.cb-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:4px;text-align:center;margin-top:6px}
.cb-wk{font-size:11px;color:var(--ink2)}
.cb-cd{aspect-ratio:1;display:grid;place-items:center;border:none;background:none;border-radius:50%;font-family:inherit;font-size:12.5px;color:var(--ink2);opacity:.55;padding:0;position:relative}
.cb-cd.has{opacity:1;color:var(--ink);cursor:pointer}
.cb-cd.has::after{content:"";position:absolute;left:50%;bottom:3px;width:4px;height:4px;margin-left:-2px;border-radius:50%;background:var(--couple-accent-deep)}
.cb-cd.sel{background:var(--couple-accent)}
@media(prefers-reduced-motion:reduce){.cb-note{animation:none}.cb-dv,.cb-open{transition:none}}

/* ── 我们的日子 (2026-10-15) ── */
.cd-since{margin:6px 0 0;text-align:center;font-size:12.5px;letter-spacing:.14em;color:var(--ink2)}.cd-since b{font-weight:500;font-size:14px;color:var(--ink);margin:0 3px}
.cd-hero{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:20px;touch-action:pan-y;user-select:none;-webkit-user-select:none}
.cd-arr{width:30px;height:30px;border-radius:50%;border:none;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--couple-accent-ink);font-size:15px;cursor:pointer}
.cd-arr:disabled{opacity:.3}
.cd-desk{position:relative;width:150px;height:172px;perspective:700px;cursor:pointer;flex:none}
.cd-pg{position:absolute;inset:0;border-radius:22px;overflow:hidden;text-align:center;background:var(--surface);backface-visibility:hidden;-webkit-backface-visibility:hidden;transform-origin:50% 0;transition:transform .65s cubic-bezier(.3,1.3,.5,1);box-shadow:0 1px 2px rgb(120 70 90/10%),0 14px 30px color-mix(in srgb,var(--couple-accent-deep) 20%,transparent)}
.cd-pg i{display:block;font-style:normal;padding:8px 0 6px;font-size:13px;letter-spacing:.1em;background:var(--couple-accent);color:var(--couple-on-paper)}
.cd-pg b{display:block;margin-top:8px;font-family:var(--font-display);font-size:62px;font-weight:500;line-height:1.15;color:var(--ink);font-variant-numeric:tabular-nums}
.cd-pg small{font-size:13px;color:var(--ink2)}
.cd-pg.is-back{transform:rotateX(180deg)}.cd-pg.is-back b{color:var(--couple-accent-ink);font-size:56px}
.cd-desk.is-flipped .cd-pg:not(.is-back){transform:rotateX(-180deg)}.cd-desk.is-flipped .cd-pg.is-back{transform:rotateX(0)}
.cd-desk .ann-ring{left:40px;top:-7px;width:8px;height:16px;border-radius:4px}.cd-desk .ann-ring.is-r{left:auto;right:40px}
.cd-under{position:absolute;inset:6px -4px -6px;border-radius:22px;background:color-mix(in srgb,var(--couple-paper) 80%,var(--surface));box-shadow:0 8px 18px color-mix(in srgb,var(--couple-accent-deep) 12%,transparent)}
.cd-desk.is-swap .cd-pg{animation:cdSwap .45s cubic-bezier(.3,1.3,.5,1)}
@keyframes cdSwap{0%{transform:rotateX(-70deg);opacity:.2}}
.cd-hname{margin:16px 0 0;text-align:center;font-family:var(--font-display);font-size:19px}
.cd-hdate{margin:4px 0 0;text-align:center;font-size:12.5px;color:var(--ink2)}
.cd-dots{display:flex;justify-content:center;gap:6px;margin-top:12px}
.cd-dots i{width:6px;height:6px;border-radius:3px;background:color-mix(in srgb,var(--couple-accent) 70%,transparent);transition:width .3s}
.cd-dots i.on{width:16px;background:var(--couple-accent-deep)}
.cd-list{padding:4px 14px;margin-top:10px}
.cd-row{width:100%;display:flex;align-items:center;gap:12px;padding:11px 0;border:none;border-bottom:1px solid color-mix(in srgb,var(--couple-accent) 30%,transparent);background:none;font-family:inherit;text-align:left;color:var(--ink);cursor:pointer}
.cd-row:last-child{border-bottom:0}
.cd-mini{width:44px;flex:none;border-radius:10px;overflow:hidden;text-align:center;background:var(--surface);box-shadow:0 3px 8px color-mix(in srgb,var(--couple-accent-deep) 14%,transparent)}
.cd-mini i{display:block;font-style:normal;font-size:9.5px;padding:2px 0;background:var(--tc,var(--couple-accent));color:#5d4a52;letter-spacing:.05em}
.cd-mini b{display:block;font-weight:500;font-size:18px;line-height:1.35;font-variant-numeric:tabular-nums}
.cd-mini.is-past i{--tc:color-mix(in srgb,var(--ink2) 18%,var(--surface));color:var(--ink2)}
.cd-main{flex:1;min-width:0}.cd-main b{display:flex;align-items:center;gap:6px;font-weight:500;font-size:15px;white-space:nowrap;overflow:hidden}
.cd-main b em{font-style:normal;font-weight:400;font-size:11px;color:var(--ink2)}
.cd-main small{display:flex;align-items:center;gap:6px;margin-top:2px;font-size:11.5px;color:var(--ink2)}
.cd-tag{font-size:10px;padding:0 7px;border-radius:999px;background:var(--tc);color:#5d4a52;line-height:1.7}
.cd-row.is-ms,.cd-row.is-ms .cd-mini{--tc:color-mix(in srgb,var(--couple-accent) 55%,#fff)}.cd-row.is-bd{--tc:#fbe0d1}.cd-row.is-hol{--tc:#e7e0f5}.cd-row.is-our{--tc:color-mix(in srgb,var(--couple-companion) 85%,#fff)}
.cd-row.is-auto .cd-main b,.cd-row.is-auto .cd-left b{color:var(--ink2)}
.cd-left{flex:none;text-align:right;font-size:11.5px;color:var(--ink2)}.cd-left b{display:block;font-size:17px;font-weight:500;color:var(--ink);font-variant-numeric:tabular-nums}.cd-left .is-today{color:var(--couple-accent-ink)}
.cd-holset{width:100%;display:flex;justify-content:space-between;padding:12px 4px 0;border:none;background:none;font-family:inherit;font-size:12px;color:var(--ink2);cursor:pointer}.cd-holset b{font-weight:400;color:var(--couple-accent-ink)}
.cd-year{margin:6px 6px 8px;font-size:12px;letter-spacing:.2em;color:var(--ink2)}
.cd-past{padding:14px;margin-bottom:12px}
.cd-past-h{display:flex;align-items:center;gap:12px}.cd-past-h b{display:block;font-size:15.5px;font-weight:500}.cd-past-h small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink2)}
.cd-things{display:flex;gap:12px;margin-top:12px;overflow-x:auto;scrollbar-width:none;padding:6px 4px 8px;align-items:flex-end}
.cd-th{flex:none;position:relative;display:flex;flex-direction:column;align-items:center;gap:5px;border:none;background:none;padding:0;font-family:inherit;cursor:pointer;transition:transform .25s cubic-bezier(.3,1.6,.5,1)}
.cd-th:active{transform:scale(.93)}
.cd-cap{font-size:10.5px;color:var(--ink2);letter-spacing:.06em}
.cd-badge{position:absolute;top:-6px;right:-6px;z-index:3;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--couple-accent-deep);color:#fff;font-size:10.5px;line-height:18px;font-family:system-ui}
.cd-tn{position:relative;width:62px;height:56px;box-sizing:border-box;padding:12px 6px 4px;border-radius:3px 3px 10px 3px;background:var(--note);font-size:9.5px;line-height:1.45;color:#4a4a52;text-align:left;overflow:hidden;transform:rotate(-3deg);box-shadow:0 4px 9px color-mix(in srgb,var(--couple-accent-deep) 15%,transparent)}
.cd-tn::after{content:"";position:absolute;top:-4px;left:50%;width:26px;height:8px;margin-left:-13px;background:color-mix(in srgb,var(--couple-accent) 90%,transparent)}
.cd-tl{position:relative;display:block;width:72px;height:50px;border-radius:5px;overflow:hidden;background:color-mix(in srgb,var(--couple-accent) 35%,#fff);box-shadow:0 4px 9px color-mix(in srgb,var(--couple-accent-deep) 15%,transparent)}
.cd-tl::before{content:"";position:absolute;inset:0;background:linear-gradient(150deg,transparent 49%,color-mix(in srgb,var(--couple-accent) 75%,#fff) 50%,transparent 53%),linear-gradient(210deg,transparent 49%,color-mix(in srgb,var(--couple-accent) 75%,#fff) 50%,transparent 53%)}
.cd-tl i{position:absolute;left:50%;top:17px;width:14px;height:14px;margin-left:-7px;border-radius:50%;background:radial-gradient(circle at 35% 30%,color-mix(in srgb,var(--couple-accent-deep) 50%,#fff),var(--couple-accent-deep))}
.cd-tw{display:block;width:70px;height:40px;border-radius:4px;background:linear-gradient(90deg,#fff 68%,color-mix(in srgb,var(--couple-accent) 60%,#fff) 68%);box-shadow:0 4px 9px color-mix(in srgb,var(--couple-accent-deep) 15%,transparent)}
.cd-tn.is-stack,.cd-tl.is-stack,.cd-tw.is-stack{box-shadow:5px 4px 0 -1px color-mix(in srgb,var(--couple-accent) 45%,#fff),0 4px 9px color-mix(in srgb,var(--couple-accent-deep) 15%,transparent)}
.cd-tm{display:flex;align-items:center;gap:4px;height:54px}
.cd-tm-av{width:24px;height:24px;border-radius:50%;overflow:hidden;box-shadow:0 0 0 1.5px #fff}.cd-tm-av img{width:100%;height:100%;object-fit:cover}
.cd-tm i{font-style:normal;font-size:11px;padding:1px 8px;border-radius:999px;background:var(--surface);color:var(--ink);box-shadow:0 2px 6px color-mix(in srgb,var(--couple-accent-deep) 12%,transparent)}
.cd-tm em{font-style:normal;font-size:10px;color:color-mix(in srgb,var(--couple-accent) 80%,var(--ink2))}.cd-tm.is-same em{color:var(--couple-accent-deep)}
/* the viewer */
.cd-vw{position:fixed;inset:0;z-index:70;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:20px 18px calc(20px + var(--sab));background:color-mix(in srgb,var(--couple-accent-deep) 18%,transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);animation:coupleCdFade .25s ease}
@keyframes coupleCdFade{from{opacity:0}}
.cd-vw-t{margin:0 0 14px;font-size:12px;letter-spacing:.12em;color:#fff;text-shadow:0 1px 4px rgb(90 40 60/30%)}
.cd-vw-stage{width:100%;max-width:340px;display:flex;justify-content:center;animation:cdEnter .5s cubic-bezier(.3,1.3,.5,1)}
@keyframes cdEnter{from{opacity:0;transform:translateY(24px) scale(.94)}}
.cd-vw .letter-sheet{width:100%;max-height:60vh;overflow-y:auto}
.cd-vnote{--ink:#4a4a52;position:relative;width:250px;min-height:230px;box-sizing:border-box;padding:38px 22px 40px;border-radius:5px 5px 26px 5px;background:var(--note);color:var(--ink);transform:rotate(-2deg);box-shadow:0 18px 36px rgb(120 60 80/25%)}
.cd-vnote::before{content:"";position:absolute;top:-11px;left:50%;width:100px;height:24px;margin-left:-50px;background:color-mix(in srgb,var(--couple-accent) 90%,transparent)}
.cd-vnote.is-ta::before{background:color-mix(in srgb,var(--couple-companion) 92%,#7d8ea8)}
.cd-vnote small{font-size:11.5px;letter-spacing:.1em;color:#6f7280}.cd-vnote p{margin:10px 0 0;font-size:19px;line-height:1.75}
.cd-vnote span{position:absolute;left:22px;bottom:14px;font-size:11.5px;color:#6f7280}
.cd-vtk{width:100%;max-height:64vh;overflow-y:auto;padding:4px 2px}
.cd-vw-nav{display:flex;align-items:center;gap:16px;margin-top:16px}
.cd-vw-nav button{width:36px;height:36px;border-radius:50%;border:none;background:rgb(255 255 255/85%);color:var(--couple-accent-deep);font-size:16px;cursor:pointer}.cd-vw-nav button:disabled{opacity:.35}
.cd-vw-nav span{min-width:40px;text-align:center;font-size:13px;color:#fff}
.cd-vw-hint{margin:14px 0 0;font-size:12px;color:#fff;opacity:.9}
.cd-mood{width:100%;max-width:320px;box-sizing:border-box;padding:18px 16px;border-radius:26px;background:color-mix(in srgb,var(--surface) 82%,transparent);border:1px solid rgb(255 255 255/80%);box-shadow:0 18px 40px rgb(120 60 80/22%);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}
.cd-mline{display:flex;align-items:flex-start;gap:6px}
.cd-lend{width:96px;flex:none;display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center}
.cd-lav{width:52px;height:52px;border-radius:50%;overflow:hidden;box-shadow:0 0 0 3px #fff,0 4px 10px rgb(120 70 90/20%)}.cd-lav img{width:100%;height:100%;object-fit:cover}
.cd-lav .couple-initial{display:grid;place-items:center;width:100%;height:100%}
.cd-lend p{margin:0;font-size:11px;line-height:1.5;color:var(--ink2)}
.cd-lmid{flex:1;display:flex;align-items:center;margin-top:20px;min-width:0}
.cd-lmid i{flex:1;border-top:1.5px dashed color-mix(in srgb,var(--couple-accent) 70%,transparent)}
.cd-lmid span{margin:0 4px;font-size:16px;color:color-mix(in srgb,var(--couple-accent) 85%,var(--ink2))}
.cd-mood.is-same .cd-lmid span{color:var(--couple-accent-deep);animation:cdBeat 1.4s ease-in-out .5s infinite}
.cd-mood.is-same .cd-lmid i{border-top-style:solid}
@keyframes cdBeat{20%{transform:scale(1.35)}40%{transform:scale(.95)}}
.cd-sync{margin:12px 0 0;text-align:center;font-size:12px;letter-spacing:.12em;color:var(--couple-accent-ink)}.cd-sync.is-dim{color:var(--ink2)}
.cd-mood.is-pair{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:10px}
.cd-mood.is-pair .cd-sync{grid-column:1/-1;margin-top:2px}
.cd-mh{padding:12px;border-radius:20px;background:var(--surface);min-width:0}.cd-mh-n{display:flex;align-items:center;gap:7px;margin-bottom:10px;font-size:14px}
.cd-mh p{margin:8px 0 0;font-size:12px;line-height:1.55;color:var(--ink2)}
.cd-mheart{position:absolute;left:50%;top:44px;width:26px;height:26px;margin-left:-13px;border-radius:50%;background:var(--surface);display:grid;place-items:center;font-size:13px;color:var(--couple-accent-deep);box-shadow:0 2px 8px rgb(190 120 140/18%);opacity:0}
.cd-mood.is-pair.is-same .cd-mheart{opacity:1}
.couple-modal-note{margin:4px 0 0;font-size:13px;line-height:1.7;color:var(--ink2)}
.cd-hol-chips{justify-content:center}
.cd-mood-pick{padding:0 16px 12px;margin-top:0}
@media(prefers-reduced-motion:reduce){.cd-pg,.cd-desk.is-swap .cd-pg{transition:none;animation:none}.cd-vw,.cd-vw-stage,.cd-mood.is-same .cd-lmid span{animation:none}}

/* ── 我们的轨迹: 双人时间线 (2026-10-15) ── */
.ctl-sides{display:flex;justify-content:space-between;margin:16px 6px -4px;font-size:11px;letter-spacing:.12em;color:var(--ink2)}
.ctl-dayh{display:flex;align-items:center;justify-content:center;gap:8px;margin:22px 0 10px;position:relative;z-index:2}
.ctl-dayh span{padding:3px 12px;border-radius:999px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font-size:12.5px;color:var(--ink)}
.ctl-dayh em{font-style:normal;padding:2px 9px;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 30%,var(--ls-inner));font-size:11px;color:var(--couple-accent-ink)}
.ctl-line{position:relative;padding-bottom:6px}
.ctl-line::before{content:"";position:absolute;left:50%;top:0;bottom:0;width:2px;margin-left:-1px;background:linear-gradient(color-mix(in srgb,var(--couple-accent) 70%,transparent) 88%,transparent)}
.ctl-ev{position:relative;display:flex;margin:10px 0;animation:ctlIn .45s cubic-bezier(.3,1.4,.5,1) backwards}
@keyframes ctlIn{from{opacity:0;transform:translateY(10px)}}
.ctl-dot{position:absolute;left:50%;top:14px;width:10px;height:10px;margin-left:-5px;border-radius:50%;background:var(--surface);border:2px solid var(--couple-accent);z-index:2;box-sizing:border-box}
.ctl-ev.is-L{justify-content:flex-start}.ctl-ev.is-R{justify-content:flex-end}.ctl-ev.is-C{justify-content:center}
.ctl-box{width:calc(50% - 16px);display:flex;flex-direction:column;align-items:flex-start;gap:5px;border:none;background:none;padding:0;font-family:inherit;text-align:left;color:var(--ink);cursor:pointer;transition:transform .25s cubic-bezier(.3,1.6,.5,1)}
.ctl-box:active{transform:scale(.97)}
.ctl-ev.is-L .ctl-box{align-items:flex-end;text-align:right}
.ctl-ev.is-C .ctl-dot{top:-6px}
.ctl-ev.is-C .ctl-box{width:86%;align-items:center;text-align:center;margin-top:8px;padding:12px 12px 10px;border-radius:20px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);box-sizing:border-box}
.ctl-t{font-size:10.5px;color:var(--ink2)}
.ctl-cap{font-size:12px;line-height:1.5;color:var(--ink2)}.ctl-cap b{font-weight:500;color:var(--ink)}
.ctl-sub{font-size:11px;color:var(--ink2);line-height:1.5}
.ctl-note{--ink:#4a4a52;position:relative;width:118px;min-height:62px;box-sizing:border-box;padding:13px 9px 8px;border-radius:4px 4px 12px 4px;background:var(--note);font-size:12px;line-height:1.5;color:var(--ink);text-align:left;transform:rotate(-2deg);box-shadow:0 5px 12px color-mix(in srgb,var(--couple-accent-deep) 15%,transparent)}
.ctl-ev.is-L .ctl-note{transform:rotate(2deg)}
.ctl-note::before{content:"";position:absolute;top:-5px;left:50%;width:38px;height:10px;margin-left:-19px;background:color-mix(in srgb,var(--couple-accent) 90%,transparent)}
.ctl-note.is-ta::before{background:color-mix(in srgb,var(--couple-companion) 92%,#7d8ea8)}
.ctl-env{position:relative;width:104px;height:66px;border-radius:6px;overflow:hidden;background:color-mix(in srgb,var(--couple-accent) 35%,#fff);box-shadow:0 5px 12px color-mix(in srgb,var(--couple-accent-deep) 15%,transparent)}
.ctl-env::before{content:"";position:absolute;inset:0;background:linear-gradient(150deg,transparent 49%,color-mix(in srgb,var(--couple-accent) 75%,#fff) 50%,transparent 52.5%),linear-gradient(210deg,transparent 49%,color-mix(in srgb,var(--couple-accent) 75%,#fff) 50%,transparent 52.5%)}
.ctl-env i{position:absolute;left:50%;top:24px;width:16px;height:16px;margin-left:-8px;border-radius:50%;background:radial-gradient(circle at 35% 30%,color-mix(in srgb,var(--couple-accent-deep) 50%,#fff),var(--couple-accent-deep))}
.ctl-mood{display:flex;align-items:center;gap:6px;justify-content:center;width:100%}
.ctl-mood .mood-side-tag{font-size:12px}
.ctl-lmid{flex:1;max-width:60px;display:flex;align-items:center;font-size:12px;color:color-mix(in srgb,var(--couple-accent) 80%,var(--ink2))}
.ctl-lmid i{flex:1;border-top:1.5px dashed color-mix(in srgb,var(--couple-accent) 70%,transparent);margin:0 3px}
.ctl-mood.is-same .ctl-lmid{color:var(--couple-accent-deep)}.ctl-mood.is-same .ctl-lmid i{border-top-style:solid}
.ctl-tks{display:flex;justify-content:center;gap:6px;margin:2px 0}
.ctl-tks .cwt{display:flex;width:46px;height:26px;border-radius:3px;overflow:hidden;filter:none;box-shadow:0 3px 7px rgb(150 100 120/16%);background:linear-gradient(90deg,var(--cwt-paper) 68%,var(--c) 68%)}
.ctl-torn.cwt{display:grid;place-items:center;width:64px;height:40px;filter:none;border-radius:3px 10px 10px 3px;background:var(--c);color:var(--d);transform:rotate(-6deg);box-shadow:0 4px 9px rgb(150 100 120/15%);
  -webkit-mask:conic-gradient(from -135deg at left,#0000,#000 1deg 89deg,#0000 90deg) 0 50%/6px 8px repeat-y,linear-gradient(#000 0 0) 5px 0/calc(100% - 5px) 100% no-repeat;mask:conic-gradient(from -135deg at left,#0000,#000 1deg 89deg,#0000 90deg) 0 50%/6px 8px repeat-y,linear-gradient(#000 0 0) 5px 0/calc(100% - 5px) 100% no-repeat}
.ctl-torn b{font-weight:500;font-size:11px}
.ctl-day svg{width:22px;height:22px;fill:var(--couple-accent);stroke:var(--couple-accent-deep);stroke-width:1.2}
/* the torn coupon viewer */
.ctv{position:relative;width:100%;max-width:330px;height:100px;cursor:pointer}
.ctv-a,.ctv-b{position:absolute;left:0;right:0;top:0}
.ctv-b{transition:transform .7s cubic-bezier(.5,0,.5,1.2)}
.ctv.is-jig .ctv-b{animation:ctvJig .45s}
@keyframes ctvJig{25%{transform:rotate(-2.5deg)}60%{transform:rotate(2deg) translateY(1px)}}
.ctv.is-torn .ctv-b{transform:translate(20px,30px) rotate(12deg)}
.ctv-a{transition:transform .5s}.ctv.is-torn .ctv-a{transform:translateX(-6px) rotate(-1deg)}
.ctv-stamp{position:absolute;right:112px;top:32px;z-index:5;width:50px;height:50px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;line-height:1.15;letter-spacing:.06em;color:var(--couple-accent-deep);border:1.5px solid currentColor;background:color-mix(in srgb,var(--surface) 55%,transparent);box-shadow:inset 0 0 0 3px var(--surface),inset 0 0 0 4px color-mix(in srgb,currentColor 50%,transparent);transform:rotate(-14deg) scale(2.2);opacity:0;transition:transform .35s cubic-bezier(.3,1.6,.5,1) .55s,opacity .2s .55s}
.ctv-stamp small{font-size:9px;opacity:.85}
.ctv.is-torn .ctv-stamp{transform:rotate(-14deg) scale(1);opacity:.92}
@media(prefers-reduced-motion:reduce){.ctl-ev{animation:none}.ctv-a,.ctv-b,.ctv-stamp{transition:none}}

/* ── 双人 To-do (2026-10-15): I take 我们的颜色's main colour, TA its companion colour ── */
.couple-shell{--ctd-me:var(--couple-accent);--ctd-me-ck:color-mix(in oklch,var(--couple-accent) 55%,var(--couple-accent-deep));--ctd-ta:var(--couple-companion);--ctd-ta-d:color-mix(in oklch,var(--couple-companion) 66%,#3a3a46);--ctd-ta-ck:color-mix(in oklch,var(--couple-companion) 80%,#3a3a46)}
.ctd-prog{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:8px 4px 0}
.ctd-prog>span:first-child{font-size:14px}.ctd-prog b{font-weight:500;font-size:20px;color:var(--couple-accent-ink);margin:0 2px;font-variant-numeric:tabular-nums}
.ctd-prog small{display:block;font-size:11.5px;color:var(--ink2);margin-top:2px}
.ctd-pairs{display:flex;flex-wrap:wrap;gap:7px;justify-content:flex-end;max-width:55%}
.ctd-pair{display:flex;gap:2px}
.ctd-pair i{width:9px;height:9px;border-radius:50%;background:var(--surface);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--ctd-me) 70%,#fff)}
.ctd-pair i+i{box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--ctd-ta) 85%,#8090a8)}
.ctd-pair i.on{background:var(--ctd-me);box-shadow:none}.ctd-pair i+i.on{background:var(--ctd-ta-ck)}
.ctd-sheet{position:relative;margin-top:16px;padding:14px 16px 8px;border-radius:6px 6px 26px 6px;background:var(--surface);box-shadow:0 1px 2px rgb(110 70 90/8%),0 14px 30px color-mix(in srgb,var(--couple-accent-deep) 13%,transparent)}
.ctd-sheet::before{content:"";position:absolute;top:-8px;left:50%;width:88px;height:20px;margin-left:-44px;background:color-mix(in srgb,var(--ctd-me) 85%,transparent)}
.ctd-head{display:grid;grid-template-columns:1fr 34px 34px;gap:8px;align-items:center;padding:6px 0 10px;border-bottom:1.5px solid color-mix(in srgb,var(--ctd-me) 45%,transparent)}
.ctd-head>span:first-child{font-size:12px;letter-spacing:.12em;color:var(--ink2)}
.ctd-av{width:28px;height:28px;border-radius:50%;overflow:hidden;justify-self:center;box-shadow:0 0 0 2px var(--surface),0 0 0 3.5px var(--ctd-me)}
.ctd-av.is-ta{box-shadow:0 0 0 2px var(--surface),0 0 0 3.5px var(--ctd-ta)}
.ctd-av img{width:100%;height:100%;object-fit:cover}.ctd-av .couple-initial{display:grid;place-items:center;width:100%;height:100%;font-size:12px}
.ctd-row{position:relative;display:grid;grid-template-columns:1fr 34px 34px;gap:8px;align-items:center;min-height:54px;border-bottom:1px dashed color-mix(in srgb,var(--ctd-me) 35%,transparent);user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}
.ctd-row:last-of-type{border-bottom:0}
.ctd-txt{position:relative;min-width:0;padding-left:12px}
.ctd-txt::before{content:"";position:absolute;left:0;top:3px;bottom:3px;width:3px;border-radius:2px;background:var(--ctd-me)}
.ctd-row.is-ta .ctd-txt::before{background:var(--ctd-ta-d);opacity:.55}
.ctd-txt b{position:relative;display:block;width:max-content;max-width:100%;font-weight:400;font-size:15.5px;color:var(--ink);overflow-wrap:anywhere}
.ctd-txt b::after{content:"";position:absolute;left:-2px;right:-2px;top:52%;height:1.5px;background:var(--couple-accent-deep);transform:scaleX(0);transform-origin:left;transition:transform .45s cubic-bezier(.6,0,.3,1)}
.ctd-row.is-done .ctd-txt b{color:var(--ink2)}.ctd-row.is-done .ctd-txt b::after{transform:scaleX(1)}
.ctd-txt small{display:block;margin-top:2px;font-size:11px;color:var(--ink2)}
.ctd-heart{position:absolute;right:-8px;top:-4px;font-style:normal;font-size:13px;color:var(--couple-accent-deep);opacity:0;transform:scale(.3);transition:.4s cubic-bezier(.3,1.8,.5,1) .25s}
.ctd-row.is-done .ctd-heart{opacity:1;transform:none}
.ctd-together{position:absolute;right:84px;bottom:5px;font-size:10.5px;color:var(--couple-accent-ink);opacity:0;transition:opacity .4s .4s;pointer-events:none}
.ctd-row.is-done .ctd-together{opacity:.85}
.ctd-ck{position:relative;width:30px;height:30px;justify-self:center;padding:0;border:none;border-radius:50%;background:var(--surface);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--ctd-me) 85%,var(--ink2));cursor:pointer}
.ctd-ck.is-ta{cursor:default;box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--ctd-ta) 80%,var(--ink2))}
.ctd-ck svg{position:absolute;inset:0;width:100%;height:100%}
.ctd-ck path{fill:none;stroke:#fff;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:20;stroke-dashoffset:20;transition:stroke-dashoffset .35s ease .08s}
.ctd-ck.on{background:var(--ctd-me-ck);box-shadow:none}
.ctd-ck.is-ta.on{background:var(--ctd-ta-ck)}
.ctd-ck.on path{stroke-dashoffset:0}
.ctd-ck:not(.is-ta).on{animation:ctdPop .4s cubic-bezier(.3,1.8,.5,1)}
@keyframes ctdPop{50%{transform:scale(1.18)}}
.ctd-ck i{position:absolute;inset:0;display:grid;place-items:center;font-style:normal;font-size:12px;letter-spacing:1px;color:color-mix(in srgb,var(--ctd-ta) 50%,var(--ink2))}
.ctd-ck.on i{display:none}
.ctd-empty{margin:14px 0 6px;font-size:13px;color:var(--ink2);text-align:center}
.ctd-add{display:flex;align-items:center;gap:8px;padding:8px 0 4px}
.ctd-add input{flex:1;min-width:0;border:none;border-bottom:1.5px solid color-mix(in srgb,var(--ctd-me) 50%,transparent);background:none;padding:6px 2px;font-family:inherit;font-size:14.5px;color:var(--ink);outline:none}
.ctd-add button{width:34px;height:34px;flex:none;border:none;border-radius:50%;background:var(--ctd-me);color:var(--couple-accent-deep);display:grid;place-items:center;cursor:pointer}
.ctd-add button svg{width:16px;height:16px}
.ctd-ideas{display:flex;gap:10px;overflow-x:auto;scrollbar-width:none;margin:8px -16px 0;padding:4px 16px 8px}
.ctd-ideas button{flex:none;width:96px;padding:12px 10px;border:none;border-radius:16px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font-family:inherit;font-size:13px;line-height:1.45;color:var(--ink);text-align:left;cursor:pointer;transition:transform .25s cubic-bezier(.3,1.6,.5,1)}
.ctd-ideas button:active{transform:scale(.93)}
.ctd-week{padding:14px 14px 12px;margin-top:10px}
.ctd-days{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;text-align:center}
.ctd-wd{display:block;margin-bottom:5px;font-size:10.5px;color:var(--ink2)}
.ctd-cell{position:relative;display:grid;place-items:center;aspect-ratio:1;border-radius:11px;font-size:12px;color:var(--ink2);background:color-mix(in srgb,var(--couple-paper) 70%,var(--surface))}
.ctd-cell.is-part{background:linear-gradient(135deg,color-mix(in srgb,var(--ctd-me) 55%,var(--surface)) 50%,color-mix(in srgb,var(--ctd-ta) 60%,var(--surface)) 50%);color:var(--ink)}
.ctd-cell.is-full{background:var(--ctd-me);color:var(--couple-accent-deep)}
.ctd-cell.is-full::after{content:"♥";position:absolute;right:3px;top:1px;font-size:8px}
.ctd-cell.is-today{box-shadow:0 0 0 1.5px var(--couple-accent-deep)}
.ctd-cell.is-future{background:transparent;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ctd-me) 40%,transparent)}
.ctd-streak{margin:12px 0 0;text-align:center;font-size:12.5px;color:var(--ink2)}.ctd-streak b{font-weight:500;font-size:15px;color:var(--couple-accent-ink);margin:0 2px}
.ctd-legend{display:flex;justify-content:center;gap:14px;margin-top:8px;font-size:10.5px;color:var(--ink2)}
.ctd-legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.ctd-legend i.is-full{background:var(--ctd-me)}.ctd-legend i.is-part{background:linear-gradient(135deg,color-mix(in srgb,var(--ctd-me) 55%,var(--surface)) 50%,color-mix(in srgb,var(--ctd-ta) 60%,var(--surface)) 50%)}
@media(prefers-reduced-motion:reduce){.ctd-ck:not(.is-ta).on{animation:none}.ctd-ck path,.ctd-txt b::after{transition:none}}

/* ── 月度回顾「X月的我们」入口 / 往日卡 / 聊天卡（js/apps/couple-review.js；回顾本身在 shadow root 里，见 couple-review.css） ── */
.cr-host{position:fixed;inset:0;z-index:70}
.crv-tile{width:46px;flex:none;border-radius:12px;overflow:hidden;text-align:center;background:var(--surface);box-shadow:0 4px 10px -6px color-mix(in srgb,var(--couple-accent-deep) 45%,transparent)}
.crv-tile small{display:block;font-size:10px;padding:3px 0;background:color-mix(in srgb,var(--couple-accent) 55%,#fff);color:#5d4a52}
.crv-tile b{display:block;font-size:12px;font-weight:600;letter-spacing:1px;padding:6px 0;background:color-mix(in srgb,var(--couple-companion) 25%,#fff);color:var(--ink)}
.crv-strip{display:flex;flex-direction:column;gap:2px;flex:none;background:#fff;padding:3px 3px 6px;border-radius:2px;transform:rotate(-4deg);box-shadow:0 6px 10px -6px rgba(0,0,0,.35)}
.crv-strip i{display:block;width:44px;height:22px;border-radius:1px;background:linear-gradient(160deg,color-mix(in srgb,var(--couple-accent) 85%,#fff),color-mix(in srgb,var(--couple-companion) 80%,#fff))}
.crv-strip i:nth-child(2){background:linear-gradient(200deg,color-mix(in srgb,var(--couple-companion) 75%,#fff),color-mix(in srgb,var(--couple-paper) 60%,#fff))}
.crv-strip i:nth-child(3){background:linear-gradient(170deg,color-mix(in srgb,var(--couple-accent) 55%,#fff),color-mix(in srgb,var(--couple-accent-deep) 30%,#fff))}
.crv-strip i:nth-child(4){background:linear-gradient(150deg,color-mix(in srgb,var(--couple-accent-deep) 45%,#fff),color-mix(in srgb,var(--couple-companion) 70%,#fff))}
.crv-go{margin-left:auto;font-size:12px;color:var(--couple-accent-deep);white-space:nowrap}
.crv-entry{display:flex;align-items:center;gap:12px;width:100%;padding:12px 14px;margin:0 0 14px;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer}
.crv-txt b{display:flex;align-items:center;gap:6px;font-size:15.5px;font-weight:500}
.crv-txt small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink2)}
.crv-new{font-style:normal;font-size:10px;line-height:1;padding:3px 6px;border-radius:999px;background:var(--couple-accent-deep);color:#fff;font-weight:500}
.crv-past{position:relative;display:block;width:100%;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer;overflow:hidden}
.crv-past .cd-past-h{width:100%}
.crv-row{display:flex;align-items:center;gap:12px;margin-top:12px}
.crv-chips{display:flex;flex-wrap:wrap;gap:6px}
.crv-chips span{font-size:11.5px;padding:3px 9px;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 22%,var(--surface));color:var(--ink2)}
.crv-chips b{font-weight:600;color:var(--ink)}
.crv-newtag{position:absolute;left:16px;top:0;font-size:10px;padding:2px 8px;border-radius:0 0 8px 8px;background:var(--couple-accent-deep);color:#fff}
.crv-past.is-fresh{padding-top:20px}
@media (prefers-reduced-motion:no-preference){.crv-past.is-fresh{animation:crvFresh 1.6s ease-out .4s 2}}
@keyframes crvFresh{40%{box-shadow:0 0 0 4px color-mix(in srgb,var(--couple-accent) 55%,transparent)}}
.crv-chat-card{--couple-accent:#F7C6D0;--couple-accent-deep:#B65E76;--couple-paper:#FFF1F4;--couple-companion:#D6E2F5;display:flex;align-items:center;gap:12px;max-width:250px;padding:12px 14px;border:0;border-radius:18px;background:var(--surface,#fff);box-shadow:0 6px 18px -12px rgba(60,40,70,.45);text-align:left;font:inherit;color:var(--ink,#3a3340);cursor:pointer}
.crv-chat-card .crv-strip i{width:32px;height:16px}
.crv-main small{display:block;font-size:11px;color:var(--ink2,#8a8090)}
.crv-main>b{display:block;margin-top:2px;font-size:16px;font-weight:600}
.crv-facts{display:flex;flex-wrap:wrap;gap:4px 8px;margin-top:6px}
.crv-facts em{font-style:normal;font-size:11.5px;color:var(--ink2,#8a8090)}
.crv-facts b{color:var(--ink,#3a3340);font-weight:600}
.crv-trail .crv-trail-row{margin:0;width:100%;justify-content:center;text-align:left}
.crv-trail-txt{display:flex;flex-direction:column;gap:3px;min-width:0}
.crv-trail-txt>b{display:flex;align-items:center;gap:6px;font-size:15px;font-weight:500}
.crv-trail-txt>small{font-size:11.5px;color:var(--ink2)}
.crv-trail-txt .crv-chips{margin-top:3px}
