.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-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}
.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}
.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:color-mix(in srgb,var(--couple-accent-deep) 22%,#2a2a2a);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-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-set-group .couple-ta-active{padding:12px 16px}
.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,.ccd{--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,:root:not([data-theme="light"]) .ccd{--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,:root[data-theme="dark"] .ccd{--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-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)}
.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}
.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-add .ctd-daily{width:auto;height:30px;padding:0 11px;border-radius:15px;font-family:inherit;font-size:12.5px;background:color-mix(in srgb,var(--ctd-me) 25%,transparent);color:var(--ink2)}.ctd-add .ctd-daily[aria-pressed="true"]{background:var(--ctd-me);color:var(--couple-accent-deep);font-weight:600}
.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}
/* the day viewer (trail / 往日) turns pages by swiping sideways: the browser keeps vertical scrolling and leaves the horizontal drag to it */
.cd-vw{touch-action:pan-y}
/* 双人 To-do 「这一周」 in dark mode: the cells were paper-coloured tints under the light ink (about 1.3:1). Dark cells with light text
   (≥ 4.5:1), and the lit days keep their light pastel with dark text. tests/couple-small-issues.test.js checks the numbers. */
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell .ctd-cell{background:#2f2c37;color:#ece8f2}:root:not([data-theme="light"]) .couple-shell .ctd-cell.is-part{background:linear-gradient(135deg,var(--ctd-me) 50%,var(--ctd-ta) 50%);color:#26222c}:root:not([data-theme="light"]) .couple-shell .ctd-cell.is-full{background:var(--ctd-me);color:#26222c}:root:not([data-theme="light"]) .couple-shell .ctd-cell.is-future{background:transparent}}
:root[data-theme="dark"] .couple-shell .ctd-cell{background:#2f2c37;color:#ece8f2}:root[data-theme="dark"] .couple-shell .ctd-cell.is-part{background:linear-gradient(135deg,var(--ctd-me) 50%,var(--ctd-ta) 50%);color:#26222c}:root[data-theme="dark"] .couple-shell .ctd-cell.is-full{background:var(--ctd-me);color:#26222c}:root[data-theme="dark"] .couple-shell .ctd-cell.is-future{background:transparent}

.couple-mood-del{text-align:center;margin:14px 0 0}

/* ── 今日心情 (js/apps/couple-mood.js): category colours from the --mood-* tokens (index.html), parts and motion from this file and styles/motion.css ── */
.couple-modal{animation:moDialogIn var(--mo-slow) var(--mo-ease-out) backwards}
.couple-modal-ov{animation:moFade var(--mo-fast) ease-out backwards}
.couple-modal-ov.is-closing{opacity:0;pointer-events:none;transition:opacity .16s ease-in}
.couple-modal-ov.is-closing .couple-modal{transform:scale(1.03);opacity:.9;transition:transform var(--mo-fast) ease-in,opacity var(--mo-fast) ease-in}
.cm-tag{display:inline-flex;align-items:center;gap:6px;font-size:13.5px;font-weight:600;color:var(--accent-text)}
.cm-tag i{width:7px;height:7px;border-radius:50%;background:var(--m);flex:none}
.mood-today-val .cm-tag{font-size:inherit}
/* mood chips: one glass card, category-tinted pills */
.couple-glass.cm-moods{display:flex;flex-wrap:wrap;gap:8px;padding:16px 14px}
.cm-chip{display:inline-flex;align-items:center;gap:7px;border:1px solid color-mix(in srgb,var(--m) 38%,transparent);background:color-mix(in srgb,var(--m) 12%,var(--ls-inner));border-radius:999px;padding:6px 14px 6px 12px;font-family:inherit;font-size:14px;color:var(--ink);cursor:pointer;transition:background-color var(--mo-base) var(--mo-ease-out),border-color var(--mo-base),box-shadow var(--mo-base)}
.cm-chip::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--m);flex:none}
.cm-chip.active{background:color-mix(in srgb,var(--m) 32%,var(--ls-inner));border-color:var(--m);font-weight:600;box-shadow:0 4px 12px -6px color-mix(in srgb,var(--m) 70%,transparent)}
.cm-chip.add{border-style:dashed;border-color:color-mix(in srgb,var(--couple-accent-deep) 35%,transparent);background:none;color:var(--couple-accent-ink)}
.cm-chip.add::before{display:none}
.cm-chip.add svg{width:14px;height:14px;stroke-width:1.8;stroke-linecap:round}
.cm-cnt{display:block;text-align:right;font-size:11.5px;color:var(--ink2);font-variant-numeric:tabular-nums;margin-top:2px}
.couple-cta:disabled{opacity:.5;cursor:not-allowed}
/* section titles with a view switch on the right */
.cm-head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:10px 4px 0}
.cm-head .couple-sub-title{margin:0;justify-content:flex-start}
.cm-seg.couple-seg{grid-template-columns:repeat(var(--n),auto);padding:3px;gap:3px;border-radius:12px;background:color-mix(in srgb,var(--couple-accent) 14%,var(--ls-inner))}
.cm-seg.couple-seg button{padding:5px 11px;font-size:12.5px;font-family:var(--font-display);border-radius:9px;transition:background-color var(--mo-base) var(--mo-ease-out),color var(--mo-base),box-shadow var(--mo-base)}
.cm-seg.couple-seg button[aria-checked="true"]{background:var(--ls-inner);color:var(--couple-accent-ink);font-weight:500;box-shadow:0 1px 4px color-mix(in srgb,var(--couple-accent-deep) 18%,transparent)}
.cm-tltitle{justify-content:flex-start}
.cm-tlseg .cm-seg.couple-seg{grid-template-columns:repeat(4,1fr)}
.cm-tlseg .cm-seg.couple-seg button{padding:7px 4px;font-size:13px}
/* 最近 7 天 */
.couple-glass.cm-week{padding:14px 10px 12px}
.cm-days{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cm-day{border:0;background:none;display:flex;flex-direction:column;align-items:center;gap:7px;padding:2px 0;cursor:pointer;font-family:inherit;color:inherit}
.cm-day small{font-size:11px;color:var(--ink2)}
.cm-day.now small{color:var(--ink);font-weight:600}
.cm-ring{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;position:relative;transition:background var(--mo-base)}
.cm-ring::after{content:"";position:absolute;inset:6px;border-radius:50%;background:linear-gradient(var(--ls-inner),var(--ls-inner)),var(--bg)}
.cm-ring span{position:relative;z-index:1;font-size:12px;color:var(--ink);font-variant-numeric:tabular-nums}
.cm-day.now .cm-ring{box-shadow:0 0 0 2px var(--ls-inner),0 0 0 3.5px var(--couple-accent-deep)}
.cm-dot{width:14px;height:14px;border-radius:50%;background:var(--m);transition:background var(--mo-base)}
.cm-dot.none{background:none;border:1.5px dashed color-mix(in srgb,var(--ink2) 35%,transparent)}
.cm-key{display:flex;flex-wrap:wrap;justify-content:center;gap:4px 12px;margin-top:12px;padding-top:10px;border-top:.5px solid color-mix(in srgb,var(--border) 72%,transparent);font-size:11.5px;color:var(--ink2)}
.cm-key i{display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--m);margin-right:5px;vertical-align:1px}
.cm-comp{padding:2px 6px}
.cm-comp .r{display:grid;grid-template-columns:44px 1fr;gap:4px 10px;align-items:center}
.cm-comp .r+.r{margin-top:12px}
.cm-comp .nm{font-size:12.5px;color:var(--ink);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cm-comp .bar{display:flex;height:12px;border-radius:999px;overflow:hidden;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow)}
.cm-comp .bar i{height:100%;background:var(--m)}
.cm-comp .s{grid-column:2;font-size:12px;color:var(--ink2)}
.cm-comp .sum{display:flex;justify-content:space-between;gap:8px;flex-wrap:wrap;margin-top:12px;padding-top:10px;border-top:.5px solid color-mix(in srgb,var(--border) 72%,transparent);font-size:12px;color:var(--ink2)}
/* timeline · 按天 */
.cm-tl{display:flex;flex-direction:column;gap:10px}
.cm-dcard.couple-glass{display:grid;grid-template-columns:48px 1fr;gap:14px;padding:14px 16px}
.cm-big{text-align:center;border-right:.5px solid color-mix(in srgb,var(--border) 90%,transparent);padding-right:12px}
.cm-big b{display:block;font-family:var(--font-display);font-size:28px;font-weight:500;line-height:1.1;color:var(--ink);font-variant-numeric:tabular-nums}
.cm-big small{font-size:11.5px;color:var(--ink2)}
.cm-es{display:flex;flex-direction:column;gap:10px;min-width:0}
.cm-e{display:grid;grid-template-columns:44px 1fr;gap:4px 8px;align-items:center}
.cm-e .who{font-size:12.5px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cm-e .top{display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.cm-sync{font-size:11px;padding:1px 9px;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 30%,transparent);color:var(--couple-accent-ink)}
.cm-e blockquote{grid-column:1/-1;margin:2px 0 0;padding:0 0 0 10px;border-left:2px solid color-mix(in srgb,var(--m) 60%,transparent);font-size:13.5px;line-height:1.65;color:var(--ink);overflow-wrap:anywhere}
/* timeline · 列表 */
.mood-timeline.cm-list{padding:4px 16px}
.cm-lhead,.cm-lrow{display:grid;grid-template-columns:58px 1fr 1fr 14px;gap:8px;align-items:center}
.cm-lhead{font-size:11.5px;color:var(--ink2);padding:10px 0 4px}
.cm-lhead span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cm-lrow{width:100%;border:0;background:none;padding:11px 0;border-top:.5px solid color-mix(in srgb,var(--border) 72%,transparent);font-family:inherit;text-align:left;cursor:pointer;color:inherit}
.cm-lrow[data-nonote]{cursor:default}
.cm-lrow .date,.cm-it .date{font-size:12px;color:var(--ink2);line-height:1.35}
.cm-lrow .date b,.cm-it .date b{display:block;font-size:13px;color:var(--ink);font-weight:600}
.cm-lrow .none{font-size:12.5px;color:var(--ink2)}
.cm-lrow .chev{color:var(--ink2);display:flex}
.cm-lrow .chev svg{width:14px;height:14px;transform:rotate(90deg);transition:transform var(--mo-base) var(--mo-ease-out)}
.cm-lrow[aria-expanded="true"] .chev svg{transform:rotate(-90deg)}
.cm-ex{grid-column:2/5;display:flex;flex-direction:column;gap:4px;overflow:hidden;font-size:12.5px;color:var(--ink2);line-height:1.6;overflow-wrap:anywhere}
.cm-ex b{color:var(--ink);font-weight:600;margin-right:6px}
/* timeline · 月历 */
.couple-glass.cm-month,.couple-glass.cm-catbox{padding:14px}
.cm-mh{display:flex;justify-content:space-between;align-items:center;padding:0 2px 10px}
.cm-mh b{font-family:var(--font-display);font-size:15px;font-weight:500;color:var(--ink)}
.cm-mh span{display:flex;gap:8px}
.cm-mh .couple-glass-btn{width:34px;height:34px}
.cm-mh .couple-glass-btn svg{width:16px;height:16px}
.cm-wd,.cm-cal{display:grid;grid-template-columns:repeat(7,1fr);gap:3px;text-align:center}
.cm-wd{font-size:11px;color:var(--ink2);margin-bottom:4px}
.cm-cell{border:0;background:none;padding:5px 0 6px;border-radius:12px;display:flex;flex-direction:column;align-items:center;gap:4px;font-family:inherit;font-size:12.5px;color:var(--ink);font-variant-numeric:tabular-nums;cursor:pointer;transition:background-color var(--mo-base) var(--mo-ease-out),box-shadow var(--mo-base)}
.cm-cell:disabled{cursor:default}
.cm-cell.out{color:color-mix(in srgb,var(--ink2) 60%,transparent)}
.cm-cell.today>span:first-child{font-weight:700;color:var(--couple-accent-ink)}
.cm-cell.sel{background:var(--ls-inner);box-shadow:var(--ls-inner-shadow),inset 0 0 0 1.5px var(--couple-accent-deep)}
.cm-cell .pr{display:flex;gap:3px;height:6px}
.cm-cell .pr i{width:6px;height:6px;border-radius:50%;background:var(--m)}
.cm-cell .pr i.e{background:none;box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--ink2) 40%,transparent)}
.cm-mdet{margin-top:10px}
.cm-none{text-align:center;margin:12px 0 6px;font-size:12.5px;color:var(--ink2)}
/* timeline · 按类别 */
.cm-cats.couple-seg{grid-template-columns:repeat(4,1fr);gap:3px;padding:3px;border-radius:12px;background:color-mix(in srgb,var(--couple-accent) 14%,var(--ls-inner))}
.cm-cats.couple-seg button{display:inline-flex;align-items:center;justify-content:center;gap:4px;padding:7px 2px;border-radius:9px;font-family:var(--font-display);font-size:12.5px;transition:background-color var(--mo-base) var(--mo-ease-out),color var(--mo-base),box-shadow var(--mo-base)}
.cm-cats.couple-seg button[aria-checked="true"]{background:var(--ls-inner);color:var(--couple-accent-ink);font-weight:500;box-shadow:0 1px 4px color-mix(in srgb,var(--couple-accent-deep) 18%,transparent)}
.cm-cats i{width:6px;height:6px;border-radius:50%;background:var(--m);display:inline-block}
.cm-cats em{font-style:normal;font-size:11px;color:var(--ink2)}
.cm-stat{margin:12px 2px 4px;font-size:12.5px;color:var(--ink2)}
.cm-it{display:grid;grid-template-columns:58px 1fr;gap:10px;padding:11px 0;border-top:.5px solid color-mix(in srgb,var(--border) 72%,transparent)}
.cm-more{display:flex;justify-content:center;padding-top:2px}
.cm-end{text-align:center;font-size:12px;color:var(--ink2)}
/* 自定义心情 (inside .couple-modal) */
.cm-fl{display:block;font-size:12.5px;color:var(--ink2);margin:14px 2px 0}
.couple-modal .cm-catpick.couple-seg{grid-template-columns:repeat(4,1fr);margin-top:8px}
.cm-sw{display:flex;flex-wrap:wrap;gap:9px;align-items:center;margin-top:8px}
.cm-sw button{width:28px;height:28px;border-radius:50%;border:0;padding:0;background:var(--sw);cursor:pointer;box-shadow:inset 0 0 0 2px rgba(255,255,255,.55);outline:2px solid transparent;outline-offset:2px;transition:outline-color var(--mo-base),box-shadow var(--mo-base),transform var(--mo-release) var(--mo-ease-bounce)}
.cm-sw button[aria-pressed="true"]{outline-color:var(--couple-accent-deep)}
.cm-sw button[aria-pressed="true"]:not(.auto){transform:scale(1.08)}
.cm-sw button.auto{width:auto;padding:0 12px;border-radius:14px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font-family:inherit;font-size:12.5px;color:var(--ink2);white-space:nowrap}
.cm-sw button.auto[aria-pressed="true"]{color:var(--couple-accent-ink);outline-color:transparent;box-shadow:var(--ls-inner-shadow),inset 0 0 0 1.5px var(--couple-accent-deep)}
.cm-prev{display:flex;align-items:center;flex-wrap:wrap;gap:8px;margin-top:14px;font-size:12.5px;color:var(--ink2)}
.cm-prev .chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:12px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink);font-size:13px}
.cm-prev .chip::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--m)}
/* motion */
@keyframes cmPop{0%{transform:scale(.86);opacity:.2}60%{transform:scale(1.05);opacity:1}100%{transform:none}}
.cm-pop{animation:cmPop var(--mo-release) var(--mo-ease-bounce)}
.cm-rise{animation:moRise var(--mo-slow) var(--mo-ease-out) backwards}
.cm-swap{animation:moTabIn var(--mo-base) var(--mo-ease-out) backwards}
@keyframes cmFlash{0%{box-shadow:var(--ls-glass-shadow),0 0 0 0 color-mix(in srgb,var(--couple-accent-deep) 45%,transparent)}100%{box-shadow:var(--ls-glass-shadow),0 0 0 14px transparent}}
.cm-dcard.cm-flash{animation:cmFlash 1.1s ease-out}
.cm-lrow.cm-flash{animation:cmFlashRow 1.1s ease-out}
@keyframes cmFlashRow{0%{background:color-mix(in srgb,var(--couple-accent) 30%,transparent)}100%{background:transparent}}

/* ── 测试 (js/apps/couple-tests.js): entry, list, 性格测试 intro / quiz / result. Built from the space's own tokens; the person
   colours --cj (the user) / --cg (TA) are shared by every test page. ── */
.couple-shell,.ccd{--cj:var(--couple-accent-deep);--cg:color-mix(in oklch,var(--couple-companion) 70%,#5b6fa8)}
@supports (color:oklch(from red l c h)){.couple-shell,.ccd{--cg:oklch(from var(--couple-companion) .7 calc(c * 2.4 + .06) h)}}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .couple-shell,:root:not([data-theme="light"]) .ccd{--cj:color-mix(in srgb,var(--couple-accent) 80%,#fff);--cg:var(--couple-companion)}}
:root[data-theme="dark"] .couple-shell,:root[data-theme="dark"] .ccd{--cj:color-mix(in srgb,var(--couple-accent) 80%,#fff);--cg:var(--couple-companion)}
.ctt-entry{margin:0}
.ctt-tile{position:relative;width:46px;height:54px;flex:none}
.ctt-paper{position:absolute;inset:0;border-radius:4px 4px 10px 4px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);transform:rotate(-5deg);padding:9px 7px;display:flex;flex-direction:column;gap:5px}
.ctt-paper::before{content:'';position:absolute;top:-5px;left:50%;width:22px;height:9px;transform:translateX(-50%) rotate(3deg);background:color-mix(in srgb,var(--couple-accent) 75%,transparent)}
.ctt-paper i{display:block;height:4px;border-radius:2px;background:color-mix(in srgb,var(--couple-accent) 60%,var(--ls-inner))}
.ctt-paper i:nth-child(2){width:70%;background:color-mix(in srgb,var(--couple-companion) 90%,var(--ink2))}
.ctt-paper i:nth-child(3){width:85%}.ctt-paper i:nth-child(4){width:55%;background:color-mix(in srgb,var(--couple-companion) 90%,var(--ink2))}.ctt-paper i:nth-child(5){width:75%}
.ctt-tile.sm{width:36px;height:42px}.ctt-tile.sm .ctt-paper{padding:7px 5px;gap:4px}.ctt-tile.sm .ctt-paper i{height:3px}
/* list */
.ctt-test{width:100%;display:flex;align-items:center;gap:14px;padding:16px;border:0;text-align:left;font:inherit;color:var(--ink);cursor:pointer;border-radius:24px}
.ctt-test-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.ctt-test-main>b{font-family:var(--font-display);font-size:17px;font-weight:500}
.ctt-test-main>small{font-size:12px;color:var(--ink2)}
.ctt-test>svg{width:16px;height:16px;flex:none;color:var(--ink2)}
.ctt-time{display:inline-flex;align-items:center;gap:4px;margin-left:6px;padding:1px 8px;border-radius:999px;font-size:11px;background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--couple-accent-ink);vertical-align:2px;font-family:var(--font-body)}
.ctt-time svg{width:11px;height:11px}
.ctt-who{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.ctt-pill{display:inline-flex;align-items:center;gap:5px;padding:2px 9px 2px 2px;border-radius:999px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font-size:11.5px;color:var(--ink2)}
.ctt-pill .couple-mini-av{width:20px;height:20px}.ctt-pill .couple-initial{font-size:10px}
.ctt-pill.is-done{color:var(--couple-accent-ink)}
.ctt-pill.is-done::after{content:'✓';font-size:11px}
/* intro */
.ctt-intro.letter-sheet{--paper:var(--couple-paper);--paper-ink:var(--couple-on-paper)}
.ctt-intro h3{margin:0;font-family:var(--font-display);font-size:24px;font-weight:500}
.ctt-intro p{margin:10px 0 0;font-size:14px;line-height:1.75}
.ctt-intro .ctt-more-note{margin-top:14px;font-size:13px}
.ctt-dims{display:grid;gap:9px;margin-top:16px}
.ctt-dims div{display:grid;grid-template-columns:minmax(76px,max-content) 1fr;gap:8px;font-size:13px;line-height:1.5}
.ctt-dims b{font-weight:500}.ctt-dims span{color:var(--ink2)}
.ctt-src{margin-top:16px;font-size:11px;color:var(--ink2)}
.ctt-sync{display:flex;align-items:center;gap:8px;padding:10px 14px;border-radius:16px;background:color-mix(in srgb,var(--couple-accent) 12%,var(--ls-inner));font-size:12.5px;color:var(--ink2)}
.ctt-sync svg{width:15px;height:15px;color:var(--couple-accent-ink);flex:none}
.ctt-btns{display:flex;flex-direction:column;gap:6px;align-items:stretch}
.ctt-btns .couple-link-btn{align-self:center;padding:10px;font-size:13.5px;font-family:var(--font-display)}
/* quiz */
.ctt-quiz{display:flex;flex-direction:column}
.ctt-qtop{display:flex;align-items:center;gap:12px}
.ctt-qtop h2{flex:1;min-width:0;margin:0;font-family:var(--font-display);font-size:17px;font-weight:500}
.ctt-qtop span{font-family:var(--font-display);font-size:14px;color:var(--ink2);font-variant-numeric:tabular-nums}
.ctt-prog{height:5px;border-radius:4px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);overflow:hidden;margin:14px 2px 0}
.ctt-prog i{display:block;width:0;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--couple-accent),color-mix(in srgb,var(--couple-accent) 65%,var(--couple-accent-deep)));transition:width .35s var(--mo-ease-out,ease)}
.ctt-qcard{position:relative;margin:26px 6px 0;min-height:170px;padding:30px 22px 22px;border-radius:5px 5px 22px 5px;background:var(--couple-paper);color:var(--couple-on-paper);transform:rotate(-1deg);box-shadow:var(--ls-note-shadow);display:flex;flex-direction:column}
.ctt-qcard::before{content:'';position:absolute;top:-9px;left:50%;width:76px;height:19px;transform:translateX(-50%) rotate(2deg);background:color-mix(in srgb,var(--couple-accent) 75%,transparent)}
.ctt-qcard small{font-size:11.5px;letter-spacing:.12em;color:color-mix(in srgb,var(--couple-on-paper) 80%,var(--couple-paper))}
.ctt-qcard p{margin:12px 0 0;font-family:var(--font-display);font-size:21px;line-height:1.55;text-wrap:balance}
.ctt-opts{display:grid;gap:9px;margin-top:26px}
.ctt-opt{display:flex;align-items:center;gap:12px;height:50px;padding:0 16px;border:0;border-radius:16px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink);font:400 15px var(--font-display);text-align:left;cursor:pointer;transition:background-color .2s,color .2s,transform .2s var(--mo-ease-spring,ease)}
.ctt-opt i{width:18px;height:18px;flex:none;border-radius:50%;border:1.5px solid color-mix(in srgb,var(--couple-accent-deep) 40%,transparent);display:grid;place-items:center;transition:background .2s,border-color .2s}
.ctt-opt.on{background:color-mix(in srgb,var(--couple-accent) 55%,var(--ls-inner));color:var(--couple-on-paper)}
.ctt-opt.on i{background:var(--couple-accent-deep);border-color:var(--couple-accent-deep)}
.ctt-opt.on i::after{content:'';width:6px;height:6px;border-radius:50%;background:#fff}
.ctt-qfoot{display:flex;justify-content:space-between;align-items:center;margin-top:18px;padding:0 4px}
.ctt-qfoot .couple-link-btn{font-size:13px;padding:8px 2px}
.ctt-qfoot .couple-link-btn:disabled{opacity:.35;cursor:default}
/* result */
.ctt-me-hd{display:flex;align-items:center;gap:16px;padding:4px 6px 2px}
.ctt-stamp{width:112px;height:112px;border-radius:50%;display:grid;place-items:center;text-align:center;border:2px solid var(--couple-accent-deep);color:var(--couple-accent-ink);box-shadow:inset 0 0 0 4px var(--ls-inner),inset 0 0 0 5.5px color-mix(in srgb,var(--couple-accent-deep) 55%,transparent);font:500 20px var(--font-display);letter-spacing:.1em;transform:rotate(-12deg);background:color-mix(in srgb,var(--couple-paper) 70%,transparent)}
.ctt-stamp small{display:block;font-size:11px;letter-spacing:.04em}
.ctt-stamp.sm{width:72px;height:72px;font-size:14px;flex:none}
.ctt-stamp.sm small{font-size:9.5px}
.ctt-me-hd h3{margin:0;font:500 20px var(--font-display)}
.ctt-me-hd p{margin:4px 0 0;font-size:12.5px;color:var(--ink2)}
.ctt-me-hd p::before{content:'✓ ';color:var(--couple-accent-ink)}
.ctt-hero{padding:16px 12px 12px;text-align:center}
.ctt-hero small{font-size:12px;color:var(--ink2)}
.ctt-radar{display:block;width:100%;max-width:260px;margin:2px auto 0;overflow:visible}
.ctt-radar .grid{fill:none;stroke:color-mix(in srgb,var(--ink2) 22%,transparent);stroke-width:1}
.ctt-radar .axis{stroke:color-mix(in srgb,var(--ink2) 18%,transparent);stroke-width:1}
.ctt-radar text{font:12px var(--font-body);fill:var(--ink2)}
.ctt-radar .val{font:600 11px var(--font-body);fill:var(--ink)}
.ctt-radar .me{fill:color-mix(in srgb,var(--cj) 18%,transparent);stroke:var(--cj);stroke-width:2;stroke-linejoin:round}
.ctt-radar .me-pt{fill:var(--cj);stroke:var(--ls-inner);stroke-width:1.5}
.ctt-lv{font-size:11px;padding:1px 8px;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 25%,var(--ls-inner));color:var(--couple-accent-ink)}
.ctt-mbar{height:7px;margin-top:9px;border-radius:4px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);overflow:hidden}
.ctt-mbar i{display:block;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--couple-accent),var(--couple-accent-deep))}
.ctt-dcard{padding:16px 16px 14px}
.ctt-dcard-h{display:flex;align-items:baseline;gap:8px}
.ctt-dcard-h b{font:500 18px var(--font-display)}
.ctt-dcard-h em{margin-left:auto;font:500 22px var(--font-display);font-style:normal;font-variant-numeric:tabular-nums;color:var(--ink)}
.ctt-dcard-h em small{font-size:11px;color:var(--ink2);margin-left:1px}
.ctt-dcard .ctt-mbar{margin-top:10px}
.ctt-dcard .ctt-res{margin:12px 0 0;font-size:14px;line-height:1.75;color:var(--ink)}
.ctt-morebtn{display:flex;align-items:center;gap:4px;margin-top:10px;padding:0;border:0;background:none;color:var(--couple-accent-ink);font:500 13px var(--font-display);cursor:pointer}
.ctt-morebtn svg{width:14px;height:14px;transition:transform .25s}
.ctt-dcard.open .ctt-morebtn svg{transform:rotate(90deg)}
.ctt-extra{display:none;margin-top:12px;padding-top:12px;border-top:1px solid color-mix(in srgb,var(--couple-accent) 22%,transparent)}
.ctt-dcard.open .ctt-extra{display:block}
.ctt-extra h4{margin:0 0 6px;font:600 13px var(--font-display);color:var(--ink)}
.ctt-extra .ctt-desc{margin:0;font-size:13px;line-height:1.8;color:var(--ink2);white-space:pre-line}
.ctt-facets{display:grid;gap:12px;margin-top:16px}
.ctt-fnote{margin:-6px 0 0;font-size:11.5px;color:var(--ink2)}
.ctt-frow-h{display:flex;align-items:baseline;gap:8px;font-size:13.5px}
.ctt-frow-h b{font:500 14px var(--font-display)}
.ctt-frow-h em{margin-left:auto;font-style:normal;font-size:12.5px;color:var(--ink2);font-variant-numeric:tabular-nums}
.ctt-frow .ctt-mbar{height:5px;margin-top:6px}
.ctt-frow p{margin:6px 0 0;font-size:12px;line-height:1.65;color:var(--ink2)}
.ctt-again{text-align:center}
@media (prefers-reduced-motion:no-preference){
  .ctt-mbar i{animation:cttBar .9s cubic-bezier(.2,.9,.3,1) both}
  .ctt-stamp.ctt-hit{animation:cttStamp .5s cubic-bezier(.3,1.6,.5,1)}
  .ctt-qcard.ctt-next{animation:cttNext .32s var(--mo-ease-out,ease)}
  .ctt-qcard.ctt-prev{animation:cttPrev .32s var(--mo-ease-out,ease)}
  .ctt-opt:active{transform:scale(.97)}
  .ctt-grow{animation:cttGrow .9s cubic-bezier(.2,.9,.3,1) both}
  .ctt-dcard.open .ctt-extra{animation:cttPop .3s var(--mo-ease-spring,ease)}
}
@keyframes cttBar{from{width:0}}
@keyframes cttPop{0%{opacity:0;transform:scale(.97)}100%{opacity:1;transform:none}}
@keyframes cttStamp{0%{opacity:0;transform:rotate(-12deg) scale(2.2)}100%{opacity:1;transform:rotate(-12deg) scale(1)}}
@keyframes cttNext{0%{opacity:0;transform:translateX(40px) rotate(2deg)}100%{opacity:1;transform:rotate(-1deg)}}
@keyframes cttPrev{0%{opacity:0;transform:translateX(-40px) rotate(-4deg)}100%{opacity:1;transform:rotate(-1deg)}}
@keyframes cttGrow{0%{opacity:0;transform:scale(.2)}100%{opacity:1;transform:none}}
/* 测试 · 双方: tabs, TA's result (in TA's colour --cg), the comparison */
.ctt-tabs.couple-seg{grid-template-columns:repeat(3,minmax(0,1fr));padding:3px;gap:3px;border-radius:14px;background:color-mix(in srgb,var(--couple-accent) 14%,var(--ls-inner))}
.ctt-tabs.couple-seg button{min-width:0;font-family:var(--font-display);font-size:14px;padding:8px 6px}
.ctt-tabs.couple-seg button>span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ctt-tabs.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)}
.ctt-tabs.couple-seg button small{display:block;font:11px var(--font-body);color:var(--ink2);margin-top:1px}
.ctt-tabbody{display:flex;flex-direction:column;gap:14px}
.ctt-pill.is-ta.is-done{color:var(--cg)}
.ctt-radar .ta{fill:color-mix(in srgb,var(--cg) 18%,transparent);stroke:var(--cg);stroke-width:2;stroke-linejoin:round;stroke-dasharray:5 3}
.ctt-radar .ta-pt{fill:var(--cg);stroke:var(--ls-inner);stroke-width:1.5}
.ctt-his{display:flex;flex-direction:column;gap:14px}
.ctt-his .ctt-radar .ta{stroke-dasharray:none}
.ctt-his .ctt-mbar i{background:linear-gradient(90deg,color-mix(in srgb,var(--cg) 45%,#fff),var(--cg))}
.ctt-his .ctt-lv{background:color-mix(in srgb,var(--cg) 16%,var(--ls-inner));color:var(--cg)}
.ctt-his .ctt-morebtn{color:var(--cg)}
.ctt-empty-tab{text-align:center;padding:26px 18px 20px}
.ctt-empty-tab>.couple-mini-av{width:56px;height:56px;margin:0 auto}.ctt-empty-tab>.couple-mini-av .couple-initial{font-size:22px}
.ctt-empty-tab h3{margin:14px 0 6px;font:500 18px var(--font-display)}
.ctt-empty-tab p{margin:0;font-size:13px;line-height:1.7;color:var(--ink2)}
.ctt-empty-tab .couple-cta{width:100%;margin-top:18px}
.ctt-bi-hero{text-align:left;padding:18px 16px 14px}
.ctt-bi-h{margin:0;font:600 16px var(--font-display);color:var(--ink)}
.ctt-bi-sub{margin:4px 0 0;font-size:12px;color:var(--ink2)}
.ctt-legend{display:flex;justify-content:center;gap:18px;margin-top:2px;font-size:12.5px;color:var(--ink2)}
.ctt-legend>span{display:inline-flex;align-items:center;gap:6px;min-width:0}
.ctt-legend i{width:8px;height:8px;flex:none;border-radius:50%;background:var(--cj)}.ctt-legend .g i{background:var(--cg)}
.ctt-cmp-sum{display:flex;justify-content:center;flex-wrap:wrap;gap:6px;margin-top:12px}
.ctt-cmp-sum span{font-size:12px;padding:3px 10px;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 20%,var(--ls-inner));color:var(--ink2)}
.ctt-cmp-sum b{color:var(--ink);font-weight:600}
.ctt-bi-card{padding:18px 16px 10px}
.ctt-bi-card .ctt-bi-h{margin-bottom:6px}
.ctt-bi-toggle{display:block;width:100%;padding:0;border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer}
.ctt-bi-row{padding:10px 0 8px}
.ctt-bi-top{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:8px;font-size:12.5px}
.ctt-bi-top .j{color:var(--cj);display:inline-flex;align-items:center;gap:6px}
.ctt-bi-top .g{color:var(--cg);display:inline-flex;align-items:center;justify-content:flex-end;gap:6px}
.ctt-bi-top .couple-mini-av{width:20px;height:20px}.ctt-bi-top .couple-initial{font-size:10px}
.ctt-bi-top b{font-size:14px;font-weight:600;font-variant-numeric:tabular-nums}
.ctt-bi-top .nm{font:600 14px var(--font-display);color:var(--ink);text-align:center}
.ctt-bi-track{position:relative;height:9px;margin-top:7px;border-radius:5px;background:color-mix(in srgb,var(--ink2) 12%,var(--ls-inner))}
.ctt-bi-track::after{content:'';position:absolute;left:50%;top:-3px;bottom:-3px;width:1.5px;margin-left:-.75px;background:color-mix(in srgb,var(--ink2) 55%,transparent)}
.ctt-bi-track i{position:absolute;top:0;bottom:0}
.ctt-bi-track .l{right:50%;border-radius:5px 0 0 5px;background:var(--cj)}
.ctt-bi-track .r{left:50%;border-radius:0 5px 5px 0;background:var(--cg)}
.ctt-chev{display:block;margin:-2px 0 6px;text-align:center;font-style:normal;font-size:11.5px;color:var(--couple-accent-ink)}
.ctt-bi-fac{display:none;margin:2px 0 10px;padding:8px 12px 6px;border-radius:14px;background:color-mix(in srgb,var(--couple-accent) 8%,var(--ls-inner))}
.ctt-bi-dim.open .ctt-bi-fac{display:block}
.ctt-bi-dim+.ctt-bi-dim{border-top:1px solid color-mix(in srgb,var(--couple-accent) 18%,transparent)}
.ctt-bi-row.sm{padding:6px 0 4px}.ctt-bi-row.sm .ctt-bi-top{font-size:11.5px}.ctt-bi-row.sm .ctt-bi-top b{font-size:12px}.ctt-bi-row.sm .nm{font:400 12.5px var(--font-body);color:var(--ink2)}.ctt-bi-row.sm .ctt-bi-track{height:6px;margin-top:5px}
@media (prefers-reduced-motion:no-preference){
  .ctt-bi-track .l{transform-origin:right;animation:cttGrowX .8s cubic-bezier(.2,.9,.3,1) both}
  .ctt-bi-track .r{transform-origin:left;animation:cttGrowX .8s cubic-bezier(.2,.9,.3,1) both}
  .ctt-bi-dim.open .ctt-bi-fac{animation:cttPop .3s var(--mo-ease-spring,ease)}
}
@keyframes cttGrowX{from{transform:scaleX(0)}}

/* ── 测试 · 星盘 (js/apps/couple-astro.js): wheel, 太阳 / 月亮 / 上升, 出生资料, overview, elements, houses, planets, aspects, ⓘ notes.
   The person colours are the tests' --cj (the user) / --cg (TA). ── */
.cas-hero{padding:14px 12px 14px;text-align:center}
.cas-wheel{display:block;width:100%;max-width:300px;margin:0 auto}
.cas-wheel .w-sec.a{fill:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner))}
.cas-wheel .w-sec.b{fill:color-mix(in srgb,var(--couple-accent) 10%,var(--ls-inner))}
.cas-wheel .w-sec{stroke:color-mix(in srgb,var(--ink2) 22%,transparent);stroke-width:.8}
.cas-wheel .w-sg{font:500 11px var(--font-display);fill:color-mix(in srgb,var(--cj) 75%,var(--ink))}
.cas-wheel .w-ring{fill:none;stroke:color-mix(in srgb,var(--ink2) 28%,transparent);stroke-width:1}
.cas-wheel .w-ring.in{fill:color-mix(in srgb,var(--ls-inner) 60%,transparent)}
.cas-wheel .w-axis{stroke:color-mix(in srgb,var(--ink2) 45%,transparent);stroke-width:1;stroke-dasharray:3 3}
.cas-wheel .w-ac{font:600 9px var(--font-body);fill:var(--ink2)}
.cas-wheel .w-asp.s{stroke:var(--cj);stroke-opacity:.75;stroke-width:1.3}
.cas-wheel .w-asp.h{stroke:var(--ink2);stroke-opacity:.6;stroke-width:1.2;stroke-dasharray:4 3}
.cas-wheel .w-tick{stroke-width:1.4}.cas-wheel .w-tick.pj{stroke:var(--cj)}.cas-wheel .w-tick.pg{stroke:var(--cg)}
.cas-wheel .w-pl circle{fill:var(--ls-inner);stroke-width:1.6}
.cas-wheel .w-pl text{font:13px "Segoe UI Symbol","Noto Sans Symbols 2","Noto Sans Symbols","Apple Symbols",var(--font-body);font-weight:600}
.cas-wheel .w-pl.pj circle{stroke:var(--cj)}.cas-wheel .w-pl.pj text{fill:var(--cj)}
.cas-wheel .w-pl.pg circle{stroke:var(--cg)}.cas-wheel .w-pl.pg text{fill:var(--cg)}
@media (prefers-reduced-motion:no-preference){.cas-wheel{animation:asSpin .9s cubic-bezier(.2,.9,.3,1) both}}
@keyframes asSpin{from{opacity:0;transform:rotate(-24deg) scale(.92)}}
.cas-b3-row{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin-top:12px}
.cas-b3{display:flex;flex-direction:column;align-items:center;gap:1px;padding:10px 4px 9px;border-radius:16px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow)}
.cas-b3 i{font:600 16px "Segoe UI Symbol","Noto Sans Symbols 2","Noto Sans Symbols","Apple Symbols",var(--font-body);font-style:normal;color:var(--cj)}
.cas-b3-row.G .cas-b3 i{color:var(--cg)}
.cas-b3 small{font-size:11px;color:var(--ink2)}
.cas-b3 b{font:500 16px var(--font-display);color:var(--ink);text-align:center;line-height:1.3}
.cas-b3 em{font-style:normal;font-size:10.5px;color:var(--ink2)}
.cas-b3.na b{color:var(--ink2)}
.cas-el-card{padding:16px}
.cas-el-row{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px;text-align:center}
.cas-el-row div{display:flex;flex-direction:column;align-items:center;gap:5px;font-size:12px;color:var(--ink2)}
.cas-el-row span{font:500 14px var(--font-display);color:var(--ink)}
.cas-el-row i{position:relative;width:14px;height:54px;border-radius:7px;background:color-mix(in srgb,var(--ink2) 12%,var(--ls-inner));overflow:hidden}
.cas-el-row i b{position:absolute;left:0;right:0;bottom:0;border-radius:7px;background:linear-gradient(0deg,var(--cj),var(--couple-accent))}
.cas-el-row em{font-style:normal;font-variant-numeric:tabular-nums}
.cas-pl-card{padding:16px 16px 6px}
.cas-pl-card .bi-h{margin-bottom:4px}
.cas-pl-row{border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-pl-head,.cas-pl-row.na{display:grid;grid-template-columns:30px 1fr auto 14px;align-items:center;gap:10px;width:100%;padding:10px 0;border:0;background:none;font:inherit;color:inherit;text-align:left;cursor:pointer}
.cas-pl-row:first-of-type{border-top:0}
.cas-pl-head>svg{width:14px;height:14px;color:var(--ink2);transition:transform .25s}
.cas-pl-row.open .cas-pl-head>svg{transform:rotate(90deg)}
.cas-pl-g{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--cj);font:600 15px "Segoe UI Symbol","Noto Sans Symbols 2","Noto Sans Symbols","Apple Symbols",var(--font-body)}
.cas-pl-card.G .cas-pl-g{background:color-mix(in srgb,var(--cg) 14%,var(--ls-inner));color:var(--cg)}
.cas-pl-n b{display:block;font:500 14.5px var(--font-display);color:var(--ink)}.cas-pl-n small{font-size:11.5px;color:var(--ink2)}
.cas-pl-s{font:500 14px var(--font-display);color:var(--ink);text-align:right;white-space:nowrap}
.cas-pl-t{display:none;padding-left:40px;margin:2px 0 4px;font-size:13px;line-height:1.7;color:var(--ink2)}
.cas-pl-row.open .cas-pl-t{display:block}
@media (prefers-reduced-motion:no-preference){.cas-pl-row.open .cas-pl-t{animation:cttPop .3s var(--mo-ease-spring,ease)}}
.cas-pl-row.na{cursor:default;grid-template-columns:30px 1fr}.cas-pl-row.na .cas-pl-g{color:var(--ink2);background:color-mix(in srgb,var(--ink2) 10%,var(--ls-inner))}
.cas-as-card{padding:16px 16px 8px}
.cas-as-row{padding:10px 0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-as-card .bi-h+.cas-as-row{border-top:0}
.cas-as-top{display:flex;align-items:center;flex-wrap:wrap;gap:6px;font-size:13px}
.cas-as-who{font:500 14px var(--font-display)}
.cas-as-who.j{color:var(--cj)}.cas-as-who.g{color:var(--cg)}
.cas-as-k{font-size:11px;padding:1px 8px;border-radius:999px;font-weight:600}
.cas-as-k.s{background:color-mix(in srgb,var(--couple-accent) 30%,var(--ls-inner));color:var(--cj)}
.cas-as-k.h{background:color-mix(in srgb,var(--ink2) 14%,var(--ls-inner));color:var(--ink2)}
.cas-as-row p{margin:5px 0 0;font-size:13px;line-height:1.65;color:var(--ink2)}
@keyframes scIn{from{stroke-dasharray:0 163.4}}
.cas-fm-card{padding:16px}
.cas-fm-intro{margin:0 0 6px;font-size:13px;line-height:1.7;color:var(--ink2)}
.cas-fm-row{display:grid;grid-template-columns:30px 76px 1fr;align-items:center;gap:8px;padding:12px 0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-fm-row.off .cas-fm-k,.cas-fm-row.off input{color:var(--ink2)}
.cas-fm-ic{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)}.cas-fm-ic svg{width:16px;height:16px}
.cas-fm-k{font:500 14px var(--font-display);color:var(--ink)}
.cas-fm-row input{min-width:0;border:0;background:transparent;font:16px var(--font-display);color:var(--ink);text-align:right;outline:none;padding:4px 0}
.cas-fm-switch{display:flex;justify-content:space-between;align-items:center;padding:10px 0 12px 38px;font-size:13.5px;color:var(--ink2)}
.cas-fm-note{margin:0 0 6px 38px;font-size:12px;line-height:1.6;color:var(--ink2)}
.cas-fm-sug{display:flex;flex-wrap:wrap;gap:6px;padding-left:38px}
.cas-fm-sug button{display:inline-flex;align-items:center;gap:4px;padding:5px 10px;border:0;border-radius:999px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font:13px var(--font-display);color:var(--ink);cursor:pointer}
.cas-fm-sug svg{width:12px;height:12px;color:var(--couple-accent-ink)}
.cas-tile{display:grid;place-items:center;border-radius:14px;background:color-mix(in srgb,var(--couple-accent) 25%,var(--ls-inner));box-shadow:var(--ls-inner-shadow);color:var(--ink)}
.cas-tile .cas-mw{width:38px;height:38px}
.cas-wheel .w-axis.mc{stroke-dasharray:3 3;stroke-opacity:.5}
.cas-ov-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:12px 0}
.cas-ov-stats div{padding:10px 4px;border-radius:14px;background:color-mix(in srgb,var(--couple-accent) 18%,var(--ls-inner));text-align:center}
.cas-ov-stats small{display:block;font-size:11px;color:var(--ink2)}
.cas-ov-stats b{display:block;margin:4px 0 2px;font:500 16px var(--font-display);color:var(--cj)}
.cas-ov-stats em{font-style:normal;font-size:11px;color:var(--ink2)}
.cas-ov-card.G .cas-ov-stats div{background:color-mix(in srgb,var(--cg) 12%,var(--ls-inner))}.cas-ov-card.G .cas-ov-stats b{color:var(--cg)}
.cas-ov-p{margin:0;font-size:13px;line-height:1.8;color:var(--ink2)}
.cas-el-two{display:grid;grid-template-columns:4fr 3fr;gap:14px}
.cas-el-sub{margin:10px 0 0;font-size:12px;color:var(--ink2)}
.cas-el-two .cas-el-row{margin-top:8px;gap:6px}.cas-el-row.md{grid-template-columns:repeat(3,1fr)}
.cas-el-card.G .cas-el-row i b{background:linear-gradient(0deg,var(--cg),color-mix(in srgb,var(--cg) 45%,#fff))}
.cas-hs-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:12px}
.cas-hs-grid div{padding:8px 2px 6px;border-radius:12px;text-align:center;background:color-mix(in srgb,var(--couple-accent) 10%,var(--ls-inner))}
.cas-hs-grid div.on{background:color-mix(in srgb,var(--couple-accent) 30%,var(--ls-inner))}
.cas-hs-grid small{display:block;font-size:10.5px;color:var(--ink2)}
.cas-hs-grid b{display:block;font:500 12.5px var(--font-display);color:var(--ink)}
.cas-hs-grid i{display:block;min-height:17px;margin-top:2px;font:600 13px "Segoe UI Symbol","Noto Sans Symbols 2","Noto Sans Symbols","Apple Symbols",var(--font-body);font-style:normal;color:var(--cj);letter-spacing:1px}
.cas-hs-card.G .cas-hs-grid div.on{background:color-mix(in srgb,var(--cg) 16%,var(--ls-inner))}.cas-hs-card.G .cas-hs-grid i{color:var(--cg)}
.cas-pl-grp,.cas-as-grp{margin:14px 0 0;font-size:11.5px;letter-spacing:.06em;color:var(--ink2)}
.cas-pl-grp+.cas-pl-row,.cas-as-grp+.cas-as-row{border-top:0}
.cas-pl-t p{margin:0 0 6px}.cas-pl-role{color:var(--ink2)}.cas-pl-note{font-size:12px}
.cas-pl-t .cas-lb{font-weight:500;color:var(--ink)}
.cas-pl-chips{display:flex;flex-wrap:wrap;gap:6px;margin:2px 0 4px}
.cas-pl-chips span{font-size:11.5px;padding:2px 9px;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 24%,var(--ls-inner));color:var(--cj)}
.cas-pl-card.G .cas-pl-chips span{background:color-mix(in srgb,var(--cg) 13%,var(--ls-inner));color:var(--cg)}
.cas-as-orb{margin-left:auto;font-size:11.5px;color:var(--ink2);font-variant-numeric:tabular-nums}
.cas-wheel .w-hs{stroke:var(--ink2);stroke-opacity:.22;stroke-width:.8}
.cas-wheel .w-hn{font:9px var(--font-body);fill:var(--ink2)}
.cas-wheel .w-lead{stroke-width:.8;stroke-opacity:.55}.cas-wheel .w-lead.pj{stroke:var(--cj)}.cas-wheel .w-lead.pg{stroke:var(--cg)}
.cas-wheel .w-rx{font:600 8px var(--font-body);fill:var(--ink2)}
.cas-wheel .w-pl{cursor:pointer}
.cas-wheel .w-asp{transition:opacity .2s,stroke-width .2s}
.cas-wheel.hl .w-asp{opacity:.1}.cas-wheel.hl .w-asp.on{opacity:1;stroke-width:2}
.cas-wheel.hl .w-pl{opacity:.45}.cas-wheel.hl .w-pl.sel{opacity:1}.cas-wheel.hl .w-pl.sel circle{stroke-width:2.4}
.cas-w-hint{margin:2px 0 6px;font-size:11.5px;color:var(--ink2)}
.cas-pl-s .cas-rx{display:block;font-style:normal;font-size:11px;color:var(--ink2);text-align:right}
.cas-hs-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cas-hs-seg.couple-seg{grid-template-columns:1fr 1fr;width:auto}.cas-hs-seg button{padding:6px 12px;font-size:13px;white-space:nowrap}.cas-hs-seg button:disabled{opacity:.4}
.cas-fm-sug em{font-style:normal;font-size:11px;color:var(--ink2);margin-left:2px}
.cas-fm-tz{margin:8px 0 0 38px;font-size:12px;color:var(--ink2)}
.cas-body{display:flex;flex-direction:column;gap:14px}
.cas-h{margin:0;font:600 16px var(--font-display);color:var(--ink)}
.cas-sub{margin:4px 0 0;font-size:12px;color:var(--ink2)}
.cas-note{margin:10px 0 0;font-size:11.5px;line-height:1.6;color:var(--ink2)}
.cas-info{display:inline-grid;place-items:center;width:22px;height:22px;margin:-3px 0 0 6px;padding:0;border:none;border-radius:50%;background:color-mix(in srgb,var(--couple-accent) 14%,transparent);color:var(--couple-accent-deep);vertical-align:middle;cursor:pointer}
.cas-info svg{width:14px;height:14px}
.cas-info-body .cas-in-h{margin:16px 0 4px;font:600 14px var(--font-display);color:var(--ink)}
.cas-info-body .cas-in-h:first-child{margin-top:4px}
.cas-in-p{margin:0;font-size:13.5px;line-height:1.8;color:var(--ink2)}
.cas-in-p+.cas-in-p{margin-top:6px}
.cas-in-foot{margin:16px 0 0;padding-top:12px;border-top:1px solid color-mix(in srgb,var(--ink2) 16%,transparent);font-size:12px;line-height:1.7;color:var(--ink2)}
.cas-fm-st{align-self:center;font-size:12px;color:var(--ink2)}
.cas-fm-row input:disabled{background:transparent}
.cas-hs-seg.couple-seg{padding:3px;gap:3px;border-radius:12px;background:color-mix(in srgb,var(--couple-accent) 14%,var(--ls-inner))}
.cas-hs-seg.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)}
.cas-src-row{display:grid;grid-template-columns:34px 1fr auto;align-items:center;gap:12px;width:100%;padding:12px 14px;border:0;text-align:left;cursor:pointer;font:inherit}
.cas-src-ic{width:34px;height:34px;border-radius:12px;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 24%,var(--ls-inner));color:var(--cj)}.cas-src-ic svg{width:17px;height:17px}
.cas-src-row.g .cas-src-ic{background:color-mix(in srgb,var(--cg) 13%,var(--ls-inner));color:var(--cg)}
.cas-src-main b{display:block;font:500 14.5px var(--font-display);color:var(--ink)}.cas-src-main small{display:block;margin-top:2px;font-size:12.5px;color:var(--ink);font-variant-numeric:tabular-nums}.cas-src-main em{display:block;margin-top:2px;font-style:normal;font-size:11.5px;color:var(--ink2)}
.cas-src-go{display:flex;align-items:center;gap:2px;font-size:13px;color:var(--cj)}.cas-src-row.g .cas-src-go{color:var(--cg)}.cas-src-go svg{width:14px;height:14px}
.cas-wheel .w-pl:focus{outline:none}.cas-wheel .w-pl:focus-visible circle{stroke-width:3}
/* ── 测试 · 星盘（双人）: tabs, TA's state cards, 合盘 (scores, themes, 关系盘, 元素对比, 宫位叠加) ── */
.cas-hero>.cas-h,.cas-hero>.cas-sub{text-align:left;padding:0 4px}
.cas-legend{display:flex;justify-content:center;flex-wrap:wrap;gap:6px 18px;margin-top:4px;font-size:12.5px;color:var(--ink2)}
.cas-legend>span{display:inline-flex;align-items:center;gap:6px;min-width:0}
.cas-legend i{width:8px;height:8px;border-radius:50%;background:var(--cj)}.cas-legend .g i{background:var(--cg)}
.cas-b3-row.C .cas-b3 i{color:var(--couple-accent-deep)}
.cas-miss{padding:16px;display:flex;flex-direction:column;gap:12px;border:1.5px dashed color-mix(in srgb,var(--cg) 55%,transparent)}
.cas-miss b{font:600 15px var(--font-display);color:var(--ink)}
.cas-miss p{margin:4px 0 0;font-size:12.5px;line-height:1.6;color:var(--ink2)}
.cas-miss small{font-size:11.5px;line-height:1.5;color:var(--ink2)}
.cas-miss-act{display:flex;flex-direction:column;align-items:center;gap:6px}.cas-miss-act .couple-cta{width:100%;height:42px;font-size:14px}
.cas-sc-card,.cas-th-card,.cas-cp-card,.cas-ec-card{padding:16px}
.cas-ho-card{padding:16px 16px 8px}
.cas-sc-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:12px}
.cas-sc{position:relative;display:flex;flex-direction:column;align-items:center;min-width:0}
.cas-sc svg{width:64px;height:64px;transform:rotate(-90deg)}
.cas-sc .t{fill:none;stroke:color-mix(in srgb,var(--ink2) 12%,var(--ls-inner));stroke-width:6}
.cas-sc .v{fill:none;stroke:var(--cj);stroke-width:6;stroke-linecap:round}
.cas-sc.fr .v{stroke:var(--cg)}
.cas-sc b{position:absolute;top:20px;font:600 18px var(--font-display);color:var(--ink);font-variant-numeric:tabular-nums}
.cas-sc span{margin-top:4px;font-size:12px;color:var(--ink2);text-align:center}
.cas-th-card h4{display:flex;align-items:center;gap:6px;margin:14px 0 2px;font:500 14px var(--font-display);color:var(--ink)}
.cas-th-card h4 i{width:8px;height:8px;border-radius:50%}.cas-th-card h4 i.s{background:var(--cj)}.cas-th-card h4 i.h{box-shadow:inset 0 0 0 1.6px var(--cj)}
.cas-th-card ul{margin:0;padding:0;list-style:none}
.cas-th-card li{padding:8px 0;font-size:13px;line-height:1.7;color:var(--ink2);border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-th-card h4+ul li:first-child{border-top:0}
.cas-th-card li>b{display:block;font-weight:400}.cas-th-card li .cas-as-who{font-size:13px}
.cas-cp-card .cas-b3-row{margin:12px 0 4px}
.cas-cp-row{display:grid;grid-template-columns:30px 1fr;gap:10px;padding:10px 0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-cp-row b{font:500 14px var(--font-display);color:var(--ink)}
.cas-cp-row p{margin:3px 0 0;font-size:13px;line-height:1.65;color:var(--ink2)}
.cas-cp-row.na .cas-pl-g{color:var(--ink2);background:color-mix(in srgb,var(--ink2) 10%,var(--ls-inner))}.cas-cp-row.na b{color:var(--ink2)}
.cas-ec-row{display:grid;grid-template-columns:24px 1fr 40px;align-items:center;gap:10px;margin-top:10px;font-size:13px;color:var(--ink)}
.cas-ec-row em{font-style:normal;font-size:12px;color:var(--ink2);text-align:right;font-variant-numeric:tabular-nums}
.cas-ec-bars{display:flex;flex-direction:column;gap:4px}
.cas-ec-bars i{display:block;height:7px;min-width:3px;border-radius:4px}.cas-ec-bars .j{background:var(--cj)}.cas-ec-bars .g{background:var(--cg)}
.cas-ec-card .cas-legend{margin:12px 0 10px}
.cas-ho-row{padding:10px 0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-ho-card .cas-sub+.cas-ho-row{border-top:0}
.cas-ho-row p{margin:5px 0 0;font-size:13px;line-height:1.65;color:var(--ink2)}
.cas-ho-in{font-size:12px;color:var(--ink2)}
.cas-ho-card>.cas-note{margin:4px 0 10px}
.cas-fm-card.g .cas-fm-ic{background:color-mix(in srgb,var(--cg) 13%,var(--ls-inner));color:var(--cg)}
:lang(en) .cas-ec-row{grid-template-columns:44px 1fr 40px}
/* ── 测试 · 星盘 运势: the day, its scores, transits, the sky and the next 30 days ── */
.cas-tabs.couple-seg{grid-template-columns:repeat(4,minmax(0,1fr))}
.cas-day-hero{padding:14px 14px 16px}
.cas-day-nav{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cas-day-nav>div{display:flex;flex-direction:column;align-items:center;min-width:0}
.cas-day-nav b{font:600 18px var(--font-display);color:var(--ink)}
.cas-day-nav small{font-size:12px;color:var(--ink2)}
.cas-day-nav .couple-link-btn{margin-top:2px;font-size:12px}
.cas-day-nav .couple-glass-btn:disabled{color:var(--ink2);cursor:default}
.cas-day-moon{display:flex;align-items:center;justify-content:center;gap:8px;margin-top:14px;font-size:13.5px;color:var(--ink2)}
.cas-day-moon b{margin-left:4px;font:600 15px var(--font-display);color:var(--cj)}
.cas-day-moon .cas-mph{width:22px;height:22px;flex:none}
.cas-day-kw{display:flex;justify-content:center;flex-wrap:wrap;gap:8px;margin-top:12px}
.cas-day-kw span{padding:5px 14px;border-radius:999px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font:500 15px var(--font-display);color:var(--cj)}
.cas-mph .d{fill:color-mix(in srgb,var(--ink2) 16%,var(--ls-inner));stroke:color-mix(in srgb,var(--cj) 30%,transparent);stroke-width:.6}
.cas-mph .l{fill:color-mix(in srgb,var(--cj) 75%,#fff)}
.cas-day-card{padding:16px 16px 8px}
.cas-day-row{padding:10px 0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-day-card .cas-h+.cas-day-row{border-top:0}
.cas-day-tech{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin-top:2px;font-size:12px;color:var(--ink2)}
.cas-day-row p,.cas-day-p{margin:6px 0 0;font-size:14px;line-height:1.7;color:var(--ink)}
.cas-day-p{margin-bottom:8px}
.cas-sky-card,.cas-up-card{padding:16px}
.cas-sky-row,.cas-up-row{display:grid;grid-template-columns:40px 1fr;gap:12px;padding:12px 0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.cas-sky-card .cas-h+.cas-sky-row,.cas-up-card .cas-sub+.cas-up-row{border-top:0}
.cas-sky-ic{width:40px;height:40px;border-radius:14px;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 18%,var(--ls-inner));color:var(--cj);font:600 18px "Segoe UI Symbol","Noto Sans Symbols 2","Noto Sans Symbols","Apple Symbols",var(--font-body)}
.cas-sky-ic .cas-mph{width:30px;height:30px}
.cas-sky-row b{display:block;font:500 14px var(--font-display);color:var(--ink)}
.cas-sky-row p{margin:4px 0;font-size:12.5px;line-height:1.65;color:var(--ink2)}
.cas-sky-row small{font-size:11.5px;color:var(--ink2)}
.cas-sky-row.warn b{color:var(--cj)}
.cas-up-row{padding:10px 0}
.cas-up-d{display:flex;flex-direction:column;align-items:center;justify-content:center;height:44px;border-radius:12px;background:color-mix(in srgb,var(--couple-accent) 18%,var(--ls-inner))}
.cas-up-d b{font:500 17px var(--font-display);color:var(--cj);line-height:1}
.cas-up-d small{margin-top:2px;font-size:10.5px;color:var(--ink2)}
.cas-up-t{display:block;font:500 14px var(--font-display);color:var(--ink)}
.cas-up-row p{margin:3px 0 0;font-size:12.5px;line-height:1.6;color:var(--ink2)}
.cas-day-us{margin:4px 6px 0;width:auto}
.cas-day-us p b{display:block;margin-top:8px;font:600 12px var(--font-display)}
.cas-day-us p b:first-child{margin-top:4px}
.cas-day-us .uj{color:var(--cj)}.cas-day-us .ug{color:var(--cg)}
/* ── 测试 · 塔罗: cards (back / face, 3D turn), spreads, the question, the board, cutting, the fan, the reading rows ── */
.ctr-c{position:relative;width:100%;aspect-ratio:3/5;border-radius:7px;perspective:900px;container-type:inline-size}
.ctr-in{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .65s cubic-bezier(.3,.8,.3,1)}
.ctr-c.up .ctr-in{transform:rotateY(180deg)}
.ctr-b,.ctr-f{position:absolute;inset:0;border-radius:inherit;overflow:hidden;backface-visibility:hidden;-webkit-backface-visibility:hidden}
.ctr-b{background:radial-gradient(circle at 50% 46%,color-mix(in srgb,#fff 70%,var(--couple-accent)) 0 18%,transparent 19%),linear-gradient(160deg,color-mix(in srgb,var(--couple-accent) 85%,#fff),color-mix(in srgb,var(--couple-accent) 55%,var(--cj)));box-shadow:0 1px 2px rgba(40,55,80,.12),0 10px 22px -12px color-mix(in srgb,var(--cj) 60%,transparent)}
.ctr-b::before{content:"";position:absolute;inset:6%;border:1px solid rgba(255,255,255,.75);border-radius:5px}
.ctr-b::after{content:"";position:absolute;inset:9%;border:1px dashed rgba(255,255,255,.45);border-radius:3px}
.ctr-b svg{position:absolute;left:50%;top:46%;width:46%;transform:translate(-50%,-50%);color:var(--cj)}
.ctr-c.ta .ctr-b{background:radial-gradient(circle at 50% 46%,color-mix(in srgb,#fff 70%,var(--cg)) 0 18%,transparent 19%),linear-gradient(160deg,color-mix(in srgb,var(--cg) 30%,#fff),color-mix(in srgb,var(--cg) 70%,#fff))}
.ctr-c.ta .ctr-b svg{color:var(--cg)}
.ctr-f{transform:rotateY(180deg);background:#fff;box-shadow:0 1px 2px rgba(40,55,80,.12),0 10px 22px -12px rgba(40,55,80,.4)}
.ctr-art{position:absolute;inset:0}
.ctr-c.rev .ctr-art{transform:rotate(180deg)}
.ctr-art img{display:block;width:100%;height:100%;object-fit:cover}
.ctr-lb{position:absolute;left:4.6%;right:4.6%;display:grid;place-items:center;font:600 8.6cqw/1 var(--font-display);letter-spacing:.12em;color:#26221f;white-space:nowrap}
.ctr-tile{display:grid;place-items:center}.ctr-tile .ctr-c{width:30px}
.ctr-intro{margin:0 0 4px;font-size:13px;line-height:1.7;color:var(--ink2)}
.ctr-tiles{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.ctr-tiles>button{display:flex;align-items:center;gap:12px;min-width:0;padding:12px 14px;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer}
.ctr-tiles b{display:block;font:500 15px var(--font-display);color:var(--ink)}
.ctr-tiles small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink2)}
.ctr-ti{flex:none;width:36px;height:44px;display:grid;place-items:center}.ctr-ti .ctr-c{width:26px}
.ctr-set-row{display:grid;grid-template-columns:36px 1fr 14px;gap:12px;align-items:center;width:100%;padding:12px 16px;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer}
.ctr-tiles .ctr-set-row{display:flex}
.ctr-set-row>svg{width:14px;height:14px;color:var(--ink2)}
.ctr-set-ic{width:36px;height:36px;border-radius:12px;display:grid;place-items:center;background:color-mix(in srgb,var(--couple-accent) 20%,var(--ls-inner));color:var(--cj)}.ctr-set-ic svg{width:20px;height:20px}
.ctr-set-row b{display:block;font:500 15px var(--font-display);color:var(--ink)}
.ctr-set-row small{display:block;margin-top:2px;font-size:11.5px;color:var(--ink2)}
.ctr-h{margin:10px 2px -4px;font:500 15px var(--font-display);color:var(--ink)}
.ctr-sp{display:grid;grid-template-columns:52px 1fr 14px;gap:14px;align-items:center;width:100%;padding:14px 16px;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer}
.ctr-sp>svg{width:14px;height:14px;color:var(--ink2)}
.ctr-sp b{display:flex;align-items:center;flex-wrap:wrap;gap:8px;font:500 16px var(--font-display);color:var(--ink)}
.ctr-sp small{display:block;margin-top:3px;font-size:12.5px;line-height:1.55;color:var(--ink2)}
.ctr-mini{position:relative;display:block;width:52px;height:62px}
.ctr-mini i{position:absolute;border-radius:3px;background:linear-gradient(160deg,color-mix(in srgb,var(--couple-accent) 85%,#fff),color-mix(in srgb,var(--couple-accent) 50%,var(--cj)));box-shadow:0 2px 6px -2px color-mix(in srgb,var(--cj) 50%,transparent)}
.ctr-q{padding:16px}
.ctr-q h3{margin:0 0 4px;font:500 15px var(--font-display);color:var(--ink)}
.ctr-q>p{margin:0 0 12px;font-size:12.5px;line-height:1.6;color:var(--ink2)}
.ctr-q textarea{display:block;width:100%;box-sizing:border-box;min-height:84px;padding:12px 14px;border:0;border-radius:14px;resize:none;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font:16px/1.6 var(--font-body);color:var(--ink);outline:none}
.ctr-sugg{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.ctr-sugg button{padding:5px 11px;border:0;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 20%,var(--ls-inner));color:var(--couple-accent-ink);font:12.5px var(--font-body);cursor:pointer}
.ctr-who{margin-top:6px}.ctr-who.ctt-tabs.couple-seg,.ctr-two.ctt-tabs.couple-seg{grid-template-columns:repeat(2,minmax(0,1fr))}
.ctr-two.ctt-tabs.couple-seg{margin-top:10px}.ctr-two.ctt-tabs.couple-seg button{font-size:13px}
.ctr-note{margin:10px 0 0;font-size:12.5px;line-height:1.6;color:var(--ink2)}
.ctr-duo{padding:8px 0 0}.ctr-duo>span{flex:1;min-width:0}
.ctr-duo small{display:block;margin-top:2px;font-size:12px;line-height:1.5;color:var(--ink2)}
.ctr-pl{display:flex;flex-direction:column;gap:6px;margin-top:6px}
.ctr-pl div{display:flex;align-items:center;gap:10px;font-size:13px;color:var(--ink)}
.ctr-pl em{flex:none;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;font:600 11px var(--font-body);font-style:normal;background:color-mix(in srgb,var(--couple-accent) 30%,var(--ls-inner));color:var(--cj)}
.ctr-pl em.g{background:color-mix(in srgb,var(--cg) 16%,var(--ls-inner));color:var(--cg)}
.ctr-gby{font-style:normal;margin-left:8px;padding:0 7px;border-radius:999px;font-size:10.5px;background:color-mix(in srgb,var(--cg) 14%,var(--ls-inner));color:var(--cg);white-space:nowrap}
.ctr-board{padding:16px 12px 14px;overflow:hidden}
.ctr-qline{margin:0 4px 14px;font:14px/1.6 var(--font-display);color:var(--ink);text-align:center}
.ctr-qline small{display:block;font:12px var(--font-body);color:var(--ink2)}
.ctr-slots-wrap{overflow-x:auto;scrollbar-width:none}.ctr-slots-wrap::-webkit-scrollbar{display:none}
.ctr-slots{position:relative;margin:0 auto}
.ctr-slot{position:absolute;width:var(--cw);display:flex;flex-direction:column;align-items:center;gap:6px}
.ctr-slot>span{font-size:11.5px;color:var(--ink2);text-align:center;line-height:1.3}
.ctr-slot.cross{z-index:2}.ctr-slot.cross .ctr-c,.ctr-slot.cross .ctr-ph{transform:rotate(90deg) scale(.92)}.ctr-slot.cross>span{visibility:hidden}
.ctr-slots.sm .ctr-slot>span{font-size:11px;line-height:1}
.ctr-ph{width:100%;aspect-ratio:3/5;box-sizing:border-box;border-radius:7px;border:1.5px dashed color-mix(in srgb,var(--cj) 40%,transparent);background:color-mix(in srgb,var(--couple-accent) 10%,transparent);display:grid;place-items:center;font:500 18px var(--font-display);color:var(--cj)}
.ctr-slots.sm .ctr-ph{font-size:14px}
.ctr-slot.gs .ctr-ph{border-color:color-mix(in srgb,var(--cg) 45%,transparent);background:color-mix(in srgb,var(--cg) 8%,transparent);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--cg)}
.ctr-slot.gs .ctr-ph small{font:11px var(--font-body);text-align:center}.ctr-slot.gs .ctr-ph .couple-mini-av{width:26px;height:26px}
.ctr-slot .ctr-c{cursor:pointer}
.ctr-slot .ctr-c.new{animation:ctrIn .45s cubic-bezier(.2,.9,.3,1.2)}
@keyframes ctrIn{from{opacity:0;transform:translateY(60px) scale(.8) rotate(-6deg)}to{opacity:1;transform:none}}
.ctr-legend{display:grid;grid-template-columns:1fr 1fr;gap:4px 12px;margin:10px 6px 0;padding-left:20px;font-size:12px;color:var(--ink2)}
.ctr-legend li::marker{color:var(--cj);font-weight:600}
.ctr-tip{margin:12px 0 0;text-align:center;font-size:12.5px;color:var(--ink2)}
.ctr-cut{margin-top:16px;text-align:center}
.ctr-cut>p{margin:0 0 12px;font-size:12.5px;color:var(--ink2)}
.ctr-stacks{display:flex;justify-content:center;gap:22px}
.ctr-stacks button{position:relative;width:62px;height:124px;padding:0;border:0;background:none;cursor:pointer}
.ctr-stacks button>span{position:absolute;left:0;top:calc(var(--j)*-3px + 9px);width:58px;transform:translateX(calc(var(--j)*1px));transition:transform .2s}
.ctr-stacks button small{position:absolute;left:0;right:0;bottom:0;font-size:11.5px;color:var(--ink2)}
.ctr-stacks button:hover>span:last-of-type,.ctr-stacks button:focus-visible>span:last-of-type{transform:translate(3px,-10px)}
.ctr-cut .couple-link-btn{margin-top:10px;font-size:13px}
.ctr-fan{position:relative;height:168px;margin:16px -12px 0;overflow-x:auto;overflow-y:hidden;scrollbar-width:none;-webkit-overflow-scrolling:touch;-webkit-mask-image:linear-gradient(90deg,transparent,#000 9%,#000 91%,transparent);mask-image:linear-gradient(90deg,transparent,#000 9%,#000 91%,transparent)}
.ctr-fan::-webkit-scrollbar{display:none}
.ctr-track{position:relative;height:100%}
.ctr-fan button{position:absolute;top:14px;width:58px;padding:0;border:0;background:none;transform-origin:50% 100%;cursor:pointer;transition:opacity .25s}
.ctr-fan button .ctr-c{transition:transform .2s}
.ctr-fan button:hover .ctr-c,.ctr-fan button:focus-visible .ctr-c{transform:translateY(-14px)}
.ctr-fan button:focus-visible{outline:none}
.ctr-fan button.gone{opacity:0;pointer-events:none}
.ctr-acts{display:flex;justify-content:center;gap:10px;margin-top:12px}
.ctr-acts .couple-link-btn{font-size:13px}
.ctr-read,.ctr-shr{padding:16px}
.ctr-row{display:grid;grid-template-columns:62px 1fr;gap:14px;padding:14px 0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent)}
.ctr-read .cas-h+.ctr-row{border-top:0;padding-top:12px}
.ctr-row .ctr-c{width:62px}
.ctr-row small{font-size:11.5px;color:var(--ink2)}
.ctr-row b{display:flex;align-items:center;flex-wrap:wrap;gap:6px;margin:2px 0 6px;font:500 15px var(--font-display);color:var(--ink)}
.ctr-ori{font:600 11px var(--font-body);padding:1px 8px;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 30%,var(--ls-inner));color:var(--cj)}
.ctr-ori.r{background:color-mix(in srgb,var(--ink2) 14%,var(--ls-inner));color:var(--ink2)}
.ctr-kw{display:flex;flex-wrap:wrap;gap:5px;margin-bottom:6px}
.ctr-kw span{font-size:11.5px;padding:2px 8px;border-radius:999px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink)}
.ctr-row p{margin:0;font-size:13px;line-height:1.7;color:var(--ink2)}
.ctr-opts .couple-opt>span{flex:1;min-width:0}.ctr-opts .couple-opt small{display:block;margin-top:2px;font-size:12px;line-height:1.5;color:var(--ink2)}
@media (prefers-reduced-motion: reduce){.ctr-in{transition:none}.ctr-slot .ctr-c.new{animation:none}}
/* ── 测试 · 塔罗 解读: the side the draw is about, folded rows, 整体, one card's page, 牌库 ── */
.ctr-read .cas-sub+.ctr-row{border-top:0;padding-top:12px}
.ctr-row .ctr-c{cursor:zoom-in}
.ctr-row p.ctr-asp,.ctr-dp.ctr-asp{margin-top:4px}
.ctr-asp b{display:inline-block;margin-right:8px;padding:0 7px;border-radius:999px;font:500 11px/1.7 var(--font-body);background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--couple-accent-ink)}
.ctr-row.fold{cursor:pointer}
.ctr-row.fold p{display:-webkit-box;-webkit-line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.ctr-row.fold p.ctr-asp{display:none}
.ctr-row.fold.open p{display:block}
.ctr-sum{padding:16px}
.ctr-sum>p{margin:10px 0 0;font-size:13px;line-height:1.75;color:var(--ink2)}
.ctr-stats{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:12px}
.ctr-stats div{padding:10px 4px;border-radius:14px;text-align:center;background:color-mix(in srgb,var(--couple-accent) 16%,var(--ls-inner))}
.ctr-stats small{display:block;font-size:11px;color:var(--ink2)}
.ctr-stats b{display:block;margin-top:3px;font:500 15px var(--font-display);color:var(--cj)}
.ctr-dc{width:170px;margin:12px auto}
.ctr-dk{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:6px;margin-bottom:6px}
.ctr-dkw{display:contents}
.ctr-dkw span{font-size:12px;padding:2px 9px;border-radius:999px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink)}
.ctr-dpos{margin:2px 0 0;text-align:center;font-size:12px;color:var(--ink2)}
.ctr-dh{margin:16px 0 6px;font:500 14px var(--font-display);color:var(--ink)}
.ctr-dp{margin:0 0 6px;font-size:13px;line-height:1.75;color:var(--ink2)}
.ctr-suitn{font-size:12px}
.ctr-stat{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));align-items:center;padding:16px 8px}
.ctr-stat>div{display:flex;flex-direction:column;align-items:center;gap:4px;padding:0 6px;border-left:1px solid color-mix(in srgb,var(--couple-accent) 30%,transparent)}
.ctr-stat>div:first-child{border-left:0}
.ctr-stat b{font:500 20px/1.1 var(--font-display);color:var(--cj)}
.ctr-stat small{font-size:11.5px;color:var(--ink2);white-space:nowrap}
.ctr-spf{display:flex;gap:8px;overflow-x:auto;scrollbar-width:none;margin:-4px -16px -6px;padding:4px 16px 8px}
.ctr-spf::-webkit-scrollbar{display:none}
.ctr-spf button{flex:none;padding:5px 12px;border:0;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 14%,transparent);font:12.5px var(--font-body);color:var(--ink2);cursor:pointer}
.ctr-spf button[aria-checked="true"]{background:color-mix(in srgb,var(--couple-accent) 40%,transparent);color:var(--couple-accent-ink);font-weight:600}
.ctr-lib{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px 10px}
.ctr-lib button{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0;padding:0;border:0;background:none;cursor:pointer;font:inherit}
.ctr-lib button .ctr-c{transition:transform .2s}.ctr-lib button:active .ctr-c{transform:scale(.96)}
.ctr-lib b{max-width:100%;margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font:500 12px var(--font-display);color:var(--ink)}
.ctr-lib small{font-size:10.5px;color:var(--ink2)}
.ctr-lib button.no b{font-weight:400;color:var(--ink2)}
.ctr-c.dim .ctr-b{filter:grayscale(.6) brightness(1.05)}
/* ── 测试 · 塔罗 记录: 今日牌面, the record rows, the records page, one record (后续), the long picture ── */
.ctr-today{display:grid;grid-template-columns:72px 1fr;gap:14px;align-items:center;width:100%;padding:14px 16px;border:0;text-align:left;font:inherit;color:inherit;cursor:pointer}
.ctr-today small{font-size:11.5px;color:var(--ink2)}
.ctr-today b{display:block;margin:2px 0 4px;font:500 17px var(--font-display);color:var(--ink)}
.ctr-today p{margin:0;font-size:12.5px;line-height:1.6;color:var(--ink2)}
.ctr-rh{display:flex;align-items:center;justify-content:space-between;margin-top:10px}
.ctr-rh .ctr-h{margin:0 2px}
.ctr-rh .couple-link-btn{font-size:12.5px}
.ctr-list{padding:4px 14px}
.ctr-rrow{display:grid;grid-template-columns:38px minmax(0,1fr) 44px;gap:12px;align-items:center;width:100%;padding:11px 0;border:0;border-top:1px solid color-mix(in srgb,var(--couple-accent) 20%,transparent);background:none;text-align:left;font:inherit;color:inherit;cursor:pointer}
.ctr-list .ctr-rrow:first-child{border-top:0}
.ctr-dd{display:flex;flex-direction:column;align-items:center;justify-content:center;height:42px;border-radius:12px;background:color-mix(in srgb,var(--couple-accent) 18%,var(--ls-inner))}
.ctr-dd b{font:500 16px/1 var(--font-display);color:var(--cj)}
.ctr-dd small{margin-top:3px;font-size:10px;color:var(--ink2)}
.ctr-rmain{min-width:0}
.ctr-rmain>b{display:block;font:500 14px var(--font-display);color:var(--ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ctr-rmain>small{display:block;margin-top:3px;font-size:11.5px;color:var(--ink2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.ctr-chip{font-style:normal;margin-right:6px;padding:0 7px;border-radius:999px;font-size:10.5px;background:color-mix(in srgb,var(--couple-accent) 22%,var(--ls-inner));color:var(--couple-accent-ink)}
.ctr-chip.g{background:color-mix(in srgb,var(--cg) 14%,var(--ls-inner));color:var(--cg)}
.ctr-stack{position:relative;width:44px;height:44px}
.ctr-stack>span{position:absolute;top:0;left:calc(var(--k)*8px);width:26px;transform:rotate(calc((var(--k) - 1)*6deg))}
.ctr-stack .ctr-c,.ctr-rs-c .ctr-c{border-radius:3px}
.ctr-rstat{grid-template-columns:1fr 1fr 1.9fr}
.ctr-rstat .top{flex-direction:row;gap:10px;justify-content:center}
.ctr-rstat .top>span:last-child{display:flex;flex-direction:column;gap:4px;min-width:0}
.ctr-rstat .top b{font-size:16px}
.ctr-rs-c{width:26px;flex:none}
.ctr-who3.ctt-tabs.couple-seg{grid-template-columns:repeat(3,minmax(0,1fr))}
.ctr-who3.ctt-tabs.couple-seg:has(>:nth-child(4)){grid-template-columns:repeat(4,minmax(0,1fr))}
.ctr-mh{display:flex;align-items:baseline;justify-content:space-between;margin:4px 4px -6px}
.ctr-mh b{font:500 14px var(--font-display);color:var(--ink)}
.ctr-mh span{font-size:12px;color:var(--ink2)}
.ctr-moreb{align-self:center;font-size:13px}
.ctr-fu{padding:16px}
.ctr-fu textarea{display:block;width:100%;box-sizing:border-box;min-height:72px;margin-top:10px;padding:12px 14px;border:0;border-radius:14px;resize:none;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);font:16px/1.6 var(--font-body);color:var(--ink);outline:none}
.ctr-acc{display:flex;align-items:center;gap:8px;margin-top:12px;font-size:13px;color:var(--ink2)}
.ctr-acc span{margin-right:auto}
.ctr-acc button{padding:5px 14px;border:0;border-radius:999px;background:color-mix(in srgb,var(--couple-accent) 14%,transparent);font:13px var(--font-body);color:var(--ink2);cursor:pointer}
.ctr-acc button[aria-pressed="true"]{background:color-mix(in srgb,var(--couple-accent) 40%,transparent);color:var(--couple-accent-ink);font-weight:600}
.ctr-del{font-size:13px;color:var(--ink2)}
.ctr-poster{max-height:56vh;overflow:auto;scrollbar-width:none;margin:6px 0 14px;border-radius:14px;box-shadow:var(--ls-inner-shadow)}
.ctr-poster img{display:block;width:100%;height:auto}
.ctr-pbtns{display:flex;flex-direction:column;gap:10px}
.ctr-pbtns a.couple-cta{display:grid;place-items:center;text-decoration:none}
.ctr-pbtns .ghost{background:var(--ls-inner);color:var(--couple-accent-ink);box-shadow:var(--ls-inner-shadow)}
.ctr-poster::-webkit-scrollbar{display:none}

/* ── 情侣空间测试 · 聊天里的卡片（js/apps/couple-chat-cards.js，结果卡片方案 1）：整张卡片用这个空间的颜色；本人 --cj，角色 --cg。
   .ccd 带上测试页面的颜色变量（卡片在 .couple-shell 外面），--crc-base / --crc-glass 是卡片的底色与小图的底。 ── */
.ccd{--crc-base:#fff;--crc-glass:rgba(255,255,255,.72)}
@media(prefers-color-scheme:dark){:root:not([data-theme="light"]) .ccd{--crc-base:#2B323A;--crc-glass:rgba(255,255,255,.1)}}
:root[data-theme="dark"] .ccd{--crc-base:#2B323A;--crc-glass:rgba(255,255,255,.1)}
.crc{--crc-c:var(--couple-accent);--crc-k:var(--cj);display:block;width:250px;max-width:100%;padding:0;border:1px solid color-mix(in srgb,var(--crc-c) 55%,var(--crc-base));border-radius:20px;background:linear-gradient(150deg,color-mix(in srgb,var(--crc-c) 48%,var(--crc-base)) 0%,color-mix(in srgb,var(--crc-c) 22%,var(--crc-base)) 100%);box-shadow:0 1px 2px rgba(40,55,80,.06),0 8px 16px -10px color-mix(in srgb,var(--crc-k) 45%,transparent);overflow:hidden;text-align:left;font-family:var(--font-body);color:var(--ink);cursor:pointer}
.crc.ta{--crc-c:color-mix(in srgb,var(--cg) 55%,#fff);--crc-k:var(--cg)}
.crc.req{cursor:default}
button.crc:active{transform:scale(.98)}
.crc-top{display:flex;gap:12px;align-items:center;padding:14px 14px 12px}
.crc-rd{flex:none;width:76px;height:76px;border-radius:16px;background:var(--crc-glass);display:grid;place-items:center}
.crc-radar{width:66px;height:66px;color:var(--crc-k)}
.crc-radar .g{fill:none;stroke:currentColor;stroke-opacity:.3}
.crc-radar .v{fill:currentColor;fill-opacity:.38;stroke:currentColor;stroke-width:1.8;stroke-linejoin:round}
.crc-radar circle{fill:currentColor}
.crc-rd .cas-mw{width:60px;height:60px;color:var(--ink)}
.crc.ta .cas-mw{--cj:var(--cg);--couple-accent:color-mix(in srgb,var(--cg) 45%,#fff)}
.crc-rd .ctr-mini{transform:scale(1.15)}
.crc-main{min-width:0;display:block}
.crc-main small{display:block;font-size:10.5px;letter-spacing:.2em;color:color-mix(in srgb,var(--crc-k) 70%,var(--ink))}
.crc-main b{display:block;margin-top:3px;font:600 17px var(--font-display);letter-spacing:.04em;color:var(--ink);overflow-wrap:anywhere}
.crc-tags{display:flex;flex-wrap:wrap;gap:4px;margin-top:8px}
.crc-tags span{font-size:11px;font-weight:600;padding:2px 8px;border-radius:999px;background:var(--crc-glass);color:color-mix(in srgb,var(--crc-k) 80%,var(--ink))}
.crc-q{display:block;margin-top:4px;font-size:12px;line-height:1.5;color:var(--ink2);overflow-wrap:anywhere}
.crc-say{display:block;margin:0 14px 12px;padding:10px 12px;border-radius:14px;background:var(--crc-glass);font-size:13px;line-height:1.65;color:var(--ink);white-space:pre-line;overflow-wrap:anywhere}
.crc-ft{display:flex;justify-content:space-between;align-items:center;gap:8px;padding:9px 14px;border-top:1px solid color-mix(in srgb,var(--crc-k) 22%,transparent);font-size:11.5px;color:color-mix(in srgb,var(--crc-k) 55%,var(--ink))}
.crc-ft>span:first-child{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.crc-go{flex:none;font-weight:600;color:color-mix(in srgb,var(--crc-k) 80%,var(--ink))}
.ccd-tr{display:flex;align-items:flex-end;justify-content:center;gap:3px}
.ccd-tc{display:block;width:22px}
.ccd-tr.n1 .ccd-tc{width:40px}
/* 4–5 cards fan out (overlap) so the row stays inside the 76px .crc-rd: 4×22−3×5=73, 5×22−4×9=74 */
.ccd-tr.n4,.ccd-tr.n5{gap:0}
.ccd-tr.n4 .ccd-tc+.ccd-tc{margin-left:-5px}
.ccd-tr.n5 .ccd-tc+.ccd-tc{margin-left:-9px}
.ccd-tc .ctr-c{border-radius:3px}
.ccd-tr.n1 .ccd-tc .ctr-c{border-radius:5px}
.ccd-preview{display:flex;justify-content:center;margin:4px 0 6px}
.ccd-preview .crc{cursor:default}
.ccd-preview button.crc:active{transform:none}
.ccd-send{padding:16px}
.ccd-send p{margin:0 0 14px;font-size:13px;line-height:1.6;color:var(--ink2)}
.ccd-send .couple-cta{width:100%}
.ccd-sent{display:flex;align-items:center;gap:12px}
.ccd-sent .couple-mini-av{width:34px;height:34px;flex:none}
.ccd-sent>span:nth-child(2){flex:1;min-width:0}
.ccd-sent b{display:block;font:500 15px var(--font-display)}
.ccd-sent small{font-size:12px;color:var(--ink2)}
/* 塔罗记录 · TA 的解读 (TA 代抽 / 为你抽牌) 与 整体解读 (couple-tests tarot_reading) */
.ctr-said,.ctr-ai{padding:16px}
.ctr-said p{margin:8px 0 0;font-size:14px;line-height:1.75;color:var(--ink);white-space:pre-line;overflow-wrap:anywhere}
.ctr-ai .couple-cta{width:100%;margin-top:12px}
.ctr-ai-txt p{margin:8px 0 0;font-size:14px;line-height:1.8;color:var(--ink);overflow-wrap:anywhere}
.ctr-ai-by{margin:10px 0 0;font-size:11.5px;color:var(--ink2)}
.ctr-ai-load{display:flex;align-items:center;gap:5px;margin:12px 0 2px;font-size:13px;color:var(--ink2)}
.ctr-ai-load b{margin-left:6px;font-weight:400}
.ctr-ai-load span{width:6px;height:6px;border-radius:50%;background:var(--cj)}
@media (prefers-reduced-motion:no-preference){.ctr-ai-load span{animation:ctrAiDot 1s ease-in-out infinite}.ctr-ai-load span:nth-child(2){animation-delay:.15s}.ctr-ai-load span:nth-child(3){animation-delay:.3s}}
@keyframes ctrAiDot{0%,100%{transform:translateY(0)}50%{transform:translateY(-4px)}}
/* 发朋友圈 (js/apps/couple-chat-cards.js): the row under 发送给 TA, and in its dialog who can see the post and the caption */
.ccd-share{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:10px}
.ccd-share button{display:flex;align-items:center;justify-content:center;gap:7px;height:46px;border:0;border-radius:16px;background:var(--ls-inner);box-shadow:var(--ls-inner-shadow);color:var(--ink);font:500 14px var(--font-display);cursor:pointer}
.ccd-share svg{width:17px;height:17px;color:var(--tint-deep);stroke-width:1.7}
.ccd-vis.ctt-tabs.couple-seg{margin-top:14px;grid-template-columns:1fr 1fr}
.ccd-cap-h{margin:16px 2px 8px}
.ccd-cap-h small{margin-left:4px;font-weight:400;color:var(--ink2)}
.couple-modal .ccd-preview+.ccd-vis{margin-top:14px}
.couple-modal #ccd-cap{display:block;width:100%;box-sizing:border-box;min-height:64px;border:0;outline:none;resize:none;background:transparent;font:16px/1.6 var(--font-display);color:var(--ink)}
.moment-main .crc{margin-top:8px}
.ccd-cap-h+.couple-m-field{margin-top:0}
