/* Kit V4 primitives · reads tokens/brand.css only. Classes are rv4-*; one rule per state. Swift notes sit in each .d.ts. */
.rv4{font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink);-webkit-font-smoothing:antialiased}
.rv4 *,.rv4 *::before,.rv4 *::after{box-sizing:border-box}
/* button */
.rv4-btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;height:var(--rv-h-md);padding:0 14px;border-radius:var(--rv-r-field);font:500 14px/1 var(--rv-font);border:1px solid transparent;background:linear-gradient(180deg,var(--rv-base-1),var(--rv-base-2));color:var(--rv-ink);cursor:pointer;position:relative;white-space:nowrap;isolation:isolate;box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 80%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 9%,transparent),0 1px 2px color-mix(in oklab,var(--rv-shade) 8%,transparent);transition:transform var(--rv-d1) var(--rv-ease),box-shadow var(--rv-d2) var(--rv-ease),filter var(--rv-d2) var(--rv-ease);will-change:transform}
.rv4-btn:not(.accent):not(.quiet):not(.destructive)::before,.rv4-ev::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;background:linear-gradient(var(--rv-hz-ang),var(--rv-second),color-mix(in oklab,var(--rv-sky-ro) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)) 42%,color-mix(in oklab,var(--rv-sky-gl) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)) 74%,color-mix(in oklab,var(--rv-sky-hz) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)));-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;opacity:0;transition:opacity var(--rv-d2) var(--rv-ease);pointer-events:none;z-index:1}
.rv4-btn:not(.accent):hover::before,.rv4-ev:hover::before{opacity:var(--rv-rim-op);animation:rv4-drift var(--rv-hz-drift) linear infinite}
@keyframes rv4-drift{to{--rv-hz-ang:450deg}}
.rv4-btn:hover{transform:translateY(-1px);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 80%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 12%,transparent),0 4px 12px -4px color-mix(in oklab,var(--rv-shade) 22%,transparent)}
.rv4-btn:active{transform:translateY(1px) scale(.985);transition-duration:60ms}
.rv4-btn.primary{background:linear-gradient(180deg,color-mix(in oklab,var(--rv-ink) 84%,var(--rv-base-1)),var(--rv-ink) 60%);color:var(--rv-base-1);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 22%,transparent),0 1px 2px color-mix(in oklab,var(--rv-shade) 30%,transparent),0 8px 18px -10px color-mix(in oklab,var(--rv-shade) 55%,transparent)}
.rv4-btn.primary:hover{filter:brightness(1.08)}
.rv4-btn.accent{background:linear-gradient(var(--rv-hz-ang),var(--rv-accent),var(--rv-accent-2));color:var(--rv-on-accent);overflow:hidden;box-shadow:inset 0 1px 0 oklch(99% .01 85/.38),inset 0 -1px 0 oklch(20% .05 30/.18),0 1px 2px color-mix(in oklab,var(--rv-accent) 40%,transparent),0 10px 24px -10px color-mix(in oklab,var(--rv-accent) 75%,transparent)}
.rv4-btn.accent::before{content:"";position:absolute;inset:-1px;background:linear-gradient(110deg,transparent 35%,oklch(99% .01 85/.32) 50%,transparent 65%);transform:translateX(-130%);transition:transform .7s var(--rv-ease-out);pointer-events:none}
.rv4-btn.accent:hover::before{transform:translateX(130%)}.rv4-btn.accent:hover{filter:saturate(1.08)}
.rv4-btn.ghost{background:transparent;box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 18%,transparent)}.rv4-btn.ghost:hover{background:color-mix(in oklab,var(--rv-base-2) 60%,transparent)}
.rv4-btn.quiet{background:transparent;box-shadow:none;color:var(--rv-ink-2)}.rv4-btn.quiet:hover{color:var(--rv-ink);background:var(--rv-base-2);box-shadow:none}
.rv4-btn.destructive{background:transparent;box-shadow:none;color:var(--rv-err)}.rv4-btn.destructive:hover{background:color-mix(in oklab,var(--rv-err) 10%,transparent)}
.rv4-btn.sm{height:var(--rv-h-sm);padding:0 11px;font-size:13px}.rv4-btn.lg{height:var(--rv-h-lg);padding:0 18px;font-size:15px;border-radius:calc(var(--rv-r-field) + 2px)}
.rv4-btn.pill{border-radius:var(--rv-r-pill)}.rv4-btn.icon{width:var(--rv-h-md);padding:0}.rv4-btn.icon.sm{width:var(--rv-h-sm)}.rv4-btn.icon.lg{width:var(--rv-h-lg)}
.rv4-btn:disabled{opacity:.42;cursor:default;transform:none}
/* focus · the horizon as a 2px ring at --rv-hz-offset */
.rv4-btn:focus-visible,.rv4-fld input:focus-visible,.rv4-seg button:focus-visible,.rv4-tg:focus-visible,.rv4-chip:focus-visible{outline:2px solid transparent}
.rv4-btn:focus-visible::after,.rv4-fld input:focus-visible+.rv4-ring,.rv4-seg button:focus-visible::after,.rv4-tg:focus-visible::before,.rv4-chip:focus-visible::after{content:"";position:absolute;inset:calc(-1 * var(--rv-hz-offset));border-radius:calc(var(--rv-r-field) + var(--rv-hz-offset));padding:var(--rv-hz-w);background:linear-gradient(var(--rv-hz-ang),var(--rv-second),color-mix(in oklab,var(--rv-sky-ro) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)) 42%,color-mix(in oklab,var(--rv-sky-gl) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)) 74%,color-mix(in oklab,var(--rv-sky-hz) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)));opacity:var(--rv-hz-op);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}
.rv4-btn.pill:focus-visible::after,.rv4-tg:focus-visible::before,.rv4-chip:focus-visible::after,.rv4-seg button:focus-visible::after{border-radius:var(--rv-r-pill)}
/* spinner · the horizon as a conic ring */
.rv4-sp{display:inline-block;width:14px;height:14px;border-radius:50%;background:conic-gradient(from 0deg,var(--rv-second),color-mix(in oklab,var(--rv-sky-ro) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)),color-mix(in oklab,var(--rv-sky-gl) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)),color-mix(in oklab,var(--rv-sky-hz) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)),color-mix(in oklab,var(--rv-sky-gl) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)),color-mix(in oklab,var(--rv-sky-ro) calc(100% - var(--rv-hz-ink-mix)),var(--rv-ink)),var(--rv-second));-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2px));mask:radial-gradient(farthest-side,transparent calc(100% - 2.5px),#000 calc(100% - 2px));animation:rv4-spin .9s linear infinite}
.rv4-sp.lg{width:28px;height:28px}@keyframes rv4-spin{to{transform:rotate(360deg)}}
/* status · dot + verbatim word */
.rv4-word{display:inline-flex;align-items:center;gap:7px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink)}
.rv4-dot{width:7px;height:7px;border-radius:50%;background:var(--rv-ink);flex:none}
.rv4-dot.live{background:var(--rv-accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--rv-accent) 22%,transparent)}
.rv4-dot.ok{background:var(--rv-ok)}.rv4-dot.warn{background:var(--rv-warn)}.rv4-dot.err{background:var(--rv-err)}
.rv4-dot.outline{background:transparent;box-shadow:0 0 0 1.5px var(--rv-ink-3) inset}.rv4-dot.mute{background:var(--rv-ink-4)}
.rv4-word.mute{color:var(--rv-ink-3)}
/* tag · chip */
.rv4-tag{display:inline-block;padding:0 7px;border-radius:5px;font:500 11px/18px var(--rv-font);background:var(--rv-base-2);color:var(--rv-ink-3);white-space:nowrap}
.rv4-tag.mono{font-family:var(--rv-mono)}
.rv4-chip{position:relative;display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 11px;border-radius:var(--rv-r-pill);border:1px solid var(--rv-rule-strong);font:500 13px var(--rv-font);color:var(--rv-ink-2);background:transparent;cursor:pointer;white-space:nowrap}
.rv4-chip:hover{background:var(--rv-base-2)}.rv4-chip.on{background:var(--rv-ink);color:var(--rv-base-1);border-color:var(--rv-ink)}
.rv4-chip b{font-weight:400;opacity:.7}.rv4-chip .x{margin:0 -4px 0 2px;width:16px;height:16px;display:inline-grid;place-items:center;border-radius:50%;font-size:13px;line-height:1}
/* segmented */
.rv4-seg{display:inline-flex;background:var(--rv-base-2);border-radius:var(--rv-r-pill);padding:3px;gap:2px}
.rv4-seg button{position:relative;height:28px;padding:0 12px;border:0;border-radius:var(--rv-r-pill);background:transparent;color:var(--rv-ink-3);font:500 13px var(--rv-font);cursor:pointer;transition:background var(--rv-d2) var(--rv-ease)}
.rv4-seg button[aria-pressed=true]{background:linear-gradient(180deg,var(--rv-base-1),color-mix(in oklab,var(--rv-base-1) 92%,var(--rv-base-2)));color:var(--rv-ink);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 90%,transparent),0 1px 3px color-mix(in oklab,var(--rv-shade) 14%,transparent),0 0 0 1px color-mix(in oklab,var(--rv-ink) 6%,transparent)}
/* toggle */
.rv4-tgw{display:inline-flex;align-items:center;gap:10px;font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink);cursor:pointer}
.rv4-tg{position:relative;width:42px;height:26px;border-radius:13px;border:0;padding:0;background:var(--rv-base-3);box-shadow:0 0 0 1px var(--rv-rule) inset;cursor:pointer;transition:background var(--rv-d2) var(--rv-ease)}
.rv4-tg::after{content:"";position:absolute;left:3px;top:3px;width:20px;height:20px;border-radius:50%;background:var(--rv-base-1);box-shadow:0 1px 3px oklch(0% 0 0/.18);transition:transform var(--rv-d2) var(--rv-ease)}
.rv4-tg[aria-checked=true]{background:linear-gradient(180deg,color-mix(in oklab,var(--rv-ink) 84%,var(--rv-base-1)),var(--rv-ink));box-shadow:inset 0 1px 1px color-mix(in oklab,var(--rv-shade) 40%,transparent)}.rv4-tg[aria-checked=true]::after{transform:translateX(16px)}
.rv4-tg:disabled{opacity:.42;cursor:default}
/* field */
.rv4-fld{display:flex;flex-direction:column;gap:6px;min-width:0}.rv4-fld label{font:500 12px/1 var(--rv-font);color:var(--rv-ink-3)}
.rv4-fld .in{position:relative;display:flex;align-items:center}
.rv4-fld input{width:100%;box-sizing:border-box;height:var(--rv-h-md);padding:0 12px;border-radius:var(--rv-r-field);border:1px solid var(--rv-rule-strong);background:var(--rv-base-1);box-shadow:inset 0 1px 2px color-mix(in oklab,var(--rv-shade) 5%,transparent);color:var(--rv-ink);font:400 14px var(--rv-font);min-width:0}
.rv4-fld input::placeholder{color:var(--rv-ink-4)}.rv4-fld input:focus{outline:0;border-color:var(--rv-ink-3)}
.rv4-fld .pre{position:absolute;left:11px;color:var(--rv-ink-4);font-size:13px;pointer-events:none}.rv4-fld .pre+input{padding-left:30px}
.rv4-fld.err input{border-color:var(--rv-err)}.rv4-fld .msg{font-size:12px;color:var(--rv-ink-3)}.rv4-fld.err .msg{color:var(--rv-err)}
.rv4-fld input:disabled{opacity:.5}
/* skeleton · empty */
.rv4-sk{border-radius:4px;background:var(--rv-base-2);position:relative;overflow:hidden}
.rv4-sk::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,color-mix(in oklab,var(--rv-ink) 6%,transparent),transparent);animation:rv4-sh 1.6s infinite}
@keyframes rv4-sh{from{transform:translateX(-100%)}to{transform:translateX(100%)}}
.rv4-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;min-height:120px;padding:16px;color:var(--rv-ink-3);text-align:center;font:var(--rv-t-body) var(--rv-font)}
.rv4-empty b{font-weight:500;color:var(--rv-ink)}
/* simulated pill */
.rv4-sim{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 10px;border-radius:var(--rv-r-pill);background:var(--rv-base-2);font:500 12px var(--rv-font);color:var(--rv-ink-2);white-space:nowrap}
.rv4-sim i{width:6px;height:6px;border-radius:50%;background:var(--rv-ink-3)}
/* freshness line · gate state */
.rv4-fresh{display:inline-flex;flex-wrap:wrap;align-items:center;gap:0 6px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);font-variant-numeric:tabular-nums}
.rv4-fresh .w{color:var(--rv-ink);display:inline-flex;align-items:center;gap:7px}.rv4-fresh .s{color:var(--rv-ink-4)}
.rv4-gate{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:14px 0;font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink)}
.rv4-gate .r{display:inline-flex;align-items:center;gap:7px;font-weight:500}.rv4-gate .d{font-size:13px;color:var(--rv-ink-3);font-family:var(--rv-mono)}
.rv4-gate.inline{flex-direction:row;align-items:center;gap:12px;padding:0}
/* approval mark */
.rv4-ok{display:inline-grid;place-items:center;width:28px;height:28px}
.rv4-ok svg{width:100%;height:100%}.rv4-ok circle{fill:none;stroke-width:3.5;stroke-dasharray:160;stroke-dashoffset:160;animation:rv4-ring .5s var(--rv-ease-out) forwards}
.rv4-ok path{fill:none;stroke:var(--rv-ink);stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-dasharray:40;stroke-dashoffset:40;animation:rv4-ring .3s .35s var(--rv-ease-out) forwards}
@keyframes rv4-ring{to{stroke-dashoffset:0}}

/* link · second for running text, ink for navigation */
.rv4-link{color:var(--rv-second);text-decoration:none;border-bottom:1px solid color-mix(in oklab,var(--rv-second) 35%,transparent);transition:border-color var(--rv-d2) var(--rv-ease)}
.rv4-link:hover{border-bottom-color:var(--rv-second)}.rv4-link.ink{color:var(--rv-ink);border-bottom-color:var(--rv-rule-strong)}.rv4-link.ink:hover{border-bottom-color:var(--rv-ink)}
.rv4-link.ext::after{content:"↗";margin-left:3px;font-size:.85em}
/* check · radio */
.rv4-ck{position:relative;display:inline-flex;align-items:center;gap:9px;font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink);cursor:pointer}
.rv4-ck input{position:absolute;opacity:0;width:0;height:0}
.rv4-ck i{width:18px;height:18px;border-radius:5px;border:1.5px solid var(--rv-ink-3);display:inline-grid;place-items:center;flex:none;color:var(--rv-base-1);transition:background var(--rv-d1) var(--rv-ease)}
.rv4-ck input:checked+i{background:var(--rv-ink);border-color:var(--rv-ink)}.rv4-ck i svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;opacity:0}.rv4-ck input:checked+i svg{opacity:1}
.rv4-ck.radio i{border-radius:50%}.rv4-ck.radio input:checked+i{background:transparent;border-color:var(--rv-ink)}.rv4-ck.radio input:checked+i::after{content:"";width:9px;height:9px;border-radius:50%;background:var(--rv-ink)}.rv4-ck.radio i svg{display:none}
.rv4-ck input:indeterminate+i{background:var(--rv-ink);border-color:var(--rv-ink)}.rv4-ck input:indeterminate+i svg{display:none}.rv4-ck input:indeterminate+i::after{content:"";width:8px;height:2px;background:var(--rv-base-1)}
.rv4-ck input:disabled~*{opacity:.42}.rv4-ck input:focus-visible+i{box-shadow:0 0 0 2px var(--rv-base-0),0 0 0 4px var(--rv-sky-gl)}
/* stepper */
.rv4-step{display:inline-flex;align-items:center;border:1px solid var(--rv-rule-strong);border-radius:var(--rv-r-field);overflow:hidden;height:var(--rv-h-md)}
.rv4-step button{width:var(--rv-h-md);height:100%;border:0;background:transparent;color:var(--rv-ink);font:400 18px var(--rv-font);cursor:pointer}.rv4-step button:hover{background:var(--rv-base-2)}.rv4-step button:disabled{opacity:.35;cursor:default}
.rv4-step span{min-width:32px;text-align:center;font:500 14px var(--rv-font);font-variant-numeric:tabular-nums}
.rv4-step.lg{height:var(--rv-h-lg)}.rv4-step.lg button{width:var(--rv-h-lg)}
/* menu · dialog · tooltip · toast */
.rv4-menu{width:220px;padding:6px;border-radius:var(--rv-r-card);background:var(--rv-base-1);box-shadow:var(--rv-shadow),0 0 0 1px var(--rv-rule)}
.rv4-menu button{width:100%;height:34px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:0 10px;border:0;border-radius:7px;background:transparent;color:var(--rv-ink);font:400 14px var(--rv-font);cursor:pointer;text-align:left}
.rv4-menu button:hover,.rv4-menu button:focus-visible{background:var(--rv-base-2);outline:0}.rv4-menu button kbd{font:12px var(--rv-mono);color:var(--rv-ink-4)}.rv4-menu button.x{color:var(--rv-err)}.rv4-menu hr{border:0;border-top:1px solid var(--rv-rule);margin:6px 0}
.rv4-menu button:disabled{opacity:.42;cursor:default}
.rv4-dlg{width:100%;max-width:360px;box-sizing:border-box;padding:20px;border-radius:var(--rv-r-sheet);background:var(--rv-base-1);box-shadow:var(--rv-shadow),0 0 0 1px var(--rv-rule);color:var(--rv-ink)}
.rv4-dlg h4{margin:0 0 6px;font:500 18px/1.2 var(--rv-font);letter-spacing:-.02em}.rv4-dlg p{margin:0 0 18px;color:var(--rv-ink-2);font:var(--rv-t-body) var(--rv-font)}.rv4-dlg .acts{display:flex;justify-content:flex-end;gap:8px}
.rv4-tip{display:inline-block;padding:6px 10px;border-radius:7px;background:var(--rv-ink);color:var(--rv-base-1);font:12px/1.3 var(--rv-font);box-shadow:var(--rv-shadow)}.rv4-tip kbd{font:11px var(--rv-mono);opacity:.7;margin-left:6px}
.rv4-toast{display:inline-flex;align-items:center;gap:12px;height:44px;white-space:nowrap;padding:0 10px 0 16px;border-radius:var(--rv-r-pill);background:var(--rv-ink);color:var(--rv-base-1);font:14px var(--rv-font);box-shadow:var(--rv-shadow)}
.rv4-toast button{height:30px;padding:0 12px;border-radius:var(--rv-r-pill);border:0;background:color-mix(in oklab,var(--rv-base-1) 16%,transparent);color:inherit;font:500 13px var(--rv-font);cursor:pointer}
/* tabs */
.rv4-tabs{display:flex;gap:22px;border-bottom:1px solid var(--rv-rule)}
.rv4-tabs button{position:relative;padding:8px 0 10px;border:0;background:transparent;color:var(--rv-ink-3);font:400 14px var(--rv-font);cursor:pointer;white-space:nowrap}
.rv4-tabs button[aria-selected=true]{color:var(--rv-ink)}.rv4-tabs button[aria-selected=true]::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:2px;background:var(--rv-ink)}
.rv4-tabs button b{font-weight:400;color:var(--rv-ink-4);margin-left:6px;font-variant-numeric:tabular-nums}
/* search · select · textarea · secret · settings row */
.rv4-search{position:relative;display:flex;align-items:center}.rv4-search svg{position:absolute;left:11px;width:15px;height:15px;fill:none;stroke:var(--rv-ink-4);stroke-width:1.8;stroke-linecap:round;pointer-events:none}
.rv4-search input{width:100%;box-sizing:border-box;height:var(--rv-h-md);padding:0 12px 0 34px;border-radius:var(--rv-r-field);border:1px solid var(--rv-rule-strong);background:var(--rv-base-1);color:var(--rv-ink);font:400 14px var(--rv-font)}
.rv4-search input::placeholder{color:var(--rv-ink-4)}.rv4-search input:focus{outline:0;border-color:var(--rv-ink-3)}.rv4-search kbd{position:absolute;right:10px;font:11px var(--rv-mono);color:var(--rv-ink-4)}
.rv4-sel{position:relative;display:inline-flex;min-width:0}.rv4-sel select{appearance:none;-webkit-appearance:none;width:100%;height:var(--rv-h-md);padding:0 32px 0 12px;border-radius:var(--rv-r-field);border:1px solid var(--rv-rule-strong);background:var(--rv-base-1);color:var(--rv-ink);font:400 14px var(--rv-font);cursor:pointer}
.rv4-sel select:focus{outline:0;border-color:var(--rv-ink-3)}.rv4-sel::after{content:"";position:absolute;right:12px;top:50%;width:7px;height:7px;border-right:1.5px solid var(--rv-ink-3);border-bottom:1.5px solid var(--rv-ink-3);transform:translateY(-70%) rotate(45deg);pointer-events:none}
.rv4-ta textarea{width:100%;box-sizing:border-box;min-height:88px;padding:10px 12px;border-radius:var(--rv-r-field);border:1px solid var(--rv-rule-strong);background:var(--rv-base-1);color:var(--rv-ink);font:400 14px/1.45 var(--rv-font);resize:vertical}
.rv4-ta textarea:focus{outline:0;border-color:var(--rv-ink-3)}.rv4-ta .ft{display:flex;justify-content:space-between;font-size:12px;color:var(--rv-ink-3);margin-top:6px;font-variant-numeric:tabular-nums}.rv4-ta .ft .over{color:var(--rv-err)}
.rv4-secret input{font-family:var(--rv-mono);letter-spacing:.08em}.rv4-secret .st{display:inline-flex;align-items:center;gap:7px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-2);margin-top:6px}
.rv4-srow{display:flex;align-items:center;gap:12px;min-height:44px;padding:0 2px;border-bottom:1px solid var(--rv-rule);font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink)}
.rv4-srow:last-child{border-bottom:0}.rv4-srow .l{flex:1;min-width:0}.rv4-srow .l small{display:block;font-size:12px;color:var(--rv-ink-3)}.rv4-srow .v{color:var(--rv-ink-3);font-size:14px;white-space:nowrap}.rv4-srow .chev{width:7px;height:7px;border-right:1.5px solid var(--rv-ink-4);border-bottom:1.5px solid var(--rv-ink-4);transform:rotate(-45deg);margin-right:4px}
/* number · currency */
.rv4-num input{font-variant-numeric:tabular-nums;text-align:right}.rv4-num .suf{position:absolute;right:11px;color:var(--rv-ink-4);font-size:13px;pointer-events:none}.rv4-num .suf~input{padding-right:40px}
/* change notice · progress */
.rv4-change{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap;padding:10px 0;border-top:1px solid var(--rv-rule);border-bottom:1px solid var(--rv-rule);font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink)}
.rv4-change .was{color:var(--rv-ink-3);text-decoration:line-through;text-decoration-color:var(--rv-ink-4)}.rv4-change .src{margin-left:auto;font-size:12px;color:var(--rv-ink-3);font-variant-numeric:tabular-nums}
.rv4-bar{height:5px;border-radius:3px;background:var(--rv-base-2);position:relative;overflow:hidden}.rv4-bar i{position:absolute;left:0;top:0;bottom:0;background:var(--rv-ink);border-radius:3px;transition:width var(--rv-d3) var(--rv-ease-out)}
.rv4-bar i.held{background:var(--rv-ink-4)}.rv4-bar i.second{background:var(--rv-second)}.rv4-bar.lg{height:8px}
.rv4-barw{display:grid;gap:6px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);font-variant-numeric:tabular-nums}.rv4-barw .hd{display:flex;justify-content:space-between}.rv4-barw .hd b{font-weight:500;color:var(--rv-ink)}

/* ── patterns ── */
/* table · presentation layer; TanStack table owns sorting/state in production */
.rv4-table{width:100%;border-collapse:separate;border-spacing:0;font:var(--rv-t-body) var(--rv-font);font-size:14px;background:var(--rv-base-1);border-radius:var(--rv-r-card);overflow:hidden;box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 70%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 8%,transparent),0 1px 2px color-mix(in oklab,var(--rv-shade) 6%,transparent);color:var(--rv-ink)}
.rv4-table.glass{background:color-mix(in oklab,var(--rv-base-1) var(--rv-glass-mix),transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5)}.rv4-table.glass th{background:transparent}
.rv4-table th{position:sticky;top:0;z-index:1;background:var(--rv-base-1);text-align:left;font:500 12px/1 var(--rv-font);color:var(--rv-ink-3);padding:14px 16px;border-bottom:1px solid var(--rv-rule);white-space:nowrap;cursor:default}
.rv4-table th.num,.rv4-table td.num{text-align:right;font-variant-numeric:tabular-nums}.rv4-table th[aria-sort]{color:var(--rv-ink)}.rv4-table th[aria-sort]::after{content:"↓";margin-left:5px;color:var(--rv-ink-4)}.rv4-table th[aria-sort=ascending]::after{content:"↑"}
.rv4-table td{height:48px;padding:0 16px;border-bottom:1px solid var(--rv-rule);vertical-align:middle;white-space:nowrap}.rv4-table.dense td{height:36px}
.rv4-table tr:last-child td{border-bottom:0}.rv4-table tbody tr:hover td{background:color-mix(in oklab,var(--rv-ink) 3%,transparent)}
.rv4-table tr[aria-selected=true] td{background:color-mix(in oklab,var(--rv-accent) 9%,var(--rv-base-1))}.rv4-table tr[aria-selected=true] td:first-child{box-shadow:inset 3px 0 0 var(--rv-accent)}
.rv4-table tbody tr{cursor:pointer}.rv4-table td.mono{font-family:var(--rv-mono);font-size:12.5px;color:var(--rv-ink-2)}
.rv4-tfoot{display:flex;justify-content:space-between;align-items:center;padding:10px 12px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);font-variant-numeric:tabular-nums}
/* key · value */
.rv4-kv{display:grid;grid-template-columns:minmax(90px,auto) 1fr;gap:8px 16px;font:var(--rv-t-body) var(--rv-font);font-size:14px;color:var(--rv-ink)}.rv4-kv dt{margin:0;color:var(--rv-ink-3)}.rv4-kv dd{margin:0;min-width:0}.rv4-kv dd.mono{font-family:var(--rv-mono);font-size:12.5px;color:var(--rv-ink-2)}
/* figure */
.rv4-fig{display:grid;gap:4px;min-width:0;font-family:var(--rv-font);color:var(--rv-ink)}.rv4-fig b{font:400 var(--rv-t-fig) var(--rv-font);font-variant-numeric:tabular-nums;letter-spacing:-.03em;white-space:nowrap}.rv4-fig b small{font-size:.5em;color:var(--rv-ink-3);margin-left:4px;letter-spacing:0}
.rv4-fig span{font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3)}.rv4-fig .d{font-size:12px;color:var(--rv-ink-3);font-variant-numeric:tabular-nums}.rv4-fig .d.up{color:var(--rv-ok)}.rv4-fig .d.down{color:var(--rv-err)}
.rv4-figs{display:grid;grid-template-columns:1fr 1fr;gap:18px 24px}
/* avatar · people row */
.rv4-av{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:50%;background:color-mix(in oklab,var(--rv-ink) 10%,var(--rv-base-2));color:var(--rv-ink-2);font:500 12px var(--rv-font);flex:none;overflow:hidden;letter-spacing:.02em}
.rv4-av img{width:100%;height:100%;object-fit:cover}.rv4-av.sm{width:24px;height:24px;font-size:10px}.rv4-av.lg{width:44px;height:44px;font-size:15px}
.rv4-avs{display:inline-flex}.rv4-avs .rv4-av{box-shadow:0 0 0 2px var(--rv-base-1);margin-left:-8px}.rv4-avs .rv4-av:first-child{margin:0}
.rv4-prow{display:flex;align-items:center;gap:12px;min-height:52px;padding:8px 0;border-bottom:1px solid var(--rv-rule);font:var(--rv-t-body) var(--rv-font);font-size:14px;color:var(--rv-ink)}.rv4-prow:last-child{border-bottom:0}
.rv4-prow .n{flex:1;min-width:0}.rv4-prow .n b{font-weight:500;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-prow .n small{display:flex;flex-wrap:wrap;gap:0 8px;font-size:12px;color:var(--rv-ink-3)}
.rv4-prow .roles{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}.rv4-prow .roles span{font:500 11px/18px var(--rv-font);padding:0 7px;border-radius:5px;background:var(--rv-base-2);color:var(--rv-ink-2)}
/* event tile · provider card */
.rv4-tile{display:grid;grid-template-columns:56px 1fr;gap:12px;align-items:center;padding:8px 0;font:var(--rv-t-body) var(--rv-font);font-size:14px;color:var(--rv-ink);min-width:0}
.rv4-tile .art{width:56px;height:56px;border-radius:var(--rv-r-field);background:var(--rv-base-2);overflow:hidden;position:relative}.rv4-tile .art img{width:100%;height:100%;object-fit:cover;display:block}
.rv4-tile .t{min-width:0}.rv4-tile .t b{font-weight:500;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-tile .t small{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:12.5px;color:var(--rv-ink-3);font-variant-numeric:tabular-nums}
.rv4-L{display:inline-grid;place-items:center;width:16px;height:16px;border-radius:4px;background:var(--rv-base-2);color:var(--rv-ink);font:600 9px var(--rv-font);box-shadow:0 0 0 1px var(--rv-rule) inset;font-style:normal;flex:none}.rv4-L.md{width:20px;height:20px;font-size:11px;border-radius:5px}
.rv4-prov{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;min-height:56px;padding:10px 0;border-bottom:1px solid var(--rv-rule);font:var(--rv-t-body) var(--rv-font);font-size:14px;color:var(--rv-ink)}.rv4-prov:last-child{border-bottom:0}
.rv4-prov .n b{font-weight:500;display:block}.rv4-prov .n small{display:block;font-size:12px;color:var(--rv-ink-3);font-variant-numeric:tabular-nums}.rv4-prov .acts{display:flex;gap:6px}
/* audience block */
.rv4-aud{display:grid;gap:10px;font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink)}.rv4-aud .figs{display:grid;grid-template-columns:repeat(3,auto);gap:24px;justify-content:start}
.rv4-aud .base{font-size:12.5px;color:var(--rv-ink-3);font-variant-numeric:tabular-nums}
/* lifecycle strip · receipt · approval card · context chip · sync line */
.rv4-life{display:flex;align-items:center;gap:0;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);flex-wrap:wrap}
.rv4-life .s{display:inline-flex;align-items:center;gap:7px;white-space:nowrap}.rv4-life .s.done{color:var(--rv-ink)}.rv4-life .s.now{color:var(--rv-ink);font-weight:500}.rv4-life .s.fail{color:var(--rv-err)}
.rv4-life .ln{width:22px;height:1px;background:var(--rv-rule-strong);margin:0 8px;flex:none}.rv4-life .s.done+.ln{background:var(--rv-ink-3)}
.rv4-life .t{display:block;font-size:11px;color:var(--rv-ink-4);font-weight:400;font-variant-numeric:tabular-nums}
.rv4-rcpt{display:grid;grid-template-columns:auto 1fr auto;gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--rv-rule);font:var(--rv-t-body) var(--rv-font);font-size:14px;color:var(--rv-ink)}.rv4-rcpt:last-child{border-bottom:0}
.rv4-rcpt .w b{font-weight:500}.rv4-rcpt .w small{display:block;font-size:12px;color:var(--rv-ink-3);font-variant-numeric:tabular-nums}.rv4-rcpt .id{font:12px var(--rv-mono);color:var(--rv-ink-3);text-align:right}
.rv4-card{box-sizing:border-box;background:var(--rv-base-1);border-radius:var(--rv-r-card);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 8%,transparent),0 1px 2px color-mix(in oklab,var(--rv-shade) 6%,transparent);padding:16px;color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font)}
.rv4-appr .hd{display:flex;justify-content:space-between;align-items:center;gap:12px;margin-bottom:10px;font-size:12px;color:var(--rv-ink-3)}.rv4-appr h4{margin:0 0 4px;font:500 16px/1.25 var(--rv-font);letter-spacing:-.015em}.rv4-appr p{margin:0 0 12px;color:var(--rv-ink-2);font-size:14px}
.rv4-appr .acts{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}.rv4-appr .res{display:flex;align-items:center;gap:10px;font-size:14px}
.rv4-ctx{display:inline-flex;align-items:center;gap:8px;height:30px;padding:0 10px 0 8px;border-radius:var(--rv-r-field);background:var(--rv-base-2);font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink);max-width:100%;white-space:nowrap}
.rv4-ctx .k{color:var(--rv-ink-3)}.rv4-ctx.proposed{background:transparent;box-shadow:0 0 0 1px dashed var(--rv-rule-strong) inset;border:1px dashed var(--rv-rule-strong)}.rv4-ctx .b{height:22px;padding:0 8px;border-radius:5px;border:0;background:var(--rv-ink);color:var(--rv-base-1);font:500 12px var(--rv-font);cursor:pointer}.rv4-ctx .q{background:transparent;color:var(--rv-ink-2)}
.rv4-sync{display:flex;align-items:center;gap:10px;min-height:36px;padding:0 2px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);font-variant-numeric:tabular-nums;flex-wrap:wrap}.rv4-sync .ps{display:inline-flex;gap:4px}
.rv4-sync.strip{background:var(--rv-base-1);border-bottom:1px solid var(--rv-rule);padding:0 12px}

/* ── material · glass for large surfaces. GPU-composited (backdrop-filter, transform, opacity); no JS. ── */
.rv4-glass,.rv4-card.glass,.rv4-dlg.glass,.rv4-menu.glass{background:color-mix(in oklab,var(--rv-base-1) var(--rv-glass-mix),transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 70%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 8%,transparent),var(--rv-shadow)}
.rv4-glass{border-radius:var(--rv-r-card)}
.rv4-glass.sheet{border-radius:var(--rv-r-sheet) var(--rv-r-sheet) 0 0}.rv4-glass.bar{border-radius:0}
.rv4-field{position:relative;isolation:isolate;overflow:hidden}.rv4-field>canvas.amb{position:absolute;inset:0;width:100%;height:100%;z-index:0}.rv4-field>*:not(canvas){position:relative;z-index:1}
/* ── calendar · week grid and event block, matching ReventKit WeekView (hour axis 48, day heads, now line) ── */
.rv4-week{--h:52px;display:grid;grid-template-columns:48px repeat(var(--days,7),minmax(0,1fr));font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink);background:var(--rv-base-1);border-radius:var(--rv-r-card);box-shadow:var(--rv-shadow);overflow:hidden}
.rv4-week .dh{height:44px;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;padding:0 10px;border-bottom:1px solid var(--rv-rule);border-left:1px solid var(--rv-rule);font-size:12px;color:var(--rv-ink-3)}.rv4-week .dh b{font:500 14px var(--rv-font);color:var(--rv-ink)}
.rv4-week .dh[aria-current] b{color:var(--rv-accent)}.rv4-week .dh[aria-current]{color:var(--rv-accent)}
.rv4-week .ax{position:relative;border-bottom:0}.rv4-week .ax span{position:absolute;right:8px;transform:translateY(-50%);font:11px var(--rv-mono);color:var(--rv-ink-4)}
.rv4-week .col{position:relative;border-left:1px solid var(--rv-rule);background:repeating-linear-gradient(180deg,transparent 0,transparent calc(var(--h) - 1px),var(--rv-rule) calc(var(--h) - 1px),var(--rv-rule) var(--h))}
.rv4-week .col[aria-current]{background-color:color-mix(in oklab,var(--rv-accent) 3%,transparent)}
.rv4-week .col:hover{background-color:color-mix(in oklab,var(--rv-ink) 2.5%,transparent)}
.rv4-week .now{position:absolute;left:0;right:0;height:1.5px;background:var(--rv-accent);z-index:2;pointer-events:none}.rv4-week .now::before{content:"";position:absolute;left:-3px;top:-2.5px;width:6px;height:6px;border-radius:50%;background:var(--rv-accent);box-shadow:0 0 0 3px color-mix(in oklab,var(--rv-accent) 22%,transparent)}
.rv4-ev{position:absolute;left:4px;right:4px;border-radius:7px;padding:6px 8px;font:500 12px/1.2 var(--rv-font);color:var(--rv-ink);background:linear-gradient(180deg,var(--rv-base-1),var(--rv-base-2));box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 10%,transparent),0 1px 2px color-mix(in oklab,var(--rv-shade) 8%,transparent);overflow:hidden;cursor:pointer;transition:transform var(--rv-d1) var(--rv-ease),box-shadow var(--rv-d2) var(--rv-ease);will-change:transform}
.rv4-ev:hover{transform:translateY(-1px) scale(1.01);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 14%,transparent),0 8px 18px -8px color-mix(in oklab,var(--rv-shade) 45%,transparent);transition:transform 160ms var(--rv-ease-out),box-shadow 160ms var(--rv-ease-out)}
.rv4-ev:active{transform:translateY(0) scale(.995);transition-duration:60ms}
.rv4-ev.sel::before{opacity:0}
.rv4-ev b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;font-weight:500}.rv4-ev small{display:flex;gap:5px;align-items:center;margin-top:3px;font-size:11px;color:var(--rv-ink-3);font-variant-numeric:tabular-nums}
.rv4-ev .rv4-L{width:14px;height:14px;font-size:8px;border-radius:3px}
/* short blocks: one line, no time; mid blocks: one line + time */
.rv4-ev.short{padding:4px 8px;display:flex;align-items:center}.rv4-ev.short b,.rv4-ev.mid b{display:block;-webkit-line-clamp:unset;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-ev.short small{display:none}
.rv4-ev.sel{box-shadow:inset 0 0 0 2px var(--rv-accent),0 6px 14px -6px color-mix(in oklab,var(--rv-accent) 40%,transparent)}
.rv4-ev.priv{background:transparent;box-shadow:inset 0 0 0 1px transparent;border:1px dashed var(--rv-ink-4)}
.rv4-ev.plan{background:color-mix(in oklab,var(--rv-second) 8%,var(--rv-base-1));box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-second) 45%,transparent);color:var(--rv-second)}.rv4-ev.plan small{color:color-mix(in oklab,var(--rv-second) 70%,var(--rv-ink-3))}
.rv4-ev.cancel{text-decoration:line-through;color:var(--rv-ink-3);background:var(--rv-base-2);box-shadow:none}
.rv4-ev.changed::after{content:"";position:absolute;right:6px;top:6px;width:5px;height:5px;border-radius:50%;background:var(--rv-warn)}
.rv4-ev.live{box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 10%,transparent),inset 3px 0 0 var(--rv-accent)}

/* approval bar · the field under ink-tinted glass; appears only while a decision is open */
.rv4-apbar{position:relative;isolation:isolate;overflow:hidden;display:flex;align-items:center;gap:14px;min-height:60px;padding:0 16px;border-radius:var(--rv-r-card);color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font)}
.rv4-apbar>canvas.amb{position:absolute;inset:0;width:100%;height:100%;z-index:0;opacity:.9}
.rv4-apbar::before{content:"";position:absolute;inset:0;z-index:1;background:color-mix(in oklab,var(--rv-base-1) 72%,transparent);-webkit-backdrop-filter:blur(18px) saturate(1.4);backdrop-filter:blur(18px) saturate(1.4);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 70%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 8%,transparent)}
.rv4-apbar>*:not(canvas){position:relative;z-index:2}.rv4-apbar .t{flex:1;min-width:0}.rv4-apbar .t b{font-weight:500;display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-apbar .t small{display:block;font-size:12.5px;color:var(--rv-ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ── sheet header · the iPhone record sheet's top: the field, glass, title, when, state, the guest's button ── */
.rv4-shhd{position:relative;isolation:isolate;overflow:hidden;width:100%;border-radius:var(--rv-r-sheet);background:var(--rv-base-2);color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font)}
.rv4-shhd>canvas.amb,.rv4-shhd>img.art{position:absolute;inset:0;width:100%;height:100%;z-index:0;object-fit:cover}
.rv4-shhd .gl{position:absolute;left:0;right:0;bottom:0;z-index:1;padding:14px 18px 18px;border-radius:var(--rv-r-sheet) var(--rv-r-sheet) 0 0;background:color-mix(in oklab,var(--rv-base-1) var(--rv-glass-mix),transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 70%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 8%,transparent);transition:transform var(--rv-d3) var(--rv-ease-out)}
.rv4-shhd .hdl{width:36px;height:5px;border-radius:3px;background:var(--rv-ink-4);margin:0 auto 14px}
.rv4-shhd .row1{display:flex;justify-content:space-between;align-items:flex-start;gap:12px}
.rv4-shhd .ttl{display:grid;gap:4px;min-width:0}.rv4-shhd .ttl b{font:500 20px/1.15 var(--rv-font);letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-shhd .ttl span{font:13px var(--rv-font);color:var(--rv-ink-3);font-variant-numeric:tabular-nums}
.rv4-shhd .acts{display:flex;gap:10px;margin-top:16px}.rv4-shhd .acts>:first-child{flex:1}
.rv4-shhd.noglass .gl{background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none;box-shadow:none}
/* approval bar states */
.rv4-apbar .st{display:flex;align-items:center;gap:10px;min-width:0;flex:1}
.rv4-apbar.approved::before{background:color-mix(in oklab,var(--rv-base-1) 86%,transparent)}
.rv4-apbar .fade{animation:rv4-in var(--rv-d3) var(--rv-ease-out)}@keyframes rv4-in{from{opacity:0;transform:translateY(4px)}}


/* ═══ v4.2 · 20 Oct 2026 · tone, line, light. Appended override layer; rules above are V4.1 and lose by order. ═══ */
.rv4-btn,.rv4-fld input,.rv4-seg button,.rv4-chip,.rv4-tabs button{font-weight:400;letter-spacing:-.01em}
.rv4-btn{height:40px;border-radius:8px;padding:0 16px;font-size:15px;background:var(--rv-base-2);box-shadow:none;border:0;color:var(--rv-ink);transition:background-color var(--rv-d1) var(--rv-ease),color var(--rv-d1),transform var(--rv-d1)}
.rv4-btn:hover{background:var(--rv-base-3);filter:none;transform:none}.rv4-btn:active{transform:translateY(1px)}
.rv4-btn::before{opacity:0!important;animation:none!important}
.rv4-btn.primary{background:color-mix(in oklab,var(--rv-ink) 72%,transparent);-webkit-backdrop-filter:blur(20px) saturate(1.4);backdrop-filter:blur(20px) saturate(1.4);color:var(--rv-base-1);box-shadow:none}
.rv4-btn.primary:hover{background:color-mix(in oklab,var(--rv-ink) 84%,transparent)}
.rv4-btn.primary::before{content:"";position:absolute;inset:0;border-radius:inherit;padding:1px;background:linear-gradient(calc(var(--rv-hz-ang) + var(--rv-sweep)),var(--rv-second),var(--rv-sky-ro) 42%,var(--rv-sky-gl) 74%,var(--rv-sky-hz))!important;-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none}
.rv4-btn.primary:hover::before{opacity:.75!important;animation:rv4-sweep .6s cubic-bezier(.2,.7,.2,1) 1 forwards!important}
@property --rv-sweep{syntax:'<angle>';inherits:false;initial-value:0deg}
@keyframes rv4-sweep{from{--rv-sweep:0deg;opacity:1}to{--rv-sweep:360deg;opacity:.75}}
.rv4-btn.ghost{background:transparent;box-shadow:none;color:var(--rv-ink-2)}.rv4-btn.ghost:hover{background:var(--rv-base-2)}
.rv4-btn.quiet{color:var(--rv-ink-2)}.rv4-btn.quiet:hover{background:var(--rv-base-2)}
.rv4-btn.destructive{background:transparent;color:var(--rv-err)}.rv4-btn.destructive:hover{background:color-mix(in oklab,var(--rv-err) 8%,transparent)}
.rv4-btn.accent{background:var(--rv-accent);box-shadow:none;color:var(--rv-on-accent)}.rv4-btn.accent:hover{background:var(--rv-accent-2)}.rv4-btn.accent::before,.rv4-btn.accent::after{display:none!important}
.rv4-btn.sm{height:32px;padding:0 12px;font-size:14px}.rv4-btn.lg{height:44px;padding:0 18px}
.rv4-btn:focus-visible::after,.rv4-seg button:focus-visible::after,.rv4-chip:focus-visible::after,.rv4-tg:focus-visible::before{content:"";position:absolute;inset:-4px;border-radius:12px;padding:2px;background:var(--rv-horizon);-webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;pointer-events:none;opacity:1}
.rv4-fld input,.rv4-secret input,.rv4-num input,.rv4-ta textarea{height:40px;border:0;border-radius:8px 8px 2px 2px;background:var(--rv-base-2);box-shadow:inset 0 -1px 0 var(--rv-rule-strong);font-size:15px;padding:0 12px}
.rv4-fld input:focus-visible,.rv4-secret input:focus-visible,.rv4-num input:focus-visible,.rv4-ta textarea:focus-visible{outline:0;box-shadow:inset 0 -2px 0 var(--rv-second)}
.rv4-fld.err input{box-shadow:inset 0 -2px 0 var(--rv-err)}
.rv4-ring{display:none}
.rv4-seg{border-radius:8px;padding:2px}.rv4-seg button{height:34px;border-radius:6px;font-size:14px;color:var(--rv-ink-3);background:transparent;box-shadow:none}
.rv4-seg button[aria-pressed=true],.rv4-seg button[aria-checked=true]{background:var(--rv-base-1);color:var(--rv-ink);font-weight:500;box-shadow:none}
.rv4-chip{height:30px;border:0;color:var(--rv-ink-2);padding:0 12px}.rv4-chip:hover{background:var(--rv-base-2)}
.rv4-chip.on,.rv4-chip[aria-pressed=true]{background:var(--rv-ink);color:var(--rv-base-1)}
.rv4-table,.rv4-week,.rv4-shhd{background:color-mix(in oklab,var(--rv-base-1) var(--rv-glass-mix),transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 70%,transparent),var(--rv-shadow);border-radius:12px;overflow:hidden}
.rv4-table thead th, .rv4-table th{background:color-mix(in oklab,var(--rv-base-2) 70%,transparent);border-bottom:0;font-weight:400;color:var(--rv-ink-3)}
.rv4-table tbody td{border-top:1px solid color-mix(in oklab,var(--rv-ink) 7%,transparent)}
.rv4-table tbody tr:hover td{background:color-mix(in oklab,var(--rv-base-1) 24%,transparent)}
.rv4-table tr[aria-selected=true] td,.rv4-table tbody tr.sel td{background:transparent;box-shadow:none}
.rv4-table tr[aria-selected=true],.rv4-table tbody tr.sel{box-shadow:inset 0 0 0 2px var(--rv-select)}
.rv4-table tr[aria-selected=true] td:first-child,.rv4-table tbody tr.sel td:first-child{box-shadow:none}
.rv4-ev{border-radius:8px;background:var(--rv-base-1);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 8%,transparent);font-weight:400}
.rv4-ev:hover{transform:none;background:var(--rv-base-3);box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 10%,transparent)}
.rv4-ev::before{opacity:0!important;animation:none!important}
.rv4-ev.live::before{opacity:.55!important}
.rv4-ev.sel{box-shadow:inset 0 0 0 2px var(--rv-select)}
.rv4-ev:focus-visible{outline:0;box-shadow:inset 0 0 0 2px var(--rv-select)}
.rv4-apbar>canvas.amb{opacity:.22}.rv4-apbar::before{background:color-mix(in oklab,var(--rv-base-1) var(--rv-glass-mix),transparent)}
[data-density=tight] .rv4-btn{height:32px;padding:0 12px;font-size:14px}[data-density=tight] .rv4-fld input{height:34px;font-size:14px}[data-density=tight] .rv4-card{padding:12px}[data-density=tight] .rv4-ev{padding:4px 6px;font-size:11px}
.cap{color:var(--rv-ink-3)}
.rv4-table tr[aria-selected=true] td{background:transparent!important}.rv4-table tr[aria-selected=true] td:first-child{box-shadow:none!important}
.rv4-table th{background:color-mix(in oklab,var(--rv-base-2) 70%,transparent)!important;border-bottom:0!important;font-weight:400!important}
.rv4-week{background:color-mix(in oklab,var(--rv-base-1) var(--rv-glass-mix),transparent)!important}

/* ── v4.2b · Dan's review, 20 Oct ── */
/* no mono anywhere · Switzer tabular numerals */
:root{--rv-mono:var(--rv-font)}
.rv4-tag.mono,.rv4-kv dd.mono,.rv4-table td.mono,.rv4-secret input,.rv4-gate .d{font-family:var(--rv-font)!important;font-variant-numeric:tabular-nums;letter-spacing:0!important}
/* field: a flat well, one radius, no underscore. focus = 1px select ring; error = 1px err ring + the word */
.rv4-fld input,.rv4-secret input,.rv4-num input,.rv4-ta textarea{border-radius:8px;box-shadow:none;background:var(--rv-base-2)}
.rv4-fld input:hover,.rv4-secret input:hover,.rv4-num input:hover,.rv4-ta textarea:hover{background:var(--rv-base-3)}
.rv4-fld input:focus-visible,.rv4-secret input:focus-visible,.rv4-num input:focus-visible,.rv4-ta textarea:focus-visible{background:var(--rv-base-1);box-shadow:0 0 0 1.5px var(--rv-select)}
.rv4-fld.err input,.rv4-secret.rejected input{box-shadow:0 0 0 1.5px var(--rv-err)}
/* secondary is a real button, not a disabled one: base-3 fill, ink text */
.rv4-btn{background:var(--rv-base-3);color:var(--rv-ink)}.rv4-btn:hover{background:color-mix(in oklab,var(--rv-ink) 12%,var(--rv-base-3))}
.rv4-btn:disabled,.rv4-btn[aria-disabled=true]{background:var(--rv-base-2);color:var(--rv-ink-4);cursor:not-allowed}
/* v4.2d · built like the approval bar: ONE sheet of glass, the glow directly under it, nothing opaque inside. The glow bleeds through every row. */
.rv4-splash{position:relative;isolation:isolate;border-radius:12px;overflow:hidden;padding:0;background:var(--rv-base-2);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 90%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-base-1) 35%,transparent),0 10px 30px -14px color-mix(in oklab,var(--rv-shade) 45%,transparent)}
.rv4-splash::before{content:"";position:absolute;inset:0;z-index:0;background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-gl) 85%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 45%,transparent),transparent 70%);opacity:.9}
[data-brand-scheme=light] .rv4-splash::before{background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-ro) 90%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 35%,transparent),transparent 70%)}
.rv4-splash::after{content:"";position:absolute;inset:0;z-index:1;background:color-mix(in oklab,var(--rv-base-1) 58%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);display:block}
.rv4-splash>*{position:relative;z-index:2}
/* the surface and everything in it is transparent; only hover and selection paint */
.rv4-splash .rv4-table,.rv4-splash .rv4-week,.rv4-splash .rv4-table :is(thead,tbody,tr,th,td),.rv4-splash .rv4-week *:not(.rv4-ev):not(.rv4-ev *){background:transparent!important;box-shadow:none!important;-webkit-backdrop-filter:none!important;backdrop-filter:none!important}
.rv4-splash .rv4-table th{background:color-mix(in oklab,var(--rv-base-1) 22%,transparent)!important}
.rv4-splash .rv4-table tbody td{border-top-color:color-mix(in oklab,var(--rv-base-1) 45%,transparent)}
.rv4-splash .rv4-table tbody tr:hover td{background:color-mix(in oklab,var(--rv-base-1) 30%,transparent)!important}
.rv4-splash .rv4-table tr[aria-selected=true]{box-shadow:inset 0 0 0 2px var(--rv-select)!important}
.rv4-splash .rv4-week .dh,.rv4-splash .rv4-week .ax span{border-color:color-mix(in oklab,var(--rv-base-1) 45%,transparent)}
.rv4-splash .rv4-ev{background:color-mix(in oklab,var(--rv-base-1) 55%,transparent)!important;box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-base-1) 60%,transparent)!important}
.rv4-splash .rv4-ev:hover{background:color-mix(in oklab,var(--rv-base-1) 80%,transparent)!important}
.rv4-splash .rv4-ev.sel{box-shadow:inset 0 0 0 2px var(--rv-select)!important}

/* v4.2e · GPU glow: .rv4-splash.gpu replaces the CSS radial with the WebGPU field (brand/ambient.js, canvas fallback). Glass stays CSS backdrop-filter (GPU-composited); true refraction = ChatKit GlassLayer. */
.rv4-splash.gpu::before{display:none}
.rv4-splash.gpu>canvas.amb{position:absolute;inset:0;width:100%;height:100%;z-index:0!important;opacity:.95;pointer-events:none}


/* ═══ P0.1 · 20 Oct · RvDrawer — WEB · the record drawer. Not glass: a drawer is content. Tone separates modules; the only line is the horizon when busy. ═══ */
.rv4-drawer{position:relative;display:flex;flex-direction:column;min-height:0;height:100%;background:var(--rv-base-1);color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font);box-shadow:-1px 0 0 var(--rv-rule);transition:width var(--rv-d3) var(--rv-ease-out)}
.rv4-drawer.full{box-shadow:none}
.rv4-drawer .hd{position:relative;display:flex;align-items:center;gap:6px;min-height:52px;padding:8px 10px 8px 18px;flex:none}
.rv4-drawer .hd .ttl{display:grid;gap:2px;min-width:0;flex:1;margin-right:8px}
.rv4-drawer .hd .ttl b{font:500 17px/1.2 var(--rv-font);letter-spacing:-.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv4-drawer .hd .ttl .meta{display:flex;align-items:center;gap:8px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);min-width:0}
.rv4-drawer .hd .ttl .meta .m{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv4-drawer .hd .ttl .meta .rv4-word.inl{flex:none;font-size:13px}
/* narrow: the Open button collapses to its shortcut so the title keeps ≥ 230px */
.rv4-drawer.narrow .hd .op{padding:0 8px}.rv4-drawer.narrow .hd .op>span{display:none}
.rv4-drawer .hd .acts{display:flex;align-items:center;gap:2px;flex:none}
.rv4-drawer .hd .ic{width:36px;height:36px;display:grid;place-items:center;border:0;border-radius:8px;background:transparent;color:var(--rv-ink-3);cursor:pointer;transition:background-color var(--rv-d1) var(--rv-ease),color var(--rv-d1) var(--rv-ease)}
.rv4-drawer .hd .ic:hover{background:var(--rv-base-2);color:var(--rv-ink)}.rv4-drawer .hd .ic:active{transform:translateY(1px)}
.rv4-drawer .hd .ic svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.rv4-drawer .hd .op{display:inline-flex;align-items:center;gap:8px;height:32px;padding:0 10px 0 12px;margin-right:4px;border:0;border-radius:8px;background:var(--rv-base-2);color:var(--rv-ink);font:400 13px/1 var(--rv-font);cursor:pointer;transition:background-color var(--rv-d1) var(--rv-ease)}
.rv4-drawer .hd .op:hover{background:var(--rv-base-3)}.rv4-drawer .hd .op kbd{font:400 11px/1 var(--rv-font);color:var(--rv-ink-4);letter-spacing:.02em}
.rv4-drawer .hd .busy{position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--rv-horizon);background-size:200% 100%;animation:rv4-hzsweep 1.4s linear infinite;opacity:.9}
@keyframes rv4-hzsweep{from{background-position:0 0}to{background-position:-200% 0}}
.rv4-drawer .bd{flex:1;min-height:0;overflow:auto;padding:4px 18px 18px;display:flex;flex-direction:column;gap:6px;scrollbar-width:thin;scrollbar-color:var(--rv-rule-strong) transparent}
.rv4-drawer .ft{display:flex;align-items:center;gap:8px;padding:12px 18px;flex:none;background:var(--rv-base-1);box-shadow:0 -1px 0 var(--rv-rule)}
.rv4-drawer .ft>.sp,.rv4-drawer .ft>span:empty{flex:1}
/* confirm-close sits inside the drawer, over the body, as a tone panel — not a dialog over the page */
.rv4-drawer .ask{position:absolute;left:0;right:0;bottom:0;z-index:3;padding:16px 18px 18px;background:var(--rv-base-2);box-shadow:0 -1px 0 var(--rv-rule);display:grid;gap:12px;animation:rv4-rise var(--rv-d2) var(--rv-ease-out)}
.rv4-drawer .ask p{margin:0;font:var(--rv-t-body) var(--rv-font);color:var(--rv-ink)}.rv4-drawer .ask>div{display:flex;justify-content:flex-end;gap:8px}
@keyframes rv4-rise{from{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}
/* modules · tone, not rules */
.rv4-dmod{padding:14px 14px 16px;margin:0 -14px;border-radius:12px;display:grid;gap:10px;min-width:0}
.rv4-dmod:nth-of-type(even){background:var(--rv-base-2)}
.rv4-dmod .mh{display:flex;align-items:center;justify-content:space-between;gap:10px;min-height:24px}
.rv4-dmod .mh h3{margin:0;font:500 11px/1 var(--rv-font);letter-spacing:.06em;text-transform:uppercase;color:var(--rv-ink-3)}
/* wide: body becomes two columns, modules flow; full: a reading column with the first module spanning */
.rv4-drawer.wide .bd,.rv4-drawer.full .bd{display:grid;grid-template-columns:minmax(0,1.25fr) minmax(0,.75fr);column-gap:28px;row-gap:6px;align-content:start}
.rv4-drawer.wide .bd>.span,.rv4-drawer.full .bd>.span{grid-column:1/-1}
.rv4-drawer.full .bd{max-width:1180px;width:100%;margin:0 auto;padding:4px 32px 32px}
.rv4-drawer.full .hd,.rv4-drawer.full .ft{padding-left:32px;padding-right:24px}
@media (prefers-reduced-motion:reduce){.rv4-drawer,.rv4-drawer .ask{transition:none;animation:none}.rv4-drawer .hd .busy{animation:none}}


/* ═══ P0.2–4 · 20 Oct · RvIOSShell — iOS SPEC · Sheet · Tab bar · Nav bar. SwiftUI owns these; this CSS is the WebKit-blank fallback. ═══ */
/* phone frame · 390×844 · not a product component */
.rv4-phone{position:relative;width:390px;height:844px;border-radius:44px;overflow:hidden;background:var(--rv-base-0);color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font);box-shadow:0 0 0 1px var(--rv-rule-strong);display:flex;flex-direction:column;isolation:isolate}
.rv4-phone .status{display:flex;align-items:flex-end;justify-content:space-between;height:54px;padding:0 30px 10px 38px;flex:none}
.rv4-phone .status b{font:500 16px/1 var(--rv-font);letter-spacing:-.01em}.rv4-phone .status span{display:flex;gap:6px;align-items:center}.rv4-phone .status svg{height:12px;width:auto;fill:currentColor}
.rv4-phone .page{flex:1;min-height:0;overflow:hidden;position:relative;display:flex;flex-direction:column}
.rv4-phone .scrim{position:absolute;inset:0;background:color-mix(in oklab,var(--rv-shade) 22%,transparent);z-index:4}
/* ── nav bar · NavigationStack toolbar · large title on roots, inline once scrolled ── */
.rv4-navbar{flex:none;padding:0 14px;display:grid;gap:2px;transition:background-color var(--rv-d2) var(--rv-ease)}
.rv4-navbar .row{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;min-height:44px}
.rv4-navbar .sp{display:block}.rv4-navbar .acts{display:flex;gap:6px;justify-content:flex-end}
.rv4-navbar .inl{display:grid;justify-items:center;text-align:center;min-width:0}.rv4-navbar .inl b{font:500 17px/1.2 var(--rv-font);letter-spacing:-.015em;white-space:nowrap}.rv4-navbar .inl small{font:var(--rv-t-micro) var(--rv-font);color:var(--rv-ink-3);margin-top:1px}
.rv4-navbar .lt{margin:2px 0 8px 2px;font:400 34px/1.1 var(--rv-font);letter-spacing:-.03em}
.rv4-navbar .pill{display:inline-flex;align-items:center;gap:4px;height:36px;padding:0 12px 0 8px;border:0;border-radius:999px;background:var(--rv-base-2);color:var(--rv-ink);font:400 15px/1 var(--rv-font);cursor:pointer;justify-self:start}
.rv4-navbar .pill svg,.rv4-navact svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.rv4-navbar .pill:only-child{padding-right:8px}
.rv4-navact{width:36px;height:36px;display:grid;place-items:center;border:0;border-radius:50%;background:var(--rv-base-2);color:var(--rv-ink);cursor:pointer;transition:background-color var(--rv-d1) var(--rv-ease)}
.rv4-navact:hover{background:var(--rv-base-3)}.rv4-navact:active{transform:translateY(1px)}
/* GLASS · on scroll only. iOS: the system bar material. Web fallback: one sheet, blur, tint, no glow. */
.rv4-navbar.scrolled{position:sticky;top:0;z-index:3;background:color-mix(in oklab,var(--rv-base-0) 72%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.4);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.4);box-shadow:0 1px 0 color-mix(in oklab,var(--rv-ink) 8%,transparent)}
/* ── tab bar · TabView · GLASS: floats over content ── */
.rv4-tabbar{position:absolute;left:0;right:0;bottom:0;height:84px;z-index:5;pointer-events:none}
.rv4-tabbar .cap{pointer-events:auto;position:absolute;left:14px;right:14px;top:4px;height:62px;border-radius:999px;padding:4px;display:grid;grid-template-columns:repeat(5,1fr);align-items:stretch;background:color-mix(in oklab,var(--rv-base-1) 58%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 90%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 7%,transparent),0 12px 32px -12px color-mix(in oklab,var(--rv-shade) 45%,transparent);transition:grid-template-columns var(--rv-d3) var(--rv-ease-out)}
.rv4-tabbar.open .cap{grid-template-columns:2fr 1fr 2fr}
.rv4-tabbar [role=tab]{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;border:0;border-radius:999px;background:transparent;color:var(--rv-ink-3);font:400 10.5px/1 var(--rv-font);letter-spacing:.01em;cursor:pointer;transition:background-color var(--rv-d1) var(--rv-ease),color var(--rv-d1) var(--rv-ease)}
.rv4-tabbar [role=tab][aria-selected=true]{color:var(--rv-ink);background:color-mix(in oklab,var(--rv-ink) 7%,transparent)}
.rv4-tabbar [role=tab] .ic{position:relative;display:grid;place-items:center}.rv4-tabbar [role=tab] svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.rv4-tabbar [role=tab] em{position:absolute;top:-5px;right:-12px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--rv-ink);color:var(--rv-base-1);font:500 10px/16px var(--rv-font);font-style:normal;text-align:center}
.rv4-tabbar .act{display:flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:999px;background:transparent;color:var(--rv-ink);font:400 14px/1 var(--rv-font);cursor:pointer}
.rv4-tabbar .act svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.rv4-tabbar .orb{display:grid;place-items:center;align-self:start;margin-top:-24px;border:0;background:transparent;border-radius:50%;cursor:pointer}
.rv4-orb{display:grid;place-items:center;border-radius:50%;background:var(--rv-ink);color:var(--rv-base-1);box-shadow:0 0 0 3px var(--rv-base-0),0 8px 20px -8px color-mix(in oklab,var(--rv-shade) 55%,transparent);transition:transform var(--rv-d2) var(--rv-ease-out)}
.rv4-orb svg{width:72%;height:72%;display:block}
.rv4-tabbar.open .rv4-orb{transform:scale(1.06)}
.rv4-tabbar .home{position:absolute;left:50%;bottom:8px;width:134px;height:5px;border-radius:3px;background:var(--rv-ink);transform:translateX(-50%)}
/* ── sheet · .sheet + presentationDetents · NOT glass (content) ── */
.rv4-sheet{position:absolute;left:6px;right:6px;bottom:0;z-index:6;display:flex;flex-direction:column;background:var(--rv-base-1);color:var(--rv-ink);border-radius:24px 24px 0 0;box-shadow:0 -1px 0 color-mix(in oklab,var(--rv-ink) 10%,transparent),0 -16px 40px -16px color-mix(in oklab,var(--rv-shade) 40%,transparent);transition:height var(--rv-d3) var(--rv-ease-out);overflow:hidden}
/* pushed (page) · a NavigationLink push, not a modal: in flow, fills the stack below the nav bar, no sheet chrome */
.rv4-sheet.pushed{position:relative;inset:auto;flex:1;min-height:0;height:auto!important;border-radius:0;box-shadow:none;background:var(--rv-base-0)}
.rv4-sheet .grab{display:block;width:36px;height:5px;border-radius:3px;background:var(--rv-ink-4);margin:7px auto 0;flex:none}
.rv4-sheet .hd{display:flex;align-items:center;gap:8px;min-height:52px;padding:6px 12px 6px 18px;flex:none}
.rv4-sheet .hd .ttl{display:grid;gap:2px;min-width:0;flex:1}.rv4-sheet .hd .ttl b{font:500 17px/1.2 var(--rv-font);letter-spacing:-.015em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv4-sheet .hd .meta{display:flex;align-items:center;gap:8px;font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);min-width:0}.rv4-sheet .hd .meta .m{min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-sheet .hd .meta .rv4-word.inl{flex:none;font-size:13px}
.rv4-sheet .pill{display:inline-flex;align-items:center;gap:6px;height:32px;padding:0 12px;border:0;border-radius:999px;background:var(--rv-base-2);color:var(--rv-ink);font:400 14px/1 var(--rv-font);cursor:pointer;white-space:nowrap}
.rv4-sheet .pill svg{display:none;width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.rv4-sheet .pill.glyph{width:32px;padding:0;justify-content:center}.rv4-sheet .pill.glyph span{display:none}.rv4-sheet .pill.glyph svg{display:block}
.rv4-sheet .disc{width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:50%;background:var(--rv-base-2);color:var(--rv-ink);cursor:pointer}.rv4-sheet .disc svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round}
.rv4-sheet .bd{flex:1;min-height:0;overflow:auto;padding:0 18px 18px;display:flex;flex-direction:column;gap:6px}
.rv4-sheet .bd .rv4-dmod{margin:0 -12px;padding:12px 12px 14px}
.rv4-sheet .ft{display:flex;gap:8px;align-items:center;padding:10px 18px 14px;flex:none;box-shadow:0 -1px 0 var(--rv-rule);background:inherit}
.rv4-sheet .ft .sp{flex:1}
/* page: nav bar replaces the sheet header; body gets the 390 reading measure */
.rv4-sheet.pushed .bd{padding-top:6px;padding-bottom:100px}
/* list rows · the agenda behind the sheet · 52pt rows, lettermark, chevron */
.rv4-irow{display:grid;grid-template-columns:52px minmax(0,1fr) auto;gap:12px;align-items:center;min-height:56px;padding:8px 0;border-top:1px solid var(--rv-rule);color:var(--rv-ink);text-align:left;background:transparent;border-left:0;border-right:0;border-bottom:0;width:100%;font:var(--rv-t-body) var(--rv-font);cursor:pointer}
.rv4-irow:first-of-type{border-top:0}.rv4-irow time{font:var(--rv-t-micro) var(--rv-font);line-height:1.35;color:var(--rv-ink-3);white-space:pre-line}
.rv4-irow .t{display:grid;gap:2px;min-width:0}.rv4-irow .t b{font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-irow .t small{font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv4-irow .ch{color:var(--rv-ink-4)}.rv4-irow .ch svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.rv4-idate{display:flex;align-items:baseline;gap:8px;margin:14px 0 4px;font:500 13px/1 var(--rv-font)}.rv4-idate b{font-weight:500;padding:4px 8px;border-radius:999px}.rv4-idate b.today{background:var(--rv-ink);color:var(--rv-base-1)}.rv4-idate small{font-weight:400;color:var(--rv-ink-3)}
@media (prefers-reduced-motion:reduce){.rv4-sheet,.rv4-tabbar .cap,.rv4-orb{transition:none}}

/* orb · voice. hold = push-to-talk (capsule shows waveform · time · slide-to-cancel · release to send); swipe up locks (orb → Stop, Cancel left, Send right). WhatsApp grammar. */
.rv4-tabbar.voice .cap{grid-template-columns:minmax(0,1fr) 72px minmax(0,1fr)}
.rv4-tabbar .rec{display:flex;align-items:center;gap:8px;padding:0 4px 0 14px;min-width:0;color:var(--rv-ink)}
.rv4-tabbar .rec.r{justify-content:flex-end;padding:0 8px 0 0}
.rv4-tabbar .rec .dot{width:8px;height:8px;border-radius:50%;background:var(--rv-accent);flex:none;animation:rv4-blink 1.1s steps(1) infinite}
@keyframes rv4-blink{50%{opacity:.25}}
.rv4-tabbar .rec .wave{display:flex;align-items:center;gap:2px;height:22px;min-width:60px;overflow:hidden;flex:1}.rv4-tabbar .rec .wave b{display:block;width:2px;border-radius:1px;background:var(--rv-ink-3);flex:none}
.rv4-tabbar .rec time{font:400 13px/1 var(--rv-font);font-variant-numeric:tabular-nums;flex:none}
.rv4-tabbar .rec .hint{font:400 12px/1 var(--rv-font);color:var(--rv-ink-3);white-space:nowrap}
.rv4-tabbar.v-hold .rec .cx,.rv4-tabbar.v-hold .rec .hint{display:none}
.rv4-tabbar .rec .cx{height:30px;padding:0 10px;border:0;border-radius:999px;background:transparent;color:var(--rv-ink);font:400 13px/1 var(--rv-font);cursor:pointer}
.rv4-tabbar .rec .send{width:40px;height:40px;display:grid;place-items:center;border:0;border-radius:50%;background:var(--rv-ink);color:var(--rv-base-1);cursor:pointer}.rv4-tabbar .rec .send svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}

.rv4-orb.stop{width:58px;height:58px;background:var(--rv-accent);color:var(--rv-on-accent)}.rv4-orb.stop b{display:block;width:18px;height:18px;border-radius:4px;background:currentColor}
@media (prefers-reduced-motion:reduce){.rv4-tabbar .rec .dot,.rv4-tabbar .lock{animation:none}}

/* orb on a rail · the orb never leaves centre x. --lift 0→1 rides it up 56pt; at 1 it detents into the lock (haptic .rigid, Pow .pop) and stays. */
.rv4-tabbar .orb{position:relative}
.rv4-tabbar .orb .ride{display:grid;place-items:center;transform:translateY(calc(var(--lift,0) * -56px));transition:transform var(--rv-d2) var(--rv-ease-out)}
.rv4-tabbar.v-hold .ride .rv4-orb{transform:scale(1.14);box-shadow:0 0 0 3px var(--rv-base-0),0 0 0 12px color-mix(in oklab,var(--rv-accent) 14%,transparent),0 8px 20px -8px color-mix(in oklab,var(--rv-shade) 55%,transparent)}
.rv4-tabbar .rail{position:absolute;left:50%;bottom:calc(100% - 36px);width:40px;height:92px;transform:translateX(-50%);border-radius:20px;background:color-mix(in oklab,var(--rv-base-1) 58%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 90%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 7%,transparent);pointer-events:none}
.rv4-tabbar .rail .det{position:absolute;left:50%;top:8px;transform:translateX(-50%);width:24px;height:24px;display:grid;place-items:center;border-radius:50%;color:var(--rv-ink-3);transition:color var(--rv-d1) var(--rv-ease),background-color var(--rv-d1) var(--rv-ease)}
.rv4-tabbar .rail .det svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.rv4-tabbar.v-locked .rail .det{color:var(--rv-on-accent);background:var(--rv-accent)}
.rv4-tabbar.v-locked .ride .rv4-orb.stop{box-shadow:0 0 0 3px var(--rv-base-0),0 8px 20px -8px color-mix(in oklab,var(--rv-shade) 55%,transparent)}
/* waveform · shaders `Waveform` in production (live mic amplitude, ink-3 on the capsule). CSS bars are the fallback and the reduced-motion still. */
.rv4-tabbar .rec .wave b{transition:height var(--rv-d1) linear}


/* ═══ P0.5 · 20 Oct · RvDatePicker — WEB · date · time · range. GLASS: floats over the page → one sheet, blur, tint, no glow (the page under it is the glow). ═══ */
.rv4-dp{position:relative;isolation:isolate;display:flex;flex-direction:column;border-radius:12px;overflow:hidden;color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font);font-variant-numeric:tabular-nums;width:max-content;max-width:100%;background:var(--rv-base-2);
  box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 90%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 7%,transparent),0 24px 48px -24px color-mix(in oklab,var(--rv-shade) 45%,transparent)}
/* recipe §2.1 · self-lit: glow inside the clip → one sheet → translucent cells */
.rv4-dp::before{content:"";position:absolute;inset:0;z-index:0;background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-gl) 85%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 55%,transparent),transparent 70%)}
[data-brand-scheme=light] .rv4-dp::before{background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-ro) 90%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 35%,transparent),transparent 70%)}
.rv4-dp::after{content:"";position:absolute;inset:0;z-index:1;background:color-mix(in oklab,var(--rv-base-1) 58%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);pointer-events:none}
.rv4-dp>*{position:relative;z-index:2}
.rv4-dp .top{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:14px 16px 8px}
.rv4-dp .sum{font:500 15px/1.2 var(--rv-font);letter-spacing:-.01em;white-space:nowrap}
.rv4-dp .tz{font:400 12px/1 var(--rv-font);color:var(--rv-ink-3);white-space:nowrap}.rv4-dp .tz small{color:var(--rv-ink-4);font-size:12px}
.rv4-dp .tzb{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 6px 0 8px;border:0;border-radius:6px;background:transparent;color:var(--rv-ink-2);font:400 12px/1 var(--rv-font);cursor:pointer}.rv4-dp .tzb:hover{background:color-mix(in oklab,var(--rv-ink) 6%,transparent)}
.rv4-dp .tzb svg{width:12px;height:12px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.rv4-dp .body{display:flex;gap:8px;padding:0 10px}
.rv4-dp .ft{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 12px 12px}
.rv4-dp .ft .acts{display:flex;gap:6px}.rv4-dp .ft .sp{flex:1}
.rv4-dp .presets{display:flex;gap:4px;flex-wrap:wrap}.rv4-dp .presets button{height:28px;padding:0 10px;border:0;border-radius:999px;background:transparent;color:var(--rv-ink-2);font:400 12.5px/1 var(--rv-font);cursor:pointer}.rv4-dp .presets button:hover{background:color-mix(in oklab,var(--rv-ink) 7%,transparent);color:var(--rv-ink)}
/* month · 7 × 36 cells, 2px gutters; ink selected, tone span, outline today */
.rv4-month{display:grid;gap:4px;padding:6px;width:276px}
.rv4-month .mh{display:grid;grid-template-columns:28px 1fr 28px;align-items:center;height:32px}.rv4-month .mh b{text-align:center;font:500 14px/1 var(--rv-font)}
.rv4-month .nv{width:28px;height:28px;display:grid;place-items:center;border:0;border-radius:50%;background:transparent;color:var(--rv-ink-3);cursor:pointer}.rv4-month button.nv:hover{background:color-mix(in oklab,var(--rv-ink) 7%,transparent);color:var(--rv-ink)}
.rv4-month .nv svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.rv4-month .dow{display:grid;grid-template-columns:repeat(7,36px);gap:2px;justify-content:center}.rv4-month .dow span{height:20px;display:grid;place-items:center;font:400 11px/1 var(--rv-font);color:var(--rv-ink-4)}
.rv4-month .days{display:grid;grid-template-columns:repeat(7,36px);grid-auto-rows:36px;gap:2px;justify-content:center}
.rv4-month .dy{position:relative;border:0;border-radius:8px;background:transparent;color:var(--rv-ink);font:400 13.5px/1 var(--rv-font);cursor:pointer;transition:background-color var(--rv-d1) var(--rv-ease)}
.rv4-month .dy:hover{background:color-mix(in oklab,var(--rv-ink) 8%,transparent)}
.rv4-month .dy.today::after{content:"";position:absolute;left:50%;bottom:5px;width:4px;height:4px;border-radius:50%;background:var(--rv-accent);transform:translateX(-50%)}
.rv4-month .dy.span{background:color-mix(in oklab,var(--rv-select) 14%,transparent);border-radius:0}
.rv4-month .dy.edge{background:color-mix(in oklab,var(--rv-select) 28%,transparent)}
.rv4-month .dy.sel{background:var(--rv-ink);color:var(--rv-base-1);font-weight:500}.rv4-month .dy.sel.today::after{background:var(--rv-base-1)}
.rv4-month .dy.dis{color:var(--rv-ink-4);cursor:default}.rv4-month .dy.dis:hover{background:transparent}
.rv4-month .dy:focus-visible{outline:0;box-shadow:0 0 0 1.5px var(--rv-select)}
/* time column */
.rv4-dp .tcol{display:flex;flex-direction:column;width:132px;padding:6px 6px 6px 0;border-left:1px solid color-mix(in oklab,var(--rv-ink) 7%,transparent)}
.rv4-dp .th{display:flex;align-items:center;justify-content:space-between;height:32px;padding:0 6px 0 10px;font:500 14px/1 var(--rv-font)}
.rv4-dp .ad{display:inline-flex;align-items:center;gap:6px;font:400 12px/1 var(--rv-font);color:var(--rv-ink-3);cursor:pointer}.rv4-dp .ad input{width:14px;height:14px;margin:0;accent-color:var(--rv-ink)}
.rv4-dp .adn{padding:12px 10px;font:400 13px/1.4 var(--rv-font);color:var(--rv-ink-3)}
.rv4-timelist{display:flex;flex-direction:column;gap:1px;max-height:288px;overflow:auto;padding:2px 4px 2px 0;scrollbar-width:thin;scrollbar-color:var(--rv-rule-strong) transparent}
.rv4-timelist button{display:flex;align-items:baseline;justify-content:space-between;height:30px;padding:0 10px;border:0;border-radius:6px;background:transparent;color:var(--rv-ink);font:400 13.5px/1 var(--rv-font);font-variant-numeric:tabular-nums;cursor:pointer;flex:none}
.rv4-timelist button:hover{background:color-mix(in oklab,var(--rv-ink) 7%,transparent)}.rv4-timelist button[aria-selected=true]{background:var(--rv-ink);color:var(--rv-base-1);font-weight:500}
.rv4-timelist button small{font-size:10px;color:var(--rv-ink-4)}.rv4-timelist button[aria-selected=true] small{color:var(--rv-base-1);opacity:.7}
/* the field · a well with the glyph and the zone */
.rv4-datef .well{display:flex;align-items:center;gap:10px;width:100%;height:40px;padding:0 12px;border:0;border-radius:8px;background:var(--rv-base-2);color:var(--rv-ink);font:400 15px/1 var(--rv-font);cursor:pointer;text-align:left;transition:background-color var(--rv-d1) var(--rv-ease),box-shadow var(--rv-d1) var(--rv-ease)}
.rv4-datef .well:hover{background:var(--rv-base-3)}.rv4-datef .well.open,.rv4-datef .well:focus-visible{outline:0;background:var(--rv-base-1);box-shadow:0 0 0 1.5px var(--rv-select)}
.rv4-datef .well svg{width:16px;height:16px;fill:none;stroke:var(--rv-ink-3);stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;flex:none}
.rv4-datef .well span{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-datef .well .ph{color:var(--rv-ink-4)}.rv4-datef .well small{font-size:12px;color:var(--rv-ink-4);white-space:nowrap}
@media (prefers-reduced-motion:reduce){.rv4-month .dy,.rv4-datef .well{transition:none}}


/* ═══ P0.6 · 20 Oct · RvCommandK — WEB · ⌘K. GLASS: floats over the page → one sheet, blur, tint, no glow. The first glass surface built from the recipe end to end. ═══ */
.rv4-cmdk{position:relative;isolation:isolate;display:flex;flex-direction:column;max-height:520px;border-radius:14px;overflow:hidden;color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font);background:var(--rv-base-2);
  box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 90%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 7%,transparent),0 32px 64px -28px color-mix(in oklab,var(--rv-shade) 50%,transparent)}
/* recipe §2 · glow inside the clip (gold low-right · violet low-left; dawn: rose · violet) → ONE sheet of glass → transparent content */
.rv4-cmdk::before{content:"";position:absolute;inset:0;z-index:0;background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-gl) 85%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 55%,transparent),transparent 70%)}
[data-brand-scheme=light] .rv4-cmdk::before{background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-ro) 90%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 35%,transparent),transparent 70%)}
.rv4-cmdk::after{content:"";position:absolute;inset:0;z-index:1;background:color-mix(in oklab,var(--rv-base-1) 58%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);pointer-events:none}
.rv4-cmdk>*{position:relative;z-index:2}
.rv4-cmdk .in{display:flex;align-items:center;gap:12px;height:56px;padding:0 16px 0 18px;flex:none}
.rv4-cmdk .in>svg{width:18px;height:18px;fill:none;stroke:var(--rv-ink-3);stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;flex:none}
.rv4-cmdk .in input{flex:1;min-width:0;height:100%;border:0;background:transparent;color:var(--rv-ink);font:400 17px/1 var(--rv-font);letter-spacing:-.01em;outline:0}.rv4-cmdk .in input::placeholder{color:var(--rv-ink-4)}
.rv4-cmdk kbd{display:inline-grid;place-items:center;min-width:20px;height:20px;padding:0 6px;border-radius:5px;background:color-mix(in oklab,var(--rv-ink) 7%,transparent);color:var(--rv-ink-3);font:400 11px/1 var(--rv-font);letter-spacing:.02em}
.rv4-cmdk .sc{display:flex;align-items:center;gap:2px;padding:0 12px 8px;flex:none}
.rv4-cmdk .sc button{height:28px;padding:0 10px;border:0;border-radius:999px;background:transparent;color:var(--rv-ink-3);font:400 13px/1 var(--rv-font);cursor:pointer;transition:background-color var(--rv-d1) var(--rv-ease),color var(--rv-d1) var(--rv-ease)}
.rv4-cmdk .sc button:hover{color:var(--rv-ink)}.rv4-cmdk .sc button[aria-selected=true]{background:color-mix(in oklab,var(--rv-ink) 8%,transparent);color:var(--rv-ink)}
.rv4-cmdk .sc .hint{margin-left:auto;font:400 11px/1 var(--rv-font);color:var(--rv-ink-4);padding-right:6px}
.rv4-cmdk .ls{flex:1;min-height:0;overflow:auto;padding:0 8px 8px;scrollbar-width:thin;scrollbar-color:var(--rv-rule-strong) transparent;box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-ink) 7%,transparent)}
.rv4-cmdk .grp{padding-top:8px}.rv4-cmdk .gh{padding:6px 10px 4px;font:500 11px/1 var(--rv-font);letter-spacing:.06em;text-transform:uppercase;color:var(--rv-ink-4)}
.rv4-cmdk .row{display:grid;grid-template-columns:32px minmax(0,1fr) auto auto 20px;align-items:center;gap:10px;width:100%;min-height:44px;padding:5px 8px 5px 6px;border:0;border-radius:9px;background:transparent;color:var(--rv-ink);text-align:left;cursor:pointer;font:inherit}
.rv4-cmdk .row[aria-selected=true]{background:color-mix(in oklab,var(--rv-ink) 8%,transparent)}
.rv4-cmdk .row .ic{display:grid;place-items:center;width:32px;height:32px;border-radius:8px;background:color-mix(in oklab,var(--rv-base-1) 40%,transparent);color:var(--rv-ink-2)}
.rv4-cmdk .row .ic svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.rv4-cmdk .lm{display:grid;place-items:center;width:22px;height:22px;border-radius:5px;background:var(--rv-ink);color:var(--rv-base-1);font:500 10px/1 var(--rv-font);font-style:normal}
.rv4-cmdk .row .t{display:grid;gap:2px;min-width:0}.rv4-cmdk .row .t b{font-weight:400;font-size:15px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.rv4-cmdk .row .t small{font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv4-cmdk .row .st{font-size:13px;white-space:nowrap}
.rv4-cmdk .row .go{display:grid;place-items:center;color:var(--rv-ink-4)}.rv4-cmdk .row .go svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.rv4-cmdk .none{padding:28px 16px 20px;display:grid;gap:4px;font:400 15px/1.3 var(--rv-font);color:var(--rv-ink)}.rv4-cmdk .none small{font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3)}
.rv4-cmdk .ft{display:flex;align-items:center;gap:16px;height:36px;padding:0 14px;flex:none;font:400 12px/1 var(--rv-font);color:var(--rv-ink-3);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-ink) 7%,transparent)}
.rv4-cmdk .ft span{display:inline-flex;align-items:center;gap:4px}.rv4-cmdk .ft .sp{flex:1}
.rv4-cmdk .ft .sim{gap:6px;color:var(--rv-ink-3)}.rv4-cmdk .ft .sim i{width:6px;height:6px;border-radius:50%;background:var(--rv-warn)}
/* no scrim: the glass is self-lit (its own glow), the page stays as it is */
.rv4-cmdk-scrim{display:none}
@media (prefers-reduced-motion:reduce){.rv4-cmdk .sc button{transition:none}}


/* ═══ v4.2f · 20 Oct · recipe sweep — the accidental leftovers the audit found. Deliberate exceptions are listed in research/critique-kit-v4-20-Oct-evening.md §2. ═══ */
/* mono: gone everywhere (recipe §0). The earlier sweep missed menu kbd, tooltip kbd, receipt ids, week-grid hour axis, search kbd. */
.rv4-menu button kbd,.rv4-tip kbd,.rv4-rcpt .id,.rv4-rcpt code,.rv4-week .hr,.rv4-week time,.rv4-search kbd{font-family:var(--rv-font)!important;font-variant-numeric:tabular-nums;letter-spacing:.02em}
/* boxes → wells (recipe §0: tone, not hairline). search · select · stepper · context chip · event tile */
.rv4-search input{height:40px;border:0;border-radius:8px;background:var(--rv-base-2);padding-left:36px;font-size:15px}
.rv4-search input:hover{background:var(--rv-base-3)}.rv4-search input:focus-visible{outline:0;background:var(--rv-base-1);box-shadow:0 0 0 1.5px var(--rv-select)}
.rv4-search svg{left:12px;stroke:var(--rv-ink-3)}.rv4-search kbd{right:10px;height:20px;padding:0 6px;display:inline-grid;place-items:center;border-radius:5px;background:color-mix(in oklab,var(--rv-ink) 7%,transparent);color:var(--rv-ink-3);font-size:11px}
.rv4-sel select{height:40px;border:0;border-radius:8px;background:var(--rv-base-2);font-size:15px;font-weight:400}
.rv4-sel select:hover{background:var(--rv-base-3)}.rv4-sel select:focus-visible{outline:0;background:var(--rv-base-1);box-shadow:0 0 0 1.5px var(--rv-select)}
.rv4-step{border:0;border-radius:8px;background:var(--rv-base-2);box-shadow:none}.rv4-step button{border:0;background:transparent;color:var(--rv-ink);font-weight:400}.rv4-step button:hover{background:var(--rv-base-3)}
.rv4-ctx{border-radius:8px;border:0;background:var(--rv-base-2)}
.rv4-tile{border-radius:12px;border:0}
/* floating surfaces: shadows mix from --rv-shade, never ink; menus and tooltips are self-lit glass (recipe §2.1); toast and dialog are content-dark, not glass */
.rv4-menu{position:relative;isolation:isolate;overflow:hidden;border-radius:12px;background:var(--rv-base-2);box-shadow:inset 0 1px 0 color-mix(in oklab,var(--rv-base-1) 90%,transparent),inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 7%,transparent),0 20px 40px -20px color-mix(in oklab,var(--rv-shade) 45%,transparent)}
.rv4-menu::before{content:"";position:absolute;inset:0;z-index:0;background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-gl) 85%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 55%,transparent),transparent 70%)}
[data-brand-scheme=light] .rv4-menu::before{background:radial-gradient(90% 75% at 82% 108%,color-mix(in oklab,var(--rv-sky-ro) 90%,transparent),transparent 70%),radial-gradient(60% 50% at 10% 110%,color-mix(in oklab,var(--rv-second) 35%,transparent),transparent 70%)}
.rv4-menu::after{content:"";position:absolute;inset:0;z-index:1;background:color-mix(in oklab,var(--rv-base-1) 58%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);pointer-events:none}
.rv4-menu>*{position:relative;z-index:2}.rv4-menu button{border-radius:8px;font-weight:400}.rv4-menu button:hover,.rv4-menu button:focus-visible{background:color-mix(in oklab,var(--rv-ink) 8%,transparent)}
.rv4-tip{border-radius:8px;background:var(--rv-ink);color:var(--rv-base-1);box-shadow:0 8px 20px -10px color-mix(in oklab,var(--rv-shade) 50%,transparent)}
.rv4-dlg{border-radius:12px;box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 7%,transparent),0 32px 64px -28px color-mix(in oklab,var(--rv-shade) 50%,transparent)}
.rv4-toast{border-radius:999px;box-shadow:0 12px 28px -14px color-mix(in oklab,var(--rv-shade) 55%,transparent)}
.rv4-card{box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 6%,transparent)}
/* week grid: the hour axis and day heads are type, not rules; today/now stay vermilion by rule (live) */
.rv4-week .hr{color:var(--rv-ink-4)}


/* ═══ W1 · 21 Oct · guest primary — two renditions. gold·dawn (fill {color.gold}, dawn rim, ink text) · violet·dusk (fill {color.second}, dusk rim, cream text).
   The only button that carries the horizon rim AT REST; hover brightens one step and the rim completes its sweep. Vermilion has left buttons entirely. 'accent' is an alias of guest gold for the old cards. ═══ */
.rv4-btn.guest,.rv4-btn.accent{position:relative;isolation:isolate;overflow:visible;box-shadow:none;filter:none;background:var(--rv-sky-gl);color:var(--rv-ink);font-weight:500;letter-spacing:-.005em}
.rv4-btn.rv4-btn.guest::before,.rv4-btn.rv4-btn.accent::before{content:"";position:absolute;inset:-2px!important;border-radius:calc(8px + 2px);padding:2px;display:block!important;opacity:var(--rv-rim-op)!important;animation:none!important;
  background:linear-gradient(calc(var(--rv-hz-ang) + var(--rv-sweep)),var(--rv-second),var(--rv-sky-ro) 42%,var(--rv-sky-gl) 74%,var(--rv-sky-hz));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);mask-composite:exclude;z-index:-1!important;padding:2px!important;border-radius:10px!important;transform:none!important;transition:opacity var(--rv-d2) var(--rv-ease)}
.rv4-btn.rv4-btn.guest::before,.rv4-btn.rv4-btn.accent::before{opacity:0!important}
.rv4-btn.rv4-btn.guest::after,.rv4-btn.rv4-btn.accent::after{display:none!important}
.rv4-btn.guest:hover,.rv4-btn.accent:hover{background:color-mix(in oklab,var(--rv-sky-gl) 86%,white);filter:none;transform:translateY(-1px)}
.rv4-btn.rv4-btn.guest:hover::before,.rv4-btn.rv4-btn.accent:hover::before{opacity:1!important;animation:rv4-guest-flash .7s cubic-bezier(.2,.7,.2,1) 1 forwards!important;inset:-2px!important;padding:2px!important}
.rv4-btn/* the flash: a bright band travels once around the edge (the horizon rotating), then the rim settles to a faint still line while hovered */
@keyframes rv4-guest-flash{0%{--rv-sweep:0deg;opacity:0}12%{opacity:1}70%{--rv-sweep:360deg;opacity:1}100%{--rv-sweep:360deg;opacity:.45}}
.rv4-btn.rv4-btn.guest.pill::before,.rv4-btn.rv4-btn.accent.pill::before{border-radius:999px!important}
.rv4-btn.guest[data-tone=violet]{background:var(--rv-second);color:var(--rv-sky-hz)}
.rv4-btn.guest[data-tone=violet]:hover{background:color-mix(in oklab,var(--rv-second) 88%,white)}
[data-brand-scheme=dark] .rv4-btn.guest[data-tone=gold]{color:oklch(16% .02 40)}
[data-brand-scheme=dark] .rv4-btn.guest[data-tone=violet]{background:var(--rv-second);color:oklch(16% .02 40)}
[data-brand-scheme=dark] .rv4-btn.guest[data-tone=violet]:hover{background:color-mix(in oklab,var(--rv-second) 90%,white)}

.rv4-btn.guest[data-tone=auto]{background:var(--rv-sky-gl);color:var(--rv-ink)}
[data-brand-scheme=dark] .rv4-btn.guest[data-tone=auto]{background:var(--rv-second);color:oklch(16% .02 40)}
[data-brand-scheme=dark] .rv4-btn.guest[data-tone=auto]:hover{background:color-mix(in oklab,var(--rv-second) 90%,white)}


/* ═══ W5 · 21 Oct · the field family — Form · FormSection · FieldRow · RadioGroup · ChoiceCards. Wells, tone, the word under the field. ═══ */
.rv4-form{display:grid;grid-template-columns:minmax(0,1fr);gap:18px;min-width:0;color:var(--rv-ink);font:var(--rv-t-body) var(--rv-font);container-type:inline-size}
.rv4-form .fh{display:grid;gap:4px}.rv4-form .fh h2{margin:0;font:400 22px/1.15 var(--rv-font);letter-spacing:-.025em}.rv4-form .fh p{margin:0;color:var(--rv-ink-3);font:var(--rv-t-label) var(--rv-font);max-width:64ch;text-wrap:pretty}
.rv4-form .fb{display:grid;gap:18px}
.rv4-form .ff{position:relative;display:flex;align-items:center;flex-wrap:wrap;gap:8px;padding-top:14px;box-shadow:0 -1px 0 var(--rv-rule);min-width:0}.rv4-form .ff .sp{flex:1}
@container (max-width:420px){.rv4-form .ff{display:grid;grid-template-columns:minmax(0,1fr);gap:8px}.rv4-form .ff .sp{display:none}.rv4-form .ff .rv4-btn{width:100%;justify-content:center}}
.rv4-form .ff .busy{position:absolute;left:0;right:0;top:0;height:2px;background:var(--rv-horizon);background-size:200% 100%;animation:rv4-hzsweep 1.4s linear infinite}
.rv4-fsec{display:grid;gap:10px;min-width:0}.rv4-fsec .sh{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}.rv4-fsec .sh h3{margin:0;font:500 11px/1 var(--rv-font);letter-spacing:.06em;text-transform:uppercase;color:var(--rv-ink-3)}.rv4-fsec .sh small{font:var(--rv-t-micro) var(--rv-font);letter-spacing:0;text-transform:none;color:var(--rv-ink-4)}
.rv4-fsec .sg{display:grid;gap:14px 20px;grid-template-columns:minmax(0,1fr)}
@container (min-width:720px){.rv4-fsec .sg{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.rv4-frow.span,.rv4-fsec .sg>.span{grid-column:1/-1}}
.rv4-frow{display:grid;gap:6px;min-width:0;align-content:start}
.rv4-frow>label{font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-2)}.rv4-frow>label i{color:var(--rv-accent);font-style:normal}
.rv4-frow .help{font:var(--rv-t-micro) var(--rv-font);line-height:1.35;color:var(--rv-ink-3)}
.rv4-frow .err{font:var(--rv-t-micro) var(--rv-font);line-height:1.35;color:var(--rv-err)}
.rv4-frow.has-err .rv4-fld input,.rv4-frow.has-err input{box-shadow:0 0 0 1.5px var(--rv-err)!important;background:var(--rv-base-1)!important}
.rv4-frow .ro{min-height:40px;display:flex;align-items:center;gap:6px;padding:0 2px;font-size:15px}.rv4-frow .ro small{color:var(--rv-ink-4);font-size:12px}
.rv4-frow.bool{padding-top:22px}
/* the family's wells inherit RvField's; strip the inner label so the row's label is the only one */
.rv4-frow .rv4-fld>label{display:none}
/* radio group · 2–6 · dot in a well row */
.rv4-radio{display:grid;gap:4px}
.rv4-radio label{display:grid;grid-template-columns:18px minmax(0,1fr);gap:12px;align-items:start;min-height:44px;padding:10px 12px;border-radius:8px;background:var(--rv-base-2);cursor:pointer;transition:background-color var(--rv-d1) var(--rv-ease)}
.rv4-radio label:hover{background:var(--rv-base-3)}.rv4-radio label.on{background:var(--rv-base-1);box-shadow:0 0 0 1.5px var(--rv-select)}
.rv4-radio input{position:absolute;opacity:0;width:0;height:0}
.rv4-radio .dot{width:18px;height:18px;border-radius:50%;margin-top:1px;box-shadow:inset 0 0 0 1.5px var(--rv-ink-4);background:transparent;transition:box-shadow var(--rv-d1) var(--rv-ease)}
.rv4-radio label.on .dot{box-shadow:inset 0 0 0 6px var(--rv-ink)}
.rv4-radio span{display:grid;gap:2px}.rv4-radio span b{font-weight:400;font-size:15px;line-height:1.3}.rv4-radio label.on span b{font-weight:500}.rv4-radio span small{font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3)}
.rv4-radio label:has(input:disabled){opacity:.55;cursor:default}
.rv4-radio label:has(input:focus-visible){box-shadow:0 0 0 1.5px var(--rv-select)}
/* choice cards · one or many · title + description · select ring, no fill */
.rv4-cards{display:grid;gap:8px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}
.rv4-cards button{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;min-height:72px;padding:12px 14px;border:0;border-radius:12px;background:var(--rv-base-2);color:var(--rv-ink);text-align:left;cursor:pointer;font:inherit;transition:background-color var(--rv-d1) var(--rv-ease),box-shadow var(--rv-d1) var(--rv-ease)}
.rv4-cards button:hover{background:var(--rv-base-3)}.rv4-cards button.on{background:var(--rv-base-1);box-shadow:0 0 0 2px var(--rv-select)}
.rv4-cards button:disabled{opacity:.55;cursor:default}
.rv4-cards .t{display:grid;gap:3px;min-width:0}.rv4-cards .t b{font-weight:400;font-size:15px;line-height:1.3}.rv4-cards button.on .t b{font-weight:500}.rv4-cards .t small{font:var(--rv-t-label) var(--rv-font);color:var(--rv-ink-3);text-wrap:pretty}
.rv4-cards .mk{width:18px;height:18px;border-radius:50%;flex:none;margin-top:2px;box-shadow:inset 0 0 0 1.5px var(--rv-ink-4);position:relative}
.rv4-cards button.on .mk{background:var(--rv-ink);box-shadow:none}.rv4-cards button.on .mk::after{content:"";position:absolute;left:5px;top:3px;width:5px;height:9px;border:solid var(--rv-base-1);border-width:0 1.8px 1.8px 0;transform:rotate(45deg)}
.rv4-cards button:focus-visible{outline:0;box-shadow:0 0 0 2px var(--rv-select)}
/* phone: 44 controls, stacked, 17 body */
.rv4-phone .rv4-form,.sh[data-target=ios] .rv4-form{font-size:17px}
.rv4-phone .rv4-frow>label{font-size:15px}.rv4-phone .rv4-fld input,.rv4-phone .rv4-sel select,.rv4-phone .rv4-radio label{min-height:44px}
@media (prefers-reduced-motion:reduce){.rv4-form .ff .busy{animation:none}.rv4-radio label,.rv4-cards button{transition:none}}

/* W5 fix · number suffix is a word: make the well a flex row so the input pads itself off the suffix, no absolute */
.rv4-num .in{display:flex;align-items:center;gap:0;background:var(--rv-base-2);border-radius:8px;transition:background-color var(--rv-d1) var(--rv-ease),box-shadow var(--rv-d1) var(--rv-ease)}
.rv4-num .in:hover{background:var(--rv-base-3)}.rv4-num .in:focus-within{background:var(--rv-base-1);box-shadow:0 0 0 1.5px var(--rv-select)}
.rv4-num .in input{flex:1;min-width:0;background:transparent!important;box-shadow:none!important;padding-right:8px!important;text-align:right}
.rv4-num .in .pre,.rv4-num .in .suf{position:static;flex:none;color:var(--rv-ink-3);font-size:13px;line-height:1;white-space:nowrap}
.rv4-num .in .pre{padding-left:12px}.rv4-num .in .suf{padding-right:12px}
.rv4-num .in:has(.pre) input{padding-left:6px!important}
.rv4-frow.has-err .rv4-num .in{box-shadow:0 0 0 1.5px var(--rv-err);background:var(--rv-base-1)}


/* ═══ W6 · 21 Oct · RvMacWindow — iOS SPEC (macOS) · NavigationSplitView: sidebar · web-view console · native inspector. Toolbar + sidebar = system material (neutral); inspector = content. ═══ */
.rv4-mac{--insp:420px;display:grid;grid-template-rows:auto minmax(0,1fr);width:1440px;height:900px;border-radius:12px;overflow:hidden;background:var(--rv-base-0);color:var(--rv-ink);font:var(--rv-t-label) var(--rv-font);box-shadow:0 0 0 1px var(--rv-rule-strong),0 40px 80px -40px color-mix(in oklab,var(--rv-shade) 60%,transparent);isolation:isolate}
.rv4-mac .mb{display:flex;align-items:center;gap:18px;height:28px;padding:0 14px;background:color-mix(in oklab,var(--rv-base-1) 70%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);font:400 13px/1 var(--rv-font);color:var(--rv-ink-2);box-shadow:0 1px 0 color-mix(in oklab,var(--rv-ink) 8%,transparent)}
.rv4-mac .mb b{width:14px;height:14px;border-radius:4px;background:var(--rv-ink);display:inline-block}.rv4-mac .mb .appn{font-weight:500;color:var(--rv-ink)}.rv4-mac .mb .sp{flex:1}.rv4-mac .mb .st{color:var(--rv-ink-2)}
.rv4-mac .win{display:grid;grid-template-rows:52px minmax(0,1fr);min-height:0}
/* unified title bar · system material · neutral glass (no glow) */
.rv4-mac .tb{display:flex;align-items:center;gap:8px;padding:0 12px 0 14px;background:color-mix(in oklab,var(--rv-base-1) 72%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.5);box-shadow:0 1px 0 color-mix(in oklab,var(--rv-ink) 8%,transparent);z-index:2}
.rv4-mac .lights{display:inline-flex;gap:8px;margin-right:6px}.rv4-mac .lights i{width:12px;height:12px;border-radius:50%;background:var(--rv-base-3);box-shadow:inset 0 0 0 .5px color-mix(in oklab,var(--rv-ink) 14%,transparent)}
.rv4-mac .tb .ic{width:30px;height:30px;display:grid;place-items:center;border:0;border-radius:7px;background:transparent;color:var(--rv-ink-3);cursor:pointer}.rv4-mac .tb .ic:hover{background:color-mix(in oklab,var(--rv-ink) 7%,transparent);color:var(--rv-ink)}.rv4-mac .tb .ic[aria-pressed=true]{color:var(--rv-ink);background:color-mix(in oklab,var(--rv-ink) 8%,transparent)}
.rv4-mac .tb .ic.sm{width:26px;height:26px}.rv4-mac .tb svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.rv4-mac .tb .ttl b{font:500 15px/1 var(--rv-font);letter-spacing:-.01em;margin:0 10px 0 4px;white-space:nowrap}
.rv4-mac .tb .nav{display:flex;align-items:center;gap:4px}.rv4-mac .tb .date{font:500 15px/1 var(--rv-font);letter-spacing:-.01em;padding:0 6px;white-space:nowrap}
.rv4-mac .tb .pill{display:inline-flex;align-items:center;gap:6px;height:30px;padding:0 10px;border:0;border-radius:7px;background:transparent;color:var(--rv-ink-2);font:400 13px/1 var(--rv-font);cursor:pointer}.rv4-mac .tb .pill:hover{background:color-mix(in oklab,var(--rv-ink) 7%,transparent);color:var(--rv-ink)}
.rv4-mac .tb .pill.ink{background:color-mix(in oklab,var(--rv-ink) 72%,transparent);color:var(--rv-base-1);-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px);padding:0 12px 0 10px}.rv4-mac .tb .pill.ink:hover{background:color-mix(in oklab,var(--rv-ink) 84%,transparent)}
.rv4-mac .tb .sp{flex:1}
.rv4-mac .tb .srch{display:flex;align-items:center;gap:8px;width:220px;height:30px;padding:0 8px 0 10px;border-radius:7px;background:color-mix(in oklab,var(--rv-ink) 6%,transparent);color:var(--rv-ink-3)}
.rv4-mac .tb .srch input{flex:1;min-width:0;border:0;background:transparent;color:var(--rv-ink);font:400 13px/1 var(--rv-font);outline:0}.rv4-mac .tb .srch input::placeholder{color:var(--rv-ink-4)}
.rv4-mac .tb kbd,.rv4-mac .tb .sim{font:400 11px/1 var(--rv-font);color:var(--rv-ink-3)}.rv4-mac .tb kbd{padding:2px 5px;border-radius:4px;background:color-mix(in oklab,var(--rv-ink) 7%,transparent)}
.rv4-mac .tb .sim{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 9px;border-radius:999px;box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 10%,transparent);font-size:12px;white-space:nowrap}.rv4-mac .tb .sim i{width:6px;height:6px;border-radius:50%;background:var(--rv-warn)}
/* body · sidebar (rail + column, system material) · console · inspector */
.rv4-mac .body{display:grid;grid-template-columns:auto minmax(0,1fr) auto;min-height:0}
.rv4-mac .sb{display:grid;grid-template-columns:64px 212px;background:color-mix(in oklab,var(--rv-base-1) 66%,transparent);-webkit-backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.4);backdrop-filter:blur(var(--rv-glass-blur)) saturate(1.4);box-shadow:1px 0 0 color-mix(in oklab,var(--rv-ink) 7%,transparent);min-height:0}
.rv4-mac .rail{display:flex;flex-direction:column;gap:2px;padding:8px 6px;min-height:0}.rv4-mac .rail .sp{flex:1}
.rv4-mac .rail button{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;height:54px;border:0;border-radius:8px;background:transparent;color:var(--rv-ink-2);font:400 10px/1 var(--rv-font);letter-spacing:.01em;cursor:pointer;white-space:nowrap}
.rv4-mac .rail button:hover{background:color-mix(in oklab,var(--rv-ink) 6%,transparent)}.rv4-mac .rail button[aria-current]{color:var(--rv-ink);font-weight:500}
.rv4-mac .rail .g{position:relative;width:44px;height:26px;border-radius:13px;display:grid;place-items:center}.rv4-mac .rail button[aria-current] .g{background:var(--rv-ink);color:var(--rv-base-1)}
.rv4-mac .rail svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round}
.rv4-mac .rail em{position:absolute;top:-4px;right:2px;min-width:15px;height:15px;padding:0 4px;border-radius:8px;background:var(--rv-ink);color:var(--rv-base-1);font:500 9.5px/15px var(--rv-font);font-style:normal;text-align:center}
.rv4-mac .col{display:flex;flex-direction:column;gap:2px;padding:10px 8px 10px 4px;min-height:0;overflow:auto}
.rv4-mac .col .h{height:24px;display:flex;align-items:center;padding:0 10px;margin-top:6px;font:500 11px/1 var(--rv-font);letter-spacing:.04em;text-transform:uppercase;color:var(--rv-ink-4)}
.rv4-mac .col label{display:flex;align-items:center;gap:9px;height:30px;padding:0 10px;border-radius:7px;font-size:13px;color:var(--rv-ink);cursor:pointer}.rv4-mac .col label:hover{background:color-mix(in oklab,var(--rv-ink) 6%,transparent)}
.rv4-mac .col label input{width:14px;height:14px;margin:0;accent-color:var(--rv-ink)}
.rv4-mac .col button{display:flex;align-items:center;height:30px;padding:0 10px;border:0;border-radius:7px;background:transparent;color:var(--rv-ink);font:400 13px/1 var(--rv-font);text-align:left;cursor:pointer}.rv4-mac .col button:hover{background:color-mix(in oklab,var(--rv-ink) 6%,transparent)}.rv4-mac .col button[aria-current]{background:color-mix(in oklab,var(--rv-ink) 9%,transparent);font-weight:500}
.rv4-mac .col .sync{margin-top:auto;display:flex;align-items:center;gap:7px;padding:8px 10px 0;font:400 11px/1.3 var(--rv-font);color:var(--rv-ink-3)}.rv4-mac .col .sync i{width:6px;height:6px;border-radius:50%;background:var(--rv-ok);flex:none}
.rv4-mac .sheet{min-width:0;min-height:0;overflow:hidden;background:var(--rv-base-0);position:relative}
/* inspector · native · content, not glass · the RvDrawer grammar */
.rv4-mac .insp{min-height:0;overflow:hidden;background:var(--rv-base-1);box-shadow:-1px 0 0 color-mix(in oklab,var(--rv-ink) 8%,transparent);transition:width var(--rv-d3) var(--rv-ease-out)}
.rv4-mac .insp .rv4-drawer{box-shadow:none;height:100%}
/* the web view's own content: a tag so the spec reads which pixels are web */
.rv4-mac .wv{position:absolute;inset:0;display:flex;flex-direction:column}
.rv4-mac .wv .tag{position:absolute;right:12px;top:10px;z-index:3;font:500 10px/1 var(--rv-font);letter-spacing:.06em;text-transform:uppercase;color:var(--rv-ink-4);padding:4px 7px;border-radius:5px;box-shadow:inset 0 0 0 1px color-mix(in oklab,var(--rv-ink) 10%,transparent)}
@media (prefers-reduced-motion:reduce){.rv4-mac .insp{transition:none}}
