/* Rhythme dream room — pastel lavender/blush, soft clay diorama, phone-framed. */
:root{
  --rm-bg-1:#2b1f44; --rm-bg-2:#4a3666;
  --rm-paper:#f8f3fb; --rm-paper-2:#f1e9f7; --rm-card:#ffffff;
  --rm-ink:#3b2d52; --rm-ink-2:#6f5f8c; --rm-ink-3:#9a8cb3;
  --rm-mauve:#7a5c96; --rm-lilac:#c9b6e6; --rm-lilac-2:#e7dcf5; --rm-blush:#f6c9d6; --rm-blush-2:#fbe3ea; --rm-cream:#fff6ec;
  --rm-plum:#5a4274; --rm-gold:#f3d49b; --rm-mint:#bfe3d4; --rm-ok:#6ba88a; --rm-warn:#d4a85a; --rm-high:#d4707a;
  --rm-shadow:0 10px 30px rgba(90,66,116,.18);
  --rm-r:22px; --rm-r-sm:14px;
  --serif:'Newsreader',Georgia,serif; --sans:'Manrope',system-ui,sans-serif;
}
*{margin:0;padding:0;box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,body{width:100%;height:100%}
body{font-family:var(--sans);color:var(--rm-ink);background:radial-gradient(120% 90% at 50% 0%,var(--rm-bg-2) 0%,var(--rm-bg-1) 65%);display:flex;align-items:center;justify-content:center;overflow:hidden}
button{font-family:inherit;color:inherit}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* Phone frame: full screen on phones, framed on desktop */
.frame{position:relative;width:100%;min-width:0;height:100%;max-width:430px;max-height:100dvh;overflow:hidden;overflow:clip;background:var(--rm-paper);display:flex;flex-direction:column} /* clip, not hidden: a hidden overflow can still be scrolled by focus() or scrollIntoView, which shoved the room 162 px sideways when icon ligatures rendered as words before the font loaded */
.status{display:none;height:44px;flex-shrink:0;justify-content:space-between;align-items:center;padding:0 26px;font:700 14px var(--sans);color:var(--rm-ink);background:linear-gradient(#efe6f7,#f8f3fb)}
/* no phone mock-up on wide screens: the app fills the window like it does on a phone */
@media(min-width:520px){
  .frame{width:min(100%,520px);height:100dvh;max-height:none;border-radius:0;box-shadow:0 0 60px rgba(40,24,70,.25)}
}
.status .ms{font-size:16px}
.ms{font-family:'Material Symbols Outlined'!important;font-weight:400;font-style:normal;font-size:22px;line-height:1;letter-spacing:normal;text-transform:none;display:inline-block;white-space:nowrap;direction:ltr;-webkit-font-smoothing:antialiased;font-variation-settings:'FILL' 0,'wght' 400,'GRAD' 0,'opsz' 24}
.ms.fill{font-variation-settings:'FILL' 1,'wght' 400,'GRAD' 0,'opsz' 24}

/* Top bar */
.topbar{position:absolute;left:0;right:0;top:0;z-index:12;display:flex;justify-content:space-between;align-items:center;padding:10px 14px 0;pointer-events:none}

.topbar>*{pointer-events:auto}
.brand{font-family:var(--serif);font-weight:600;font-size:17px;letter-spacing:.18em;color:var(--rm-plum);text-decoration:none;text-shadow:0 1px 0 rgba(255,255,255,.7)}
.top-actions{display:flex;gap:8px}
.icon-btn{width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.78);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.9);box-shadow:0 4px 14px rgba(90,66,116,.14);color:var(--rm-plum);display:flex;align-items:center;justify-content:center;cursor:pointer;transition:transform .15s,background .15s;text-decoration:none}
.icon-btn:active{transform:scale(.92)}
.icon-btn .ms{font-size:20px}
.icon-btn .dot{position:absolute;top:6px;right:6px;width:8px;height:8px;border-radius:50%;background:var(--rm-high);border:2px solid #fff;display:none}
.icon-btn.has-flag .dot{display:block}
.icon-btn{position:relative}

/* Main scroll column */
.main{flex:1;min-height:0;overflow-y:auto;overflow-x:hidden;overflow-x:clip;-webkit-overflow-scrolling:touch;scrollbar-width:none} /* clip: nothing, not even a scrollIntoView, can shove the room sideways */
.main::-webkit-scrollbar{display:none}

/* Scene */
.scene{position:relative;width:100%;aspect-ratio:1472/1840;overflow:hidden;background:linear-gradient(180deg,#d8c8ec 0%,#cdb9e6 50%,#d9c9ea 100%);transform-style:preserve-3d;perspective:900px}
.scene-inner{position:absolute;inset:0;transition:transform .5s ease-out;will-change:transform}
/* a wide plate (L.span box widths, docs/design/2026-10-19-wide-street.md): the plate and the full-cover layers run the whole
 * width past the box-sized inner; the box itself never scrolls (clip), only the camera moves the view */
.scene{overflow:clip}
.scene-inner>:is(.room-img,.night-veil,.stars,.sparkles){width:calc(var(--span,1)*100%);right:auto}
.room-img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;user-select:none;-webkit-user-drag:none;transition:opacity 1.6s ease,filter 1.6s ease}
/* a foreground cutout (ovu-walk.js renderOcc, L.occluders): a piece of the plate drawn again exactly over itself in #plateOcc,
 * an unstacked layer beside #ownedProps, so it is depth-sorted with her and the pets. It never takes a tap, so the floor
 * and the pins under it work as before. Its image takes the plate's filters and transition (the lists below and the
 * sky section's .room-img.day rule), and its .occ-veil is the night veil masked to its own shape: the veil paints
 * under anything with a z, so without its own copy a cutout would stay bright at night */
.plate-occ{position:absolute;pointer-events:none;z-index:7}
.occ-img{position:absolute;inset:0;width:100%;height:100%;display:block;max-width:none;user-select:none;-webkit-user-drag:none}
.occ-veil{-webkit-mask-size:100% 100%;mask-size:100% 100%;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat}
/* the window patches and the street's foreground cutouts are part of the plate: whatever dims or tints the plate dims or tints them too */
.scene.is-night :is(.room-img.day,.win-patch,.occ-img,.swap-patch){filter:brightness(.52) saturate(.85) contrast(1.05) hue-rotate(-8deg)}
.scene.sky-night:not(.is-night) :is(.room-img.day,.win-patch,.occ-img,.swap-patch){filter:brightness(.9) saturate(1.02) hue-rotate(-3deg)}
:is(.night-veil,.occ-veil){position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity 1.6s ease;
  background:radial-gradient(28% 22% at 13% 50%,rgba(255,214,160,.45),transparent 70%),radial-gradient(18% 16% at 44% 29%,rgba(214,200,255,.55),transparent 70%),linear-gradient(180deg,rgba(40,24,80,.35),rgba(30,18,60,.45))}
.scene.is-night :is(.night-veil,.occ-veil){opacity:1}
.scene.sky-night:not(.is-night) :is(.night-veil,.occ-veil){opacity:.28}
.stars{position:absolute;inset:0;pointer-events:none;opacity:0;transition:opacity 1.2s}
.scene:is(.is-night,.sky-night) .stars{opacity:1}
.star{position:absolute;width:4px;height:4px;border-radius:50%;background:#fff;box-shadow:0 0 8px 2px rgba(255,255,255,.7);animation:twinkle 2.6s ease-in-out infinite}
@keyframes twinkle{0%,100%{opacity:.2;transform:scale(.7)}50%{opacity:1;transform:scale(1.2)}}
.sparkles{position:absolute;inset:0;pointer-events:none}
/* Petal & Thread's crystal chandelier (ovu-lanescene.js BOUTIQUE.chandelier, Jamie 30 Oct: "sparkling... grand... glowy"): a warm
 * halo that breathes and crystals that twinkle, above the night veil, so at night it is the brightest light in the shop */
.chandglow{position:absolute;display:none;pointer-events:none;opacity:.8;transition:opacity 1.2s}
.chandglow.on{display:block}
.scene.sky-night .chandglow{opacity:.95}.scene.is-night .chandglow{opacity:1}
.chandglow .halo{position:absolute;left:-28%;top:-30%;width:156%;height:160%;border-radius:50%;mix-blend-mode:screen;
  background:radial-gradient(closest-side,rgba(255,236,190,.8),rgba(255,218,170,.46) 40%,rgba(255,196,222,.2) 70%,rgba(255,196,222,0));
  animation:chandBreathe 4.6s ease-in-out infinite}
.chandglow .halo.inner{left:12%;top:10%;width:76%;height:76%;background:radial-gradient(closest-side,rgba(255,252,236,.92),rgba(255,236,192,.5) 50%,rgba(255,236,192,0));animation-duration:3.1s;animation-delay:-1.2s}
.scene:is(.is-night,.sky-night) .chandglow .halo:not(.inner){left:-60%;top:-55%;width:220%;height:215%}
.chandglow .glint{position:absolute;width:calc(15% * var(--gs,1));aspect-ratio:1;transform:translate(-50%,-50%) scale(0);mix-blend-mode:screen;
  background:radial-gradient(circle,#fff 0 9%,rgba(255,255,255,0) 22%),linear-gradient(0deg,rgba(255,255,255,0) 44%,#fff 50%,rgba(255,255,255,0) 56%),linear-gradient(90deg,rgba(255,255,255,0) 44%,#fff 50%,rgba(255,255,255,0) 56%);
  -webkit-mask:radial-gradient(circle,#000 35%,transparent 72%);mask:radial-gradient(circle,#000 35%,transparent 72%);
  filter:drop-shadow(0 0 4px rgba(255,240,205,1));animation:chandGlint 3.6s ease-in-out infinite}
@keyframes chandBreathe{0%,100%{opacity:.78;transform:scale(1)}50%{opacity:1;transform:scale(1.05)}}
@keyframes chandGlint{0%,62%,100%{transform:translate(-50%,-50%) scale(0) rotate(0deg);opacity:0}72%{transform:translate(-50%,-50%) scale(1) rotate(20deg);opacity:1}84%{transform:translate(-50%,-50%) scale(.35) rotate(40deg);opacity:.6}}
@media (prefers-reduced-motion:reduce){.chandglow .halo{animation:none}.chandglow .glint{animation:none;transform:translate(-50%,-50%) scale(.55);opacity:.85}}
.sparkle{position:absolute;width:10px;height:10px;opacity:0;animation:sparkle 4s ease-in-out infinite}
.sparkle::before,.sparkle::after{content:'';position:absolute;left:50%;top:50%;background:radial-gradient(circle,#fff 0%,rgba(255,255,255,.9) 40%,rgba(255,255,255,0) 70%);width:10px;height:3px;transform:translate(-50%,-50%);border-radius:50%}
.sparkle::after{width:3px;height:10px}
@keyframes sparkle{0%,100%{opacity:0;transform:scale(.4) rotate(0)}50%{opacity:.95;transform:scale(1.1) rotate(45deg)}}
.greeting{position:absolute;left:14px;top:50px;z-index:5;pointer-events:none}
@media(min-width:520px){.greeting{top:50px}}
.greeting h1{font-family:var(--serif);font-weight:600;font-size:22px;line-height:1.15;color:var(--rm-plum);text-shadow:0 1px 0 rgba(255,255,255,.6)}
.greeting p{font:600 12px var(--sans);color:var(--rm-ink-2);margin-top:3px;text-shadow:0 1px 0 rgba(255,255,255,.6)}
.scene.is-night .brand{color:#f3ecfb;text-shadow:0 1px 10px rgba(20,10,40,.6)}
.scene.is-night .greeting h1,.scene.is-night .greeting p{color:#f3ecfb;text-shadow:0 1px 8px rgba(20,10,40,.5)}
.chip{display:inline-flex;align-items:center;gap:5px;padding:5px 10px;border-radius:99px;background:rgba(255,255,255,.82);backdrop-filter:blur(8px);font:700 11px var(--sans);color:var(--rm-mauve);box-shadow:0 3px 10px rgba(90,66,116,.12)}
.chip .ms{font-size:14px}

/* Hotspots */
.hotspot{position:absolute;transform:translate(-50%,-50%);background:transparent;border:none;cursor:pointer;z-index:10;min-width:44px;min-height:44px;border-radius:18px;display:flex;align-items:center;justify-content:center;transition:transform .2s}
.hotspot:focus-visible{outline:3px solid #fff;outline-offset:-2px;box-shadow:0 0 0 5px var(--rm-mauve)}
.hotspot .pulse{width:16px;height:16px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#fff,var(--rm-lilac));box-shadow:0 0 0 0 rgba(255,255,255,.75),0 2px 8px rgba(90,66,116,.35);animation:pulse 2.2s ease-out infinite;transition:opacity .3s}
.hotspot:nth-child(2n) .pulse{animation-delay:.7s}
.hotspot:nth-child(3n) .pulse{animation-delay:1.3s}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(255,255,255,.8),0 2px 8px rgba(90,66,116,.35)}70%{box-shadow:0 0 0 14px rgba(255,255,255,0),0 2px 8px rgba(90,66,116,.35)}100%{box-shadow:0 0 0 0 rgba(255,255,255,0),0 2px 8px rgba(90,66,116,.35)}}
.hotspot .tip{position:absolute;bottom:calc(100% - 4px);left:50%;transform:translate(-50%,6px);background:#fff;color:var(--rm-plum);font:700 11px var(--sans);padding:6px 10px;border-radius:12px;white-space:nowrap;box-shadow:0 6px 18px rgba(90,66,116,.2);opacity:0;pointer-events:none;transition:opacity .2s,transform .2s}
.hotspot .tip::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid transparent;border-top-color:#fff}
.hotspot:hover .tip,.hotspot:focus-visible .tip,.hotspot.show-tip .tip{opacity:1;transform:translate(-50%,0)}
.hotspot.bump{animation:bump .45s ease}
@keyframes bump{0%{transform:translate(-50%,-50%) scale(1)}40%{transform:translate(-50%,-50%) scale(1.25)}100%{transform:translate(-50%,-50%) scale(1)}}
.scene.quiet .hotspot .pulse,.scene:is(.is-night,.sky-night) .hotspot .pulse{opacity:.35}
.hotspot .glow{position:absolute;inset:-6px;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.55),rgba(255,255,255,0) 70%);opacity:0;transition:opacity .25s}
.hotspot:hover .glow{opacity:1}

/* Avatar */
.avatar{position:absolute;left:50.1%;top:79%;width:11.1%;transform:translate(-50%,-100%);z-index:9;cursor:pointer;transition:left .9s cubic-bezier(.45,.05,.3,1),top .9s cubic-bezier(.45,.05,.3,1),opacity .6s;background:none;border:none;padding:0;filter:drop-shadow(0 1px 2px rgba(70,40,100,.2))}
.avatar img{width:100%;height:auto;display:block;transform-origin:50% 100%;transition:transform .25s}
.avatar.flip img{transform:scaleX(-1)}
.avatar.walking img{animation:hop .36s ease-in-out infinite}
.avatar.flip.walking img{animation:hopflip .36s ease-in-out infinite}
@keyframes hop{0%,100%{transform:translateY(0) scale(1,1)}50%{transform:translateY(-7%) scale(.96,1.04)}}
@keyframes hopflip{0%,100%{transform:translateY(0) scale(-1,1)}50%{transform:translateY(-7%) scale(-.96,1.04)}}
.avatar.idle img{animation:breathe 3.2s ease-in-out infinite}
.avatar.flip.idle img{animation:breatheflip 3.2s ease-in-out infinite}
@keyframes breathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.015,.985)}}
@keyframes breatheflip{0%,100%{transform:scale(-1,1)}50%{transform:scale(-1.015,.985)}}
.avatar.landing img{animation:land .4s ease-out}
@keyframes land{0%{transform:scale(1.08,.9)}60%{transform:scale(.97,1.04)}100%{transform:scale(1,1)}}
.avatar.hidden{opacity:0;pointer-events:none}
.avatar .poof{position:absolute;inset:-10%;pointer-events:none;opacity:0}
.avatar.poofing .poof{animation:poof .7s ease-out}
.avatar .poof i{position:absolute;left:50%;top:55%;width:8px;height:8px;border-radius:50%;background:#fff;box-shadow:0 0 10px 3px rgba(255,255,255,.8)}
@keyframes poof{0%{opacity:0;transform:scale(.6)}30%{opacity:1}100%{opacity:0;transform:scale(1.5)}}
.sleeper{position:absolute;left:43%;top:56%;width:21.4%;transform:translate(-50%,-50%) rotate(34deg);z-index:9;opacity:0;pointer-events:none;transition:opacity .8s;filter:drop-shadow(0 6px 8px rgba(70,40,100,.3))}
.sleeper img{width:100%;display:block;animation:sleepbreathe 4s ease-in-out infinite}
@keyframes sleepbreathe{0%,100%{transform:scale(1)}50%{transform:scale(1.02)}}
.sleeper.on{opacity:1;pointer-events:auto;cursor:pointer}
.zzz{position:absolute;left:55.4%;top:40%;font:700 16px var(--serif);color:#fff;text-shadow:0 1px 6px rgba(60,30,90,.6);z-index:10;pointer-events:none;opacity:0}
.sleeper.on~.zzz{opacity:1}
.zzz span{position:absolute;animation:zz 3s ease-in-out infinite;opacity:0}
.zzz span:nth-child(2){animation-delay:1s;font-size:20px}
.zzz span:nth-child(3){animation-delay:2s;font-size:24px}
@keyframes zz{0%{opacity:0;transform:translate(0,0)}20%{opacity:1}100%{opacity:0;transform:translate(26px,-54px)}}

/* Avatar menu bubble */
.bubble{position:absolute;z-index:40;background:#fff;border-radius:18px;box-shadow:0 12px 34px rgba(60,40,90,.25);padding:8px;display:none;flex-direction:column;gap:4px;min-width:170px;transform:translate(-50%,-100%)}
.bubble.on{display:flex;animation:pop .22s ease-out}
@keyframes pop{0%{opacity:0;transform:translate(-50%,-90%) scale(.9)}100%{opacity:1;transform:translate(-50%,-100%) scale(1)}}
.bubble button{display:flex;align-items:center;gap:10px;background:none;border:none;border-radius:12px;padding:9px 10px;font:700 13px var(--sans);color:var(--rm-ink);cursor:pointer;text-align:left}
.bubble button:hover{background:var(--rm-paper-2)}
.bubble button .ms{font-size:20px;color:var(--rm-mauve)}
.bubble::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:9px solid transparent;border-top-color:#fff}

/* Below the scene */
.deck{padding:14px 14px 90px;display:flex;flex-direction:column;gap:12px;background:var(--rm-paper)}
.card{background:var(--rm-card);border-radius:var(--rm-r);box-shadow:var(--rm-shadow);padding:14px 16px}
.card h2{font-family:var(--serif);font-weight:600;font-size:18px;color:var(--rm-plum)}
.card .sub{font:600 12px var(--sans);color:var(--rm-ink-2);margin-top:2px}
.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px}
.tile{background:var(--rm-paper-2);border-radius:16px;padding:10px 8px;text-align:center;border:none;cursor:pointer;transition:transform .15s}
.tile:active{transform:scale(.95)}
.tile .ms{font-size:24px;color:var(--rm-mauve)}
.tile b{display:block;font:800 14px var(--sans);color:var(--rm-ink);margin-top:2px}
.tile small{display:block;font:600 10px var(--sans);color:var(--rm-ink-3);margin-top:1px}
.row{display:flex;gap:8px;margin-top:10px}
.btn{flex:1;border:none;border-radius:16px;padding:12px 14px;font:800 13px var(--sans);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px;text-decoration:none;transition:transform .15s}
.btn:active{transform:scale(.97)}
.btn.primary{background:linear-gradient(135deg,#7b5db3,#5f4596);color:#fff;box-shadow:0 6px 18px rgba(122,92,150,.35)}
.btn.soft{background:var(--rm-lilac-2);color:var(--rm-plum)}
.btn.blush{background:var(--rm-blush-2);color:#a04a66}
.btn.ghost{background:transparent;color:var(--rm-ink-2);border:1.5px solid rgba(107,82,142,.18)}
.btn .ms{font-size:18px}
.flaglist{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.flag{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:14px;background:var(--rm-paper-2);font:600 12px var(--sans);color:var(--rm-ink)}
.flag .ms{font-size:18px;flex-shrink:0}
.flag.watch .ms{color:var(--rm-warn)}.flag.high .ms{color:var(--rm-high)}.flag.info .ms{color:var(--rm-mauve)}
.flag b{display:block;font-weight:800}
.flag span:not(.ms){color:var(--rm-ink-2);font-weight:600;line-height:1.4}
.note{font:600 11px var(--sans);color:var(--rm-ink-3);line-height:1.45;margin-top:8px}

/* Bottom nav (phone frame) */
.nav{position:absolute;left:0;right:0;bottom:0;z-index:35;display:flex;justify-content:space-around;align-items:center;padding:8px 0 calc(10px + env(safe-area-inset-bottom));background:rgba(255,255,255,.92);backdrop-filter:blur(18px);border-top:1px solid rgba(107,82,142,.08)}
@media(min-width:520px){.nav{padding-bottom:22px}}
.nav a{display:flex;flex-direction:column;align-items:center;gap:2px;text-decoration:none;color:var(--rm-ink-3);font:700 10px var(--sans);padding:4px 10px;border-radius:12px}
.nav a .ms{font-size:22px}
.nav a.on{color:var(--rm-mauve)}
.nav a.on .ms{font-variation-settings:'FILL' 1,'wght' 400,'GRAD' 0,'opsz' 24}

/* Sheets */
.veil{position:absolute;inset:0;z-index:50;background:rgba(40,24,70,.35);backdrop-filter:blur(2px);opacity:0;pointer-events:none;transition:opacity .3s}
.veil.on{opacity:1;pointer-events:auto}
.sheet{position:absolute;left:0;right:0;bottom:0;z-index:60;background:var(--rm-paper);border-radius:26px 26px 0 0;max-height:82%;display:flex;flex-direction:column;transform:translateY(105%);transition:transform .38s cubic-bezier(.32,.72,0,1);box-shadow:0 -10px 40px rgba(40,24,70,.25)}
.sheet.on{transform:translateY(0)}
.sheet-head{display:flex;align-items:center;gap:10px;padding:10px 16px 8px;flex-shrink:0}
.sheet-handle{width:38px;height:4px;border-radius:2px;background:#d7cbe6;margin:8px auto 0;flex-shrink:0}
.sheet-head .ico{width:40px;height:40px;border-radius:14px;display:flex;align-items:center;justify-content:center;background:var(--rm-lilac-2);color:var(--rm-mauve)}
.sheet-head .ico .ms{font-size:22px}
.sheet-head h2{font-family:var(--serif);font-weight:600;font-size:20px;color:var(--rm-plum);flex:1;line-height:1.1}
.sheet-head h2 small{display:block;font:600 11px var(--sans);color:var(--rm-ink-3);margin-top:2px}
.sheet-close{width:34px;height:34px;border-radius:50%;background:#fff;border:none;color:var(--rm-ink-2);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 2px 8px rgba(90,66,116,.12)}
.sheet-body{overflow-y:auto;padding:4px 16px 24px;flex:1;-webkit-overflow-scrolling:touch;scrollbar-width:thin}
.sheet-body::-webkit-scrollbar{width:4px}.sheet-body::-webkit-scrollbar-thumb{background:#d7cbe6;border-radius:4px}

/* Forms */
.field{margin-top:12px}
.field label,.field .lbl{display:block;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin-bottom:6px}
.input{width:100%;border:1.5px solid rgba(107,82,142,.14);background:#fff;border-radius:14px;padding:11px 12px;font:600 14px var(--sans);color:var(--rm-ink);outline:none}
.input:focus{border-color:var(--rm-lilac);box-shadow:0 0 0 3px rgba(201,182,230,.35)}
textarea.input{min-height:72px;resize:vertical;line-height:1.4}
.grid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.chips{display:flex;flex-wrap:wrap;gap:7px}
.chipbtn{border:1.5px solid rgba(107,82,142,.14);background:#fff;border-radius:99px;padding:8px 12px;font:700 12px var(--sans);color:var(--rm-ink-2);cursor:pointer;display:inline-flex;align-items:center;gap:5px;transition:all .15s}
.chipbtn .ms{font-size:16px}
.chipbtn.on{background:var(--rm-mauve);border-color:var(--rm-mauve);color:#fff}
.chipbtn.on.blush{background:#e08aa6;border-color:#e08aa6}
.chipbtn.flow-spotting.on{background:#f3bfd0;border-color:#f3bfd0;color:#7a2d4a}
.chipbtn.flow-light.on{background:#ef9fba;border-color:#ef9fba;color:#5a1e36}
.chipbtn.flow-medium.on{background:#dd6f94;border-color:#dd6f94}
.chipbtn.flow-heavy.on{background:#b43f68;border-color:#b43f68}
.moons{display:flex;gap:6px}
.moons button{flex:1;border:1.5px solid rgba(107,82,142,.14);background:#fff;border-radius:14px;padding:10px 0;font-size:20px;cursor:pointer;color:#cfc2e2;transition:all .15s}
.moons button.on{color:var(--rm-gold);background:#fff8e6;border-color:#f3d49b}
.range{width:100%;accent-color:var(--rm-mauve)}
.faces{display:flex;gap:6px}
.faces button{flex:1;border:1.5px solid rgba(107,82,142,.14);background:#fff;border-radius:14px;padding:8px 0 6px;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:2px;font:700 10px var(--sans);color:var(--rm-ink-3)}
.faces button .ms{font-size:24px;color:#cfc2e2}
.faces button.on{border-color:var(--rm-lilac);background:var(--rm-lilac-2);color:var(--rm-plum)}
.faces button.on .ms{color:var(--rm-mauve)}
.help{font:600 11.5px var(--sans);color:var(--rm-ink-3);line-height:1.45;margin-top:8px}
.msg{margin-top:10px;padding:10px 12px;border-radius:12px;font:700 12px var(--sans);display:none}
.msg.on{display:block}
.msg.ok{background:#e6f4ec;color:#2f6b4c}.msg.err{background:#fbe3e6;color:#9b2f3c}

/* Calendar */
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-top:6px}
.cal-head b{font-family:var(--serif);font-weight:600;font-size:18px;color:var(--rm-plum)}
.cal-nav{width:34px;height:34px;border-radius:50%;border:none;background:#fff;box-shadow:0 2px 8px rgba(90,66,116,.12);cursor:pointer;color:var(--rm-mauve);display:flex;align-items:center;justify-content:center}
.cal-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:4px;margin-top:8px}
.cal-dow{text-align:center;font:800 10px var(--sans);color:var(--rm-ink-3);padding:4px 0}
.cal-day{height:40px;border-radius:12px;border:1.5px solid transparent;background:#fff;font:700 12px var(--sans);color:var(--rm-ink);cursor:pointer;position:relative;display:flex;align-items:center;justify-content:center;transition:transform .12s}
.cal-day:active{transform:scale(.92)}
.cal-day.empty{background:transparent;cursor:default}
.cal-day.future{color:#cdc2dd;cursor:not-allowed;background:#faf7fd}
.cal-day.today{border-color:var(--rm-mauve)}
.cal-day.sel{box-shadow:0 0 0 3px rgba(122,92,150,.35)}
.cal-day.p-spotting{background:#f9dde7}.cal-day.p-light{background:#f3b9cb}.cal-day.p-medium{background:#e58aa8;color:#fff}.cal-day.p-heavy{background:#c1517a;color:#fff}
.cal-day.predicted{background:repeating-linear-gradient(135deg,#fff 0 4px,#f6e3ea 4px 8px);color:#b05a7a}
.cal-day.fertile{background:#eaf5ee}.cal-day.fertile.past{background:#f4faf6;color:var(--rm-ink-3)}
.cal-day .sdot{position:absolute;bottom:4px;left:50%;transform:translateX(-50%);width:5px;height:5px;border-radius:50%;background:var(--rm-mauve)}
.cal-day.p-medium .sdot,.cal-day.p-heavy .sdot{background:#fff}
.legend{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px;font:700 10px var(--sans);color:var(--rm-ink-3)}
.legend i{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:4px;vertical-align:-1px}
.tabs{display:flex;background:var(--rm-paper-2);border-radius:14px;padding:4px;margin-top:10px}
.tabs button{flex:1;border:none;background:transparent;border-radius:11px;padding:8px;font:800 12px var(--sans);color:var(--rm-ink-2);cursor:pointer}
.tabs button.on{background:#fff;color:var(--rm-plum);box-shadow:0 2px 8px rgba(90,66,116,.12)}
.day-editor{margin-top:12px;background:#fff;border-radius:18px;padding:12px 14px;box-shadow:var(--rm-shadow)}
.day-editor h3{font-family:var(--serif);font-weight:600;font-size:16px;color:var(--rm-plum)}
.stat{display:flex;gap:10px;align-items:center;background:#fff;border-radius:16px;padding:10px 12px;margin-top:10px}
.stat .ms{font-size:24px;color:var(--rm-mauve)}
.stat b{display:block;font:800 14px var(--sans);color:var(--rm-ink)}
.stat span:not(.ms){font:600 11px var(--sans);color:var(--rm-ink-3)}

/* Entries list */
.entries{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.entry{display:flex;gap:10px;align-items:flex-start;background:#fff;border-radius:16px;padding:10px 12px;box-shadow:0 2px 10px rgba(90,66,116,.08)}
.entry .ms{font-size:20px;color:var(--rm-mauve);flex-shrink:0;margin-top:2px}
.entry .body{flex:1;min-width:0}
.entry b{display:block;font:800 13px var(--sans);color:var(--rm-ink)}
.entry span:not(.ms){display:block;font:600 11.5px var(--sans);color:var(--rm-ink-2);line-height:1.4;white-space:pre-wrap;word-break:break-word}
.entry .del{border:none;background:none;color:#c9b9d8;cursor:pointer;padding:4px}
.entry .del:hover{color:var(--rm-high)}
.empty{font:600 12px var(--sans);color:var(--rm-ink-3);padding:14px;text-align:center;background:#fff;border-radius:16px;margin-top:10px}

/* Wardrobe */
.outfits{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:10px}
.outfit{background:#fff;border-radius:18px;padding:8px 6px 10px;border:2px solid transparent;cursor:pointer;text-align:center;transition:transform .15s,border-color .15s}
.outfit:active{transform:scale(.95)}
.outfit.on{border-color:var(--rm-mauve);background:var(--rm-lilac-2)}
.outfit img{height:96px;width:auto;display:block;margin:0 auto}
.outfit b{display:block;font:800 12px var(--sans);color:var(--rm-ink);margin-top:6px}
.outfit small{display:block;font:600 10px var(--sans);color:var(--rm-ink-3)}

/* Learn (computer) */
.screen{background:linear-gradient(160deg,#2d2147,#4a3570);border-radius:20px;padding:14px;color:#f3ecfb;margin-top:6px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.screen h3{font-family:var(--serif);font-weight:500;font-size:16px}
.screen p{font:600 11.5px var(--sans);color:#cfc1e6;margin-top:4px;line-height:1.4}
.topics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}
.topic{display:flex;gap:10px;align-items:center;background:#fff;border-radius:16px;padding:10px;text-decoration:none;color:var(--rm-ink);box-shadow:0 2px 10px rgba(90,66,116,.08);transition:transform .15s}
.topic:active{transform:scale(.97)}
.topic .ic{width:36px;height:36px;border-radius:12px;background:var(--rm-lilac-2);display:flex;align-items:center;justify-content:center;color:var(--rm-mauve);flex-shrink:0}
.topic .ic .ms{font-size:20px}
.topic b{display:block;font:800 12.5px var(--sans)}
.topic small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);margin-top:1px}
.videos{display:flex;gap:10px;overflow-x:auto;margin-top:10px;padding-bottom:6px;scrollbar-width:none}
.videos::-webkit-scrollbar{display:none}
.vid{flex:0 0 150px;background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 2px 10px rgba(90,66,116,.08);cursor:pointer;border:none;text-align:left;padding:0}
.vid img{width:100%;height:84px;object-fit:cover;display:block}
.vid b{display:block;font:800 12px var(--sans);color:var(--rm-ink);padding:8px 10px 2px}
.vid small{display:block;font:600 10px var(--sans);color:var(--rm-ink-3);padding:0 10px 9px}
.player{margin-top:10px;border-radius:16px;overflow:hidden;background:#000;display:none}
.player.on{display:block}
.player video{width:100%;display:block;max-height:240px}

/* Toast */
.toast{position:absolute;left:50%;bottom:92px;transform:translate(-50%,20px);z-index:80;background:#3b2d52;color:#fff;padding:10px 16px;border-radius:99px;font:700 12.5px var(--sans);box-shadow:0 10px 30px rgba(0,0,0,.3);opacity:0;pointer-events:none;transition:opacity .25s,transform .25s;max-width:88%;text-align:center;display:flex;gap:8px;align-items:center}
.toast.on{opacity:1;transform:translate(-50%,0)}
.toast .ms{font-size:18px;color:var(--rm-gold)}

/* Tour hint */
.hint{position:absolute;left:50%;bottom:14px;transform:translateX(-50%);z-index:12;background:rgba(255,255,255,.9);backdrop-filter:blur(8px);border-radius:99px;padding:8px 14px;font:700 12px var(--sans);color:var(--rm-plum);box-shadow:0 6px 18px rgba(90,66,116,.18);display:flex;gap:6px;align-items:center;pointer-events:none;opacity:0;transition:opacity .4s}
.hint.on{opacity:1}
.hint .ms{font-size:16px}

/* Loading */
.loading{position:absolute;inset:0;z-index:300;background:linear-gradient(160deg,#2a1f3d,#4a3560);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;transition:opacity .6s}
.loading.hidden{opacity:0;pointer-events:none}
/* fail-safe: if timers are throttled (background tab, emulation), the veil still lifts */
.loading{animation:veil-lift .6s ease 2.4s forwards}
@keyframes veil-lift{to{opacity:0;visibility:hidden;pointer-events:none}}
.loading-orb{width:54px;height:54px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#f3e6ff,#c2a7e6,#7a5c96);box-shadow:0 0 50px rgba(194,167,230,.55);animation:orb 2s ease-in-out infinite}
@keyframes orb{0%,100%{transform:scale(.9);opacity:.8}50%{transform:scale(1.1);opacity:1}}
.loading p{font-family:var(--serif);font-size:16px;color:rgba(245,237,250,.8)}

@media(prefers-reduced-motion:reduce){
  .avatar,.sheet,.room-img,.night-veil,.occ-veil{transition:none}
  .sparkle,.star,.hotspot .pulse,.avatar img,.sleeper img,.loading-orb{animation:none!important}
  .avatar.walking img{animation:none}
}

/* ---------- props and meditation ---------- */
.prop.mat{position:absolute;left:34.5%;top:75.5%;width:21.4%;transform:translate(-50%,-50%);z-index:6;pointer-events:none;filter:drop-shadow(0 4px 6px rgba(70,40,100,.18))}
.meditator{position:absolute;left:34.5%;top:73%;width:11.6%;transform:translate(-50%,-62%);z-index:9;opacity:0;pointer-events:none;transition:opacity .8s;filter:drop-shadow(0 8px 8px rgba(70,40,100,.28))}
.meditator img{width:100%;display:block;animation:meditbreathe 6s ease-in-out infinite;transform-origin:50% 100%}
@keyframes meditbreathe{0%,100%{transform:scale(1)}50%{transform:scale(1.025,1.035)}}
.meditator.on{opacity:1;pointer-events:auto;cursor:pointer}
.aura{position:absolute;left:34.5%;top:70.5%;width:17.8%;aspect-ratio:1;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.55),rgba(201,182,230,.25) 45%,rgba(201,182,230,0) 70%);z-index:7;opacity:0;pointer-events:none;transition:opacity 1s}
.aura.on{opacity:1;animation:auraPulse 8s ease-in-out infinite}
@keyframes auraPulse{0%,100%{transform:translate(-50%,-50%) scale(.85)}50%{transform:translate(-50%,-50%) scale(1.15)}}

/* ---------- info (i) buttons and evidence guides ---------- */
.lbl-row{display:flex;align-items:center;gap:6px}
.lbl-row .lbl{margin-bottom:0}
.ibtn{width:16px;height:16px;border-radius:50%;border:1px solid rgba(107,82,142,.28);background:rgba(255,255,255,.9);color:var(--rm-mauve);font:700 9.5px var(--serif);opacity:.85;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;transition:all .15s}
.ibtn:hover,.ibtn.on{background:var(--rm-mauve);color:#fff;border-color:var(--rm-mauve)}
.guide{display:none;margin-top:10px;background:#fff;border-radius:18px;padding:12px 14px;box-shadow:var(--rm-shadow);border:1.5px solid rgba(201,182,230,.5)}
.guide.on{display:block;animation:pop2 .2s ease-out}
@keyframes pop2{from{opacity:0;transform:translateY(-4px)}to{opacity:1;transform:none}}
.guide h4{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--rm-plum);display:flex;align-items:center;gap:6px}
.guide h4 .ms{font-size:18px;color:var(--rm-mauve)}
.guide p{font:600 12px var(--sans);color:var(--rm-ink-2);line-height:1.5;margin-top:6px}
.guide .flows{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin-top:10px}
.guide .flow{text-align:center;background:var(--rm-paper-2);border-radius:14px;padding:8px 4px}
.guide .flow svg{width:100%;height:auto;display:block}
.guide .flow b{display:block;font:800 11px var(--sans);color:var(--rm-ink);margin-top:4px}
.guide .flow small{display:block;font:600 9.5px var(--sans);color:var(--rm-ink-3);line-height:1.35;margin-top:2px}
.guide .ev{margin-top:10px;border-top:1px dashed rgba(107,82,142,.18);padding-top:8px}
.guide .ev b{display:block;font:800 10px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin-bottom:4px}
.guide .ev a{display:block;font:600 11.5px var(--sans);color:var(--rm-mauve);text-decoration:none;line-height:1.45;margin-top:3px}
.guide .ev a:hover{text-decoration:underline}
.guide .ev span{display:block;font:600 11.5px var(--sans);color:var(--rm-ink-2);line-height:1.45;margin-top:3px}
.scale{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px;margin-top:10px}
.scale div{background:var(--rm-paper-2);border-radius:12px;padding:8px 6px;text-align:center}
.scale b{display:block;font:800 13px var(--sans);color:var(--rm-plum)}
.scale small{display:block;font:600 9.5px var(--sans);color:var(--rm-ink-3);line-height:1.35;margin-top:2px}

/* ---------- camera-assisted food logging ---------- */
.foodmodes{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:10px}
.foodmodes button{border:none;border-radius:16px;padding:12px 6px;background:#fff;box-shadow:0 2px 10px rgba(90,66,116,.08);cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:4px;font:800 11.5px var(--sans);color:var(--rm-ink);transition:transform .15s}
.foodmodes button:active{transform:scale(.96)}
.foodmodes button .ms{font-size:24px;color:var(--rm-mauve)}
.foodmodes button.on{background:var(--rm-lilac-2);color:var(--rm-plum)}
.camwrap{position:relative;margin-top:10px;border-radius:18px;overflow:hidden;background:#1a1228;display:none;aspect-ratio:4/3}
.camwrap.on{display:block}
.camwrap video{width:100%;height:100%;object-fit:cover;display:block}
.camwrap .reticle{position:absolute;left:12%;right:12%;top:30%;bottom:30%;border:2px solid rgba(255,255,255,.8);border-radius:14px;box-shadow:0 0 0 999px rgba(20,10,40,.35);pointer-events:none}
.camwrap .reticle::after{content:'';position:absolute;left:6%;right:6%;top:50%;height:2px;background:rgba(246,201,214,.9);box-shadow:0 0 10px #f6c9d6;animation:scanline 1.6s ease-in-out infinite}
@keyframes scanline{0%,100%{transform:translateY(-22px)}50%{transform:translateY(22px)}}
.camwrap .camhint{position:absolute;left:0;right:0;bottom:8px;text-align:center;font:700 11px var(--sans);color:#fff;text-shadow:0 1px 4px rgba(0,0,0,.6)}
.results{display:flex;flex-direction:column;gap:6px;margin-top:8px;max-height:220px;overflow-y:auto}
.result{display:flex;gap:10px;align-items:center;background:#fff;border-radius:14px;padding:9px 12px;border:1.5px solid transparent;cursor:pointer;text-align:left;font-family:inherit}
.result:hover,.result.on{border-color:var(--rm-lilac);background:var(--rm-lilac-2)}
.result .ms{font-size:20px;color:var(--rm-mauve);flex-shrink:0}
.result b{display:block;font:800 12.5px var(--sans);color:var(--rm-ink)}
.result small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);line-height:1.35}
.result img{width:36px;height:36px;object-fit:cover;border-radius:8px;flex-shrink:0}
.picker{margin-top:10px;background:#fff;border-radius:18px;padding:12px 14px;box-shadow:var(--rm-shadow);display:none}
.picker.on{display:block}
.picker h4{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--rm-plum)}
.picker .src{font:600 10.5px var(--sans);color:var(--rm-ink-3);margin-top:2px;line-height:1.4}
.portions{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.portions .chipbtn{padding:7px 10px;font-size:11.5px}
.grams{display:flex;gap:8px;align-items:center;margin-top:8px}
.grams input{width:110px}
.grams span{font:700 12px var(--sans);color:var(--rm-ink-2)}
.nutline{margin-top:8px;font:700 12px var(--sans);color:var(--rm-plum);background:var(--rm-paper-2);border-radius:12px;padding:8px 10px;line-height:1.5}
.nutline small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);margin-top:2px}
.items{display:flex;flex-direction:column;gap:6px;margin-top:8px}
.item{display:flex;gap:10px;align-items:center;background:#fff;border-radius:14px;padding:9px 12px;box-shadow:0 2px 8px rgba(90,66,116,.06)}
.item .ms{font-size:18px;color:var(--rm-mauve)}
.item b{display:block;font:800 12.5px var(--sans);color:var(--rm-ink)}
.item small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);line-height:1.35}
.item .del{margin-left:auto;border:none;background:none;color:#c9b9d8;cursor:pointer;padding:4px}
.totals{margin-top:10px;background:linear-gradient(135deg,#f3ecfb,#fdf1f5);border-radius:16px;padding:10px 12px}
.totals b{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--rm-plum)}
.totals .nuts{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:4px;margin-top:6px}
.totals .nuts div{background:rgba(255,255,255,.7);border-radius:10px;padding:6px 2px;text-align:center}
.totals .nuts strong{display:block;font:800 13px var(--sans);color:var(--rm-ink)}
.totals .nuts small{display:block;font:700 9px var(--sans);color:var(--rm-ink-3);text-transform:uppercase;letter-spacing:.04em}
.totals p{font:600 10.5px var(--sans);color:var(--rm-ink-3);margin-top:6px;line-height:1.4}
.thumb{width:100%;max-height:160px;object-fit:cover;border-radius:14px;margin-top:8px;display:none}
.thumb.on{display:block}
.entry .ethumb{width:44px;height:44px;object-fit:cover;border-radius:10px;flex-shrink:0}

/* ---------- breathing orb ---------- */
.orbwrap{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:18px 0 8px}
.orb{width:120px;height:120px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#fff,#e7dcf5 35%,#c9b6e6 70%,#a98ad0);box-shadow:0 0 50px rgba(169,138,208,.45);transition:transform 4s ease-in-out;transform:scale(.8)}
.orb.in{transform:scale(1.2)}
.orb.hold{transform:scale(1.2)}
.orb.out{transform:scale(.8)}
.orbtext{font-family:var(--serif);font-size:22px;font-weight:500;color:var(--rm-plum);margin-top:16px;min-height:28px;text-align:center}
.orbsub{font:700 11px var(--sans);color:var(--rm-ink-3);letter-spacing:.08em;text-transform:uppercase;margin-top:4px;text-align:center}
.sessions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:10px}
.session{border:none;border-radius:16px;padding:12px;background:#fff;box-shadow:0 2px 10px rgba(90,66,116,.08);cursor:pointer;text-align:left;font-family:inherit;transition:transform .15s}
.session:active{transform:scale(.97)}
.session.on{background:var(--rm-lilac-2)}
.session b{display:block;font:800 13px var(--sans);color:var(--rm-ink)}
.session small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);margin-top:2px;line-height:1.35}
.erin{display:flex;align-items:center;gap:10px;margin-top:10px;padding:10px 12px;border-radius:16px;background:linear-gradient(135deg,#f3ecfb,#fdf1f5)}
.erin img{width:44px;height:44px;border-radius:50%;object-fit:cover;flex-shrink:0;border:2px solid #fff}
.erin b{display:block;font:800 12.5px var(--sans);color:var(--rm-ink)}
.erin small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);line-height:1.4}

/* ---------- hearts, luna orb, hologram, HUD ---------- */
.chip.hearts{border:none;cursor:pointer;color:#c0507c;background:rgba(255,255,255,.85);padding:6px 10px;height:38px;gap:4px;font-size:12px}
.chip.hearts .ms{font-size:16px;color:#e26a93}
/* the music chip: a native button, pressed when the tune plays (design 2026-10-21-game-music.md) */
.chip.music{border:none;cursor:pointer;color:var(--rm-mauve);background:rgba(255,255,255,.85);padding:6px 9px;height:38px;min-width:38px;justify-content:center}
.chip.music .ms{font-size:18px;color:#a98bc9}
.chip.music[aria-pressed="true"]{background:#efe6ff;color:#6e4fa3}.chip.music[aria-pressed="true"] .ms{color:#7b5bb5}
.chip.music:focus-visible{outline:3px solid #b9a3e3;outline-offset:2px}
.btn.music .mlabel{margin-left:2px}
.chip.hearts.pop{animation:heartpop .5s ease}
@keyframes heartpop{0%{transform:scale(1)}40%{transform:scale(1.25)}100%{transform:scale(1)}}
.luna{position:absolute;right:12px;bottom:84px;z-index:36;width:68px;height:68px;border:none;background:none;padding:0;cursor:pointer;filter:drop-shadow(0 10px 16px rgba(90,66,116,.35));animation:lunafloat 4s ease-in-out infinite}
.luna img{width:100%;height:100%;object-fit:contain;display:block}
.luna .luna-hint{position:absolute;right:72px;top:50%;transform:translateY(-50%);background:#fff;color:var(--rm-plum);font:800 11px var(--sans);padding:6px 10px;border-radius:12px;white-space:nowrap;box-shadow:0 6px 18px rgba(90,66,116,.2);opacity:0;transition:opacity .3s;pointer-events:none}
.luna .luna-hint::after{content:'';position:absolute;left:100%;top:50%;transform:translateY(-50%);border:6px solid transparent;border-left-color:#fff}
.luna.hinting .luna-hint,.luna:hover .luna-hint{opacity:1}
.luna:active{transform:scale(.92)}
@keyframes lunafloat{0%,100%{transform:translateY(0) rotate(-4deg)}50%{transform:translateY(-8px) rotate(4deg)}}
@media(min-width:520px){.luna{bottom:92px}}
.prop.owned{position:absolute;transform:translate(-50%,-98.5%);z-index:7;pointer-events:none;filter:drop-shadow(0 1px 1.5px rgba(60,30,80,.22));animation:propin .6s ease-out}
.prop.owned .petbody{display:block;position:relative}
.prop.owned.pet .petbody{animation:petbob 3.4s ease-in-out infinite;transform-origin:50% 100%}
.prop.owned .worn{position:absolute;transform:translate(-50%,-50%);width:46%;pointer-events:none;filter:drop-shadow(0 2px 2px rgba(70,40,100,.25))}
.prop.owned img{width:100%;display:block}
@keyframes petbob{0%,100%{transform:scale(1,1)}50%{transform:scale(1.03,.97)}}
@keyframes propin{from{opacity:0;transform:translate(-50%,-90%) scale(.8)}to{opacity:1;transform:translate(-50%,-100%) scale(1)}}
.holo{position:absolute;left:44.8%;top:72%;width:15.1%;transform:translate(-50%,-100%);z-index:10;opacity:0;pointer-events:none;transition:opacity 1s}
.holo.on{opacity:1}
.holo-cone{position:absolute;left:50%;bottom:-8%;width:160%;height:120%;transform:translateX(-50%);background:linear-gradient(to top,rgba(201,182,230,.0),rgba(201,182,230,.35) 30%,rgba(230,220,250,.55) 70%,rgba(255,255,255,0));clip-path:polygon(44% 100%,56% 100%,100% 0,0 0);filter:blur(1px);animation:holoflicker 3s ease-in-out infinite}
.holo-disc{position:relative;width:100%;aspect-ratio:1;border-radius:50%;overflow:hidden;border:2px solid rgba(255,255,255,.8);box-shadow:0 0 24px rgba(201,182,230,.9),inset 0 0 20px rgba(255,255,255,.5);background:#c9b6e6;animation:holobob 4s ease-in-out infinite}
.holo-disc img{width:100%;height:100%;object-fit:cover;display:block;filter:saturate(.6) brightness(1.1) sepia(.2) hue-rotate(220deg);opacity:.9}
.holo-disc .scan{position:absolute;inset:0;background:repeating-linear-gradient(to bottom,rgba(255,255,255,.18) 0 2px,rgba(255,255,255,0) 2px 5px);mix-blend-mode:screen;animation:scanmove 2s linear infinite}
.holo-base{position:absolute;left:50%;bottom:-14%;width:36%;height:6%;transform:translateX(-50%);border-radius:50%;background:radial-gradient(circle,#fff,rgba(201,182,230,.6) 50%,rgba(201,182,230,0) 72%);box-shadow:0 0 16px 4px rgba(255,255,255,.7)}
@keyframes holoflicker{0%,100%{opacity:.8}50%{opacity:1}}
@keyframes holobob{0%,100%{transform:translateY(0)}50%{transform:translateY(-6%)}}
@keyframes scanmove{from{background-position:0 0}to{background-position:0 10px}}
.hud{position:absolute;left:10px;right:10px;bottom:10px;z-index:11;display:none;align-items:center;gap:10px;background:rgba(255,255,255,.88);backdrop-filter:blur(12px);border-radius:18px;padding:8px 10px;box-shadow:0 8px 24px rgba(90,66,116,.22)}
.hud.on{display:flex}
.hud-orb{width:38px;height:38px;flex-shrink:0;border-radius:50%;background:#f3ecfb url(assets/avatars/erin/erin-chibi-face.webp) center 20%/cover no-repeat;border:2px solid #fff;/* Erin's face breathes with her (Jamie, 30 Oct: 'put erin avatar?') */box-shadow:0 0 14px rgba(169,138,208,.5);transition:transform 3.5s ease-in-out;transform:scale(.8);flex-shrink:0}
.hud-orb.in,.hud-orb.hold{transform:scale(1.15)}
.hud-orb.out{transform:scale(.8)}
.hud-text{flex:1;min-width:0}
.hud-row{display:flex;align-items:baseline;gap:8px;min-width:0}
.hud-time{display:inline-flex;align-items:center;gap:5px;font:700 11px var(--sans);font-style:normal;color:var(--rm-mauve);font-variant-numeric:tabular-nums;white-space:nowrap;flex-shrink:0}
.hud-time:empty{display:none}
.hud-time::before{content:'';width:6px;height:6px;border-radius:50%;background:#2f8a5f;animation:hudlive 2s ease-in-out infinite}
@keyframes hudlive{0%,100%{opacity:1}50%{opacity:.3}}
@media (prefers-reduced-motion: reduce){.hud-time::before{animation:none}}
.hud-text b{display:block;font:800 11px var(--sans);color:var(--rm-ink-3);letter-spacing:.06em;text-transform:uppercase}
.hud-text span{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;font-family:var(--serif);font-size:14px;color:var(--rm-plum);line-height:1.25;overflow:hidden;text-wrap:pretty}
.hud-stop{width:36px;height:36px;border-radius:50%;border:none;background:var(--rm-lilac-2);color:var(--rm-plum);cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.hud-mute[hidden]{display:none}

/* ---------- Luna chat ---------- */
.chat{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.bub{max-width:88%;padding:10px 12px;border-radius:16px;font:600 12.5px var(--sans);line-height:1.45}
.bub.from-luna{align-self:flex-start;background:linear-gradient(135deg,#f3ecfb,#fdf1f5);color:var(--rm-ink);border-bottom-left-radius:6px}
.bub.me{align-self:flex-end;background:var(--rm-mauve);color:#fff;border-bottom-right-radius:6px}
.bub.from-luna b{display:block;font:800 10px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin-bottom:3px}
.bub.urgent{align-self:stretch;max-width:100%;background:#fff7f1;border:1.5px solid #f0b58f;color:var(--rm-ink);border-radius:16px;font-weight:500}
.bub.urgent.emergency{background:#fff1f0;border-color:#e88a86}
.bub.urgent b{display:block;font:600 16px var(--serif);color:#9b2f2a;margin-bottom:4px}
.bub.urgent p{margin:4px 0;font:600 12.5px var(--sans);line-height:1.45}
.bub.urgent p.esc{color:#9b2f2a}
.bub.urgent .row{margin-top:8px;flex-wrap:wrap}
.bub.urgent .row .btn{min-width:0}
.bub.urgent small{display:block;margin-top:8px;font:500 11px var(--sans);color:var(--rm-ink-3);line-height:1.4}
.perm{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;margin:8px 0;background:#fff;border-radius:14px;box-shadow:var(--rm-shadow);cursor:pointer;font:600 12.5px var(--sans);color:var(--rm-ink)}
.perm input{margin-top:3px;width:18px;height:18px;flex:0 0 auto;accent-color:var(--rm-plum)}
.perm .ms{color:var(--rm-plum);font-size:20px;flex:0 0 auto}
.perm div{min-width:0}
.perm b{display:block;font-weight:800}
.perm div span{display:block;font-weight:500;color:var(--rm-ink-2);margin-top:2px;line-height:1.45}
.confirm{align-self:stretch;background:#fff;border-radius:16px;padding:10px 12px;box-shadow:var(--rm-shadow)}
.confirm h4{font-family:var(--serif);font-weight:600;font-size:14px;color:var(--rm-plum)}
.confirm label{display:flex;gap:8px;align-items:flex-start;font:600 12px var(--sans);color:var(--rm-ink);padding:6px 0;border-bottom:1px solid rgba(107,82,142,.08);cursor:pointer}
.confirm label:last-of-type{border-bottom:none}
.confirm input{accent-color:var(--rm-mauve);margin-top:2px}
.quick{flex-wrap:wrap;display:flex;gap:6px;padding:4px 0;scrollbar-width:none}
.quick::-webkit-scrollbar{display:none}
.quick .qchip{flex-shrink:0;display:inline-flex;align-items:center;background:#fff;border:1.5px solid rgba(107,82,142,.14);border-radius:99px;overflow:hidden}
.quick .qsend{border:none;background:none;padding:8px 6px 8px 12px;font:700 12px var(--sans);color:var(--rm-ink-2);cursor:pointer;white-space:nowrap}
.quick .qsend:hover{color:var(--rm-plum)}
.quick .qpen{border:none;border-left:1px solid rgba(107,82,142,.12);background:var(--rm-paper-2);color:var(--rm-mauve);width:30px;align-self:stretch;cursor:pointer;display:flex;align-items:center;justify-content:center}
.quick .qpen .ms{font-size:15px}
.quick .qpen:hover{background:var(--rm-lilac-2)}
.composer{display:flex;gap:8px;margin-top:8px;align-items:flex-end}
.composer .input{flex:1}
.composer textarea.input{min-height:84px;max-height:168px;resize:none;overflow-y:auto;font-size:16px;line-height:1.45;padding:12px 14px}
.composer button{flex:0 0 auto;width:46px;height:46px;border-radius:14px}
.composer .lphoto{flex:0 0 auto;width:46px;height:46px;min-width:0;padding:0;border-radius:14px;display:flex;align-items:center;justify-content:center;cursor:pointer}
.bub.me.photo{padding:4px;background:var(--rm-mauve)}
.lphoto-img{display:block;width:150px;max-width:100%;border-radius:12px}
.bub.foodlog{max-width:100%}
.foodlog h4{display:flex;align-items:center;gap:6px}
.foodlog h4 .ms{font-size:18px;color:var(--rm-plum)}
.fl-head{display:flex;gap:10px;align-items:center;margin:8px 0}
.fl-head img{width:76px;height:76px;object-fit:cover;border-radius:14px;flex:0 0 auto}
.fl-head>div{min-width:0}
.fl-meals{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}
.fl-meal{border:1.5px solid rgba(107,82,142,.16);background:#fff;border-radius:99px;padding:4px 9px;font:700 11px var(--sans);color:var(--rm-ink-2);cursor:pointer}
.fl-meal.on{background:var(--rm-plum);border-color:var(--rm-plum);color:#fff}
.fl-kcal{display:block;font:600 19px var(--serif);color:#d9756a}
.fl-head small{display:block;font:600 11px var(--sans);color:var(--rm-ink-3);margin-top:2px}
.fl-items{border-top:1px solid rgba(107,82,142,.1)}
.fl-item{display:flex;align-items:center;gap:8px;padding:8px 0;border-bottom:1px solid rgba(107,82,142,.08)}
.fl-item>div{flex:1;min-width:0}
.fl-item b{display:block;font:700 12.5px var(--sans);color:var(--rm-ink)}
.fl-item span{display:block;font:500 11px var(--sans);color:var(--rm-ink-3)}
.fl-item em{font:600 12px var(--sans);font-style:normal;color:var(--rm-ink-2);white-space:nowrap;font-variant-numeric:tabular-nums}
.fl-item .fl-name{flex:1;min-width:0;padding:6px 8px;font-size:12px}
.fl-g{display:flex;align-items:center;gap:3px;font:600 11px var(--sans);color:var(--rm-ink-3)}
.fl-g .input{width:64px;padding:6px;font-size:12px}
.fl-x{border:none;background:none;color:var(--rm-ink-3);cursor:pointer;padding:2px}
.fl-macros{display:flex;flex-wrap:wrap;gap:10px;margin:8px 0 4px;font:600 11.5px var(--sans);color:var(--rm-ink-2)}
.fl-macros .d{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:4px;vertical-align:1px}
.fl-macros .d.p{background:#6b528e}.fl-macros .d.c{background:#e8b84a}.fl-macros .d.f{background:#d9756a}
.fl-note{font:500 11px var(--sans);color:var(--rm-ink-3);line-height:1.4;margin:4px 0 8px}
.fl-note a{color:inherit;text-decoration:underline}
.fl-src{display:inline-block;vertical-align:1px;margin-left:2px;padding:1px 6px;border-radius:999px;font:700 9.5px var(--sans);font-style:normal;letter-spacing:.02em;text-transform:uppercase;white-space:nowrap}
.fl-src.hpb{background:rgba(99,170,120,.16);color:#2f7a4d}
.fl-src.est{background:rgba(217,117,106,.14);color:#b85b50}
.foodlog .row{flex-wrap:wrap}
.aibox{margin-top:10px;background:var(--rm-paper-2);border-radius:16px;padding:10px 12px}
.aibox summary{cursor:pointer;font:800 12px var(--sans);color:var(--rm-plum);list-style:none;display:flex;align-items:center;gap:6px}
.aibox summary::-webkit-details-marker{display:none}
.aibox p{font:600 11px var(--sans);color:var(--rm-ink-3);line-height:1.45;margin-top:6px}

/* ---------- reward shop ---------- */
.shop{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.shopitem{display:flex;gap:12px;align-items:center;background:#fff;border-radius:18px;padding:10px 12px;box-shadow:0 2px 10px rgba(90,66,116,.08)}
.shopitem img{width:56px;height:56px;object-fit:contain;flex-shrink:0}
.shopitem .ph{width:56px;height:56px;border-radius:14px;background:var(--rm-lilac-2);display:flex;align-items:center;justify-content:center;color:var(--rm-mauve);flex-shrink:0}
.shopitem b{display:block;font:800 13px var(--sans);color:var(--rm-ink)}
.shopitem small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);line-height:1.35;margin-top:2px}
.shopitem .cost{margin-left:auto;flex-shrink:0;display:flex;flex-direction:column;align-items:flex-end;gap:4px}
.shopitem .cost b{color:#c0507c;font-size:12px;display:flex;align-items:center;gap:3px}
.shopitem .cost .ms{font-size:14px;color:#e26a93}
.shopitem .btn{min-width:0;padding:8px 12px;font-size:11.5px}
.heartbar{display:flex;align-items:center;gap:10px;background:linear-gradient(135deg,#fdf1f5,#f3ecfb);border-radius:18px;padding:12px 14px}
.heartbar .big{font-family:var(--serif);font-size:30px;font-weight:600;color:#c0507c;display:flex;align-items:center;gap:6px}
.heartbar .big .ms{font-size:28px;color:#e26a93}
.heartbar p{font:600 11.5px var(--sans);color:var(--rm-ink-2);line-height:1.4}
/* Luna's look picker */
.mascots{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:12px}
.mascots button{border:2px solid transparent;background:linear-gradient(160deg,#fff,#f6effc);border-radius:18px;padding:10px 8px 9px;text-align:center;cursor:pointer;font:inherit;color:inherit;box-shadow:0 4px 14px rgba(90,66,116,.08);display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0}
.mascots button.on{border-color:var(--rm-plum);box-shadow:0 6px 18px rgba(117,86,196,.22),0 0 0 4px rgba(214,196,255,.35)}
.mascots img{width:72px;height:72px;object-fit:contain;filter:drop-shadow(0 6px 8px rgba(90,66,116,.18))}
.mascots b{display:block;font:800 12px/1.2 var(--sans);color:var(--rm-plum)}
.mascots small{display:block;font:600 10px/1.3 var(--sans);color:var(--rm-ink-3)}
/* Dream Street: three storefronts, then each store's own list */
.street{display:flex;flex-direction:column;gap:10px;margin-top:12px}
.street .store{display:flex;align-items:center;gap:12px;width:100%;text-align:left;border:1px solid rgba(255,255,255,.95);background:linear-gradient(135deg,#fff,#f7f1fc);border-radius:20px;padding:10px 12px;box-shadow:0 6px 18px rgba(90,66,116,.10),0 0 0 1px rgba(214,196,255,.3);cursor:pointer;font:inherit;color:inherit}
.street .store img{width:86px;height:86px;object-fit:contain;flex:none;filter:drop-shadow(0 6px 8px rgba(90,66,116,.18))}
.street .store>span:not(.ms){flex:1;min-width:0}
.street .store b{display:block;font-family:var(--serif);font-weight:600;font-size:19px;color:var(--rm-plum);line-height:1.15}
.street .store small{display:block;font:600 11.5px/1.4 var(--sans);color:var(--rm-ink-3);margin-top:3px}
.street .store .ms{color:var(--rm-mauve);flex:none}
.streetnav{display:flex;align-items:center;justify-content:space-between;margin-top:6px}
.streetnav .back{border:none;background:var(--rm-paper-2);border-radius:999px;padding:8px 12px 8px 8px;font:800 12px var(--sans);color:var(--rm-plum);display:flex;align-items:center;gap:4px;cursor:pointer}
.streetnav .back .ms{font-size:18px}
.heartsmini{display:flex;align-items:center;gap:4px;font:800 13px var(--sans);color:#c0507c}
.heartsmini .ms{font-size:16px;color:#e26a93}
.streetnav+.help{margin:8px 0 2px}
.shelf{display:flex;align-items:center;gap:6px;margin:16px 2px 0;font:800 11px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--rm-mauve)}
.shelf .ms{font-size:16px}
.ownchip{font:800 11px var(--sans);color:var(--rm-plum);background:var(--rm-lilac-2);border-radius:999px;padding:6px 10px;white-space:nowrap}
.petbub button small{font:700 10px var(--sans);color:var(--rm-ink-3);margin-left:4px}

/* ---------- desktop (Learn) ---------- */
.desk{border-radius:18px;overflow:hidden;box-shadow:0 10px 30px rgba(60,40,90,.25);background:#2d2147;margin-top:6px}
.menubar{display:flex;align-items:center;gap:10px;padding:6px 12px;background:rgba(255,255,255,.75);backdrop-filter:blur(10px);font:700 11px var(--sans);color:var(--rm-plum)}
.menubar .brandy{font-family:var(--serif);font-weight:600;letter-spacing:.12em}
.menubar .sp{flex:1}
.wallpaper{position:relative;aspect-ratio:16/10;background:#3a2a50 center/cover no-repeat}
.dicons{position:absolute;inset:10px 10px 10px 10px;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:min-content;gap:6px;align-content:start}
.dicon{border:none;background:none;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:2px;padding:4px 2px;border-radius:10px;font-family:inherit}
.dicon:hover,.dicon:focus-visible{background:rgba(255,255,255,.18)}
.dicon svg{width:40px;height:34px;display:block;filter:drop-shadow(0 3px 4px rgba(40,20,70,.35))}
.dicon span{font:700 9.5px var(--sans);color:#fff;text-shadow:0 1px 3px rgba(20,10,40,.7);text-align:center;line-height:1.15;max-width:72px}
.dock{display:flex;justify-content:center;gap:8px;padding:8px;background:rgba(255,255,255,.55);backdrop-filter:blur(10px)}
.dock button{width:40px;height:40px;border-radius:12px;border:none;background:#fff;color:var(--rm-mauve);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 3px 10px rgba(90,66,116,.18);transition:transform .15s}
.dock button:hover{transform:translateY(-4px) scale(1.08)}
.dock button .ms{font-size:22px}
.finder{margin-top:10px;background:#fff;border-radius:16px;overflow:hidden;box-shadow:var(--rm-shadow);display:none}
.finder.on{display:block;animation:pop2 .2s ease-out}
.finder .fbar{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--rm-paper-2);font:800 12px var(--sans);color:var(--rm-plum)}
.finder .lights{display:flex;gap:5px}
.finder .lights i{width:10px;height:10px;border-radius:50%;background:#f6c9d6}
.finder .lights i:nth-child(2){background:#f3d49b}.finder .lights i:nth-child(3){background:#bfe3d4}
.finder .fbar .x{margin-left:auto;border:none;background:none;color:var(--rm-ink-3);cursor:pointer}
.finder .frow{display:flex;gap:10px;align-items:center;padding:9px 12px;border-top:1px solid rgba(107,82,142,.06);text-decoration:none;color:var(--rm-ink);cursor:pointer;background:none;border-left:none;border-right:none;border-bottom:none;width:100%;text-align:left;font-family:inherit}
.finder .frow:hover{background:var(--rm-paper-2)}
.finder .frow .ms{font-size:20px;color:var(--rm-mauve);flex-shrink:0}
.finder .frow img{width:52px;height:34px;object-fit:cover;border-radius:8px;flex-shrink:0}
.finder .frow b{display:block;font:800 12.5px var(--sans)}
.finder .frow small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3)}

/* ---------- acupressure on the avatar ---------- */
.acu{position:relative;margin:10px auto 0;width:min(100%,260px)}
.acu img{width:100%;display:block}
.acu .pt{position:absolute;width:18px;height:18px;border-radius:50%;transform:translate(-50%,-50%);border:2px solid #fff;background:radial-gradient(circle at 35% 35%,#ffd6e4,#e26a93);box-shadow:0 0 0 0 rgba(226,106,147,.6),0 2px 6px rgba(90,66,116,.3);cursor:pointer;padding:0;animation:pulse2 2.4s ease-out infinite}
.acu .pt.on{background:radial-gradient(circle at 35% 35%,#fff,#7a5c96);transform:translate(-50%,-50%) scale(1.25)}
.acu .pt.caution{background:radial-gradient(circle at 35% 35%,#fff0d6,#d4a85a)}
@keyframes pulse2{0%{box-shadow:0 0 0 0 rgba(226,106,147,.55),0 2px 6px rgba(90,66,116,.3)}70%{box-shadow:0 0 0 10px rgba(226,106,147,0),0 2px 6px rgba(90,66,116,.3)}100%{box-shadow:0 0 0 0 rgba(226,106,147,0),0 2px 6px rgba(90,66,116,.3)}}
.acu .lab{position:absolute;transform:translate(-50%,8px);font:800 9px var(--sans);color:var(--rm-plum);background:rgba(255,255,255,.85);padding:2px 5px;border-radius:8px;pointer-events:none;white-space:nowrap}
.acucard{margin-top:10px;background:#fff;border-radius:18px;padding:12px 14px;box-shadow:var(--rm-shadow)}
.acucard h3{font-family:var(--serif);font-weight:600;font-size:16px;color:var(--rm-plum)}
.acucard h3 small{font:600 11px var(--sans);color:var(--rm-ink-3);margin-left:6px}
.acucard p{font:600 12px var(--sans);color:var(--rm-ink-2);line-height:1.5;margin-top:6px}
.acucard .how{margin-top:8px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.acucard .how div{background:var(--rm-paper-2);border-radius:12px;padding:8px 6px;text-align:center;font:700 10.5px var(--sans);color:var(--rm-ink)}
.acucard .how .ms{display:block;font-size:20px;color:var(--rm-mauve);margin-bottom:2px}
.acucard .warn{margin-top:8px;padding:8px 10px;border-radius:12px;background:#fff4dc;color:#7a4b00;font:700 11px var(--sans);line-height:1.4}

/* ---------- phase picks in the diary ---------- */
.picks{display:flex;gap:8px;overflow-x:auto;padding:4px 0 6px;scrollbar-width:none}
.picks::-webkit-scrollbar{display:none}
.pick{flex:0 0 auto;border:none;background:#fff;border-radius:14px;padding:8px 10px;box-shadow:0 2px 8px rgba(90,66,116,.08);cursor:pointer;font-family:inherit;text-align:left;min-width:120px}
.pick b{display:block;font:800 12px var(--sans);color:var(--rm-ink)}
.pick small{display:block;font:600 9.5px var(--sans);color:var(--rm-ink-3);line-height:1.3;margin-top:2px}
.pick em{display:block;font:600 9.5px var(--sans);color:var(--rm-mauve);font-style:normal;margin-top:2px}
.pick .pickimg{display:block;width:54px;height:54px;object-fit:contain;margin:0 auto 4px;filter:drop-shadow(0 2px 3px rgba(90,66,116,.14))} /* the Ovuluna food illustrations (21 Oct) */
.pick.haspic{min-width:124px}

/* ---- 18 Oct round 4: night window, visiting bar, reminders, desk drag + wallpaper, acupoint locator, dream house ---- */
.win-night{position:absolute;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle at 40% 30%,#4a3b78,#1e1742 72%);box-shadow:inset 0 0 22px rgba(0,0,0,.4);opacity:0;transition:opacity 1.6s ease;pointer-events:none;overflow:hidden;z-index:2}
.scene:is(.is-night,.sky-night) .win-night{opacity:.97}
/* window sky cut from the plate (room layout): fades in by sky phase; the oval overlay is only for homes without a cut */
.win-patches{position:absolute;inset:0;pointer-events:none;z-index:2}
.win-patch{position:absolute;height:auto;opacity:0;display:none;transition:opacity 1.6s ease,filter 1.6s ease;pointer-events:none}
.scene.has-win-patch .win-patch{display:block}
.scene.has-win-patch .win-night{display:none}
.scene.has-win-patch:is(.is-night,.sky-night) .win-patch.night{opacity:1}
.scene.has-win-patch[data-sky="sunset"]:not(.is-night):not(.sky-night) .win-patch.sunset{opacity:1}
.scene.has-win-patch[data-sky="sunrise"]:not(.is-night):not(.sky-night) .win-patch.sunrise{opacity:1}
.win-night .moon{position:absolute;left:52%;top:24%;width:30%;aspect-ratio:1;border-radius:50%;background:#fff3cf;box-shadow:0 0 16px #ffe7a6,0 0 40px rgba(255,231,166,.5)}
.win-night .moon::after{content:'';position:absolute;left:-26%;top:-8%;width:100%;height:100%;border-radius:50%;background:#2a2152}
.win-night i.s{position:absolute;width:5%;aspect-ratio:1;border-radius:50%;background:#fff;box-shadow:0 0 6px #fff;animation:twinkle 2.6s ease-in-out infinite}
.visitbar{position:absolute;left:12px;right:12px;bottom:14px;z-index:14;display:none;align-items:center;gap:8px;background:rgba(255,255,255,.92);backdrop-filter:blur(8px);border-radius:14px;padding:8px 10px;font:700 11.5px var(--sans);color:var(--rm-plum);box-shadow:var(--rm-shadow)}
.visitbar.on{display:flex}
.visitbar>.ms{font-size:18px;color:var(--rm-mauve)}
.visitbar button{margin-left:auto;border:none;background:var(--rm-lilac-2);color:var(--rm-plum);border-radius:99px;padding:6px 10px;font:800 11px var(--sans);display:flex;align-items:center;gap:4px;cursor:pointer;flex-shrink:0}
.visitbar button .ms{font-size:16px}
.erin a{display:inline-block;margin-top:3px;font:800 10.5px var(--sans);color:var(--rm-mauve);text-decoration:none}
.ownkey.hidden{display:none}
/* reminders */
.rems{display:flex;flex-direction:column;gap:8px;margin-top:8px}
.rem{display:flex;align-items:center;gap:10px;background:#fff;border-radius:16px;padding:10px 12px;box-shadow:0 2px 10px rgba(90,66,116,.08)}
.rem.off{opacity:.6}
.rem .ico{font-size:22px;color:var(--rm-mauve);flex-shrink:0}
.rem .body{flex:1;min-width:0}
.rem b{display:block;font:800 12.5px var(--sans);color:var(--rm-ink)}
.rem span{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);margin-top:2px}
.rem small{display:block;font:700 10px var(--sans);color:var(--rm-mauve);margin-top:2px}
.rem .pen{border:none;background:var(--rm-paper-2);color:var(--rm-mauve);width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;cursor:pointer;flex-shrink:0}
.rem .pen .ms{font-size:16px}
.sw{width:42px;height:24px;border-radius:99px;border:none;background:#d7cbe6;position:relative;cursor:pointer;flex-shrink:0;transition:background .2s;padding:0}
.sw i{position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.2);transition:left .2s}
.sw.on{background:var(--rm-mauve)}.sw.on i{left:21px}
.remedit{display:none;margin-top:10px}.remedit.on{display:block;animation:pop2 .2s ease-out}
.editcard{background:#fff;border-radius:18px;padding:2px 14px 14px;box-shadow:var(--rm-shadow)}
.chips.icons .chipbtn{padding:6px 8px}.chips.icons .chipbtn .ms{font-size:18px}
.chips.days .chipbtn{width:34px;justify-content:center;padding:6px 0}
.chipbtn.tm{display:inline-flex;align-items:center;gap:5px}
.chipbtn.tm button{border:none;background:rgba(255,255,255,.35);color:#fff;border-radius:50%;width:16px;height:16px;line-height:14px;font-size:12px;cursor:pointer;padding:0}
/* desk: free-floating folders and the wallpaper panel */
.dicons.free{display:block;inset:0}
.dicons.free .dicon{position:absolute;width:22%;touch-action:none;user-select:none;-webkit-user-select:none;transition:transform .15s,background .15s}
.dicon.lift{transform:scale(1.1);z-index:3;background:rgba(255,255,255,.22)}
/* the folder icon and its name scale with the desk (cqw, capped at the usual sizes), so on the 16:10 desk a folder with a
   two-line name stays under 31% of the desk's height at any width and with any font (the name never takes three lines):
   the grid's rows are 31% apart, and deskSpots in room.js uses that 31 */
.dicons.free{container-type:inline-size}
.dicons.free .dicon svg{width:min(40px,10.1cqw);height:min(34px,8.6cqw)}
.dicons.free .dicon span{font-size:min(9.5px,2.9cqw)}
.menubar .mbtn{border:none;background:none;color:var(--rm-plum);cursor:pointer;display:flex;align-items:center;padding:0 4px}
.menubar .mbtn .ms{font-size:17px}
.wallpanel{display:none;margin-top:10px;background:#fff;border-radius:16px;padding:12px;box-shadow:var(--rm-shadow)}
.wallpanel.on{display:block;animation:pop2 .2s ease-out}
.wallpanel>b{font:800 12px var(--sans);color:var(--rm-plum)}
.walls{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin-top:8px}
.wall{aspect-ratio:16/10;border-radius:12px;border:2px solid transparent;background:#e7dcf5 center/cover no-repeat;position:relative;cursor:pointer;overflow:hidden;padding:0;display:flex;align-items:flex-end;justify-content:center;color:#fff;font-family:inherit}
.wall span{font:800 10px var(--sans);text-shadow:0 1px 3px rgba(0,0,0,.6);padding:4px;background:linear-gradient(transparent,rgba(0,0,0,.45));width:100%;text-align:center}
.wall.on{border-color:var(--rm-mauve)}
.wall.upload{flex-direction:column;align-items:center;justify-content:center;background-color:var(--rm-paper-2);color:var(--rm-mauve);gap:2px}
.wall.upload .ms{font-size:22px}.wall.upload span{background:none;text-shadow:none;color:var(--rm-plum);padding:0}
.wall.upload.on span{color:#fff;text-shadow:0 1px 3px rgba(0,0,0,.6)}
/* acupoint locator */
.acuwrap{display:flex;gap:10px;margin-top:10px;align-items:flex-start}
.acufig{position:relative;flex:0 0 40%}
.acufig img{width:100%;display:block}
.acufig .pt{position:absolute;width:17px;height:17px;border-radius:50%;transform:translate(-50%,-50%);border:1.5px solid #fff;background:radial-gradient(circle at 35% 35%,#fff,#c9b6e6);box-shadow:0 0 0 3px rgba(201,182,230,.35),0 2px 6px rgba(90,66,116,.35);font:800 8.5px var(--sans);color:var(--rm-plum);display:flex;align-items:center;justify-content:center;cursor:pointer;padding:0}
.acufig .pt.on{background:radial-gradient(circle at 35% 35%,#fff,#7a5c96);color:#fff;transform:translate(-50%,-50%) scale(1.3);z-index:2}
.acufig .pt.caution{background:radial-gradient(circle at 35% 35%,#fff0d6,#d4a85a)}
.acufig .pt.range{width:auto;min-width:17px;height:17px;padding:0 5px;border-radius:99px;white-space:nowrap}
.acufig .pt.range.on{background:#7a5c96}                   /* a wide pill: a solid fill keeps its white number readable end to end */
.aculist{flex:1;min-width:0;display:flex;flex-direction:column;gap:5px}
.aculist h5{font:800 9.5px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--rm-ink-3);margin:6px 0 1px}
.aculist button{display:flex;align-items:center;gap:7px;border:1.5px solid rgba(107,82,142,.12);background:#fff;border-radius:12px;padding:6px 8px;font:700 11px var(--sans);color:var(--rm-ink);text-align:left;cursor:pointer;font-family:inherit}
.aculist button i{flex-shrink:0;width:18px;height:18px;border-radius:50%;background:var(--rm-lilac-2);color:var(--rm-plum);font:800 9px var(--sans);display:flex;align-items:center;justify-content:center;font-style:normal}
.aculist button.on{border-color:var(--rm-mauve);background:#f6f0fd}
.aculist button.on i{background:var(--rm-mauve);color:#fff}
.aculist button b{display:block;font:800 11px var(--sans)}
.aculist button small{display:block;font:600 9.5px var(--sans);color:var(--rm-ink-3)}
.locator{margin-top:10px;background:#fff;border-radius:18px;overflow:hidden;box-shadow:var(--rm-shadow)}
.zoom{position:relative;aspect-ratio:1;background:#eadff6}
.zoom img{width:100%;height:100%;object-fit:cover;display:block}
.zoom .mark{position:absolute;width:22px;height:22px;border-radius:50%;transform:translate(-50%,-50%);border:2.5px solid #fff;background:rgba(192,80,124,.85);box-shadow:0 0 0 6px rgba(192,80,124,.25),0 0 0 14px rgba(192,80,124,.12)}
.zoom .mark::after{content:'';position:absolute;inset:-6px;border-radius:50%;border:2px solid rgba(255,255,255,.8);animation:markring 1.8s ease-out infinite}
@keyframes markring{0%{transform:scale(.7);opacity:1}100%{transform:scale(2.1);opacity:0}}
.zoom .mark.caution{background:rgba(212,168,90,.9)}
.zoom .ztitle{position:absolute;left:10px;top:10px;background:rgba(255,255,255,.9);border-radius:99px;padding:5px 10px;font:800 10.5px var(--sans);color:var(--rm-plum)}
.locator .txt{padding:12px 14px}
.locator h3{font-family:var(--serif);font-weight:600;font-size:16px;color:var(--rm-plum)}
.locator h3 small{font:600 11px var(--sans);color:var(--rm-ink-3);margin-left:6px}
.locator p{font:600 12px var(--sans);color:var(--rm-ink-2);line-height:1.5;margin-top:6px}
.locator .find{margin-top:8px;padding:10px 12px;border-radius:12px;background:var(--rm-paper-2);font:700 12px var(--sans);color:var(--rm-plum);line-height:1.5;display:flex;gap:8px}
.locator .find .ms{color:var(--rm-mauve);flex-shrink:0;font-size:20px}
.locator .how{margin-top:8px;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.locator .how div{background:var(--rm-paper-2);border-radius:12px;padding:8px 6px;text-align:center;font:700 10.5px var(--sans);color:var(--rm-ink-2)}
.locator .how .ms{display:block;font-size:20px;color:var(--rm-mauve);margin-bottom:2px}
.locator .warn{margin-top:8px;padding:8px 10px;border-radius:12px;background:#fff4dc;color:#7a4b00;font:700 11px var(--sans);line-height:1.4}
.cunkey{margin-top:8px;font:600 10.5px var(--sans)!important;color:var(--rm-ink-3)!important;line-height:1.5}
/* dream house in the shop */
.shopitem.home img{width:64px;height:78px;object-fit:cover;border-radius:12px}
.shopitem .bar{height:6px;border-radius:3px;background:var(--rm-paper-2);margin-top:6px;overflow:hidden}
.shopitem .bar i{display:block;height:100%;background:linear-gradient(90deg,#e08aa6,#c0507c);border-radius:3px}
.shopitem .cost{gap:5px}

/* ---- round 5: M badge, everyday practice, arrange mode, shop tabs, Rhythme welcome, onboarding ---- */
/* the M (25 Oct, Jamie: "cuter and dreamier, the M shouldn't be that big"): a small pearl of lilac light, a little italic M, one twinkle */
.hotspot.m .mbadge{position:relative;width:20px;height:20px;border-radius:50%;background:radial-gradient(circle at 34% 30%,#fff 0 20%,#f7e8ff 46%,#dcc8f6 100%);color:#8a5fb5;font:italic 700 11.5px/1 var(--serif);display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 2px rgba(255,255,255,.6),0 0 12px 3px rgba(214,182,255,.55),0 2px 6px rgba(90,66,116,.22);animation:mfloat 3.6s ease-in-out infinite}
.hotspot.m .mbadge::after{content:'';position:absolute;top:-4px;right:-4px;width:7px;height:7px;background:#fff;clip-path:polygon(50% 0,61% 39%,100% 50%,61% 61%,50% 100%,39% 61%,0 50%,39% 39%);filter:drop-shadow(0 0 2px rgba(255,255,255,.9));animation:mtwinkle 2.4s ease-in-out infinite}
@keyframes mfloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-2px)}}
@keyframes mtwinkle{0%,100%{opacity:.35;transform:scale(.75)}50%{opacity:1;transform:scale(1.1)}}
@media (prefers-reduced-motion:reduce){.hotspot.m .mbadge,.hotspot.m .mbadge::after{animation:none}}
.erin.small img{width:40px;height:40px}
.acts{display:flex;flex-direction:column;gap:6px;margin-top:10px}
.act{display:flex;align-items:center;gap:10px;background:#fff;border:1.5px solid transparent;border-radius:16px;padding:6px 10px 6px 6px;text-align:left;cursor:pointer;font-family:inherit;box-shadow:0 2px 10px rgba(90,66,116,.06)}
.act img{width:40px;height:56px;object-fit:contain;flex-shrink:0}
.act>span{flex:1;min-width:0}
.act b{display:block;font:800 12.5px var(--sans);color:var(--rm-ink)}
.act small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);margin-top:1px}
.act em{font:800 11px var(--sans);color:#c0507c;display:flex;align-items:center;gap:3px;font-style:normal;flex-shrink:0}
.act em .ms{font-size:14px}
.act.on{border-color:var(--rm-mauve);background:#f6f0fd}
.actcard{margin-top:10px;background:#fff;border-radius:18px;padding:12px 14px;box-shadow:var(--rm-shadow)}
.acthead{display:flex;gap:12px;align-items:center}
.acthead img{width:56px;height:84px;object-fit:contain;flex-shrink:0}
.acthead h3{font-family:var(--serif);font-weight:600;font-size:17px;color:var(--rm-plum)}
.acthead p{font:600 12px var(--sans);color:var(--rm-ink-2);line-height:1.45;margin-top:3px}
.acthead small{display:block;font:700 10.5px var(--sans);color:var(--rm-mauve);margin-top:4px}
.steps{margin:10px 0 0 16px;padding:0;font:600 11.5px var(--sans);color:var(--rm-ink-2);line-height:1.5}
.steps li{margin-bottom:4px}
.avatar.acting img{animation:breathe 3.2s ease-in-out infinite}
.scene.arranging .prop.owned{pointer-events:auto;cursor:grab;touch-action:none;outline:2px dashed rgba(255,255,255,.75);outline-offset:4px;border-radius:14px}
.scene.arranging .prop.owned.pet .petbody{animation:none}
.scene.arranging .hotspot,.scene.arranging .avatar{pointer-events:none;opacity:.45}
.prop.owned.lift{filter:drop-shadow(0 16px 14px rgba(70,40,100,.4)) brightness(1.05);z-index:12}
.nexthomes{margin-top:12px;background:#fff;border-radius:16px;padding:10px 12px;box-shadow:0 2px 10px rgba(90,66,116,.06)}
.nexthomes>b{font:800 10.5px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--rm-ink-3)}
.nexthomes div{display:flex;gap:10px;align-items:center;margin-top:8px}
.nexthomes div>.ms{font-size:22px;color:var(--rm-mauve);flex-shrink:0}
.nexthomes div b{display:block;font:800 12px var(--sans);color:var(--rm-ink)}
.nexthomes div small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3);line-height:1.4}
.welcome{position:absolute;inset:0;z-index:70;overflow:hidden;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:30px 24px;gap:4px;animation:pop2 .4s ease-out;
  background:
    radial-gradient(42% 30% at 18% 14%,rgba(255,214,236,.75),transparent 70%),
    radial-gradient(46% 34% at 84% 10%,rgba(205,186,245,.8),transparent 70%),
    radial-gradient(60% 40% at 50% 112%,rgba(255,226,196,.55),transparent 70%),
    radial-gradient(30% 22% at 70% 62%,rgba(255,240,250,.5),transparent 70%),
    linear-gradient(168deg,#f7ebf8 0%,#e7d8f5 42%,#d4c1ea 100%)}
.welcome::after{content:'';position:absolute;inset:-20%;pointer-events:none;background:radial-gradient(circle at 50% 30%,rgba(255,255,255,.35),transparent 55%);mix-blend-mode:screen;animation:bloom 9s ease-in-out infinite}
@keyframes bloom{0%,100%{opacity:.6;transform:scale(1)}50%{opacity:1;transform:scale(1.08)}}
.w-stars{position:absolute;inset:0;pointer-events:none;opacity:.85;background-image:
  radial-gradient(1.6px 1.6px at 12% 18%,#fff,transparent),radial-gradient(1.2px 1.2px at 28% 8%,#fff,transparent),radial-gradient(1.8px 1.8px at 44% 22%,#fff,transparent),
  radial-gradient(1.2px 1.2px at 62% 12%,#fff,transparent),radial-gradient(1.6px 1.6px at 78% 26%,#fff,transparent),radial-gradient(1.2px 1.2px at 90% 9%,#fff,transparent),
  radial-gradient(1.4px 1.4px at 8% 46%,#fff,transparent),radial-gradient(1.2px 1.2px at 94% 44%,#fff,transparent),radial-gradient(1.6px 1.6px at 20% 70%,#fff,transparent),
  radial-gradient(1.2px 1.2px at 84% 72%,#fff,transparent),radial-gradient(1.4px 1.4px at 52% 88%,#fff,transparent),radial-gradient(1.2px 1.2px at 36% 56%,#fff,transparent),
  radial-gradient(1.2px 1.2px at 70% 84%,#fff,transparent),radial-gradient(1.6px 1.6px at 60% 50%,#fff,transparent);animation:twinkle 3.2s ease-in-out infinite}
.w-hero{position:relative;width:40%;max-width:164px;margin:0 auto 10px;z-index:1}
.w-hero::before{content:'';position:absolute;inset:-34%;border-radius:50%;background:radial-gradient(circle,rgba(255,243,204,.8) 0%,rgba(222,204,255,.45) 42%,transparent 70%);filter:blur(8px);animation:moonglow 5s ease-in-out infinite}
.w-hero img{position:relative;width:100%;height:auto;display:block;border-radius:26%;box-shadow:0 0 0 4px rgba(255,255,255,.75),0 14px 30px rgba(90,66,116,.28),0 0 26px rgba(255,236,190,.55);animation:moonfloat 6s ease-in-out infinite}
@keyframes moonglow{0%,100%{opacity:.75;transform:scale(1)}50%{opacity:1;transform:scale(1.07)}}
@keyframes moonfloat{0%,100%{transform:translateY(0) rotate(-3deg)}50%{transform:translateY(-8px) rotate(3deg)}}
.welcome [hidden]{display:none!important}
.welcome>:not(.w-stars){position:relative;z-index:1}
.welcome[hidden]{display:none}
.w-art{position:relative;width:44%;margin-bottom:6px}
.w-art img:first-child{width:100%;display:block;filter:drop-shadow(0 16px 20px rgba(90,66,116,.3))}
.w-art .w-pet{position:absolute;width:62%;right:-34%;bottom:-4%;filter:drop-shadow(0 10px 12px rgba(90,66,116,.3))}
.w-brand{font-family:var(--serif);letter-spacing:.3em;font-size:12px;color:var(--rm-mauve);margin-top:10px}
.w-erin{font-family:var(--serif);font-weight:600;font-size:clamp(44px,13vw,64px);letter-spacing:.04em;color:var(--rm-plum);line-height:1.05;margin:2px 0 4px;text-shadow:0 0 22px rgba(255,255,255,.9),0 2px 14px rgba(214,196,255,.6)}
.w-ex{font:700 13px var(--sans);color:var(--rm-ink-2);letter-spacing:.02em}
.w-ex b{color:var(--rm-plum);font-weight:900}
.w-tag{font-family:var(--serif);font-style:italic;font-size:17px;color:var(--rm-plum);margin:6px 0 10px}
.w-note{font:600 11.5px var(--sans);color:var(--rm-ink-3);line-height:1.5;max-width:300px;margin-bottom:14px}
.welcome .btn{min-width:210px;justify-content:center;flex:0 0 auto}
.welcome .btn.primary{box-shadow:0 10px 26px rgba(117,86,196,.42),0 0 28px rgba(226,210,255,.75)}
.welcome .btn.ghost{background:rgba(255,255,255,.55);backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px)}

.welcome .btn+.btn{margin-top:8px}
.w-auth{display:flex;flex-direction:column;gap:8px;width:min(100%,290px);margin-top:2px}
.w-auth .btn,.w-email .btn{width:100%;min-width:0;margin:0}
.welcome .w-auth .btn+.btn{margin-top:0}
.welcome .btn.w-apple,.welcome .btn.w-google{min-height:46px;font-size:15px}
.welcome .btn.w-apple{background:#111;color:#fff;border-color:#111;box-shadow:0 10px 24px rgba(40,30,60,.28)}
.welcome .btn.w-google{background:#fff;color:#1f1f1f;border-color:#dadce0;font-weight:600;box-shadow:0 8px 20px rgba(90,66,116,.14)}
.w-auth svg{width:18px;height:18px;flex:0 0 auto}
.w-email{width:min(100%,290px);display:flex;flex-direction:column;gap:8px;margin-top:4px;text-align:left}
.w-email[hidden]{display:none}
.w-email .field{margin:0}.w-email .field label{display:block;font:600 11.5px var(--sans);color:var(--rm-ink-2);margin:0 0 4px 4px}
.w-email .msg{font:600 12px/1.45 var(--sans);color:var(--rm-ink-2);margin:0;text-align:center;overflow-wrap:anywhere}
.ef-more{display:flex;gap:14px;justify-content:center;margin-top:2px}
.ef-more .linkbtn{background:none;border:0;padding:4px 0;font:700 12px var(--sans);color:var(--rm-plum);text-decoration:underline;cursor:pointer}
.w-email .msg.err{color:#b23b5b}
.w-fine{font:500 11px/1.5 var(--sans);color:var(--rm-ink-2);max-width:290px;margin-top:14px}
.w-fine a{color:var(--rm-plum);font-weight:700}

.onb{display:flex;flex-direction:column}
.onb-head{display:flex;gap:12px;align-items:flex-end;margin-top:4px}
.onb-head img{width:70px;height:104px;object-fit:contain;flex-shrink:0;filter:drop-shadow(0 8px 10px rgba(90,66,116,.25))}
.onb-head h3{font-family:var(--serif);font-weight:600;font-size:20px;color:var(--rm-plum);line-height:1.15}
.onb-head p{font:600 11.5px var(--sans);color:var(--rm-ink-3);line-height:1.45;margin-top:4px}
.onb-dots{display:flex;gap:3px;margin-top:10px}
.onb-dots i{height:4px;flex:1;border-radius:2px;background:#e3d8f0}
.onb-dots i.on{background:var(--rm-mauve)}
.onb .chips{margin-top:8px}
.onb .chipbtn{padding:9px 12px;font-size:12px;line-height:1.25;text-align:left}
.onb-nav{display:flex;gap:8px;margin-top:14px;align-items:center}
.onb-nav .sp{flex:1}
.onb-note{margin-top:10px;padding:10px 12px;border-radius:12px;background:#fff4dc;color:#7a4b00;font:700 11.5px var(--sans);line-height:1.45;display:flex;gap:8px;align-items:flex-start}
.onb-note .ms{font-size:18px;flex-shrink:0}
.agree{display:flex;gap:8px;align-items:flex-start;margin-top:12px;font:600 11.5px var(--sans);color:var(--rm-ink-2);line-height:1.5}
.agree input{margin-top:3px;flex-shrink:0}
.agree a{color:var(--rm-mauve)}

/* ---- livelier avatar: sway + breathe idle, a hop when tapped, little moments with a thought bubble ---- */
@keyframes alive{0%{transform:scale(1) rotate(0)}25%{transform:scale(1.015,.985) rotate(-1.3deg)}50%{transform:scale(1,1.012) rotate(0)}75%{transform:scale(1.015,.985) rotate(1.3deg)}100%{transform:scale(1) rotate(0)}}
@keyframes aliveflip{0%{transform:scaleX(-1) rotate(0)}25%{transform:scale(-1.015,.985) rotate(1.3deg)}50%{transform:scale(-1,1.012) rotate(0)}75%{transform:scale(-1.015,.985) rotate(-1.3deg)}100%{transform:scaleX(-1) rotate(0)}}
@keyframes joyhop{0%{transform:translateY(0) scale(1)}30%{transform:translateY(-12%) scale(1.04,.96)}60%{transform:translateY(0) scale(.97,1.03)}100%{transform:translateY(0) scale(1)}}
@keyframes joyhopflip{0%{transform:translateY(0) scaleX(-1)}30%{transform:translateY(-12%) scale(-1.04,.96)}60%{transform:translateY(0) scale(-.97,1.03)}100%{transform:translateY(0) scaleX(-1)}}
@keyframes momentpop{0%{transform:scale(.92)}55%{transform:scale(1.05)}100%{transform:scale(1)}}
@keyframes momentpopflip{0%{transform:scale(-.92,.92)}55%{transform:scale(-1.05,1.05)}100%{transform:scaleX(-1)}}
.avatar.idle img{animation:alive 4.4s ease-in-out infinite;transform-origin:50% 100%}
.avatar.flip.idle img{animation:aliveflip 4.4s ease-in-out infinite;transform-origin:50% 100%}
.avatar.joy img{animation:joyhop .55s ease-out!important;transform-origin:50% 100%}
.avatar.flip.joy img{animation:joyhopflip .55s ease-out!important}
.avatar.moment img{animation:momentpop .45s ease-out!important;transform-origin:50% 100%}
.avatar.flip.moment img{animation:momentpopflip .45s ease-out!important}
.thought{position:absolute;left:62%;top:-4px;transform:translate(-50%,-100%) scale(.5);opacity:0;background:#fff;border-radius:16px 16px 16px 4px;padding:5px 9px;font-size:17px;line-height:1;box-shadow:0 6px 14px rgba(90,66,116,.25);transition:opacity .3s,transform .3s;pointer-events:none;z-index:3}
.thought.on{opacity:1;transform:translate(-50%,-115%) scale(1)}
.thought::after{content:'';position:absolute;left:14px;bottom:-7px;width:7px;height:7px;border-radius:50%;background:#fff}
/* wallpaper framing (Adjust my photo) */
.wallpaper.adjusting{cursor:grab;touch-action:none;outline:2px dashed rgba(255,255,255,.85);outline-offset:-6px}
.wallpaper.adjusting:active{cursor:grabbing}
.wallpaper.adjusting .dicons{display:none}
.wadjust{margin:8px 0 10px;padding:10px 12px;background:var(--rm-paper-2);border-radius:14px}
.wadjust[hidden]{display:none}
.wadjust p{display:flex;gap:6px;align-items:flex-start;font:600 12px var(--sans);color:var(--rm-ink-2);margin:0 0 6px;line-height:1.4}
.wadjust p .ms{font-size:18px;color:var(--rm-plum)}
.wadjust input[type=range]{width:100%;accent-color:var(--rm-plum)}
/* the sky follows the sun (ovu-sun.js sets data-sky): the plate shows a day sky; sunrise, sunset and night tint the window and the room */
.win-night .sun{position:absolute;left:50%;top:78%;width:36%;aspect-ratio:1;border-radius:50%;transform:translate(-50%,-50%);background:radial-gradient(circle,#fff7dc 0 34%,#ffd58f 52%,rgba(255,196,128,0) 72%);opacity:0;transition:opacity 1s ease}
.win-night .moon,.win-night i.s{transition:opacity 1s ease}
:is(.room-img.day,.occ-img,.swap-patch){transition:filter 1.2s ease}
.scene[data-sky="sunrise"] .win-night{opacity:.9;background:linear-gradient(180deg,#a9bde9 0%,#f6c8d2 50%,#ffd8a6 78%,#ffeacc 100%)}
.scene[data-sky="sunset"] .win-night{opacity:.92;background:linear-gradient(180deg,#6f5cab 0%,#d98aab 44%,#f5a46d 72%,#ffd08b 100%)}
.scene[data-sky="sunrise"] .win-night .sun,.scene[data-sky="sunset"] .win-night .sun{opacity:1}
.scene[data-sky="sunset"] .win-night .sun{top:84%}
.scene[data-sky="sunrise"] .win-night .moon,.scene[data-sky="sunset"] .win-night .moon,.scene[data-sky="sunrise"] .win-night i.s,.scene[data-sky="sunset"] .win-night i.s{opacity:0}
.scene[data-sky="night"] .win-night{opacity:.97}
.scene[data-sky="sunrise"]:not(.is-night) :is(.room-img.day,.win-patch,.occ-img,.swap-patch){filter:sepia(.06) saturate(1.05) hue-rotate(-4deg) brightness(.98)}
.scene[data-sky="sunset"]:not(.is-night) :is(.room-img.day,.win-patch,.occ-img,.swap-patch){filter:sepia(.16) saturate(1.12) hue-rotate(-8deg) brightness(.95)}
/* asleep, or after sunset, the window shows the night sky whatever the hour */
.scene:is(.is-night,.sky-night) .win-night{background:radial-gradient(circle at 40% 30%,#4a3b78,#1e1742 72%)}
.scene:is(.is-night,.sky-night) .win-night .sun{opacity:0}
.scene:is(.is-night,.sky-night) .win-night .moon,.scene:is(.is-night,.sky-night) .win-night i.s{opacity:1}
/* diary: photo choices, recognition state, amount box; date and time never overflow on iOS */
.grid2>*{min-width:0}
.input[type=date],.input[type=time]{-webkit-appearance:none;appearance:none;display:block;min-width:0;max-width:100%;box-sizing:border-box;min-height:46px;text-align:left}
.snapbtns{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
.snapbtns .btn{cursor:pointer;min-width:0;justify-content:center}
.fdstate{display:flex;gap:8px;align-items:flex-start;margin-top:10px;padding:10px 12px;border-radius:14px;background:#fff;box-shadow:var(--rm-shadow);font:600 12.5px var(--sans);color:var(--rm-ink-2);line-height:1.45}
.fdstate .ms{font-size:20px;color:var(--rm-plum);flex:0 0 auto}
.fdstate.ok .ms{color:#3f8f6b}
.fdstate.busy .ms{animation:spin 1.6s linear infinite}
.fdstate>div{min-width:0}
.fdstate b{display:block;color:var(--rm-ink);font-weight:800}
.fdstate .row{margin-top:8px;flex-wrap:wrap}
.igrams{display:flex;align-items:center;gap:3px;font:600 11px var(--sans);color:var(--rm-ink-3);flex:0 0 auto}
.igrams .input{width:64px;padding:6px;font-size:12px}
@keyframes spin{to{transform:rotate(360deg)}}
/* barcode tab: type a name to search */
.bchead{font:800 10.5px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--rm-ink-3);margin:12px 0 4px}
.bcbusy{font:600 12px var(--sans);color:var(--rm-ink-3);padding:8px 2px}
#bcResults .result img{width:38px;height:38px;object-fit:contain;border-radius:8px;background:#fff;flex:0 0 auto}
.snapbtns label{text-transform:none;letter-spacing:normal;font:700 13px var(--sans)}
/* processed-food score (NOVA) */
.nchip{display:inline-flex;align-items:center;gap:4px;margin-top:4px;padding:2px 8px 2px 6px;border-radius:99px;font:700 10.5px var(--sans);color:var(--rm-ink);background:color-mix(in srgb,var(--nc) 16%,#fff);border:1px solid color-mix(in srgb,var(--nc) 45%,transparent);white-space:nowrap;max-width:100%;overflow:hidden;text-overflow:ellipsis}
.nchip::before{content:'';width:7px;height:7px;border-radius:50%;background:var(--nc);flex:0 0 auto}
.nrow{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:6px 0 2px}
.nrow small{font:500 11px var(--sans);color:var(--rm-ink-3)}
.nbar-wrap{margin:10px 0 6px;padding:10px 12px;background:#fff;border-radius:14px;box-shadow:var(--rm-shadow)}
.nbar-t{display:flex;align-items:center;gap:6px;font:800 12px var(--sans);color:var(--rm-plum);margin-bottom:6px}
.nbar{display:flex;height:12px;border-radius:99px;overflow:hidden;background:#eee9f3;gap:2px}
.nbar i{display:block;min-width:4px}
.nbar-h{font:700 12.5px var(--sans);color:var(--rm-ink);margin-top:6px}
.nbar-k{display:flex;flex-wrap:wrap;gap:4px 10px;margin-top:4px;font:600 10.5px var(--sans);color:var(--rm-ink-3)}
.nbar-k i{display:inline-block;width:7px;height:7px;border-radius:50%;margin-right:4px;vertical-align:0}
.foodlog .nbar-wrap{box-shadow:none;background:var(--rm-paper-2);padding:8px 10px}
.nmini{display:block;margin-top:3px;font:700 10.5px var(--sans);color:var(--rm-ink-3)}
.item .nchip{margin-left:0}
.nbar-t{justify-content:space-between}
.nbar-t>span{display:flex;align-items:center;gap:6px}
.nwords{border:1px solid rgba(107,82,142,.18);background:var(--rm-paper-2);color:var(--rm-ink-2);border-radius:99px;padding:3px 9px;font:700 10.5px var(--sans);cursor:pointer;white-space:nowrap}
.nbar-c{font:500 11px var(--sans);color:var(--rm-ink-3);margin-top:3px;line-height:1.4}
/* onboarding topic icon (replaces the avatar pose) */
.onb-head{align-items:center}
.onb-ico{width:64px;height:64px;flex-shrink:0;border-radius:22px;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 30% 25%,#fff 0,#f4ecfb 38%,#e6d8f5 100%);box-shadow:inset 0 -4px 8px rgba(120,90,160,.18),0 8px 16px rgba(90,66,116,.18)}
.onb-ico .ms{font-size:34px;color:var(--rm-plum);font-variation-settings:'FILL' 1}
.onb .chips[data-key="lastPeriodStatus"]{margin-top:8px}
/* no-stress pet care */
.prop.owned.pet{pointer-events:auto;cursor:pointer}
.prop.owned.pet:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:12px}
.petmood{position:absolute;left:50%;top:-6%;transform:translate(-50%,-100%);width:24px;height:24px;border-radius:50%;background:#fff;box-shadow:0 4px 10px rgba(70,40,100,.2);display:flex;align-items:center;justify-content:center;animation:petmood 2.6s ease-in-out infinite;pointer-events:none}
.petmood .ms{font-size:15px;color:var(--rm-plum)}
@keyframes petmood{0%,100%{transform:translate(-50%,-100%)}50%{transform:translate(-50%,-118%)}}
.prop.owned.pet.napping::after{content:'z z';position:absolute;right:-8%;top:-4%;font:800 11px var(--sans);color:#fff;text-shadow:0 1px 4px rgba(40,20,70,.6);animation:petz 3s ease-in-out infinite;pointer-events:none}
@keyframes petz{0%{opacity:0;transform:translateY(4px)}40%{opacity:1}100%{opacity:0;transform:translateY(-8px)}}
.poop{position:absolute;transform:translate(-50%,-100%);z-index:8;border:none;background:none;padding:0;cursor:pointer;animation:poopin .5s ease-out}
.poop img{width:100%;display:block;filter:drop-shadow(0 3px 4px rgba(70,40,100,.25))}
.poop:focus-visible{outline:2px solid #fff;outline-offset:2px;border-radius:10px}
.poop.poof{animation:poof .6s ease-out forwards}
@keyframes poopin{0%{transform:translate(-50%,-100%) scale(.2);opacity:0}70%{transform:translate(-50%,-100%) scale(1.12)}100%{transform:translate(-50%,-100%) scale(1);opacity:1}}
@keyframes poof{0%{opacity:1;transform:translate(-50%,-100%) scale(1)}100%{opacity:0;transform:translate(-50%,-135%) scale(1.5);filter:brightness(2) blur(2px)}}
.petfx{position:absolute;transform:translate(-50%,-100%);z-index:9;pointer-events:none}
.petfx.bowl{animation:bowlin 2.3s ease-out forwards}
.petfx.ball{animation:ballbounce 2.3s ease-in-out forwards}
@keyframes bowlin{0%{opacity:0;transform:translate(-50%,-70%) scale(.6)}15%{opacity:1;transform:translate(-50%,-100%) scale(1)}85%{opacity:1}100%{opacity:0}}
@keyframes ballbounce{0%{opacity:0;transform:translate(-170%,-100%)}10%{opacity:1}25%{transform:translate(-120%,-270%)}40%{transform:translate(-80%,-100%)}55%{transform:translate(-45%,-200%)}70%{transform:translate(-25%,-100%)}85%{opacity:1;transform:translate(-12%,-150%)}100%{opacity:0;transform:translate(0,-100%)}}
.prop.owned.pet.eat img{animation:peteat .5s ease-in-out 4}
.prop.owned.pet.hop img{animation:pethop .45s ease-out 4}
.prop.owned.pet.wiggle img{animation:petwiggle .35s ease-in-out 4}
@keyframes peteat{0%,100%{transform:rotate(0)}50%{transform:rotate(6deg) translateY(4%)}}
@keyframes pethop{0%,100%{transform:translateY(0)}45%{transform:translateY(-22%)}}
@keyframes petwiggle{0%,100%{transform:rotate(0)}25%{transform:rotate(-7deg)}75%{transform:rotate(7deg)}}
.petheart{position:absolute;z-index:10;pointer-events:none;color:#ff7aa2;font-size:16px;animation:petheart 1.6s ease-out forwards;font-variation-settings:'FILL' 1}
@keyframes petheart{0%{opacity:0;transform:translateY(0) scale(.6)}20%{opacity:1}100%{opacity:0;transform:translateY(-36px) scale(1.15)}}
.bubble.petbub{min-width:210px}
.pethead{padding:4px 8px 8px;border-bottom:1px solid rgba(107,82,142,.1);margin-bottom:2px}
.pethead b{display:block;font:600 16px var(--serif);color:var(--rm-plum)}
.pethead>span{display:block;font:600 11.5px var(--sans);color:var(--rm-ink-2);margin-top:2px;line-height:1.35}
.pethead b .petname{display:inline-flex;vertical-align:middle;margin-left:4px;padding:3px 6px;border-radius:999px;background:rgba(157,134,196,.14)}.pethead b .petname .ms{font-size:15px;color:var(--rm-plum)}
.petstat{display:flex;gap:14px;margin-top:6px}
.petstat>span{display:flex;align-items:center;gap:4px}
.petstat .ms{font-size:15px;color:var(--rm-mauve)}
.pips{display:inline-flex;gap:2px}
.pips i{width:7px;height:7px;border-radius:50%;background:#e9e1f2}
.pips i.on{background:#ff8fb1}
@media (prefers-reduced-motion: reduce){.petfx,.petheart,.petmood,.poop,.prop.owned.pet img{animation:none!important}}

/* data notice: same dreamy ground as the welcome, scrolls on short phones */
.welcome.consent{z-index:90;justify-content:flex-start;padding:0;text-align:left}
.c-scroll{width:100%;max-width:440px;height:100%;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:calc(22px + env(safe-area-inset-top,0px)) 20px calc(26px + env(safe-area-inset-bottom,0px));display:flex;flex-direction:column;gap:12px;margin:0 auto}
.c-head{display:flex;align-items:center;gap:12px}
.c-moon{position:relative;width:66px;flex:none}
.c-moon::before{content:'';position:absolute;inset:-45%;border-radius:50%;background:radial-gradient(circle,rgba(255,243,204,.8),rgba(222,204,255,.4) 45%,transparent 70%);filter:blur(6px);animation:moonglow 5s ease-in-out infinite}
.c-moon img{position:relative;width:100%;display:block;filter:drop-shadow(0 0 14px rgba(255,236,190,.7)) drop-shadow(0 8px 12px rgba(90,66,116,.28));animation:moonfloat 6s ease-in-out infinite}
.c-head h2{text-shadow:0 0 18px rgba(255,255,255,.85)}
.c-scroll{position:relative;z-index:1}
.c-head .w-brand{margin:0 0 2px}
.c-head h2{font-family:var(--serif);font-weight:600;font-size:25px;line-height:1.15;color:var(--rm-plum);margin:0;text-wrap:balance}
.c-head p{font:600 12.5px/1.45 var(--sans);color:var(--rm-ink-2);margin:4px 0 0}
.c-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.c-list li{display:flex;gap:11px;align-items:flex-start;background:rgba(255,255,255,.62);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.95);border-radius:18px;padding:11px 13px;box-shadow:0 8px 22px rgba(90,66,116,.12),inset 0 1px 0 rgba(255,255,255,.9),0 0 0 1px rgba(214,196,255,.35)}
.c-list .ms{flex:none;width:32px;height:32px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(145deg,#fbe3ef,#e6dbf7);color:var(--rm-plum);font-size:19px;box-shadow:0 0 12px rgba(236,214,255,.8)}
.c-list b{display:block;font:800 13.5px/1.3 var(--sans);color:var(--rm-plum)}
.c-list span:not(.ms){display:block;font:600 12.5px/1.45 var(--sans);color:var(--rm-ink-2);margin-top:2px}
.c-opt{display:flex;gap:10px;align-items:flex-start;background:rgba(255,255,255,.5);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);border:1.5px dashed rgba(150,120,190,.45);border-radius:16px;padding:11px 13px;cursor:pointer}
.c-opt input{margin-top:3px;width:18px;height:18px;accent-color:var(--rm-plum);flex:none}
.c-opt b{display:block;font:800 13px/1.3 var(--sans);color:var(--rm-plum)}
.c-opt small{display:block;font:600 12px/1.45 var(--sans);color:var(--rm-ink-3);margin-top:2px}
.c-kid{display:flex;gap:6px;align-items:center;font:700 12px/1.4 var(--sans);color:var(--rm-ink-2);margin:0}
.c-kid .ms{font-size:17px;color:var(--rm-mauve)}
.consent #cAgree{width:100%;justify-content:center;min-height:48px;font-size:15px}
.c-small{font:600 11.5px/1.5 var(--sans);color:var(--rm-ink-3);margin:0;text-align:center}
.c-small a{color:var(--rm-plum);font-weight:800}

/* acupressure: a plain finger-measure key instead of traditional units */
.fingerkey{margin-top:10px;background:rgba(255,255,255,.6);border:1px solid rgba(150,120,190,.25);border-radius:14px;padding:10px 12px}
.fingerkey b{display:block;font:800 12.5px var(--sans);color:var(--rm-plum);margin-bottom:6px}
.fingerkey div{display:flex;flex-wrap:wrap;gap:6px}
.fingerkey span{display:inline-flex;align-items:center;gap:5px;font:700 11.5px var(--sans);color:var(--rm-ink-2);background:#fff;border-radius:999px;padding:4px 9px 4px 4px}
.fingerkey i{font-style:normal;width:20px;height:20px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(145deg,#fbe3ef,#e6dbf7);color:var(--rm-plum);font-weight:900;font-size:11px}
.fingerkey small{display:block;font:600 11px/1.45 var(--sans);color:var(--rm-ink-3);margin-top:7px}

/* evidence: short numbered citations; the full note lives on evidence.html */
.guide .ev .evrefs{display:flex;flex-wrap:wrap;gap:5px;margin:2px 0 4px}
.guide .ev .evrefs a{display:inline-flex;align-items:center;gap:5px;margin:0;background:#fff;border:1px solid rgba(150,120,190,.22);border-radius:999px;padding:3px 4px 3px 9px;font:700 11px/1.2 var(--sans);color:var(--rm-plum)}
.guide .ev .evrefs a i{font-style:normal;font:800 9.5px var(--sans);letter-spacing:.03em;background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-mauve);border-radius:999px;padding:3px 6px}
.guide .ev span a{display:inline;margin:0;color:var(--rm-plum);font-weight:800}

/* tabs: a soft focus ring that belongs to the room, never the browser's blue box */
.nav a{outline:none;-webkit-tap-highlight-color:transparent;transition:color .2s,background .2s}
.nav a:focus-visible{box-shadow:0 0 0 2px #fff,0 0 0 4px var(--rm-lilac,#c9b6e6);background:rgba(231,220,245,.6)}
.nav a.on{background:rgba(231,220,245,.55)}
/* You sheet */
.you-card{display:flex;align-items:center;gap:12px;background:linear-gradient(135deg,#efe4fb,#fbe3ea);border-radius:20px;padding:10px 14px;border:1.5px solid rgba(201,182,230,.6)}
.you-card img{width:52px;height:auto;flex:none;filter:drop-shadow(0 6px 8px rgba(90,66,116,.22))}
.you-card b{display:block;font-family:var(--serif);font-weight:600;font-size:20px;color:var(--rm-plum)}
.you-card span{display:block;font:700 12px var(--sans);color:var(--rm-ink-2);margin-top:2px}
.ygroup{margin-top:14px;display:flex;flex-direction:column;gap:6px}
.ygroup .lbl{display:block;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin-bottom:2px}
.yrow{display:flex;align-items:center;gap:11px;width:100%;text-align:left;background:#fff;border:1px solid rgba(150,120,190,.16);border-radius:16px;padding:10px 12px;cursor:pointer;text-decoration:none;color:inherit;font:inherit}
.yrow>.ms:first-child{width:34px;height:34px;border-radius:11px;display:grid;place-items:center;background:linear-gradient(145deg,#fbe3ef,#e6dbf7);color:var(--rm-plum);font-size:19px;flex:none}
.yrow b{display:block;font:800 13.5px/1.25 var(--sans);color:var(--rm-plum)}
.yrow small{display:block;font:600 11.5px/1.35 var(--sans);color:var(--rm-ink-3);margin-top:1px}
.yrow>span:nth-child(2){flex:1;min-width:0}
.yrow .go{color:var(--rm-ink-3);font-size:20px}
.yrow:active{transform:scale(.99)}
.yrow[data-yact="delete"] b{color:#9b2f3c}
#yDel .row{margin-top:8px}
.btn.danger{background:#fbe3e6;color:#9b2f3c}

/* the tab bar stays visible and tappable above open sheets, like a real app */
.nav{z-index:65}
.sheet{bottom:var(--navh,64px);max-height:calc(88% - var(--navh,64px))}
.sheet:not(.on){box-shadow:none}
.sheet:not(.on){transform:translateY(calc(100% + var(--navh,64px) + 24px))}

/* remembered periods calendar */
.rhelp{margin:2px 0 8px}
.rquick{margin:0 0 8px}
.rquick .chips{gap:6px}
.rcal{max-height:min(30vh,250px);overflow-y:auto;-webkit-overflow-scrolling:touch;background:#fff;border-radius:18px;border:1px solid rgba(150,120,190,.18);padding:6px 10px 10px;scroll-snap-type:y proximity}
.rmonth{padding:6px 0 8px;border-bottom:1px dashed rgba(107,82,142,.14);scroll-snap-align:start}
.rmonth:last-child{border-bottom:none}
.rmhead{display:flex;align-items:center;justify-content:space-between;gap:8px;position:sticky;top:-6px;background:#fff;padding:6px 0;z-index:1}
.rmhead b{font-family:var(--serif);font-weight:600;font-size:14px;color:var(--rm-plum)}
.rapprox{border:1.5px dashed rgba(150,120,190,.45);background:#fff;border-radius:999px;padding:5px 10px;font:700 11px var(--sans);color:var(--rm-ink-2);display:inline-flex;align-items:center;gap:3px;cursor:pointer}
.rapprox .ms{font-size:14px}
.rapprox.on{border-style:solid;border-color:var(--rm-mauve);background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-plum)}
.rgrid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:3px}
.rgrid i{font:800 10px var(--sans);color:var(--rm-ink-3);text-align:center;font-style:normal;padding:2px 0}
.rday{aspect-ratio:1;min-height:30px;max-height:34px;border:none;background:transparent;border-radius:50%;font:700 13px var(--sans);color:var(--rm-ink);cursor:pointer;display:grid;place-items:center;transition:background .15s,transform .1s}
.rday:disabled{color:rgba(107,82,142,.25);cursor:default}
.rday.today{box-shadow:inset 0 0 0 1.5px var(--rm-mauve)}
.rday.on{background:linear-gradient(145deg,#e58aa8,#c4577d);color:#fff;box-shadow:0 4px 10px rgba(196,87,125,.35)}
.rday.on.rcont{background:#f3c9d6;color:#8e3a5a;box-shadow:none}   /* a later day of the same period */
.rday:not(:disabled):active{transform:scale(.92)}
.rstatus{display:flex;align-items:center;gap:6px;margin-top:10px;font:700 12.5px/1.4 var(--sans);color:var(--rm-plum)}
.rstatus .ms{font-size:18px;color:#c4577d}

/* metric slider bars */
.mslider{margin-top:12px;background:#fff;border:1px solid rgba(150,120,190,.18);border-radius:18px;padding:10px 14px 8px}
.mstop{display:flex;align-items:baseline;justify-content:space-between;gap:8px}
.mstop label{font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3)}
.mstop output{font:600 13px var(--sans);color:var(--rm-ink-2);text-align:right}
.mstop output b{font-family:var(--serif);font-weight:600;font-size:26px;color:var(--rm-plum);line-height:1}
.mstop output small{display:block;font:700 11px var(--sans);color:var(--rm-ink-3)}
.mstop output em{font-style:normal;font:700 12px var(--sans);color:var(--rm-mauve)}
.mrange{-webkit-appearance:none;appearance:none;width:100%;height:28px;background:transparent;margin:6px 0 0;--fill:50%;cursor:pointer}
.mrange::-webkit-slider-runnable-track{height:10px;border-radius:999px;background:linear-gradient(90deg,#e8a3bf 0,#a98ad0 var(--fill),#ece4f6 var(--fill))}
.mslider:not(.set) .mrange::-webkit-slider-runnable-track{background:#ece4f6}
.mrange::-webkit-slider-thumb{-webkit-appearance:none;width:28px;height:28px;margin-top:-9px;border-radius:50%;background:#fff;border:3px solid var(--rm-mauve);box-shadow:0 4px 10px rgba(90,66,116,.3)}
.mrange::-moz-range-track{height:10px;border-radius:999px;background:#ece4f6}
.mrange::-moz-range-progress{height:10px;border-radius:999px;background:linear-gradient(90deg,#e8a3bf,#a98ad0)}
.mrange::-moz-range-thumb{width:24px;height:24px;border-radius:50%;background:#fff;border:3px solid var(--rm-mauve)}
.mrange:focus-visible{outline:none}
.mrange:focus-visible::-webkit-slider-thumb{box-shadow:0 0 0 4px rgba(201,182,230,.6)}
.mscale{display:flex;justify-content:space-between;font:700 10px var(--sans);color:var(--rm-ink-3)}
.weighart{display:grid;place-items:center;margin:2px 0 -4px}
.weighart img{width:92px;filter:drop-shadow(0 8px 10px rgba(90,66,116,.25))}
.whist{display:grid;grid-template-columns:repeat(auto-fill,minmax(92px,1fr));gap:6px}
.whist div{background:#fff;border-radius:12px;padding:6px 8px;border:1px solid rgba(150,120,190,.16)}
.whist span{display:block;font:700 10.5px var(--sans);color:var(--rm-ink-3)}
.whist b{font:800 14px var(--sans);color:var(--rm-plum)}
.prop.owned.tool{pointer-events:auto;cursor:pointer}
.prop.owned.tool:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:12px}
.slotchip{display:inline-block;font:800 9.5px var(--sans);font-style:normal;letter-spacing:.03em;background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-mauve);border-radius:999px;padding:2px 7px;margin-left:4px;vertical-align:2px}

/* arrange: turn a piece (mirror) or put it back in the inventory */
.prop.owned.flip{transform:translate(-50%,-100%) scaleX(-1)}
.prop.owned.flip .petmood{transform:scaleX(-1)}
.prop.owned.pet.napping.flip::after{transform:scaleX(-1)}
.propctl{position:absolute;transform:translate(-50%,-100%);z-index:20;display:flex;align-items:center;gap:4px;background:rgba(255,255,255,.96);border-radius:999px;padding:4px 5px 4px 10px;box-shadow:0 8px 20px rgba(60,30,90,.28);white-space:nowrap;pointer-events:auto;animation:pop2 .2s ease-out}
.propctl b{font:800 11px var(--sans);color:var(--rm-plum);margin-right:2px}
.propctl button{display:inline-flex;align-items:center;gap:3px;border:none;background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-plum);border-radius:999px;padding:6px 9px;font:800 11px var(--sans);cursor:pointer}
.propctl button .ms{font-size:15px}
.propctl button[data-pc="store"]{background:#fbe3ea;color:#a04a66}

/* food diary: three tabs and numbered cards instead of one long column */
.dtabs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:4px;background:var(--rm-lilac-2,#e7dcf5);border-radius:16px;padding:4px;margin-bottom:10px;position:sticky;top:-4px;z-index:3}
.dtabs button{border:none;background:transparent;border-radius:12px;padding:8px 4px;font:800 12px var(--sans);color:var(--rm-ink-2);display:flex;align-items:center;justify-content:center;gap:4px;cursor:pointer}
.dtabs button .ms{font-size:17px}
.dtabs button.on{background:#fff;color:var(--rm-plum);box-shadow:0 3px 10px rgba(90,66,116,.14)}
.dsec{background:#fff;border:1px solid rgba(150,120,190,.16);border-radius:18px;padding:10px 12px 12px;margin-bottom:10px}
.dsec>h4{display:flex;align-items:center;gap:7px;font:800 13px var(--sans);color:var(--rm-plum);margin:0 0 2px}
.dsec>h4 i{font-style:normal;width:22px;height:22px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(145deg,#fbe3ef,#e6dbf7);font:900 11px var(--sans);color:var(--rm-plum)}
.dsec>h4 small{font:700 11px var(--sans);color:var(--rm-ink-3);margin-left:auto}
.dsec .field:first-of-type{margin-top:8px}
.dpane[data-pane="today"] .guide,.dpane[data-pane="today"]>.field{margin-top:4px}

/* packaged products: one row per product, pack sizes as chips */
.pgroup{display:flex;flex-direction:column;gap:4px}
.pgroup .result{width:100%}
.psizes{display:flex;flex-wrap:wrap;align-items:center;gap:5px;padding:0 4px 6px 52px}
.psizes span{font:800 10px var(--sans);letter-spacing:.05em;text-transform:uppercase;color:var(--rm-ink-3);margin-right:2px}
.psizes .chipbtn{padding:5px 10px;font-size:11.5px}
.calhint{display:flex;align-items:center;gap:5px;margin:4px 0 2px}
.calhint .ms{font-size:16px;color:var(--rm-mauve)}

/* Today card: one short line per topic */
.daylist{list-style:none;margin:6px 0 2px;padding:0;display:flex;flex-direction:column;gap:5px}
.daylist li{display:flex;gap:8px;align-items:flex-start;font:600 13px/1.4 var(--sans);color:var(--rm-ink-2)}
.daylist .ms{flex:none;width:22px;height:22px;border-radius:8px;display:grid;place-items:center;background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-plum);font-size:15px;margin-top:-1px}

/* acupressure: what it is for, tradition kept apart from research */
.acuuse{margin-top:10px;background:linear-gradient(135deg,#f6eefc,#fdf0f4);border-radius:16px;padding:10px 12px;display:flex;flex-direction:column;gap:7px}
.acuuse>div{display:flex;gap:8px;align-items:flex-start}
.acuuse .ms{flex:none;font-size:17px;color:var(--rm-mauve);margin-top:1px}
.acuuse b{display:block;font:800 10.5px var(--sans);letter-spacing:.05em;text-transform:uppercase;color:var(--rm-ink-3)}
.acuuse span span,.acuuse>div>span:last-child{font:600 12.5px/1.45 var(--sans);color:var(--rm-ink-2)}
.acuuse .evrefs{display:flex;flex-wrap:wrap;gap:5px;margin:2px 0 0}
.acuuse .evrefs a{display:inline-flex;align-items:center;gap:5px;background:#fff;border:1px solid rgba(150,120,190,.22);border-radius:999px;padding:3px 4px 3px 9px;font:700 11px/1.2 var(--sans);color:var(--rm-plum);text-decoration:none}
.acuuse .evrefs a i{font-style:normal;font:800 9.5px var(--sans);background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-mauve);border-radius:999px;padding:3px 6px}

/* teas and herbs */
.dsec.teas>h4 .ms{font-size:18px;color:var(--rm-mauve)}
.tea{border:1px solid rgba(150,120,190,.16);border-radius:14px;margin-top:6px;background:#fff}
.tea summary{display:flex;align-items:center;gap:10px;padding:9px 10px;cursor:pointer;list-style:none}
.tea summary::-webkit-details-marker{display:none}
.tea summary>.ms:first-child{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;background:linear-gradient(145deg,#fbe3ef,#e6dbf7);color:var(--rm-plum);font-size:18px;flex:none}
.tea summary>span:nth-child(2){flex:1;min-width:0}
.tea summary b{display:block;font:800 13px var(--sans);color:var(--rm-plum)}
.tea summary small{display:block;font:600 11.5px/1.35 var(--sans);color:var(--rm-ink-3)}
.tea summary .go{color:var(--rm-ink-3);transition:transform .2s}
.tea[open] summary .go{transform:rotate(180deg)}
.teabody{padding:0 12px 10px 52px}
.teabody p{font:600 12px/1.45 var(--sans);color:var(--rm-ink-2);margin:4px 0}
.teabody p b,.teacare p b{display:block;font:800 10px var(--sans);letter-spacing:.05em;text-transform:uppercase;color:var(--rm-ink-3)}
.teabody p.care{color:#8a3b56}
.teabody .evrefs,.teacare .evrefs,.steamore .evrefs{display:flex;flex-wrap:wrap;gap:5px}
.teabody .evrefs a,.teacare .evrefs a,.steamore .evrefs a{display:inline-flex;align-items:center;gap:5px;background:#fff;border:1px solid rgba(150,120,190,.22);border-radius:999px;padding:3px 4px 3px 9px;font:700 11px/1.2 var(--sans);color:var(--rm-plum);text-decoration:none}
.teabody .evrefs a i,.teacare .evrefs a i,.steamore .evrefs a i{font-style:normal;font:800 9.5px var(--sans);background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-mauve);border-radius:999px;padding:3px 6px}
/* greenhouse plants (ovu-greenhouse.js): tappable pots on the bench, table and shelf, and the pet-safety note on a houseplant card */
.ghplant.tappable{pointer-events:auto;cursor:pointer}
.ghplant.tappable:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:12px}
.ghplant img{transition:transform .2s;transform-origin:50% 100%}
/* the greenhouse herb planters (21 Oct): drawn SVG planters by the door, tapped like the pots */
.nb.ghbed{transform:translate(-50%,-95%);pointer-events:auto;cursor:pointer;--cs:.8}
.ghbed svg{width:100%;height:auto;display:block;overflow:visible;transition:transform .2s;transform-origin:50% 100%}
.ghbed:hover svg,.ghbed:active svg{transform:scale(1.06)}
.ghbed:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:10px}
.bedcard .bedpic.herbpic{padding:4px}
.ghbrewrow{margin:0 0 10px}
.ghbrewrow .chips{margin-top:6px}
.ghplant.tappable:hover img,.ghplant.tappable:active img{transform:scale(1.06)}
.petsafe{margin-top:10px;border-radius:14px;padding:10px 12px;background:#eef7f0;border:1px solid #cfe6d5}
.petsafe.warn{background:#fdf0f4;border-color:#f3d3df}
.petsafe>b{display:flex;align-items:center;gap:6px;font:800 12.5px var(--sans);color:#2f6b45;margin-bottom:4px}
.petsafe.warn>b{color:#8a3b56}
.petsafe>b .ms{font-size:17px}
.petsafe p{font:600 12px/1.45 var(--sans);color:var(--rm-ink-2);margin:6px 0 0}
.petsafe a{color:inherit;text-decoration:underline}
.teacare{margin-top:10px;background:#fdf0f4;border:1px solid #f3d3df;border-radius:14px;padding:10px 12px}
.teacare>b{display:flex;align-items:center;gap:6px;font:800 12.5px var(--sans);color:#8a3b56;margin-bottom:4px}
.teacare>b .ms{font-size:17px}
.teacare p{font:600 12px/1.45 var(--sans);color:var(--rm-ink-2);margin:6px 0 0}
.teacare p b{color:#8a3b56}

/* Listen with Erin */
.podshelf{display:flex;gap:12px;align-items:flex-end;background:linear-gradient(135deg,#efe4fb,#fbe3ea);border:1.5px solid rgba(201,182,230,.6);border-radius:20px;padding:10px 12px 12px;margin-bottom:10px}
.podshelf:empty{display:none}
.podshelf-erin{width:54px;flex:none;filter:drop-shadow(0 6px 8px rgba(90,66,116,.22));margin-bottom:-4px}
.podshelf>div{min-width:0;flex:1}
.podshelf .lbl{display:block;font:800 10.5px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3)}
.podshelf b{display:block;font-family:var(--serif);font-weight:600;font-size:17px;color:var(--rm-plum);line-height:1.2;margin-top:1px}
.podshelf small{display:block;font:600 11.5px var(--sans);color:var(--rm-ink-2);margin-top:2px}
.podshelf .row .btn{min-width:0}
.podplayer{background:#fff;border:1px solid rgba(150,120,190,.18);border-radius:20px;padding:12px;box-shadow:0 8px 22px rgba(90,66,116,.08)}
.podhead{display:flex;gap:11px;align-items:center}
.podhead img{width:58px;height:58px;border-radius:14px;object-fit:cover;flex:none;background:#f1e9f7}
.podhead small{display:block;font:800 10.5px var(--sans);letter-spacing:.04em;text-transform:uppercase;color:var(--rm-ink-3)}
.podhead b{display:block;font-family:var(--serif);font-weight:600;font-size:18px;line-height:1.2;color:var(--rm-plum)}
.podhead span{display:block;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2);margin-top:2px}
.podseek{margin-top:10px}
.podtimes{display:flex;justify-content:space-between;font:700 11px var(--sans);color:var(--rm-ink-3);margin-top:-2px}
.podctl{display:flex;justify-content:center;align-items:center;gap:18px;margin:6px 0 4px}
.podctl button{border:none;background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-plum);width:46px;height:46px;border-radius:50%;display:grid;place-items:center;cursor:pointer;position:relative}
.podctl button small{position:absolute;font:900 8.5px var(--sans);top:17px}
.podctl button.big{width:62px;height:62px;background:linear-gradient(135deg,#a98ad0,#7a5c96);color:#fff;box-shadow:0 8px 20px rgba(122,92,150,.35)}
.podctl button.big .ms{font-size:32px}
.podopts{display:flex;flex-direction:column;gap:4px;margin-top:6px}
.podopts .lbl{font:800 10px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin-top:4px}
.podopts .chipbtn{padding:5px 10px;font-size:11.5px}
.podthemes{display:flex;flex-wrap:wrap;gap:5px;margin-top:8px}
.podthemes .slotchip{margin:0}
.podquote{margin:10px 0 0;padding:8px 12px;border-left:3px solid var(--rm-lilac,#c9b6e6);font-family:var(--serif);font-style:italic;font-size:14.5px;line-height:1.45;color:var(--rm-plum);background:#faf6fd;border-radius:0 12px 12px 0}
.podsug{display:flex;gap:8px;align-items:flex-start;margin-top:10px;font:600 12.5px/1.45 var(--sans);color:var(--rm-ink-2)}
.podsug .ms{color:var(--rm-mauve);font-size:18px;flex:none}
.linkbtn{border:none;background:none;padding:0;font:800 12.5px var(--sans);color:var(--rm-plum);text-decoration:underline;text-underline-offset:2px;cursor:pointer}
.podlist{display:flex;flex-direction:column;gap:6px}
.podlist .podlocked{margin:10px 0 2px}
.lbl-row #podShuffle{margin-left:auto;font:800 12px var(--sans)}
.podep{display:flex;align-items:center;gap:10px;width:100%;text-align:left;background:#fff;border:1px solid rgba(150,120,190,.16);border-radius:14px;padding:8px 10px;cursor:pointer;font:inherit;color:inherit}
.podep.on{border-color:var(--rm-mauve);background:#faf6fd}
.podep i{font-style:normal;flex:none;width:30px;height:30px;border-radius:10px;display:grid;place-items:center;background:linear-gradient(145deg,#fbe3ef,#e6dbf7);font:900 11px var(--sans);color:var(--rm-plum)}
.podep>span:nth-child(2){flex:1;min-width:0}
.podep b{display:block;font:800 13px/1.3 var(--sans);color:var(--rm-plum)}
.podep small{display:block;font:600 11px var(--sans);color:var(--rm-ink-3)}
.podep em.bar{display:block;height:3px;border-radius:3px;margin-top:4px;background:linear-gradient(90deg,var(--rm-mauve) var(--p),#ece4f6 var(--p))}
.podep>.ms{color:var(--rm-mauve);font-size:22px}
.podmini{position:absolute;left:10px;right:10px;bottom:calc(var(--navh,64px) + 8px);z-index:64;display:flex;align-items:center;gap:6px;background:rgba(255,255,255,.96);backdrop-filter:blur(12px);border:1px solid rgba(201,182,230,.6);border-radius:18px;padding:6px 6px 6px 8px;box-shadow:0 10px 26px rgba(60,30,90,.2)}
.podmini[hidden]{display:none}
.podmini-open{flex:1;min-width:0;display:flex;align-items:center;gap:8px;border:none;background:none;text-align:left;cursor:pointer;font:inherit;color:inherit;padding:0}
.podmini-open img{width:36px;height:36px;border-radius:50%;flex:none}
.podmini-open span{min-width:0}
.podmini-open b{display:block;font:800 12.5px var(--sans);color:var(--rm-plum);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.podmini-open small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3)}
.podmini-btn{width:38px;height:38px;border-radius:50%;border:none;background:var(--rm-lilac-2,#e7dcf5);color:var(--rm-plum);display:grid;place-items:center;cursor:pointer;flex:none}

/* camera: zoom and pan the home */
.scene{touch-action:pan-y}
.scene.zoomed{touch-action:none;cursor:grab}
.scene.zoomed:active{cursor:grabbing}
.camctl{position:absolute;right:10px;top:46%;transform:translateY(-50%);z-index:30;display:flex;flex-direction:column;gap:6px}
.camctl button{width:36px;height:36px;border-radius:50%;border:1px solid rgba(255,255,255,.9);background:rgba(255,255,255,.82);backdrop-filter:blur(10px);box-shadow:0 4px 14px rgba(90,66,116,.18);color:var(--rm-plum);display:grid;place-items:center;cursor:pointer;padding:0}
.camctl button .ms{font-size:20px}
.camctl button:disabled{opacity:.45;cursor:default}
.scene.quiet .camctl{opacity:0;pointer-events:none}

/* Rhythme Plus */
.pluschip{font-style:normal;display:inline-block;font:800 9px var(--sans);letter-spacing:.04em;background:linear-gradient(135deg,#f3d49b,#e8a3bf);color:#5a3a2a;border-radius:999px;padding:2px 7px;margin-left:4px;vertical-align:2px}
.podep.locked{opacity:.92}
.podep.locked>.ms{color:#b48a3a}
.pluslock{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px;margin-top:10px;background:linear-gradient(135deg,#fff6e6,#fbe3ea);border:1px solid #f1d9b0;border-radius:16px;padding:10px 12px}
.pluslock>.ms{color:#b48a3a;font-size:22px}
.pluslock>span:nth-child(2){flex:1;min-width:140px;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2)}
.pluslock b{display:block;font:800 13px var(--sans);color:var(--rm-plum)}
.pluslock .btn{flex:0 0 auto;min-width:0}
.podctl.hidden{display:none}
.plushero{display:flex;gap:12px;align-items:flex-end;background:linear-gradient(135deg,#fff6e6,#efe4fb);border:1.5px solid #f1d9b0;border-radius:20px;padding:10px 12px 12px;margin-bottom:10px}
.plushero img{width:60px;flex:none;filter:drop-shadow(0 6px 8px rgba(90,66,116,.22));margin-bottom:-4px}
.plushero b{display:block;font-family:var(--serif);font-weight:600;font-size:18px;color:var(--rm-plum);line-height:1.2}
.plushero span{display:block;font:600 12.5px/1.45 var(--sans);color:var(--rm-ink-2);margin-top:3px}

.c-choices{display:block}.c-choices>#cChoices{display:flex;flex-direction:column;gap:8px;margin-top:8px} /* a closed details with display:flex showed its content (live check, 22 Oct) */
summary.c-lbl{cursor:pointer;list-style-position:inside}
.c-lbl{font:800 10.5px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3)}
.c-opt.c-req{border-style:solid;border-color:rgba(122,92,150,.45);background:rgba(255,255,255,.7)}
.consent #cAgree:disabled{opacity:.5;cursor:not-allowed}
.bub .jit{display:block;margin-top:6px;font-size:12px;color:var(--rm-ink-3);line-height:1.45}
.labelsnap{display:flex;flex-direction:column;gap:4px;margin:6px 0 4px}
.labelsnap .msg{margin-top:4px}
.labelsnap.busy label{opacity:.6;pointer-events:none}
.lsnote{display:flex;gap:6px;align-items:flex-start;margin:6px 0;font-weight:600;color:#8a3a58}
.lstext{width:100%;margin:6px 0;font:500 13px var(--sans);line-height:1.4;resize:vertical}

.aculist button span em{display:block;font:700 11px var(--sans);color:var(--rm-mauve);font-style:normal;margin-top:2px;line-height:1.3}

/* ---- health import sheet (You > Import from Apple Health or Google), ovu-health.js ---- */
.imp-card{margin-top:12px;background:#fff;border:1px solid rgba(150,120,190,.16);border-radius:18px;padding:12px 14px}
.imp-head{display:flex;gap:10px;align-items:center}
.imp-head>.ms{width:38px;height:38px;border-radius:12px;display:grid;place-items:center;background:linear-gradient(145deg,#fbe3ef,#e6dbf7);color:var(--rm-plum);font-size:20px;flex:none}
.imp-head b{display:block;font:800 14px var(--sans);color:var(--rm-plum)}
.imp-head small{display:block;font:600 11.5px var(--sans);color:var(--rm-ink-3);margin-top:1px}
.imp-steps{margin:10px 0 0;padding-left:18px;font:600 12px/1.5 var(--sans);color:var(--rm-ink-2)}
.imp-steps li+li{margin-top:4px}
.imp-steps b{color:var(--rm-plum)}
.imp-card .help{margin-top:8px}
.imp-pick{margin-top:10px;width:100%;cursor:pointer}
.imp-pick.busy{opacity:.55;pointer-events:none}
.ibar{height:8px;border-radius:4px;background:var(--rm-paper-2);overflow:hidden;margin-top:14px}
.ibar i{display:block;height:100%;width:0;border-radius:4px;background:linear-gradient(90deg,#a98ad0,#7a5c96);transition:width .25s}
.cal-day.p-unspecified{background:#f3b9cb}
.imp-how{margin-top:8px;font:700 12px var(--sans);color:var(--rm-plum)}
.imp-how summary{cursor:pointer;color:var(--rm-mauve)}
.imp-have .row .btn{flex:1 1 auto;min-width:0;padding:10px 10px;font-size:12px}
.imp-srcs{display:flex;gap:6px;flex-wrap:wrap;margin-top:8px}
.imp-src{font:800 9.5px var(--sans);letter-spacing:.05em;text-transform:uppercase;font-style:normal;color:var(--rm-plum);background:var(--rm-lilac-2);border-radius:99px;padding:3px 8px}
.imp-line{font:600 12px/1.45 var(--sans);color:var(--rm-ink-2);margin-top:8px}
.ibars{display:flex;align-items:flex-end;gap:3px;height:46px;margin-top:10px;padding:4px 2px 0;border-bottom:1.5px solid rgba(107,82,142,.14)}
.ibars i{flex:1;min-width:4px;max-width:22px;border-radius:4px 4px 1px 1px;background:linear-gradient(180deg,#b9a0dc,#8a6cae)}
.imp-range{margin-top:10px}
.imp-kinds{display:flex;flex-direction:column;gap:6px;margin-top:12px}
.imp-kind{display:flex;align-items:center;gap:10px;background:var(--rm-paper);border:1.5px solid rgba(150,120,190,.18);border-radius:14px;padding:10px 12px;cursor:pointer}
.imp-kind input{width:22px;height:22px;accent-color:#7a5c96;flex:none;margin:0}
.imp-kind>.ms{color:var(--rm-mauve);font-size:20px;flex:none}
.imp-kind b{display:block;font:800 13px var(--sans);color:var(--rm-plum)}
.imp-kind small{display:block;font:600 11.5px/1.35 var(--sans);color:var(--rm-ink-3);margin-top:1px}
.imp-kind small.imp-kept{color:#7a5c96}
.imp-kind:has(input:checked){border-color:#a98ad0;background:#f6f0fd}
.imp-kind.off{opacity:.55;cursor:default}
.imp-later{margin-top:12px;font:600 12px/1.45 var(--sans);color:var(--rm-ink-2)}
.imp-later summary{cursor:pointer;font-weight:800;color:var(--rm-mauve)}
.imp-later ul{margin:6px 0 0;padding-left:18px}
.imp-later li b{color:var(--rm-plum)}
.btn:disabled{opacity:.55;cursor:not-allowed;box-shadow:none}
.imp-done{margin-top:10px;padding:10px 12px 12px;border-radius:18px;background:linear-gradient(135deg,#f6f0fd,#fbe9f1)}
.imp-done .lbl{display:block;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3)}
.imp-note{display:flex;gap:6px;align-items:center;font:700 11.5px var(--sans);color:#7a5c96;background:#f6f0fd;border-radius:12px;padding:7px 10px;margin:6px 0 2px}
.imp-note .ms{font-size:16px}

/* ---- 18 Oct: garden, Dream Street, plaza and walking like a game (ovu-walk.js, ovu-garden.js, ovu-street.js, ovu-community.js) ---- */
.minimap{position:absolute;right:10px;bottom:14px;z-index:31;display:flex;gap:2px;background:rgba(255,255,255,.72);backdrop-filter:blur(10px);border:1px solid rgba(255,255,255,.9);border-radius:999px;padding:4px;box-shadow:0 6px 18px rgba(90,66,116,.18)}
.minimap button{border:none;background:transparent;border-radius:999px;padding:5px 6px;display:flex;flex-direction:column;align-items:center;gap:1px;color:var(--rm-ink-3);cursor:pointer;min-width:38px}
.minimap button .ms{font-size:18px;display:block;width:20px;height:20px;line-height:20px;overflow:hidden;text-align:center} /* a fixed box, so the pill never widens before the icon font arrives */
.minimap button i{font:800 8px var(--sans);font-style:normal;letter-spacing:.04em;text-transform:uppercase}
.minimap button.on{background:var(--rm-lilac-2);color:var(--rm-plum)}
.minimap.hidden{display:none}
/* the where-you-are pill (Jamie, 20 Oct: no place shortcuts, a map instead) */
.minimap #mapBtn{flex-direction:row;gap:5px;padding:5px 12px 5px 8px;min-width:0;color:var(--rm-plum)}
.minimap #mapBtn i{font:800 10px var(--sans);letter-spacing:.06em;max-width:44vw;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.minimap #homeQuick{background:var(--rm-lilac-2);color:var(--rm-plum);padding:4px 7px}
.minimap #homeQuick[hidden]{display:none}
/* the map sheet */
.mapnow{display:flex;gap:10px;align-items:flex-start;margin:2px 0 10px}
.mapnow>.ms{font-size:22px;color:var(--rm-mauve);margin-top:1px}
.mapnow b{display:block;font:800 15px var(--sans);color:var(--rm-plum)}
.mapnow small{display:block;font:600 12px var(--sans);color:var(--rm-ink-2);line-height:1.4;margin-top:2px}
.mapplate{position:relative;width:100%;max-width:100%;border-radius:18px;overflow:hidden;background:var(--rm-paper-2);border:1px solid rgba(150,120,190,.18);margin-bottom:12px}
.mapplate img{display:block;width:100%;height:100%;object-fit:cover}
.mapme{position:absolute;width:16px;height:16px;margin:-8px 0 0 -8px;border-radius:50%;background:#e2557e;border:3px solid #fff;box-shadow:0 0 0 0 rgba(226,85,126,.55),0 2px 6px rgba(60,30,80,.35);animation:mapping 1.8s ease-out infinite}
@keyframes mapping{0%{box-shadow:0 0 0 0 rgba(226,85,126,.55),0 2px 6px rgba(60,30,80,.35)}100%{box-shadow:0 0 0 16px rgba(226,85,126,0),0 2px 6px rgba(60,30,80,.35)}}
.mapexit{position:absolute;transform:translate(-50%,-115%);display:flex;align-items:center;gap:3px;white-space:nowrap;background:rgba(255,255,255,.92);color:var(--rm-plum);font:800 10px var(--sans);padding:3px 7px 3px 4px;border-radius:999px;box-shadow:0 2px 8px rgba(90,66,116,.22)}
.mapexit .ms{font-size:13px}
.worldmap{position:relative;width:100%;max-width:100%;background:linear-gradient(160deg,#f6effb,#eef6f1);border:1px solid rgba(150,120,190,.18);border-radius:18px;margin-bottom:10px}
/* the wider world (21 Oct): one plate of open country three of the map's boxes wide and three tall; the places sit in its top-left box, the rest is unbuilt land, edge to edge */
.worldzoom{position:relative;width:100%;max-width:100%;overflow:hidden;border-radius:18px;border:1px solid rgba(150,120,190,.18);background:#dfeadb;touch-action:none;margin-bottom:8px;user-select:none;-webkit-user-select:none}
.worldwide{position:absolute;left:0;top:0;width:300%;height:auto;aspect-ratio:5/4;transform-origin:0 0;background:#dfeadb url(assets/room/dream/map-world.webp) 0 0/100% 100% no-repeat;will-change:transform}
.worldmap.known{position:absolute;left:0;top:0;width:33.3333%;height:33.3333%;margin:0;border:0;border-radius:0;box-shadow:none;background:none;overflow:visible} /* the places and their paths over the plate's top-left box; the plate draws the land under them */
.worldzoom.far .mapnode b,.worldzoom.far .mapnode em{display:none}
.worldzoom.far .mapnode{width:44px}
.zoomctl{display:flex;gap:8px;align-items:center;margin-bottom:10px}
.zoomctl button{width:40px;height:40px;flex:0 0 40px;border-radius:50%;border:1px solid rgba(150,120,190,.3);background:#fff;color:var(--rm-plum);display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
.zoomctl .zoomnote{font:600 12px/1.35 var(--sans);color:var(--rm-ink-2)}
.worldlines{position:absolute;inset:0;width:100%;height:100%;overflow:visible} /* a place set just outside the box keeps its path */
.worldlines path{fill:none;stroke:#c9b6e6;stroke-width:1.6;stroke-dasharray:2.4 2;vector-effect:non-scaling-stroke}
.mapnode{position:absolute;transform:translate(-50%,-50%);display:flex;flex-direction:column;align-items:center;gap:2px;width:64px;border:0;background:none;padding:0;cursor:pointer;color:var(--rm-plum)}
.mapnode>.ms{width:34px;height:34px;line-height:34px;font-size:19px;text-align:center;border-radius:50%;background:#fff;box-shadow:0 2px 8px rgba(90,66,116,.2);border:2px solid #fff}
.mapnode b{font:800 9.5px/1.15 var(--sans);text-align:center}
.mapnode em{font:800 8px var(--sans);font-style:normal;letter-spacing:.05em;text-transform:uppercase;color:#fff;background:#e2557e;border-radius:999px;padding:1px 6px}
.mapnode.here>.ms{border-color:#e2557e;color:#e2557e}
.mapnode.picked>.ms{border-color:var(--rm-mauve);background:var(--rm-lilac-2)}
.mapnode.shut>.ms{opacity:.55}
.maproute{background:#fff;border:1px solid rgba(150,120,190,.16);border-radius:16px;padding:10px 12px;font:600 13px/1.45 var(--sans);color:var(--rm-ink)}
.maproute b{display:block;color:var(--rm-plum);font-weight:800}
.maproute small{display:block;color:var(--rm-ink-2);font-weight:600}
.maproute ol{margin:6px 0 0;padding-left:20px}
.maproute li{margin:3px 0}
.maproute li span{display:block;font:800 10px var(--sans);letter-spacing:.05em;text-transform:uppercase;color:var(--rm-ink-3)}
.maproute .mapgo{width:100%;margin-top:10px;justify-content:center}
.mapsecret{display:flex;gap:7px;align-items:center;margin:9px 0 0;padding:8px 10px;border-radius:12px;background:var(--rm-lilac-2);color:var(--rm-plum);font-weight:700}
.mapsecret .ms{font-size:18px}
@media (prefers-reduced-motion:reduce){.mapme{animation:none}}
.scene:is(.quiet,.is-night,.arranging,.hudon) .minimap{opacity:0;pointer-events:none}
/* the hint and the visit bar share the bottom edge with the mini-map on the right: keep them clear of it */
.hint{left:12px;transform:none;max-width:58%}
.visitbar{right:12px}
.scenefade{position:absolute;inset:0;z-index:60;background:linear-gradient(180deg,#e9ddf6,#d8c8ec);opacity:0;pointer-events:none;transition:opacity .35s ease}
.scene.fading .scenefade{opacity:1;pointer-events:auto}
.scene.arranging .prop.owned.lift{z-index:12!important}
/* neighbours, the garden plot and little effects, all percent-positioned inside #ownedProps */
.nb{position:absolute;transform:translate(-50%,-98.5%);pointer-events:none;filter:drop-shadow(0 1px 1.5px rgba(60,30,80,.22))}
/* seated on a bench (ovu-garden.js seatPlace): feet on the ground line, lap on the seat, width from the seat height, facing the bench's way */
.nb.sitter{transform:translate(-50%,-100%)}
.nb.sitter.faceright img.seated{transform:scaleX(-1)}
.meditator.onseat{transform:translate(-50%,-100%)}
.meditator.onseat.faceright img.seated{transform:scaleX(-1)}
.nb img{width:100%;display:block}
.nb.flip img{transform:scaleX(-1)}
.nbperson{pointer-events:none;cursor:pointer}.nbperson img{pointer-events:auto} /* only her figure, clipped to its outline, takes a tap (22 Oct) */
.nbperson img{animation:alive 4.4s ease-in-out infinite;transform-origin:50% 100%}
.nbperson.flip img{animation:aliveflip 4.4s ease-in-out infinite}
.nbperson.wave img{animation:joyhop .55s ease-out!important}
.nbperson:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:12px}
.nbtag{position:absolute;left:50%;top:-4px;transform:translate(-50%,-100%);background:rgba(255,255,255,.92);border-radius:999px;padding:3px 8px;font:800 10px var(--sans);color:var(--rm-plum);white-space:nowrap;box-shadow:0 3px 10px rgba(90,66,116,.18)}
.plot{position:absolute;transform:translate(-50%,-78%);pointer-events:none;filter:drop-shadow(0 4px 6px rgba(70,40,100,.18))}
.plot svg{width:100%;height:auto;display:block;overflow:visible}
.plot.stage-5 svg{animation:plotsway 5s ease-in-out infinite;transform-origin:50% 90%}
@keyframes plotsway{0%,100%{transform:rotate(-1.5deg)}50%{transform:rotate(1.5deg)}}
.drops{position:absolute;transform:translate(-50%,-100%);height:12%;pointer-events:none;z-index:10}
.drops i{position:absolute;top:0;width:6px;height:9px;border-radius:50% 50% 60% 60%;background:linear-gradient(#dff0ff,#8fc3f0);opacity:0;animation:drop 1.1s ease-in infinite}
@keyframes drop{0%{transform:translateY(0);opacity:0}15%{opacity:.95}100%{transform:translateY(80px);opacity:0}}
.ripple{position:absolute;transform:translate(-50%,-50%);aspect-ratio:2/1;border:2px solid rgba(255,255,255,.85);border-radius:50%;pointer-events:none;animation:ripple 2.2s ease-out forwards}
@keyframes ripple{0%{transform:translate(-50%,-50%) scale(.3);opacity:.9}100%{transform:translate(-50%,-50%) scale(1.6);opacity:0}}
.wish{position:absolute;transform:translate(-50%,-100%);height:12%;pointer-events:none;z-index:10}
.wish i{position:absolute;bottom:0;width:8px;height:8px;border-radius:50%;background:var(--rm-card,#fff);box-shadow:0 0 10px 2px rgba(255,255,255,.8);opacity:0;animation:wish 1.6s ease-out forwards}
@keyframes wish{0%{transform:translateY(0) scale(.5);opacity:0}20%{opacity:1}100%{transform:translateY(-90px) scale(1.2);opacity:0}}
/* sheets: the plot, a neighbour, the noticeboard, teas */
.plotcard{display:flex;gap:12px;align-items:center;background:var(--rm-card,#fff);border-radius:16px;padding:12px;margin-top:10px}
.plotart{width:84px;flex-shrink:0;background:linear-gradient(180deg,#fbe3ea,#e7dcf5);border-radius:14px;padding:6px}
.plotart svg{width:100%;height:auto;display:block}
.plotcard b{font:800 15px var(--sans);color:var(--rm-plum)}
.plotcard p{font-family:var(--serif);font-size:14px;color:var(--rm-ink);margin:3px 0;line-height:1.35}
.plotcard small{font:700 11px var(--sans);color:var(--rm-ink-3)}
.plotcard .bar{margin-top:6px;height:6px;border-radius:99px;background:var(--rm-lilac-2);overflow:hidden}
.plotcard .bar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#f6c9d6,#c9b6e6)}
.notice{display:flex;gap:10px;align-items:flex-start;background:var(--rm-card,#fff);border-radius:16px;padding:10px 12px;margin-top:8px}
.notice>.ms{color:var(--rm-mauve);font-size:20px;flex-shrink:0}
.notice.today{background:linear-gradient(135deg,#fbe3ea,#e7dcf5)}
.notice b{font:800 11px var(--sans);color:var(--rm-ink-3);letter-spacing:.06em;text-transform:uppercase;display:block;margin-bottom:2px}
.notice p{font-family:var(--serif);font-size:14.5px;color:var(--rm-ink);line-height:1.35}
.notice small{display:block;margin-top:3px;font:700 11px var(--sans);color:var(--rm-ink-3)}
.notice.mine{border:1px dashed var(--rm-lilac)}
.teas{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.tea{display:flex;gap:10px;align-items:flex-start;background:var(--rm-card,#fff);border-radius:16px;padding:10px 12px}
.tea>.ms{color:var(--rm-mauve);font-size:22px;flex-shrink:0}
.tea b{display:block;font:800 13px var(--sans);color:var(--rm-plum)}
.tea span:not(.ms){display:block;font-family:var(--serif);font-size:13.5px;color:var(--rm-ink);line-height:1.35}
.tea small{display:block;margin-top:3px;font:600 11px var(--sans);color:var(--rm-ink-3);line-height:1.4}
.tea em{display:block;margin-top:3px;font:700 11px var(--sans);color:#a06b2a;font-style:normal}
@media (prefers-reduced-motion: reduce){.nbperson img,.plot svg,.drops i,.wish i{animation:none!important}.scenefade{transition:none}}
/* ---- 18 Oct, later: walkable store interiors (ovu-shops.js) and the mini-map's store sub-stops ---- */
/* the store row sits in its own pill above the main one, so the walk pad on the left keeps its room */
.shopprop{pointer-events:auto;cursor:pointer}
.shopprop:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:12px}
.shopprop img{transition:transform .2s}
.shopprop:hover img,.shopprop:active img{transform:scale(1.06)}
.shopprop.kind-pet img{animation:petbob 3.4s ease-in-out infinite;transform-origin:50% 100%}
/* no prices on the shelves (the card has them); a small tick marks what is already yours */
.owntick{position:absolute;right:-6%;top:-4%;width:16px;height:16px;border-radius:50%;background:var(--rm-ok,#6ba88a);color:#fff;display:grid;place-items:center;box-shadow:0 2px 6px rgba(60,40,90,.3)}
.owntick .ms{font-size:11px;font-variation-settings:'FILL' 0,'wght' 700,'GRAD' 0,'opsz' 20}
.itemcard{display:flex;gap:12px;align-items:center;background:var(--rm-card,#fff);border-radius:16px;padding:12px;margin-top:10px}
.itemcard img{width:84px;height:84px;object-fit:contain;flex-shrink:0;background:linear-gradient(180deg,#fbe3ea,#e7dcf5);border-radius:14px;padding:6px}
.itemcard p{font-family:var(--serif);font-size:14.5px;color:var(--rm-ink);line-height:1.35}
.itemcard small{display:flex;align-items:center;gap:4px;margin-top:5px;font:700 11.5px var(--sans);color:var(--rm-ink-3)}
.itemcard small .ms{font-size:14px;color:#e58aa8}
@media (prefers-reduced-motion: reduce){.shopprop.kind-pet img{animation:none!important}}

/* Moon Tap: a no-fail breath break (ovu-breathtap.js) */
.btap{position:fixed;inset:0;z-index:120;display:flex;align-items:center;justify-content:center;background:radial-gradient(120% 90% at 50% 10%,#3b2a5e 0%,#1b1330 60%,#120c22 100%);color:#f1e9fb;font-family:var(--sans);overflow:hidden;padding:16px}
.btap[hidden]{display:none}
.btap .w-stars{opacity:.9}
.btap-card{position:relative;z-index:2;width:min(92vw,400px);background:rgba(255,255,255,.08);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border:1px solid rgba(255,255,255,.14);border-radius:24px;padding:20px 18px;display:flex;flex-direction:column;gap:12px;text-align:center}
.btap-card[hidden]{display:none}
.btap-card h2{font-family:var(--serif);font-weight:600;font-size:26px;color:#fff}
.btap-card p{font:600 13px/1.5 var(--sans);color:#d9cdef}
.btap-card .safe{font:600 11.5px/1.5 var(--sans);color:#b9abd6}
.btap-chips{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.btap-chips button{border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.08);color:#f1e9fb;border-radius:999px;padding:8px 12px;font:800 12px var(--sans);cursor:pointer;min-width:0}
.btap-chips button.on{background:#f1e9fb;color:#3b2d52}
.btap-chips button small{display:block;font:600 10px var(--sans);opacity:.8}
.btap .btn.primary{box-shadow:0 10px 26px rgba(117,86,196,.45),0 0 28px rgba(226,210,255,.4)}
.btap .btn.ghost{color:#d9cdef;border-color:rgba(255,255,255,.2)}
.btap-stage{position:absolute;inset:0;z-index:1;touch-action:manipulation;cursor:pointer}
.btap-stage[hidden]{display:none}
.btap-water{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}
.btap-ring,.btap-word,.btap-stop{z-index:1}
.btap-ring{position:absolute;left:50%;top:44%;width:min(62vw,300px);aspect-ratio:1;transform:translate(-50%,-50%) scale(.75);border-radius:50%;border:2px solid rgba(255,255,255,.55);box-shadow:0 0 40px rgba(214,196,255,.45),inset 0 0 40px rgba(214,196,255,.25);display:flex;align-items:center;justify-content:center;will-change:transform;pointer-events:none}
.btap-ring img{width:48%;filter:drop-shadow(0 0 18px rgba(255,236,190,.6));animation:moonfloat 6s ease-in-out infinite}
.btap-word{position:absolute;left:50%;top:calc(44% + min(31vw,150px) + 26px);transform:translateX(-50%);font-family:var(--serif);font-size:26px;color:#fff;letter-spacing:.08em;opacity:.9;pointer-events:none}
.btap-stop{position:absolute;left:50%;bottom:calc(28px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);min-width:140px;flex:none;background:rgba(255,255,255,.12);color:#fff;border:1px solid rgba(255,255,255,.22)}
.btap-petal{position:absolute;width:26px;height:26px;margin:-13px 0 0 -13px;border-radius:50%;background:radial-gradient(circle,#fff7e6 0%,rgba(255,214,236,.85) 35%,rgba(214,196,255,0) 70%);pointer-events:none;animation:btapbloom 1.4s ease-out forwards}
@keyframes btapbloom{0%{transform:scale(.4);opacity:0}20%{opacity:1}100%{transform:scale(4.2);opacity:0}}
.btap-done b{display:block;font-family:var(--serif);font-weight:600;font-size:22px;color:#fff}
body.btap-open{overflow:hidden}
/* the shed's hearts shelf (ovu-farm.js) */
.shedh{display:flex;align-items:center;gap:6px;margin:14px 0 4px;font:800 13px var(--sans);color:var(--rm-plum)}
.shedh .ms{color:#e2557e;font-size:17px}
.shedh small{margin-left:auto;font:800 12px var(--sans);color:var(--rm-ink-2)}
/* Light Flower (ovu-lightflower.js): the same card and stop button as the koi pond, on a near-black night */
.lflower{background:radial-gradient(120% 90% at 50% 30%,#1d1636 0%,#0f0c20 55%,#07060f 100%)}
.lf-canvas{position:absolute;inset:0;width:100%;height:100%;display:block;z-index:0}
.lf-flower{position:absolute;z-index:1;border:0;border-radius:50%;background:transparent;cursor:pointer;-webkit-tap-highlight-color:transparent}
.lf-flower:focus-visible{outline:2px solid rgba(255,236,214,.7);outline-offset:4px}
.lf-word{top:auto;bottom:calc(96px + env(safe-area-inset-bottom,0px));font-size:19px;letter-spacing:.02em;text-align:center;width:min(86vw,360px);color:#efe6ff;text-shadow:0 0 18px rgba(214,196,255,.5)}
.lf-air{display:flex;align-items:center;justify-content:center;gap:8px;font:700 12.5px var(--sans);color:#d9cdef}
.lf-air[hidden]{display:none}
.lf-air input{width:18px;height:18px;accent-color:#c9b6e6}
/* the sound volume, under the switch in the window card */
.volrow{display:flex;align-items:center;gap:8px;margin-top:10px;color:var(--rm-ink-3)}
.volrow input{flex:1;min-width:0;accent-color:var(--rm-mauve)}
.volrow .ms{font-size:18px}
@media(prefers-reduced-motion:reduce){.btap-ring{transition:opacity .6s}.btap-ring img{animation:none}.btap-petal{animation-duration:.8s}}

/* herb and tea pictures (pastel clay icons) on the greenhouse cards and the diary's tea list */
.teaimg{width:64px;height:64px;object-fit:contain;flex:none;filter:drop-shadow(0 4px 6px rgba(90,66,116,.18))}
.tea summary>.teaimg{width:40px;height:40px}
.teas .tea{display:flex;gap:12px;align-items:flex-start}
.teas details.tea{display:block}
/* the plaza tea stall (Jamie, 30 Oct): picture on the left, name with its (i), one line; research and care fold behind the (i) */
.stea{display:flex;gap:12px;align-items:flex-start;background:var(--rm-card,#fff);border-radius:16px;padding:10px 12px}
.stea .teaimg{width:64px;height:64px}
.steatext{flex:1;min-width:0}
.steatext>b{display:flex;align-items:center;gap:6px;font:800 13.5px var(--sans);color:var(--rm-plum)}
.steai{width:22px;height:22px;font-size:12px}
.steatext>span{display:block;margin-top:2px;font-family:var(--serif);font-size:13.5px;color:var(--rm-ink);line-height:1.35}
.steamore{margin-top:8px;padding:8px 10px;border-radius:12px;background:rgba(239,231,247,.55)}
.steamore[hidden]{display:none}
.steamore p{margin:0 0 6px;font:600 12px/1.45 var(--sans);color:var(--rm-ink-2)}
.steamore p:last-child{margin-bottom:0}
.steamore b{font-weight:800;color:var(--rm-plum)}
.steamore .care b{color:#a06b2a}                          /* a foldable tea card stacks its summary over its body; the flex row is for the plain tea rows */

/* Jamie, 18 Oct 23:35: the joystick is gone (tap-to-walk replaces it); until the walk cycle lands, walking is a gentle step bob, not a hop */
.walkpad{display:none!important}
.avatar.walking img{animation:stepbob .42s ease-in-out infinite}
.avatar.flip.walking img{animation:stepbobflip .42s ease-in-out infinite}
@keyframes stepbob{0%,100%{transform:translateY(0) rotate(0deg)}25%{transform:translateY(-1.5%) rotate(-1.2deg)}75%{transform:translateY(-1.5%) rotate(1.2deg)}}
@keyframes stepbobflip{0%,100%{transform:translateY(0) scale(-1,1) rotate(0deg)}25%{transform:translateY(-1.5%) scale(-1,1) rotate(1.2deg)}75%{transform:translateY(-1.5%) scale(-1,1) rotate(-1.2deg)}}

/* ---- 19 Oct: tap to walk (ovu-walk.js): a ring where you tapped, inside the plate so it zooms with the camera ---- */
.tapring{position:absolute;width:9%;aspect-ratio:1.9/1;transform:translate(-50%,-50%) scale(.5);border-radius:50%;border:2.5px solid rgba(255,255,255,.95);box-shadow:0 0 14px rgba(255,255,255,.7),inset 0 0 10px rgba(201,182,230,.6);opacity:0;pointer-events:none;z-index:4}
.tapring.on{animation:tapring .7s ease-out forwards}
.tapring.bad{border-color:rgba(212,112,122,.95);box-shadow:0 0 12px rgba(212,112,122,.5)}
.tapring.on.bad{animation:tapringbad .42s ease-out forwards}
@keyframes tapring{0%{opacity:0;transform:translate(-50%,-50%) scale(.45)}25%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(1.35)}}
@keyframes tapringbad{0%{opacity:1;transform:translate(-50%,-50%) scale(.9)}50%{transform:translate(-50%,-50%) scale(1) translateX(2%)}100%{opacity:0;transform:translate(-50%,-50%) scale(1)}}
@media (prefers-reduced-motion: reduce){.tapring.on{animation:none;opacity:.9;transform:translate(-50%,-50%) scale(1)}}
/* ---- 19 Oct: the walk cycle (ovu-walk.js): a strip of frames inside the avatar, shown only while she moves ---- */
.walkcycle{display:none;position:absolute;left:50%;bottom:0;overflow:hidden;transform:translateX(-50%);pointer-events:none;will-change:transform}
.walkcycle img{display:block;width:800%;height:auto;will-change:transform;transition:none!important}
.avatar.cycling .walkcycle{display:block}
.avatar.cycling #avatarImg{visibility:hidden}
.avatar.cycling .walkcycle img{animation:none!important}
.avatar.flip .walkcycle{transform:translateX(-50%) scaleX(-1)}
.avatar.flip.cycling .walkcycle img{transform:none}
/* ---- 19 Oct: a bought thing sparkles off the shelf (ovu-shops.js soldAway) ---- */
.shopprop.sold img{animation:soldaway .7s ease-in forwards}
@keyframes soldaway{0%{transform:scale(1);opacity:1}60%{transform:scale(1.12) translateY(-6%);opacity:.9}100%{transform:scale(.3) translateY(-30%);opacity:0}}
.soldfx{position:absolute;inset:-20% -20% -10% -20%;pointer-events:none}
.soldfx i{position:absolute;width:7px;height:7px;border-radius:50%;background:#fff;box-shadow:0 0 8px 2px rgba(255,255,255,.9);opacity:0;animation:soldspark .7s ease-out forwards}
.soldfx i:nth-child(1){left:10%;top:40%}.soldfx i:nth-child(2){left:80%;top:30%;animation-delay:.08s}.soldfx i:nth-child(3){left:45%;top:5%;animation-delay:.16s}.soldfx i:nth-child(4){left:65%;top:70%;animation-delay:.12s}
@keyframes soldspark{0%{transform:scale(.4);opacity:0}30%{opacity:1}100%{transform:scale(1.4) translateY(-14px);opacity:0}}
@media (prefers-reduced-motion: reduce){.shopprop.sold img,.soldfx i{animation:none!important;opacity:0}}
/* ---- 19 Oct: sitting on a bench (ovu-garden.js sitDown): the seated sprite stands in, the avatar steps aside ---- */
.scene.sitting #avatar{opacity:0;pointer-events:none}
.sitter{pointer-events:auto;cursor:pointer;transform:translate(-50%,-62%)}
.sitter img{animation:breathe 3.2s ease-in-out infinite;transform-origin:50% 100%}
.sitter:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:12px}
/* Dream Street after hours */
.closedcard{margin-top:12px;background:var(--rm-card);border-radius:20px;padding:22px 16px;text-align:center;box-shadow:var(--rm-shadow)}
.closedcard .ms{font-size:40px;color:var(--rm-mauve)}
.closedcard b{display:block;font-family:var(--serif);font-weight:600;font-size:20px;color:var(--rm-plum);margin-top:6px}
.closedcard p{font:600 12.5px/1.5 var(--sans);color:var(--rm-ink-2);margin-top:6px}

/* the mat: one suggestion for now, every practice one tap away, this week in three numbers */
.matnow{display:flex;align-items:center;gap:12px;margin-top:12px;background:linear-gradient(135deg,var(--rm-lilac-2),var(--rm-blush-2));border-radius:20px;padding:12px 14px}
.matnow>.ms{font-size:28px;color:var(--rm-plum);flex:none}
.matnow>div{flex:1;min-width:0}
.matnow b{display:block;font-family:var(--serif);font-weight:600;font-size:17px;color:var(--rm-plum);line-height:1.15}
.matnow small{display:block;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2);margin-top:2px}
.matnow .btn{flex:none;min-width:0;padding:10px 16px}
.mattiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:10px}
.mattile{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;background:var(--rm-card);border:1px solid rgba(150,120,190,.14);border-radius:16px;padding:11px 12px;cursor:pointer;font:inherit;color:inherit;min-width:0}
.mattile>.ms{font-size:22px;color:var(--rm-mauve);margin-bottom:2px}
.mattile b{font:800 13px/1.2 var(--sans);color:var(--rm-plum)}
.mattile small{font:600 11px/1.35 var(--sans);color:var(--rm-ink-3)}
.matweek{display:flex;justify-content:space-around;margin-top:10px;background:var(--rm-paper-2);border-radius:14px;padding:9px 6px;font:600 11.5px var(--sans);color:var(--rm-ink-2)}
.matweek b{font:800 15px var(--sans);color:var(--rm-plum);margin-right:3px}
.matlast{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.matlast li{display:flex;justify-content:space-between;align-items:center;font:700 12px var(--sans);color:var(--rm-ink);background:var(--rm-card);border-radius:12px;padding:8px 10px}
.matlast small{font:600 11px var(--sans);color:var(--rm-ink-3)}
/* Movement (ovu-exercise.js): the week bar against WHO's 150 to 300 minutes, activity and effort pickers, the list */
.mvweek{margin-top:12px;background:var(--rm-card);border:1px solid rgba(150,120,190,.14);border-radius:18px;padding:12px 14px}
.mvhead{display:flex;align-items:baseline;gap:8px}
.mvhead b{font:800 28px/1 var(--sans);color:var(--rm-plum)}
.mvhead span:not(.ms){flex:1;font:700 12px var(--sans);color:var(--rm-ink-2)}
.mvbar{position:relative;height:12px;border-radius:99px;background:var(--rm-paper-2);margin-top:10px;overflow:hidden}
.mvbar i{position:absolute;top:0;bottom:0;left:0;border-radius:99px}
.mvbar .range{background:rgba(127,190,140,.35)}
.mvbar .fill{background:linear-gradient(90deg,#9b7fd0,#6b4fa6)}
.mvscale{position:relative;height:16px;font:700 10px var(--sans);color:var(--rm-ink-3)}
.mvscale span{position:absolute;top:2px;transform:translateX(-50%)}
.mvscale span:first-child{transform:none}
.mvline{font:700 12.5px/1.45 var(--sans);color:var(--rm-ink);margin-top:2px}
.mvacts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px}
.mvact{display:flex;flex-direction:column;align-items:center;gap:3px;text-align:center;background:#fff;border:1.5px solid rgba(107,82,142,.14);border-radius:14px;padding:8px 4px;cursor:pointer;font:700 11px/1.2 var(--sans);color:var(--rm-ink-2);min-width:0}
.mvact .ms{font-size:22px;color:var(--rm-mauve)}
.mvact.on{background:var(--rm-mauve);border-color:var(--rm-mauve);color:#fff}
.mvact.on .ms{color:#fff}
.mvvars{display:flex;flex-direction:column;gap:6px}
.mvvar{display:flex;justify-content:space-between;align-items:center;gap:10px;text-align:left;background:#fff;border:1.5px solid rgba(107,82,142,.14);border-radius:14px;padding:9px 12px;cursor:pointer;font:inherit;color:var(--rm-ink)}
.mvvar b{font:700 12.5px/1.3 var(--sans)}
.mvvar small{flex:none;font:700 11px var(--sans);color:var(--rm-ink-3)}
.mvvar.on{border-color:var(--rm-mauve);background:var(--rm-lilac-2)}
.mvquick{margin-top:8px}
.mvcheck{display:flex;align-items:center;gap:8px;margin-top:12px;font:700 12.5px var(--sans);color:var(--rm-ink-2);cursor:pointer}
.mvcheck input{width:18px;height:18px;accent-color:#7b5db3;flex:none}
.mvpreview{margin-top:12px;font:700 12px/1.45 var(--sans);color:var(--rm-plum);background:var(--rm-paper-2);border-radius:12px;padding:9px 12px}
.mvlist li{gap:8px}
.mvlist li>span{display:flex;flex-direction:column;min-width:0;flex:1}
.mvlist li>span small{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mvlist li>small{flex:none;text-align:right}
.mvdel{flex:none;border:none;background:transparent;color:var(--rm-ink-3);cursor:pointer;border-radius:10px;padding:4px;font:800 11px var(--sans)}
.mvdel .ms{font-size:18px}
.mvdel.confirm{background:#fbe3e6;color:#9b2f3c;padding:4px 8px}
.mvperiod{margin-top:12px}
.mvperiod .mvflags{margin-top:6px;font:600 12px/1.45 var(--sans);color:var(--rm-ink-2)}
.mvperiod .mvflags b{display:inline;font-weight:800;color:var(--rm-plum)}
.mvperiod .btn{margin-top:8px;flex:none;width:auto;padding:8px 12px}
.mvsec{display:block}

/* ---------- the pets walk (ovu-petwalk.js): a strip box inside the pet's body, shown while it walks; the strip is clipped
 * in its own element so a hat or bow riding on the head anchor can reach past the cell ---------- */
.petwalk{display:none;position:absolute;left:50%;bottom:0;transform:translateX(-50%);pointer-events:auto}
.petwalk::before{content:'';position:absolute;left:14%;right:14%;bottom:-2%;height:11%;border-radius:50%;background:radial-gradient(ellipse at center,rgba(60,30,90,.32) 0%,rgba(60,30,90,.14) 45%,rgba(60,30,90,0) 72%);pointer-events:none}
.petwalk.left{transform:translateX(-50%) scaleX(-1)}
.petwalk>.petclip{position:absolute;left:0;top:0;width:100%;height:100%;overflow:hidden}
.petwalk img.strip{position:absolute;left:0;bottom:0;height:100%;width:auto;max-width:none;display:block;will-change:transform}
.petwalk>img.worn{position:absolute;transform:translate(-50%,-50%);width:auto;display:block;filter:drop-shadow(0 2px 2px rgba(70,40,100,.25))}
.prop.owned.pet.walking.cycling .petwalk{display:block}
.prop.owned.pet.walking.cycling .petbody>img{visibility:hidden}
/* asleep: the curled-up sprite replaces the sitter (and any worn piece) once it has loaded; without one the sitter stays with z z */
.prop.owned.pet .petbody>img.petsleep{display:none;position:absolute;left:0;bottom:0;width:100%}
.prop.owned.pet.sleeping .petbody>img.petsleep{display:block}
.prop.owned.pet.sleeping .petbody>img:not(.petsleep){visibility:hidden}
.prop.owned.pet.sleeping .petbody{animation:petbreathe 4.6s ease-in-out infinite}
@keyframes petbreathe{0%,100%{transform:scale(1,1)}50%{transform:scale(1.012,0.985)}}
@media (prefers-reduced-motion: reduce){.prop.owned.pet.sleeping .petbody{animation:none}}
.prop.owned.pet.walking .petbody{animation:none}
.prop.owned.pet.walking .petmood,.prop.owned.pet.walking::after{display:none}
.prop.owned.pet.walking:not(.cycling) .petbody>img{animation:petstep .4s ease-in-out infinite}
@keyframes petstep{0%,100%{transform:translateY(0)}50%{transform:translateY(-5%)}}
@media (prefers-reduced-motion: reduce){.prop.owned.pet.walking:not(.cycling) .petbody>img{animation:none}}

.street .store .hours{color:var(--rm-ok)}
.street .store.closed .hours{color:var(--rm-ink-3)}
.street .store.closed img{filter:grayscale(.4) opacity(.8)}

/* evidence behind a small (i) (ovu-evinfo.js): the chips stay folded until the (i) is tapped */
.evrefs.evhide{display:none!important}
.ibtn.evi{display:inline-flex;vertical-align:1px;margin-left:5px}
.teacare p .evrefs:not(.evhide),.teabody .evrefs:not(.evhide),.acuuse .evrefs:not(.evhide){margin-top:6px}

/* walking together (ovu-petwalk.js): her line in the thought bubble, the pet's hearts, and a borrowed pet saying goodbye */
.thought.say{font:800 12.5px/1.3 var(--sans);color:var(--rm-plum);width:max-content;max-width:170px;white-space:normal;text-align:center;padding:7px 11px}
.petheart.palheart{font-size:18px}
.prop.owned.pet.palclone{transition:opacity .6s}
.prop.owned.pet.palbye{opacity:0;pointer-events:none}

/* ---------- life-sim HUD, zone name, proximity prompt (ovu-hud.js, ovu-interact.js): screen space, outside the plate ---------- */
.gamehud{position:absolute;left:10px;bottom:16px;z-index:7;pointer-events:none;display:flex;align-items:center;gap:8px;padding:5px 10px 5px 8px;border-radius:99px;background:rgba(255,255,255,.82);backdrop-filter:blur(8px);border:1.5px solid rgba(255,255,255,.9);box-shadow:0 4px 14px rgba(80,50,110,.14);font:700 11.5px var(--sans);color:var(--rm-ink)}
.gamehud .ms{font-size:16px;color:var(--rm-mauve,#8a6aa6)}
.gamehud .gh-day{display:inline-flex;align-items:center;gap:4px}
.gamehud .gh-day small{font-weight:600;color:#7d6b86;margin-left:2px}
.gamehud .gh-stam{display:inline-flex;align-items:center;gap:4px;pointer-events:auto;cursor:pointer;border:0;background:none;font:inherit;color:inherit;padding:8px 4px;margin:-8px -4px;border-radius:99px}
.gamehud .gh-stam:focus-visible{outline:2px solid var(--rm-mauve,#8a6aa6);outline-offset:1px}
.gamehud .gh-stam i{display:inline-block;width:46px;height:7px;border-radius:99px;background:rgba(120,90,150,.18);overflow:hidden}
.gamehud .gh-stam b{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#8fcfb4,#e5c98a);transition:width .4s}
.gamehud.low .gh-stam b{background:linear-gradient(90deg,#e58fa8,#f3b58e)}
/* seed packets and crops to plant: two to a row, the name over its days, nothing wraps word by word */
.seedlist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:10px}
.seedlist.one{grid-template-columns:minmax(0,1fr)}
.seedlist .btn{justify-content:flex-start;text-align:left;padding:10px 12px}
.seedlist .btn>span:not(.ms){display:flex;flex-direction:column;gap:1px;min-width:0}
.seedlist .btn b{font:800 14px var(--sans)}
.seedlist .btn small{font:600 11px/1.35 var(--sans);opacity:.75} /* wraps: a long price line pushed the second column off a phone screen */
.gamehud.low .gh-stam .ms{color:#d9646f}
.gamehud.hidden{display:none}
.zonename{position:absolute;left:50%;top:18%;transform:translate(-50%,0) scale(.96);z-index:7;padding:8px 18px;border-radius:99px;background:rgba(58,42,64,.72);color:#fff;font:800 15px var(--sans);letter-spacing:.02em;opacity:0;pointer-events:none;transition:opacity .4s,transform .4s;backdrop-filter:blur(6px)}
.zonename.on{opacity:1;transform:translate(-50%,0) scale(1)}
.nearpill{position:absolute;z-index:8;transform:translate(-50%,-100%);padding:6px 12px;border-radius:99px;border:1.5px solid rgba(255,255,255,.9);background:rgba(255,255,255,.9);color:var(--rm-ink);font:700 12px var(--sans);box-shadow:0 4px 12px rgba(80,50,110,.18);opacity:0;pointer-events:none;transition:opacity .2s;white-space:nowrap}
.nearpill.on{opacity:1} /* a sign, not a target: taps near her head still walk; tapping the object does the deed (Jamie, 30 Oct: no round button) */
.nearpill[hidden]{display:none}
.nearpill::after{content:'';position:absolute;left:50%;bottom:-6px;width:10px;height:10px;background:inherit;border-right:1.5px solid rgba(255,255,255,.9);border-bottom:1.5px solid rgba(255,255,255,.9);transform:translateX(-50%) rotate(45deg)}
.scene.tired .scene-inner{filter:saturate(.55) brightness(.96)}
@media (prefers-reduced-motion: reduce){.zonename,.nearpill,.gamehud .gh-stam b{transition:none}}

/* ---------- the farm (ovu-farm.js): beds drawn on the plate, the bed and shed sheets ---------- */
.bed{position:absolute;transform:translate(-50%,-50%);width:16.47%;aspect-ratio:1.838;background:none;border:0;padding:0;margin:0;cursor:pointer;pointer-events:auto;clip-path:polygon(47.8% 4%,96% 51.8%,52.2% 96%,4% 48.2%)} /* one bed's soil: E1 + E2 across, 1472x1840 plate */
.bedplants{position:absolute;transform:translate(-50%,-100%);width:13%;aspect-ratio:1;pointer-events:none;filter:drop-shadow(0 3px 4px rgba(70,40,100,.16))}
.bedplants.focus{filter:drop-shadow(0 0 2px #fff) drop-shadow(0 0 4px #7a5c96)}
.bedplants.focus::after{content:"";position:absolute;left:50%;bottom:-25%;width:118%;height:52%;transform:translateX(-50%);border:2px solid #fff;border-radius:50%;box-shadow:0 0 0 2px #7a5c96,0 0 10px rgba(122,92,150,.6)} /* a ring round the bed's soil, so an empty bed shows focus too (Codex, 22 Oct) */
.bedplants .bedcrop,.bedpic .bedcrop{position:absolute;left:22.5%;bottom:0;width:55%;height:auto;display:block;pointer-events:none}
.bedplants .bedcrop.back,.bedpic .bedcrop.back{left:2.5%;bottom:10.8%}.bedplants .bedcrop.front,.bedpic .bedcrop.front{left:42.5%;bottom:-10.8%}
.bedplants .bedover,.bedpic .bedover{position:absolute;inset:0;width:100%;height:100%;display:block;overflow:visible;pointer-events:none}
.bed:focus-visible{outline:2px solid #fff;outline-offset:2px;border-radius:10px}
.bedcard{display:flex;gap:12px;align-items:center;background:var(--rm-card,#fff);border-radius:16px;padding:12px;margin-top:4px}
.bedcard .bedpic{position:relative;width:84px;aspect-ratio:1;flex:none;background:#f6eefb;border-radius:12px;padding:6px}
.bedcard .bedpic svg{width:100%;height:auto;display:block}
.bedcard .bedtext{display:flex;flex-direction:column;gap:3px;font-size:13.5px}
.bedcard .bedtext b{font-size:15px}
.bedcard .weedy{color:#b26a1f;font-weight:700}
.basketlist{list-style:none;margin:6px 0 0;padding:0}
.basketlist li{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--rm-line,#eadcf0);font-size:14px}
.basketlist li .dot{width:14px;height:14px;border-radius:50%;flex:none}
.basketlist li b{margin-left:auto}
.hud-mute{margin-right:6px}
.hud-mute[aria-pressed="true"]{background:var(--rm-plum,#6b528e);color:#fff}
/* Koi Pond (ovu-breathtap.js): three koi swim under the breathing ring; the moon is gone */
.btap-koi{position:absolute;inset:0;z-index:0;pointer-events:none}
.btap-ring img[hidden]{display:none}
/* the food photo choices had no air (Jamie, 20 Oct): icon and words spaced, taller buttons, room above and below */
.snapbtns{gap:10px;margin:12px 0 4px}
.snapbtns .btn{display:flex;align-items:center;justify-content:center;gap:8px;min-height:52px;padding:12px 10px}
.snapbtns .btn .ms{font-size:20px;flex:none}
.snapbtns + .help,.snapbtns ~ p.help{margin-top:12px;line-height:1.5}
.phasechips{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0 12px}
/* the bed card shows soil, not a blank square */
.bedcard .bedpic{overflow:hidden;background:radial-gradient(ellipse 46% 20% at 50% 74%,#8a5a44 0 62%,#6e4535 64% 100%,transparent 102%),linear-gradient(180deg,#f8f1fd,#efe4f7)}
.bedpic .bedover{transform:translateY(-24%)}.bedpic .bedcrop{bottom:24%}.bedpic .bedcrop.back{bottom:33%}.bedpic .bedcrop.front{bottom:15%}

/* plaza servers (ovu-plaza.js): a pill in screen space while she is in the plaza, and the chooser sheet */
.plazapill{position:absolute;left:10px;top:12px;z-index:7;display:inline-flex;align-items:center;gap:6px;max-width:calc(100% - 120px);padding:7px 12px 7px 9px;border:1.5px solid rgba(255,255,255,.9);border-radius:99px;background:rgba(255,255,255,.86);backdrop-filter:blur(8px);box-shadow:0 4px 14px rgba(80,50,110,.14);font:800 12px var(--sans);color:var(--rm-ink);cursor:pointer}
.plazapill[hidden]{display:none}
.plazapill .ms{font-size:17px;color:var(--rm-mauve,#8a6aa6)}
.plazapill .pt{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.plazapill.in{background:rgba(236,226,250,.94)}
.plazalist{display:flex;flex-direction:column;gap:8px;margin-top:6px}
.plazarow{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:16px;background:var(--rm-lilac-2,#efe7fa)}
.plazarow.here{outline:2px solid var(--rm-mauve,#8a6aa6)}
.plazarow>.ms{font-size:20px;color:var(--rm-plum,#5b3f7a)}
.plazarow .pn{flex:1;display:flex;flex-direction:column;min-width:0}
.plazarow .pn b{font:800 14px var(--sans)}
.plazarow .pn small{font:600 12px var(--sans);opacity:.75}
.plazarow .btn{flex:0 0 auto;padding:9px 14px}
.plazarow .btn[disabled]{background:transparent;color:var(--rm-plum,#5b3f7a);box-shadow:none;cursor:default}
#plazaLeaveRow[hidden]{display:none}
/* Plaza friends (ovu-friends.js): cards, people in her group, kind notes. Surfaces use the palette variables, so the
 * night theme (ovu-night.css) turns them dark without rules of its own. */
.fr .lbl,.frplaza .lbl{display:block;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin:14px 0 6px}
.fr .btn.sm{flex:0 0 auto;padding:8px 12px;border-radius:12px;font-size:12px}
.fr .btn[disabled]{opacity:.55;cursor:default}
.frcue{display:flex;gap:6px;align-items:flex-start;margin:8px 0 0;font:600 12px/1.45 var(--sans);color:var(--rm-mauve)}
.frcue .ms{font-size:16px;flex-shrink:0}
.frmsg{min-height:1em;margin:6px 0 0;font:700 12px var(--sans);color:var(--rm-high)}
.frcard,.frperson,.frrow{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:16px;background:var(--rm-card,#fff);margin-top:8px}
.frcard img,.frrow img{width:44px;height:52px;object-fit:contain;flex-shrink:0}
.frperson img{width:72px;height:86px;object-fit:contain;flex-shrink:0}
.frcard>div,.frperson>div{flex:1;min-width:0}
.frcard b,.frperson b,.frwho b{display:block;font:800 14px var(--sans);color:var(--rm-ink)}
.frcard span,.frperson span,.frwho>span,.frwho small{display:block;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2)}
.frwho small{color:var(--rm-ink-3);font-size:11px}
.frwho{flex:1;min-width:0}
.frrow.unread{box-shadow:inset 3px 0 0 var(--rm-mauve)}
.fracts,.frmore{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px}
.frmore[hidden]{display:none}
.frlink{border:none;background:none;padding:4px 2px;font:700 12px var(--sans);color:var(--rm-ink-3);text-decoration:underline;cursor:pointer}
.fr .armed,.frlink.armed{color:var(--rm-high);text-decoration:none;white-space:normal;text-align:left}
.frchips{display:flex;flex-wrap:wrap;gap:6px}
.frchip{display:inline-flex;align-items:center;gap:6px;padding:4px 10px 4px 4px;border:none;border-radius:99px;background:var(--rm-card,#fff);font:700 12px var(--sans);color:var(--rm-ink);cursor:pointer}
span.frchip{cursor:default}
.frchip img{width:24px;height:28px;object-fit:contain}
.frchip.friend{box-shadow:inset 0 0 0 2px var(--rm-blush)}
.frlooks{display:grid;grid-template-columns:repeat(auto-fill,minmax(76px,1fr));gap:6px}
.frlook{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 4px;border:2px solid transparent;border-radius:14px;background:var(--rm-card,#fff);font:700 10.5px var(--sans);color:var(--rm-ink-2);cursor:pointer}
.frlook img{width:44px;height:52px;object-fit:contain}
.frlook.on{border-color:var(--rm-mauve);background:var(--rm-lilac-2)}
.frcheck{display:flex;gap:8px;align-items:flex-start;margin-top:12px;font:700 13px/1.4 var(--sans);color:var(--rm-ink)}
.frcheck input{width:18px;height:18px;margin-top:1px;flex-shrink:0;accent-color:var(--rm-mauve)}
.frhellos,.frphrases,.frreasons{display:flex;flex-direction:column;gap:6px;margin-top:6px}
.frhello,.frphrase,.frreason{text-align:left;padding:11px 12px;border:2px solid transparent;border-radius:14px;background:var(--rm-card,#fff);font:700 13px var(--sans);color:var(--rm-ink);cursor:pointer}
.frhello.on,.frphrase.on,.frreason.on{border-color:var(--rm-mauve);background:var(--rm-lilac-2)}
.frquiet{margin-top:14px}
.frabout{margin-top:14px;font:600 12px/1.5 var(--sans);color:var(--rm-ink-2)}
.frabout summary{cursor:pointer;font-weight:800;color:var(--rm-ink)}
.frplaza{margin-top:10px}
.plazapill.frnew::after{content:'';width:8px;height:8px;border-radius:50%;background:#e0567f;flex-shrink:0}
.nbreal .nbtag{background:rgba(255,255,255,.96);box-shadow:0 0 0 1.5px var(--rm-lilac),0 3px 10px rgba(90,66,116,.18)}
.nbtag .ms{font-size:11px;vertical-align:-1px;margin-right:2px;color:#d0577f}

/* acupressure: the before-you-press safety list (DeepSeek TCM review, 20 Oct) */
.acusafe{margin:6px 0 12px;background:var(--rm-card,#fff);border-radius:14px;padding:8px 12px;box-shadow:var(--rm-shadow)}
.acusafe summary{cursor:pointer;font:700 13px var(--sans);color:var(--rm-ink);display:flex;gap:6px;align-items:center;list-style:none}
.acusafe summary::-webkit-details-marker{display:none}
.acusafe summary .ms{color:var(--rm-plum);font-size:18px}
.acusafe ul{margin:8px 0 2px;padding-left:18px;display:grid;gap:5px}
.acusafe li{font:500 12.5px/1.45 var(--sans);color:var(--rm-ink)}

/* care: the card after a hand-saved red flag, and the support line under a low mood (four-persona review, 20 Oct) */
.carecard{display:block;margin:2px 0 12px}
.moodcare{display:flex;gap:8px;align-items:flex-start;margin:-2px 0 10px;padding:9px 11px;border-radius:12px;background:#f7f0fb;color:var(--rm-ink);font:500 12.5px/1.45 var(--sans)}
.moodcare .ms{color:#a5668f;font-size:18px;flex:none}
/* display:flex on these beat the hidden attribute: the low-mood note showed under every mood, and the consent sheet told everyone
   their earlier answers said they were under 18 (Jamie's screenshot, 20 Oct) */
.flag[hidden],.moodcare[hidden]{display:none}

/* the mindful line under a toast's message (ovu-moments.js) */
.toast.two{border-radius:18px;align-items:flex-start;text-align:left;padding:10px 14px}
.toast .toastsub{display:block;margin-top:3px;font:600 12px/1.35 var(--sans);color:#f3e6ff;opacity:.92}
/* a mindful line inside a sheet (ovu-moments.js) */
.mindline{display:flex;gap:7px;align-items:flex-start;margin:6px 0 10px;padding:8px 11px;border-radius:12px;background:#f3eefb;color:var(--rm-plum);font:600 12.5px/1.45 var(--sans)}
.mindline .ms{font-size:17px;color:#9a7bc2;flex:none}
.teacare.first{margin:0 0 10px}
/* where Luna's AI help runs, beside the AI switches (ovu-consent.js AI_WHERE) */
.c-where{margin:2px 0 10px;padding:9px 11px;border-radius:12px;background:#fff6ec;border:1px solid #f2d6bd;color:#5b3a2e;font:600 12px/1.45 var(--sans,system-ui)}
.actcare{display:flex;gap:6px;align-items:flex-start;margin:6px 0;font:600 12px/1.45 var(--sans);color:#7a4a3a}.actcare .ms{font-size:16px;flex:none;color:#c0785a}
.flushrow .chips{align-items:center}.flushn{display:flex;align-items:center;gap:6px;font:600 12.5px var(--sans);color:var(--rm-ink-2)}.flushn .input{width:84px;padding:6px 8px}
#scene .hotspot{transition:transform .2s,opacity .3s}#scene.saying .hotspot{opacity:.15}
@media (prefers-reduced-motion: reduce){.avatar.moment img,.avatar.flip.moment img{animation:none!important}}

/* Morning start (ovu-morning.js): an invitation in Today, a choice sheet, and a panel above the nav with full captions and
   labelled 44 px controls; nothing in it moves, so there is nothing to pace a breath by */
.minvite{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:10px;padding:12px;border-radius:16px;background:var(--rm-cream);color:var(--rm-ink)}
.minvite[hidden]{display:none}
.minvite>.ms{font-size:26px;color:var(--rm-mauve)}
.minvite>div:first-of-type{flex:1;min-width:10rem}
.minvite b{display:block;font:800 14px var(--sans);color:var(--rm-plum)}
.minvite small{display:block;font-size:13px;color:var(--rm-ink-2);line-height:1.35}
.minvite-btns{display:flex;gap:8px;width:100%}
.minvite-btns .btn{min-height:44px}
.mintro{margin:0 0 12px;font-size:15px;line-height:1.5;color:var(--rm-ink)}
.mchoice{border:none;margin:0 0 10px;padding:0;display:grid;gap:8px}
.mchoice legend{font:800 12px var(--sans);letter-spacing:.04em;text-transform:uppercase;color:var(--rm-ink-2);margin-bottom:6px}
.mopt{display:flex;gap:10px;align-items:flex-start;padding:12px;border-radius:14px;background:var(--rm-paper-2);cursor:pointer;min-height:44px}
.mopt input{margin-top:3px;width:20px;height:20px;accent-color:var(--rm-mauve);flex-shrink:0}
.mopt b{display:block;font:800 14px var(--sans);color:var(--rm-plum)}
.mopt small{display:block;font-size:13px;color:var(--rm-ink-2);line-height:1.35}
.mquiet{display:flex;gap:10px;align-items:center;min-height:44px;font-size:14px;color:var(--rm-ink);margin-bottom:10px;cursor:pointer}
.mquiet input{width:20px;height:20px;accent-color:var(--rm-mauve)}
.mpanel:focus{outline:none}
.mpanel{position:absolute;left:10px;right:10px;bottom:calc(74px + env(safe-area-inset-bottom));z-index:36;display:grid;gap:8px;padding:14px;border-radius:20px;background:var(--rm-card);color:var(--rm-ink);box-shadow:0 10px 30px rgba(90,66,116,.25);max-height:60%;overflow:auto}
.mpanel[hidden]{display:none}
.mp-count{margin:0;font:800 12px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-2)}
.mp-say h3{margin:0 0 4px;font:700 18px var(--serif);color:var(--rm-plum)}
.mp-say p{margin:0;font-size:16px;line-height:1.5;color:var(--rm-ink);overflow-wrap:anywhere}
.mp-btns{display:flex;flex-wrap:wrap;gap:8px}
.mp-btns .btn{flex:1 1 7rem;min-height:44px;font-size:14px}
.mp-btns .btn.ghost{background:var(--rm-lilac-2);color:var(--rm-plum)}
.mp-btns .btn:focus-visible,.minvite .btn:focus-visible{outline:3px solid var(--rm-mauve);outline-offset:2px}

/* ---------- grounding: nothing floats (Jamie, 20 Oct: "I cannot accept floating objects") ----------
 * The old drop shadows sat 6 to 10 px below each object, which reads as hovering. Games ground a sprite with a soft
 * contact shadow at its true base, sized to its footprint, with the pivot at that base: so every placed object (her,
 * room furniture and pets, shop stock, greenhouse plants, neighbours) gets a dark ellipse right where it meets the
 * surface, a hair of overlap into it, and only a tight 1 px edge shadow. --cs is the footprint as a share of the width. */
.nb,.prop.owned,.avatar,.villager{isolation:isolate}
.nb::before,.prop.owned::before,.avatar::before,.keeper::before,.villager::before{content:'';position:absolute;left:50%;bottom:0;width:calc(var(--cs,.7) * 100%);aspect-ratio:4/1;transform:translate(-50%,48%);border-radius:50%;
  background:radial-gradient(closest-side,rgba(52,26,72,.46),rgba(52,26,72,.2) 58%,rgba(52,26,72,0));z-index:-1;pointer-events:none;opacity:var(--co,1)}
.avatar::before{--cs:.62}
.keeper::before{--cs:.62} /* the same ground shadow under a keeper's feet as under hers: without it they read as hovering (Jamie, 22 Oct: "make sure the people dont float") */
.villager{--cs:.62} /* her footprint; a wider canvas sets a smaller share inline (ovu-villagers.js), so his contact shadow is her size */
.avatar.hidden::before,.avatar.walking.cycling::before{opacity:.85}
/* footprints: narrow bases get small shadows, flat or wide pieces get wide thin ones */
[data-id=lamp],[data-item=lamp]{--cs:.36}
[data-id=mushlamp],[data-item=mushlamp]{--cs:.44}
[data-id=starlamp],[data-item=starlamp]{--cs:.32}
[data-id=plant],[data-item=plant]{--cs:.52}
[data-id=bookshelf],[data-item=bookshelf]{--cs:.92}
[data-id=beanbag],[data-item=beanbag],[data-id=armchair],[data-item=armchair]{--cs:.86}
[data-id=scale],[data-item=scale]{--cs:.98;--co:.8}
.shopprop.kind-pet,.prop.owned.pet{--cs:.6}
.shopprop.kind-treat,.shopprop.kind-accessory{--cs:.82;--co:.85}
.shopprop.kind-home{--cs:.84;--co:.7}
.ghplant{--cs:.62}
.nb.nbperson,.nb.sitter{--cs:.6}
/* lifted in arrange mode: the shadow stays on the floor, smaller and fainter */
.prop.owned.lift::before{opacity:.35;width:calc(var(--cs,.7) * 80%)}
@media (prefers-reduced-motion:reduce){.nb::before,.prop.owned::before,.avatar::before,.keeper::before,.villager::before{transition:none}}
/* the storybook map: a painted meadow, a clay drawing at every place, labels on white pills so they read on the painting */
.worldmap{background:#e9f1ea url(assets/room/dream/map-bg.webp) center/cover no-repeat;border:0;box-shadow:inset 0 0 0 1px rgba(150,120,190,.18),0 6px 18px rgba(90,66,116,.12);overflow:hidden}
.worldlines path{stroke:#fff;stroke-width:3.2;stroke-dasharray:1.2 3.2;stroke-linecap:round;filter:drop-shadow(0 1px 1px rgba(90,66,116,.35))}
.mapnode{width:76px;gap:0}
.mapnode .mapart{width:58px;height:58px;object-fit:contain;filter:drop-shadow(0 4px 5px rgba(60,40,90,.28));transition:transform .15s}
.mapnode:active .mapart{transform:scale(.94)}
.mapnode b{margin-top:-4px;background:rgba(255,255,255,.94);color:#4a3466;border-radius:999px;padding:2px 7px;font:800 9.5px/1.2 var(--sans);box-shadow:0 1px 4px rgba(60,40,90,.18);white-space:nowrap}
.mapnode.here .mapart{filter:drop-shadow(0 0 0 #fff) drop-shadow(0 0 6px #ff8fb1) drop-shadow(0 4px 5px rgba(60,40,90,.3))}
.mapnode.picked b{background:#6b4f96;color:#fff}
.mapnode.shut .mapart{filter:grayscale(.5) brightness(.95) drop-shadow(0 4px 5px rgba(60,40,90,.2))}
.mapnode em{margin-top:2px}
/* shop names sit side by side on the map: let each wrap under its own shop rather than run into the next */
.mapnode b{white-space:normal;max-width:66px;line-height:1.15}
/* explored places (30 Oct): a place lights up once she walks there, with a little sparkle; a place not found yet stays pale */
.mapnode.unlit .mapart{filter:grayscale(1) brightness(1.12) opacity(.45) drop-shadow(0 3px 4px rgba(60,40,90,.12))}
.mapnode.unlit>.ms{opacity:.45}
.mapnode.unlit b{background:rgba(255,255,255,.72);color:#8d7ca3}
.mapnode.lit::after{content:"";position:absolute;top:0;right:8px;width:12px;height:12px;background:radial-gradient(circle,#fff 0 18%,rgba(255,240,255,.9) 19% 30%,transparent 31%),conic-gradient(from 45deg,transparent 0 10%,#fff6c9 10% 15%,transparent 15% 35%,#fff6c9 35% 40%,transparent 40% 60%,#fff6c9 60% 65%,transparent 65% 85%,#fff6c9 85% 90%,transparent 90%);border-radius:50%;filter:drop-shadow(0 0 4px #fff3b0);pointer-events:none;animation:maptwinkle 2.6s ease-in-out infinite}
@keyframes maptwinkle{0%,100%{opacity:.6;transform:scale(.8)}50%{opacity:1;transform:scale(1.12)}}
@media (prefers-reduced-motion:reduce){.mapnode.lit::after{animation:none}}

/* recipes and the Mediterranean check (ovu-recipes.js): cards that open the source's own page */
.rnote{font:600 12.5px var(--sans);color:var(--rm-ink-2);line-height:1.55;margin:12px 2px 0}
.rsub{font-family:var(--serif);font-weight:600;font-size:15px;color:var(--rm-plum);display:flex;align-items:center;gap:6px;margin:16px 2px 0}
.rsub .ms{font-size:18px;color:var(--rm-mauve)}
.rlist{display:grid;gap:8px;margin-top:10px}
.rcard{display:flex;gap:11px;align-items:flex-start;background:#fff;border-radius:18px;padding:11px 12px;box-shadow:0 4px 14px rgba(90,66,116,.10);border:1.5px solid rgba(201,182,230,.45);text-decoration:none;color:var(--rm-ink);transition:transform .15s ease,box-shadow .15s ease}
.rcard:hover{transform:translateY(-1px);box-shadow:0 8px 20px rgba(90,66,116,.16)}
.rcard .ric{flex-shrink:0;width:38px;height:38px;border-radius:13px;display:grid;place-items:center;font-size:21px;color:var(--rm-plum);background:linear-gradient(135deg,var(--rm-blush-2),var(--rm-lilac-2))}
.rcard .rtx{min-width:0}
.rcook{display:grid;gap:6px}
.rcook .rcard{margin:0}
.rcookbtn{justify-content:flex-start;gap:8px;min-height:44px;margin-left:12px;font-size:13px}
.rcookbtn .dishbig{width:64px;height:64px;object-fit:contain;flex:none}
.btn img.croppic.dishlist{width:72px;height:72px;border-radius:16px}
.learnline{display:flex;gap:6px;align-items:flex-start}
.rcard{position:relative}.rcard .rtx{flex:1}
.learnline a{color:var(--rm-plum);font-weight:700}
.rcard b{display:block;font:800 13px/1.3 var(--sans);color:var(--rm-ink)}
.rcard small{display:block;font:600 11.5px/1.45 var(--sans);color:var(--rm-ink-2);margin-top:3px}
.rcard i{display:inline-flex;align-items:center;gap:3px;font:800 10px var(--sans);font-style:normal;letter-spacing:.03em;color:var(--rm-mauve);margin-top:5px}
.rcard i .ms{font-size:13px}
.mcount{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;margin-top:12px;background:linear-gradient(135deg,var(--rm-cream),var(--rm-blush-2));border-radius:18px;padding:12px 14px}
.mcount b{font-family:var(--serif);font-weight:600;font-size:22px;color:var(--rm-plum)}
.mcount span{font:700 12px var(--sans);color:var(--rm-ink-2)}
.mqs{display:grid;gap:8px;margin-top:10px}
.mq{background:#fff;border-radius:18px;padding:11px 12px;box-shadow:0 4px 14px rgba(90,66,116,.08);border:1.5px solid rgba(201,182,230,.4)}
.mq p{font:700 12.5px/1.45 var(--sans);color:var(--rm-ink)}
.mq p b{color:var(--rm-mauve)}
.mq small{display:block;font:600 11px/1.4 var(--sans);color:var(--rm-ink-2);margin-top:2px} /* 5.7:1 on white: these hints say what a serving is */
.yn{display:flex;gap:6px;margin-top:8px}
.yn button{flex:1;border:1.5px solid rgba(107,82,142,.16);background:var(--rm-paper);border-radius:99px;padding:7px 10px;font:800 12px var(--sans);color:var(--rm-ink-2);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}
.yn button[data-yn="1"].on{background:#3a7559;border-color:#3a7559;color:#fff} /* white on it is 5.4:1 */
.yn button[data-yn="0"].on{background:var(--rm-lilac);border-color:var(--rm-lilac);color:var(--rm-plum)}
.yn button:focus-visible{outline:2px solid var(--rm-mauve);outline-offset:2px}
.rsafe{display:flex;gap:8px;align-items:flex-start;background:var(--rm-paper-2);border-radius:14px;padding:10px 12px;margin-top:12px}
.rsafe .ms{font-size:18px;color:var(--rm-mauve);flex-shrink:0;margin-top:1px}
/* Today's check-in: six tiles, a calm status line, quick answers; a tile ticks once it is logged */
.cihead{display:flex;align-items:center;justify-content:space-between;gap:8px}
.cistatus{display:flex;align-items:center;gap:6px;font:700 12.5px var(--sans);color:var(--rm-ink-2);margin-top:2px}
.cistatus.done{color:var(--rm-ink)}
.cistatus.done .ms{font-size:20px;color:#2f8a5f;font-variation-settings:'FILL' 1}
.tiles.ci{grid-template-columns:repeat(2,minmax(0,1fr))}
html[data-text="larger"] .tiles.ci{grid-template-columns:minmax(0,1fr)}
.citile{position:relative;text-align:left;padding:10px 12px;min-height:76px;display:grid;grid-template-columns:auto minmax(0,1fr);grid-template-rows:auto auto auto;column-gap:8px;align-items:center;border:1.5px solid transparent}
.citile>.ms{grid-row:1/4;font-size:24px}
.citile>.ciimg{grid-row:1/4;width:34px;height:34px;object-fit:contain} /* the Water tile wears the water drop (30 Oct) */
.citile .cil{font:800 10px var(--sans);letter-spacing:.05em;text-transform:uppercase;color:var(--rm-ink-2);padding-right:22px}
.citile small{color:var(--rm-ink-2)}
.citile b{margin-top:0;font-size:15px;overflow-wrap:anywhere}
.citile small{margin-top:0}
.citile.s-add{border-style:dashed;border-color:var(--rm-lilac)}
.citile.s-add b{color:var(--rm-mauve)}
/* a recorded tile looks like any tile; the green tick alone says it is done (Jamie, 20 Oct) */
.citile.s-partial{border-color:var(--rm-lilac)}
.cimark{position:absolute;top:8px;right:8px;width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;font:800 12px var(--sans)}
.cimark .ms{font-size:15px!important;color:inherit!important}
.cimark.ok{background:#2f8a5f;color:#fff}
.ciquick{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}
.ciquick:empty{display:none}
.ciquick .qchip{border:1.5px solid var(--rm-lilac);background:var(--rm-card,#fff);color:var(--rm-plum);border-radius:99px;padding:8px 12px;min-height:40px;font:700 11.5px var(--sans);cursor:pointer}
.ciquick .qchip.undo{border-style:dashed;color:var(--rm-ink-2)}

/* farm: the watering can and mindful care steps (Jamie, 20 Oct) */
.bedcard .bedpic.canpic{background:#eef4fb}
.bedcard .canline{display:inline-flex;align-items:center;gap:4px;font-weight:700;color:#3f6f96}
.bedcard .canline .ms{font-size:16px}
.farmcan{position:absolute;left:10px;bottom:56px;z-index:7;display:inline-flex;align-items:center;gap:6px;padding:6px 11px 6px 8px;border:1.5px solid rgba(255,255,255,.9);border-radius:99px;background:rgba(255,255,255,.88);backdrop-filter:blur(8px);box-shadow:0 4px 14px rgba(80,50,110,.14);font:800 12px var(--sans);color:#3d2f55;cursor:pointer}
.farmcan .ms{font-size:17px;color:#4a8fc4}
.farmcan .cdots{display:inline-flex;gap:3px;font-weight:700;color:#3f6f96}
.farmcan .cdots i{width:9px;height:9px;border-radius:50%;border:1.5px solid #6fa8d6;background:transparent}
.farmcan .cdots i.on{background:#6fb3e6;border-color:#4a8fc4}
.farmcan.empty{box-shadow:0 0 0 2px #f2b4c8,0 4px 14px rgba(80,50,110,.14)}
.slowbox{display:block}
.slowstep{display:flex;flex-direction:column;gap:8px;padding:2px 0 4px}
.slowstep .mindline{margin:0}
.slowbar{height:8px;border-radius:99px;background:rgba(120,90,150,.14);overflow:hidden}
.slowbar i{display:block;width:0;height:100%;border-radius:99px;background:linear-gradient(90deg,#b9dcf3,#8fc6ea)}
.slowbar.still{display:none}
.slowverb{margin:0;font:700 13px var(--sans);color:var(--rm-plum)}
.slowstep .btn{align-self:flex-start}
.farmsteps{list-style:none;margin:4px 0 12px;padding:0;display:flex;flex-direction:column;gap:10px}
.farmsteps li{display:flex;gap:10px;align-items:flex-start;background:var(--rm-card,#fff);border-radius:14px;padding:10px 12px}
.farmsteps li>.ms{flex:none;width:32px;height:32px;line-height:32px;text-align:center;border-radius:50%;background:#f1eafb;color:#7c5aa8;font-size:18px}
.farmsteps b{display:block;font-size:14px;color:#3d2f55}
.farmsteps small{display:block;font-size:12.5px;line-height:1.45;color:#5d4f6c}
/* the consent notice keeps its light look: a withdrawal that did not reach the account is said plainly above the button */
.consent .c-err{margin:8px 0 10px;padding:9px 12px;border-radius:12px;background:#fdecef;color:#8a2140;font:700 12.5px/1.45 var(--sans)}

/* large text in the room (ovu-textsize.js): everything around the plate grows; the plate, the avatar and taps on them stay true */
html[data-text] :is(.deck,.nav,.sheet,.welcome,.toast,.mpanel,.podmini,.luna,.loading,.topbar,.greeting,.hud,.springstop,.seatpanel){zoom:var(--tz,1)}

/* the Rhythme logo beside the wordmark (assets/brand/logo-mark.webp, the app icon at 192 px) */
.rh-logo{display:inline-block;width:1.5em;height:1.5em;border-radius:28%;object-fit:cover;vertical-align:middle;flex:none;box-shadow:0 1px 5px rgba(90,66,116,.25)}
.brand{display:inline-flex;align-items:center;gap:.42em}
.w-erin{display:flex;align-items:center;justify-content:center;gap:.2em}
.w-brand{display:inline-flex;align-items:center;gap:.5em}
.w-brand .rh-logo{width:1.35em;height:1.35em}
.menubar .brandy{display:inline-flex;align-items:center;gap:.4em}
.menubar .brandy .rh-logo{width:1.25em;height:1.25em;box-shadow:none}
/* ---------- optional sleep details and the two-week sleep check ---------- */
.sqbox{margin-top:10px}
.sqtoggle{width:100%;justify-content:center}
.sqbody{margin-top:6px;padding:10px 12px;border-radius:16px;background:rgba(255,255,255,.6);border:1px solid rgba(107,82,142,.1)}
.sqf{margin-top:12px}
.sqf .lbl{display:block;margin-bottom:6px}
.sqhint{display:block;margin:-2px 0 6px;font:600 11px var(--sans);color:var(--rm-ink-3);line-height:1.4}
.sqf .chips{gap:6px}
.sqf .chipbtn{padding:7px 11px}
.sqcard{margin-top:14px}
.sqnotes{display:flex;flex-direction:column;gap:8px;margin-top:8px}
#sqResult{display:flex;flex-direction:column;gap:8px;margin-top:10px}
.sqnote{border-radius:14px;padding:10px 12px;background:#fff7f1;border:1.5px solid #f0c9a6;color:var(--rm-ink)}
.sqnote.today{background:#fff1f0;border-color:#e88a86}
.sqnote.info{background:#f4f0fa;border-color:#ddd1ee}
.sqnote b{display:block;font:600 15px var(--serif);color:#7b3a2c;margin-bottom:3px}
.sqnote.today b{color:#9b2f2a}
.sqnote.info b{color:var(--rm-ink)}
.sqnote p{margin:0;font:600 12.5px var(--sans);line-height:1.45}
.sqsmall{display:block;font:600 11px var(--sans);color:var(--rm-ink-3);line-height:1.4}

/* the barn and the hidden spring (ovu-barn.js, 21 Oct) */
.barnthing{position:absolute;pointer-events:auto;border:0;background:none;padding:0}
.barnthing.animal{transform:translate(-50%,-100%);cursor:pointer;z-index:2}
.barnthing.animal img{width:100%;display:block;transform-origin:50% 100%;animation:animalidle 5.5s ease-in-out infinite;filter:drop-shadow(0 6px 5px rgba(70,40,90,.22))}
.barnthing.animal.flip img{transform:scaleX(-1);animation-name:animalidleflip}
.barnthing.animal.a-mochi img,.barnthing.animal.a-kaya img{animation-duration:3.8s}
@keyframes animalidle{0%,100%{transform:scale(1,1)}50%{transform:scale(1.012,.988)}}
@keyframes animalidleflip{0%,100%{transform:scaleX(-1) scale(1,1)}50%{transform:scaleX(-1) scale(1.012,.988)}}
.barnthing.animal:focus-visible{outline:2px solid #fff;outline-offset:2px;border-radius:12px}
.barnthing.nestegg{width:3.6%;filter:drop-shadow(0 2px 3px rgba(120,90,60,.35));transform:translate(-50%,-100%);pointer-events:none;transition:transform .9s ease,opacity .9s ease}
.barnthing.nestegg svg{width:100%;display:block}
.barnthing.nestegg.lifted{transform:translate(-50%,-180%);opacity:0}
.barnlist{list-style:none;margin:4px 0 10px;padding:0;display:flex;flex-direction:column;gap:8px}
.barnlist li{display:flex;align-items:center;gap:8px;background:var(--rm-card,#fff);border-radius:12px;padding:9px 11px;font:600 13.5px var(--sans);color:var(--rm-ink)}
.barnlist .ms{font-size:18px;color:#9a7bc2}
.pantryline{display:flex;gap:6px;align-items:flex-start}
.pantryline .ms{font-size:16px;color:#9a7bc2}
.nb.springsitter{transform:translate(-50%,-100%);pointer-events:none;z-index:3}
.nb.springsitter img{width:100%;display:block}
.nb.springsitter.faceright img.seated{transform:scaleX(-1)}
.scene.springsit #avatar{opacity:0;pointer-events:none}
.springstop{position:absolute;right:12px;bottom:56px;z-index:12;display:inline-flex;align-items:center;gap:6px;padding:9px 14px;border:0;border-radius:99px;background:rgba(255,255,255,.94);color:#3d2f55;font:800 13px var(--sans);box-shadow:0 4px 14px rgba(20,10,40,.3);cursor:pointer}
.springstop .ms{font-size:18px;color:#7c5aa8}
.springstop:focus-visible{outline:2px solid #fff;outline-offset:3px}
/* the cave is the same starry dark whatever the sky: no day tint, no night veil or extra stars; words on it are light */
.scene[data-layout="cave"] .room-img.day,.scene[data-layout="cave"]:is(.is-night,.sky-night,[data-sky]) .room-img.day{filter:none!important}
.scene[data-layout="cave"] :is(.night-veil,.stars){opacity:0!important}
.scene[data-layout="cave"] :is(.brand,.greeting h1,.greeting p){color:#fbf6ff!important;text-shadow:0 1px 2px rgba(10,5,25,.7),0 0 14px rgba(10,5,25,.6)!important}
.mapnode[data-node="cave"]{position:absolute}
.mapnode[data-node="cave"]::after{content:"";position:absolute;top:2px;right:10px;width:14px;height:14px;background:radial-gradient(circle,#fff 0 18%,rgba(255,240,255,.9) 19% 30%,transparent 31%),conic-gradient(from 45deg,transparent 0 10%,#fff6c9 10% 15%,transparent 15% 35%,#fff6c9 35% 40%,transparent 40% 60%,#fff6c9 60% 65%,transparent 65% 85%,#fff6c9 85% 90%,transparent 90%);border-radius:50%;filter:drop-shadow(0 0 4px #fff3b0)}
@media (prefers-reduced-motion: reduce){.barnthing.animal img{animation:none}.barnthing.nestegg{transition:none}}
.scene.springsit .hotspot[data-id="warmstone"]{opacity:0;pointer-events:none}
.scene.is-night .barnthing.animal img{filter:brightness(.52) saturate(.85) contrast(1.05) hue-rotate(-8deg) drop-shadow(0 6px 5px rgba(70,40,90,.22))}
.scene.sky-night:not(.is-night) .barnthing.animal img{filter:brightness(.9) saturate(1.02) hue-rotate(-3deg) drop-shadow(0 6px 5px rgba(70,40,90,.22))}
.bedcard .bedpic.pailpic{background:#f6f0fb}
.bedcard .bedpic.springpic{background:#101428}
/* Morning start: the adaptation line before the wake-up's movements (21 Oct) */
.mpcare{font:600 12px/1.45 var(--sans);color:var(--rm-ink-2);background:rgba(255,255,255,.6);border-radius:12px;padding:8px 10px;margin:0 0 8px}
/* the consent notice keeps its light look: a withdrawal that did not reach the account is said plainly above the button */
.consent .c-err{margin:8px 0 10px;padding:9px 12px;border-radius:12px;background:#fdecef;color:#8a2140;font:700 12.5px/1.45 var(--sans)}

/* large text in the room (ovu-textsize.js): everything around the plate grows; the plate, the avatar and taps on them stay true */
html[data-text] :is(.deck,.nav,.sheet,.welcome,.toast,.mpanel,.podmini,.luna,.loading,.topbar,.greeting,.hud,.springstop,.seatpanel){zoom:var(--tz,1)}

/* the harbour (ovu-harbour.js, 21 Oct): a line and a float on the water while she fishes; the fish card; the catch book */
.harbourthing.castline{position:absolute;inset:0;pointer-events:none;z-index:4}
.harbourthing.castline svg{position:absolute;inset:0;width:100%;height:100%}
.harbourthing .float{position:absolute;width:3.2%;aspect-ratio:1;transform:translate(-50%,-50%)}
.harbourthing .float b{position:absolute;inset:22%;border-radius:50%;background:radial-gradient(circle at 40% 35%,#fff 0 30%,var(--floatc,#e58aa8) 32% 100%);box-shadow:0 2px 4px rgba(60,40,110,.35);animation:floatbob 2.6s ease-in-out infinite}
.harbourthing .float.glow b{box-shadow:0 2px 4px rgba(60,40,110,.35),0 0 10px 3px rgba(255,248,210,.75)}
.harbourthing .float .ring{position:absolute;inset:-10%;border-radius:50%;border:1.5px solid rgba(255,255,255,.75);animation:floatring 2.6s ease-out infinite}
.harbourthing .float .ring.r2{animation-delay:1.3s}
.scene.bite .harbourthing .float b{animation:floatdip 1.2s ease-in-out infinite}
@keyframes floatbob{0%,100%{transform:translateY(0)}50%{transform:translateY(-6%)}}
@keyframes floatdip{0%,100%{transform:translateY(0)}40%{transform:translateY(38%)}}
@keyframes floatring{0%{transform:scale(.5);opacity:.9}100%{transform:scale(2.4);opacity:0}}
.hbpic{background:#b9addf}
.hbpic .hbfloat{animation:floatbob 2.6s ease-in-out infinite;transform-origin:52px 30px}
.hbpic .hbfloat.dip{animation:floatdip 1.2s ease-in-out infinite}
.hbpic .hbring{animation:floatring 2.6s ease-out infinite;transform-origin:52px 30px}
.hbpic .hbshadow{animation:fishshadow 3s ease-in-out infinite}
@keyframes fishshadow{0%,100%{transform:translateX(0)}50%{transform:translateX(6px)}}
.hbline{margin:0 0 8px}
.fishcard{display:flex;align-items:center;gap:12px;background:var(--rm-card,#fff);border-radius:16px;padding:10px 12px;margin:2px 0 10px}
.fishcard img{width:38%;max-width:150px;height:auto;filter:drop-shadow(0 6px 8px rgba(60,40,110,.22))}
.fishcard b{display:block;font:800 16px var(--serif);color:var(--rm-plum)}
.fishcard small{display:block;font:600 12.5px var(--sans);color:var(--rm-ink-2);margin-top:3px}
.fishfact{font:600 13.5px/1.5 var(--sans);color:var(--rm-ink);margin:0 0 10px}
.fishsrc,.bookrow em{display:block;font:500 11px var(--sans);color:var(--rm-ink-2);font-style:normal;margin-top:3px}
.booklist{list-style:none;margin:4px 0 10px;padding:0;display:flex;flex-direction:column;gap:8px}
.bookrow{display:flex;align-items:center;gap:10px;background:var(--rm-card,#fff);border-radius:14px;padding:8px 10px}
.bookrow img{width:22%;max-width:84px;height:auto;flex:none}
.bookrow .bookq{flex:none;width:22%;max-width:84px;aspect-ratio:3/2;display:grid;place-items:center;border-radius:12px;background:#efe8fb;color:#9a7bc2;font:800 22px var(--serif)}
.bookrow b{display:block;font:800 14px var(--sans);color:var(--rm-ink)}
.bookrow small{display:block;font:600 12px/1.45 var(--sans);color:var(--rm-ink-2);margin-top:2px}
.bookrow.unseen b{color:var(--rm-ink-2)}
@media (prefers-reduced-motion: reduce){.harbourthing .float b,.harbourthing .float .ring,.hbpic .hbfloat,.hbpic .hbring,.hbpic .hbshadow,.scene.bite .harbourthing .float b,.hbpic .hbfloat.dip{animation:none}.harbourthing .float .ring{opacity:.5;transform:scale(1.4)}.scene.bite .harbourthing .float b{transform:translateY(30%)}.hbpic .hbfloat.dip{transform:translateY(6px)}}
/* the crystals' tone (ovu-tones.js, 21 Oct): nine pitch chips, a pill to stop it from the scene */
.tonechips .chipbtn{min-width:72px}
.tonepill small{font:700 11px var(--sans);opacity:.75;margin-left:2px}
/* ---- 21 Oct: seats (ovu-seats.js): each bench its own practice and its own small weather, below the sitter, inside the plate so the camera carries it ---- */
#seatfx{position:absolute;inset:0;pointer-events:none;z-index:1;overflow:hidden}
#seatfx i,#seatfx b{position:absolute;display:block;opacity:0;will-change:transform,opacity;transform:translate(-50%,-50%)}
#seatfx .petal{aspect-ratio:1/1.35;border-radius:60% 60% 55% 55%/70% 70% 45% 45%;background:radial-gradient(circle at 40% 35%,#ffe6f1,#f4b4d2);animation:seatpetal 11s linear infinite}
@keyframes seatpetal{0%{transform:translate(-50%,-50%) rotate(0deg);opacity:0}10%{opacity:.85}50%{transform:translate(calc(-50% + 34px),calc(-50% + 150px)) rotate(170deg)}90%{opacity:.7}100%{transform:translate(calc(-50% - 10px),calc(-50% + 300px)) rotate(330deg);opacity:0}}
#seatfx .mote{aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,#fff6cf 0 30%,rgba(255,214,140,0) 70%);box-shadow:0 0 9px 3px rgba(255,200,120,.35);animation:seatmote 8s ease-in-out infinite}
@keyframes seatmote{0%{transform:translate(-50%,-50%);opacity:0}18%{opacity:.9}42%{opacity:.45}62%{opacity:.9}100%{transform:translate(calc(-50% + 14px),calc(-50% - 130px));opacity:0}}
.scene.is-night #seatfx .mote,.scene.sky-night #seatfx .mote{filter:brightness(1.35)}
#seatfx .spark{aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,#fff 0 25%,rgba(255,255,255,0) 70%);animation:seatspark 3.6s ease-in-out infinite}
@keyframes seatspark{0%,100%{transform:translate(-50%,-50%) scale(.3);opacity:0}50%{transform:translate(-50%,-50%) scale(1);opacity:.9}}
#seatfx .leaf{aspect-ratio:1/1.8;border-radius:80% 0 80% 0;background:linear-gradient(135deg,#d9ecc2,#a9cf8e);animation:seatleaf 13s ease-in-out infinite}
@keyframes seatleaf{0%{transform:translate(-50%,-50%) rotate(20deg);opacity:0}12%{opacity:.8}50%{transform:translate(calc(-50% - 60px),calc(-50% + 90px)) rotate(200deg)}88%{opacity:.6}100%{transform:translate(calc(-50% - 120px),calc(-50% + 200px)) rotate(380deg);opacity:0}}
#seatfx .ring{aspect-ratio:2.4/1;border:2px solid rgba(255,255,255,.6);border-radius:50%;animation:seatring 7s ease-out infinite}
@keyframes seatring{0%{transform:translate(-50%,-50%) scale(.15);opacity:0}12%{opacity:.6}100%{transform:translate(-50%,-50%) scale(1.7);opacity:0}}
#seatfx .streak{height:2px;border-radius:2px;background:linear-gradient(90deg,rgba(255,255,255,0),rgba(255,255,255,.75),rgba(255,255,255,0));animation:seatstreak 6s ease-in-out infinite}
@keyframes seatstreak{0%,100%{transform:translate(calc(-50% - 26px),-50%);opacity:0}50%{transform:translate(calc(-50% + 26px),-50%);opacity:.85}}
#seatfx .glint{aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,#fff 0 18%,rgba(196,176,255,.65) 42%,rgba(196,176,255,0) 70%);animation:seatglint 7s ease-in-out infinite}
@keyframes seatglint{0%,100%{opacity:0}50%{opacity:.9}}
/* the bench by the tree: flecks of light through the canopy, slow and out of step (21 Oct) */
#seatfx .fleck{aspect-ratio:1.9/1;border-radius:50%;background:radial-gradient(ellipse at center,rgba(255,250,224,.9) 0 30%,rgba(255,243,200,.35) 52%,rgba(255,243,200,0) 72%);animation:seatfleck 9s ease-in-out infinite}
@keyframes seatfleck{0%,100%{transform:translate(-50%,-50%) scale(.8);opacity:0}25%{opacity:.5}50%{transform:translate(calc(-50% + 7px),calc(-50% + 2px)) scale(1.05);opacity:.8}75%{opacity:.4}}
.scene.is-night #seatfx .fleck,.scene.sky-night #seatfx .fleck{filter:saturate(.15) brightness(.8)}
/* the glade's fireflies: a soft green-gold glow that wanders and blinks, never in step with anything (30 Oct) */
#seatfx .firefly{aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,#fbffd9 0 28%,rgba(214,240,140,.6) 46%,rgba(214,240,140,0) 70%);box-shadow:0 0 8px 3px rgba(220,245,150,.35);animation:seatfirefly 9s ease-in-out infinite}
@keyframes seatfirefly{0%{transform:translate(-50%,-50%);opacity:0}15%{opacity:.85}30%{transform:translate(calc(-50% + 22px),calc(-50% - 18px));opacity:.25}48%{opacity:.9}66%{transform:translate(calc(-50% - 12px),calc(-50% - 40px));opacity:.35}82%{opacity:.8}100%{transform:translate(calc(-50% + 16px),calc(-50% - 64px));opacity:0}}
@media (prefers-reduced-motion: reduce){#seatfx i{animation:none!important;opacity:.35}#seatfx .mote,#seatfx .spark,#seatfx .glint,#seatfx .streak,#seatfx .firefly{opacity:.22}#seatfx b{display:none}}
.seatpanel .mp-btns{display:flex;flex-wrap:wrap;gap:8px}
.seatpanel .mp-btns .btn{flex:1 1 40%}
/* Harbour Lane (ovu-lane.js, 21 Oct): the places as rows, the gym's stations, float swatches and the post box */
.street.lane .store .storeic{width:64px;height:64px;flex:none;display:grid;place-items:center;font-size:34px;color:var(--rm-mauve);background:var(--rm-paper-2);border-radius:18px}
.street.lane .store.closed .storeic{opacity:.6}
.postnew{font-style:normal;color:#e2557e;font-weight:800}
.gymlist{display:grid;gap:8px;margin-top:10px}
.gymst{display:flex;align-items:center;gap:10px;background:var(--rm-card);border-radius:16px;padding:10px 12px;box-shadow:var(--rm-shadow)}
.gymst>.ms{font-size:26px;color:var(--rm-mauve);flex:none}
.gymst>span:not(.ms){flex:1;min-width:0}
.gymst b{display:block;font:800 14px var(--sans);color:var(--rm-plum)}
.gymst small{display:block;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2)}
.gymst .btn{flex:none}
.floatdot{width:22px;height:22px;flex:none;border-radius:50%;background:radial-gradient(circle at 40% 35%,#fff 0 30%,var(--floatc,#e58aa8) 32% 100%);box-shadow:0 1px 3px rgba(60,40,110,.3)}
.floatdot.glow{box-shadow:0 1px 3px rgba(60,40,110,.3),0 0 8px 2px rgba(255,236,170,.9)}
#floatList .btn.on{outline:2px solid var(--rm-mauve);outline-offset:1px}
.letterlist{list-style:none;margin:8px 0 0;padding:0;display:grid;gap:8px}
.letterrow{display:flex;align-items:center;gap:8px;background:var(--rm-card);border-radius:16px;padding:10px 12px;box-shadow:var(--rm-shadow)}
.letterrow>.ms{color:var(--rm-mauve);flex:none}
.letterrow.new>.ms{color:#e2557e}
.letterrow>span:not(.ms){flex:1;min-width:0}
.letterrow b{display:block;font:800 13.5px var(--sans);color:var(--rm-plum)}
.letterrow small{display:block;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2);overflow-wrap:anywhere}
.letterrow .btn{flex:none}
.lettertext{width:100%;min-height:96px;resize:vertical;margin-top:8px}
.letterbody{margin:8px 0 0;padding:16px;background:var(--rm-paper-2);border-radius:16px;font:500 16px/1.6 var(--serif);color:var(--rm-ink);overflow-wrap:anywhere}
/* the farm kitchen's guided steps (ovu-kitchen.js): the step she is on is outlined, the ones done are quieter */
.cooksteps li.on{box-shadow:0 0 0 2px var(--rm-mauve)}
.cooksteps li.done{opacity:.6}

.springstop{min-height:44px;font-size:15px} /* the scene's Stop button, big enough for slow taps (menopause walk, 21 Oct) */

/* Your cycle rhythm (design 2026-10-21-cycle-tab-rhythm.md): history as the only number, four cards with levels */
.rhythm h3{font:800 18px var(--serif,Georgia,serif);color:var(--rm-plum);margin:4px 0 8px}
.rhythm .stagenote{margin:0 0 10px;font-size:13px}
.ready{background:#fff;border:1px solid rgba(150,120,190,.16);border-radius:16px;padding:12px;margin-bottom:10px}
.ready .lbl{display:block;margin-bottom:8px}
.ready .dots{display:flex;align-items:flex-start;justify-content:space-between;gap:6px;margin:4px 0 8px}
.ready .dot{flex:1;display:flex;flex-direction:column;align-items:center;gap:4px;position:relative}
.ready .dot i{width:40px;height:40px;border-radius:50%;border:2px solid #d9cdee;background:#fff;display:flex;align-items:center;justify-content:center;font:800 15px var(--sans);color:#a394bd;font-style:normal}
.ready .dot.on i{background:linear-gradient(135deg,#c8a9ee,#e9b5d0);border-color:transparent;color:#2a1d44} /* dark plum on the pale gradient (Codex, 22 Oct: white was under 2:1) */
.ready .dot em{font:700 10px/1.2 var(--sans);font-style:normal;color:var(--rm-ink-2);text-align:center}
.ready .dot+.dot::before{content:"";position:absolute;left:-50%;right:50%;top:20px;height:2px;background:#e4dbf2;z-index:-1}
.ready p{margin:0;font:600 13px/1.45 var(--sans);color:var(--rm-ink)}
/* the rhythm check's parts (ovu-rhythm.js card): stacked soft cards, the level as a pill beside the title (23 Oct; these
   rules used to share .rcard with the records list, whose flex row squeezed each part into four narrow columns) */
.rycard{position:relative;display:block;background:linear-gradient(165deg,#fff,#fbf7fe 70%);border:1.5px solid rgba(201,182,230,.38);border-radius:20px;padding:13px 14px 12px;margin-bottom:10px;box-shadow:0 6px 16px rgba(90,66,116,.08);overflow:hidden}
.rycard:before{content:"";position:absolute;left:0;top:0;bottom:0;width:5px;background:linear-gradient(180deg,#f6c9d6,#c9b6e6)}
.rycard.lvlc-ok:before,.rycard.lvlc-ref:before{background:linear-gradient(180deg,#bfe3d4,#9fd3bd)}
.rycard.lvlc-note:before{background:linear-gradient(180deg,#fbe2b8,#f3c98a)}
.rycard.lvlc-chat:before{background:linear-gradient(180deg,#f8c6d4,#ec9ab3)}
.ryhead{display:flex;align-items:center;gap:9px;flex-wrap:wrap}
.ryhead b{flex:1 1 auto;min-width:0;font:600 16px/1.25 var(--serif);color:var(--rm-plum)}
.ryic{flex:0 0 auto;width:32px;height:32px;border-radius:11px;display:grid;place-items:center;font-size:19px;color:var(--rm-plum);background:linear-gradient(135deg,var(--rm-blush-2,#fbe6ee),var(--rm-lilac-2,#efe6fa))}
.ryhead .lvl{flex:0 0 auto;max-width:100%;white-space:normal;line-height:1.3}
.rysub{display:block;font:600 12px/1.45 var(--sans);color:var(--rm-ink-3);margin:6px 0 4px}
.rycard p{margin:0 0 9px;font:600 13.5px/1.5 var(--sans);color:var(--rm-ink)}
.rchips{display:flex;flex-wrap:wrap;gap:6px}
.lvl{font:800 10px var(--sans);letter-spacing:.04em;text-transform:uppercase;border-radius:999px;padding:4px 9px;background:#eef0f5;color:#5e6475}
.lvl-ok,.lvl-ref{background:#e7f6ee;color:#2d7a4f}.lvl-note{background:#fff3df;color:#9a6200}.lvl-chat{background:#fde8ee;color:#b03a5c}.lvl-building,.lvl-thin,.lvl-na{background:#eef0f5;color:#5e6475}
.chip-th{font:700 10px var(--sans);border-radius:999px;padding:3px 8px;background:#f3eefb;color:#6e4fa3;border:1px dashed #c9b6e6}
.chip-e{font:800 10px var(--sans);border-radius:999px;padding:3px 8px;background:#eaf2fb;color:#2f5f9e;text-decoration:none}
.rband{background:#f8f4fd;border-radius:14px;padding:10px 12px;margin:-4px 0 10px}
.rband .chips{display:flex;gap:6px;flex-wrap:wrap;margin-top:6px}
.rfoot{margin-top:4px;font-size:12px}

/* Luna's chat as a floating card (Jamie, 21 Oct: the Ovuluna panel): her face in the head, a status line, questions to ask, a round send, the companion line */
.sheet.luna-sheet{bottom:auto;top:max(10vh,70px);left:10px;right:10px;border-radius:26px;max-height:min(78%,calc(100% - 140px));box-shadow:0 24px 60px rgba(60,40,90,.28);border:1px solid rgba(255,255,255,.7);background:linear-gradient(180deg,#fbf7ff,#fff 60px)}
.sheet.luna-sheet .sheet-head{padding:14px 16px 10px;border-bottom:1px solid rgba(150,120,190,.12)}
.sheet.luna-sheet .sheet-head .ico{background:transparent;width:48px;height:48px;overflow:visible}
.sheet.luna-sheet .lunaico{width:48px;height:48px;object-fit:contain;filter:drop-shadow(0 4px 10px rgba(120,90,170,.25))}
.sheet.luna-sheet h2{font-size:22px}
.sheet.luna-sheet h2 small{display:flex;align-items:center;gap:6px;color:var(--rm-ink-2)}
.lunastrip{flex-wrap:wrap;row-gap:4px;display:flex;align-items:center;justify-content:space-between;gap:10px;margin:4px -16px 6px;padding:8px 16px;background:#f6f1fc;border-bottom:1px solid rgba(150,120,190,.1);font:700 12px var(--sans);color:var(--rm-ink-2)}
.lunastrip .lstate{display:inline-flex;align-items:center;gap:7px}
.ldot{width:8px;height:8px;border-radius:50%;background:#c9c2d6;display:inline-block}.ldot.on{background:#4fbf7f;box-shadow:0 0 0 3px rgba(79,191,127,.18)}
.lunastrip .lmore{border:none;background:none;color:#8a63c9;font:800 12px var(--sans);cursor:pointer;padding:4px 0}
.askrow{display:flex;flex-wrap:wrap;gap:8px;margin:10px 0 4px;align-items:center}
.askrow .asklbl{font:800 10px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);width:100%}
.askchip{display:inline-flex;align-items:center;padding:9px 14px;border-radius:999px;border:1.5px solid rgba(138,99,201,.28);background:#faf7ff;color:#6e4fa3;font:700 13px var(--sans);text-decoration:none}
.askchip:hover{background:#f1e9fc}
.composer .lsend{width:48px;height:48px;border-radius:50%;background:linear-gradient(135deg,#9a7ad1,#7b5bb5)}
.sheet.luna-sheet .composer textarea.input{border-radius:22px;min-height:52px}
.lunanote{margin:10px 0 0;text-align:center;font:600 11.5px/1.45 var(--sans);color:var(--rm-ink-3)}
@media(min-width:520px){.sheet.luna-sheet{left:50%;right:auto;width:min(480px,calc(100% - 20px));transform:translate(-50%,105%)}.sheet.luna-sheet.on{transform:translate(-50%,0)}}

 /* the completed dots keep their gradient at night (Codex re-check) */

/* closed, Luna's top-anchored card is hidden and untappable once it has slid away: on a tall screen its own height is not enough to leave the frame */
.sheet.luna-sheet:not(.on){visibility:hidden;pointer-events:none;transition:transform .38s cubic-bezier(.32,.72,0,1),visibility 0s linear .38s}

/* water in the food diary (21 Oct): a record, examples of amounts, information with sources; no bar, no target */
.wstrip{margin-top:12px;padding:13px;border:1px solid rgba(132,111,181,.16);border-radius:20px;background:linear-gradient(145deg,rgba(255,255,255,.88),rgba(235,246,255,.78));box-shadow:0 8px 24px rgba(85,61,132,.08)}
.whead{display:flex;align-items:center;gap:10px;padding:2px 2px 11px}
.whead>div{min-width:0;flex:1}.whead b,.whead small{display:block}.whead b{font:800 15px/1.25 var(--sans);color:var(--rm-plum)}.whead small{margin-top:2px;font:600 11.5px/1.3 var(--sans);color:var(--rm-ink-3)}
.worb{width:38px;height:38px;display:grid;place-items:center;flex:none;border-radius:50%;color:#fff;background:linear-gradient(145deg,#a9dcf4,#78b9e1);box-shadow:inset 0 2px 0 rgba(255,255,255,.72),0 5px 12px rgba(86,157,204,.22);font-size:21px}
.wdrops{display:flex;gap:3px;align-items:flex-end}.wdrops i{width:6px;height:8px;border-radius:60% 40% 65% 35%;transform:rotate(45deg);background:rgba(110,177,218,.18)}.wdrops i.on{background:#75b9df;box-shadow:0 1px 3px rgba(72,137,181,.25)}
.wadd>.lbl{display:block;margin:0 0 7px 2px}.wrow{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px!important;margin:0!important}
.wrow .wquick{min-width:0;min-height:74px;padding:8px 3px 7px!important;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:1px;border-radius:15px!important}
.wquick .wglass{font-size:22px;color:#70acd4}.wquick b{font:800 11.5px/1.15 var(--sans);color:var(--rm-plum)}.wquick small{font:600 9.5px/1.15 var(--sans);color:var(--rm-ink-3)}.wother .wglass{color:#a98ac9}
.wlist{list-style:none;padding:0;margin:9px 0 0;display:flex;flex-direction:column;gap:5px}.wlist li{display:flex;align-items:center;justify-content:space-between;padding:7px 9px;border-radius:12px;background:rgba(255,255,255,.65);font:700 12px var(--sans)}
.winfo{margin-top:10px;border-radius:14px;background:rgba(255,255,255,.5);padding:0 10px}.winfo summary{padding:9px 0;cursor:pointer;font:800 12px var(--sans);color:var(--rm-plum)}.winfo p{font:600 11.5px/1.45 var(--sans);color:var(--rm-ink-2)}
.wevidence{display:flex;align-items:center;flex-wrap:wrap;gap:4px;margin:9px 0 11px}.espark{font-size:15px;color:#c58bc0}.eslabel{margin-right:2px;font:800 10px var(--sans);color:var(--rm-ink-3);text-transform:uppercase;letter-spacing:.06em}
.echip{width:23px;height:23px;display:inline-flex;align-items:center;justify-content:center;gap:1px;border-radius:50%;background:linear-gradient(145deg,#fff,#f0e8f8);border:1px solid rgba(147,112,180,.2);box-shadow:0 2px 5px rgba(84,55,121,.08);font:800 8.5px var(--sans);color:var(--rm-plum);text-decoration:none}.echip i{font:900 7px var(--serif);font-style:normal;color:#bf79a7}.echip:active{transform:scale(.92)}
@media(max-width:360px){.wrow{grid-template-columns:repeat(2,1fr)}.wrow .wquick{min-height:64px}}
.wstrip .wadd{margin-top:2px}.wlist li small{font-weight:600;color:#6f5f8c;margin-left:6px}.winfo summary{display:flex;align-items:center;gap:6px;list-style:none}.winfo summary::-webkit-details-marker{display:none}.winfo p{margin:6px 0 0}
.wstrip{margin:0 0 12px;padding:12px;border-radius:14px;background:rgba(255,255,255,.7);border:1px solid rgba(160,130,190,.18);color:#3b2d52}
.wstrip .whead{display:flex;gap:10px;align-items:center}.wstrip .whead .ms{font-size:26px;color:#5f7fb8}.wstrip .whead b{display:block;font:800 15px var(--sans)}.wstrip .whead small{display:block;font:600 12px var(--sans);color:#6f5f8c}
.wstrip .wadd{margin-top:10px}.wstrip .wrow{flex-wrap:wrap;gap:6px}.wstrip .wrow .btn small{display:block;font:600 10.5px var(--sans);opacity:.8}
.wlist{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}.wlist li{display:flex;justify-content:space-between;align-items:center;gap:8px;font:700 13px var(--sans)}.wlist li small{font-weight:600;color:#6f5f8c;margin-left:6px}
/* 30 Oct: pictures on the amounts, a few words, the information behind the (i) */
.wstrip .whead>div{flex:1;min-width:0}.wstrip .wimg{width:44px;height:44px;object-fit:contain;flex:none}
.wquick{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:10px}
.wq1{display:grid;justify-items:center;gap:2px;padding:6px 4px 8px;border:none;border-radius:14px;background:var(--rm-paper-2);cursor:pointer;color:var(--rm-ink);transition:transform .12s}
.wq1:active{transform:scale(.95)}.wq1 img{width:46px;height:46px;object-fit:contain}.wq1 b{font:800 12px var(--sans)}
.wq1.wother .ms{width:46px;height:46px;display:grid;place-items:center;font-size:26px;color:var(--rm-mauve)}
.wrm{border:none;background:transparent;width:32px;height:32px;border-radius:50%;display:grid;place-items:center;color:var(--rm-ink-2);cursor:pointer}.wrm .ms{font-size:18px}
.wcare{display:flex;gap:8px;align-items:center;margin:10px 0 0;padding:8px 10px;border-radius:12px;background:#fff2e6;font:600 12.5px/1.35 var(--sans);color:#3b2d52}.wcare .ms{font-size:20px;color:#b9784a}
.wask{margin:10px 0 0;font:700 12.5px var(--sans);color:#3b2d52}.wask .linkbtn{margin-left:6px}
.wfoot{display:flex;gap:14px;flex-wrap:wrap;margin:8px 0 0;font:600 12px var(--sans)}.wfoot .linkbtn{color:#6f5f8c}
.wstrip .help,.wstrip .lbl{color:#3b2d52}.wstrip .help.muted{color:#6f5f8c}.wbf{display:flex;align-items:center;gap:8px;margin:8px 0;font:700 13px var(--sans)}

/* How to practise, on the koi pond and Light Flower cards (Jamie, 21 Oct); the flower's breath words */
.btap-how{margin:4px 0 2px;text-align:left}
.btap-how summary{cursor:pointer;font:800 12.5px var(--sans);color:#f1e9fb;display:flex;align-items:center;gap:6px;list-style:none;padding:6px 0}
.btap-how summary::-webkit-details-marker{display:none}
.btap-how summary .ms{font-size:18px}
.btap-how ol{margin:4px 0 2px;padding-left:18px;font:600 12.5px/1.5 var(--sans);color:#d9cdef}
.btap-how li{margin:3px 0}
.btap-chips button small{display:block;font:600 10.5px var(--sans);opacity:.8}
.lf-breath{position:absolute;left:50%;top:12%;transform:translateX(-50%);font:600 24px var(--serif);color:rgba(255,255,255,.82);letter-spacing:.08em;pointer-events:none}
@media (prefers-reduced-motion: reduce){.sheet.luna-sheet:not(.on){transition:none}}
/* in-app page viewer (ovu-pageview.js): older Rhythme pages slide over the room instead of leaving it */
.pageview{position:fixed;inset:0;z-index:90;display:flex;flex-direction:column;background:var(--rm-bg,#f6f0fb);transform:translateX(100%);transition:transform .3s cubic-bezier(.2,.8,.2,1);box-shadow:-12px 0 40px rgba(60,30,90,.18)}
.pageview.on{transform:none}
.pv-bar{display:flex;align-items:center;gap:10px;padding:calc(env(safe-area-inset-top,0px) + 10px) max(14px,env(safe-area-inset-right,0px)) 10px max(14px,env(safe-area-inset-left,0px));background:rgba(255,255,255,.72);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);border-bottom:1px solid rgba(150,120,190,.18)}
.pv-back{width:38px;height:38px;border-radius:50%;border:0;background:rgba(122,92,150,.1);color:var(--rm-plum,#5b3f7a);display:grid;place-items:center;cursor:pointer}
.pv-bar b{font:600 18px/1.2 var(--serif,Georgia,serif);color:var(--rm-plum,#5b3f7a);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pageview iframe{flex:1;width:100%;border:0;background:transparent}
@media (prefers-reduced-motion:reduce){.pageview{transition:none}}
/* hint dots and route markers sit lighter on the art (Jamie, 22 Oct: "more transparent ... looks nicer"); a seat's own dot hides while she sits there */
.hotspot .pulse{opacity:.45}
.hotspot:hover .pulse,.hotspot:focus-visible .pulse,.hotspot.show-tip .pulse{opacity:.85}
#scene:has(.nb.sitter) .hotspot[data-id="bench"] .pulse,#scene:has(.nb.sitter) .hotspot[data-id="hbbench"] .pulse{opacity:0}
/* the data notice, simple (Jamie, 22 Oct): an emoji grid of what Rhythme does, two promises, the full notice folded away */
.c-caps{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.c-caps div{display:flex;flex-direction:column;align-items:center;gap:4px;padding:10px 4px 9px;border-radius:16px;background:rgba(255,255,255,.62);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border:1px solid rgba(255,255,255,.95);box-shadow:0 6px 16px rgba(122,92,150,.12);text-align:center}
.c-caps i{font-style:normal;font-size:26px;line-height:1}
.c-caps i img{width:40px;height:40px;display:block;object-fit:contain;filter:drop-shadow(0 3px 5px rgba(120,90,160,.18))} /* drawn icons, never emoji (Jamie, 22 Oct) */
.c-caps span{font:800 11.5px/1.25 var(--sans);color:var(--rm-plum)}
.c-promise{display:flex;flex-direction:column;gap:6px}
.c-promise p{display:flex;gap:8px;align-items:center;margin:0;font:700 12.5px/1.4 var(--sans);color:var(--rm-ink-2)}
.c-promise i{font-style:normal;font-size:17px;flex:none}
.c-promise i img{width:26px;height:26px;display:block;object-fit:contain}
.c-full{border-radius:14px;background:rgba(255,255,255,.4);padding:2px 12px}
.c-full summary,.c-more summary{cursor:pointer;font:800 12px var(--sans);color:var(--rm-plum);padding:8px 0;list-style:none}
.c-full summary::-webkit-details-marker,.c-more summary::-webkit-details-marker{display:none}
.c-full summary::after,.c-more summary::after{content:' ›';display:inline-block;transition:transform .2s}
.c-full[open] summary::after,.c-more[open] summary::after{transform:rotate(90deg)}
.c-full .c-list{padding-bottom:10px}
.c-pick{display:flex;flex-direction:column}
.c-pick .c-opt{border-style:solid;border-color:rgba(255,255,255,.95);background:rgba(255,255,255,.62)}
.c-emo{font-style:normal;font-size:18px;margin-right:6px;vertical-align:-2px}
.c-pick .c-opt b{display:inline}
.c-more{margin:2px 0 0 38px}
.c-more summary{padding:4px 0;font-size:11px;color:var(--rm-ink-3)}
.c-more p{margin:0 0 6px;font:600 11.5px/1.45 var(--sans);color:var(--rm-ink-3)}

/* fasting timing in the food diary (design 2026-10-21-fasting-timing.md): plain, no counter, no colour for lengths */
.fstrip{margin-top:12px;padding:12px;border-radius:14px;background:rgba(255,255,255,.7);border:1px solid rgba(160,130,190,.18)}
.fstrip .lbl{display:block;margin-bottom:6px}
.fstrip .row{margin-top:8px;flex-wrap:wrap}
.fstrip .btn.small{padding:7px 11px;font-size:13px;min-height:40px}
.fstrip .fopen{margin:4px 0 2px;font-size:14px}
.fstrip .foffer{margin:8px 0;padding:10px;border-radius:12px;background:#f6effd;font-size:14px}
.fstrip .fconflict{margin:6px 0;padding:10px;border-radius:12px;background:#fff4ea;font-size:14px}
.fstrip .frow{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:6px;font-size:13px}
.fstrip .frow span{flex:1 1 180px;min-width:0}
.fstrip .fgaps,.fstrip .fcare,.fstrip .freason{margin-top:8px;font-size:13px;line-height:1.4}
.fstrip .muted{color:#8d7fa0}
.fstrip .evid a{color:#7b5bb5;text-decoration:none;margin-right:4px;font-size:12px}
.fq .chips{display:flex;gap:6px;flex-wrap:wrap}
.fq .chipbtn[disabled]{opacity:.6}
.fastingcard .ilist{margin-top:6px}

/* ---------- the Today card's three tabs (21 Oct): Today, Channel once she has joined a plaza group, Inventory ---------- */
.decktabs{margin:0 0 4px}
.decktabs button{display:flex;align-items:center;justify-content:center;gap:5px;min-height:40px;position:relative}
.decktabs button .ms{font-size:18px}
.dbadge{position:absolute;top:3px;right:6px;min-width:18px;height:18px;border-radius:9px;background:var(--rm-blush);color:var(--rm-plum);font:800 11px/18px var(--sans);text-align:center;padding:0 5px}
.dbadge[hidden]{display:none}
.deckpane[hidden]{display:none}
.deckpane>h2{margin-bottom:2px}
.chhead,.chfriends,.invhearts{display:flex;align-items:center;gap:10px;padding:12px;border-radius:16px;background:var(--rm-paper-2);margin-top:10px}
.chhead>.ms,.chfriends>.ms,.invhearts>.ms{font-size:26px;color:var(--rm-mauve)}
.chhead>div,.chfriends>div,.invhearts>div{flex:1;min-width:0}
.chhead b,.chfriends b,.invhearts b{display:block;font:800 14px var(--sans);color:var(--rm-plum)}
.chhead small,.chfriends small,.invhearts small{display:block;font:600 12.5px/1.35 var(--sans);color:var(--rm-ink-2)}
.invhearts .btn{flex:0 0 auto;padding:10px 14px;min-height:40px}
.chprompt{margin-top:10px;padding:12px;border-radius:16px;background:var(--rm-cream)}
.chprompt .lbl{display:block;font:800 10px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-mauve)}
.chprompt p{margin:4px 0 0;font:600 13.5px/1.4 var(--sans);color:var(--rm-ink)}
.chrow{flex-wrap:wrap}
.chrow .btn{min-height:44px;flex:1 1 40%}
.chbadge{display:inline-block;min-width:18px;height:18px;border-radius:9px;background:#fff;color:var(--rm-plum);font:800 11px/18px var(--sans);text-align:center;padding:0 5px}
.invsec{margin-top:12px}
.invsec h3{display:flex;align-items:center;gap:6px;margin:0;font:800 11px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--rm-mauve)}
.invsec h3 .ms{font-size:16px}
.invsec h3 small{font:800 11px var(--sans);color:var(--rm-ink-3);letter-spacing:0}
.invlist{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:4px}
.invlist li{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:12px;background:var(--rm-paper-2);font:600 13px/1.3 var(--sans);color:var(--rm-ink)}
.invlist li b{font-weight:800;color:var(--rm-plum)}
.invlist li i{font:800 11px/18px var(--sans);min-width:18px;padding:0 6px;border-radius:9px;background:var(--rm-lilac-2);color:var(--rm-plum);text-align:center}
.invlist li span{margin-left:auto;font:600 12px var(--sans);color:var(--rm-ink-3);text-align:right}
.invsec .help{margin-top:6px}
.invgo{display:inline-flex;align-items:center;gap:2px;margin-top:6px;border:none;background:transparent;padding:6px 2px;font:800 12px var(--sans);color:var(--rm-plum);cursor:pointer}
.invgo .ms{font-size:18px}

/* ---------- the drops (21 Oct): the Starlight gown as a Rhythme Plus drop, her birthday week ---------- */
.outfit.locked{position:relative;opacity:.82}
.outfit.locked img{filter:saturate(.7)}
.outfit .olock{position:absolute;top:6px;right:6px;font-size:16px;color:var(--rm-plum);background:#fff;border-radius:50%;padding:3px;box-shadow:0 1px 4px rgba(90,66,116,.18)}
.prop.event{position:absolute;transform:translate(-50%,-98.5%);z-index:7;pointer-events:auto;cursor:pointer;border:none;background:transparent;padding:0;filter:drop-shadow(0 1px 1.5px rgba(60,30,80,.22));animation:propin .6s ease-out}
.prop.event img{width:100%;display:block}
.prop.event:focus-visible{outline:3px solid var(--rm-mauve);outline-offset:3px;border-radius:12px}
.bcard{border-radius:20px;padding:14px;background:linear-gradient(160deg,var(--rm-cream),var(--rm-lilac-2));border:1px dashed rgba(122,92,150,.35)}
.bhead{display:flex;align-items:center;gap:12px}
.bhead img{width:64px;height:auto}
.bhead b{display:block;font:600 20px var(--serif);color:var(--rm-plum)}
.bhead small{display:block;font:700 12px var(--sans);color:var(--rm-ink-2);margin-top:2px}
.bline{margin:0;font:600 14px/1.45 var(--sans);color:var(--rm-ink);padding-left:12px;border-left:3px solid var(--rm-blush)}
.bcard .lbl{display:block;margin-top:14px;font:800 10px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--rm-mauve)}
.bwish{margin-top:12px}
.bnote{margin:8px 0 0;font:600 12px/1.4 var(--sans);color:var(--rm-ink-3)}
.bwho{margin-top:14px;padding:12px 14px;border-radius:16px;background:rgba(255,255,255,.72)}
.bcard .bwho .lbl{margin-top:0}
.bwho b{display:block;margin-top:4px;font:600 18px var(--serif);color:var(--rm-plum)}
.bwho p{margin:6px 0 0;font:600 14px/1.45 var(--sans);color:var(--rm-ink)}
.bwho .bquote{font-style:italic;color:var(--rm-ink-2)}
.bdir{margin-top:14px;padding:12px 14px;border-radius:16px;background:rgba(255,255,255,.72)}
.bcard .bdir .lbl{margin-top:0}
.bdir b{display:block;margin-top:4px;font:600 18px var(--serif);color:var(--rm-plum)}
.bdir p{margin:6px 0 0;font:600 14px/1.45 var(--sans);color:var(--rm-ink)}
.bdir .bstep{display:flex;gap:6px;align-items:flex-start;font:700 12.5px/1.4 var(--sans);color:var(--rm-ink-2)}
.bdir .bstep .ms{font-size:18px;color:var(--rm-mauve)}
.bfrom{margin:12px 0 0;font:600 12.5px var(--serif);font-style:italic;color:var(--rm-ink-2);text-align:right}
.byrow{display:flex;gap:8px;flex-wrap:wrap;margin-top:6px}
.byrow select.input{flex:1 1 7rem;min-width:0}
.byrow .btn{flex:0 0 auto;min-height:44px}

/* the twirl (room.js twirl): she spins to show a new outfit, Animal Crossing style, and the gown gets the Cinderella
 * version (.glam). JS turns her picture; these are the sparkles riding around her, the flash at the change and the
 * starburst as she lands. Inside #avatar (its own stacking context) the picture sits between the back and front sparkles */
.avatar.twirling img{position:relative;z-index:1}
.twirl-fx{position:absolute;left:0;top:0;width:100%;height:100%;pointer-events:none}
.twirl-fx .tw-s{position:absolute;width:9px;height:9px;transform:translate(-50%,-50%);border-radius:50%;background:radial-gradient(circle,#fff 0 32%,rgba(255,238,196,.95) 46%,rgba(255,214,238,0) 72%);opacity:0;filter:drop-shadow(0 0 3px rgba(255,255,255,.9))}
.twirl-fx .tw-s::before,.twirl-fx .tw-s::after{content:'';position:absolute;left:50%;top:50%;width:15px;height:1.6px;margin:-.8px 0 0 -7.5px;border-radius:2px;background:linear-gradient(90deg,rgba(255,255,255,0),#fff,rgba(255,255,255,0))}
.twirl-fx .tw-s::after{transform:rotate(90deg)}
.twirl-fx .tw-s.gold{background:radial-gradient(circle,#fff 0 28%,rgba(255,212,120,.95) 48%,rgba(255,200,120,0) 72%)}
.twirl-fx .tw-s.lilac{background:radial-gradient(circle,#fff 0 28%,rgba(214,186,255,.95) 48%,rgba(214,186,255,0) 72%)}
.twirl-fx.glam .tw-s{width:11px;height:11px}
.twirl-fx .tw-flash{position:absolute;left:50%;top:52%;width:150%;height:90%;transform:translate(-50%,-50%) scale(.6);border-radius:50%;background:radial-gradient(closest-side,rgba(255,255,255,.95),rgba(255,236,250,.6) 45%,rgba(255,236,250,0));opacity:0;z-index:2}
.twirl-fx.flash .tw-flash{animation:twflash .6s ease-out forwards}
@keyframes twflash{0%{opacity:0;transform:translate(-50%,-50%) scale(.6)}25%{opacity:1}100%{opacity:0;transform:translate(-50%,-50%) scale(1.25)}}
.twirl-fx.glam::before{content:'';position:absolute;left:12%;right:12%;top:-34%;bottom:-2%;border-radius:40%;background:linear-gradient(to top,rgba(255,240,252,0),rgba(255,238,252,.6) 35%,rgba(232,214,255,.35) 70%,rgba(255,255,255,0));filter:blur(5px);opacity:0;animation:twpillar 2.1s ease-in-out forwards}
@keyframes twpillar{0%{opacity:0;transform:scaleY(.3);transform-origin:50% 100%}30%{opacity:.9}70%{opacity:.85}100%{opacity:0;transform:scaleY(1.05);transform-origin:50% 100%}}
.twirl-fx .tw-b{position:absolute;left:50%;top:50%;width:6px;height:6px;margin:-3px 0 0 -3px;border-radius:50%;background:#fff;box-shadow:0 0 6px 2px rgba(255,236,196,.9);opacity:0;z-index:3}
.twirl-fx.glam .tw-b{width:7px;height:7px;box-shadow:0 0 8px 3px rgba(255,214,150,.9)}
.twirl-fx.burst .tw-b{animation:twburst .8s cubic-bezier(.2,.7,.3,1) forwards}
@keyframes twburst{0%{opacity:1;transform:rotate(var(--a)) translateX(0) scale(1)}100%{opacity:0;transform:rotate(var(--a)) translateX(46px) scale(.4)}}
@media (prefers-reduced-motion: reduce){.twirl-fx{display:none}}
/* ---- 21 Oct: trying on at Petal & Thread (ovu-boutique.js) ---- */
.trybar{position:absolute;left:10px;right:54px;top:10px;z-index:14;display:none;flex-wrap:wrap;align-items:center;gap:6px 8px;background:rgba(255,255,255,.94);backdrop-filter:blur(8px);border-radius:14px;padding:8px 10px;font:700 11.5px var(--sans);color:var(--rm-plum);box-shadow:var(--rm-shadow)}
.trybar.on{display:flex}
.trybar>.ms{font-size:18px;color:var(--rm-mauve)}
.trybar .tbname{flex:1 1 auto;min-width:0}
.trybar button{border:none;background:var(--rm-lilac-2);color:var(--rm-plum);border-radius:99px;padding:6px 10px;font:800 11px var(--sans);display:flex;align-items:center;gap:4px;cursor:pointer;flex-shrink:0}
.trybar button .ms{font-size:16px}
.trybar button[data-tb=keep]{background:var(--rm-mauve);color:#fff}
.trybar .tbplus{background:linear-gradient(135deg,#f3d49b,#e8a3bf);color:#5a3a2a}
.outfit.plusdrop{position:relative}
.outfit.plusdrop .pluschip{position:absolute;top:6px;right:6px;margin:0}
.avatar .acc{position:absolute;display:none;left:var(--acc-l);top:var(--acc-t);width:var(--acc-w);height:auto;transform:translate(-50%,-50%) rotate(var(--acc-r));pointer-events:none;z-index:2}
.avatar.flip .acc{left:var(--acc-lf);transform:translate(-50%,-50%) scaleX(-1) rotate(var(--acc-r))}
.avatar .acc.on{display:block}
.avatar:is(.walking,.cycling,.twirling,.moment,.joy,.landing,.hidden,.acting) .acc{display:none}
/* animal love (22 Oct): hearts pop when she pets, brushes or treats; a love meter in each sheet; hens wander and peck */
.lovepop{position:absolute;transform:translate(-50%,-50%);z-index:6;pointer-events:none;color:#ff6f9f;font-size:22px;text-shadow:0 2px 6px rgba(255,255,255,.9);animation:lovepop 1.3s ease-out forwards;opacity:0}
.lovepop .ms{font-size:inherit}
@keyframes lovepop{0%{opacity:0;transform:translate(-50%,-30%) scale(.5)}18%{opacity:1;transform:translate(-50%,-60%) scale(1.15)}100%{opacity:0;transform:translate(calc(-50% + var(--dx,0px)),-260%) scale(.9)}}
.barnthing.animal.loved img{animation:animalloved .5s ease}
.barnthing.animal.flip.loved img{animation:animallovedflip .5s ease}
@keyframes animalloved{0%,100%{transform:scale(1)}40%{transform:scale(1.07,.94)}70%{transform:scale(.97,1.04)}}
@keyframes animallovedflip{0%,100%{transform:scaleX(-1)}40%{transform:scale(-1.07,.94)}70%{transform:scale(-.97,1.04)}}
.barnthing.animal.a-mochi,.barnthing.animal.a-kaya{transition:left 1.9s linear,top 1.9s linear}
.barnthing.animal.peck img{animation:henpeck .7s ease 2}
.barnthing.animal.flip.peck img{animation:henpeckflip .7s ease 2}
@keyframes henpeck{0%,100%{transform:rotate(0)}45%{transform:rotate(14deg) translateY(4%)}}
@keyframes henpeckflip{0%,100%{transform:scaleX(-1) rotate(0)}45%{transform:scaleX(-1) rotate(14deg) translateY(4%)}}
.lovemeter{display:flex;align-items:center;gap:8px;margin:0 0 8px}
.lovemeter b{font:800 12.5px var(--sans);color:var(--rm-plum);min-width:52px}
.lovemeter .lm{display:flex;gap:1px}
.lovemeter .ms{font-size:17px;color:#ff6f9f}
.lovemeter .ms.off{color:rgba(150,120,190,.35)}
@media (prefers-reduced-motion: reduce){.lovepop{animation-duration:.01s}.barnthing.animal.peck img,.barnthing.animal.loved img{animation:none}}
/* fishing actions (22 Oct): a power bar while Cast is held, nibbles on the float, a bite line, and a reel bar with tugs */
.castpower,.reelbar{height:8px;border-radius:99px;background:rgba(150,120,190,.18);overflow:hidden;margin:2px 0 10px}
.castpower i,.reelbar i{display:block;height:100%;width:0;border-radius:inherit;background:linear-gradient(90deg,#b9a3ef,#7d5cc4)}
.reelbar{flex:1 1 100%;margin:0 0 8px}
.reelbar i{background:linear-gradient(90deg,#9fd7f0,#5f8fd8);transition:width .08s linear}
.hbpic .hbfloat.nibble{animation:floatnibble .5s ease-in-out 1}
@keyframes floatnibble{0%,100%{transform:translateY(0)}40%{transform:translateY(2px)}70%{transform:translateY(-1px)}}
.biteline{animation:bitepulse 1s ease-in-out infinite}
@keyframes bitepulse{0%,100%{opacity:1}50%{opacity:.6}}
.reelbtn.tug{animation:reeltug .45s ease-in-out}
@keyframes reeltug{0%,100%{transform:translateX(0)}25%{transform:translateX(-4px) rotate(-2deg)}75%{transform:translateX(4px) rotate(2deg)}}
@media (prefers-reduced-motion: reduce){.biteline,.reelbtn.tug,.hbpic .hbfloat.nibble{animation:none}}
.sqhead{display:flex;align-items:center;gap:6px;margin:10px 0 2px;font:800 13px var(--sans);color:var(--rm-plum)}.sqhead .ms{font-size:18px}
/* crop and dish pictures on the seed, plant and recipe buttons, and the finished dish (22 Oct) */
.btn img.croppic{width:34px;height:34px;object-fit:contain;flex:none;border-radius:10px;background:#fff;box-shadow:0 2px 6px rgba(120,90,150,.15);margin-right:2px}
.dishpic{display:flex;justify-content:center;margin:2px 0 6px}.dishpic img{width:150px;height:150px;object-fit:contain;border-radius:22px;background:#fff;box-shadow:0 8px 22px rgba(120,90,150,.18)}
.invlist img.invpic{width:30px;height:30px;object-fit:contain;border-radius:8px;background:#fff;margin-right:6px;vertical-align:middle}
/* villagers (22 Oct, Harvest Moon phase 4) */
.villager{position:absolute;transform:translate(-50%,-100%);z-index:2;border:0;background:none;padding:0;cursor:pointer;pointer-events:none;filter:drop-shadow(0 1px 2px rgba(70,40,100,.2))} /* her drop shadow, as the keepers have; drawn on her canvas at her height, feet on the floor line as hers are (22 Oct); the button lets taps through */
.villager img{width:100%;display:block;animation:animalidle 5s ease-in-out infinite;transform-origin:50% 100%;pointer-events:auto} /* only the picture, clipped to his outline, takes a tap */
.villager:focus-visible{outline:2px solid #fff;outline-offset:2px;border-radius:12px}
@media (prefers-reduced-motion:reduce){.villager img{animation:none}}
.villager .vname{position:absolute;left:50%;top:-6%;transform:translateX(-50%);font:800 10px var(--sans);color:var(--rm-plum);background:rgba(255,255,255,.75);padding:2px 7px;border-radius:99px;white-space:nowrap}
.vcard,.vevent{display:flex;gap:12px;align-items:center;margin-bottom:10px}
.vcard img,.vevent img{width:78px;flex:none;filter:drop-shadow(0 4px 6px rgba(70,50,100,.2))}
.vevent p{margin:0 0 6px;font:600 13.5px/1.5 var(--sans);color:var(--rm-ink-2)}
.vline{margin:6px 0 0;font:600 13px/1.45 var(--sans);color:var(--rm-ink-2)}
/* his talk (22 Oct): his question, her reply, his answer, his thanks for a gift; her replies as buttons */
.vsay{margin-top:4px}.vsay:focus{outline:none} /* focused after a reply so a screen reader reads his answer; it is text, not a control */
.vcard>div{flex:1;min-width:0}
.vask{margin:6px 0 0;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2)} /* 5.2:1 on the sheet (ink-3 was 2.8:1, Codex) */
.vyou{margin:4px 0 0;font:600 12.5px/1.4 var(--sans);color:var(--rm-ink-2)}.vyou b{font-weight:800;color:var(--rm-plum);margin-right:4px}
.vthanks{padding-top:6px;border-top:1px dashed rgba(150,120,190,.3)}
.vreplies{display:flex;flex-direction:column;gap:8px;width:100%}.vreplies .btn{justify-content:flex-start;text-align:left;white-space:normal}
.vhearts{display:flex;gap:1px}.vhearts .ms{font-size:17px}.vhearts .ms.off{color:rgba(150,120,190,.3)}
/* scores and graphs in the Cycle tab (22 Oct) */
.scorecard{background:rgba(255,255,255,.72);border-radius:22px;padding:14px 14px 12px;margin:0 0 14px;box-shadow:0 10px 26px rgba(122,92,150,.12);position:relative;overflow:hidden}.scorecard.dreamy{background:linear-gradient(160deg,rgba(255,255,255,.88),rgba(247,239,252,.9) 60%,rgba(236,246,242,.9))}.scorecard.dreamy:before{content:"";position:absolute;inset:-40% -20% auto auto;width:220px;height:220px;border-radius:50%;background:radial-gradient(circle,rgba(201,182,230,.35),rgba(201,182,230,0) 70%);pointer-events:none}.scorecard h3{display:flex;gap:6px;align-items:center;margin:0 0 4px;font:600 17px var(--serif);color:var(--rm-plum)}.scnum small{font:700 10px var(--sans);color:var(--rm-ink-3);letter-spacing:.04em;margin-top:2px}.scdash{font-size:34px;color:var(--rm-lilac)}.scmood{margin:4px 0 0;font:600 12.5px/1.4 var(--sans);color:var(--rm-ink-2)}.sc-sleep .sccloud{animation-delay:-2s}@keyframes scfloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-5px)}}@media (prefers-reduced-motion:reduce){.sccloud{animation:none}}.scpills{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin:12px 0 4px}.scpill{background:rgba(255,255,255,.7);border-radius:14px;padding:8px 10px;box-shadow:inset 0 0 0 1px rgba(201,182,230,.35)}.scpill-top{display:flex;justify-content:space-between;align-items:baseline;gap:6px;font:700 12px var(--sans);color:var(--rm-ink-2)}.scpill-top b{font:800 15px var(--serif);color:var(--rm-plum)}.scpill.empty .scpill-top b{font:700 11px var(--sans);color:var(--rm-ink-3)}.scbar{height:8px;border-radius:99px;background:#efe7f7;margin:6px 0 4px;overflow:hidden}.scbar i{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,#f6c9d6,#c9b6e6 55%,#bfe3d4);box-shadow:0 0 8px rgba(201,182,230,.6)}.scpill small{display:block;font:600 10.5px/1.35 var(--sans);color:var(--rm-ink-3)}.scneed{display:flex;gap:8px;align-items:flex-start;margin:8px 0 2px;padding:8px 10px;border-radius:14px;background:rgba(243,212,155,.22);font:600 12px/1.4 var(--sans);color:var(--rm-ink-2)}.schead{margin:12px 0 4px;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3)}.scgraph{width:100%;height:auto;display:block;background:rgba(255,255,255,.55);border-radius:14px}.scgraph-empty{display:flex;gap:8px;align-items:center;padding:14px 12px;border-radius:14px;background:rgba(255,255,255,.55);font:600 12px var(--sans);color:var(--rm-ink-3)}.scgraph-empty .ms{color:var(--rm-lilac)}.scfoot{margin:10px 0 0}.scparts{display:none}

/* PULSE movement breaks (22 Oct) */
.pulsecards{display:flex;flex-direction:column;gap:8px}
.pulsecard{display:flex;align-items:center;gap:10px;text-align:left;padding:10px 12px;border-radius:14px;border:1px solid var(--rm-line,#e8def5);background:var(--rm-card,#fff);color:inherit;font:inherit;cursor:pointer;position:relative}
.pulsecard b{display:block;font-size:14px}.pulsecard small{display:block;color:var(--rm-ink-3,#7a6c90);font-size:12px}
.pulsecard .pdraft{margin-left:auto;font-style:normal;font-size:11px;font-weight:700;color:#8a5a00;background:#fff3d6;border-radius:999px;padding:2px 8px}
.pulsebefore{background:var(--rm-blush,#fbeef3);border-radius:14px;padding:12px 14px;display:flex;flex-direction:column;gap:6px}
.pulsebefore p{margin:0;font-size:13px;line-height:1.45}.pulsecheck{margin:10px 0 2px}.pulserun .pulseurgent{margin-top:12px;font-size:12px}.pulseurgent{display:flex;gap:6px;align-items:flex-start;font-weight:700}
.pulsesetup{margin:6px 0;font-size:13px}.pulserun,.pulsedone{display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center;padding:8px 0}
.pulseclock{font:800 56px/1 var(--serif,Georgia,serif);color:var(--rm-plum,#5b3e8a)}.pulsecue{font-size:15px;line-height:1.5;margin:0;max-width:30em}
.pulsedone .row,.pulserun .row{width:100%;flex-direction:column;align-items:stretch}.pulsedone .btn{width:100%}
.pustrip{list-style:none;margin:0 0 8px;padding:0;display:grid;grid-template-columns:1fr 1fr;gap:8px}
.pustep{position:relative;display:flex;flex-direction:column;gap:6px;background:var(--rm-card,#fff);border:1px solid var(--rm-line,#e8def5);border-radius:16px;padding:6px 6px 10px}
.pustep img{display:block;width:100%;aspect-ratio:1;object-fit:cover;border-radius:12px;background:#f1eafa}
.punum{position:absolute;top:10px;left:10px;width:24px;height:24px;border-radius:50%;display:grid;place-items:center;font:800 13px/1 var(--sans,system-ui);color:#fff;background:var(--rm-plum,#5b3e8a);box-shadow:0 1px 4px rgba(60,40,90,.3)}
.pusay{font-size:13px;line-height:1.35;padding:0 4px;font-weight:600}
.pumeta{display:flex;align-items:center;gap:10px;margin:4px 0}.putime{font:800 28px/1 var(--serif,Georgia,serif);color:var(--rm-plum,#5b3e8a)}.pumeta span{font-size:13px;flex:1}
.putip{display:flex;gap:6px;align-items:center;margin:4px 0;font-size:13px;font-weight:600}.putip .ms{font-size:18px;color:#3f8a6a}
.pusmall{margin:4px 0 8px;font-size:12px;line-height:1.5;color:var(--rm-ink-2,#5e5170)}
.puskip ul{margin:2px 0 0;padding-left:18px;font-size:13px;line-height:1.45}.pumore summary{cursor:pointer;font-size:13px;font-weight:700;color:var(--rm-plum,#5b3e8a);margin-top:6px;min-height:32px;display:flex;align-items:center}.pumore p{margin:6px 0;font-size:12.5px;line-height:1.45}
.pufig{position:relative;width:min(220px,62vw);aspect-ratio:1;border-radius:18px;overflow:hidden;background:#f1eafa}
.pufig img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.pufig img+img{animation:pustep 4.4s ease-in-out infinite}
@keyframes pustep{0%,30%{opacity:0}45%,80%{opacity:1}95%,100%{opacity:0}}
.pusteps{margin:0;padding-left:20px;text-align:left;font-size:14px;line-height:1.45;max-width:30em}
@media (prefers-reduced-motion:reduce){.pufig{width:100%;aspect-ratio:2/1;display:grid;grid-template-columns:1fr 1fr;gap:6px;background:none}.pufig img,.pufig img+img{position:static;border-radius:14px;aspect-ratio:1;animation:none}}
html[data-perf=lite] .pufig{width:100%;aspect-ratio:2/1;display:grid;grid-template-columns:1fr 1fr;gap:6px;background:none}html[data-perf=lite] .pufig img,html[data-perf=lite] .pufig img+img{position:static;border-radius:14px;aspect-ratio:1;animation:none}

/* the ranch counter and baby animals (22 Oct) */
.ranchsec{border:1px solid var(--rm-line,#e8def5);border-radius:14px;padding:10px 12px;margin:8px 0;display:flex;flex-direction:column;gap:8px}
.ranchsec h4{margin:0;font-size:14px;display:flex;align-items:center;gap:6px}
.ranchsec small.help{display:block;margin:-4px 0 0;font-size:12px}
.barnthing.animal.baby img{animation-duration:2.6s}
.lovemeter .namebtn{margin-left:6px;padding:2px 6px;vertical-align:middle}

html[data-mindful=quick] .mindline:not(.keep){display:none}


/* the rails (ovu-boutique.js openRail/openItem, 22 Oct): every outfit on its hanger, three across; one opens beside her in it */
.railgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-top:10px}
.railtile{position:relative;background:linear-gradient(180deg,#fff,#f8f1fd);border:2px solid transparent;border-radius:18px;padding:8px 6px 10px;text-align:center;cursor:pointer;box-shadow:0 4px 12px rgba(120,90,160,.10);min-width:0}
.railtile img{width:100%;aspect-ratio:1;object-fit:contain;display:block}
.railtile b{display:block;font:700 12px/1.25 var(--sans);color:var(--rm-ink);margin-top:2px}
.railtile small{display:flex;align-items:center;justify-content:center;gap:3px;font:700 10.5px/1.3 var(--sans);color:var(--rm-ink-2);margin-top:2px}
.railtile small .ms{font-size:13px}
.railtile.on{border-color:#b89be6}
.railtile.plus{background:linear-gradient(180deg,#fff8ee,#fbeef4)}.railtile.plus small{color:#8a5a3c}
.railtile.hearts small{color:#b24f78}.railtile.hearts small .ms{color:#e0628f}
.railview{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:2px 0 8px}
.railview figure{margin:0;background:linear-gradient(180deg,#fff,#f6eefb);border-radius:18px;padding:10px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;min-height:190px}
.railview figure img{max-width:100%;max-height:170px;object-fit:contain;display:block}
.railview figcaption{font:700 11px var(--sans);color:var(--rm-ink-2);margin-top:6px}
.railher.soon{display:flex;flex-direction:column;align-items:center;gap:6px;color:var(--rm-ink-2);text-align:center;padding:30px 6px}
.railher.soon .ms{font-size:30px;color:#b89be6}
.railnote{margin:0 0 8px;font:600 13.5px/1.5 var(--sans);color:var(--rm-ink)}

/* the inventory as pictures (22 Oct): category tabs that scroll sideways, then a grid of tiles with a count badge */
.invtabs{display:flex;gap:6px;overflow-x:auto;scrollbar-width:none;margin:10px -2px 0;padding:2px 2px 6px}
.invtabs::-webkit-scrollbar{display:none}
.invtab{flex:0 0 auto;display:flex;align-items:center;gap:4px;border:1.5px solid rgba(150,120,190,.22);background:#fff;border-radius:999px;padding:7px 11px;font:800 12px var(--sans);color:var(--rm-ink-2);cursor:pointer}
.invtab .ms{font-size:17px;color:var(--rm-mauve)}
.invtab i{font:800 10px/16px var(--sans);font-style:normal;min-width:16px;padding:0 5px;border-radius:8px;background:var(--rm-lilac-2);color:var(--rm-plum);text-align:center}
.invtab.on{background:linear-gradient(135deg,#efe3fb,#fbe4ee);border-color:#b89be6;color:var(--rm-plum)}
.invgrid{list-style:none;margin:8px 0 0;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.invtile{position:relative;display:flex;flex-direction:column;align-items:center;gap:3px;padding:8px 4px 7px;border-radius:16px;background:linear-gradient(180deg,#fff,#f8f1fd);box-shadow:0 3px 10px rgba(120,90,160,.08);min-width:0}
.invtile.on{box-shadow:0 0 0 2px #b89be6,0 3px 10px rgba(120,90,160,.12)}
.invface{position:relative;width:100%;aspect-ratio:1;display:flex;align-items:center;justify-content:center}
.invface img{width:100%;height:100%;object-fit:contain;display:block}
.invface .invicon{font-size:30px;color:var(--rm-mauve)}
.invface .invbadge{position:absolute;right:-2px;bottom:-2px;width:46%;height:46%;object-fit:contain;filter:drop-shadow(0 1px 2px rgba(70,40,100,.25))}
.invface .invtint{position:absolute;left:50%;top:6%;width:30%;aspect-ratio:1;transform:translateX(-50%);border-radius:50%;background:var(--tint);mix-blend-mode:multiply;opacity:.85}
.invcount{position:absolute;top:4px;right:5px;font:800 11px/18px var(--sans);font-style:normal;min-width:18px;padding:0 5px;border-radius:9px;background:var(--rm-plum);color:#fff;text-align:center}
.invtile b{font:700 10.5px/1.2 var(--sans);color:var(--rm-ink);text-align:center;max-width:100%;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}
/* no emoji (Jamie, 22 Oct): the sleep-quality moons are drawn, the thought bubble and consent purposes carry icons */
.moons button::before{content:"";display:block;width:20px;height:20px;margin:0 auto;border-radius:50%;border:2px solid #cfc2e2;box-sizing:border-box}
.moons button.on::before{background:radial-gradient(circle at 35% 35%,#fff8df,#f3d49b 72%);border-color:#e9c27a;box-shadow:0 0 8px rgba(243,212,155,.6)}
.thought .ms{display:block;font-size:20px;line-height:1;color:var(--rm-mauve)}
.c-emo.ms{font-size:20px;color:var(--rm-mauve);vertical-align:-4px}
/* shopkeepers (ovu-keepers.js, 22 Oct): at her height, a gentle idle, a bubble with one line on a tap */
.keeper{position:absolute;transform:translate(-50%,-100%);background:none;border:0;padding:0;cursor:pointer;pointer-events:none;z-index:2;filter:drop-shadow(0 1px 2px rgba(70,40,100,.2))} /* her own drop shadow, not one offset downward: an offset shadow lifts a figure off the floor */
.keeper img{width:100%;display:block;transform-origin:50% 100%;animation:keeperidle 4.2s ease-in-out infinite;pointer-events:auto} /* the button lets taps through; only the picture, clipped to her outline, takes them */
.keeper.flip img{transform:scaleX(-1);animation-name:keeperidleflip}
@keyframes keeperidle{0%,100%{transform:scaleY(1)}50%{transform:scaleY(1.018)}}
@keyframes keeperidleflip{0%,100%{transform:scaleX(-1) scaleY(1)}50%{transform:scaleX(-1) scaleY(1.018)}}
@media (prefers-reduced-motion:reduce){.keeper img{animation:none}}
.keeper .keepsay{position:absolute;left:50%;bottom:100%;transform:translate(-50%,6px) scale(.6);opacity:0;pointer-events:none;width:max-content;max-width:180px;background:#fff;color:var(--rm-plum);font:800 12px/1.3 var(--sans);padding:7px 11px;border-radius:14px 14px 14px 4px;box-shadow:0 6px 16px rgba(90,60,130,.18);transition:opacity .2s,transform .2s;white-space:normal;text-align:center}
.keeper.saying .keepsay{opacity:1;transform:translate(-50%,-4px) scale(1)}
.keeper:focus-visible{outline:2px solid #fff;outline-offset:2px;border-radius:12px}
/* the soak (ovu-soak.js): head and shoulders above the water, a towel on her head, a little steam */
.nb.soaker{position:absolute;transform:translate(-50%,-100%);pointer-events:none;z-index:3} /* the picture's bottom edge is the water line */
/* the bathtub soak (25 Oct): a crown of pink and white foam across the rim, over the towel's edge */
.tubsoak .foam{position:absolute;left:-24%;right:-24%;bottom:-9%;height:32%;pointer-events:none;background:radial-gradient(circle at 10% 62%,#fff 0 9%,rgba(255,255,255,0) 10%),radial-gradient(circle at 27% 44%,#ffe4f0 0 12%,rgba(255,228,240,0) 13%),radial-gradient(circle at 46% 64%,#fff 0 13%,rgba(255,255,255,0) 14%),radial-gradient(circle at 66% 44%,#ffdcec 0 11%,rgba(255,220,236,0) 12%),radial-gradient(circle at 86% 62%,#fff 0 9%,rgba(255,255,255,0) 10%),radial-gradient(ellipse at 50% 86%,rgba(255,226,239,.96) 0 46%,rgba(255,226,239,0) 62%);filter:drop-shadow(0 1px 1px rgba(200,140,170,.3))}
.nb.soaker img{width:100%;display:block}
.soaker .ripple{position:absolute;left:-14%;right:-14%;bottom:-7%;height:16%;border-radius:50%;background:radial-gradient(ellipse at center,rgba(214,252,240,.75) 0 38%,rgba(150,226,206,.45) 56%,rgba(150,226,206,0) 72%);box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.35)}
.scene.soaking #avatar{opacity:0;pointer-events:none}
.scene.soaking .hotspot[data-id="springsoak"],.scene.soaking .hotspot[data-id="warmstone"]{opacity:0;pointer-events:none}
.soaker .steam{position:absolute;bottom:6%;width:26%;aspect-ratio:1;border-radius:50%;background:radial-gradient(circle,rgba(255,255,255,.55),rgba(255,255,255,0) 70%);opacity:0;animation:soaksteam 4.5s ease-out infinite}
.soaker .steam.s1{left:-6%}.soaker .steam.s2{left:78%;animation-delay:1.5s}.soaker .steam.s3{left:36%;animation-delay:3s}
@keyframes soaksteam{0%{opacity:0;transform:translateY(0) scale(.6)}30%{opacity:.8}100%{opacity:0;transform:translateY(-260%) scale(1.5)}}
@media (prefers-reduced-motion:reduce){.soaker .steam{animation:none;opacity:.35}}

/* Settings sheet (You tab, 22 Oct): a small status word beside each health connection */
.stat b .spill{display:inline-block;margin-left:4px;padding:2px 7px;border-radius:99px;background:var(--rm-lilac-2);color:var(--rm-plum);font:800 9.5px var(--sans);letter-spacing:.05em;text-transform:uppercase;vertical-align:1px}
.ygroup .stat{margin-top:0}
.ygroup .stat span:not(.ms):not(.spill){display:block;line-height:1.45;margin-top:2px}

/* ---------- plaza rooms and room chat in the Channel tab (ovu-rooms.js, 22 Oct) ---------- */
.chgroups{margin-top:10px}
.rmgroups{display:flex;gap:8px;overflow-x:auto;padding:2px 2px 6px;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
.rmgroup{flex:0 0 auto;width:104px;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 6px 9px;border-radius:16px;background:var(--rm-paper-2);border:2px solid transparent;text-align:center;scroll-snap-align:start;font:inherit;color:inherit}
button.rmgroup{cursor:pointer}
button.rmgroup:focus-visible{outline:3px solid var(--rm-mauve);outline-offset:2px}
.rmgroup.mine{border-color:var(--rm-lilac);background:var(--rm-lilac-2)}
.rmgroup.full{opacity:.7}
.rmgroup .rmdoor{width:56px;height:56px;object-fit:contain}
.rmgroup span.rmdoor{font-size:36px;line-height:56px;color:var(--rm-mauve)}
.rmgroup b{display:block;font:800 12px/1.2 var(--sans);color:var(--rm-plum)}
.rmgroup small{display:block;font:600 11px/1.25 var(--sans);color:var(--rm-ink-2)}
.rmhint{margin:6px 2px 0;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2)}
.chrooms{margin-top:10px}
.rmhead{font:800 13px var(--sans);color:var(--rm-plum);margin:0 2px 6px}
.rmwhy{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:10px 12px;border-radius:14px;background:var(--rm-cream);margin-bottom:8px}
.rmwhy .ms{color:var(--rm-mauve)}
.rmwhy p{flex:1 1 180px;margin:0;font:600 12.5px/1.4 var(--sans);color:var(--rm-ink)}
.rmlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.rmrow{width:100%;display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:14px;background:var(--rm-paper-2);border:2px solid transparent;text-align:left;cursor:pointer;font:inherit;color:inherit}
.rmrow:disabled{cursor:default;opacity:.75}
.rmrow.mine{border-color:var(--rm-lilac);background:var(--rm-lilac-2)}
.rmrow:focus-visible{outline:3px solid var(--rm-mauve);outline-offset:2px}
.rmrow>.ms{font-size:22px;color:var(--rm-mauve)}
.rmrow .rn{flex:1;min-width:0}
.rmrow .rn b{display:block;font:800 13.5px var(--sans);color:var(--rm-plum)}
.rmrow .rn b i{font:700 10.5px var(--sans);font-style:normal;color:#fff;background:var(--rm-mauve);border-radius:99px;padding:1px 7px;margin-left:4px;vertical-align:2px}
.rmrow .rn small{display:block;font:600 11.5px/1.3 var(--sans);color:var(--rm-ink-2)}
.rmrow .rc{text-align:right;flex-shrink:0;max-width:40%}
.rmrow .rc b{display:block;font:800 11.5px var(--sans);color:var(--rm-ink)}
.rmrow .rc small{display:block;font:600 10.5px var(--sans);color:var(--rm-ink-3)}
.rmtop{display:flex;align-items:center;gap:8px;margin-bottom:8px}
.rmback{flex-shrink:0}
.rmtitle{flex:1;min-width:0;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.rmtitle .ms{color:var(--rm-mauve)}
.rmtitle b{font:800 15px var(--sans);color:var(--rm-plum)}
.rmtitle small{font:600 11.5px var(--sans);color:var(--rm-ink-2)}
.rmhelp{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;padding:10px 12px;border-radius:14px;background:#fff1f0;border:1.5px solid #f2c1bd}
.rmhelp>.ms{color:#9b2f2a}
.rmhelp p{flex:1 1 200px;margin:0;font:600 12px/1.45 var(--sans);color:var(--rm-ink)}
.rmnote{margin-top:8px;padding:10px 12px;border-radius:14px;background:var(--rm-cream)}
.rmnote .lbl{display:block;font:800 10px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-mauve)}
.rmnote p{margin:3px 0 0;font:600 12.5px/1.45 var(--sans);color:var(--rm-ink)}
.rmmsgs{list-style:none;margin:10px 0 0;padding:0 2px;display:flex;flex-direction:column;gap:8px;max-height:46vh;overflow-y:auto;overscroll-behavior:contain}
.rmm{display:flex;gap:8px;align-items:flex-start}
.rmm>img{width:34px;height:34px;object-fit:cover;object-position:50% 12%;border-radius:50%;background:var(--rm-lilac-2);flex-shrink:0}
.rmb{flex:1;min-width:0;padding:8px 10px;border-radius:4px 14px 14px 14px;background:var(--rm-paper-2)}
.rmm.mine{flex-direction:row-reverse}
.rmm.mine .rmb{border-radius:14px 4px 14px 14px;background:var(--rm-lilac-2)}
.rmm.held .rmb{background:#fff;border:1.5px dashed var(--rm-lilac)}
.rmw{display:flex;align-items:center;gap:6px}
.rmw b{font:800 12px var(--sans);color:var(--rm-plum)}
.rmw small{font:600 10.5px var(--sans);color:var(--rm-ink-3)}
.rmmore{margin-left:auto;border:none;background:none;padding:2px 4px;border-radius:8px;cursor:pointer;color:var(--rm-ink-2);min-width:32px;min-height:28px}
.rmmore .ms{font-size:18px}
.rmb p{margin:3px 0 0;font:500 13.5px/1.45 var(--sans);color:var(--rm-ink);white-space:pre-wrap;overflow-wrap:anywhere}
.rmheld{display:flex;align-items:center;gap:4px;margin-top:4px;font:700 11px var(--sans);color:var(--rm-mauve)}
.rmheld .ms{font-size:14px}
.rmcare{display:flex;gap:6px;align-items:flex-start;margin-top:6px;padding:7px 9px;border-radius:10px;background:#fff1f0;font:600 11.5px/1.4 var(--sans);color:#7a2a26}
.rmcare .ms{font-size:16px;flex-shrink:0}
.rmempty{margin:10px 2px 0;font:600 12.5px var(--sans);color:var(--rm-ink-2)}
.rmjoin{margin-top:10px;display:flex;flex-direction:column;gap:6px}
.rmjoin small{font:600 11.5px/1.4 var(--sans);color:var(--rm-ink-2)}
.rmcompose{margin-top:10px}
.rmcompose textarea{width:100%;box-sizing:border-box;min-height:62px;padding:10px 12px;border-radius:14px;border:1.5px solid var(--rm-lilac);background:#fff;font:500 14px/1.4 var(--sans);color:var(--rm-ink);resize:vertical}
.rmcompose textarea:focus{outline:none;border-color:var(--rm-mauve);box-shadow:0 0 0 3px var(--rm-lilac-2)}
.rmsend{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-top:6px}
.rmleft{font:700 11px var(--sans);color:var(--rm-ink-3)}
.rmmsg{margin:6px 0 0;font:700 12px/1.4 var(--sans);color:var(--rm-high)}
.rmmsg:empty{display:none}
.rmleave{margin-top:6px}
.rmmode{margin-top:8px}
.rmcarecard{padding:12px 14px;border-radius:16px;background:#fff1f0;border:1.5px solid #e88a86;color:var(--rm-ink)}
.rmcarecard b{display:block;font:600 16px var(--serif);color:#9b2f2a;margin-bottom:4px}
.rmcarecard p{margin:4px 0;font:600 12.5px/1.45 var(--sans)}
.rmcarecard small{display:block;margin-top:6px;font:600 11px/1.4 var(--sans);color:var(--rm-ink-2)}
.rmquote{margin:0;padding:10px 12px;border-left:3px solid var(--rm-lilac);background:var(--rm-paper-2);border-radius:0 12px 12px 0;font:500 13px/1.45 var(--sans);color:var(--rm-ink);white-space:pre-wrap;overflow-wrap:anywhere}
.rmreasons{border:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:6px}
.rmreasons legend{font:800 12px var(--sans);color:var(--rm-plum);margin-bottom:4px}
.rmreasons label{display:flex;gap:8px;align-items:center;font:600 13px var(--sans);color:var(--rm-ink)}
.rmreasons input{accent-color:var(--rm-mauve)}

/* Tideline Gym workouts (ovu-gym.js, 22 Oct): her strip on the machine, feet on the cell's bottom edge, clipped where the
   plate stands in front of her; a flipped station mirrors the cell, not the strip, so the frame step still works */
.nb.gymworker{transform:translate(-50%,-100%);pointer-events:none;--cs:.55}
.nb.gymworker .gwcell{position:relative;width:100%;overflow:hidden}
.nb.gymworker .gwcell img{position:absolute;left:0;top:0;height:100%;max-width:none;display:block;will-change:transform,opacity}
.nb.gymworker .gwcell img.gwb{opacity:0}
.nb.gymworker.flip .gwcell{transform:scaleX(-1)}
.nb.gymworker.flip img{transform:none}
.nb.gym-treadmill::before,.nb.gym-bike::before{display:none}
.mvfrom{font-weight:700;color:var(--rm-plum)}
@media (prefers-reduced-motion:reduce){.nb.gymworker .gwcell img{transition:none!important}}
#scene.gymming .hotspot .pulse{opacity:0} /* no tap rings over her while she works out */

/* ---------- tidy up (ovu-tidy.js, 23 Oct): a few things on the floor and the magical broom that sweeps them.
   #tidyLayer sits beside #ownedProps with no stacking context of its own, so the one depth sort ranks its children with
   her and the pets; every piece gets the same ground contact shadow as her (nothing floats) and no drop-shadow offset ---------- */
#tidyLayer{position:absolute;inset:0;pointer-events:none}
.tidy{position:absolute;transform:translate(-50%,-100%);pointer-events:none;isolation:isolate}
.tidy::before{content:'';position:absolute;left:50%;bottom:0;width:calc(var(--cs,.7) * 100%);aspect-ratio:4/1;transform:translate(-50%,48%);border-radius:50%;
  background:radial-gradient(closest-side,rgba(52,26,72,.46),rgba(52,26,72,.2) 58%,rgba(52,26,72,0));z-index:-1;pointer-events:none}
.tidy img{width:100%;display:block;filter:drop-shadow(0 0 1.5px rgba(60,30,80,.22))} /* a tight edge shadow with no offset: the contact shadow below is the only grounding */
.tidyitem{border:0;background:none;padding:0;cursor:pointer;pointer-events:auto;animation:tidyin .6s ease-out both}
.tidyitem::after{content:'';position:absolute;inset:-10px} /* a finger-sized hit area round a small thing */
.tidyitem:focus-visible{outline:2px solid #fff;outline-offset:3px;border-radius:12px}
.tidyitem.swept{opacity:0;pointer-events:none;animation:tidyout .5s ease-in both} /* its own fade: the entrance animation's fill would keep it opaque, and a transition does not start from an animated value (Codex round two) */
@keyframes tidyin{from{opacity:0}to{opacity:1}}
@keyframes tidyout{from{opacity:1}to{opacity:0}}
.broom{opacity:0;transition:opacity .6s}
.broom.on{opacity:1}
.broom img{filter:drop-shadow(0 0 7px rgba(255,236,170,.95)) drop-shadow(0 0 1.5px rgba(60,30,80,.22));transform-origin:50% 96%}
.broom.sweeping img{animation:broomsway .95s ease-in-out infinite}
.broom.dwell img{animation-duration:.42s}
@keyframes broomsway{0%,100%{transform:rotate(-7deg)}50%{transform:rotate(7deg)}}
#tidyLayer .spark{position:absolute;width:9px;height:9px;transform:translate(-50%,-50%);pointer-events:none;z-index:9;animation:sparkfade .7s ease-out forwards}
#tidyLayer .spark::before,#tidyLayer .spark::after{content:'';position:absolute;left:50%;top:50%;background:radial-gradient(circle,#fff 0%,#ffe9a8 45%,rgba(255,233,168,0) 72%);width:9px;height:3px;transform:translate(-50%,-50%);border-radius:50%}
#tidyLayer .spark::after{width:3px;height:9px}
@keyframes sparkfade{0%{opacity:0;transform:translate(-50%,-50%) scale(.4)}25%{opacity:1}100%{opacity:0;transform:translate(-50%,-110%) scale(1.1) rotate(40deg)}}
#tidyLayer .puff{position:absolute;transform:translate(-50%,-70%);pointer-events:none;z-index:9;animation:puffup .6s ease-out forwards}
#tidyLayer .puff img{width:100%;display:block}
@keyframes puffup{0%{opacity:0;transform:translate(-50%,-60%) scale(.5)}30%{opacity:1}100%{opacity:0;transform:translate(-50%,-120%) scale(1.3)}}
@media (prefers-reduced-motion:reduce){.tidyitem,.tidyitem.swept{animation:none}.broom{transition:none}.broom.sweeping img,.broom.dwell img{animation:none}#tidyLayer .spark,#tidyLayer .puff{display:none}}
/* steps against her usual (Movement) and body signals (Cycle tab), 23 Oct 2026: bars only, no goal line */
.stepbars{position:relative}
.stepbars .usual{position:absolute;left:0;right:0;height:0;border-top:1.5px dashed rgba(107,82,142,.55);pointer-events:none}
.ibars i.none{background:rgba(150,120,190,.16)}
.sigs .lbl{display:flex;align-items:center;gap:6px}
.sigcard{background:var(--rm-card);border:1px solid rgba(150,120,190,.14);border-radius:18px;padding:12px 14px;margin-top:8px}
.sigbars{height:40px}
.sigbars i{min-width:2px}

/* Your cycle now (Cycle tab, 23 Oct): cycle day, next period, the estimated fertile days as a little row of petals */
.cyclenow{position:relative;background:linear-gradient(150deg,#fff,#fdf2f6 55%,#eef8f2);border-radius:22px;padding:13px 14px 10px;margin:0 0 14px;box-shadow:0 10px 26px rgba(122,92,150,.12);overflow:hidden}
.cnhead{display:flex;gap:10px;align-items:center}
.cnhead b{display:block;font:600 18px/1.2 var(--serif);color:var(--rm-plum)}
.cnhead small{display:block;font:600 12.5px/1.4 var(--sans);color:var(--rm-ink-2);margin-top:2px}
.cnic{flex:0 0 auto;width:40px;height:40px;border-radius:14px;display:grid;place-items:center;font-size:22px;color:#c0507a;background:linear-gradient(135deg,#fde3ec,#f7d2e0);animation:cnbob 3.6s ease-in-out infinite}
.cnfline{display:flex;gap:6px;align-items:flex-start;margin:10px 0 6px;font:700 13px/1.45 var(--sans);color:#2f6b4f}
.cnfline .ms{font-size:18px;color:#5fae8a}
.cnfert{display:flex;gap:5px;flex-wrap:wrap}
.cnfert span{flex:1 1 0;min-width:32px;max-width:46px;display:flex;flex-direction:column;align-items:center;padding:6px 0 5px;border-radius:14px 14px 18px 18px;background:#e9f6ef;color:#2f6b4f;animation:cnpop .5s cubic-bezier(.3,1.6,.5,1) both}
.cnfert span b{font:800 14px var(--sans)}.cnfert span i{font:700 9.5px var(--sans);font-style:normal;opacity:.7}
.cnfert span.ov{background:linear-gradient(180deg,#cfeedd,#a9dcc2);box-shadow:0 0 0 2px rgba(95,174,138,.35)}
.cnfert span.today{outline:2px solid var(--rm-plum);outline-offset:1px}
.cnfert span:nth-child(2){animation-delay:.05s}.cnfert span:nth-child(3){animation-delay:.1s}.cnfert span:nth-child(4){animation-delay:.15s}.cnfert span:nth-child(5){animation-delay:.2s}.cnfert span:nth-child(6){animation-delay:.25s}.cnfert span:nth-child(7){animation-delay:.3s}
.cnnote{margin:8px 0 0;font-size:11.5px}
@keyframes cnbob{0%,100%{transform:translateY(0) rotate(0)}50%{transform:translateY(-3px) rotate(-4deg)}}
@keyframes cnpop{from{transform:scale(.4);opacity:0}to{transform:scale(1);opacity:1}}
/* the score ring draws itself, the bars grow, sparkles twinkle round a ring that has a number (23 Oct: "cute cycle wellness
   scoring presentation with motions"); with reduced motion all of it simply appears */
.scbar i{animation:scgrow .9s .25s cubic-bezier(.25,.8,.3,1) both}
@keyframes scgrow{from{width:0}}
.scring .scspark{position:absolute;width:10px;height:10px;pointer-events:none;background:radial-gradient(circle,#fff 0 25%,rgba(255,236,180,.95) 30%,rgba(255,236,180,0) 70%);clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);animation:sctwinkle 2.4s ease-in-out infinite}
@keyframes sctwinkle{0%,100%{transform:scale(.3) rotate(0);opacity:0}45%{transform:scale(1) rotate(30deg);opacity:1}70%{opacity:.6}}
@keyframes scbreathe{0%,100%{transform:scale(1)}50%{transform:scale(1.025)}}
@keyframes scsway{0%,100%{rotate:-3deg}50%{rotate:3deg}}
@media (prefers-reduced-motion:reduce){.scbar i,.cnfert span,.cnic{animation:none!important}}
/* the time picker (ovu-timepick.js, 23 Oct: "aiyo where is my cuteness"): a soft pill over the hidden native input, and a
   small panel of hour and minute petals under it */
.tpwrap{position:relative;display:block}
.tpwrap input.tpnative{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none}
.tpbtn{display:flex;align-items:center;gap:8px;width:100%;min-height:46px;padding:9px 12px;border-radius:16px;border:1.5px solid rgba(201,182,230,.55);background:linear-gradient(135deg,#fff,#fbf4fe);color:var(--rm-plum);font:800 15px var(--sans);cursor:pointer;text-align:left;box-shadow:0 3px 10px rgba(122,92,150,.08);transition:transform .15s ease,box-shadow .15s ease}
.tpbtn:active{transform:scale(.98)}
.tpbtn .tpic{font-size:20px;color:#e0a43c;transition:transform .4s ease}
.tpbtn.night .tpic{color:#8f74c9}
.tpbtn.empty{color:var(--rm-ink-3);font-weight:700}.tpbtn.empty .tpic{color:var(--rm-lilac,#b9a3dc)}
.tpbtn .tptx{flex:1 1 auto;min-width:0}
.tpbtn .tpchev{font-size:20px;color:var(--rm-ink-3);transition:transform .2s ease}
.tpbtn[aria-expanded=true]{border-color:#c9b6e6;box-shadow:0 0 0 3px rgba(201,182,230,.35)}
.tpbtn[aria-expanded=true] .tpchev{transform:rotate(180deg)}
.tpbtn[aria-expanded=true] .tpic{transform:rotate(-12deg) scale(1.1)}
.tppanel{grid-column:1/-1;margin:8px 0 4px;padding:12px;border-radius:20px;background:linear-gradient(160deg,#fff,#f7effc 60%,#eef7f3);box-shadow:0 12px 28px rgba(122,92,150,.18);border:1.5px solid rgba(201,182,230,.45);animation:tpin .22s cubic-bezier(.3,1.4,.5,1) both}
@keyframes tpin{from{opacity:0;transform:translateY(-6px) scale(.97)}}
.tphead{display:flex;align-items:center;gap:8px}
.tphead b{flex:1;font:600 22px var(--serif);color:var(--rm-plum)}
.tpbig{font-size:26px;color:#8f74c9}
.tpnudge{display:flex;gap:4px}
.tpnudge button{width:36px;height:30px;border-radius:10px;border:1px solid rgba(201,182,230,.6);background:#fff;color:var(--rm-plum);font:800 12px var(--sans);cursor:pointer}
.tpampm{display:flex;gap:6px;margin:10px 0 2px}
.tpampm button{flex:1;display:flex;align-items:center;justify-content:center;gap:5px;min-height:36px;border-radius:999px;border:1.5px solid rgba(201,182,230,.5);background:#fff;color:var(--rm-ink-2);font:800 13px var(--sans);cursor:pointer}
.tpampm button .ms{font-size:18px}
.tpampm button.on{background:linear-gradient(135deg,#f6c9d6,#c9b6e6);border-color:transparent;color:#4a2e6e}
.tplbl{display:block;margin:10px 0 5px;font:800 10.5px var(--sans);letter-spacing:.07em;text-transform:uppercase;color:var(--rm-ink-3)}
.tpgrid{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px}
.tpchip{min-height:36px;border-radius:14px 14px 16px 16px;border:1px solid rgba(201,182,230,.45);background:#fff;color:var(--rm-plum);font:800 13.5px var(--sans);cursor:pointer;transition:transform .12s ease,background .15s ease}
.tpchip:active{transform:scale(.92)}
.tpchip.on{background:linear-gradient(180deg,#f9d6e2,#dccbf2);border-color:transparent;box-shadow:0 4px 10px rgba(176,108,143,.25);transform:translateY(-1px)}
.tprow{display:flex;gap:8px;margin-top:12px}
.tprow button{flex:1;min-height:40px;border-radius:999px;font:800 13.5px var(--sans);cursor:pointer;display:flex;align-items:center;justify-content:center;gap:5px}
.tpclear{background:#fff;border:1.5px solid rgba(201,182,230,.6);color:var(--rm-ink-2)}
.tpdone{background:linear-gradient(135deg,#b48bd8,#8f74c9);border:none;color:#fff}
@media (prefers-reduced-motion:reduce){.tppanel{animation:none}.tpbtn,.tpbtn .tpic,.tpchip{transition:none}}
/* a live room: a small glowing green dot after its name (Jamie, 25 Oct: "a glowing green dot for each channel to show that it's live") */
.rmlive{display:inline-block;width:9px;height:9px;margin-left:7px;border-radius:50%;background:radial-gradient(circle at 35% 35%,#8be0b2,#3fbf7f 60%,#2d9a62);vertical-align:1px;box-shadow:0 0 0 0 rgba(63,191,127,.55),0 0 6px rgba(63,191,127,.75);animation:rmlive 2.2s ease-in-out infinite}
.rmlive .sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
@keyframes rmlive{0%,100%{box-shadow:0 0 0 0 rgba(63,191,127,.55),0 0 6px rgba(63,191,127,.75)}50%{box-shadow:0 0 0 5px rgba(63,191,127,0),0 0 10px rgba(63,191,127,.9)}}
@media (prefers-reduced-motion:reduce){.rmlive{animation:none}}
/* the symptom day's body log (23 Oct): Ovaria's discharge photos as small round tiles */
.dcgrid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px}
.dctile{display:flex;flex-direction:column;align-items:center;gap:4px;padding:6px 4px 7px;border-radius:16px;border:2px solid transparent;background:#fff;box-shadow:0 2px 8px rgba(122,92,150,.10);cursor:pointer;font:700 11.5px var(--sans);color:var(--rm-ink-2);transition:transform .12s ease}
.dctile img{width:100%;max-width:64px;aspect-ratio:1;object-fit:cover;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.05)}
.dctile.on{border-color:#c9b6e6;background:linear-gradient(180deg,#fbf6fe,#f2eafb);color:var(--rm-plum);transform:translateY(-1px)}
.dctile:active{transform:scale(.95)}
.bnote{margin-top:6px;min-height:1em}.bnote.flag{color:#9a5a00;font-weight:700}
.sublbl{display:block;margin-top:8px}
@media (prefers-reduced-motion:reduce){.dctile{transition:none}}

/* ---------- lighter look for slower phones (ovu-perf.js, 23 Oct 2026) ----------
   No glass blur over the moving scene (the panels turn nearly solid instead), no soft shadows on sprites and hotspots,
   and the ambient loops (sparkles, twinkles, idle sways, the bench effects) hold still. Walking, fishing and the
   breathing guides keep their motion: those carry meaning. */
html[data-perf=lite] .icon-btn,html[data-perf=lite] .chip,html[data-perf=lite] .nav,html[data-perf=lite] .hint,html[data-perf=lite] .hud,html[data-perf=lite] .menubar,html[data-perf=lite] .dock,html[data-perf=lite] .visitbar,html[data-perf=lite] .welcome .btn.ghost,html[data-perf=lite] .c-list li,html[data-perf=lite] .c-opt,html[data-perf=lite] .podmini,html[data-perf=lite] .camctl button,html[data-perf=lite] .minimap,html[data-perf=lite] .btap-card,html[data-perf=lite] .gamehud,html[data-perf=lite] .zonename,html[data-perf=lite] .plazapill,html[data-perf=lite] .farmcan,html[data-perf=lite] .pv-bar,html[data-perf=lite] .c-caps div,html[data-perf=lite] .trybar{-webkit-backdrop-filter:none!important;backdrop-filter:none!important;background-color:rgba(255,255,255,.95)}
html[data-perf=lite] .veil{-webkit-backdrop-filter:none!important;backdrop-filter:none!important;background:rgba(40,24,70,.48)}
html[data-perf=lite] .hotspot,html[data-perf=lite] .hotspot *,html[data-perf=lite] .prop,html[data-perf=lite] .prop img,html[data-perf=lite] .nbperson img,html[data-perf=lite] .villager img,html[data-perf=lite] .keeper img,html[data-perf=lite] .plot,html[data-perf=lite] .shopprop img{filter:none!important}
html[data-perf=lite] .star,html[data-perf=lite] .sparkle,html[data-perf=lite] .win-night i.s,html[data-perf=lite] .welcome::after,html[data-perf=lite] .w-hero::before,html[data-perf=lite] .c-moon::before,html[data-perf=lite] .nbperson img,html[data-perf=lite] .villager img,html[data-perf=lite] .keeper img,html[data-perf=lite] .barnthing.animal img,html[data-perf=lite] .prop.owned.pet .petbody,html[data-perf=lite] .shopprop.kind-pet img,html[data-perf=lite] .plot.stage-5 svg,html[data-perf=lite] .holo-disc .scan,html[data-perf=lite] .holo-cone,html[data-perf=lite] #seatfx *,html[data-perf=lite] .scring .scspark,html[data-perf=lite] .sccloud,html[data-perf=lite] .cnic,html[data-perf=lite] .avatar.idle img,html[data-perf=lite] .avatar.flip.idle img,html[data-perf=lite] .hotspot .pulse,html[data-perf=lite] .hotspot.m .mbadge{animation:none!important}
/* the food guide (ovu-nourish.js): option cards with watercolour pictures, the result lines and the diary row */
.nprog{height:4px;border-radius:99px;background:var(--rm-lilac-2);margin:0 0 12px;overflow:hidden}
.nprog i{display:block;height:100%;background:linear-gradient(90deg,#c9b6e6,#8f74c9);border-radius:99px;transition:width .3s}
.nq{font:700 19px/1.25 var(--serif);color:var(--rm-ink);margin:2px 0 10px}
.ncards{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:0 0 10px}
.ncard{display:grid;justify-items:center;text-align:center;gap:4px;padding:10px 8px 12px;border-radius:18px;background:var(--rm-paper-2);border:1.5px solid transparent;cursor:pointer;transition:transform .12s,border-color .15s,background .15s}
.ncard img{width:96px;height:96px;object-fit:contain} /* 30 Oct: the pictures are keyed clear, no blend needed */
.ncard b{font:700 14px/1.2 var(--sans);color:var(--rm-ink)}
.ncard small{font:500 11.5px/1.3 var(--sans);color:var(--rm-ink-2)}
.ncard.on{border-color:var(--rm-mauve);background:var(--rm-lilac-2)}
.ncard:active{transform:scale(.97)}
.nnav{margin-top:6px}
.nres{display:grid;gap:8px;margin:0 0 10px}
.nline{margin:0;padding:8px 6px 8px 12px;border-radius:14px;background:var(--rm-paper-2);font:600 13.5px/1.4 var(--sans);color:var(--rm-ink);display:flex;align-items:center;gap:6px}
.nline>span{flex:1;min-width:0}
.nline.n-care{background:color-mix(in srgb,var(--rm-paper-2) 78%,#ffb36b)}
.nline.n-cycle,.nline.n-stage{background:color-mix(in srgb,var(--rm-paper-2) 84%,#e58fbf)}
.nsrc{flex:none;width:32px;height:32px;border:none;border-radius:50%;background:transparent;color:var(--rm-mauve);display:grid;place-items:center;cursor:pointer;padding:0}
.nsrc .ms{font-size:19px}
.nsrc:active{background:var(--rm-lilac-2)}
.nrow{display:flex;align-items:center;gap:10px;padding:10px 12px;border-radius:16px;background:var(--rm-paper-2);margin:0 0 10px}
.nrow>.ms{font-size:22px;color:var(--rm-mauve)}
.nrow>div{flex:1;min-width:0;display:grid;gap:2px}
.nrow b{font:700 13.5px var(--sans);color:var(--rm-ink)}
.nrow small{font:500 11.5px/1.35 var(--sans);color:var(--rm-ink-2)}
.nrow .btn{flex:none}

/* ---- 26 Oct: the heart mirror, a pulse check with the front camera (ovu-heart.js) ---- */
.hmintro{display:flex;gap:12px;align-items:flex-start}
.hmintro img{width:62px;flex:0 0 auto}
.hmtips{margin:6px 0 0;padding-left:18px;font:600 13px/1.5 var(--sans);color:var(--rm-ink-2)}
.hmcam{position:relative;aspect-ratio:3/4;width:min(100%,300px);margin:4px auto 0;border-radius:24px;overflow:hidden;background:#2c2142;box-shadow:0 10px 26px rgba(70,40,100,.22)}
.hmcam video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}
.hmmask{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.hmmask path{fill:rgba(44,33,66,.38)}
.hmmask ellipse{fill:none;stroke:rgba(255,236,246,.95);stroke-width:.7;stroke-dasharray:2 1.4;vector-effect:non-scaling-stroke}
.hmring{position:absolute;right:10px;top:10px;width:46px;height:46px}
.hmring svg{width:100%;height:100%;transform:rotate(-90deg)}
.hmring circle{fill:none;stroke-width:3}
.hmring .track{stroke:rgba(255,255,255,.3)}
.hmring .prog{stroke:#ffb3cf;stroke-linecap:round;transition:stroke-dasharray .25s linear}
.hmring b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;font:800 14px var(--sans)}
.hmhint{text-align:center;margin:10px 0 2px;font:700 14px var(--sans);color:var(--rm-plum)}
.hmres{display:flex;align-items:center;gap:14px;margin:4px 0 8px}
.hmres img{width:54px}
.hmbpm{display:block;font:800 46px/1 var(--serif);color:var(--rm-plum)}
.hmres span{font:700 13px var(--sans);color:var(--rm-ink-2)}
.hmcare{display:flex;gap:8px;align-items:flex-start;background:#fff3f6;border-radius:14px;padding:10px 12px;font:600 13px/1.45 var(--sans);color:#7a3550}
.hmcare .ms{font-size:18px;color:#c4547d}
.hmbtns{flex-wrap:wrap}
.hmbtns #hmSave{flex:1 1 100%}
.hmstart .btn{flex:1 1 100%}
.hmhrv{display:flex;gap:8px;align-items:flex-start;background:#f3effc;border-radius:14px;padding:10px 12px;font:600 13px/1.45 var(--sans);color:#4d3a78}
.hmhrv .ms{font-size:18px;color:#7d62c4}
.hmhrv.none{background:#f6f3f8;color:var(--rm-ink-2)}
.signum{margin:6px 0 2px;font:600 13px var(--sans);color:var(--rm-ink-2)}
.signum b{font:700 26px var(--serif, var(--sans));color:var(--rm-ink)}
.signum span{font-weight:600}
.hotspot.mirrorspot{min-width:32px;min-height:32px;width:32px;height:32px} /* the mirror on her desk: a smaller spot nudged to its outer side, so the computer's spot keeps its own centre */
.hotspot.mirrorspot.mleft{transform:translate(calc(-50% - 7px),-50%)}
.hotspot.mirrorspot.mright{transform:translate(calc(-50% + 7px),-50%)}
.hotspot.mirrorspot .glow,.hotspot.mirrorspot .tip{pointer-events:none}

/* tester bug reports (ovu-bugreport.js): a small bug in the top bar, testers only */
.icon-btn.bugbtn{width:32px;height:32px;background:rgba(255,246,240,.86)}
#bugBtn{position:absolute;right:12px;top:52px;z-index:5;pointer-events:auto}
.scene.arranging #bugBtn{pointer-events:none;opacity:.45}
.icon-btn.bugbtn .ms{font-size:18px;color:#9a5a6e}
.bugctx{background:rgba(107,82,142,.06);border-radius:14px;padding:10px 12px;margin:10px 0 12px;font:600 12.5px var(--sans);color:var(--rm-ink-2)}
.bugctx b{display:block;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin-bottom:4px}
.bugctx ul{margin:0;padding-left:18px;line-height:1.55}
.bugshotrow{align-items:center;gap:10px;margin-top:10px}
#bugShotPrev{max-height:84px;max-width:40%;border-radius:10px;border:1px solid rgba(107,82,142,.18)}
#bugNote{font-size:16px}

/* Learn reads (ovu-reads.js): a folder row with its picture, and the article itself */
.frow.fread img{width:44px;height:44px;border-radius:12px;object-fit:cover;flex:0 0 44px;background:#fbf6ef}
.frow.fread small{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.readpost{font:500 15px/1.6 var(--sans);color:var(--rm-ink)}
.readpost .readhero{display:block;width:min(240px,62%);height:auto;aspect-ratio:1;margin:2px auto 12px;border-radius:24px;background:#fbf6ef;box-shadow:0 6px 18px rgba(90,66,116,.12)}
.readpost p{margin:0 0 12px}
.readpost p b{color:var(--rm-plum)}
.readsrc{margin-top:16px;padding:12px 14px;border-radius:14px;background:rgba(107,82,142,.06);font:600 12.5px/1.5 var(--sans);color:var(--rm-ink-2)}
.readsrc b{display:block;font:800 11px var(--sans);letter-spacing:.06em;text-transform:uppercase;color:var(--rm-ink-3);margin-bottom:4px}
.readsrc ul{margin:0 0 8px;padding-left:18px}
.readsrc p{margin:0;font-weight:600;color:var(--rm-ink-3)}
.readnav{justify-content:space-between;gap:10px;margin-top:12px}

/* room swaps (renderSwaps): patches painted over the plate where the original piece stands */
.swap-patches{position:absolute;inset:0;pointer-events:none}
.swap-patch{position:absolute;display:block;height:auto;user-select:none;-webkit-user-drag:none;transition:filter 1.6s ease}
/* the barn animals' care bubble (30 Oct): the pets' bubble, with a row of hearts and buttons that rest when done today */
.petbub button:disabled{opacity:.45;cursor:default}
.petbub .barnhearts{gap:1px}.petbub .barnhearts .ms{font-size:13px;color:#e58fb0}.petbub .barnhearts .ms.off{color:#e6d9ee}
/* Koi Pond and Light Flower intros (Jamie, 30 Oct: say what it is for, what to do and what to expect): one line, three
 * pictured steps, a length that is the goal, the (i) for how it helps; a clock while playing and a finish that says what she did */
#btapCard,#lfCard{max-height:calc(100dvh - 32px);overflow:auto;gap:10px}
.btap-info{position:absolute;top:10px;right:10px;width:40px;height:40px;border-radius:50%;border:1px solid rgba(255,255,255,.18);background:rgba(255,255,255,.1);color:#f1e9fb;display:grid;place-items:center;cursor:pointer;padding:0}
.btap-info .ms{font-size:21px}
.btap-card .btap-why{font:600 15px/1.45 var(--sans);color:#efe6ff;margin:-2px 30px 0}
.btap-card .btap-why b{color:#fff;font-weight:800}
.btap-steps{list-style:none;margin:2px 0 0;padding:0;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.btap-steps li{display:flex;flex-direction:column;align-items:center;gap:6px;min-width:0}
.btap-steps img{width:100%;max-width:110px;aspect-ratio:1;height:auto;object-fit:cover;border-radius:18px;box-shadow:0 6px 18px rgba(0,0,0,.28);background:rgba(255,255,255,.06)}
.btap-steps span{font:700 11.5px/1.3 var(--sans);color:#efe6ff}
.btap-steps i{display:inline-grid;place-items:center;width:17px;height:17px;margin-right:4px;border-radius:50%;background:#f1e9fb;color:#3b2d52;font:800 10px var(--sans);font-style:normal;vertical-align:1px}
.btap-more{text-align:center}
.btap-more summary{cursor:pointer;list-style:none;display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:999px;font:700 12px var(--sans);color:#d9cdef;border:1px dashed rgba(255,255,255,.2)}
.btap-more summary::-webkit-details-marker{display:none}
.btap-more summary b{color:#fff}
.btap-more[open] summary{margin-bottom:8px}
.btap-more .lf-air{margin-top:8px}
.btap-clock{position:absolute;left:50%;top:calc(18px + env(safe-area-inset-top,0px));transform:translateX(-50%);z-index:1;padding:5px 14px;border-radius:999px;background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.18);font:700 15px var(--sans);font-variant-numeric:tabular-nums;color:#fff;pointer-events:none}
.btap-clock:empty{display:none}
.btap-pop{position:absolute;inset:0;z-index:6;display:flex;align-items:center;justify-content:center;padding:16px;background:rgba(10,6,22,.62)}
.btap-pop[hidden]{display:none}
.btap-popcard{width:min(92vw,380px);max-height:calc(100dvh - 32px);overflow:auto;background:#2a2045;border:1px solid rgba(255,255,255,.16);border-radius:22px;padding:18px;display:flex;flex-direction:column;gap:10px;text-align:left;color:#efe6ff}
.btap-popcard h3{font:600 20px var(--serif);color:#fff;margin:0}
.btap-popcard ul{margin:0;padding-left:18px;font:500 13.5px/1.5 var(--sans)}
.btap-popcard li{margin:4px 0}
.btap-popcard b{color:#fff;font-weight:800}
.btap-src{font:600 11.5px/1.55 var(--sans);color:#b9abd6;margin:0}
.btap-src b{display:block;color:#d9cdef}
.btap-doneart{width:96px;height:96px;margin:0 auto;border-radius:22px;object-fit:cover;box-shadow:0 8px 22px rgba(0,0,0,.3)}
.btap-done .btn[hidden]{display:none}
/* Cramps today: four picture tiles (Jamie, 30 Oct) */
.crgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:4px 0 10px}
.crtile{display:flex;flex-direction:column;align-items:center;gap:6px;padding:12px 8px;border-radius:18px;border:1.5px solid rgba(150,120,190,.18);background:var(--rm-lilac-2,#f1e9fa);font:700 14px var(--sans);color:var(--rm-ink);cursor:pointer}
.crtile img{width:84px;height:84px;object-fit:contain;border-radius:14px}
.crtile .crico{width:84px;height:84px;display:grid;place-items:center;font-size:44px;color:var(--rm-mauve,#8a6aa6);background:rgba(255,255,255,.7);border-radius:50%}
.crtile.on{border-color:var(--rm-mauve,#8a6aa6);background:#fff}
.crline{padding:10px 12px;border-radius:14px;background:#fff;font:600 13.5px/1.45 var(--sans);color:var(--rm-ink);margin-bottom:10px}
.crline .btn{margin-left:6px}
.crdoc{font:500 12.5px/1.45 var(--sans);color:var(--rm-ink-2,#6b5a7a)}
/* her report is fixed (30 Oct): Luna, her own words, the team's one line */
.fixedcard{display:flex;gap:12px;align-items:center;margin:4px 0 12px}.fixedcard img{width:64px;height:64px;object-fit:contain;flex:none}
.fixedq{font:600 14px/1.4 var(--serif);color:var(--rm-plum);margin:0 0 4px}.fixedn{font:600 12.5px/1.45 var(--sans);color:var(--rm-ink-2);margin:0}
/* the colourful score ring (ovu-scores.js; Jamie, 30 Oct: "the scoring circle is out of the frame ... I want an interactive,
   very colorful outcome on the scoring"): the friend and title on one row, then the ring sized by its card (never wider,
   at any phone width or text size), a picture on each segment, the tapped part's line below it and a chip per part */
.schero{display:flex;align-items:center;gap:12px;position:relative}
.schero .scside{min-width:0;flex:1}
.sccloud{width:58px;height:58px;flex:none;object-fit:contain;filter:drop-shadow(0 6px 10px rgba(122,92,150,.2));animation:scfloat 4.5s ease-in-out infinite}
.scring{position:relative;width:min(244px,100%);aspect-ratio:1;margin:8px auto 2px;container-type:inline-size}
.scring svg{position:absolute;inset:0;width:100%;height:100%;display:block;overflow:visible;background:none;border-radius:0;box-shadow:none}
.scnum{position:absolute;inset:26%;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;pointer-events:none;font:800 34px var(--serif);font-size:clamp(24px,17cqw,44px);line-height:1;color:var(--rm-plum)}
.scnum b{font:inherit;background:linear-gradient(120deg,#8f6cf0 10%,#ff5f9e 40%,#ff8a3d 65%,#1fbfae 90%);-webkit-background-clip:text;background-clip:text;color:transparent;-webkit-text-fill-color:transparent;padding:0 2px}
.sc-sleep .scnum b{background-image:linear-gradient(120deg,#3d9cf5 15%,#a46cf2 60%,#ff7eb3 90%)}
.scnum small{font:700 10px var(--sans);color:var(--rm-ink-3);letter-spacing:.04em;margin-top:3px}
.scring.sofar .scnum small{font:800 9.5px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:#b06c8f;background:#fde8ef;border-radius:99px;padding:2px 7px;margin-top:5px}
.scnum .scdash{font-size:34px;color:var(--rm-lilac)}
.scseg{cursor:pointer;transition:transform .25s ease;transform-origin:100px 100px}
.scseg.on{transform:scale(1.05)}
.scseg.on .scfill,.scseg.on .sctrack{filter:drop-shadow(0 0 5px var(--tint))}
.scfill{animation:scfill 1s calc(var(--i) * .2s + .1s) cubic-bezier(.25,.8,.3,1) backwards}
@keyframes scfill{from{stroke-dasharray:0 100}}
.scico{position:absolute;width:19%;aspect-ratio:1;transform:translate(-50%,-50%);border:none;border-radius:50%;padding:3px;background:#fff;box-shadow:0 0 0 2.5px var(--tint),0 4px 10px rgba(90,66,116,.22);cursor:pointer;transition:transform .2s ease;animation:scpop .45s calc(var(--i,0) * .2s + .5s) cubic-bezier(.3,1.6,.5,1) backwards}
.scico img{width:100%;height:100%;object-fit:contain;display:block}
.scico.soon img{filter:grayscale(.7);opacity:.55}
.scico.on{transform:translate(-50%,-50%) scale(1.18)}
@keyframes scpop{from{transform:translate(-50%,-50%) scale(.2);opacity:0}}
.scring .scspark{position:absolute;width:10px;height:10px;pointer-events:none;background:radial-gradient(circle,#fff 0 25%,rgba(255,236,180,.95) 30%,rgba(255,236,180,0) 70%);clip-path:polygon(50% 0,62% 38%,100% 50%,62% 62%,50% 100%,38% 62%,0 50%,38% 38%);animation:sctwinkle 2.4s ease-in-out infinite}
.scspark.s1{top:2%;right:14%}.scspark.s2{bottom:6%;left:10%;animation-delay:.6s;width:8px;height:8px}.scspark.s3{top:46%;right:1%;animation-delay:1.2s;width:7px;height:7px}.scspark.s4{top:8%;left:6%;animation-delay:1.8s;width:6px;height:6px}
.scdetail{margin:6px 0 8px}
.scdetail:empty{margin:0}
.schint{margin:0;text-align:center;font:700 12px var(--sans);color:var(--rm-ink-3)}
.scpart{display:flex;gap:10px;align-items:center;padding:10px 12px;border-radius:16px;background:linear-gradient(120deg,color-mix(in srgb,var(--b) 30%,#fff),#fff 70%);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--a) 45%,transparent);animation:scpop2 .3s ease both}
.scpart img{width:42px;height:42px;flex:none;object-fit:contain}
.scpart div{flex:1;min-width:0}
.scpart div>b{display:flex;justify-content:space-between;gap:8px;font:800 13px var(--sans);color:var(--rm-plum)}
.scpart div>b em{font:800 13px var(--serif);font-style:normal;color:var(--a)}
.scpart p{margin:2px 0 0;font:600 12px/1.4 var(--sans);color:var(--rm-ink-2)}
.scpart .ibtn{width:24px;height:24px;font-size:12px}
@keyframes scpop2{from{opacity:0;transform:translateY(4px)}}
.scchips{display:grid;grid-template-columns:repeat(auto-fit,minmax(138px,1fr));gap:8px;margin:4px 0}
.scchip{display:flex;align-items:center;gap:8px;min-width:0;padding:7px 10px 7px 7px;border:none;border-radius:14px;cursor:pointer;text-align:left;background:linear-gradient(120deg,color-mix(in srgb,var(--b) 35%,#fff),#fff);box-shadow:inset 0 0 0 1.5px color-mix(in srgb,var(--a) 35%,transparent);transition:transform .15s,box-shadow .15s}
.scchip img{width:30px;height:30px;flex:none;object-fit:contain}
.scchip span{flex:1;min-width:0}
.scchip b{display:block;font:800 12px var(--sans);color:var(--rm-plum);line-height:1.2}
.scchip small{display:block;font:600 10px var(--sans);color:var(--rm-ink-3)}
.scchip em{font:800 15px var(--serif);font-style:normal;color:var(--a)}
.scchip.soon em{font:700 11px var(--sans);color:var(--rm-ink-3)}
.scchip.soon img{filter:grayscale(.7);opacity:.55}
.scchip.on{box-shadow:inset 0 0 0 2.5px var(--a),0 4px 12px color-mix(in srgb,var(--a) 30%,transparent);transform:translateY(-1px)}
.scshown{margin-top:8px}
.scchip.shown em{font:800 13px var(--serif);color:#6d5a8c}
.scmini{display:block;height:5px;margin-top:4px;border-radius:99px;background:color-mix(in srgb,var(--b) 45%,#fff);overflow:hidden}
.scmini u{display:block;height:100%;border-radius:99px;background:linear-gradient(90deg,var(--a),var(--b));animation:scgrow .9s .4s cubic-bezier(.25,.8,.3,1) backwards}
.scnext{margin-top:4px!important}
.chip-i{display:inline-flex;align-items:center;gap:5px;border:none;cursor:pointer;font:inherit}
.chip-i b{width:16px;height:16px;border-radius:50%;display:grid;place-items:center;background:#fff;font:700 10px var(--serif);color:var(--rm-mauve)}
.scneed img{width:26px;height:26px;flex:none;object-fit:contain}
.scorecard.spot{animation:scspot 1.4s ease}
@keyframes scspot{30%{box-shadow:0 0 0 4px rgba(255,138,184,.45),0 10px 26px rgba(122,92,150,.12)}}
@media (prefers-reduced-motion:reduce){.scfill,.scico,.scpart,.sccloud,.scorecard.spot{animation:none!important}.scspark{display:none}.scseg{transition:none}}
/* Cycle wellness and Circadian rhythm float above Luna as their own friends (Jamie, 30 Oct); each opens its own card */
.scorbs{position:absolute;right:16px;bottom:168px;z-index:36;display:flex;flex-direction:column;gap:10px}
.scorb{width:52px;height:52px;border:none;background:none;padding:0;cursor:pointer;filter:drop-shadow(0 8px 12px rgba(90,66,116,.3));animation:lunafloat 4.4s ease-in-out infinite}
.scorb+.scorb{animation-delay:-2.2s}
.scorb img{width:100%;height:100%;object-fit:contain;display:block}
.scorb:active{transform:scale(.92)}
@media(min-width:520px){.scorbs{bottom:176px}}
@media(max-height:740px){.scorbs{flex-direction:row;bottom:92px;right:90px}}
@media(max-height:740px) and (min-width:520px){.scorbs{bottom:100px}}
html[data-text] .scorbs{zoom:var(--tz,1)}
@media (prefers-reduced-motion:reduce){.scorb{animation:none}}
html[data-perf=lite] :is(.scorb,.sccloud,.scico,.scfill){animation:none!important}
/* the rhythm check as tiles (Jamie, 30 Oct: "too wordy ... cleaner illustrations. They can click in"): a picture, a short
   name and a two-word level; a tap opens that part's card under the tiles */
.rytiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:4px 0 8px}
.rytile{display:flex;flex-direction:column;align-items:center;gap:4px;min-width:0;padding:12px 8px 10px;border:none;border-radius:20px;cursor:pointer;background:linear-gradient(165deg,#fff,#fbf7fe 70%);box-shadow:inset 0 0 0 1.5px rgba(201,182,230,.4),0 6px 16px rgba(122,92,150,.08);transition:transform .15s,box-shadow .15s}
.rytile img{width:64px;height:64px;object-fit:contain;animation:rybob 3.6s calc(var(--i,0) * -.9s) ease-in-out infinite}
.rytile b{font:600 15px/1.2 var(--serif);color:var(--rm-plum);text-align:center}
.rytile small{display:inline-flex;align-items:center;gap:5px;font:800 11px var(--sans);color:var(--rm-ink-2);background:#f4eefa;border-radius:99px;padding:3px 9px}
.rytile small i{width:8px;height:8px;border-radius:50%;background:#c9b6e6}
.rytile.lvlc-ok small i,.rytile.lvlc-ref small i{background:#5fbf95}
.rytile.lvlc-note small i{background:#f0b45a}
.rytile.lvlc-chat small i{background:#ec7ea0}
.rytile.on{transform:translateY(-2px);box-shadow:inset 0 0 0 2.5px #b79be0,0 10px 20px rgba(122,92,150,.16)}
.rytile:active{transform:scale(.97)}
@keyframes rybob{0%,100%{transform:translateY(0) rotate(-2deg)}50%{transform:translateY(-4px) rotate(2deg)}}
.rydetail .rycard{animation:scpop2 .3s ease both}
.rycard[hidden],.ryhint[hidden]{display:none}
.ryhint{margin:0 0 6px;text-align:center;font:700 12px var(--sans);color:var(--rm-ink-3)}
.ready{display:grid;grid-template-columns:52px 1fr;column-gap:10px;align-items:center}
.ready>img{grid-row:span 2;width:52px;height:52px;object-fit:contain}
.ready .dots,.ready>p{grid-column:1 / -1}
@media (prefers-reduced-motion:reduce){.rytile img,.rydetail .rycard,.scmini u{animation:none!important}}
html[data-perf=lite] .rytile img{animation:none!important}
/* almost no words on the cards (Jamie, 30 Oct): what there is to read sits behind an (i), with the numbers and the care
   phrases in bold for scanning */
.scorecard h3,.rhythm>h3{display:flex;align-items:center;gap:8px}
:is(.scabout-btn,.ryabout-btn){width:22px;height:22px;font-size:12px}
:is(.scabout-btn,.ryabout-btn).on{background:var(--rm-lilac-2,#efe7f7);opacity:1}
.scabout,.ryabout{margin:8px 0 6px;padding:10px 12px;border-radius:16px;background:rgba(255,255,255,.75);box-shadow:inset 0 0 0 1.5px rgba(201,182,230,.4);animation:scpop2 .3s ease both}
.scabout[hidden],.ryabout[hidden]{display:none}
.scabout p,.ryabout p{margin:0 0 6px;font:600 12.5px/1.45 var(--sans);color:var(--rm-ink-2)}
.scabout p:last-child,.ryabout p:last-child{margin-bottom:0}
:is(.scabout,.ryabout,.scpart,.scneed,.rycard,.stagenote) b{font-weight:800;color:var(--rm-plum)}
.rytile{position:relative}
.ryi{position:absolute;top:8px;right:8px;width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font:700 10px var(--serif);font-style:normal;color:var(--rm-mauve);background:#fff;box-shadow:inset 0 0 0 1px rgba(107,82,142,.28)}
@media (prefers-reduced-motion:reduce){.scabout,.ryabout{animation:none}}

/* which home a furniture piece is for (tester reports #15 and #16, 30 Oct) */
.homechip{display:inline-flex;align-items:center;gap:2px;font:800 9.5px var(--sans);font-style:normal;letter-spacing:.03em;background:#fde3ee;color:#b0577f;border-radius:999px;padding:2px 7px 2px 5px;margin-left:4px;vertical-align:2px}.homechip .ms{font-size:11px}
.soonline{display:flex;align-items:center;gap:6px;margin:4px 0 10px;padding:9px 12px;border-radius:14px;background:var(--rm-paper-2,#f4eefa);font:700 13px var(--sans);color:var(--rm-plum)}.soonline .ms{font-size:18px;color:var(--rm-mauve)}
/* the save-a-pause card shows Erin, not a plain ball (Jamie, 30 Oct: "some other icon please") */
.orb.erinorb{background:#f3ecfb url(assets/avatars/erin/erin-chibi-face.webp) center 20%/cover no-repeat;border:4px solid #fff;box-shadow:0 0 30px rgba(169,138,208,.45)}

/* the two floating score friends are off (Jamie, 30 Oct: 'remove these two icon please'); the scores open from the Cycle tab */
.scorbs[hidden]{display:none!important}
/* the ranch counter as picture tiles (30 Oct): a price on each, a two-word reason when it cannot be had yet */
.ranchtop{display:flex;gap:8px;flex-wrap:wrap;margin:2px 0 12px}
.rchip{display:inline-flex;align-items:center;gap:4px;padding:5px 11px;border-radius:999px;background:var(--rm-paper-2,#f4eefa);font:700 13px var(--sans);color:var(--rm-plum)}
.rchip .ms{font-size:16px;color:var(--rm-mauve)}.rchip .ms.fill{color:#e58fb0}
.ranchtiles{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.rtile{display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 8px 9px;border:1.5px solid rgba(157,134,196,.25);border-radius:18px;background:#fff;cursor:pointer;font:inherit;color:var(--rm-ink)}
.rtile img{width:72px;height:72px;object-fit:contain}
.rtile b{font:700 13.5px var(--sans);color:var(--rm-plum);text-align:center}
.rtile .rprice{display:inline-flex;align-items:center;gap:3px;font:700 12.5px var(--sans);color:var(--rm-ink-2)}.rtile .rprice .ms{font-size:14px;color:#e58fb0}
.rtile small{font:600 11.5px var(--sans);color:var(--rm-ink-3)}
.rtile:not(:disabled):hover{border-color:var(--rm-mauve)}
.rtile:disabled{cursor:default;opacity:.62}
.rtile .rsize{font:600 11.5px var(--sans);color:var(--rm-ink-2);text-align:center}
/* a farm animal's wish today (30 Oct): a small thought bubble over her, answered from her care bubble */
.barnthing .moodpic{position:absolute;left:50%;bottom:92%;width:46%;max-width:44px;aspect-ratio:1;transform:translateX(-50%);background:#fff;border-radius:50%;box-shadow:0 3px 8px rgba(70,40,90,.18);display:flex;align-items:center;justify-content:center;pointer-events:none}
.barnthing.animal .moodpic img,.barnthing.animal.flip .moodpic img{width:78%;height:78%;object-fit:contain;animation:none;transform:none;filter:none}
