/* ============================================================
   Rivolus — Cobalt Rail design system
   Single source of styling truth. Replaces atlas.css + atlas-ui.css.
   Language: cobalt #2B50D8 sidebar rail, fog ground, white rounded
   cards, pill statuses, soft shadows. Fluid 1366–1920, boxed beyond.
   Prefix: rv-
   ============================================================ */

@font-face{font-family:'Inter';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/inter-400.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/inter-500.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:600;font-display:swap;src:url('../fonts/inter-600.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:700;font-display:swap;src:url('../fonts/inter-700.woff2') format('woff2')}
@font-face{font-family:'Inter';font-style:normal;font-weight:800;font-display:swap;src:url('../fonts/inter-800.woff2') format('woff2')}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:400;font-display:swap;src:url('../fonts/jbmono-400.woff2') format('woff2')}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-weight:500;font-display:swap;src:url('../fonts/jbmono-500.woff2') format('woff2')}

:root{
  /* brand */
  --cobalt:#2B50D8; --cobalt-deep:#1E35AE; --cobalt-hover:#2447C4;
  --cobalt-tint:rgba(43,80,216,0.09); --cobalt-tint-strong:rgba(43,80,216,0.14);
  --ring:rgba(43,80,216,0.22);
  /* ground + ink */
  --void:#EDEFF3;            /* outside the boxed frame */
  --ground:#F7F8FB;          /* page fog */
  --card:#FFFFFF;
  --ink:#0F1730; --slate:#5E6B85; --mute:#8A93A8; --faint:#A8B0C2;
  --line:rgba(15,23,48,0.07); --line-soft:rgba(15,23,48,0.05); --line-faint:rgba(15,23,48,0.04);
  /* status coding (kept) */
  --st-backlog:#9AA3B5; --st-todo:#5E35B1; --st-progress:#2B50D8;
  --st-review:#ED7E16; --st-review-ink:#C26008; --st-done:#3F8A5F; --st-blocked:#C2453A;
  --green:#3F8A5F; --green-bg:rgba(63,138,95,0.10);
  --amber:#9A6F1F; --amber-bg:rgba(194,140,45,0.12);
  --red:#C2453A;   --red-bg:rgba(194,69,58,0.10);
  --slate-bg:rgba(94,107,133,0.10); --neutral-bg:rgba(154,163,181,0.14);
  /* chrome */
  --sans:'Inter',system-ui,sans-serif; --mono:'JetBrains Mono',ui-monospace,monospace;
  /* unified radius: every card, button, input, menu = 12px (pills stay round) */
  --r-card:12px; --r-inner:12px; --r-ctl:12px; --r-pill:999px;
  --shadow-card:0 1px 3px rgba(15,23,48,0.06),0 10px 30px rgba(15,23,48,0.10);
  --e-ctl:0 1px 2px rgba(15,23,48,0.05),0 3px 10px rgba(15,23,48,0.07);
  --shadow-pop:0 8px 18px rgba(15,23,48,0.10),0 24px 64px rgba(15,23,48,0.16);
  --sb-w:248px; --sb-w-collapsed:72px;
}

/* ---- base ---- */
*{margin:0;padding:0;box-sizing:border-box}
html{background:var(--void)}
body{min-height:100vh;background:var(--void);font-family:var(--sans);color:var(--ink);
  -webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;font-synthesis:none}
a{color:inherit;text-decoration:none}
button{font-family:var(--sans)}
::selection{background:var(--cobalt-tint-strong)}
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-thumb{background:rgba(15,23,48,0.14);border-radius:999px;border:2px solid transparent;background-clip:content-box}
::-webkit-scrollbar-track{background:transparent}

/* ============================================================
   APP SHELL — boxed frame, cobalt sidebar, fog content
   ============================================================ */
.rv-app{display:flex;align-items:stretch;width:100%;max-width:1920px;min-width:1366px;
  margin:0 auto;min-height:100vh;background:var(--ground)}
@media (min-width:1921px){.rv-app{box-shadow:0 0 0 1px rgba(15,23,48,0.06),0 24px 80px rgba(15,23,48,0.08)}}

/* ---- sidebar ---- */
/* Geometry is collapse-stable: every left padding is chosen so icons sit exactly at the
   72px-rail center in BOTH states — only the width animates, icons never move or resize. */
.rv-sb{position:sticky;top:0;display:flex;flex-direction:column;flex-shrink:0;width:var(--sb-w);
  height:100vh;padding:18px 14px 16px;background:linear-gradient(180deg,#2B50D8 0%,#1E35AE 100%);
  z-index:60;transition:width .22s cubic-bezier(.4,0,.2,1)}
.rv-sb__ws{display:flex;align-items:center;gap:11px;padding:5px;margin-bottom:11px;min-width:0}
.rv-sb__logo{display:flex;align-items:center;justify-content:center;width:34px;height:34px;
  border-radius:9px;background:#fff;flex-shrink:0}
.rv-sb__logo i{display:block;width:14px;height:14px;border-radius:4px;background:var(--cobalt)}
.rv-sb__wsmeta{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0;overflow:hidden}
.rv-sb__org{font:400 10.5px/13px var(--sans);color:rgba(255,255,255,0.62);white-space:nowrap}
.rv-sb__proj{display:flex;align-items:center;gap:5px;font:600 13.5px/17px var(--sans);color:#fff;white-space:nowrap}
.rv-sb__nav{display:flex;flex-direction:column;gap:4px;padding-top:6px}
.rv-sb__group{display:flex;flex-direction:column;gap:4px;padding-top:18px}
.rv-sb__grouplabel{padding:0 10px 6px;font:600 10px/13px var(--sans);letter-spacing:.1em;color:rgba(255,255,255,0.45);white-space:nowrap;overflow:hidden}
.rv-sb__item{display:flex;align-items:center;gap:11px;height:40px;padding:0 10px 0 14.5px;border-radius:12px;
  color:rgba(255,255,255,0.78);font:500 13px/16px var(--sans);white-space:nowrap;min-width:0;cursor:pointer;overflow:hidden}
.rv-sb__item svg{flex-shrink:0;stroke:rgba(255,255,255,0.66)}
.rv-sb__item:hover{background:rgba(255,255,255,0.08)}
.rv-sb__item.is-active{background:rgba(255,255,255,0.16);color:#fff;font-weight:600}
.rv-sb__item.is-active svg{stroke:#fff}
.rv-sb__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.rv-sb__count{display:inline-flex;align-items:center;justify-content:center;height:18px;padding:0 7px;
  border-radius:var(--r-pill);background:rgba(255,255,255,0.14);font:600 10px/1 var(--sans);color:rgba(255,255,255,0.85)}
.rv-sb__live{display:flex;align-items:center;gap:4px;font:600 10px/1 var(--sans);color:rgba(255,255,255,0.85)}
.rv-sb__live i{width:5px;height:5px;border-radius:50%;background:#7EF0B2}
.rv-sb__hint{font:600 10px/1 var(--sans);color:rgba(255,255,255,0.55)}
.rv-sb__foot{display:flex;flex-direction:column;flex:1;justify-content:flex-end;min-width:0}
.rv-sb__user{padding-top:10px;border-top:1px solid rgba(255,255,255,0.14);min-width:0}
.rv-sb__userbtn{position:relative;display:flex;align-items:center;gap:10px;width:100%;padding:6px 7px;
  border:none;background:none;border-radius:12px;cursor:pointer;min-width:0;text-align:left}
.rv-sb__userbtn:hover{background:rgba(255,255,255,0.08)}
.rv-sb__useravatar{display:flex;align-items:center;justify-content:center;width:30px;height:30px;
  border-radius:50%;background:rgba(255,255,255,0.18);font:600 11px/1 var(--sans);color:#fff;flex-shrink:0}
.rv-sb__usermeta{display:flex;flex-direction:column;flex:1;min-width:0;overflow:hidden}
.rv-sb__username{font:600 12.5px/16px var(--sans);color:#fff;white-space:nowrap}
.rv-sb__userrole{font:400 10.5px/13px var(--sans);color:rgba(255,255,255,0.55);white-space:nowrap}
.rv-sb__gear{flex-shrink:0;display:flex;color:rgba(255,255,255,0.6)}
.rv-sb__gear:hover{color:#fff}

/* edge collapse handle — white grip pill straddling the right border */
.rv-sb__handle{position:absolute;right:-5px;top:50%;transform:translateY(-50%);width:10px;height:46px;
  border-radius:var(--r-pill);background:#fff;border:1px solid rgba(15,23,48,0.10);
  box-shadow:0 2px 8px rgba(15,23,48,0.14);display:flex;align-items:center;justify-content:center;
  cursor:pointer;z-index:61;padding:0}
.rv-sb__handle i{display:block;width:2px;height:18px;border-radius:var(--r-pill);background:var(--faint)}
.rv-sb__handle:hover{border-color:var(--cobalt)}
.rv-sb__handle:hover i{background:var(--cobalt)}

/* collapsed rail — labels fade + clip; layout boxes are untouched so nothing shifts */
.rv-sb__wsmeta,.rv-sb__label,.rv-sb__count,.rv-sb__live,.rv-sb__hint,
.rv-sb__grouplabel,.rv-sb__usermeta,.rv-sb__gear{transition:opacity .16s ease,visibility .16s ease}
body.sb-mini .rv-sb{width:var(--sb-w-collapsed)}
body.sb-mini .rv-sb__wsmeta,body.sb-mini .rv-sb__label,body.sb-mini .rv-sb__count,
body.sb-mini .rv-sb__live,body.sb-mini .rv-sb__hint,body.sb-mini .rv-sb__grouplabel,
body.sb-mini .rv-sb__usermeta,body.sb-mini .rv-sb__gear{opacity:0;visibility:hidden}

/* ---- content column ---- */
.rv-content{display:flex;flex-direction:column;flex:1;min-width:0;padding:22px 32px 28px}
.rv-utility{display:flex;align-items:center;gap:14px}
.rv-crumb{font:400 12px/16px var(--sans);color:var(--mute)}
.rv-crumb b{color:var(--slate);font-weight:500}
.rv-crumb a:hover{color:var(--cobalt)}
.rv-rowlink{cursor:pointer}
.rv-rowlink:hover .rv-row__title{color:var(--cobalt)}
.rv-search{display:flex;align-items:center;gap:8px;width:230px;height:36px;padding:0 13px;
  border-radius:var(--r-ctl);background:var(--card);border:1px solid var(--line);box-shadow:var(--e-ctl)}
.rv-search input{flex:1;min-width:0;border:none;outline:none;background:transparent;
  font:400 12px/16px var(--sans);color:var(--ink)}
.rv-search input::placeholder{color:var(--mute)}
.rv-search kbd{font:500 10px/1 var(--mono);color:var(--faint);background:var(--ground);
  border:1px solid var(--line);border-radius:6px;padding:2px 5px}
.rv-avatars{display:flex;align-items:center}
.rv-avatars .rv-avatar{margin-left:-7px;border:2px solid var(--ground)}
.rv-avatars .rv-avatar:first-child{margin-left:0}
.rv-pagehead{display:flex;align-items:flex-end;gap:14px;padding:22px 0 20px}
.rv-pagehead__text{display:flex;flex-direction:column;gap:3px;min-width:0}
.rv-pagehead__title{display:flex;align-items:center;gap:10px;font:600 26px/32px var(--sans);letter-spacing:-.02em;color:var(--ink)}
/* chips/badges beside a big title scale with it */
.rv-pagehead__title .rv-badge{height:26px;padding:0 13px;font-size:12px}
.rv-pagehead__title .rv-badge .rv-dot{width:7px;height:7px}
.rv-pagehead__title .rv-chip{height:24px;padding:0 11px;font-size:11px}
.rv-pagehead__title .rv-status{height:28px;padding:0 13px;font-size:12px}
.rv-pagehead__meta{font:400 12.5px/17px var(--sans);color:var(--mute)}
.rv-pagehead__actions{display:flex;align-items:center;gap:10px;margin-left:auto;flex-shrink:0}
.rv-page{flex:1;min-height:0;display:flex;flex-direction:column}

/* ============================================================
   COMPONENTS
   ============================================================ */

/* ---- buttons ---- */
.rv-btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:36px;
  padding:0 16px;border-radius:var(--r-ctl);font:600 12.5px/1 var(--sans);border:1px solid transparent;
  cursor:pointer;white-space:nowrap;transition:background .12s,border-color .12s,color .12s}
.rv-btn--primary{background:var(--cobalt);color:#fff;box-shadow:0 1px 2px rgba(43,80,216,0.25)}
.rv-btn--primary:hover{background:var(--cobalt-hover)}
.rv-btn--ghost{background:var(--card);color:var(--slate);border-color:transparent;box-shadow:var(--e-ctl)}
.rv-btn--ghost:hover{background:var(--ground);color:var(--ink)}
.rv-btn--soft{background:var(--cobalt-tint);color:var(--cobalt)}
.rv-btn--soft:hover{background:var(--cobalt-tint-strong)}
.rv-btn--danger{background:var(--red);color:#fff}
.rv-btn--danger:hover{background:#AD3B31}
.rv-btn--danger-soft{background:var(--red-bg);color:var(--red)}
.rv-btn--text{background:transparent;color:var(--mute);padding:0 8px}
.rv-btn--text:hover{color:var(--ink)}
/* size modifiers neutralized: every button is the 36px control height, same as inputs */
.rv-btn--sm{height:36px;padding:0 15px;font-size:12.5px}
.rv-btn--lg{height:36px;padding:0 18px;font-size:12.5px}
.rv-btn--icon{width:36px;padding:0}
.rv-btn--icon.rv-btn--sm{width:36px}
.rv-btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--ring)}

/* ---- inputs ---- */
.rv-input,.rv-textarea{width:100%;height:36px;padding:0 13px;font:400 13px/1.4 var(--sans);
  border:1px solid var(--line);border-radius:var(--r-ctl);background:var(--card);color:var(--ink);outline:none;
  transition:border-color .12s,box-shadow .12s}
.rv-textarea{height:auto;min-height:74px;padding:10px 13px;resize:vertical;line-height:1.55}
.rv-input::placeholder,.rv-textarea::placeholder{color:var(--faint)}
.rv-input:focus,.rv-textarea:focus{border-color:var(--cobalt);box-shadow:0 0 0 3px var(--ring)}
select.rv-input{appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:34px;cursor:pointer;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238A93A8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");
  background-repeat:no-repeat;background-position:right 10px center}
.rv-field{display:flex;flex-direction:column;gap:6px;min-width:0}
.rv-field label,.rv-lbl{font:600 10px/13px var(--sans);letter-spacing:.08em;text-transform:uppercase;color:var(--mute)}
.rv-hint{font:400 11px/15px var(--sans);color:var(--faint)}
.rv-err{background:var(--red-bg);color:var(--red);font:500 12.5px/1.5 var(--sans);
  padding:10px 13px;border-radius:var(--r-ctl);border:1px solid rgba(194,69,58,0.18)}

/* custom checkbox / radio (no native chrome) */
input[type=checkbox],input[type=radio]{appearance:none;-webkit-appearance:none;-moz-appearance:none;
  width:16px;height:16px;flex:0 0 auto;border:1px solid rgba(15,23,48,0.18);background:var(--card);
  cursor:pointer;position:relative;margin:0;vertical-align:middle;transition:background .12s,border-color .12s}
input[type=checkbox]{border-radius:5px}
input[type=radio]{border-radius:50%}
input[type=checkbox]:hover,input[type=radio]:hover{border-color:var(--cobalt)}
input[type=checkbox]:checked,input[type=radio]:checked{background:var(--cobalt);border-color:var(--cobalt)}
input[type=checkbox]:checked::after{content:"";position:absolute;left:4.5px;top:1.5px;width:4px;height:8px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
input[type=radio]:checked::after{content:"";position:absolute;left:4px;top:4px;width:6px;height:6px;border-radius:50%;background:#fff}
input[type=checkbox]:focus-visible,input[type=radio]:focus-visible{outline:none;box-shadow:0 0 0 3px var(--ring)}

/* custom date-picker popover */
.rv-cal{position:absolute;z-index:1200;background:var(--card);border:1px solid var(--line);
  border-radius:var(--r-inner);box-shadow:var(--shadow-pop);padding:12px;font:500 12px/1 var(--sans);color:var(--ink)}
.rv-cal__h{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.rv-cal__h span{font-weight:600}
.rv-cal__h button{width:26px;height:26px;border:none;background:transparent;cursor:pointer;color:var(--mute);border-radius:8px;font-size:16px;line-height:1}
.rv-cal__h button:hover{background:var(--cobalt-tint);color:var(--cobalt)}
.rv-cal__g{display:grid;grid-template-columns:repeat(7,30px);gap:2px}
.rv-cal__dow{display:flex;align-items:center;justify-content:center;height:22px;color:var(--faint);font-size:10px}
.rv-cal__d{height:30px;border:none;background:transparent;cursor:pointer;border-radius:8px;color:var(--ink);font:500 12px/1 var(--sans)}
.rv-cal__d:hover{background:var(--cobalt-tint)}
.rv-cal__d.is-today{box-shadow:inset 0 0 0 1px var(--line);font-weight:600}
.rv-cal__d.is-sel{background:var(--cobalt);color:#fff}
.rv-cal__f{margin-top:8px;text-align:right}
.rv-cal__f button{border:none;background:transparent;color:var(--mute);cursor:pointer;font:500 11px/1 var(--sans)}
.rv-cal__f button:hover{color:var(--ink)}

/* ---- type chips ---- */
.rv-chip{display:inline-flex;align-items:center;height:18px;padding:0 8px;border-radius:var(--r-pill);
  font:600 9.5px/1 var(--sans);letter-spacing:.05em;text-transform:uppercase;white-space:nowrap;flex-shrink:0}
.rv-chip--task{background:var(--cobalt-tint);color:var(--cobalt)}
.rv-chip--bug{background:var(--red-bg);color:var(--red)}
.rv-chip--fix{background:var(--red-bg);color:var(--red)}
.rv-chip--research{background:var(--amber-bg);color:var(--amber)}
.rv-chip--docs{background:var(--slate-bg);color:var(--slate)}
.rv-chip--chore{background:var(--slate-bg);color:var(--slate)}
.rv-chip--spike{background:var(--green-bg);color:var(--green)}

/* ---- status pills (color coding kept) ---- */
.rv-status{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 11px;
  border-radius:var(--r-pill);font:600 11px/1 var(--sans);white-space:nowrap;flex-shrink:0}
.rv-status i{width:6px;height:6px;border-radius:50%;background:currentColor;flex-shrink:0}
.rv-status--backlog{background:var(--neutral-bg);color:#7B8497}
.rv-status--todo{background:rgba(94,53,177,0.11);color:#5E35B1}
.rv-status--in_progress{background:var(--cobalt-tint);color:var(--st-progress)}
.rv-status--in_review{background:rgba(237,126,22,0.13);color:var(--st-review-ink)}
.rv-status--done{background:var(--green-bg);color:var(--st-done)}
.rv-status--blocked{background:var(--red-bg);color:var(--st-blocked)}
.rv-status--cancelled{background:var(--neutral-bg);color:var(--faint)}
.rv-status--sm{height:20px;padding:0 9px;font-size:10px}

/* ---- badges / ribbons ---- */
.rv-badge{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;
  border-radius:var(--r-pill);font:600 10.5px/1 var(--sans);white-space:nowrap}
.rv-badge--success{background:var(--green-bg);color:var(--green)}
.rv-badge--warning{background:var(--amber-bg);color:var(--amber)}
.rv-badge--danger{background:var(--red-bg);color:var(--red)}
.rv-badge--info{background:var(--cobalt-tint);color:var(--cobalt)}
.rv-badge--neutral{background:var(--neutral-bg);color:var(--slate)}
.rv-ribbon{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;
  border-radius:var(--r-pill);font:600 9.5px/1 var(--sans);letter-spacing:.05em;color:#fff}
.rv-ribbon--blocker{background:var(--st-blocked)}
.rv-ribbon--approval{background:var(--st-review)}

/* ---- dots ---- */
.rv-dot{width:6px;height:6px;border-radius:50%;background:var(--mute);flex-shrink:0}
.rv-dot--high{background:var(--red)}
.rv-dot--cobalt{background:var(--cobalt)}
.rv-dot--success{background:var(--green)}
.rv-dot--warning{background:var(--st-review)}

/* ---- cards / panels ---- */
.rv-card{background:var(--card);border:1px solid var(--line-soft);border-radius:var(--r-card);box-shadow:var(--shadow-card)}
.rv-card__head{display:flex;align-items:center;gap:8px;padding:0 18px;min-height:46px;background:var(--cobalt);
  border-radius:12px 12px 0 0;color:#fff}
.rv-card__head .rv-badge{background:rgba(255,255,255,0.18);color:#fff}
.rv-card__head .rv-meta,.rv-card__head .rv-hint{color:rgba(255,255,255,0.75)}
.rv-card__head .rv-tag{background:rgba(255,255,255,0.16);color:#fff}
.rv-card__head svg{stroke:#fff}
/* buttons inside a cobalt head read as translucent-white so white text + the head's white
   icons stay visible (a plain white/ghost button there hides its own white icon). */
.rv-card__head .rv-btn--ghost{background:rgba(255,255,255,0.16);color:#fff;box-shadow:none}
.rv-card__head .rv-btn--ghost:hover{background:rgba(255,255,255,0.26);color:#fff}
.rv-card__body{padding:18px}
.rv-card__title{font:600 13.5px/18px var(--sans);color:inherit}
/* Cobalt-header cards. NON-clipping cards keep a grey body border and let the header bleed
   over the top/side borders (negative margin) for a clean blue cap. CLIPPING cards
   (overflow:hidden tablewrap + panels) can't render a clean two-colour border — a cobalt top
   with grey sides shows a broken corner — so they drop the border entirely and the box-shadow
   frames them while the cobalt head fills the rounded top. */
.rv-card:not(.rv-tablewrap):has(> .rv-card__head){border-top-color:var(--cobalt)}
.rv-card:not(.rv-tablewrap) > .rv-card__head{margin:-1px -1px 0}
.rv-card.rv-tablewrap:has(> .rv-card__head){border:none}
.rv-panel:has(> .rv-panel__h){border:none}
.rv-glass{background:rgba(255,255,255,0.55);border:1px solid rgba(255,255,255,0.7);border-radius:var(--r-card)}

/* ---- avatar ---- */
.rv-avatar{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border-radius:50%;background:var(--cobalt-tint-strong);color:var(--cobalt);font:600 9.5px/1 var(--sans);flex-shrink:0}
.rv-avatar--solid{background:var(--cobalt);color:#fff}
.rv-avatar--sm{width:20px;height:20px;font-size:8px}
.rv-avatar--lg{width:34px;height:34px;font-size:12px}
.rv-avatar--mute{background:var(--neutral-bg);color:var(--slate)}
.rv-avatar--agent{background:var(--green-bg);color:var(--green);border-radius:9px}

/* ---- tables ---- */
.rv-table{width:100%;border-collapse:collapse}
.rv-table th{text-align:left;padding:12px 18px;font:600 10.5px/14px var(--sans);letter-spacing:.07em;
  text-transform:uppercase;color:#6B7490;background:#EAEDF3}
.rv-table td{padding:17px 18px;font:400 13px/1.45 var(--sans);color:var(--ink);
  border-bottom:1px solid var(--line-faint);vertical-align:middle}
.rv-table tr.rv-cols td{padding:9px 18px;font:600 10.5px/14px var(--sans);letter-spacing:.07em;
  text-transform:uppercase;color:#6B7490;background:#EAEDF3}
.rv-table tr:last-child td{border-bottom:none}
.rv-table tbody tr:hover{background:rgba(43,80,216,0.025)}
.rv-tablewrap{overflow:hidden;border-radius:var(--r-card)}

/* ---- list rows ---- */
.rv-row{display:flex;align-items:center;gap:12px;padding:15px 18px;border-top:1px solid var(--line-faint)}
.rv-row:first-child{border-top:none}
.rv-row:hover{background:rgba(43,80,216,0.025)}
.rv-row__title{font:500 13px/17px var(--sans);color:var(--ink)}

/* ---- tags ---- */
.rv-tag{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:var(--r-pill);
  background:var(--cobalt-tint);color:var(--cobalt);font:500 11px/1 var(--sans);white-space:nowrap}
.rv-tag--ghost{background:transparent;border:1px dashed rgba(15,23,48,0.14);color:var(--faint)}
.rv-tag button{border:none;background:none;color:var(--faint);cursor:pointer;font-size:12px;line-height:1;padding:0}
.rv-tag button:hover{color:var(--red)}

/* ---- progress ---- */
.rv-progress{height:5px;border-radius:var(--r-pill);background:rgba(15,23,48,0.06);overflow:hidden;position:relative}
.rv-progress__bar{height:100%;background:var(--cobalt);border-radius:var(--r-pill)}
.rv-progress--thin{height:4px}

/* ---- stats ---- */
.rv-stat{display:flex;flex-direction:column;gap:2px;background:var(--card);border:1px solid var(--line-soft);
  border-radius:var(--r-inner);padding:14px 16px;box-shadow:var(--shadow-card)}
.rv-stat__num{font:600 20px/26px var(--sans);letter-spacing:-.01em;color:var(--ink)}
.rv-stat__label{font:400 11px/15px var(--sans);color:var(--mute)}
.rv-stat--flat{background:transparent;border:none;padding:0}

/* ---- kanban board ---- */
.rv-board{display:flex;gap:16px;flex:1;min-height:0;align-items:stretch;padding-bottom:6px}
.rv-col{display:flex;flex-direction:column;flex:1 1 0;min-width:218px;border-radius:var(--r-card);
  background:rgba(255,255,255,0.62);border:1px solid rgba(255,255,255,0.8);padding:12px;min-height:200px;
  box-shadow:0 1px 2px rgba(15,23,48,0.04),0 12px 28px -10px rgba(15,23,48,0.18)}
.rv-col__head{display:flex;align-items:center;gap:8px;padding:2px 4px 12px;flex-shrink:0}
.rv-col__dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.rv-col__name{font:600 11px/14px var(--sans);letter-spacing:.07em;text-transform:uppercase;color:var(--slate)}
.rv-col__count{font:500 11px/14px var(--sans);color:var(--faint)}
.rv-col__add{margin-left:auto;display:flex;align-items:center;justify-content:center;width:20px;height:20px;
  border:none;border-radius:6px;background:transparent;color:var(--faint);cursor:pointer;font-size:14px}
.rv-col__add:hover{background:rgba(15,23,48,0.05);color:var(--slate)}
/* the list scrolls, so give it inner padding (offset by negative margins) — card shadows
   render inside the scrollport instead of being clipped at the column padding */
.rv-col__list{display:flex;flex-direction:column;gap:10px;overflow-y:auto;flex:1;min-height:40px;
  padding:8px 12px 28px;margin:-8px -12px -12px}
.rv-kcard{background:var(--card);border:1px solid var(--line-soft);border-radius:var(--r-inner);
  padding:13px 14px;display:flex;flex-direction:column;gap:8px;cursor:pointer;
  box-shadow:0 2px 5px rgba(15,23,48,0.06),0 8px 20px rgba(15,23,48,0.07);transition:box-shadow .12s,transform .12s}
.rv-kcard:hover{box-shadow:0 6px 16px -4px rgba(15,23,48,0.15),0 12px 28px -14px rgba(15,23,48,0.22)}
.rv-kcard--blocker:hover{box-shadow:0 0 0 1px rgba(194,69,58,0.12),0 6px 16px -4px rgba(15,23,48,0.15),0 12px 28px -14px rgba(15,23,48,0.22)}
.rv-kcard--blocker{border:1px solid rgba(194,69,58,0.35);box-shadow:0 0 0 1px rgba(194,69,58,0.12),0 2px 5px rgba(15,23,48,0.06),0 8px 20px rgba(15,23,48,0.07)}
.rv-kcard__top{display:flex;align-items:center;gap:7px;min-width:0}
.rv-kcard__code{font:500 10px/13px var(--sans);color:var(--faint);flex-shrink:0}
.rv-kcard__title{font:500 13px/1.4 var(--sans);color:var(--ink)}
.rv-kcard__foot{display:flex;align-items:center;gap:7px;min-width:0;padding-top:2px}
.rv-kcard__edit{display:flex;align-items:center;justify-content:center;width:24px;height:24px;flex-shrink:0;
  border:none;border-radius:8px;background:transparent;color:var(--faint);cursor:pointer;
  opacity:0;transition:opacity .12s,background .12s;margin:-4px -6px -4px 0}
.rv-kcard:hover .rv-kcard__edit{opacity:1}
.rv-kcard__edit:hover{background:var(--cobalt-tint);color:var(--cobalt)}
.rv-kcard__detail{display:none;flex-direction:column;gap:8px;border-top:1px solid var(--line-soft);
  padding-top:10px;margin-top:2px}
.rv-kcard.is-open .rv-kcard__detail{display:flex}
.rv-kcard__desc{font:400 12px/1.55 var(--sans);color:var(--slate);white-space:pre-wrap}
.rv-kcard__meta-row{display:flex;align-items:baseline;gap:8px;font:400 11px/15px var(--sans);color:var(--mute)}
.rv-kcard__meta-row b{font-weight:600;font-size:9.5px;letter-spacing:.07em;text-transform:uppercase;color:var(--faint);width:62px;flex-shrink:0}
.rv-kcard__open{font:600 11.5px/15px var(--sans);color:var(--cobalt);align-self:flex-start}
.rv-kcard__open:hover{text-decoration:underline}
.rv-kcard__meta{font:400 10.5px/14px var(--sans);color:var(--mute)}

/* ---- modal ---- */
.rv-overlay{position:fixed;inset:0;z-index:1000;display:none;align-items:flex-start;justify-content:center;
  background:rgba(15,23,48,0.45);backdrop-filter:blur(3px);padding:7vh 20px 20px;overflow-y:auto}
.rv-modal{width:560px;max-width:100%;background:var(--card);border-radius:var(--r-card);
  box-shadow:var(--shadow-pop)}
.rv-modal__head{display:flex;align-items:center;gap:10px;padding:18px 22px 14px}
.rv-modal__title{font:600 16px/20px var(--sans);letter-spacing:-.01em;color:var(--ink)}
.rv-modal__x{margin-left:auto;display:flex;align-items:center;justify-content:center;width:28px;height:28px;
  border:none;border-radius:8px;background:transparent;color:var(--faint);cursor:pointer;font-size:16px}
.rv-modal__x:hover{background:var(--ground);color:var(--ink)}
.rv-modal__body{padding:4px 22px 20px;display:flex;flex-direction:column;gap:14px}
.rv-modal__foot{display:flex;align-items:center;justify-content:flex-end;gap:10px;
  padding:14px 22px;border-top:1px solid var(--line-soft);background:var(--ground);border-radius:0 0 var(--r-card) var(--r-card)}

/* ---- toast ---- */
.rv-toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:1100;
  background:var(--ink);color:#fff;font:500 12.5px/1 var(--sans);padding:11px 18px;
  border-radius:var(--r-pill);box-shadow:var(--shadow-pop)}

/* ---- tabs ---- */
.rv-tabs{display:flex;align-items:center;gap:4px;height:36px;box-sizing:border-box;background:rgba(15,23,48,0.05);border-radius:var(--r-ctl);padding:3px;width:fit-content;box-shadow:inset 0 1px 2px rgba(15,23,48,0.04)}
.rv-tab{padding:7px 14px;font:500 12px/1 var(--sans);color:var(--mute);border:none;background:transparent;
  border-radius:8px;cursor:pointer}
.rv-tab--active{color:var(--ink);background:var(--card);box-shadow:0 1px 3px rgba(15,23,48,0.08);font-weight:600}

/* ---- misc ---- */
.rv-divider{border:none;border-top:1px solid var(--line-soft);margin:16px 0}
.rv-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  padding:56px 24px;text-align:center}
.rv-empty__title{font:600 14px/18px var(--sans);color:var(--ink)}
.rv-empty__sub{font:400 12.5px/18px var(--sans);color:var(--mute);max-width:380px}
.rv-kbd{display:inline-flex;align-items:center;height:18px;padding:0 5px;border:1px solid var(--line);
  border-radius:6px;background:var(--ground);font:500 10px/1 var(--mono);color:var(--faint)}
.rv-id{font:500 11px/14px var(--sans);color:var(--faint)}
.rv-mono{font-family:var(--mono)}
.rv-meta{font:400 12.5px/17px var(--sans);color:var(--mute)}
.rv-dropzone{display:flex;align-items:center;justify-content:center;gap:7px;padding:13px;
  border:1px dashed rgba(15,23,48,0.12);border-radius:var(--r-ctl);font:500 11.5px/15px var(--sans);
  color:var(--mute);cursor:pointer}
.rv-dropzone:hover{border-color:var(--cobalt);color:var(--cobalt)}
.rv-dropzone b{color:var(--cobalt);font-weight:500}

/* ---- layout utilities ---- */
.rv-grid{display:grid;gap:16px}
.rv-cols-2{grid-template-columns:repeat(2,1fr)}
.rv-cols-3{grid-template-columns:repeat(3,1fr)}
.rv-cols-4{grid-template-columns:repeat(4,1fr)}
.rv-flex{display:flex;align-items:center;gap:8px}
.rv-flex-col{display:flex;flex-direction:column}
.rv-wrap{flex-wrap:wrap}
.rv-spacer{margin-left:auto}
.rv-grow{flex:1;min-width:0}

/* ---- panel kit (admin/detail pages; formerly the plain-layout vocabulary) ---- */
.rv-panel{background:var(--card);border:1px solid var(--line-soft);border-radius:var(--r-card);box-shadow:var(--shadow-card);margin-bottom:18px;overflow:hidden}
.rv-panel__h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:0 18px;min-height:46px;background:var(--cobalt);color:#fff}
.rv-panel__h h2{margin:0;font:600 13.5px/18px var(--sans);color:#fff}
.rv-panel__h .rv-badge{background:rgba(255,255,255,0.18);color:#fff}
.rv-panel__h .rv-meta,.rv-panel__h .rv-muted{color:rgba(255,255,255,0.75)}
.rv-panel__b{padding:18px}
.rv-panel__b > form > .rv-field{margin-bottom:12px}
.rv-in{width:auto;height:36px;padding:0 13px;border:1px solid var(--line);border-radius:var(--r-ctl);font:400 13px/1.2 var(--sans);background:var(--card);color:var(--ink);outline:none;box-sizing:border-box;transition:border-color .12s,box-shadow .12s}
.rv-in:focus{border-color:var(--cobalt);box-shadow:0 0 0 3px var(--ring)}
textarea.rv-in{height:auto;padding:10px 13px;resize:vertical;line-height:1.55;width:100%}
select.rv-in{appearance:none;-webkit-appearance:none;-moz-appearance:none;padding-right:34px;cursor:pointer;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%238A93A8' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'><path d='m6 9 6 6 6-6'/></svg>");background-repeat:no-repeat;background-position:right 10px center}
.rv-row2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
.rv-b{display:inline-flex;align-items:center;justify-content:center;gap:7px;height:36px;padding:0 15px;border-radius:var(--r-ctl);font:600 12.5px/1 var(--sans);border:1px solid transparent;cursor:pointer;text-decoration:none;box-sizing:border-box;transition:background .12s,border-color .12s}
.rv-b--primary{background:var(--cobalt);color:#fff;box-shadow:0 1px 2px rgba(43,80,216,0.25)}
.rv-b--primary:hover{background:var(--cobalt-hover)}
.rv-b--ghost{background:var(--card);color:var(--slate);border-color:transparent;box-shadow:var(--e-ctl)}
.rv-b--ghost:hover{background:var(--ground);color:var(--ink)}
.rv-b--danger{background:var(--red-bg);color:var(--red)}
.rv-b--danger:hover{background:rgba(194,69,58,0.16)}
.rv-b--sm{height:36px;padding:0 15px;font-size:12.5px}
.rv-file{display:inline-flex;align-items:center;gap:10px;cursor:pointer;position:relative;min-width:0;flex:1}
.rv-file input[type=file]{position:absolute;width:1px;height:1px;opacity:0;overflow:hidden}
.rv-file__btn{display:inline-flex;align-items:center;height:36px;padding:0 14px;border:1px solid var(--line);border-radius:var(--r-ctl);background:var(--card);color:var(--ink);font:600 12px/1 var(--sans);white-space:nowrap;flex:0 0 auto}
.rv-file:hover .rv-file__btn{border-color:var(--cobalt);color:var(--cobalt)}
.rv-file__name{font:400 12.5px/17px var(--sans);color:var(--mute);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rv-chiptag{display:inline-flex;align-items:center;gap:6px;background:var(--cobalt-tint);color:var(--cobalt);border-radius:var(--r-pill);padding:4px 11px;font:500 11.5px/1 var(--sans);margin:0 6px 6px 0}
.rv-chiptag form{margin:0;display:inline}
.rv-chiptag button{border:none;background:none;color:var(--faint);cursor:pointer;font-size:13px;line-height:1;padding:0}
.rv-chiptag button:hover{color:var(--red)}
.rv-list-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:13px 0;border-bottom:1px solid var(--line-faint);font:400 13px/1.45 var(--sans)}
.rv-list-row:last-child{border-bottom:none}
.rv-cmt{padding:12px 0;border-bottom:1px solid var(--line-faint)}
.rv-cmt:last-child{border-bottom:none}
.rv-cmt__m{font:500 11.5px/15px var(--sans);color:var(--mute);margin-bottom:3px}
.rv-cmt__b{font:400 13.5px/1.55 var(--sans);white-space:pre-wrap;color:var(--ink)}
.rv-muted{color:var(--mute);font:400 12.5px/17px var(--sans)}
table.rv-tbl{width:100%;border-collapse:collapse;font-size:13px}
table.rv-tbl th{text-align:left;font:600 10.5px/14px var(--sans);letter-spacing:.07em;text-transform:uppercase;color:#6B7490;padding:12px 14px;background:#EAEDF3}
table.rv-tbl td{padding:16px 14px;border-bottom:1px solid var(--line-faint);vertical-align:middle}
table.rv-tbl tr:last-child td{border-bottom:none}

/* ---- custom select chrome (replaces the native dropdown UI everywhere) ---- */
.rv-dd{position:relative;display:flex;min-width:0}
.rv-field .rv-dd,.rv-modal .rv-dd{width:100%}
.rv-dd select{position:absolute!important;width:1px!important;height:1px!important;opacity:0;pointer-events:none;margin:0;padding:0;border:0}
.rv-dd__btn{display:inline-flex;align-items:center;gap:8px;width:100%;height:36px;padding:0 34px 0 13px;
  border:1px solid var(--line);border-radius:var(--r-ctl);background:var(--card);color:var(--ink);
  font:400 13px/1.3 var(--sans);cursor:pointer;white-space:nowrap;overflow:hidden;text-align:left;
  position:relative;box-shadow:var(--e-ctl);transition:border-color .12s,box-shadow .12s}
.rv-dd__btn::after{content:"";position:absolute;right:14px;top:50%;width:7px;height:7px;margin-top:-5px;
  border:solid var(--mute);border-width:0 1.8px 1.8px 0;transform:rotate(45deg)}
.rv-dd__btn > span{overflow:hidden;text-overflow:ellipsis;min-width:0}
.rv-dd.is-open .rv-dd__btn,.rv-dd__btn:focus-visible{border-color:var(--cobalt);box-shadow:0 0 0 3px var(--ring);outline:none}
.rv-dd__menu{position:absolute;top:calc(100% + 5px);left:0;z-index:1300;min-width:100%;max-height:280px;overflow-y:auto;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-inner);box-shadow:var(--shadow-pop);padding:5px;display:none}
.rv-dd.is-open .rv-dd__menu{display:block}
.rv-dd__opt{display:flex;align-items:center;gap:8px;width:100%;padding:8px 11px;border:none;background:transparent;
  border-radius:8px;font:400 12.5px/1.3 var(--sans);color:var(--ink);cursor:pointer;text-align:left;white-space:nowrap}
.rv-dd__opt:hover{background:var(--cobalt-tint)}
.rv-dd__opt.is-sel{background:var(--cobalt-tint);color:var(--cobalt);font-weight:600}

/* ---- filter popover ---- */
.rv-pop{position:relative}
.rv-pop__panel{position:absolute;top:calc(100% + 6px);right:0;z-index:1200;width:264px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-inner);box-shadow:var(--shadow-pop);
  padding:14px;display:none;flex-direction:column;gap:11px}
.rv-pop.is-open .rv-pop__panel{display:flex}
.rv-pop__foot{display:flex;justify-content:space-between;align-items:center;padding-top:2px}
.rv-btn--active{border-color:var(--cobalt);color:var(--cobalt)}

/* ---- sidebar project switcher ---- */
.rv-sb__ws{position:relative;cursor:pointer;border-radius:12px}
.rv-sb__ws:hover{background:rgba(255,255,255,0.08)}
.rv-sb__menu{position:absolute;top:2px;left:calc(100% + 12px);z-index:1300;width:248px;
  background:var(--card);border:1px solid var(--line);border-radius:var(--r-inner);box-shadow:var(--shadow-pop);padding:6px;display:none}
.rv-sb__menu::before{content:"";position:absolute;left:-5px;top:16px;width:9px;height:9px;background:var(--card);
  border-left:1px solid var(--line);border-bottom:1px solid var(--line);transform:rotate(45deg)}
.rv-sb__menu--up{top:auto;bottom:0}
.rv-sb__menu--up::before{top:auto;bottom:16px}
.rv-sb__menuitem--danger{color:var(--red)}
.rv-sb__menu form{margin:0}
[data-rv-flyout].is-open > .rv-sb__menu{display:block}
.rv-sb__menuhead{padding:7px 11px 5px;font:600 10px/13px var(--sans);letter-spacing:.08em;color:var(--faint);text-transform:uppercase;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rv-sb__menuitem{display:flex;align-items:center;gap:8px;width:100%;padding:8px 11px;border:none;background:none;border-radius:8px;
  font:500 12.5px/1.3 var(--sans);color:var(--ink);cursor:pointer;text-align:left;text-decoration:none}
.rv-sb__menuitem:hover{background:var(--cobalt-tint)}
.rv-sb__menuitem i.rv-dot{margin-left:auto}
.rv-sb__menudivider{border-top:1px solid var(--line-soft);margin:5px 4px}

/* ---- plain (auth / onboarding) shell ---- */

.rv-plain{min-height:100vh;display:flex;align-items:flex-start;justify-content:center;
  background:var(--ground);padding:7vh 24px 48px}
.rv-plaincard{width:520px;max-width:100%;background:var(--card);border:1px solid var(--line-soft);
  border-radius:var(--r-card);box-shadow:var(--shadow-card);overflow:hidden}
.rv-plaincard__head{padding:28px 32px 20px;border-bottom:1px solid var(--line-soft)}
.rv-plaincard__body{padding:24px 32px 30px}
.rv-plaincard__foot{padding:14px 32px;border-top:1px solid var(--line-soft);background:var(--ground);
  display:flex;justify-content:space-between;align-items:center}
.rv-brand{display:flex;align-items:center;gap:10px}
.rv-brand__mark{display:flex;align-items:center;justify-content:center;width:34px;height:34px;
  border-radius:9px;background:var(--cobalt)}
.rv-brand__mark i{display:block;width:14px;height:14px;border-radius:4px;background:#fff}
.rv-brand__name{font:700 20px/24px var(--sans);letter-spacing:-.03em;color:var(--ink)}

/* ============================================================
   OPERATOR CONSOLE — god-mode chrome (a.rivolus.io). Reuses the rv-* kit
   but swaps the sidebar to charcoal + a red accent so it's unmistakable.
   ============================================================ */
:root{ --op-ink:#161A22; --op-ink-2:#0E1117; --op-red:#C2453A; --op-red-bg:rgba(194,69,58,0.14); }
body.op .rv-sb{background:linear-gradient(180deg,#1B2030 0%,#0E1117 100%)}
.rv-sb__opbadge{display:inline-flex;align-items:center;gap:5px;height:18px;padding:0 8px;border-radius:999px;
  background:var(--op-red-bg);color:#F0908A;font:700 9px/1 var(--sans);letter-spacing:.1em}
.rv-sb__opbadge i{width:5px;height:5px;border-radius:50%;background:var(--op-red)}
body.op .rv-sb__logo{background:var(--op-red)}
body.op .rv-sb__logo i{background:#fff}
body.op .rv-sb__item.is-active{background:rgba(194,69,58,0.22)}
body.op .rv-sb__item.is-active svg{stroke:#F0908A}

/* operator KPI tiles */
.op-kpi{display:flex;flex-direction:column;gap:3px;background:var(--card);border:1px solid var(--line-soft);
  border-radius:var(--r-card);box-shadow:var(--shadow-card);padding:16px 18px}
.op-kpi__num{font:600 26px/30px var(--sans);letter-spacing:-.02em;color:var(--ink)}
.op-kpi__num.is-warn{color:var(--op-red)}
.op-kpi__label{font:400 11.5px/15px var(--sans);color:var(--mute)}
.op-kpi__sub{font:500 11px/14px var(--sans);color:var(--faint)}

/* status pills for tenant state */
.op-state{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 9px;border-radius:999px;font:600 10.5px/1 var(--sans)}
.op-state--active{background:var(--green-bg);color:var(--green)}
.op-state--suspended{background:var(--op-red-bg);color:var(--op-red)}
.op-state--archived{background:var(--neutral-bg);color:var(--slate)}
.op-plan{display:inline-flex;align-items:center;height:20px;padding:0 9px;border-radius:999px;background:var(--cobalt-tint);color:var(--cobalt);font:600 10px/1 var(--sans);text-transform:uppercase;letter-spacing:.05em}

/* impersonation banner (shown in the tenant app while an operator is impersonating) */
.rv-imp{position:sticky;top:0;z-index:200;display:flex;align-items:center;gap:12px;
  background:var(--op-red);color:#fff;padding:8px 18px;font:600 12.5px/1.3 var(--sans)}
.rv-imp svg{flex-shrink:0}
.rv-imp form{margin:0;margin-left:auto}
.rv-imp button{height:28px;padding:0 13px;border:1px solid rgba(255,255,255,0.5);border-radius:999px;
  background:rgba(255,255,255,0.14);color:#fff;font:600 11.5px/1 var(--sans);cursor:pointer}
.rv-imp button:hover{background:rgba(255,255,255,0.24)}
