/* RELAI app — shares the landing page's design tokens (Enterprise Blue). */
:root{
  /* design system v1 (research/relai-design-system.md §2). No hex literal outside :root — a new colour first becomes a token. */
  /* brand */
  --blue:#2E51C4; --blue-deep:#243F9C; --blue-soft:#EDF0FA; --blue-rgb:46,81,196;
  /* neutrals */
  --navy:#101828; --navy-2:#1D2939; --text:#101828; --text-2:#475467;
  --text-3:#667085;      /* secondary text that passes AA (4.8:1 on white) */
  --muted:#98A2B3;       /* icons, disabled, placeholders ONLY — fails AA as text */
  --bg:#fff; --bg-alt:#F8FAFD; --bg-tint:#F2F4FB;
  --border:#E4EAF2; --border-soft:#EEF2F7; --border-strong:#D0D9E6; --border-blue:#C7D0EE;
  /* status: fg = text/icon, bg = soft fill, bd = border */
  --ok:#16A36A;     --ok-fg:#0E7A4F;     --ok-bg:#E8F7F0;     --ok-bd:#BFE8D3;
  --warn:#D97706;   --warn-fg:#B45309;   --warn-bg:#FEF6E7;   --warn-bd:#F3D9B1;
  --danger:#DC3545; --danger-fg:#B42318; --danger-bg:#FEF3F4; --danger-bd:#F3C4C9;
  --info-fg:var(--blue-deep); --info-bg:var(--bg-tint); --info-bd:var(--border-blue);
  --violet:#8B5CF6; --sky:#0EA5E9;   /* chart / milestone accents only */
  /* type scale (auth/landing keep their own display sizes) */
  --fs-2xs:11px;   /* micro marks inside 18–20px badges only */
  --fs-xs:12px; --fs-sm:13px; --fs-md:14px; --fs-lg:16px; --fs-xl:20px; --fs-2xl:24px;
  /* spacing (4-pt) */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:20px; --s6:24px; --s8:32px; --s12:48px;
  /* radius */
  --r-sm:4px; --r:6px; --r-lg:10px; --r-xl:14px;
  /* shadow */
  --sh-card:0 1px 2px rgba(16,24,40,.04);
  --sh-pop:0 4px 16px rgba(16,24,40,.08), 0 0 0 1px rgba(16,24,40,.04);
  --sh-lift:0 16px 48px rgba(16,24,40,.12);
  /* density: compact (grids) by default; .page--guide = comfortable */
  --ctl-h:32px; --row-h:36px;
}
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:#fff;color:var(--text);
  font-family:"Pretendard Variable",Pretendard,Inter,-apple-system,BlinkMacSystemFont,system-ui,sans-serif;
  font-size:var(--fs-md);line-height:1.6;letter-spacing:-0.01em;-webkit-font-smoothing:antialiased;
  word-break:keep-all;overflow-wrap:break-word}
a{color:inherit;text-decoration:none}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--blue);outline-offset:2px;border-radius:var(--r-sm)}
h1,h2,h3{margin:0;font-weight:800;letter-spacing:-0.035em;line-height:1.25;color:var(--navy);text-wrap:balance}
p{margin:0}
[hidden]{display:none!important}

.logo{font-size:var(--fs-2xl);font-weight:800;letter-spacing:-0.05em;color:var(--navy)}

/* buttons (same shape as landing) */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--ctl-h);padding:0 12px;
  border-radius:var(--r);border:1px solid transparent;font-size:var(--fs-sm);font-weight:600;cursor:pointer;
  transition:background .16s,border-color .16s;white-space:nowrap}
.btn--primary{background:var(--blue);color:#fff}
.btn--primary:hover{background:var(--blue-deep)}
.btn--secondary{background:#fff;color:var(--navy);border-color:var(--border-strong)}
.btn--secondary:hover{background:var(--bg-alt)}
.btn--danger{background:#fff;color:var(--danger);border-color:var(--danger-bd)}
.btn--danger:hover{background:var(--danger-bg)}
.btn--lg{height:40px;padding:0 16px;font-size:var(--fs-md)}
.btn--sm{height:28px;padding:0 10px;font-size:var(--fs-sm)}
.btn--xs{height:24px;padding:0 8px;font-size:var(--fs-xs);min-width:26px}
.btn--block{width:100%}
.btn[disabled]{opacity:.6;cursor:default}
.link{color:var(--blue-deep);font-weight:600}
.link:hover{text-decoration:underline}

/* forms */
.field{margin-bottom:20px}
.field>label,.field>.lbl{display:block;font-size:var(--fs-md);font-weight:600;color:var(--navy);margin-bottom:8px}
.field .hint{font-size:var(--fs-sm);color:var(--text-3);margin-top:6px}
.req{color:var(--blue)}
.input,.select,.textarea{width:100%;height:var(--ctl-h);padding:0 10px;background:#fff;border:1px solid var(--border-strong);border-radius:var(--r);
  font-size:var(--fs-sm);transition:border-color .15s,box-shadow .15s}
.textarea{height:auto;min-height:72px;padding:7px 10px;resize:vertical;line-height:1.5}
.input--sm,.select--sm{height:28px;font-size:var(--fs-sm);padding:0 8px}
.select--sm{padding-right:24px}
.select--xs{height:24px;font-size:var(--fs-xs)}
.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(var(--blue-rgb),.12)}
.is-invalid{border-color:var(--danger)!important}
.err{font-size:var(--fs-sm);color:var(--danger);margin-top:6px}
.form-err{background:var(--danger-bg);border:1px solid var(--danger-bd);color:var(--danger-fg);border-radius:var(--r-lg);padding:11px 14px;font-size:var(--fs-md);margin-bottom:18px}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.choices{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:10px}
.choice{position:relative}
.choice input{position:absolute;opacity:0;inset:0;cursor:pointer}
.choice span{display:flex;align-items:center;min-height:46px;padding:0 14px;border:1px solid var(--border-strong);border-radius:var(--r-lg);
  font-size:var(--fs-md);font-weight:500;color:var(--text-2);background:#fff;transition:border-color .15s,background .15s}
.choice input:checked+span{border-color:var(--blue);background:var(--bg-tint);color:var(--blue-deep);font-weight:600}
.choice input:focus-visible+span{outline:2px solid var(--blue);outline-offset:2px}

/* auth screens */
.auth{min-height:100vh;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.05fr)}
.auth__form{display:flex;flex-direction:column;justify-content:center;padding:48px 24px;max-width:440px;width:100%;margin:0 auto}
.auth__form .logo{margin-bottom:40px;display:inline-block}
.auth__form h1{font-size:28px;margin-bottom:8px}
.auth__form .sub{color:var(--text-2);margin-bottom:32px}
.auth__alt{margin-top:24px;font-size:14px;color:var(--text-2);text-align:center}
.auth__side{background:var(--bg-alt);border-left:1px solid var(--border-soft);display:flex;align-items:center;padding:64px}
.auth__side blockquote{margin:0;max-width:440px}
.auth__side h2{font-size:30px;line-height:1.3;margin-bottom:20px}
.auth__side p{color:var(--text-2);font-size:16px;line-height:1.75}
.auth__phases{display:flex;flex-wrap:wrap;gap:7px;margin-top:28px}
.auth__phases span{font-size:13px;font-weight:600;color:var(--text-2);background:#fff;border:1px solid var(--border);border-radius:999px;padding:5px 13px}
.auth__phases span:first-child{border-color:var(--border-blue);background:var(--bg-tint);color:var(--blue-deep)}

/* app shell */
.shell{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh}
.side{position:sticky;top:0;height:100vh;display:flex;flex-direction:column;padding:20px 14px;border-right:1px solid var(--border-soft);background:#fff}
.side .logo{padding:0 10px;margin-bottom:28px;display:block}
.side nav{display:flex;flex-direction:column;gap:2px}
.navlink{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--r-lg);font-weight:500;color:var(--text-2)}
.navlink:hover{background:var(--bg-alt);color:var(--navy)}
.navlink.is-active{background:var(--bg-tint);color:var(--blue-deep);font-weight:600}
.navlink svg{width:18px;height:18px;flex:none}
.side__bottom{margin-top:auto;border-top:1px solid var(--border-soft);padding-top:12px;display:flex;flex-direction:column;gap:2px}
.me{display:flex;align-items:center;gap:10px;padding:10px;min-width:0}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--bg-tint);color:var(--blue-deep);font-weight:700;
  display:flex;align-items:center;justify-content:center;flex:none;font-size:var(--fs-md)}
.me b{display:block;font-size:var(--fs-md);color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.me small{display:block;font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.linkbtn{background:none;border:0;cursor:pointer;text-align:left;width:100%}
.topbar{display:none}
.main{min-width:0;background:var(--bg-alt)}
.page{max-width:960px;margin:0 auto;padding:44px 40px 80px}
.page--narrow{max-width:720px}
.page__head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:32px;flex-wrap:wrap}
.page__head h1{font-size:var(--fs-2xl)}
.page__head p{color:var(--text-2);margin-top:6px}
.crumb{font-size:var(--fs-sm);color:var(--text-3);margin-bottom:10px;display:block}
.crumb:hover{color:var(--navy)}

/* surfaces */
.panel{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-card)}
.panel__h{padding:16px 22px;border-bottom:1px solid var(--border-soft);font-weight:700;color:var(--navy);display:flex;align-items:center;justify-content:space-between;gap:12px}
.panel__b{padding:22px}
.form-panel{padding:32px}

/* project list */
.plist{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.prow{display:grid;grid-template-columns:minmax(0,2fr) .9fr 1fr 1.2fr 1.3fr;gap:16px;align-items:center;padding:18px 22px;border-top:1px solid var(--border-soft)}
.prow:first-child{border-top:0}
a.prow:hover{background:var(--bg-alt)}
.prow--head{padding:12px 22px;font-size:var(--fs-sm);font-weight:600;color:var(--text-3);background:#fff}
.prow .nm{font-weight:700;color:var(--navy);letter-spacing:-0.02em}
.prow .sub{font-size:var(--fs-sm);color:var(--text-2);margin-top:2px}
.prow .cell-l{display:none}
.chip{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:999px;font-size:var(--fs-xs);font-weight:600;background:var(--border-soft);color:var(--text-2)}
.chip--active{background:var(--bg-tint);color:var(--blue-deep)}
.chip--hold{background:var(--warn-bg);color:var(--warn-fg)}
.chip--done{background:var(--ok-bg);color:var(--ok-fg)}
.toolbar{display:flex;justify-content:flex-end;margin-bottom:14px}
.toggle{font-size:var(--fs-md);color:var(--text-2);display:inline-flex;align-items:center;gap:8px;cursor:pointer}

/* empty state */
.empty{background:#fff;border:1px dashed var(--border-strong);border-radius:var(--r-lg);text-align:center;padding:48px 20px}
.empty h2{font-size:var(--fs-xl);margin-bottom:6px}
.empty p{color:var(--text-2);max-width:40ch;margin:0 auto 18px}

/* progress bars */
.pbar{height:6px;border-radius:999px;background:var(--border-soft);overflow:hidden;min-width:60px}
.pbar i{display:block;height:100%;background:var(--blue);border-radius:999px;transition:width .5s cubic-bezier(.22,1,.36,1)}
.pbar--lg{height:8px;margin:14px 0 26px}
.pcell{display:flex;align-items:center;gap:10px;font-size:var(--fs-sm);color:var(--text-2);font-variant-numeric:tabular-nums}
.pcell .pbar{flex:1}

/* project head */
.meta{display:flex;flex-wrap:wrap;gap:6px 18px;color:var(--text-2);font-size:var(--fs-md);margin-top:10px;align-items:center}
.meta span+span::before{content:"";display:inline-block;width:1px;height:12px;background:var(--border);margin-right:18px;vertical-align:-1px}
.overall{min-width:180px;text-align:right}
.overall b{display:block;font-size:var(--fs-2xl);font-weight:800;letter-spacing:-0.04em;color:var(--navy);line-height:1}
.overall span{display:block;font-size:var(--fs-sm);color:var(--text-3);margin:4px 0 8px}
.notice{background:var(--bg-tint);border:1px solid var(--border-blue);color:var(--blue-deep);border-radius:var(--r-lg);padding:11px 14px;font-size:var(--fs-md);margin-bottom:18px}

/* 7-phase flow strip */
.flow{display:flex;align-items:center;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:6px;margin-bottom:20px;overflow-x:auto}
.flow__item{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;min-width:0;padding:10px 8px;border-radius:var(--r-lg);font-size:var(--fs-sm);font-weight:500;color:var(--text-3);white-space:nowrap;position:relative}
.flow__item i{width:22px;height:22px;border-radius:50%;border:1.5px solid var(--border);font-size:var(--fs-2xs);font-weight:700;font-style:normal;display:flex;align-items:center;justify-content:center;flex:none;background:#fff}
.flow__item:hover{background:var(--bg-alt);color:var(--navy)}
.flow__item.is-done{color:var(--text-2)}
.flow__item.is-done i{background:var(--ok);border-color:var(--ok);color:#fff}
.flow__item.is-open i{border-color:var(--warn);color:var(--warn)}
.flow__item.is-current{background:var(--bg-tint);color:var(--blue-deep);font-weight:700}
.flow__item.is-current i{background:var(--blue);border-color:var(--blue);color:#fff}
.flow__item+.flow__item::before{content:"";position:absolute;left:-1px;top:30%;height:40%;width:1px;background:var(--border-soft)}

/* guide (overview) */
.guide{position:relative;overflow:hidden;border-color:var(--border-blue);box-shadow:0 0 0 3px rgba(var(--blue-rgb),.05)}
.guide::before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:var(--blue)}
.guide__top{display:flex;justify-content:space-between;align-items:center;padding:18px 28px 0;font-size:var(--fs-sm);font-weight:600;color:var(--blue-deep)}
.guide__top em{font-style:normal;color:var(--text-2);font-weight:600;font-variant-numeric:tabular-nums}
.guide__body{padding:8px 28px 28px}
.guide h2{font-size:var(--fs-2xl);margin-bottom:8px;display:flex;align-items:baseline;gap:10px}
.guide h2 small{font-size:var(--fs-md);font-weight:700;color:var(--blue);letter-spacing:.02em}
.guide__desc{color:var(--text-2);max-width:62ch}
.guide__h{font-size:var(--fs-sm);font-weight:700;color:var(--text-3);letter-spacing:.06em;text-transform:uppercase;margin-bottom:12px}
.done-note{display:flex;flex-direction:column;gap:4px;padding:18px 20px;background:var(--ok-bg);border:1px solid var(--ok-bd);border-radius:var(--r-lg);color:var(--ok-fg)}
.done-note b{color:var(--ok-fg)}
.done-note span{font-size:var(--fs-md);color:var(--ok-fg)}
.hist{list-style:none;margin:0;padding:0}
.hist li{display:flex;gap:14px;padding:8px 0;border-top:1px solid var(--border-soft);font-size:var(--fs-md);color:var(--text-2)}
.hist li:first-child{border-top:0;padding-top:0}
.hist time{color:var(--text-3);font-variant-numeric:tabular-nums;flex:none;width:40px}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin-top:20px}
dl.info{margin:0;display:grid;grid-template-columns:110px 1fr;gap:12px 16px}
dl.info dt{color:var(--text-3);font-size:var(--fs-md)}
dl.info dd{margin:0;color:var(--navy);font-weight:500;white-space:pre-wrap}
.actions{display:flex;gap:10px;flex-wrap:wrap;margin-top:20px}
.actions--end{justify-content:flex-end}
.dlist{margin:0 0 14px;padding-left:18px;color:var(--navy);font-weight:600}
.dlist li{margin:4px 0}
.dialog__b{color:var(--text-2);margin-bottom:24px;line-height:1.65}

/* phase detail */
.phase__h{display:flex;justify-content:space-between;gap:24px;padding:26px 28px 22px;border-bottom:1px solid var(--border-soft)}
.phase__k{display:flex;align-items:center;gap:10px;margin-bottom:8px}
.phase__k span{font-size:var(--fs-sm);font-weight:700;color:var(--blue);letter-spacing:.04em}
.phase__h h2{font-size:var(--fs-2xl);margin-bottom:8px}
.phase__h p{color:var(--text-2);max-width:60ch}
.phase__p{text-align:right;min-width:150px;flex:none}
.phase__p b{display:block;font-size:var(--fs-2xl);font-weight:800;color:var(--navy);letter-spacing:-0.03em;line-height:1;font-variant-numeric:tabular-nums}
.phase__p span{display:block;font-size:var(--fs-sm);color:var(--text-3);margin:4px 0 8px}
.phase__bar{display:flex;justify-content:space-between;align-items:center;gap:14px;padding:12px 28px;background:var(--bg-alt);border-bottom:1px solid var(--border-soft);font-size:var(--fs-md);color:var(--text-2)}
.phase__bar b{color:var(--navy)}
.phase__bar--now{background:var(--bg-tint);color:var(--blue-deep)}
.phase__bar--now b{color:var(--blue-deep)}
.phase__bar--done{background:var(--ok-bg);color:var(--ok-fg)}
.phase__bar--done b{color:var(--ok-fg)}
.checklist{list-style:none;margin:0;padding:8px 0}
.step+.step{border-top:1px solid var(--border-soft)}
.step__row{display:flex;align-items:center;gap:14px;width:100%;padding:16px 28px;background:none;border:0;cursor:pointer;text-align:left}
.step__row:hover{background:var(--bg-alt)}
.step__mark{width:26px;height:26px;border-radius:50%;border:1.5px solid var(--border-strong);font-size:var(--fs-xs);font-weight:700;font-style:normal;color:var(--text-2);display:flex;align-items:center;justify-content:center;flex:none;background:#fff}
.step.is-done .step__mark{background:var(--ok);border-color:var(--ok);color:#fff}
.step__title{font-weight:600;color:var(--navy);font-size:var(--fs-lg)}
.step.is-done .step__title{color:var(--text-2);font-weight:500}
.step__noteflag{font-size:var(--fs-xs);font-weight:600;color:var(--text-3);border:1px solid var(--border);border-radius:var(--r-sm);padding:1px 6px}
.step__state{margin-left:auto;font-size:var(--fs-sm);font-weight:600;color:var(--blue-deep);white-space:nowrap}
.step.is-done .step__state{color:var(--ok)}
.step.is-open{background:#fff}
.step.is-open .step__row{background:var(--bg-tint)}
.step__detail{padding:20px 28px 26px 68px;border-top:1px dashed var(--border-soft)}
.step__cols{display:grid;grid-template-columns:1fr 1fr;gap:20px}
.step__cols h4{margin:0 0 6px;font-size:var(--fs-sm);font-weight:700;color:var(--text-3);letter-spacing:.04em}
.step__cols p{color:var(--navy);line-height:1.65}
.step__detail .textarea{min-height:88px}

/* modal */
.scrim{position:fixed;inset:0;background:rgba(16,24,40,.45);display:flex;align-items:center;justify-content:center;padding:20px;z-index:100}
.dialog{background:#fff;border-radius:var(--r-xl);max-width:460px;width:100%;padding:24px;box-shadow:var(--sh-lift)}
.dialog h3{font-size:var(--fs-lg);margin-bottom:10px}
.dialog__b{margin-bottom:16px}
.dialog p{color:var(--text-2);margin-bottom:24px}
.dialog .actions{justify-content:flex-end;margin-top:0}

.toast{position:fixed;left:50%;bottom:28px;transform:translateX(-50%);background:var(--navy);color:#fff;padding:12px 20px;border-radius:var(--r-lg);font-size:var(--fs-md);z-index:120}
.loading{padding:80px 0;text-align:center;color:var(--text-3)}

@media (max-width:900px){
  .auth{grid-template-columns:1fr}
  .auth__side{display:none}
  .shell{grid-template-columns:1fr}
  .side{position:fixed;inset:0 auto 0 0;width:260px;z-index:90;transform:translateX(-100%);transition:transform .2s;box-shadow:var(--sh-lift)}
  .side.is-open{transform:none}
  .topbar{display:flex;align-items:center;justify-content:space-between;height:56px;padding:0 16px;background:#fff;border-bottom:1px solid var(--border-soft);position:sticky;top:0;z-index:50}
  .topbar button{width:40px;height:40px;border:1px solid var(--border);background:#fff;border-radius:var(--r-lg);cursor:pointer;font-size:var(--fs-xl)}
  .page{padding:28px 16px 64px}
  .form-panel{padding:22px 18px}
  .row2,.grid2{grid-template-columns:1fr}
  .prow--head{display:none}
  .prow{grid-template-columns:1fr 1fr;gap:10px 16px}
  .prow>:first-child{grid-column:1/-1}
  .prow .cell-l{display:block;font-size:var(--fs-xs);color:var(--text-3)}
  dl.info{grid-template-columns:90px 1fr}
  .prow{grid-template-columns:1fr 1fr}
  .overall{min-width:0;text-align:left;width:100%}
  .flow__item span{display:none}
  .flow__item.is-current span{display:inline}
  .guide__top,.guide__body,.phase__h,.phase__bar,.step__row{padding-left:18px;padding-right:18px}
  .phase__h{flex-direction:column}
  .phase__p{text-align:left}
  .step__detail{padding:16px 18px 20px}
}

/* ---------- Phase 3: project sub-nav, requirements ---------- */
.page--wide{max-width:1240px}
.subnav{display:flex;gap:4px;border-bottom:1px solid var(--border);margin:-12px 0 22px}
.subnav a{padding:10px 14px;font-weight:600;color:var(--text-2);border-bottom:2px solid transparent;margin-bottom:-1px;display:inline-flex;align-items:center;gap:8px}
.subnav a:hover{color:var(--navy)}
.subnav a.is-active{color:var(--blue-deep);border-color:var(--blue)}
.subnav em{font-style:normal;font-size:var(--fs-xs);font-weight:700;background:var(--border-soft);color:var(--text-2);border-radius:999px;padding:1px 7px}
.subnav a.is-active em{background:var(--bg-tint);color:var(--blue-deep)}
.datastat{display:flex;justify-content:space-between;align-items:center;gap:14px;margin-top:16px;padding:12px 14px;background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-lg);font-size:var(--fs-md);color:var(--blue-deep);font-weight:600}
.datastat.is-ok{background:var(--ok-bg);border-color:var(--ok-bd);color:var(--ok-fg)}
.chip--muted{background:var(--border-soft);color:var(--text-3)}

.summary{display:grid;grid-template-columns:repeat(5,1fr);background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);margin-bottom:16px;overflow:hidden}
.summary>div{padding:14px 20px;border-left:1px solid var(--border-soft)}
.summary>div:first-child{border-left:0}
.summary b{display:block;font-size:var(--fs-2xl);font-weight:800;color:var(--navy);letter-spacing:-0.03em;line-height:1.1;font-variant-numeric:tabular-nums}
.summary span{font-size:var(--fs-sm);color:var(--text-3)}

.rtool{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-bottom:12px}
.rtool__sp{flex:1}
.input--sm,.select--sm{height:36px;font-size:var(--fs-sm);padding:0 10px;width:auto}
.rtool #q{width:220px}
.select--sm{padding-right:26px}

.rlayout{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start}
.rlayout.has-drawer{grid-template-columns:minmax(0,1fr) 420px}
.rtable-wrap{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);overflow:auto}
.rtable{width:100%;border-collapse:collapse;font-size:var(--fs-md)}
.rtable th{text-align:left;font-size:var(--fs-xs);font-weight:600;color:var(--text-3);padding:10px 14px;border-bottom:1px solid var(--border-soft);white-space:nowrap;background:#fff;position:sticky;top:0}
.rtable td{padding:11px 14px;border-top:1px solid var(--border-soft);vertical-align:middle;white-space:nowrap}
.rtable tbody tr{cursor:pointer}
.rtable tbody tr:hover{background:var(--bg-alt)}
.rtable tr.is-sel{background:var(--bg-tint)}
.rtable tr.is-arch td{color:var(--text-3)}
.rtable td.ttl{white-space:normal;min-width:220px;max-width:420px;font-weight:600;color:var(--navy)}
.rtable td.ttl span{display:inline;overflow-wrap:anywhere}
.rtable td.ttl small{margin-left:8px;font-size:var(--fs-2xs);font-weight:600;color:var(--text-3);border:1px solid var(--border);border-radius:var(--r-sm);padding:1px 5px;vertical-align:1px}
.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-sm);color:var(--text-2);letter-spacing:0}
.dim{color:var(--text-3)}
.prio{font-weight:600}
.prio--high{color:var(--navy);font-weight:700}.prio--medium{color:var(--text-2)}.prio--low{color:var(--text-3);font-weight:500}
.rlayout.has-drawer .rtable th:nth-child(n+7),.rlayout.has-drawer .rtable td:nth-child(n+7){display:none}
.empty--sm{padding:44px 24px}

.drawer{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);position:sticky;top:24px;max-height:calc(100vh - 48px);display:flex;flex-direction:column;overflow:hidden}
.drawer__h{display:flex;align-items:center;gap:10px;padding:14px 18px;border-bottom:1px solid var(--border-soft);font-size:var(--fs-md)}
.drawer__h b{font-size:var(--fs-md)}
.drawer__x{margin-left:auto;background:none;border:0;font-size:var(--fs-2xl);line-height:1;color:var(--text-3);cursor:pointer;padding:2px 6px;border-radius:var(--r)}
.drawer__x:hover{background:var(--bg-alt);color:var(--navy)}
.drawer__b{padding:18px;overflow-y:auto;flex:1}
.drawer__f{display:flex;gap:10px;align-items:center;justify-content:space-between;padding:12px 18px;border-top:1px solid var(--border-soft);background:#fff}
.dtitle{width:100%;font-size:var(--fs-xl);font-weight:700;color:var(--navy);border:1px solid transparent;border-radius:var(--r);padding:6px 8px;margin:-6px -8px 6px;letter-spacing:-0.02em}
.dtitle:hover:not(:disabled){border-color:var(--border)}
.dtitle:focus{outline:none;border-color:var(--blue);box-shadow:0 0 0 3px rgba(var(--blue-rgb),.12)}
.ddesc{min-height:76px;font-size:var(--fs-md);margin-bottom:14px}
.dgrid{display:grid;grid-template-columns:1fr 1fr;gap:10px 14px}
.dfield>span{display:block;font-size:var(--fs-xs);font-weight:600;color:var(--text-3);margin-bottom:4px}
.dfield .select--sm,.dfield .input--sm{width:100%}
.dsave{min-height:18px;font-size:var(--fs-sm);color:var(--text-3);margin-top:8px}
.dh{margin:22px 0 10px;font-size:var(--fs-sm);font-weight:700;color:var(--text-3);letter-spacing:.06em;text-transform:uppercase;display:flex;gap:8px;align-items:center}
.dh em{font-style:normal;font-weight:700;color:var(--text-2)}
.crit{list-style:none;margin:0 0 10px;padding:0}
.crit li{display:flex;align-items:center;gap:8px;padding:4px 0}
.crit__n{width:20px;height:20px;border-radius:50%;background:var(--border-soft);color:var(--text-2);font-size:var(--fs-2xs);font-weight:700;display:flex;align-items:center;justify-content:center;flex:none}
.crit__in{flex:1;min-width:0;border:1px solid transparent;border-radius:var(--r);padding:6px 8px;font-size:var(--fs-md);color:var(--navy);background:transparent}
.crit__in:hover:not(:disabled){border-color:var(--border)}
.crit__in:focus{outline:none;border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px rgba(var(--blue-rgb),.12)}
.crit__act{display:flex;gap:2px;opacity:0;transition:opacity .12s}
.crit li:hover .crit__act,.crit li:focus-within .crit__act{opacity:1}
.crit__act button{width:26px;height:26px;border:1px solid var(--border);background:#fff;border-radius:var(--r);color:var(--text-2);cursor:pointer;font-size:var(--fs-sm)}
.crit__act button:hover:not(:disabled){background:var(--bg-alt);color:var(--navy)}
.crit__act button:disabled{opacity:.35;cursor:default}
.crit-add{display:flex;gap:8px}
.crit-add .input--sm{flex:1;width:auto}
.crit-pending{display:flex;align-items:center;gap:8px;padding:6px 0;font-size:var(--fs-md);color:var(--navy)}
.crit-pending span:nth-child(2){flex:1}
.crit-pending button{border:0;background:none;color:var(--text-3);cursor:pointer;font-size:var(--fs-lg)}
.hist q{quotes:none;color:var(--navy);font-style:normal}
.hist q::before{content:"“"}.hist q::after{content:"”"}
.hist small{color:var(--text-3);margin-left:6px}
.hist b{color:var(--navy);font-weight:600}

@media (max-width:1100px){.rlayout.has-drawer{grid-template-columns:minmax(0,1fr) 360px}}
@media (max-width:900px){
  .summary{grid-template-columns:repeat(5,1fr)}
  .summary>div{padding:10px 10px}
  .summary b{font-size:var(--fs-xl)}
  .rtool #q{width:100%}
  .rlayout.has-drawer{grid-template-columns:1fr}
  .rlayout.has-drawer .rtable-wrap{display:none}
  .drawer{position:static;max-height:none}
  .dgrid{grid-template-columns:1fr}
  .datastat{flex-direction:column;align-items:flex-start}
}

/* ---------- Phase 4: WBS ---------- */
.metrics{display:flex;gap:28px}
.summary--4{grid-template-columns:repeat(4,1fr)}
.seg{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--r-lg);overflow:hidden;background:#fff}
.seg button{height:36px;padding:0 14px;border:0;background:#fff;font-size:var(--fs-sm);font-weight:600;color:var(--text-2);cursor:pointer}
.seg button+button{border-left:1px solid var(--border-soft)}
.seg button.is-on{background:var(--bg-tint);color:var(--blue-deep)}
.choices--3{grid-template-columns:repeat(3,1fr)}
.rtable.wbs td{white-space:nowrap}
.rtable.wbs td.ttl{min-width:260px;max-width:none;white-space:nowrap}
.rtable.wbs tr.is-sum td{background:var(--bg-alt)}
.rtable.wbs tr.is-sum td.ttl .wsum{font-weight:700}
.rtable.wbs tr.is-sel td{background:var(--bg-tint)}
.wcode{width:64px;min-width:64px}
.wprog{width:150px}
.wtitle{display:flex;align-items:center;gap:6px;font-weight:500;color:var(--navy)}
.wtog{width:18px;height:18px;border:0;background:none;color:var(--text-3);cursor:pointer;font-size:var(--fs-xs);padding:0;flex:none;border-radius:var(--r-sm)}
.wtog:hover{background:var(--border-soft);color:var(--navy)}
.wtog--none{display:inline-block}
.wms{font-style:normal;color:var(--navy);font-size:var(--fs-2xs);flex:none}
.wdep{font-size:var(--fs-2xs);font-weight:600;color:var(--text-3);border:1px solid var(--border);border-radius:var(--r-sm);padding:0 5px;margin-left:4px}

/* Gantt */
.gantt{display:grid;grid-template-columns:340px minmax(0,1fr);min-height:200px}
.gantt__left{border-right:1px solid var(--border);background:#fff;z-index:2}
.gantt__hdr{display:flex;height:28px;align-items:center;font-size:var(--fs-xs);font-weight:600;color:var(--text-3);border-bottom:1px solid var(--border-soft);white-space:nowrap}
.gantt__left .gantt__hdr{height:56px;padding:0 12px;gap:12px}
.gantt__left .gantt__hdr span:first-child{width:52px}
.gantt__hdr--m span{display:inline-block;border-left:1px solid var(--border-soft);padding-left:6px;color:var(--text-2);height:100%;line-height:28px;overflow:hidden}
.gantt__hdr--w span{display:inline-block;border-left:1px solid var(--border-soft);padding-left:4px;height:100%;line-height:28px;font-weight:500}
.gantt__row{height:38px;display:flex;align-items:center;border-bottom:1px solid var(--border-soft);position:relative;cursor:pointer;font-size:var(--fs-md)}
.gantt__left .gantt__row{padding:0 12px;gap:12px;white-space:nowrap;overflow:hidden}
.gantt__left .gantt__row.is-sum{background:var(--bg-alt)}
.gantt__left .gantt__row .wcode{width:52px;min-width:52px}
.gantt__row.is-sel{background:var(--bg-tint)}
.gantt__row:hover{background:var(--bg-alt)}
.gantt__scroll{overflow-x:auto;overflow-y:hidden}
.gantt__right{position:relative;min-width:100%}
.gantt__body{position:relative;background-image:linear-gradient(90deg,var(--border-soft) 1px,transparent 1px)}
.gantt__today{position:absolute;top:0;bottom:0;width:0;border-left:2px dashed var(--blue);z-index:1;pointer-events:none}
.gantt__today em{position:absolute;top:-22px;left:-16px;font-size:var(--fs-2xs);font-style:normal;font-weight:700;color:var(--blue);background:#fff;padding:0 4px;border-radius:var(--r-sm)}
.gbar{position:absolute;top:10px;height:18px;border-radius:var(--r);background:var(--border-blue);overflow:hidden;display:block}
.gbar span{display:block;height:100%;background:var(--blue);border-radius:var(--r) 0 0 var(--r)}
.gbar--sum{top:14px;height:10px;background:var(--border-strong);border-radius:var(--r-sm)}
.gbar--sum span{background:var(--navy-2)}
.gbar.is-done{background:var(--ok-bd)}.gbar.is-done span{background:var(--ok)}
.gms{position:absolute;top:50%;width:12px;height:12px;background:var(--navy);transform:translate(-50%,-50%) rotate(45deg);border-radius:var(--r-sm)}
.gms.is-done{background:var(--ok)}
.glab{position:absolute;top:50%;transform:translateY(-50%);font-size:var(--fs-xs);font-weight:600;color:var(--text-2);white-space:nowrap}
.glab--none{left:8px;color:var(--text-3);font-weight:500}

@media (max-width:900px){
  .metrics{gap:16px;width:100%}
  .summary--4{grid-template-columns:repeat(4,1fr)}
  .gantt{grid-template-columns:200px minmax(0,1fr)}
  .rlayout.has-drawer .wbs-wrap{display:none}
}

/* ---------- Phase 5: traceability ---------- */
.summary--9{grid-template-columns:repeat(8,1fr)}
.summary__sep{border-left:2px solid var(--border)!important}
.summary span small{font-size:var(--fs-2xs);color:var(--text-3)}
.rtable th.num,.rtable td.num{text-align:right;font-variant-numeric:tabular-nums}
.rtable--trace td.ttl{min-width:280px}
.select--xs{height:28px;font-size:var(--fs-sm);padding:0 22px 0 8px;width:auto}
.links li{gap:10px}
.empty-inline{display:flex;flex-direction:column;gap:3px;padding:12px 14px;background:var(--bg-alt);border:1px dashed var(--border-strong);border-radius:var(--r-lg);font-size:var(--fs-sm);color:var(--text-2)}
.empty-inline b{color:var(--navy)}
.datastat--trace{margin-top:8px;background:#fff;border-color:var(--border);color:var(--text-2)}
.dialog--wide{max-width:680px}
.dialog--wide h3{margin-bottom:14px}
.pick-list{margin:12px 0 16px;max-height:min(46vh,420px);overflow-y:auto;border:1px solid var(--border);border-radius:var(--r-lg)}
.pick{display:flex;align-items:center;gap:10px;padding:9px 12px;border-top:1px solid var(--border-soft);cursor:pointer;font-size:var(--fs-md);color:var(--navy)}
.pick:first-child{border-top:0}
.pick:hover{background:var(--bg-alt)}
.pick.is-sel{background:var(--bg-tint)}
.pick.is-disabled{opacity:.5;cursor:default}
.pick input{margin:0;flex:none}
.pick__t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pick small{flex:none}
@media (max-width:900px){
  .summary--9{grid-template-columns:repeat(4,1fr)}
  .summary__sep{border-left:0!important}
  .pick small{display:none}
}

/* ---------- Phase 6: change requests ---------- */
.summary--6{grid-template-columns:repeat(6,1fr)}
.rlayout--cr.has-drawer{grid-template-columns:minmax(0,1fr) 520px}
.rlayout--cr.has-drawer .rtable th:nth-child(n+5),.rlayout--cr.has-drawer .rtable td:nth-child(n+5){display:none}
.rtable--cr td.ttl{min-width:220px}
.impact{display:grid;grid-template-columns:repeat(5,1fr);background:var(--bg-alt);border:1px solid var(--border-soft);border-radius:var(--r-lg);margin-bottom:12px}
.impact>div{padding:10px 12px;border-left:1px solid var(--border-soft)}
.impact>div:first-child{border-left:0}
.impact b{display:block;font-size:var(--fs-lg);font-weight:800;color:var(--navy);letter-spacing:-0.02em;line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap}
.impact span{font-size:var(--fs-xs);color:var(--text-3)}
.dgrid--3{grid-template-columns:repeat(3,1fr)}
.decision{margin:10px 0 14px;padding:12px 14px;border-radius:var(--r-lg);background:var(--bg-alt);border:1px solid var(--border-soft);font-size:var(--fs-md);color:var(--text-2);display:flex;flex-direction:column;gap:10px}
.decision p{margin:0}.decision b{color:var(--navy)}
.decision q{quotes:none;color:var(--navy)}.decision q::before{content:"“"}.decision q::after{content:"”"}
.decision--review{background:var(--bg-tint);border-color:var(--border-blue)}
.decision--ok{background:var(--ok-bg);border-color:var(--ok-bd)}
.decision--no{background:var(--danger-bg);border-color:var(--danger-bd)}
.cand{border:1px dashed var(--border-blue);background:var(--bg-tint);border-radius:var(--r-lg);padding:10px 12px;margin-bottom:10px}
.cand__h{font-size:var(--fs-sm);font-weight:600;color:var(--blue-deep);margin-bottom:6px}
.cand__row{display:flex;align-items:center;gap:8px;padding:5px 0;font-size:var(--fs-md);color:var(--navy)}
.impacts li{flex-wrap:wrap}
.imp-note{flex-basis:100%;margin:2px 0 4px 30px;border:1px solid transparent;border-radius:var(--r);padding:4px 8px;font-size:var(--fs-sm);color:var(--text-2);background:transparent}
.imp-note:hover:not(:disabled){border-color:var(--border)}
.imp-note:focus{outline:none;border-color:var(--blue);background:#fff;box-shadow:0 0 0 3px rgba(var(--blue-rgb),.12)}
.cm .panel__h{justify-content:space-between}
.cm__b{display:grid;grid-template-columns:repeat(4,1fr);gap:0;padding:0}
.cm__b>*{padding:16px 22px;border-left:1px solid var(--border-soft);display:block}
.cm__b>*:first-child{border-left:0}
.cm__b a:hover{background:var(--bg-alt)}
.cm__b b{display:block;font-size:var(--fs-2xl);font-weight:800;color:var(--navy);letter-spacing:-0.03em;line-height:1.1}
.cm__b span{font-size:var(--fs-sm);color:var(--text-3)}
.cm{margin-top:20px}
.cm--focus{border-color:var(--border-blue)}
@media (max-width:900px){
  .summary--6{grid-template-columns:repeat(3,1fr)}
  .rlayout--cr.has-drawer{grid-template-columns:1fr}
  .impact{grid-template-columns:repeat(3,1fr)}
  .impact>div:nth-child(4){border-left:0}
  .dgrid--3{grid-template-columns:1fr}
  .cm__b{grid-template-columns:repeat(2,1fr)}
  .cm__b>*:nth-child(3){border-left:0}
}

/* ---------- Phase 7: issues & risks ---------- */
.summary--5{grid-template-columns:repeat(5,1fr)}
.summary>div.is-crit b{color:var(--danger-fg)}
.summary>div.is-warn b{color:var(--warn-fg)}
.seg--lg button{height:40px;padding:0 18px;font-size:var(--fs-md);display:inline-flex;align-items:center;gap:8px}
.seg--lg em{font-style:normal;font-size:var(--fs-xs);font-weight:700;background:var(--border-soft);color:var(--text-2);border-radius:999px;padding:1px 7px}
.seg--lg button.is-on em{background:#fff;color:var(--blue-deep)}
.sev{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:600;color:var(--text-2);white-space:nowrap}
.sev::before{content:"";width:8px;height:8px;border-radius:50%;background:var(--border-strong);flex:none}
.sev--low::before{background:var(--border-strong)}
.sev--medium::before{background:var(--muted)}
.sev--high{color:var(--navy)}.sev--high::before{background:var(--navy)}
.sev--critical{color:var(--danger-fg);font-weight:700}.sev--critical::before{background:var(--danger)}
.rtable--raid td.ttl{min-width:220px}
.rtable td.is-overdue{color:var(--warn-fg);font-weight:600}
.over{font-size:var(--fs-2xs);font-weight:700;color:var(--warn-fg);border:1px solid var(--warn-bd);background:var(--warn-bg);border-radius:var(--r-sm);padding:0 5px;vertical-align:1px}
.subnav em.is-crit{background:var(--danger-bg);color:var(--danger-fg)}
.crit-tag{font-style:normal;font-size:var(--fs-2xs);font-weight:700;color:var(--danger-fg);margin-left:4px}
.cm--crit{border-color:var(--danger-bd)}
.srcline{font-size:var(--fs-sm);color:var(--text-2);margin:-2px 0 10px}
.raidline{display:flex;gap:16px;margin:8px 0 0;font-size:var(--fs-sm)}
.raidline a{color:var(--text-2)}.raidline a:hover{color:var(--navy)}.raidline b{color:var(--navy)}
.raidrow{display:flex;align-items:center;gap:8px;flex:1;min-width:0}
.raidrow:hover .crit__in{color:var(--blue-deep)}
.matrix{display:flex;align-items:flex-end;gap:10px;margin-bottom:12px;padding:12px 14px;background:var(--bg-alt);border:1px solid var(--border-soft);border-radius:var(--r-lg)}
.matrix>div{flex:1}
.matrix>div>span{display:block;font-size:var(--fs-xs);font-weight:600;color:var(--text-3);margin-bottom:4px}
.matrix__x{color:var(--text-3);font-weight:700;padding-bottom:10px}
@media (max-width:900px){
  .summary--5{grid-template-columns:repeat(5,1fr)}
  .matrix{flex-wrap:wrap}
}

/* ---------- Phase 8: Tests & Acceptance ---------- */
.res{display:inline-flex;align-items:center;height:22px;padding:0 9px;border-radius:999px;font-size:var(--fs-xs);font-weight:700;letter-spacing:.02em}
.res--pass{background:var(--ok-bg);color:var(--ok-fg)}.res--fail{background:var(--danger-bg);color:var(--danger-fg)}.res--blocked{background:var(--warn-bg);color:var(--warn-fg)}.res--not_run{background:var(--border-soft);color:var(--text-3)}
.pr{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:var(--r);font-size:var(--fs-xs);font-weight:700;border:1px solid var(--border)}
.pr--high{color:var(--danger-fg);border-color:var(--danger-bd);background:var(--danger-bg)}.pr--medium{color:var(--text-2)}.pr--low{color:var(--text-3)}
.chip--fail{background:var(--danger-bg);color:var(--danger-fg)}
.rtable tr.is-untested td.ttl{color:var(--text-2)}
.rtable tr[data-req]{cursor:pointer}
.steps{list-style:none;margin:0 0 8px;padding:0;display:flex;flex-direction:column;gap:6px}
.steps li{display:flex;align-items:flex-start;gap:8px}
.steps__n{flex:none;width:22px;height:22px;border-radius:50%;background:var(--bg-tint);color:var(--blue-deep);font-size:var(--fs-xs);font-weight:700;display:inline-flex;align-items:center;justify-content:center;margin-top:7px}
.steps__in{flex:1;display:flex;flex-direction:column;gap:4px;min-width:0}
.steps__in .input--sm{width:100%}
.steps__in [data-se]{font-size:var(--fs-sm);color:var(--text-2)}
.steps .crit__act{margin-top:7px}
.exec{list-style:none;margin:0 0 6px;padding:0;display:flex;flex-direction:column;gap:6px}
.exec__i{border:1px solid var(--border-soft);border-radius:var(--r-lg);background:#fff}
.exec--fail{border-color:var(--danger-bd)}.exec--pass{border-color:var(--ok-bd)}
.exec summary{display:flex;align-items:center;gap:10px;padding:8px 12px;cursor:pointer;font-size:var(--fs-sm);list-style:none}
.exec summary::-webkit-details-marker{display:none}
.exec summary::before{content:"▸";color:var(--text-3);font-size:var(--fs-2xs)}
.exec details[open] summary::before{content:"▾"}
.exec__n{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:700;color:var(--navy)}
.exec__who{color:var(--text-2);flex:1}
.exec time{color:var(--text-3);font-variant-numeric:tabular-nums}
.exec summary .chip{height:22px;font-size:var(--fs-xs);text-decoration:none}
.exec__b{padding:0 12px 10px 30px;font-size:var(--fs-sm);color:var(--text-2)}
.exec__b p{margin:4px 0;white-space:pre-wrap}.exec__b b{display:block;font-size:var(--fs-xs);color:var(--text-3);text-transform:uppercase;letter-spacing:.05em}
.resq{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.resq__o{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-lg);cursor:pointer;position:relative}
.resq__o input{position:absolute;opacity:0}
.resq__o b{font-size:var(--fs-md)}.resq__o small{font-size:var(--fs-xs);color:var(--text-3);line-height:1.3}
.resq__o:has(input:checked){border-width:2px;padding:9px 11px}
.resq--pass:has(input:checked){border-color:var(--ok-fg);background:var(--ok-bg)}.resq--pass b{color:var(--ok-fg)}
.resq--fail:has(input:checked){border-color:var(--danger-fg);background:var(--danger-bg)}.resq--fail b{color:var(--danger-fg)}
.resq--blocked:has(input:checked){border-color:var(--warn-fg);background:var(--warn-bg)}.resq--blocked b{color:var(--warn-fg)}
.warn-inline{color:var(--danger-fg);font-weight:600}
.cm__b b small{font-size:var(--fs-sm);color:var(--text-3);font-weight:600;margin-left:2px}
.crit li.is-arch .raidrow{opacity:.55}

/* ---------- Stabilization: design tokens & shared components ---------- */
.dim{color:var(--text-3)}
.lbl-sub{font-size:var(--fs-sm);color:var(--text-2);border:1px solid var(--border);border-radius:var(--r-sm);padding:0 6px;line-height:20px;white-space:nowrap}
.chip--warn{background:var(--warn-bg);color:var(--warn-fg)}
/* project header: 4 KPIs */
.page__head--project{align-items:flex-start;gap:20px}
.meta__phase{display:inline-flex;gap:6px;align-items:center}.meta__phase b{color:var(--blue-deep)}
.kpis{display:grid;grid-template-columns:repeat(4,minmax(120px,1fr));gap:10px;min-width:520px}
.kpi{padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff}
.kpi b{display:block;font-size:var(--fs-2xl);font-weight:800;letter-spacing:-0.03em;color:var(--navy);line-height:1.1;font-variant-numeric:tabular-nums}
.kpi span{display:block;font-size:var(--fs-xs);color:var(--text-3);margin:2px 0 6px;white-space:nowrap}
.kpi .pbar{height:4px}
/* grouped sub navigation (E) */
.subnav{gap:0;overflow-x:auto;scrollbar-width:none;-webkit-overflow-scrolling:touch}
.subnav::-webkit-scrollbar{display:none}
.subnav__g{display:flex;align-items:flex-end;gap:2px;padding-right:18px;margin-right:6px;border-right:1px solid var(--border-soft);position:relative;flex:none}
.subnav__g:last-child{border-right:0}
.subnav__l{position:absolute;top:-10px;left:14px;font-size:var(--fs-2xs);font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--text-3)}
.subnav a{white-space:nowrap}
.subnav em.is-warn{background:var(--warn-bg);color:var(--warn-fg)}
/* attention (F-3) */
.att{margin-top:20px}
.att--crit{border-color:var(--danger-bd)}
.att__n{font-style:normal;font-size:var(--fs-xs);font-weight:700;background:var(--danger-bg);color:var(--danger-fg);border-radius:999px;padding:1px 8px;margin-left:8px}
.att__list{list-style:none;margin:0;padding:0}
.att__list li+li{border-top:1px solid var(--border-soft)}
.att__list a{display:grid;grid-template-columns:10px auto minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:10px 20px;font-size:var(--fs-md)}
.att__list a:hover{background:var(--bg-alt)}
.att__dot{width:8px;height:8px;border-radius:50%;background:var(--warn)}.att__dot.is-crit{background:var(--danger)}
.att__t{font-weight:600;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.att__list small{color:var(--text-3);white-space:nowrap}
.att__k{font-size:var(--fs-xs);font-weight:700;color:var(--text-2);background:var(--border-soft);border-radius:var(--r);padding:1px 7px}
.att__ok{padding:16px 20px;font-size:var(--fs-md);color:var(--text-2)}
/* per-area summary (F-4) */
.areas{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-top:16px}
.area{display:block;padding:12px 14px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff}
.area:hover{border-color:var(--border-blue)}
.area.is-warn{border-color:var(--warn-bd)}.area.is-crit{border-color:var(--danger-bd)}
.area__l{display:block;font-size:var(--fs-xs);font-weight:700;color:var(--text-3);margin-bottom:6px}
.area__v{display:flex;gap:14px}
.area__v b{display:block;font-size:var(--fs-xl);font-weight:800;color:var(--navy);line-height:1.1;font-variant-numeric:tabular-nums}
.area__v span{font-size:var(--fs-xs);color:var(--text-3)}
/* applied filters (O) */
.applied{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:-4px 0 12px}
.fchip{display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 6px 0 10px;border-radius:999px;background:var(--bg-tint);color:var(--blue-deep);font-size:var(--fs-sm)}
.fchip b{font-weight:700}
.fchip button{border:0;background:none;color:inherit;cursor:pointer;font-size:var(--fs-md);line-height:1;padding:0 4px;border-radius:50%}
.fchip button:hover{background:#fff}
/* delivery trace strip (I) */
.trace{margin:14px 0 4px;border:1px solid var(--border-blue);background:var(--bg-tint);border-radius:var(--r-lg);padding:10px 12px}
.trace__t{font-size:var(--fs-2xs);font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--blue-deep);margin-bottom:8px}
.trace__g{display:grid;grid-template-columns:repeat(auto-fit,minmax(78px,1fr));gap:6px}
.trace__i{display:block;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:8px 10px;min-width:0}
a.trace__i:hover{border-color:var(--blue)}
.trace__i b{display:block;font-size:var(--fs-xl);font-weight:800;color:var(--navy);line-height:1.1;font-variant-numeric:tabular-nums}
.trace__i span{display:block;font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap}
.trace__i small{display:block;font-size:var(--fs-xs);color:var(--text-2);margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trace__i.is-crit b{color:var(--danger-fg)}.trace__i.is-warn b{color:var(--warn-fg)}.trace__i.is-ok b{color:var(--ok-fg)}
.trace__i.is-muted b{color:var(--text-3)}
.trace--compact{margin-top:10px}.trace--compact .trace__i b{font-size:var(--fs-lg)}
/* drawer section heading right slot */
.dh__r{margin-left:auto;font-weight:600;text-transform:none;letter-spacing:0}
/* CR context banner (B-2) */
.ctx{display:flex;align-items:center;gap:10px;padding:10px 14px;border-radius:var(--r-lg);background:var(--bg-tint);border:1px solid var(--border-blue);font-size:var(--fs-sm);color:var(--text-2);margin-bottom:12px}
.ctx b{color:var(--blue-deep)}.ctx .linkbtn{margin-left:auto;width:auto;color:var(--text-3)}
.hist .src{display:block;margin-top:2px;font-size:var(--fs-sm);color:var(--text-2)}.hist .src a{color:var(--blue-deep);font-weight:600}
/* tables (K): consistent heights & secondary text */
.rtable th{height:40px}
.rtable td{height:46px}
.rtable td.dim,.rtable .dim{color:var(--text-3)}
.rtable td.mono{font-size:var(--fs-sm);color:var(--text-2)}
.rtable td.ttl small{color:var(--text-3)}
/* mobile (N) */
@media (max-width:900px){
  .page__head--project{flex-direction:column}
  .kpis{min-width:0;width:100%;grid-template-columns:repeat(2,1fr)}
  .subnav{margin-top:0;padding-top:12px}
  .subnav__l{top:-2px}
  .subnav__g{padding-right:10px}
  .summary,.summary--4,.summary--5,.summary--6,.summary--9{grid-template-columns:repeat(2,1fr)}
  .summary>div{border-top:1px solid var(--border-soft)}
  .summary>div:nth-child(-n+2){border-top:0}
  .summary>div:nth-child(odd){border-left:0}
  .areas{grid-template-columns:repeat(2,1fr)}
  .att__list a{grid-template-columns:10px auto minmax(0,1fr);row-gap:2px}
  .att__list small,.att__k{grid-column:2/-1}
  .rtool{gap:6px}.rtool .select--sm{max-width:48%}
  .trace__g{grid-template-columns:repeat(3,1fr)}
  .drawer__b{padding:16px}
}
@media (max-width:480px){
  .page{padding:20px 12px 56px}
  .kpi b{font-size:var(--fs-xl)}
  .trace__g{grid-template-columns:repeat(2,1fr)}
  .rtool #q{width:100%}
  .rtool .select--sm{max-width:100%;flex:1 1 45%}
}
/* fixes after visual review */
.page__head--project{flex-wrap:nowrap}
.page__head--project>div:first-child{min-width:0;flex:1}
.kpis{flex:none}
.subnav{padding-top:14px;margin-top:-4px}
.subnav__l{top:0}
@media (max-width:1200px){.page__head--project{flex-wrap:wrap}.kpis{width:100%;min-width:0}}
.trace__g{grid-template-columns:repeat(auto-fit,minmax(64px,1fr))}
.trace__i{padding:8px 8px}
.trace__i b.is-text{font-size:var(--fs-sm);line-height:1.3;padding:3px 0}
.trace__i small{white-space:normal;line-height:1.3}
.decision__targets{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center}
.decision__targets>span{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);letter-spacing:.04em;text-transform:uppercase}
.decision__targets a{color:var(--text-2)}.decision__targets a:hover{color:var(--navy)}.decision__targets a b{color:var(--navy)}
@media (max-width:900px){.att__list a{grid-template-columns:10px auto minmax(0,1fr) auto}.att__list small{grid-column:2/4}.att__k{grid-row:1/3;align-self:center}}

/* Overview "지금 해야 할 일": title | description | CTA. Description keeps a real minimum width; CTA wraps below on narrow screens. */
.nowl{list-style:none;margin:0;padding:0;border:1px solid var(--border-soft);border-radius:var(--r-lg);overflow:hidden}
.nowl__row{display:grid;grid-template-columns:minmax(180px,.7fr) minmax(280px,1.6fr) auto;gap:6px 24px;align-items:center;padding:14px 18px}
.nowl__row+.nowl__row{border-top:1px solid var(--border-soft)}
.nowl__row:hover{background:var(--bg-alt)}
.nowl__t{font-weight:700;color:var(--navy);display:flex;align-items:center;gap:10px;line-height:1.35;word-break:keep-all;overflow-wrap:break-word}
.nowl__t::before{content:"";width:16px;height:16px;border:1.5px solid var(--border-strong);border-radius:var(--r-sm);flex:none}
.nowl__c{font-size:var(--fs-sm);line-height:1.45;color:var(--text-2);min-width:0;word-break:keep-all;overflow-wrap:break-word}
.nowl__trace{display:block;margin-top:4px;font-size:var(--fs-sm);color:var(--blue-deep);font-weight:600}
.nowl__trace:hover{text-decoration:underline}
.nowl__go{font-size:var(--fs-sm);font-weight:600;color:var(--blue-deep);white-space:nowrap;padding:5px 10px;border-radius:var(--r);border:1px solid var(--border-blue);background:#fff}
.nowl__go:hover{background:var(--bg-tint)}
@media (max-width:1100px){.nowl__row{grid-template-columns:minmax(160px,.6fr) minmax(0,1.6fr)}.nowl__go{grid-column:2;justify-self:start}}
@media (max-width:700px){.nowl__row{grid-template-columns:minmax(0,1fr);padding:14px}.nowl__go{grid-column:auto}.nowl__c{padding-left:26px}}

/* Gantt toolbar */
.gtools{display:inline-flex;gap:6px}
.gantt__hdr--w span{overflow:hidden;white-space:nowrap}
@media (max-width:480px){.gantt{grid-template-columns:140px minmax(0,1fr)}}

/* ===== Phase 9: Project Control Center ===== */
/* Health status roles: green / orange / red / gray — the only places red appears are CRITICAL states. */
:root{--h-good:var(--ok-fg);--h-good-bg:var(--ok-bg);--h-warn:var(--warn-fg);--h-warn-bg:var(--warn-bg);--h-crit:var(--danger-fg);--h-crit-bg:var(--danger-bg);--h-unk:var(--text-3);--h-unk-bg:var(--border-soft)}
.hchip{display:inline-flex;align-items:center;height:26px;padding:0 12px;border-radius:999px;font-size:var(--fs-sm);font-weight:700;background:var(--h-unk-bg);color:var(--h-unk)}
.hchip--sm{height:22px;padding:0 9px;font-size:var(--fs-xs)}
.hchip.is-good{background:var(--h-good-bg);color:var(--h-good)}.hchip.is-warn{background:var(--h-warn-bg);color:var(--h-warn)}.hchip.is-crit{background:var(--h-crit-bg);color:var(--h-crit)}
.health{margin-top:20px;border-left:4px solid var(--h-unk)}
.health.is-good{border-left-color:var(--h-good)}.health.is-warn{border-left-color:var(--h-warn)}.health.is-crit{border-left-color:var(--h-crit)}
.health__top{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--border-soft)}
.health__partial{font-size:var(--fs-sm);color:var(--text-3)}
.health__dims{display:grid;grid-template-columns:repeat(5,1fr)}
.hdim{border-right:1px solid var(--border-soft);min-width:0}
.hdim:last-child{border-right:0}
.hdim summary{list-style:none;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:12px 16px;cursor:pointer;font-size:var(--fs-sm);font-weight:600;color:var(--navy)}
.hdim summary::-webkit-details-marker{display:none}
.hdim summary:hover{background:var(--bg-alt)}
.hdim[open] summary{background:var(--bg-alt)}
.hdim__r{margin:0;padding:4px 16px 12px 32px;font-size:var(--fs-sm);color:var(--text-2);line-height:1.5}
.hdim__hint{color:var(--text-3);list-style:none;margin-left:-16px;padding-top:4px}
@media (max-width:1100px){.health__dims{grid-template-columns:repeat(3,1fr)}.hdim:nth-child(3n){border-right:0}.hdim:nth-child(-n+3){border-bottom:1px solid var(--border-soft)}}
@media (max-width:767px){.health__dims{grid-template-columns:1fr 1fr}.hdim{border-right:0;border-bottom:1px solid var(--border-soft)}.hdim:nth-child(odd){border-right:1px solid var(--border-soft)}.hdim:nth-last-child(-n+1){border-bottom:0}}

/* Compact sub-screen header (§33) */
.page__head--project.is-compact{align-items:center;gap:16px}
.page__head--project.is-compact h1{font-size:var(--fs-2xl)}
.kpis--line{display:flex;gap:4px 18px;min-width:0;flex-wrap:wrap;padding:8px 14px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff;font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap}
.kpis--line span{display:inline-flex;align-items:baseline;gap:6px}
.kpis--line b{font-size:var(--fs-lg);font-weight:800;color:var(--navy);font-variant-numeric:tabular-nums;letter-spacing:-0.02em}
.kpis--line:hover{border-color:var(--border-blue)}
@media (max-width:1200px){.page__head--project.is-compact .kpis--line{width:auto}}
@media (max-width:767px){.kpis--line{width:100%;justify-content:space-between;gap:4px 10px}}

/* Upcoming / Report side by side */
.grid2--dash{align-items:start}
.up__n,.att__more{font-style:normal}
.up__n{font-size:var(--fs-xs);font-weight:700;background:var(--bg-tint);color:var(--blue-deep);border-radius:999px;padding:1px 8px;margin-left:8px}
.up__list{list-style:none;margin:0;padding:0}
.up__list>li{display:grid;grid-template-columns:64px minmax(0,1fr);gap:0 12px;padding:10px 20px;border-top:1px solid var(--border-soft)}
.up__list>li:first-child{border-top:0}
.up__list time{font-weight:700;color:var(--navy);font-size:var(--fs-md);font-variant-numeric:tabular-nums;display:flex;flex-direction:column;gap:2px}
.up__list time small{font-size:var(--fs-2xs);color:var(--blue);font-weight:700}
.up__list a{display:grid;grid-template-columns:auto auto minmax(0,1fr);gap:8px;align-items:center;padding:4px 0;font-size:var(--fs-sm)}
.up__list a:hover .up__t{text-decoration:underline}
.up__k{font-size:var(--fs-xs);font-weight:700;border-radius:var(--r);padding:1px 7px;background:var(--border-soft);color:var(--text-2);white-space:nowrap}
.up__k.is-wbs{background:var(--bg-tint);color:var(--blue-deep)}.up__k.is-issue{background:var(--h-warn-bg);color:var(--h-warn)}.up__k.is-acceptance{background:var(--h-good-bg);color:var(--h-good)}
.up__t{color:var(--navy);font-weight:600;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.rep__list{list-style:none;margin:0;padding:0}
.rep__list li+li{border-top:1px solid var(--border-soft)}
.rep__list a{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:center;padding:11px 20px;font-size:var(--fs-md)}
.rep__list a:hover{background:var(--bg-alt)}
.rep__p{font-weight:700;color:var(--navy);font-variant-numeric:tabular-nums;white-space:nowrap}
.rep__t{color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.panel__h .btn{margin-left:auto}
@media (max-width:767px){.up__list>li{grid-template-columns:52px minmax(0,1fr);padding:10px 14px}.up__list a{grid-template-columns:auto minmax(0,1fr)}.up__list a .mono{display:none}.rep__list a{grid-template-columns:auto minmax(0,1fr);row-gap:2px;padding:10px 14px}.rep__list .chip{grid-column:2}}

/* Weekly report document */
.page--doc{max-width:960px}
.doc__bar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin:8px 0 16px}
.doc__meta{display:flex;align-items:center;gap:14px;flex-wrap:wrap;font-size:var(--fs-sm);color:var(--text-3)}
.doc__meta b{color:var(--navy)}
.doc__save{color:var(--h-good);font-weight:600;min-width:48px}
.doc__actions{display:flex;gap:8px;flex-wrap:wrap}
.doc{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:40px 48px 48px;box-shadow:0 1px 2px rgba(16,24,40,.04)}
.doc__title{font-size:var(--fs-2xl);font-weight:800;letter-spacing:-0.02em;color:var(--navy);margin:0 0 6px;line-height:1.3}
.doc__title--in{width:100%;border:1px solid transparent;border-radius:var(--r-lg);padding:4px 8px;margin-left:-8px;background:transparent;font-family:inherit}
.doc__title--in:hover{border-color:var(--border)}.doc__title--in:focus{outline:none;border-color:var(--blue);background:#fff}
.doc__period{margin:0 0 28px;color:var(--text-3);font-size:var(--fs-md)}
.doc__sec{margin-top:26px}
.doc__sec h2{font-size:var(--fs-lg);font-weight:800;color:var(--navy);margin:0 0 10px;padding-bottom:8px;border-bottom:1px solid var(--border-soft)}
.doc__body{font-size:var(--fs-md);line-height:1.6;color:var(--text)}
.doc__body ul{margin:0;padding-left:20px}.doc__body ul ul{margin-top:2px}.doc__body li{margin:3px 0}.doc__body p{margin:0 0 8px}.doc__body h3,.doc__body h4{font-size:var(--fs-md);margin:10px 0 4px}
.doc__ta{width:100%;height:auto;font-family:inherit;font-size:var(--fs-md);line-height:1.55;resize:vertical;min-height:72px;overflow:hidden}
.doc__secact{display:flex;align-items:center;gap:12px;margin-top:6px;font-size:var(--fs-sm)}
.doc__secact .linkbtn{width:auto;font-size:var(--fs-sm)}
@media (max-width:767px){.doc{padding:22px 16px 28px}.doc__title{font-size:var(--fs-xl)}.page--doc{padding-left:12px;padding-right:12px}.doc__actions{width:100%}.doc__actions .btn{flex:1}}
/* mobile attention rows: id + kind on line 1, title line 2, meta line 3 (no char-wrapping of the ID column) */
@media (max-width:767px){
  .att__list a{grid-template-columns:10px auto minmax(0,1fr);grid-template-rows:auto auto auto;row-gap:2px;padding:10px 14px}
  .att__list a .mono{white-space:nowrap;grid-column:2;grid-row:1}
  .att__list .att__k{grid-column:3;grid-row:1;justify-self:start}
  .att__list .att__t{grid-column:2/-1;grid-row:2;white-space:normal}
  .att__list small{grid-column:2/-1;grid-row:3;white-space:normal}
  .att__dot{grid-row:1}
}
/* settings: members table scrolls inside the panel on narrow screens; add-member form wraps */
.panel .rtable-wrap--in{overflow-x:auto}
#addm{flex-wrap:wrap}
#addm .input{min-width:160px}
.inline-form{display:flex;gap:6px;flex-wrap:wrap}
.inline-form .input{flex:1 1 160px;max-width:100%!important;min-width:0}
.info dd{min-width:0}
@media (max-width:767px){.page--narrow{padding-left:12px;padding-right:12px}.info{grid-template-columns:1fr}}

/* =====================================================================
   Enterprise density (v2) — compact controls, Project Workspace layout,
   data grid, detail modal, bulk bar, activity feed, import wizard.
   Later rules intentionally override the earlier phase-by-phase styles.
   ===================================================================== */
:root{--fs:var(--fs-md)}
body{font-size:var(--fs);line-height:1.5;letter-spacing:-0.005em}
h1,h2,h3{letter-spacing:-0.025em}
.field{margin-bottom:12px}
.field>label,.field>.lbl{font-size:var(--fs-sm);margin-bottom:4px;color:var(--text-2)}
.row2{gap:0 12px}
.choice span{min-height:32px;padding:0 10px;font-size:var(--fs-sm);border-radius:var(--r)}
.choices{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:6px}
.panel{border-radius:var(--r-lg)}
.panel__h{padding:9px 14px;font-size:var(--fs-sm)}
.panel__b{padding:12px 14px}
.toast{padding:9px 16px;font-size:var(--fs-sm);border-radius:var(--r)}
.av{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--blue-soft);color:var(--blue-deep);font-size:var(--fs-2xs);font-weight:700;font-style:normal;flex:none;margin-right:6px}
.cellwrap{display:flex;align-items:center;min-width:0}
.cellwrap .cell{min-width:0}
.link{font-weight:600}

/* ---- shell: slim, collapsible global navigation ---- */
.shell{grid-template-columns:200px minmax(0,1fr)}
@media (max-width:900px){.shell{grid-template-columns:1fr}}
.shell.is-collapsed{grid-template-columns:52px minmax(0,1fr)}
.side{padding:12px 8px;transition:none}
.side .logo{font-size:var(--fs-xl);padding:0 8px;margin-bottom:14px}
.logo__mark{display:none}
.navlink{padding:7px 9px;border-radius:var(--r);font-size:var(--fs-sm);white-space:nowrap}
.navlink svg{width:16px;height:16px}
.me{padding:8px}.avatar{width:26px;height:26px;font-size:var(--fs-xs)}
.side__fold{font-size:var(--fs-sm);color:var(--text-3)}
.shell.is-collapsed .nl,.shell.is-collapsed .me__t,.shell.is-collapsed .logo__full{display:none}
.shell.is-collapsed .logo__mark{display:inline}
.shell.is-collapsed .navlink{justify-content:center;padding:8px 0}
.shell.is-collapsed .me{justify-content:center;padding:6px 0}
.shell.is-collapsed .side__fold svg{transform:rotate(180deg)}
.sidescrim{position:fixed;inset:0;background:rgba(16,24,40,.35);z-index:94}
.main{background:var(--bg-alt)}
.page{max-width:1360px;padding:18px 24px 48px}
.page--narrow{max-width:880px}
.page__head{margin-bottom:16px}
.page__head h1{font-size:var(--fs-2xl)}
.page__head p{margin-top:2px}
.empty--sm{padding:36px 20px}
.form-panel{padding:20px 22px}
.hist li{padding:6px 0;font-size:var(--fs-sm)}

/* project workspace (Lifecycle V2): the sidebar holds the project LNB; the screen belongs to the project */
.shell--ws{grid-template-columns:232px minmax(0,1fr)}
.shell--ws.is-collapsed{grid-template-columns:56px minmax(0,1fr)}
.shell--ws .topbar{display:none}
.shell--ws .page--wide{max-width:none;padding:0 0 28px;margin:0;display:flex;flex-direction:column;min-height:100vh}
.shell--ws .page--wide:has(>.rlayout){height:100vh;padding-bottom:0}
.shell--ws .page--wide>*{flex:none}
.shell--ws .page--wide>*:not(.wsh){margin-left:14px;margin-right:14px}
.shell--ws .page--wide>.wsh+*{margin-top:10px}
.shell--ws .page--wide>.rlayout{flex:1 1 auto;min-height:0;margin-bottom:0}
.shell--ws .page--wide>.rlayout .rtable-wrap,.shell--ws .page--wide>.rlayout .grid{border-bottom-left-radius:0;border-bottom-right-radius:0;border-bottom:0}
@media (max-width:900px){
  .shell--ws{grid-template-columns:1fr}
  .shell--ws .side{position:fixed;inset:0 auto 0 0;width:248px;z-index:95;transform:translateX(-100%);box-shadow:var(--sh-lift)}
  .shell--ws .side.is-open{transform:none}
  .shell--ws .side__fold{display:none}
}
@media (min-width:901px){.wsh__menu{display:none}}

/* ---- project LNB ---- */
.side--project{padding:0;overflow:hidden}
.lnb__wrap{flex:1 1 auto;min-height:0;overflow-y:auto;overflow-x:hidden;padding:10px 8px 8px;scrollbar-width:thin}
.lnb{display:flex;flex-direction:column;gap:4px}
.lnb__back{display:flex;align-items:center;gap:6px;padding:6px 8px;font-size:var(--fs-sm);color:var(--text-3);border-radius:var(--r);white-space:nowrap}
.lnb__back:hover{background:var(--bg-alt);color:var(--navy)}
.lnb__back .lnb__ic{font-size:var(--fs-lg);line-height:1;width:16px;text-align:center}
.lnb__sec{display:flex;flex-direction:column;gap:1px;padding-top:8px}
.lnb__sec--lc{padding-top:10px}
.lnb__h{font-size:var(--fs-2xs);font-weight:700;letter-spacing:.08em;color:var(--text-3);padding:4px 8px 5px;white-space:nowrap}
.lnb__i{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--r);font-size:var(--fs-sm);font-weight:500;color:var(--text-2);text-decoration:none;white-space:nowrap;min-width:0;background:none;border:0;cursor:pointer;text-align:left;width:100%}
.lnb__i:hover{background:var(--bg-alt);color:var(--navy)}
.lnb__i.is-active{background:var(--bg-tint);color:var(--blue-deep);font-weight:600;box-shadow:inset 3px 0 0 var(--blue)}
.lnb__ic{display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;flex:none;color:currentColor}
.lnb__ic svg{width:16px;height:16px}
.lnb__t{min-width:0;overflow:hidden;text-overflow:ellipsis;display:inline-flex;align-items:center;gap:6px;flex:1 1 auto}
.lnb__row{display:flex;align-items:center;gap:2px}
.lnb__row .lnb__i{flex:1 1 auto}
.lnb__tg{width:22px;height:22px;border:0;background:none;cursor:pointer;border-radius:var(--r);position:relative;flex:none;color:var(--text-3)}
.lnb__tg::after,.lnb__chev::after{content:"";position:absolute;width:6px;height:6px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;transform:rotate(-45deg);right:8px;top:7px;transition:transform .12s}
.lnb__tg:hover{background:var(--bg-alt)}
.lnb__grp.is-open .lnb__tg::after,.lnb__ph.is-open .lnb__chev::after{transform:rotate(45deg);top:5px}
.lnb__sub{display:none;flex-direction:column;gap:1px;padding:1px 0 3px}
.lnb__grp.is-open>.lnb__sub,.lnb__ph.is-open>.lnb__sub{display:flex}
.lnb__i--sub{padding:5px 8px 5px 32px;font-size:var(--fs-sm)}
.lnb__ph{border-radius:var(--r)}
.lnb__phh{display:flex;align-items:center;gap:8px;width:100%;padding:6px 8px;border:0;background:none;cursor:pointer;border-radius:var(--r);font-size:var(--fs-sm);color:var(--text-2);text-align:left;position:relative;white-space:nowrap;min-width:0}
.lnb__phh:hover{background:var(--bg-alt);color:var(--navy)}
.lnb__ph.is-leaf .lnb__phh{cursor:default}
.lnb__mark{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:var(--r);font-size:var(--fs-2xs);font-weight:800;font-style:normal;flex:none;background:var(--border-soft);color:var(--text-3);font-variant-numeric:tabular-nums}
.lnb__ph.is-cur .lnb__mark{background:var(--blue);color:#fff}
.lnb__ph.is-cur .lnb__phh{color:var(--blue-deep);font-weight:700}
.lnb__ph.is-cur{box-shadow:inset 3px 0 0 var(--blue);border-radius:0 var(--r) var(--r) 0}
.lnb__ph.is-done .lnb__mark{background:var(--ok-bg);color:var(--ok-fg)}
.lnb__ph.is-gap .lnb__mark{background:var(--warn-bg);color:var(--warn-fg)}
.lnb__ph.is-quiet.is-gap .lnb__mark{background:var(--border-soft);color:var(--text-3)}   /* Q16-1: closed project — no amber */
.lnb__ph.is-done .lnb__phh{color:var(--text-2)}
.lnb__ph.is-todo .lnb__phh{color:var(--text-3)}
.lnb__pn{min-width:0;overflow:hidden;text-overflow:ellipsis}
.lnb__cur{font-style:normal;font-size:var(--fs-2xs);font-weight:700;color:var(--blue-deep);background:var(--blue-soft);border-radius:999px;padding:0 6px;flex:none}
.lnb__n{font-size:var(--fs-2xs);font-weight:700;color:var(--warn-fg);background:var(--warn-bg);border-radius:999px;padding:0 6px;min-width:18px;text-align:center;flex:none}
.lnb__chev{position:relative;width:18px;height:18px;flex:none;color:var(--text-3)}
.side__bottom--project{padding:8px;gap:1px}
.side__bottom--project .navlink{padding:6px 8px;font-size:var(--fs-sm)}
.side__bottom--project .lnb__ic{font-size:var(--fs-md)}
/* collapsed LNB: icons + phase numbers only; hover reveals labels via title */
.shell.is-collapsed .lnb__h,.shell.is-collapsed .lnb__t,.shell.is-collapsed .lnb__tg,.shell.is-collapsed .lnb__chev,.shell.is-collapsed .lnb__n,.shell.is-collapsed .lnb__back .lnb__t{display:none}
.shell.is-collapsed .lnb__wrap{padding:10px 6px}
.shell.is-collapsed .lnb__i,.shell.is-collapsed .lnb__phh,.shell.is-collapsed .lnb__back{justify-content:center;padding:7px 0}
.shell.is-collapsed .lnb__i--sub{display:none}
.shell.is-collapsed .lnb__sec{padding-top:6px;border-top:1px solid var(--border-soft);margin-top:4px}
.shell.is-collapsed .lnb__ph.is-cur{box-shadow:none}
.shell.is-collapsed .lnb__ph.is-cur .lnb__phh{box-shadow:inset 3px 0 0 var(--blue);border-radius:0 var(--r) var(--r) 0}
.shell.is-collapsed .lnb__i.is-active{box-shadow:none}
.loading--sm{padding:14px 10px;font-size:var(--fs-sm)}

/* compact in-app footer (§40) */
.maincol{display:flex;flex-direction:column;min-width:0;min-height:100vh}
.maincol .main{flex:1 1 auto}
.appfoot{display:flex;align-items:center;gap:14px;padding:8px 16px;font-size:var(--fs-xs);color:var(--text-3);background:var(--bg-alt);border-top:1px solid var(--border-soft)}
.appfoot a{color:var(--text-3)}.appfoot a:hover{color:var(--navy)}
.shell--ws .page--wide:has(>.rlayout)+.appfoot{display:none}

/* workspace header */
.wsh{position:sticky;top:0;z-index:40;background:#fff;border-bottom:1px solid var(--border);flex:none}
.wsh__row{display:flex;align-items:center;gap:10px;height:44px;padding:0 14px;min-width:0}
.wsh__menu{width:28px;height:28px;border:1px solid var(--border);background:#fff;border-radius:var(--r);cursor:pointer;font-size:var(--fs-md);line-height:1;flex:none;color:var(--text-2)}
.wsh__menu:hover{background:var(--bg-alt);color:var(--navy)}
.wsh__back{color:var(--text-3);font-size:var(--fs-sm);white-space:nowrap}.wsh__back:hover{color:var(--navy)}
.wsh__sep{color:var(--border-strong)}
.wsh__name{font-size:var(--fs-md);font-weight:800;letter-spacing:-0.03em;color:var(--navy);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:34vw}
.wsh__phase{font-size:var(--fs-sm);font-weight:700;color:var(--blue-deep);background:var(--blue-soft);border-radius:var(--r);padding:2px 8px;white-space:nowrap;display:inline-flex;gap:6px;align-items:center}
.wsh__title{font-size:var(--fs-sm);font-weight:600;color:var(--text-2);white-space:nowrap}
.wsh__sp{flex:1}
@media (max-width:820px){.wsh__title,.wsh__sep{display:none}}
/* summary strips → one compact line of figures */
.summary{display:flex;flex-wrap:wrap;border-radius:var(--r-lg);margin-bottom:8px;overflow:hidden}
.summary>div{display:flex;align-items:baseline;gap:6px;padding:5px 14px;border-left:1px solid var(--border-soft);min-width:0}
.summary b{display:inline;font-size:var(--fs-md);line-height:1.3}
.summary span{font-size:var(--fs-xs)}
.summary__sep{border-left:2px solid var(--border)!important}
.kstrip{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.kchip{display:inline-flex;align-items:baseline;gap:6px;padding:4px 10px;border:1px solid var(--border);border-radius:var(--r);background:#fff;font-size:var(--fs-xs);color:var(--text-3);font-family:inherit}
.kchip b{font-size:var(--fs-md);color:var(--navy);font-variant-numeric:tabular-nums}
.kchip.is-warn b{color:var(--warn-fg)}.kchip.is-crit b{color:var(--danger-fg)}
button.kchip{cursor:pointer}button.kchip:hover{border-color:var(--border-blue);background:var(--bg-tint)}
.rtool{gap:6px;margin-bottom:8px}
.rtool #q{width:200px}
.applied{margin:-2px 0 8px}
.notice,.ctx{padding:7px 12px;margin-bottom:8px;font-size:var(--fs-sm)}

/* legacy list tables (Changes · Issues · Tests) — compact + scroll inside the screen */
.rlayout{display:flex;flex-direction:column;position:relative}
.rtable-wrap{border-radius:var(--r-lg);flex:1 1 auto;min-height:0}
.rtable{font-size:var(--fs-sm)}
.rtable th{height:32px;padding:0 12px;background:var(--bg-alt);font-weight:700;color:var(--text-2);position:sticky;top:0;z-index:2}
.rtable td{height:34px;padding:0 12px}
.rtable td.ttl{max-width:520px}
.prow{padding:10px 16px}
.plist{border-radius:var(--r-lg)}
.prow--head{padding:8px 16px}
.shell--ws .rlayout .rtable-wrap{overflow:auto}

/* ---- data grid ---- */
.grid{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.gridwrap{flex:1 1 auto;min-height:0;overflow:auto}
.gtable{border-collapse:separate;border-spacing:0;table-layout:fixed;font-size:var(--fs-sm)}
.gtable th{position:sticky;top:0;z-index:3;background:var(--bg-alt);height:32px;padding:0 10px;font-size:var(--fs-xs);font-weight:700;color:var(--text-2);border-bottom:1px solid var(--border);text-align:left;white-space:nowrap;overflow:hidden}
.gtable td{height:var(--row-h);padding:0 10px;border-bottom:1px solid var(--border-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;background:#fff;vertical-align:middle;color:var(--navy)}
.gtable tbody tr{cursor:pointer}
.gtable tbody tr:hover td{background:var(--bg-tint)}
.gtable tbody tr.is-checked td{background:var(--blue-soft)}
.gtable tbody tr.is-sel td{background:var(--bg-tint)}
.gtable tbody tr.is-arch td{color:var(--text-3)}
.gtable tbody tr.is-sum td{background:var(--bg-alt);font-weight:700}
.gtable tbody tr:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}
.gtable .gc--chk{width:38px;text-align:center;padding:0;position:sticky;left:0;z-index:2}
.gtable th.gc--chk{z-index:5}
.gtable .gc--stick{position:sticky;left:38px;z-index:2;box-shadow:1px 0 0 var(--border-soft)}
.gtable th.gc--stick{z-index:5}
.gtable:not(:has(.gc--chk)) .gc--stick{left:0}
.gtable .ta-right{text-align:right;font-variant-numeric:tabular-nums}
.gtable .ta-center{text-align:center}
.gtable td.ttl{font-weight:600}
.gtable td.ttl small{margin-left:8px;font-size:var(--fs-2xs);font-weight:600;color:var(--text-3);border:1px solid var(--border);border-radius:var(--r-sm);padding:0 5px;vertical-align:1px}
.gtable td.mono{font-size:var(--fs-sm);color:var(--text-2)}
.gtable input[type=checkbox]{width:14px;height:14px;margin:0;accent-color:var(--blue);cursor:pointer;vertical-align:middle}
.gh{display:inline-block;max-width:calc(100% - 8px);overflow:hidden;text-overflow:ellipsis;vertical-align:middle}
.gh.is-sortable{cursor:pointer;user-select:none}.gh.is-sortable:hover{color:var(--navy)}
.sa{font-style:normal;font-size:var(--fs-2xs);margin-left:4px;color:var(--blue)}
.gtable th{position:sticky}
.grz{position:absolute;right:0;top:0;bottom:0;width:6px;cursor:col-resize;z-index:1}
.grz:hover,body.is-resizing .grz{background:rgba(var(--blue-rgb),.28)}
body.is-resizing{cursor:col-resize;user-select:none}
.cell{width:100%;height:26px;border:1px solid transparent;background:transparent;border-radius:var(--r-sm);font-size:var(--fs-sm);padding:0 4px;color:inherit;font-family:inherit;text-overflow:ellipsis}
.cell:hover{border-color:var(--border);background:#fff}
.cell:focus{outline:none;border-color:var(--blue);background:#fff;box-shadow:0 0 0 2px rgba(var(--blue-rgb),.15)}
.cell--sel{appearance:none;-webkit-appearance:none;cursor:pointer;padding-right:16px}
.cell--sel:hover,.cell--sel:focus{background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 3.5 5 6.5 8 3.5' fill='none' stroke='%23667085' stroke-width='1.4'/%3E%3C/svg%3E") no-repeat right 4px center}
.cell--date{padding:0 2px;font-size:var(--fs-sm);min-width:104px}
.cell--num{text-align:right;padding-right:2px;width:56px}
/* L-C1: editable date / number cells read as text at rest (`10/20`, `0%` + bar) — the native input shows on hover / focus only */
.cedit{position:relative;display:block;flex:1 1 auto;min-width:0}
.cedit>.cell{color:transparent}.cedit>.cell::-webkit-datetime-edit{color:transparent}
.cedit:hover>.cell,.cedit:focus-within>.cell,.cedit:hover>.cell::-webkit-datetime-edit,.cedit:focus-within>.cell::-webkit-datetime-edit{color:inherit}
.cedit__v{position:absolute;inset:0;display:flex;align-items:center;padding:0 4px;pointer-events:none;white-space:nowrap;overflow:hidden;font-size:var(--fs-sm);font-variant-numeric:tabular-nums}
td[style*="right"] .cedit__v,.cedit>.cell--num+.cedit__v{justify-content:flex-end}
.cedit__v .pcell{width:100%}
.cedit:hover>.cedit__v,.cedit:focus-within>.cedit__v{visibility:hidden}
.cell--late+.cedit__v{color:var(--danger-fg);font-weight:600}.cell--past+.cedit__v{color:var(--warn-fg);font-weight:600}
/* owner cell: avatar + name + '계정 없음' — the tag never shrinks, the name takes the rest */
.cellwrap .cell--sel{flex:1 1 auto;width:auto}.cellwrap .wnoacct{flex:none}
.cell:disabled{opacity:.5}
.gfoot{display:flex;align-items:center;gap:10px;padding:4px 12px;border-top:1px solid var(--border);background:#fff;font-size:var(--fs-xs);color:var(--text-2);flex:none;min-height:32px}
.gfoot b{color:var(--navy)}
.gfoot__sp{flex:1}
.gfoot__sel{color:var(--blue-deep)}
.gfoot__pg{min-width:44px;text-align:center;font-variant-numeric:tabular-nums}
.gtools{position:relative;display:inline-block}
.gpop{position:absolute;right:0;top:calc(100% + 4px);z-index:60;min-width:200px;max-height:60vh;overflow:auto;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-lift);padding:8px 10px}
.gpop__t{font-size:var(--fs-2xs);font-weight:700;color:var(--text-3);letter-spacing:.06em;margin-bottom:6px}
.gpop__i{display:flex;align-items:center;gap:8px;padding:4px 0;font-size:var(--fs-sm);cursor:pointer}
.gpop__r{margin-top:6px;font-size:var(--fs-xs);width:auto}

/* ---- bulk bar / quick add ---- */
.bulk{display:flex;align-items:center;gap:8px;padding:6px 10px;background:var(--blue-soft);border:1px solid var(--border-blue);border-radius:var(--r-lg);margin-bottom:8px;flex-wrap:wrap}
.bulk__n{color:var(--blue-deep);font-size:var(--fs-sm);white-space:nowrap}
.bulk__sp{flex:1}
.qa{display:flex;gap:6px;margin-bottom:8px;align-items:center}
.qa .input{flex:1;min-width:200px;max-width:560px}
.qa__h{font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap}

/* ---- detail view: large modal (replaces the right-hand drawer) ---- */
.rlayout.has-drawer::before{content:"";position:fixed;inset:0;background:rgba(16,24,40,.38);z-index:80}
.rlayout .drawer{position:fixed;z-index:81;left:50%;top:4vh;transform:translateX(-50%);width:min(900px,92vw);max-height:92vh;height:auto;border-radius:var(--r-lg);box-shadow:var(--sh-lift);display:flex;flex-direction:column;background:#fff;border:1px solid var(--border);overflow:hidden}
.rlayout .drawer.drawer--lg{height:88vh;top:6vh}
.rlayout .drawer.drawer--form{width:min(980px,95vw)}
.drawer__h{padding:10px 16px;gap:8px;flex:none;background:#fff}
.drawer__h b{font-size:var(--fs-md)}
.drawer__x{font-size:var(--fs-xl)}
.dnav{display:inline-flex;gap:2px;margin-left:auto}
.dnav+.drawer__x{margin-left:4px}
.dnav button{width:26px;height:26px;border:1px solid var(--border);background:#fff;border-radius:var(--r);cursor:pointer;color:var(--text-2);font-size:var(--fs-sm)}
.dnav button:hover:not(:disabled){background:var(--bg-alt);color:var(--navy)}.dnav button:disabled{opacity:.35;cursor:default}
.drawer__b{padding:14px 18px;flex:1;min-height:0;overflow-y:auto}
.drawer__f{padding:8px 16px;flex:none}
.dtabs{display:flex;gap:2px;padding:0 14px;border-bottom:1px solid var(--border-soft);background:#fff;flex:none}
.dtabs button{border:0;background:none;padding:8px 12px;font-size:var(--fs-sm);font-weight:600;color:var(--text-2);cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;font-family:inherit}
.dtabs button:hover{color:var(--navy)}
.dtabs button.is-on{color:var(--blue-deep);border-color:var(--blue)}
.dtabs em{font-style:normal;font-size:var(--fs-2xs);font-weight:700;background:var(--border-soft);color:var(--text-2);border-radius:999px;padding:0 6px;margin-left:6px}
.dlayout{display:grid;grid-template-columns:minmax(0,1fr) 288px;gap:18px;align-items:start}
.dside{background:var(--bg-alt);border:1px solid var(--border-soft);border-radius:var(--r-lg);padding:12px;position:sticky;top:0}
.dside .dfield{margin-bottom:10px}
.dside .dfield:last-child{margin-bottom:0}
.dtitle{font-size:var(--fs-lg);padding:5px 8px;margin:-5px -8px 6px}
.ddesc{min-height:110px;font-size:var(--fs-sm);margin-bottom:10px}
.dgrid{gap:8px 12px}
.dh{margin:16px 0 8px;font-size:var(--fs-xs)}
.dh:first-child{margin-top:0}
.cols2{display:grid;grid-template-columns:1fr 1fr;gap:0 18px}
.cols2--3{grid-template-columns:repeat(3,1fr)}
.fsec{border:1px solid var(--border-soft);border-radius:var(--r-lg);padding:12px 14px;margin-bottom:12px;background:#fff}
.fsec>h4{margin:0 0 10px;font-size:var(--fs-xs);font-weight:700;color:var(--text-3);letter-spacing:.06em;text-transform:uppercase}
.trace{margin:10px 0 2px;padding:8px 10px}
.trace__i{padding:6px 8px}.trace__i b{font-size:var(--fs-lg)}

/* ---- activity / comments ---- */
.act{list-style:none;margin:0 0 0 6px;padding:0;border-left:2px solid var(--border-soft)}
.act__i{position:relative;padding:0 0 12px 16px}
.act__dot{position:absolute;left:-7px;top:4px;width:10px;height:10px;border-radius:50%;background:var(--border-strong);border:2px solid #fff}
.act__i--comment .act__dot{background:var(--blue)}.act__i--status .act__dot{background:var(--ok)}.act__i--owner .act__dot{background:var(--violet)}.act__i--schedule .act__dot{background:var(--warn)}.act__i--link .act__dot{background:var(--sky)}
.act__h{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
.act__h b{color:var(--navy)}
.act__h time{color:var(--text-3);font-variant-numeric:tabular-nums}
.act__k{font-size:var(--fs-2xs);font-weight:700;color:var(--text-2);background:var(--border-soft);border-radius:var(--r-sm);padding:0 6px}
.act__x{margin-left:auto;border:0;background:none;color:var(--text-3);cursor:pointer;font-size:var(--fs-md);line-height:1}.act__x:hover{color:var(--danger)}
.act__t{font-size:var(--fs-sm);color:var(--text-2);margin-top:2px;line-height:1.55;overflow-wrap:anywhere}
.act__t q{quotes:none;color:var(--navy)}.act__t q::before{content:"“"}.act__t q::after{content:"”"}
.act__t b{color:var(--navy);font-weight:600}
.act__t small{color:var(--text-3);margin-left:6px}
.act__f{display:flex;gap:6px;margin:0 0 12px}
.fchip2{border:1px solid var(--border);background:#fff;border-radius:999px;height:24px;padding:0 10px;font-size:var(--fs-xs);font-weight:600;color:var(--text-2);cursor:pointer;font-family:inherit}
.fchip2.is-on{background:var(--blue-soft);border-color:var(--border-blue);color:var(--blue-deep)}
.cmt{margin-bottom:14px}.cmt__a{display:flex;justify-content:space-between;align-items:center;margin-top:6px}
.cmt .hint{color:var(--danger);font-size:var(--fs-xs)}

/* ---- project list as a table ---- */
.ptoolbar{display:flex;gap:6px;align-items:center;margin-bottom:8px;flex-wrap:wrap}

/* ---- import wizard ---- */
.impscrim{position:fixed;inset:0;background:rgba(16,24,40,.45);z-index:100;display:flex;align-items:center;justify-content:center}
.imp{width:min(1280px,96vw);height:92vh;background:#fff;border-radius:var(--r-lg);box-shadow:var(--sh-lift);display:flex;flex-direction:column;overflow:hidden}
.imp__h{display:flex;align-items:center;gap:12px;padding:12px 18px;border-bottom:1px solid var(--border-soft);flex:none}
.imp__h h3{font-size:var(--fs-lg)}
.imp__x{margin-left:auto;border:0;background:none;font-size:var(--fs-2xl);line-height:1;color:var(--text-3);cursor:pointer;border-radius:var(--r);padding:2px 8px}.imp__x:hover{background:var(--bg-alt);color:var(--navy)}
.imp__steps{display:flex;gap:4px;padding:8px 18px;border-bottom:1px solid var(--border-soft);flex:none;background:var(--bg-alt);overflow-x:auto}
.imp__step{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:600;color:var(--text-3);white-space:nowrap;padding:3px 10px;border-radius:999px}
.imp__step i{width:18px;height:18px;border-radius:50%;border:1.5px solid var(--border);font-size:var(--fs-2xs);font-style:normal;display:inline-flex;align-items:center;justify-content:center;background:#fff}
.imp__step.is-on{color:var(--blue-deep);background:var(--blue-soft)}.imp__step.is-on i{background:var(--blue);border-color:var(--blue);color:#fff}
.imp__step.is-done{color:var(--text-2)}.imp__step.is-done i{background:var(--ok);border-color:var(--ok);color:#fff}
.imp__body{flex:1;min-height:0;overflow:auto;padding:16px 18px}
.imp__f{display:flex;align-items:center;gap:8px;padding:10px 18px;border-top:1px solid var(--border-soft);flex:none}
.imp__f .sp{flex:1}
.drop{border:2px dashed var(--border-strong);border-radius:var(--r-lg);background:var(--bg-alt);padding:36px 20px;text-align:center;color:var(--text-2);cursor:pointer}
.drop.is-over{border-color:var(--blue);background:var(--blue-soft)}
.drop b{display:block;font-size:var(--fs-md);color:var(--navy);margin-bottom:4px}
.imp__cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:14px}
.imp__card{border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 14px;background:#fff}
.imp__card b{display:block;font-size:var(--fs-2xl);font-variant-numeric:tabular-nums;color:var(--navy);line-height:1.2}
.imp__card span{font-size:var(--fs-xs);color:var(--text-3)}
.imp__card.is-ok b{color:var(--ok-fg)}.imp__card.is-err b{color:var(--danger-fg)}
.imp__tbl{border:1px solid var(--border);border-radius:var(--r-lg);overflow:auto;max-height:100%}
.imp__tbl table{border-collapse:separate;border-spacing:0;font-size:var(--fs-sm);min-width:100%}
.imp__tbl th{position:sticky;top:0;z-index:2;background:var(--bg-alt);height:30px;padding:0 8px;text-align:left;font-size:var(--fs-xs);color:var(--text-2);border-bottom:1px solid var(--border);white-space:nowrap}
.imp__tbl th .req{color:var(--danger)}
.imp__tbl td{padding:0;border-bottom:1px solid var(--border-soft);border-right:1px solid var(--border-soft);vertical-align:top;background:#fff;min-width:96px}
.imp__tbl td.rn{min-width:44px;text-align:right;padding:6px 8px;color:var(--text-3);font-variant-numeric:tabular-nums;position:sticky;left:0;z-index:1;background:#fff}
.imp__tbl td.st{min-width:64px;padding:6px 8px;white-space:nowrap}
.imp__tbl tr.is-bad td.rn,.imp__tbl tr.is-bad td.st{background:var(--danger-bg)}
.imp__tbl input,.imp__tbl select,.imp__tbl textarea{width:100%;border:0;background:transparent;padding:6px 8px;font:inherit;font-size:var(--fs-sm);color:var(--navy);outline:none;min-height:30px;resize:none;display:block}
.imp__tbl textarea{height:30px;overflow:hidden}
.imp__tbl td:focus-within{box-shadow:inset 0 0 0 2px var(--blue)}
.imp__tbl td.is-err{background:var(--danger-bg);box-shadow:inset 0 0 0 1px var(--danger-bd)}
.imp__tbl td.is-err input,.imp__tbl td.is-err select,.imp__tbl td.is-err textarea{color:var(--danger-fg)}
.imp__msg{display:block;font-size:var(--fs-xs);color:var(--danger-fg);padding:0 8px 5px;line-height:1.3;white-space:normal}
.imp__rowerr{font-size:var(--fs-xs);color:var(--danger-fg);padding:4px 8px;white-space:normal}
.imp__warn{background:var(--warn-bg);border:1px solid var(--warn-bd);color:var(--warn-fg);border-radius:var(--r-lg);padding:8px 12px;font-size:var(--fs-sm);margin-bottom:10px}
.imp__opts{display:flex;align-items:center;gap:14px;margin-bottom:10px;flex-wrap:wrap}
.imp__res .imp__card b{font-size:var(--fs-2xl)}
.imp__tpl{display:flex;gap:10px;align-items:center;margin:14px 0 0;flex-wrap:wrap}

/* ---- project dashboard ---- */
.dkpi{display:grid;grid-template-columns:repeat(5,1fr);gap:8px;margin-bottom:10px}
.dkpi>a,.dkpi>div{display:block;padding:10px 14px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);min-width:0}
.dkpi>a:hover{border-color:var(--border-blue)}
.dkpi span{display:block;font-size:var(--fs-xs);color:var(--text-3);margin-bottom:2px}
.dkpi b{display:block;font-size:var(--fs-2xl);font-weight:800;color:var(--navy);letter-spacing:-0.03em;line-height:1.2;font-variant-numeric:tabular-nums}
.dkpi small{font-size:var(--fs-xs);color:var(--text-3);font-weight:500;margin-left:4px}
.dkpi .is-crit b{color:var(--danger-fg)}.dkpi .is-warn b{color:var(--warn-fg)}
.dkpi .pbar{margin-top:6px;height:4px}
.dgrid3{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:10px;margin-bottom:10px;align-items:start}
.dgrid3--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.dpanel{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);min-width:0}
.dpanel__h{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--border-soft);font-weight:700;color:var(--navy);font-size:var(--fs-sm)}
.dpanel__h em{font-style:normal;font-size:var(--fs-xs);font-weight:700;background:var(--blue-soft);color:var(--blue-deep);border-radius:999px;padding:0 7px}
.dpanel__h .link{margin-left:auto;font-size:var(--fs-xs)}
.dpanel__b{padding:10px 14px}
.dlist{list-style:none;margin:0;padding:0}
.dlist li{display:flex;align-items:center;gap:8px;padding:6px 14px;border-top:1px solid var(--border-soft);font-size:var(--fs-sm);min-width:0}
.dlist li:first-child{border-top:0}
.dlist a{display:flex;align-items:center;gap:8px;min-width:0;flex:1}
.dlist a:hover .dl__t{text-decoration:underline}
.dl__t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--navy);font-weight:600}
.dl__m{color:var(--text-3);font-size:var(--fs-xs);white-space:nowrap;font-variant-numeric:tabular-nums}
.dl__late{color:var(--danger-fg);font-weight:700;font-size:var(--fs-xs);white-space:nowrap}
.dempty{padding:14px;font-size:var(--fs-sm);color:var(--text-2)}
.tl{position:relative;padding:8px 14px 10px}
.tl__axis{display:flex;justify-content:space-between;font-size:var(--fs-2xs);color:var(--text-3);margin-bottom:6px;font-variant-numeric:tabular-nums}
.tl__rows{position:relative}
.tl__row{display:grid;grid-template-columns:150px 1fr;align-items:center;height:24px;gap:8px;font-size:var(--fs-xs)}
.tl__l{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--navy);font-weight:600}
.tl__l small{color:var(--text-3);font-weight:500;margin-right:4px}
.tl__t{position:relative;height:100%}
.tl__bar{position:absolute;top:6px;height:12px;border-radius:var(--r-sm);background:var(--border-blue);overflow:hidden}
.tl__bar i{display:block;height:100%;background:var(--blue)}
.tl__bar.is-done{background:var(--ok-bd)}.tl__bar.is-done i{background:var(--ok)}
.tl__ms{position:absolute;top:6px;width:11px;height:11px;background:var(--navy);transform:translateX(-50%) rotate(45deg);border-radius:var(--r-sm)}
.tl__ms.is-done{background:var(--ok)}
.tl__today{position:absolute;top:0;bottom:0;width:0;border-left:2px dashed var(--blue);z-index:1;pointer-events:none}
.wl{display:grid;grid-template-columns:110px 1fr 70px;gap:8px;align-items:center;padding:5px 14px;font-size:var(--fs-sm)}
.wl__n{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--navy);font-weight:600}
.wl__bar{display:flex;height:10px;border-radius:var(--r-sm);overflow:hidden;background:var(--border-soft)}
.wl__bar i{display:block;height:100%}.wl__bar .d{background:var(--ok)}.wl__bar .p{background:var(--blue)}.wl__bar .l{background:var(--danger)}
.wl__m{text-align:right;color:var(--text-3);font-variant-numeric:tabular-nums;font-size:var(--fs-xs)}
.dguide .nowl__row{padding:8px 14px}
.dguide .guide__h{margin:0}
.dash-sec{margin-bottom:10px}
.shell--ws .page--flow{padding-bottom:40px}
.shell--ws .page--flow>.flow{margin-top:10px}

/* ---- project form: two-column ---- */
.pform{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:0 24px}
.pform .full{grid-column:1/-1}

/* ---- responsive ---- */
@media (max-width:1100px){
  .dlayout{grid-template-columns:1fr}.dside{position:static}
  .dkpi{grid-template-columns:repeat(3,1fr)}
  .dgrid3,.dgrid3--3{grid-template-columns:1fr}
}
@media (max-width:900px){
  .shell--ws .page--wide:has(>.rlayout){height:auto;min-height:100vh}
  .gridwrap{max-height:68vh}
  .rlayout .drawer,.rlayout .drawer.drawer--lg,.rlayout .drawer.drawer--form{inset:0;left:0;top:0;transform:none;width:100%;height:100%;max-height:none;border-radius:0}
  .cols2,.cols2--3,.pform{grid-template-columns:1fr}
  .imp{width:100vw;height:100vh;border-radius:0}.imp__cards{grid-template-columns:1fr}
  .dkpi{grid-template-columns:repeat(2,1fr)}
  .tl__row{grid-template-columns:90px 1fr}
  .qa .input{min-width:0}
}
.drawer[hidden],.bulk[hidden],.gpop[hidden],.sidescrim[hidden]{display:none!important}
.gpop .gpop__i.linkbtn{width:100%;text-align:left;border:0;background:none;font-family:inherit;color:var(--navy)}
.gpop .gpop__i.linkbtn:hover{color:var(--blue-deep)}
.wadd{opacity:0;width:20px;height:20px;border:1px solid var(--border);background:#fff;border-radius:var(--r-sm);color:var(--blue-deep);cursor:pointer;font-size:var(--fs-md);line-height:1;padding:0;margin-left:auto;flex:none}
.gtable tr:hover .wadd,.wadd:focus{opacity:1}
.gtable tbody tr.is-late td:nth-child(5),.gtable tbody tr.is-late td:nth-child(6){color:var(--danger-fg)}
.gantt{grid-template-columns:320px minmax(0,1fr)}
.gantt__row{height:30px;font-size:var(--fs-sm)}
.shell--ws .wbs-wrap{border-radius:0;border-left:0;border-right:0}
@media (max-width:900px){.rlayout.has-drawer .wbs-wrap{display:block}.gantt{grid-template-columns:200px minmax(0,1fr)}}
.gtable{min-width:100%}
/* grid cells read as values (design §3.3): the chevron / date icon shows only on row hover or keyboard focus */
.cell--sel{background:transparent}
.gtable tbody tr:hover .cell--sel{background:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 10 10'%3E%3Cpath d='M2 3.5 5 6.5 8 3.5' fill='none' stroke='%23667085' stroke-width='1.4'/%3E%3C/svg%3E") no-repeat right 4px center}
.cell--date::-webkit-calendar-picker-indicator{opacity:0}
.gtable tbody tr:hover .cell--date::-webkit-calendar-picker-indicator,.cell--date:focus::-webkit-calendar-picker-indicator{opacity:.6}
.gtable .is-unlinked{color:var(--warn-fg);font-weight:700}
/* <640px: grid rows become cards — line 1 ID + title, line 2 the remaining visible values (design §3.3, #7) */
@media (max-width:767px){
  .gridwrap{max-height:none;overflow:visible}
  .gtable,.gtable tbody{display:block;width:100%!important;min-width:0}
  .gtable colgroup,.gtable thead{display:none}
  .gtable tbody tr{display:flex;flex-wrap:wrap;align-items:center;gap:2px 10px;padding:10px 12px 10px 40px;position:relative;border-bottom:1px solid var(--border-soft);background:#fff}
  .gtable tbody tr td{display:block;height:auto;padding:0;border:0;background:transparent!important;position:static!important;box-shadow:none!important;overflow:visible;white-space:normal}
  .gtable tbody tr td.gc--chk{position:absolute;left:12px;top:12px;width:auto}
  .gtable tbody tr td.gc--stick.mono{flex:none;font-size:var(--fs-xs)}
  .gtable tbody tr td.ttl{flex:1 1 calc(100% - 96px);min-width:0;font-size:var(--fs-md)}
  .gtable tbody tr td:not(.gc--stick):not(.gc--chk){flex:none;font-size:var(--fs-xs);color:var(--text-2)}
  .gtable tbody tr td.gc--nocard{display:none}
  .gtable tbody tr td .cell{height:24px;width:auto;max-width:150px;padding:0 2px;font-size:var(--fs-xs)}
  .gtable tbody tr td .cell--sel{padding-right:2px}
  .gtable tbody tr td .cellwrap{display:inline-flex}
}
.rtool .select--sm{max-width:112px;padding-left:8px;padding-right:22px;text-overflow:ellipsis}
.rtool #q{width:170px}
.seg button{padding:0 12px;height:30px;font-size:var(--fs-sm)}
.toggle{font-size:var(--fs-sm)}
.rlayout{align-items:stretch;gap:0}
.gtable tbody tr.is-late td:nth-child(5),.gtable tbody tr.is-late td:nth-child(6){color:inherit}
.gtable tbody tr.is-late td:nth-child(5) .cell--date,.gtable tbody tr.is-late td:nth-child(5) .cedit__v,.gtable tbody tr.is-late td:nth-child(5) .wdate{color:var(--danger-fg);font-weight:600}
.dside .cols2{grid-template-columns:1fr}
.dside .input,.dside .select{width:100%;min-width:0}
.dgrid3 .panel{margin:0}
.dpanel .att__list,.dpanel .up__list,.dpanel .rep__list{max-height:300px;overflow:auto}
.dgrid3 .att,.dgrid3 .up,.dgrid3 .rep{border-radius:var(--r-lg)}
.nowl{margin:0;padding:0;list-style:none}
.dguide .nowl__row{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,2fr) auto;gap:12px;align-items:center;border-top:1px solid var(--border-soft)}
.dguide .nowl__row:first-child{border-top:0}
.shell--ws .page--flow .health{margin-bottom:0}
.dkpi .pbar{display:block;margin-top:6px}
.dcol{display:flex;flex-direction:column;gap:10px;min-width:0}
.dcol .panel{margin:0}
.tl__row{height:22px}
.tl__bar{top:5px;height:12px}
.health__dims{display:block}
.up__list,.att__list,.rep__list{max-height:250px;overflow:auto}
.dgrid3 .panel__h{padding:8px 14px;font-size:var(--fs-sm)}
.page--form{max-width:980px}
.pform{padding:18px 22px}
.pform .choices{grid-template-columns:repeat(2,1fr)}
.pform .pdates .row2{grid-template-columns:1fr 1fr;gap:0 12px}
.ptable .grid{max-height:calc(100vh - 210px);min-height:240px}
.ptable .gtable td.ttl a{font-weight:700}
@media (max-width:900px){.pform{grid-template-columns:1fr}}
.rlayout .drawer:has(>form):not(.drawer--lg){width:min(860px,95vw)}
.rlayout .drawer>form{display:flex;flex-direction:column;min-height:0;flex:1}
.drawer__f{display:flex;align-items:center;gap:8px}
.drawer__f .btn+.btn{margin-left:0}
@media (max-width:900px){.qa__h{display:none}}

/* =====================================================================
   Admin Console (Phase 10B) — internal B2B console: table-centric, flat, same tokens as the app.
   Blue = action · Green = normal · Orange = attention · Red = suspended/failed · Gray = inactive
   ===================================================================== */
.ashell{display:grid;grid-template-columns:208px minmax(0,1fr);min-height:100vh;background:var(--bg-alt)}
.aside{background:var(--navy);color:#fff;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}
.aside__brand{display:flex;align-items:center;justify-content:space-between;padding:16px 18px 12px;font-weight:800;font-size:var(--fs-lg);letter-spacing:-0.03em}
.aside__brand a{color:#fff}.aside__brand em{font-style:normal;font-weight:600;color:var(--border-blue);margin-left:6px;font-size:var(--fs-sm);letter-spacing:.08em;text-transform:uppercase}
.aside__menu{display:none;border:0;background:none;color:#fff;font-size:var(--fs-xl);cursor:pointer}
.aside__nav{display:flex;flex-direction:column;padding:4px 10px;gap:2px}
.aside__nav a{display:block;padding:8px 10px;border-radius:var(--r);color:var(--border-blue);font-size:var(--fs-sm);font-weight:600}
.aside__nav a:hover{background:rgba(255,255,255,.07);color:#fff}
.aside__nav a.is-active{background:var(--blue);color:#fff}
.aside__foot{margin-top:auto;padding:12px 18px 16px;border-top:1px solid rgba(255,255,255,.1);font-size:var(--fs-sm);display:flex;flex-direction:column;gap:8px}
.aside__foot a{color:var(--border-blue)}.aside__foot .linkbtn{color:var(--border-blue);text-align:left;padding:0;font-size:var(--fs-sm)}
.aside__me b{display:block;color:#fff;font-size:var(--fs-sm)}.aside__me small{color:var(--text-3)}
.amain{min-width:0}
.apage{padding:18px 24px 48px;max-width:1500px}
.ahead{margin-bottom:14px}.ahead__r{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.ahead h1{font-size:var(--fs-xl);margin:0}.ahead__a{margin-left:auto;display:flex;gap:8px;align-items:center}
.acrumb{display:inline-block;font-size:var(--fs-sm);color:var(--text-3);margin-bottom:6px}.acrumb:hover{color:var(--navy)}
.akpi{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:8px;margin-bottom:14px}
.akpi__i{display:block;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:10px 14px;min-width:0;color:inherit}
a.akpi__i:hover{border-color:var(--border-blue)}
.akpi__i span{display:block;font-size:var(--fs-xs);color:var(--text-3)}.akpi__i b{display:block;font-size:var(--fs-2xl);font-weight:800;color:var(--navy);letter-spacing:-0.03em;line-height:1.25;font-variant-numeric:tabular-nums}
.akpi__i small{display:block;font-size:var(--fs-xs);color:var(--text-3);margin-top:2px}.akpi__i.is-bad b{color:var(--danger-fg)}.akpi__i.is-warn b{color:var(--warn-fg)}
.atool{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:8px}.atool .input{width:240px}.atool .select--sm{max-width:200px}
.atwrap{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);overflow:auto}
.atable{border-collapse:separate;border-spacing:0;width:100%;min-width:720px;font-size:var(--fs-sm);table-layout:fixed}
.atable th{position:sticky;top:0;background:var(--bg-alt);height:32px;padding:0 10px;text-align:left;font-size:var(--fs-xs);font-weight:700;color:var(--text-2);border-bottom:1px solid var(--border);white-space:nowrap}
.atable td{height:34px;padding:0 10px;border-bottom:1px solid var(--border-soft);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:var(--navy);vertical-align:middle}
.atable tbody tr:last-child td{border-bottom:0}
.atable tr[data-href]{cursor:pointer}.atable tr[data-href]:hover td{background:var(--bg-tint)}.atable tr[data-href]:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}
.atable td.ttl{font-weight:600}.atable .num{text-align:right;font-variant-numeric:tabular-nums}
.atable td.aempty{height:auto;padding:28px 12px;text-align:center;color:var(--text-3);white-space:normal}
.aempty{padding:18px 14px;color:var(--text-2);font-size:var(--fs-sm)}.aempty--lg{background:#fff;border:1px dashed var(--border);border-radius:var(--r-lg);padding:36px 20px;text-align:center}
.aempty--lg b{display:block;font-size:var(--fs-md);color:var(--navy);margin-bottom:6px}.aempty--lg p{margin:0;max-width:560px;margin-inline:auto}
.aempty--err{background:var(--danger-bg);border:1px solid var(--danger-bd);border-radius:var(--r-lg);color:var(--danger-fg);margin:14px 24px}
.apager{display:flex;align-items:center;gap:8px;padding:8px 2px;font-size:var(--fs-sm);color:var(--text-2)}.apager b{color:var(--navy)}.apager__sp{flex:1}.apager__pg{min-width:48px;text-align:center;font-variant-numeric:tabular-nums}
.achip{display:inline-flex;align-items:center;height:20px;padding:0 8px;border-radius:999px;font-size:var(--fs-xs);font-weight:600;white-space:nowrap}
.achip--ok{background:var(--ok-bg);color:var(--ok-fg)}.achip--warn{background:var(--warn-bg);color:var(--warn-fg)}.achip--bad{background:var(--danger-bg);color:var(--danger-fg)}.achip--muted{background:var(--border-soft);color:var(--text-2)}.achip--act{background:var(--blue-soft);color:var(--blue-deep)}
.agrid2{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:10px}
.asec{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);min-width:0;margin-bottom:10px}
.asec__h{display:flex;align-items:center;gap:8px;padding:8px 14px;border-bottom:1px solid var(--border-soft);font-weight:700;font-size:var(--fs-sm);color:var(--navy)}.asec__h .link{margin-left:auto;font-size:var(--fs-xs);font-weight:600}
.asec .atwrap{border:0;border-radius:0 0 var(--r-lg) var(--r-lg)}
.adl{display:grid;grid-template-columns:150px minmax(0,1fr);gap:6px 12px;padding:10px 14px;margin:0;font-size:var(--fs-sm)}.adl dt{color:var(--text-3)}.adl dd{margin:0;color:var(--navy);min-width:0;overflow-wrap:anywhere}
.aact{list-style:none;margin:0;padding:6px 14px}.aact li{display:flex;gap:12px;padding:5px 0;border-top:1px solid var(--border-soft);font-size:var(--fs-sm)}.aact li:first-child{border-top:0}.aact time{color:var(--text-3);font-variant-numeric:tabular-nums;white-space:nowrap;min-width:120px}
.anotice{padding:8px 12px;border-radius:var(--r-lg);font-size:var(--fs-sm);margin-bottom:10px;border:1px solid}.anotice--bad{background:var(--danger-bg);border-color:var(--danger-bd);color:var(--danger-fg)}.anotice--warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn-fg)}
.ause{padding:10px 14px}.ause__r{display:grid;grid-template-columns:150px 1fr 150px;gap:10px;align-items:center;padding:4px 0;font-size:var(--fs-sm)}.ause__l{color:var(--text-2)}
.ause__b{height:8px;border-radius:var(--r-sm);background:var(--border-soft);overflow:hidden}.ause__b i{display:block;height:100%;background:var(--ok)}.ause__b i.is-warn{background:var(--warn)}.ause__b i.is-bad{background:var(--danger)}
.ause__v{text-align:right;color:var(--text-2);font-variant-numeric:tabular-nums}.ause__v b{color:var(--navy)}.ause__v small{color:var(--text-3);margin-left:4px}
.auv{position:relative;display:block;padding-bottom:5px;font-variant-numeric:tabular-nums}.auv b{color:var(--navy)}.auv small{color:var(--text-3);margin-left:3px}
.auv i{position:absolute;left:0;bottom:0;height:3px;background:var(--ok);border-radius:var(--r-sm);max-width:100%}.auv.is-warn i{background:var(--warn)}.auv.is-bad i{background:var(--danger)}.auv.is-warn b{color:var(--warn-fg)}.auv.is-bad b{color:var(--danger-fg)}
.txt-bad{color:var(--danger-fg)}.txt-warn{color:var(--warn-fg)}
.afunnel{padding:10px 14px}.afunnel__r{display:grid;grid-template-columns:120px 1fr 56px 48px;gap:10px;align-items:center;padding:5px 0;font-size:var(--fs-sm)}.afunnel__b{height:10px;background:var(--border-soft);border-radius:var(--r-sm);overflow:hidden}.afunnel__b i{display:block;height:100%;background:var(--blue)}
.afunnel__r b{text-align:right;font-variant-numeric:tabular-nums;color:var(--navy)}.afunnel__r small{color:var(--text-3);text-align:right}.afunnel .hint{margin:8px 0 0;font-size:var(--fs-xs)}
.aattn{padding:6px 0}.aattn__t{padding:6px 14px 2px;font-size:var(--fs-xs);font-weight:700;color:var(--text-3);letter-spacing:.04em}.aattn ul{list-style:none;margin:0;padding:0}
.aattn li a{display:flex;align-items:center;gap:8px;padding:6px 14px;font-size:var(--fs-sm);color:var(--navy);min-width:0}.aattn li a:hover{background:var(--bg-tint)}.aattn__n{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:40%}
.aattn small{color:var(--text-2);flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.aattn time{color:var(--text-3);font-size:var(--fs-xs);white-space:nowrap}
.adot{width:8px;height:8px;border-radius:50%;flex:none;background:var(--border-strong)}.adot--bad{background:var(--danger)}.adot--warn{background:var(--warn)}.adot--ok{background:var(--ok)}
.navlink--admin{color:var(--blue-deep)}
@media (max-width:1100px){.agrid2{grid-template-columns:1fr}}
@media (max-width:820px){
  .ashell{grid-template-columns:1fr}
  .aside{position:sticky;top:0;height:auto;z-index:50}.aside__menu{display:block}.aside__nav,.aside__foot{display:none}.aside.is-open .aside__nav,.aside.is-open .aside__foot{display:flex}
  .apage{padding:12px 14px 40px}.akpi{grid-template-columns:repeat(2,1fr)}.atool .input{width:100%}.ause__r{grid-template-columns:1fr}.adl{grid-template-columns:1fr}.afunnel__r{grid-template-columns:90px 1fr 48px 40px}
}
@media (max-width:820px){.ashell{grid-template-rows:auto 1fr}}

/* ===================== AI Productivity Layer (Phase 11) — same blue B2B system; results are 초안/후보 ===================== */
.btn--ai{border-color:var(--border-blue);color:var(--blue-deep);background:var(--bg-tint)}
.btn--ai:hover{background:var(--blue-soft)}
/* batch5 P1-1: the visible AI entry on the 요구사항 / WBS PC toolbar (left of the primary); narrower screens keep it in ⋯ */
@media (max-width:1023px){.ai-pc{display:none}}
.btn--ai::before{content:"";display:inline-block;width:8px;height:8px;border-radius:var(--r-sm);background:var(--blue);margin-right:7px;vertical-align:1px;transform:rotate(45deg)}
.wsh__ask{white-space:nowrap}
.spin{display:inline-block;width:14px;height:14px;border:2px solid var(--border);border-top-color:var(--blue);border-radius:50%;animation:aispin .8s linear infinite;vertical-align:-2px}
@keyframes aispin{to{transform:rotate(360deg)}}

/* dialog shell */
.scrim--ai{align-items:flex-start;padding-top:4vh}
.dialog.dialog--ai{max-width:min(1040px,96vw);width:100%;padding:0;max-height:92vh;display:flex;flex-direction:column;position:relative;overflow:hidden}
.dialog.dialog--ai-md{max-width:min(760px,96vw)}
.aid__h{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;padding:14px 18px 12px;border-bottom:1px solid var(--border-soft);flex:none}
.aid__h h3{margin:0;font-size:var(--fs-lg);display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.aid__tag{font-size:var(--fs-2xs);font-weight:700;color:var(--blue-deep);background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-sm);padding:1px 6px;letter-spacing:.02em}
.aid__sub{margin:4px 0 0;font-size:var(--fs-sm);color:var(--text-3);line-height:1.45}
.aid__hr{display:flex;align-items:center;gap:10px;flex:none}
.aid__b{padding:14px 18px;overflow:auto;flex:1;min-height:120px}
.aid__f{display:flex;align-items:center;gap:10px;padding:10px 18px;border-top:1px solid var(--border-soft);background:var(--bg-alt);flex:none;flex-wrap:wrap}
.aid__sp{flex:1}
.aid__btns{display:flex;gap:8px;margin-left:auto}
.aid__busy{position:absolute;inset:0;background:rgba(255,255,255,.82);display:flex;align-items:center;justify-content:center;gap:10px;font-size:var(--fs-md);font-weight:600;color:var(--navy);z-index:2}
.ai-credit{font-size:var(--fs-xs);color:var(--text-2);white-space:nowrap}
.ai-credit b{color:var(--navy)}
.ai-credit.is-short{color:var(--danger-fg)}.ai-credit.is-short em{font-style:normal;font-weight:700}
.aid__text{min-height:260px;font-size:var(--fs-md);line-height:1.55}
.aid__row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:6px}
.aid__notice{margin:6px 0 0;font-size:var(--fs-xs);color:var(--text-3)}
.aid__intro p{margin:0 0 6px;font-size:var(--fs-md);color:var(--text-2)}
.aid__sum{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:10px;font-size:var(--fs-md)}
.aid__warn{margin:0 0 10px;padding:8px 12px 8px 26px;background:var(--warn-bg);border:1px solid var(--warn-bd);border-radius:var(--r-lg);font-size:var(--fs-sm);color:var(--warn-fg)}
.aid__warn--sm{margin:8px 0 0;padding:6px 10px 6px 22px;font-size:var(--fs-xs)}
.aid__notes{margin:0 0 10px;padding:8px 12px 8px 26px;background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-lg);font-size:var(--fs-sm);color:var(--blue-deep)}
.aid__summary{background:var(--bg-alt);border:1px solid var(--border-soft);border-radius:var(--r-lg);padding:10px 12px;margin-bottom:12px;font-size:var(--fs-sm)}
.aid__summary b{display:block;font-size:var(--fs-xs);color:var(--text-3);margin-bottom:4px}.aid__summary p{margin:0;line-height:1.5}

/* requirement candidates */
.aic{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
.aic__i{display:grid;grid-template-columns:28px 1fr;gap:8px;border:1px solid var(--border);border-radius:var(--r-lg);padding:10px 12px;background:#fff;opacity:.72}
.aic__i.is-sel{opacity:1;border-color:var(--border-blue);background:#fff}
.aic__ck{display:flex;align-items:flex-start;padding-top:8px}
.aic__ck input{width:16px;height:16px;accent-color:var(--blue)}
.aic__ck--na{color:var(--text-3);justify-content:center;padding-top:6px}
.aic__m{min-width:0;display:flex;flex-direction:column;gap:6px}
.aic__t{display:flex;align-items:center;gap:8px}
.aic__n{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);width:18px;text-align:right;flex:none}
.aic__title{flex:1;font-weight:600}
.aic__desc{min-height:48px;font-size:var(--fs-sm)}
.aic__row{display:flex;gap:10px;flex-wrap:wrap;font-size:var(--fs-xs);color:var(--text-3)}
.aic__row label{display:flex;align-items:center;gap:6px}
.aic__crit .textarea{font-size:var(--fs-sm);min-height:44px;margin-top:2px}
.aic__src summary{font-size:var(--fs-xs);color:var(--text-3);cursor:pointer}
.aic__src q{display:block;margin-top:4px;font-size:var(--fs-sm);color:var(--text-2);background:var(--bg-alt);border-left:3px solid var(--border);padding:6px 10px;border-radius:var(--r-sm);quotes:none}
.aic__dup{font-size:var(--fs-sm);color:var(--warn-fg);background:var(--warn-bg);border-radius:var(--r);padding:5px 10px}
.aic__dup a{color:var(--warn-fg);text-decoration:underline}

/* WBS draft tree */
.pick-list--tall{max-height:52vh}
.wtree{border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.wtree__r{display:flex;align-items:center;gap:8px;padding:6px 10px 6px calc(10px + var(--d,0) * 26px);border-top:1px solid var(--border-soft);background:#fff;opacity:.7}
.wtree__r:first-child{border-top:0}
.wtree__r.is-sel{opacity:1}
.wtree__r::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--border);flex:none}
.wtree__r.is-sel::before{background:var(--blue)}
.wtree__title{flex:1;min-width:160px}
.wtree__parent{max-width:200px}
.wtree__meta{display:flex;gap:4px;flex-wrap:wrap;margin-left:auto}

/* impact candidates */
.aim{margin-top:6px}
.aim .dh{margin-top:14px}
.aim__l{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.aim__i{display:grid;grid-template-columns:28px 1fr;gap:8px;border:1px solid var(--border);border-radius:var(--r-lg);padding:8px 10px;background:#fff;opacity:.72}
.aim__i.is-sel{opacity:1;border-color:var(--border-blue)}
.aim__i.is-done{opacity:.85;background:var(--bg-alt)}
.aim__m{min-width:0}
.aim__t{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:var(--fs-sm)}
.aim__t b{font-weight:600}
.aim__r{margin:3px 0 0;font-size:var(--fs-sm);color:var(--text-2);line-height:1.45}

/* assistant panel */
.aipanel{position:fixed;inset:0;z-index:120}
.aipanel__scrim{position:absolute;inset:0;background:rgba(16,24,40,.38)}
.aipanel__p{position:absolute;top:0;right:0;bottom:0;width:min(560px,100%);background:#fff;box-shadow:var(--sh-lift);display:flex;flex-direction:column;border-left:1px solid var(--border)}
.aipanel__h{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:14px 18px;border-bottom:1px solid var(--border-soft)}
.aipanel__h b{display:block;font-size:var(--fs-md)}.aipanel__h small{display:block;margin-top:2px}
.aipanel__b{flex:1;overflow:auto;padding:16px 18px;background:var(--bg-alt);display:flex;flex-direction:column;gap:12px}
.aipanel__f{border-top:1px solid var(--border-soft);padding:10px 18px 14px;display:flex;flex-direction:column;gap:8px}
.aipanel__meta{display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:var(--fs-xs)}
.aipanel__in{display:flex;gap:8px;align-items:flex-end}
.aipanel__in .textarea{flex:1;min-height:48px;font-size:var(--fs-md)}
.aichat{display:flex}
.aichat--u{justify-content:flex-end}
.aichat__m{max-width:92%;padding:10px 12px;border-radius:var(--r-lg);font-size:var(--fs-md);line-height:1.55;background:#fff;border:1px solid var(--border);color:var(--navy)}
.aichat--u .aichat__m{background:var(--blue);color:#fff;border-color:var(--blue)}
.aichat__m.is-err{background:var(--danger-bg);border-color:var(--danger-bd);color:var(--danger-fg)}
.aichat__m.is-wait{color:var(--text-3);display:flex;align-items:center;gap:8px}
.aichat__m code{font-family:var(--mono);font-size:var(--fs-sm);background:var(--bg-alt);padding:0 4px;border-radius:var(--r-sm)}
.aichat__refs{display:flex;flex-direction:column;gap:4px;margin-top:8px;padding-top:8px;border-top:1px dashed var(--border)}
.aichat__refs a{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--navy);text-decoration:none}
.aichat__refs a:hover{color:var(--blue-deep)}
.aichat__meta{display:block;margin-top:6px;color:var(--text-3)}
.aichat__hello p{margin:0 0 10px;font-size:var(--fs-sm);color:var(--text-2)}
.aichat__sug{display:flex;flex-wrap:wrap;gap:6px}

@media (max-width:767px){
  .scrim--ai{padding:0}
  .dialog.dialog--ai,.dialog.dialog--ai-md{max-width:none;max-height:none;height:100vh;height:100dvh;border-radius:0}
  .aid__h{flex-direction:column}.aid__hr{width:100%;justify-content:space-between}
  .aic__row label{width:100%}
  .wtree__r{flex-wrap:wrap}.wtree__title{min-width:0;width:100%}
  .aipanel__p{width:100%}
}
/* ===== Execution Workspace (Overview = Current Stage + Exceptions + one Summary bar) ===== */
.btn--ghost{background:transparent;border:1px solid var(--border);color:var(--text-2)}
.btn--ghost:hover{background:var(--bg-alt);color:var(--navy)}
.wsh__act{display:inline-flex;gap:6px;align-items:center;flex:none}
.wsh__act .btn--sm{height:28px;padding:0 10px;font-size:var(--fs-sm)}
.wsh__more{font-size:var(--fs-md);letter-spacing:1px;min-width:30px}
.menuwrap{position:relative;display:inline-flex}
.amenu{position:absolute;top:calc(100% + 6px);right:0;z-index:60;min-width:220px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:0 10px 30px rgba(16,24,40,.12);padding:6px;font-size:var(--fs-sm)}
.amenu>a,.amenu>button,.amenu__list>a{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;padding:7px 10px;border-radius:var(--r);border:0;background:none;text-align:left;color:var(--navy);cursor:pointer;font:inherit;white-space:nowrap}
.amenu>a:hover,.amenu>button:hover,.amenu__list>a:hover{background:var(--bg-alt)}
.amenu .is-danger{color:var(--danger-fg)}
.amenu hr{border:0;border-top:1px solid var(--border-soft);margin:5px 2px}
.amenu__h{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);padding:4px 10px 2px}
.amenu__empty{display:block;padding:6px 10px;color:var(--text-3);font-size:var(--fs-sm);white-space:normal}
.amenu .chip{height:20px;font-size:var(--fs-xs);padding:0 8px}

/* Activity slide-over */
.actpanel{position:fixed;inset:0;z-index:80}
.actpanel__scrim{position:absolute;inset:0;background:rgba(16,24,40,.28)}
.actpanel__p{position:absolute;top:0;right:0;bottom:0;width:min(460px,100vw);background:#fff;display:flex;flex-direction:column;box-shadow:-10px 0 30px rgba(16,24,40,.12)}
.actpanel__h{display:flex;align-items:center;padding:12px 16px;border-bottom:1px solid var(--border-soft);font-size:var(--fs-md)}
.actpanel__f{display:flex;gap:6px;flex-wrap:wrap;padding:10px 16px;border-bottom:1px solid var(--border-soft)}
.fchip2{height:26px;padding:0 10px;border-radius:999px;border:1px solid var(--border);background:#fff;font-size:var(--fs-sm);color:var(--text-2);cursor:pointer}
.fchip2.is-on{background:var(--navy);border-color:var(--navy);color:#fff}
.actpanel__b{flex:1;overflow:auto}
.actlist{list-style:none;margin:0;padding:0}
.actlist li{padding:10px 16px;border-bottom:1px solid var(--border-soft);font-size:var(--fs-sm)}
.actlist li.is-comment{background:var(--bg-alt)}
.actlist__m{display:flex;align-items:center;gap:8px;color:var(--text-3);font-size:var(--fs-xs)}
.actlist__m b{color:var(--text-2);font-weight:600}.actlist__m time{margin-left:auto;font-variant-numeric:tabular-nums}
.actlist__m .chip{height:20px;font-size:var(--fs-2xs);padding:0 7px}
.actlist a{display:block;margin-top:4px;font-weight:600;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.actlist a:hover{color:var(--blue-deep)}
.actlist p{margin:2px 0 0;color:var(--text-2);line-height:1.45;word-break:keep-all;overflow-wrap:anywhere}

/* Overview layout */
.ov .ov__grid{display:grid;grid-template-columns:minmax(0,1.65fr) minmax(320px,1fr);gap:12px;align-items:start}
.ov .ov__sum{margin-top:12px;display:flex;flex-direction:column;gap:8px}

/* Current Stage */
.stage{background:#fff;border:1px solid var(--border);border-top:3px solid var(--blue);border-radius:var(--r-lg);overflow:hidden}
.stage__h{display:flex;align-items:center;gap:16px;padding:14px 18px 4px}
.stage__t{display:flex;align-items:baseline;gap:10px;min-width:0;flex:1}
.stage__no{font-size:var(--fs-sm);font-weight:700;color:var(--blue-deep)}
.stage__t h2{margin:0;font-size:var(--fs-xl);font-weight:800;letter-spacing:-0.03em;color:var(--navy)}
.stage__cur{font-size:var(--fs-xs);font-weight:700;color:var(--blue-deep);background:var(--bg-tint);border-radius:999px;padding:2px 8px}
.stage__p{display:flex;align-items:center;gap:10px;flex:none;width:200px}
.stage__p b{font-size:var(--fs-md);font-variant-numeric:tabular-nums;color:var(--navy);white-space:nowrap}
.stage__p .pbar{flex:1;height:6px}
.stage__d{margin:0;padding:0 18px 10px;font-size:var(--fs-sm);color:var(--text-2)}
.stage__list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border-soft)}
.stage__list li{display:grid;grid-template-columns:22px minmax(150px,.75fr) minmax(0,1.5fr) auto;gap:4px 14px;align-items:center;padding:9px 18px;border-bottom:1px solid var(--border-soft)}
.stage__list li:last-child{border-bottom:0}
.stage__list li.is-next{background:var(--bg-alt)}
.stage__list li.is-done .stage__st{color:var(--text-3);text-decoration:line-through}
.stage__list li.is-done .stage__info{color:var(--text-3)}
.stage__ck{position:relative;width:18px;height:18px;cursor:pointer}
.stage__ck input{position:absolute;inset:0;opacity:0;margin:0;cursor:pointer}
.stage__ck span{position:absolute;inset:0;border:1.5px solid var(--border-strong);border-radius:var(--r-sm);background:#fff}
.stage__ck input:checked+span{background:var(--blue);border-color:var(--blue)}
.stage__ck input:checked+span::after{content:"";position:absolute;left:5px;top:1px;width:5px;height:10px;border:solid #fff;border-width:0 2px 2px 0;transform:rotate(45deg)}
.stage__ck input:focus-visible+span{outline:2px solid var(--blue);outline-offset:2px}
.stage__ck input:disabled+span{opacity:.5}
.stage__st{font-weight:700;color:var(--navy);font-size:var(--fs-md);word-break:keep-all}
.stage__st:hover{color:var(--blue-deep)}
.stage__info{font-size:var(--fs-sm);color:var(--text-2);word-break:keep-all;overflow-wrap:break-word;min-width:0}
.stage__info.is-warn{color:var(--warn-fg)}
.stage__go{font-size:var(--fs-sm);font-weight:600;color:var(--blue-deep);white-space:nowrap}
.stage__go:hover{text-decoration:underline}
.stage__f{display:flex;align-items:center;gap:12px;padding:10px 18px;border-top:1px solid var(--border-soft);background:var(--bg-alt)}
.stage__msg{flex:1;font-size:var(--fs-sm);color:var(--text-2);min-width:0}
.stage__msg b{color:var(--navy)}
.stage__btns{display:flex;gap:6px;flex:none}

/* Summary bar: one line, exceptions colored */
.sumbar{display:flex;flex-wrap:wrap;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.sumbar__i{display:flex;align-items:baseline;gap:6px;padding:9px 14px;border-right:1px solid var(--border-soft);font-size:var(--fs-sm);color:var(--text-3);white-space:nowrap;min-width:0}
.sumbar__i:last-child{border-right:0}
.sumbar__i:hover{background:var(--bg-alt)}
.sumbar__i b{font-size:var(--fs-md);color:var(--navy);font-variant-numeric:tabular-nums;max-width:220px;overflow:hidden;text-overflow:ellipsis}
.sumbar__i em{font-style:normal;font-size:var(--fs-xs);font-weight:700;border-radius:var(--r-sm);padding:0 5px}
.sumbar__i em.is-warn{background:var(--warn-bg);color:var(--warn-fg)}
.sumbar__i em.is-crit{background:var(--danger-bg);color:var(--danger-fg)}
.sumbar__i em.is-plain{background:var(--border-soft);color:var(--text-2)}

/* Health: one line, reasons on demand */
.hline{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg)}
.hline>summary{list-style:none;display:flex;align-items:center;flex-wrap:wrap;gap:6px 14px;padding:8px 14px;cursor:pointer;font-size:var(--fs-sm);color:var(--text-2)}
.hline>summary::-webkit-details-marker{display:none}
.hline__l{font-weight:700;color:var(--navy)}
.hline__d{display:inline-flex;align-items:center;gap:6px}
.hline__note{color:var(--text-3)}
.hline__more{margin-left:auto;color:var(--blue-deep);font-weight:600}
.hline[open] .hline__more::after{content:" ▴"}.hline:not([open]) .hline__more::after{content:" ▾"}
.hline .hchip--sm{height:20px;padding:0 8px;font-size:var(--fs-xs)}
.hline__r{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:0;border-top:1px solid var(--border-soft)}
.hline__r>div{padding:10px 14px;border-right:1px solid var(--border-soft);font-size:var(--fs-sm)}
.hline__r>div:last-child{border-right:0}
.hline__r b{display:flex;align-items:center;gap:6px;color:var(--navy);margin-bottom:4px}
.hline__r ul{margin:0;padding-left:16px;color:var(--text-2);line-height:1.5}

@media (max-width:1100px){.ov .ov__grid{grid-template-columns:1fr}.hline__r{grid-template-columns:repeat(2,minmax(0,1fr))}.hline__r>div{border-bottom:1px solid var(--border-soft)}}
@media (max-width:767px){
  .stage__h{flex-wrap:wrap;padding:12px 14px 4px}.stage__p{width:100%}.stage__d{padding:0 14px 8px}
  .stage__list li{grid-template-columns:22px minmax(0,1fr);padding:9px 14px}
  .stage__info,.stage__go{grid-column:2}
  .stage__f{flex-wrap:wrap;padding:10px 14px}.stage__btns{width:100%}.stage__btns .btn{flex:1}
  .sumbar__i{flex:1 1 45%;border-bottom:1px solid var(--border-soft)}
  .hline__r{grid-template-columns:1fr}
  .wsh__act .btn--sm{padding:0 8px}
}
@media (max-width:820px){.wsh__act [data-act="activity"]{display:none}}
@media (max-width:480px){.wsh__act [data-act="reports"]{display:none}.wsh__row{overflow:hidden}.wsh__name{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}}
@media (min-width:821px){.wsh .amenu .amenu__act{display:none}}
@media (min-width:481px){.wsh .amenu .amenu__act--sm{display:none}}

/* Working screens: one header row (view tabs + inline counts), then the filter toolbar, then the grid */
.rhead{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.summary.summary--inline{display:flex;flex-wrap:wrap;margin:0;border-radius:var(--r-lg);background:#fff}
.summary--inline>div{padding:4px 12px}
.summary--inline b{font-size:var(--fs-md)}
.rrow2{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.rrow2 .kstrip,.rrow2 .qa{margin-bottom:0}
.rrow2 .qa{flex:1;min-width:240px}
.rrow2 .qa .input{max-width:none}
@media (max-width:767px){.rhead .summary--inline{width:100%}}
/* Large detail modal: use the width — three field columns, shorter description box */
@media (min-width:1100px){.drawer .dgrid{grid-template-columns:repeat(3,minmax(0,1fr))}.drawer .ddesc{min-height:84px}}
@media (max-width:767px){.ov .sumbar__i{flex:1 1 100%;border-right:0;overflow:hidden}.wsh .chip,.wsh [class*="chip"]{white-space:nowrap}}

/* ---------- 프로젝트 홈 (read-only) ---------- */
.ov .ov__main{display:flex;flex-direction:column;gap:12px;min-width:0}
.stage__p small{font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap}
.stage__list--ro li{grid-template-columns:22px minmax(150px,.8fr) minmax(0,1.5fr) auto}
.stage__mk{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--border-strong);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-2xs);font-weight:700;color:var(--text-2);font-style:normal;background:#fff}
.stage__mk.is-done{background:var(--blue);border-color:var(--blue);color:#fff}
.stage__mk.is-warn{background:var(--warn-bg);border-color:var(--warn);color:var(--warn-fg)}
.stage__list li.is-done .stage__st{text-decoration:none;color:var(--text-2);font-weight:600}
.stage__nx{font-size:var(--fs-2xs);font-weight:700;color:var(--blue-deep);background:var(--bg-tint);border-radius:999px;padding:1px 7px;margin-left:8px;vertical-align:1px;font-style:normal}
.exec{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 18px 14px}
.exec .ovh{padding:0 0 8px;border:0}
.exec .ovh small{margin-left:8px}
.exec__row{display:flex;gap:28px;align-items:center;flex-wrap:wrap}
.exec__big{display:flex;align-items:center;gap:12px;min-width:220px;flex:1;color:inherit;text-decoration:none}
.exec__big b{font-size:var(--fs-2xl);font-weight:800;letter-spacing:-0.03em;color:var(--navy);font-variant-numeric:tabular-nums}
.exec__big .pbar{flex:1;height:8px}
.exec__k{display:flex;flex-direction:column;gap:2px;text-decoration:none;color:inherit;min-width:92px}
.exec__k span{font-size:var(--fs-xs);color:var(--text-3)}
.exec__k b{font-size:var(--fs-lg);color:var(--navy);font-variant-numeric:tabular-nums}
.exec__k b.is-crit{color:var(--danger-fg)}
.exec__k small{font-size:var(--fs-xs);color:var(--text-2);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
a.exec__k:hover b,a.exec__big:hover b{color:var(--blue-deep)}
.exec--empty .exec__none{margin:0 0 6px;font-size:var(--fs-sm);color:var(--text-2);line-height:1.6}
.stages{margin-top:12px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 18px 14px}
.stages .ovh{padding:0 0 10px;border:0}
.stages .ovh small{margin-left:8px;font-weight:400}
.stages__list{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.stages__list a{display:flex;flex-direction:column;gap:3px;padding:10px 12px;border:1px solid var(--border);border-radius:var(--r-lg);text-decoration:none;color:var(--navy);background:#fff;min-height:84px}
.stages__list a:hover{border-color:var(--border-blue);background:var(--bg-tint)}
.stages__list i{width:20px;height:20px;border-radius:50%;border:1.5px solid var(--border-strong);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-2xs);font-weight:700;font-style:normal;color:var(--text-2)}
.stages__list li.is-done i{background:var(--blue);border-color:var(--blue);color:#fff}
.stages__list li.is-current a{border-color:var(--blue);box-shadow:inset 0 0 0 1px var(--blue)}
.stages__list li.is-current i{border-color:var(--blue);color:var(--blue-deep)}
.stages__list li.is-open i{border-color:var(--warn);color:var(--warn-fg)}
.stages__n{font-weight:700;font-size:var(--fs-sm)}
.stages__list small{font-size:var(--fs-xs);color:var(--text-3)}
.stages__list time{font-size:var(--fs-2xs);color:var(--text-2)}
@media (max-width:1100px){.stages__list{grid-template-columns:repeat(4,minmax(0,1fr))}}
@media (max-width:700px){.stages__list{grid-template-columns:repeat(2,minmax(0,1fr))}}
.phase__rec{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);border:1px solid var(--border);border-radius:999px;padding:1px 8px;margin-right:4px}
.phase__crumb{display:flex;gap:12px;align-items:center;margin:6px 0 0;font-size:var(--fs-sm)}

/* ---------- 프로젝트 정의 ---------- */
.defp__head{display:flex;align-items:flex-start;gap:24px;margin:14px 0 12px}
.defp__head h2{margin:0 0 4px;font-size:var(--fs-xl);font-weight:800;letter-spacing:-0.03em;color:var(--navy)}
.defp__head p{margin:0;font-size:var(--fs-sm);color:var(--text-2);max-width:760px;line-height:1.6}
.defp__prog{margin-left:auto;flex:none;width:220px;display:grid;grid-template-columns:auto 1fr;gap:2px 8px;align-items:center;font-size:var(--fs-xs);color:var(--text-3)}
.defp__prog b{font-size:var(--fs-lg);color:var(--navy);font-variant-numeric:tabular-nums}
.defp__prog .pbar{grid-column:1/-1;height:6px}
.defp__prog em{grid-column:1/-1;font-style:normal;font-size:var(--fs-xs)}
.defp__prog em.is-warn{color:var(--warn-fg)}.defp__prog em.is-ok{color:var(--ok-fg)}
.defp__grid{display:grid;grid-template-columns:200px minmax(0,1fr);gap:16px;align-items:start}
.defp__nav{position:sticky;top:96px}
.defp__nav ol{list-style:none;margin:0 0 12px;padding:0;display:flex;flex-direction:column;gap:2px}
.defp__nav a{display:flex;align-items:center;gap:8px;padding:7px 10px;border-radius:var(--r);text-decoration:none;color:var(--navy);font-size:var(--fs-sm);font-weight:600}
.defp__nav a:hover{background:var(--bg-tint)}
.defp__nav i{width:18px;height:18px;border-radius:50%;border:1.5px solid var(--border-strong);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-2xs);font-style:normal;color:var(--text-2);flex:none}
.defp__nav li.is-done i{background:var(--blue);border-color:var(--blue);color:#fff}
.defp__nav li.is-ready i{border-color:var(--blue);color:var(--blue-deep)}
.defp__nav li.is-warn i{background:var(--warn-bg);border-color:var(--warn);color:var(--warn-fg)}
.defp__main{display:flex;flex-direction:column;gap:14px;min-width:0}
.def{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;scroll-margin-top:100px}
.def.is-done{border-left:3px solid var(--blue)}
.def__h{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:14px 18px 6px}
.def__h h3{margin:0;font-size:var(--fs-lg);font-weight:800;letter-spacing:-0.02em;color:var(--navy)}
.def__h p{flex-basis:100%;margin:0;font-size:var(--fs-sm);color:var(--text-2)}
.def__b{padding:6px 18px 14px;display:flex;flex-direction:column;gap:12px}
.def__b .field{margin:0}
.def__b .field>label{display:flex;align-items:baseline;gap:8px;font-size:var(--fs-sm);font-weight:700;color:var(--navy);margin-bottom:6px}
.def__b .textarea{width:100%;min-height:0}
.def__cols{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.def__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.def__list li{display:flex;gap:6px;align-items:center}
.def__list li .input{flex:1;min-width:0}
.def__list--dates li input[type=date]{flex:none;width:150px}
.def__x{width:26px;height:26px;border:1px solid var(--border);background:#fff;border-radius:var(--r);color:var(--text-3);cursor:pointer;font-size:var(--fs-md);line-height:1;flex:none}
.def__x:hover{color:var(--danger-fg);border-color:var(--danger-bd)}
.def__add{width:auto;align-self:flex-start;margin-top:6px;font-size:var(--fs-sm)}
.def__tbl{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}
.def__tbl th{text-align:left;font-size:var(--fs-xs);color:var(--text-3);font-weight:600;padding:0 6px 6px 0}
.def__tbl td{padding:0 6px 6px 0;vertical-align:middle}
.def__tbl td:last-child,.def__tbl th:last-child{width:30px;padding-right:0}
.def__tbl .input,.def__tbl .select{width:100%;min-width:0}
.def__tbl .def__empty td{padding:12px;border:1px dashed var(--border);border-radius:var(--r-lg);color:var(--text-2);font-size:var(--fs-sm);text-align:center}
.def__dates{display:flex;align-items:center;gap:12px;font-size:var(--fs-sm);color:var(--text-2);padding:8px 12px;background:var(--bg-alt);border-radius:var(--r)}
.def__dates b{color:var(--navy)}
.def__ms{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}
.def__ms a{display:flex;align-items:center;gap:8px;padding:6px 10px;border:1px solid var(--border-soft);border-radius:var(--r);text-decoration:none;color:var(--navy);font-size:var(--fs-sm)}
.def__ms a:hover{background:var(--bg-tint)}
.def__ms time{margin-left:auto;color:var(--text-2);font-size:var(--fs-xs)}
.def__legacy{border:1px dashed var(--border);border-radius:var(--r);padding:8px 12px;font-size:var(--fs-sm)}
.def__legacy summary{cursor:pointer;color:var(--text-2);font-weight:600}
.def__legacy pre{white-space:pre-wrap;font-family:inherit;margin:8px 0 4px;color:var(--navy);line-height:1.55}
.def__foot{display:flex;align-items:center;gap:12px;padding:10px 18px;border-top:1px solid var(--border-soft);background:var(--bg-alt);font-size:var(--fs-sm)}
.def__meta{flex:1;color:var(--text-2);min-width:0}
.def__meta .is-warn{color:var(--warn-fg)}
.def__btns{display:flex;align-items:center;gap:6px;flex:none}
.def__save{font-size:var(--fs-xs);color:var(--warn-fg);margin-right:4px}
.def--memo .def__h h3 small{font-weight:500;font-size:var(--fs-xs)}
@media (max-width:900px){.defp__grid{grid-template-columns:1fr}.defp__nav{position:static}.defp__nav ol{flex-direction:row;flex-wrap:wrap}.def__cols{grid-template-columns:1fr}.defp__head{flex-direction:column;gap:10px}.defp__prog{margin-left:0}}

/* Excel import — WBS column mapping + tree preview */
.imp__maphead{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.imp__maphead p{margin:0;font-size:var(--fs-sm);color:var(--text-2);flex:1;min-width:280px}
.imp__map{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:12px}
.imp__mapcol{border:1px solid var(--border);border-radius:var(--r-lg);padding:10px 12px}
.imp__mapcol h4{margin:0 0 8px;font-size:var(--fs-sm);color:var(--text-3);text-transform:uppercase;letter-spacing:.04em}
.imp__mapcol label{display:grid;grid-template-columns:110px 1fr;align-items:center;gap:8px;margin-bottom:6px;font-size:var(--fs-sm)}
.imp__mapcol label span{color:var(--text-2)}
.imp__h4{margin:12px 0 6px;font-size:var(--fs-sm)}
.imp__tbl--raw th.is-mapped{background:var(--bg-tint);color:var(--blue-deep)}
.imp__tree{border:1px solid var(--border);border-radius:var(--r-lg);margin-bottom:10px;background:#fff}
.imp__tree summary{padding:8px 12px;font-weight:600;font-size:var(--fs-sm);cursor:pointer}
.imp__treebody{max-height:260px;overflow:auto;padding:4px 12px 8px;border-top:1px solid var(--border-soft)}
.imp__node{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);padding:2px 0 2px calc(var(--d,0) * 20px);color:var(--text)}
.imp__node.is-top{font-weight:700;color:var(--navy)}
.imp__node.is-bad{color:var(--danger-fg)}
.imp__node .mono{color:var(--text-3);min-width:44px}
@media (max-width:760px){.imp__map{grid-template-columns:1fr}}

/* ---------- Tree WBS (Phase 12) ---------- */
.gtable tbody tr.wd0 td.ttl .wtitle__t{font-weight:700}
.gtable tbody tr.is-group td{background:var(--bg-alt)}
.gtable tbody tr.is-group.wd0 td{background:var(--bg-alt)}
.gtable tbody tr.is-group.wd0 td.ttl .wtitle__t{font-weight:700;color:var(--navy)}
.gtable tbody tr.wd1 td.ttl .wtitle__t{font-weight:600}
.gtable tbody tr.wd2 td.ttl .wtitle__t,.gtable tbody tr.wd3 td.ttl .wtitle__t,.gtable tbody tr.wd4 td.ttl .wtitle__t{font-weight:500}
.gtable tbody tr.is-ms td.ttl .wtitle__t{font-weight:500;color:var(--text-2)}
.gtable tbody tr.is-group td .dim{color:var(--text-3)}
.wtitle__t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.wact{display:inline-flex;gap:4px;margin-left:auto;flex:none}
.wact .wadd{margin-left:0}
.wmenu{font-size:var(--fs-sm);letter-spacing:1px}
.gtable tr:hover .wmenu,.wmenu:focus{opacity:1}
.wdrag{opacity:0;cursor:grab;color:var(--text-3);font-size:var(--fs-2xs);letter-spacing:-2px;width:12px;flex:none;user-select:none;margin-left:-6px}
.gtable tr:hover .wdrag{opacity:.7}
.gtable tbody tr.is-dragging td{opacity:.45}
.gtable tbody tr.drop-before td{box-shadow:inset 0 2px 0 var(--blue)}
.gtable tbody tr.drop-after td{box-shadow:inset 0 -2px 0 var(--blue)}
.gtable tbody tr.drop-inside td{background:var(--blue-soft)!important}
.gtable tbody tr.drop-inside td.ttl{box-shadow:inset 2px 0 0 var(--blue)}
.gtable tbody tr.is-ghost td{background:var(--warn-bg);cursor:default}
.gtable tbody tr.is-ghost td.ttl{overflow:visible}
.wghost{gap:6px}
.wghost__in{flex:1;min-width:160px;height:26px;font-size:var(--fs-sm)}
.pcell.is-roll{opacity:.8}
.cell--late{color:var(--danger-fg);border-color:var(--danger-bd);background:var(--danger-bg);font-weight:600}
.wlate{font-style:normal;font-size:var(--fs-2xs);font-weight:700;color:var(--danger-fg);border:1px solid var(--danger-bd);background:var(--danger-bg);border-radius:var(--r-sm);padding:0 5px;flex:none}
.wcode{font-variant-numeric:tabular-nums}
.wempty{margin:18px 0;padding:56px 24px;border:1px dashed var(--border);border-radius:var(--r-lg);text-align:center;background:#fff}
.wempty h2{font-size:var(--fs-lg);color:var(--navy);margin:0 0 8px}
.wempty p{color:var(--text-2);max-width:560px;margin:0 auto 18px;line-height:1.65;font-size:var(--fs-sm)}
.wempty__a{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
.amenu.amenu--row{position:fixed;top:auto;right:auto;z-index:130;min-width:210px;border-radius:var(--r-lg);box-shadow:var(--sh-lift);display:flex;flex-direction:column}
.amenu--row button{display:block;width:100%;text-align:left;border:0;background:none;font:inherit;font-size:var(--fs-sm);color:var(--navy);padding:7px 10px;border-radius:var(--r);cursor:pointer}
.amenu--row button:hover:not(:disabled),.amenu--row button:focus-visible{background:var(--bg-tint);outline:none}
.amenu--row button:disabled{color:var(--muted);cursor:default}
.amenu--row button.is-danger{color:var(--danger-fg)}
.amenu--row hr{border:0;border-top:1px solid var(--border-soft);margin:4px 0}
.toast--act{display:flex;align-items:center;gap:14px;padding:10px 12px 10px 16px}
.toast__a{border:0;background:rgba(255,255,255,.14);color:#fff;font:inherit;font-weight:700;padding:5px 10px;border-radius:var(--r);cursor:pointer}
.toast__a:hover{background:rgba(255,255,255,.24)}
.toast__x{border:0;background:none;color:rgba(255,255,255,.7);font-size:var(--fs-lg);cursor:pointer;padding:0 2px;line-height:1}
.choicelist{display:flex;flex-direction:column;gap:8px;margin-bottom:16px}
.choicelist__i{display:flex;flex-direction:column;align-items:flex-start;gap:3px;text-align:left;border:1px solid var(--border);background:#fff;border-radius:var(--r-lg);padding:10px 12px;font:inherit;cursor:pointer;color:var(--navy)}
.choicelist__i:hover,.choicelist__i:focus-visible{border-color:var(--blue);background:var(--bg-tint);outline:none}
.choicelist__i small{color:var(--text-2);font-size:var(--fs-xs)}
.choicelist__i.is-danger b{color:var(--danger-fg)}
.dpane-hist .act__f,.dpane-cmt .act__f{display:none}

/* ---------- Jira integration (Phase 12) ---------- */
.jx{display:inline-flex;align-items:baseline;gap:3px;font-size:var(--fs-sm);font-weight:700;color:var(--text-2);font-variant-numeric:tabular-nums}
.jx small{font-size:var(--fs-2xs);font-weight:600;color:var(--text-3)}
.jx.is-run{color:var(--blue-deep)}.jx.is-done{color:var(--ok-fg)}
.rjcell{display:inline-flex;align-items:center;gap:4px;white-space:nowrap}
.jx em{font-style:normal;color:var(--warn-fg);font-weight:800;margin-left:2px}
.jx-inline{margin-left:6px;font-size:var(--fs-2xs);font-weight:700;color:var(--blue-deep);border:1px solid var(--border-blue);border-radius:var(--r-sm);padding:0 5px;vertical-align:1px}
.jhead{display:flex;align-items:center;gap:8px;padding:4px 0 10px;font-size:var(--fs-sm)}
.jlist{list-style:none;margin:0;padding:0;border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden}
.jrow{display:grid;grid-template-columns:86px minmax(0,1fr) auto 110px 70px 28px;gap:8px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--border-soft);font-size:var(--fs-sm)}
.jrow:last-child{border-bottom:0}
.jrow.is-missing{background:var(--danger-bg)}
.jrow__k{font-weight:700;color:var(--blue-deep);text-decoration:none}
.jrow__k[data-nolink]{pointer-events:none;color:var(--navy)}
.jrow__t{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--navy)}
.jrow__a{font-size:var(--fs-sm);color:var(--text-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.jrow time{font-size:var(--fs-xs);text-align:right}
.drawer--lg [data-rjira-list] .jrow{grid-template-columns:72px minmax(0,1fr) auto 28px}.drawer--lg [data-rjira-list] .jrow__a,.drawer--lg [data-rjira-list] .jrow time{display:none}   /* 480px requirement drawer: key · summary · status · × */
.jrate{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;margin-top:10px;padding:10px 12px;background:var(--bg-alt);border-radius:var(--r-lg);font-size:var(--fs-sm)}
.jrate b{color:var(--navy);font-variant-numeric:tabular-nums}
.jrate em.is-warn{font-style:normal;color:var(--warn-fg);flex-basis:100%}
.jsum{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:4px 0 14px}
.jsum div{background:var(--bg-alt);border-radius:var(--r-lg);padding:8px 12px;display:flex;flex-direction:column;gap:2px}
.jsum span{font-size:var(--fs-xs);color:var(--text-3)}.jsum b{font-size:var(--fs-xl);color:var(--navy);font-variant-numeric:tabular-nums}.jsum small{font-size:var(--fs-2xs);color:var(--text-2)}
.jsum__r{border:1px solid var(--border-blue);background:#fff!important}
.jl-sel{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:8px 0 4px;font-size:var(--fs-sm);min-height:20px}
.jl-taken{grid-column:1/-1;font-size:var(--fs-xs);color:var(--warn-fg)}
.pick.is-disabled{opacity:.6;cursor:not-allowed}
.jinfo{display:grid;grid-template-columns:150px 1fr;gap:8px 14px;margin:0 0 14px;font-size:var(--fs-sm)}
.jinfo dt{color:var(--text-3);font-size:var(--fs-sm)}.jinfo dd{margin:0;color:var(--navy);min-width:0;overflow-wrap:anywhere}
.jact{margin-top:14px;font-size:var(--fs-sm)}.jact summary{cursor:pointer;color:var(--text-2);font-weight:600}
.jact ol{list-style:none;margin:8px 0 0;padding:0;display:flex;flex-direction:column;gap:4px;max-height:200px;overflow:auto}
.jact li{display:grid;grid-template-columns:70px 1fr auto;gap:8px;padding:4px 0;border-bottom:1px solid var(--border-soft)}
.jact time{color:var(--text-3)}
.scrim .dialog .actions .sp{flex:1}
.btn.is-danger{color:var(--danger-fg)}
.icard{display:flex;gap:14px;align-items:flex-start}
.icard__logo{width:40px;height:40px;border-radius:var(--r-lg);background:#0052CC;/* exception: Jira brand mark */color:#fff;font-weight:800;font-size:var(--fs-xl);display:flex;align-items:center;justify-content:center;flex:none}
.icard__m{min-width:0;flex:1}
.icard__t{display:flex;align-items:center;gap:8px;font-size:var(--fs-md)}
.icard__site{margin:2px 0 8px;font-size:var(--fs-sm)}
.icard__d{display:grid;grid-template-columns:110px 1fr;gap:4px 10px;margin:0;font-size:var(--fs-sm)}
.icard__d dt{color:var(--text-3)}.icard__d dd{margin:0;color:var(--navy)}
.exec__jira{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-top:10px;padding-top:10px;border-top:1px dashed var(--border);font-size:var(--fs-sm);color:var(--text-2)}
.exec__jl{font-weight:700;color:var(--navy)}.exec__jl small{margin-left:4px;color:var(--text-3);font-weight:600}
.exec__jira b{color:var(--navy)}.exec__jira em{font-style:normal;font-weight:700;color:var(--blue-deep)}
@media (max-width:767px){.jrow{grid-template-columns:76px minmax(0,1fr) 28px}.jrow .chip,.jrow__a,.jrow time{display:none}.jsum{grid-template-columns:repeat(2,minmax(0,1fr))}.jinfo{grid-template-columns:1fr}.icard__d{grid-template-columns:1fr}}

/* ---- Phase 13: Google sign-in, invitation landing, invite tables ---- */
.auth__or{display:flex;align-items:center;gap:12px;margin:22px 0 16px;color:var(--text-3);font-size:13px}
.auth__or::before,.auth__or::after{content:"";flex:1;height:1px;background:var(--border-soft)}
.btn--google{display:inline-flex;align-items:center;justify-content:center;gap:10px;text-decoration:none}
.btn--google svg{flex:none}
.notice--warn{background:var(--warn-bg);border-color:var(--warn-bd);color:var(--warn-fg)}
.notice--invite{background:var(--bg-tint);border-color:var(--border-blue);color:var(--navy);line-height:1.6}
.auth--single{grid-template-columns:1fr}
.auth--single .auth__form{max-width:520px}
.invite h1{font-size:24px}
.invite__card{display:grid;grid-template-columns:auto 1fr;gap:8px 18px;background:var(--bg-alt);border:1px solid var(--border-soft);border-radius:var(--r-lg);padding:16px 20px;margin:4px 0 20px;font-size:var(--fs-md)}
.invite__k{color:var(--text-3)}.invite__v{color:var(--navy)}
.invite__cta{display:flex;flex-direction:column;gap:10px;margin-top:4px}
.panel__sp{flex:1}
@media (max-width:767px){.auth--single .auth__form{padding:32px 16px}.invite__card{grid-template-columns:1fr;gap:2px 0}.invite__k{margin-top:8px;font-size:var(--fs-xs)}}

/* ---- Phase 14: onboarding, product tour, guidance, coach marks, empty states ---- */
/* help */
.helpbtn{width:28px;height:28px;border-radius:50%;border:1px solid var(--border);background:#fff;color:var(--text-2);font-weight:700;font-size:var(--fs-md);display:inline-flex;align-items:center;justify-content:center;flex:none;cursor:pointer}
.helpbtn:hover{border-color:var(--blue);color:var(--blue-deep)}
.navlink--help{cursor:default;gap:8px}.navlink--help .helpbtn{width:22px;height:22px;font-size:var(--fs-xs)}
.wsh__row .helpbtn{margin-left:4px}
.topbar__r{display:flex;align-items:center;gap:10px}.topbar .helpbtn{width:36px;height:36px}
.helpmenu{z-index:120;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-lift);padding:6px;min-width:220px;display:flex;flex-direction:column}
.helpmenu [role=menuitem]{text-align:left;padding:9px 12px;border-radius:var(--r);font-size:var(--fs-sm);color:var(--text);background:none;border:0;cursor:pointer;font-weight:500;text-decoration:none}
.helpmenu [role=menuitem]:hover,.helpmenu [role=menuitem]:focus-visible{background:var(--bg-tint);color:var(--blue-deep);outline:none}
/* welcome */
.welcome{text-align:center;max-width:480px}
.welcome__mark{width:48px;height:48px;border-radius:var(--r-lg);background:var(--navy);color:#fff;font-weight:800;font-size:var(--fs-2xl);display:flex;align-items:center;justify-content:center;margin:0 auto 16px}
.welcome h3{font-size:var(--fs-2xl);margin-bottom:10px}.welcome p{color:var(--text-2);line-height:1.65;margin-bottom:24px}
.welcome .actions{justify-content:center}
/* tour */
.tour{position:fixed;inset:0;z-index:110;pointer-events:none;--hl:0px;--ht:0px;--hr:0px;--hb:0px}
/* click shield: the page stays visible but not clickable while the guide is open — except the highlighted target (hole = spot rect, set by tour.js) */
.tour::before{content:"";position:absolute;inset:0;pointer-events:auto;clip-path:polygon(evenodd,0 0,100% 0,100% 100%,0 100%,0 0,var(--hl) var(--ht),var(--hr) var(--ht),var(--hr) var(--hb),var(--hl) var(--hb),var(--hl) var(--ht))}
.tour--center::before{clip-path:none}
.tour__pop{pointer-events:auto}
.tour__spot{position:fixed;border-radius:var(--r-lg);box-shadow:0 0 0 9999px rgba(16,24,40,.55),0 0 0 3px rgba(var(--blue-rgb),.9);pointer-events:none;transition:left .18s,top .18s,width .18s,height .18s}
.tour__spot[hidden]{display:none}
.tour--center::before,.tour .tour__spot[hidden]~.tour__pop{}
.tour--center::before{background:rgba(16,24,40,.55)}
.tour__pop{position:fixed;width:min(360px,calc(100vw - 16px));background:#fff;border-radius:var(--r-lg);box-shadow:var(--sh-lift);padding:18px 18px 14px;z-index:1}
.tour--center .tour__pop{left:50%!important;top:50%!important;transform:translate(-50%,-50%)}
.tour__step{font-size:var(--fs-xs);color:var(--text-3);font-weight:600;margin-bottom:6px}
.tour__pop h3{font-size:var(--fs-lg);margin-bottom:6px}.tour__pop p{color:var(--text-2);font-size:var(--fs-md);line-height:1.6;margin:0 0 14px}
.tour__btns{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.tour__sp{flex:1}
.tour--mobile .tour__pop{left:8px!important;right:8px;top:auto!important;bottom:8px;width:auto;transform:none;border-radius:var(--r-xl)}
.tourpill{position:fixed;right:16px;bottom:16px;z-index:105;background:var(--navy);color:#fff;border:0;border-radius:999px;padding:9px 14px;font-weight:600;font-size:var(--fs-sm);box-shadow:var(--sh-lift);cursor:pointer;display:inline-flex;gap:8px;align-items:center}
.tourpill span{color:var(--border-blue)}
/* checklist */
.obcl{background:#fff;border:1px solid var(--border-blue);border-radius:var(--r-lg);padding:16px 18px;margin-bottom:18px}
.obcl__h{display:flex;align-items:center;gap:12px;margin-bottom:10px}.obcl__h b{font-size:var(--fs-md)}.obcl__n{font-weight:700;color:var(--blue-deep);font-size:var(--fs-sm)}
.obcl__h .pbar{flex:1;max-width:200px}.obcl__x{width:auto;font-size:var(--fs-sm);color:var(--text-3);margin-left:auto}
.obcl__list{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:6px 18px}
.obcl__list li{display:flex;align-items:center;gap:7px;font-size:var(--fs-sm);color:var(--text-2)}.obcl__list li i{font-style:normal;width:18px;height:18px;border-radius:50%;border:1px solid var(--border-strong);display:inline-flex;align-items:center;justify-content:center;font-size:var(--fs-2xs);color:var(--text-3)}
.obcl__list li.is-done{color:var(--text-3);text-decoration:line-through}.obcl__list li.is-done i{background:var(--ok-bg);border-color:var(--ok-bd);color:var(--ok-fg);text-decoration:none}
.obcl__list li a{color:var(--blue-deep);font-weight:600}
.obcl__hint{font-size:var(--fs-sm);color:var(--text-3);margin:10px 0 0}
.obcl--compact{padding:12px 16px;margin-bottom:14px}.obcl--compact .obcl__h{margin-bottom:6px}
.obcl__row{display:flex;align-items:center;gap:8px 18px;flex-wrap:wrap}.obcl__row>.obcl__list{flex:1 1 auto}
.obcl__smp{display:flex;align-items:center;gap:10px;margin-left:auto;font-size:var(--fs-sm);color:var(--text-2)}.obcl__smp .btn{flex:none}   /* Home: sample line inside 시작하기 (P1-3) */
.hsum__smp{color:var(--text-2)}.hsum__smp .btn{margin-left:10px;vertical-align:middle}
/* hero (project-0 home) */
.hero{background:#fff;border:1px solid var(--border);border-radius:var(--r-xl);padding:36px 32px;display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,1fr);gap:28px;align-items:center;margin-bottom:18px}
.hero__t h2{font-size:var(--fs-2xl);margin-bottom:10px}.hero__t p{color:var(--text-2);line-height:1.65;margin-bottom:20px;max-width:46ch}
.hero__steps{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.hero__steps li{display:grid;grid-template-columns:28px 1fr;gap:4px 12px;padding:12px 14px;background:var(--bg-alt);border-radius:var(--r-lg);font-size:var(--fs-sm)}
.hero__steps li i{grid-row:span 2;width:28px;height:28px;border-radius:50%;background:var(--navy);color:#fff;font-style:normal;font-weight:700;display:flex;align-items:center;justify-content:center;font-size:var(--fs-sm)}
.hero__steps li b{color:var(--navy)}.hero__steps li span{color:var(--text-2)}
.hero--member{grid-template-columns:1fr}
.home__member{color:var(--text-2);font-size:var(--fs-md);margin:-6px 0 14px}
/* guidance card */
.gcard{background:#fff;border:1px solid var(--border-blue);border-left:4px solid var(--blue);border-radius:var(--r-lg);padding:18px 20px;margin-bottom:16px}
.gcard__new{background:var(--bg-tint);color:var(--navy);border-radius:var(--r-lg);padding:9px 12px;font-size:var(--fs-sm);margin-bottom:12px}
.gcard__row{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,300px);gap:18px}
.gcard__k{display:flex;gap:10px;align-items:center;margin-bottom:6px;font-size:var(--fs-sm)}.gcard__cur{color:var(--text-3);font-weight:600}.gcard__lbl{background:var(--navy);color:#fff;border-radius:999px;padding:2px 9px;font-weight:700;font-size:var(--fs-xs)}
.gcard h2{font-size:var(--fs-xl);margin-bottom:6px}.gcard__d{color:var(--text-2);font-size:var(--fs-md);line-height:1.6;margin:0 0 8px}
.gcard__why{font-size:var(--fs-sm);color:var(--text-2);margin:0;line-height:1.55}.gcard__why b{color:var(--navy);margin-right:8px;font-weight:700}
.gcard__warn{margin:8px 0 0;padding:0 0 0 16px;font-size:var(--fs-sm);color:var(--warn-fg)}
.gcard__a{display:flex;flex-direction:column;gap:8px;align-items:stretch;justify-content:center}
.gcard__a .btn{justify-content:center}.gcard__next{font-size:var(--fs-sm);color:var(--text-3);line-height:1.5}.gcard__next b{color:var(--text-2);margin-right:6px}
/* coach marks / phase intro / next strips */
.coach{display:flex;gap:12px;align-items:flex-start;background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-lg);padding:12px 14px;margin-bottom:12px;font-size:var(--fs-sm)}
.coach__i{width:24px;height:24px;border-radius:50%;background:var(--blue);color:#fff;font-weight:800;font-size:var(--fs-xs);display:flex;align-items:center;justify-content:center;flex:none;font-style:normal}
.coach__b{flex:1;min-width:0}.coach__b b{display:block;color:var(--navy);margin-bottom:2px}.coach__b p{margin:0;color:var(--text-2);line-height:1.55}.coach__b small{display:block;color:var(--text-3);margin-top:4px}.coach__b .link{display:inline-block;margin-top:6px;font-size:var(--fs-sm)}
.coach__x{background:none;border:0;color:var(--text-3);font-size:var(--fs-xl);line-height:1;cursor:pointer;padding:0 2px}.coach__x:hover{color:var(--navy)}
.coach--phase{background:#fff;border-color:var(--border)}.coach--phase .coach__i{background:var(--navy)}
.nextstrip{display:flex;align-items:center;justify-content:space-between;gap:14px;background:var(--ok-bg);border:1px solid var(--ok-bd);border-radius:var(--r-lg);padding:12px 16px;margin-bottom:14px;font-size:var(--fs-sm)}
.nextstrip b{color:var(--ok-fg);display:block}.nextstrip span{color:var(--text-2)}.nextstrip__a{display:flex;gap:8px;flex:none}
.nextstrip--slim{background:var(--bg-tint);border-color:var(--border-blue);margin-bottom:10px}.nextstrip--slim b{color:var(--navy)}
.defp__guide{color:var(--text-2);font-size:var(--fs-sm);margin:-4px 0 14px}
/* empty state with multiple CTAs; type descriptions */
.empty__a{display:flex;gap:10px;justify-content:center;flex-wrap:wrap}
.choices--col{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}
.choice--desc span{flex-direction:column;align-items:flex-start;justify-content:center;padding:10px 14px;min-height:60px;gap:2px}
.choice--desc small{font-weight:400;font-size:var(--fs-xs);color:var(--text-3);line-height:1.4}
@media (max-width:900px){.hero{grid-template-columns:1fr;padding:24px 18px}.gcard__row{grid-template-columns:1fr}.gcard__a{flex-direction:row;flex-wrap:wrap}.nextstrip{flex-direction:column;align-items:flex-start}}

/* ---- What’s Next? / Overview (Enterprise PM landing: one column, sections over cards, status color = meaning only) ---- */
/* status glyphs: icon + label, never color alone. Not radio-like: soft square tile, no hollow ring. */
.st{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border-radius:var(--r);font-style:normal;font-size:var(--fs-2xs);font-weight:800;flex:none;color:var(--text-3);background:transparent}
.st--done{background:var(--ok-bg);color:var(--ok-fg)}
.st--cur{background:var(--blue);color:#fff}
.st--warn{background:var(--warn-bg);color:var(--warn-fg)}
.st--crit{background:var(--danger-bg);color:var(--danger-fg)}
.st--todo{background:transparent;color:var(--text-3);font-size:var(--fs-xs)}
.pbar--g i{background:var(--ok)}
/* tones (text emphasis only — never a whole-card background) */
.is-good{color:var(--ok-fg)}.is-warn{color:var(--warn-fg)}.is-crit{color:var(--danger-fg)}.is-muted{color:var(--text-3)}
/* Project Summary */
.psum{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);margin-bottom:10px}
.psum__m{display:flex;flex-direction:column;gap:2px;padding:10px 16px;min-width:0;color:inherit;text-decoration:none}
.psum__m+.psum__m{border-left:1px solid var(--border-soft)}
.psum__m--link:hover{background:var(--bg-alt);border-radius:0 var(--r-lg) var(--r-lg) 0}
.psum__k{font-size:var(--fs-xs);color:var(--text-3);font-weight:600}
.psum__v{font-size:var(--fs-2xl);font-weight:700;letter-spacing:-.02em;color:var(--navy);line-height:1.15;font-variant-numeric:tabular-nums}
.psum__v--cur{color:var(--blue-deep)}
.psum__v.is-good{color:var(--ok-fg)}.psum__v.is-warn{color:var(--warn-fg)}.psum__v.is-crit{color:var(--danger-fg)}.psum__v.is-muted{color:var(--text-3)}
.psum__m small{font-size:var(--fs-xs);color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* Phase stepper (compact horizontal) */
.pstep{list-style:none;margin:0 0 12px;padding:0 4px;display:flex;align-items:center;flex-wrap:wrap;gap:0}
.pstep li{display:flex;align-items:center;min-width:0}
.pstep li+li::before{content:"";width:22px;height:1px;background:var(--border);margin:0 6px;flex:none}
.pstep a{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text-3);padding:3px 6px;border-radius:var(--r);white-space:nowrap}
.pstep a small{font-size:var(--fs-2xs);font-weight:700;opacity:.65;margin-right:4px;font-variant-numeric:tabular-nums}
.pstep a:hover{background:var(--bg-alt);color:var(--navy)}
.pstep .st{background:transparent;width:14px;height:14px;font-size:var(--fs-xs)}
.pstep li.is-done a{color:var(--ok-fg)}.pstep li.is-done .st{color:var(--ok)}
.pstep li.is-cur a{color:var(--blue-deep);font-weight:700}.pstep li.is-cur .st{color:var(--blue)}
.pstep li.is-todo .st{color:var(--border-strong)}
.pstep li.is-gap a{color:var(--warn-fg)}.pstep li.is-gap .st{color:var(--warn)}
.pstep li.is-quiet.is-gap a{color:var(--text-2)}.pstep li.is-quiet.is-gap .st{color:var(--muted)}   /* Q16-1 */
.pstep__n{font-size:var(--fs-2xs);font-weight:700;color:var(--warn-fg);background:var(--warn-bg);border-radius:999px;padding:0 6px;min-width:18px;text-align:center}
/* RELAI Guide (compact: 완료 · 현재 meta → next action) */
.rg{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);margin-bottom:10px}
.rg__h{display:flex;align-items:center;gap:8px;padding:7px 14px;border-bottom:1px solid var(--border-soft);min-width:0}
.rg__mark{width:18px;height:18px;border-radius:var(--r);background:var(--navy);color:var(--border-blue);display:inline-flex;align-items:center;justify-content:center;flex:none}
.rg__h>b{font-size:var(--fs-sm);color:var(--navy);flex:none}
.rg__new{font-size:var(--fs-xs);color:var(--ok-fg);font-weight:600;margin-left:auto}
.rg__body{padding:9px 14px 10px;min-width:0}
.rg__title{font-size:var(--fs-lg);margin:0;color:var(--navy);line-height:1.35;font-weight:700;letter-spacing:-.01em;min-width:0}
.rg__row{display:flex;align-items:flex-end;justify-content:space-between;gap:6px 20px;margin-top:3px;flex-wrap:wrap}
.rg__cta{display:inline-flex;align-items:center;gap:14px;flex:none;margin-left:auto}.rg__sec{font-size:var(--fs-sm);white-space:nowrap}
.rg__d{margin:0;font-size:var(--fs-sm);color:var(--text-2);line-height:1.5;max-width:92ch;min-width:0;flex:1 1 360px}
.rg__warn{display:inline-flex;gap:5px;align-items:center;font-size:var(--fs-xs);color:var(--warn-fg);margin-left:10px;white-space:nowrap}.rg__warn .st{width:14px;height:14px;font-size:var(--fs-2xs)}
.np{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:9px 14px 8px}
.np__h{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}
.np__t{display:flex;align-items:center;gap:8px;min-width:0;flex-wrap:wrap}.np__no{font-size:var(--fs-xs);color:var(--text-3);font-weight:700}.np__t h2{font-size:var(--fs-lg);margin:0;font-weight:700}
.np__cur{background:var(--blue);color:#fff;border-radius:999px;padding:1px 8px;font-size:var(--fs-2xs);font-weight:700}
.np__rec{font-size:var(--fs-sm);margin-left:6px}
.np__p{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--text-2)}.np__p b{font-size:var(--fs-md);color:var(--navy);font-variant-numeric:tabular-nums}.np__p .pbar{width:120px}
.np__d{margin:1px 0 6px;color:var(--text-3);font-size:var(--fs-sm)}
.np__list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border-soft)}
.np__row{display:grid;grid-template-columns:minmax(0,1fr) 64px auto;gap:10px;align-items:start;padding:6px 6px 6px 9px;font-size:var(--fs-sm);border-bottom:1px solid var(--border-soft);border-left:3px solid transparent;border-radius:0}
.np__row.is-cur{border-left-color:var(--blue);background:var(--bg-alt)}
.np__row>.badge--st{margin-top:1px;width:64px;justify-content:center}
.np__list--noacts .np__row{grid-template-columns:minmax(0,1fr) 64px}.np__list--noacts .np__acts{display:none}
.badge--imp{height:17px;padding:0 5px;font-size:var(--fs-2xs);min-width:30px;justify-content:center;margin-right:2px}
.np__row.is-link{cursor:pointer}.np__row.is-link:hover{background:var(--bg-alt)}
.np__m{display:flex;flex-direction:column;gap:0;min-width:0}
.np__st{font-weight:600;color:var(--navy);font-size:var(--fs-sm);display:inline-flex;align-items:center;gap:7px;line-height:1.4}
.np__row.is-done .np__st,.np__row.is-skip .np__st{color:var(--text-2);font-weight:500}.np__row.is-skip .np__st{text-decoration:line-through;text-decoration-color:var(--border-strong)}
.np__purpose{font-size:var(--fs-xs);color:var(--text-3);line-height:1.45;display:block;min-width:0}
.np__acts{display:inline-flex;gap:12px;align-items:center;justify-content:flex-end;white-space:nowrap;margin-top:2px}
.np__act{font-size:var(--fs-sm);width:auto;padding:0;color:var(--text-2)}.np__act:hover{color:var(--blue-deep)}.np__act--dim{color:var(--text-3)}
.np__skip{color:var(--warn-fg)}.np__skip:hover{color:var(--warn-fg)}
.np__remain{font-size:var(--fs-sm);color:var(--text-2);white-space:nowrap}.np__remain.is-good{color:var(--ok-fg)}
.st--prog{background:var(--blue-soft);color:var(--blue-deep)}.st--skip{background:transparent;color:var(--text-3)}.st--crit{background:var(--danger-bg);color:var(--danger-fg)}
.np__f{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:var(--fs-sm);color:var(--text-2)}
.np__f--ready{background:var(--bg-alt);border-radius:var(--r-lg);padding:10px 12px}
.np__msg{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.np__msg b{color:var(--navy)}
.np__move{font-size:var(--fs-sm);color:var(--text-2);width:auto}.np__move:hover{color:var(--blue-deep)}
@media (max-width:760px){.np__row{grid-template-columns:minmax(0,1fr) 64px}.np__acts{grid-column:1/3;justify-content:flex-start;min-width:0}}
/* Overview: sections, not cards */
.ovsec{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:10px 16px 12px;margin-bottom:10px;min-width:0}
.ovsec__h{display:flex;align-items:baseline;gap:10px;margin:0 0 8px}
.ovsec__h h2,.ovcol h3{font-size:var(--fs-sm);margin:0;color:var(--navy);font-weight:700;letter-spacing:.01em}
.ovsec__ctx{font-size:var(--fs-xs);color:var(--text-3)}.ovsec__more{margin-left:auto;font-size:var(--fs-sm);width:auto}
.ovsec__n{font-style:normal;font-size:var(--fs-xs);font-weight:700;border-radius:999px;padding:0 7px;background:var(--bg-tint);color:var(--blue-deep)}
.ovsec__n.is-warn{background:var(--warn-bg);color:var(--warn-fg)}.ovsec__n.is-crit{background:var(--danger-bg);color:var(--danger-fg)}
.ovnone{margin:0;padding:6px 0;font-size:var(--fs-sm);color:var(--text-3)}
/* KPI metric blocks */
.kpi4{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:0;border:1px solid var(--border-soft);border-radius:var(--r-lg)}
.kpi{display:flex;flex-direction:column;gap:2px;padding:10px 14px;min-width:0}.kpi+.kpi{border-left:1px solid var(--border-soft)}
.kpi__k{font-size:var(--fs-xs);color:var(--text-3);font-weight:600}
.kpi__v{font-size:var(--fs-2xl);font-weight:700;letter-spacing:-.02em;color:var(--navy);line-height:1.15;font-variant-numeric:tabular-nums}
.kpi.is-good .kpi__v{color:var(--ok-fg)}.kpi.is-warn .kpi__v{color:var(--warn-fg)}.kpi.is-crit .kpi__v{color:var(--danger-fg)}.kpi.is-muted .kpi__v{color:var(--text-3)}
.kpi__s{font-size:var(--fs-xs);color:var(--text-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pva{display:flex;flex-direction:column;gap:5px;margin:10px 2px 0}
.pva__r{display:grid;grid-template-columns:48px minmax(0,1fr) 44px;gap:10px;align-items:center;font-size:var(--fs-xs);color:var(--text-3)}
.pva__r .pbar{height:8px}.pva__r b{color:var(--navy);text-align:right;font-variant-numeric:tabular-nums;font-size:var(--fs-sm)}
.ovs__jira{margin:8px 0 0;font-size:var(--fs-sm);color:var(--text-2)}
/* exceptions list */
.exl{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:0 24px}
.exl__a{display:grid;grid-template-columns:8px minmax(0,1fr) auto 14px;gap:8px;align-items:center;padding:6px 4px;border-bottom:1px solid var(--border-soft);font-size:var(--fs-sm);color:var(--navy);border-radius:var(--r-sm)}
.exl__a:hover{background:var(--bg-alt)}
.exl__dot{width:8px;height:8px;border-radius:50%;background:var(--warn)}.exl__a.is-crit .exl__dot{background:var(--danger)}
.exl__l{font-weight:500}.exl__n{font-variant-numeric:tabular-nums;font-weight:700}.exl__a.is-crit .exl__n{color:var(--danger-fg)}.exl__a.is-warn .exl__n{color:var(--warn-fg)}
.exl__l small{color:var(--text-3);font-size:var(--fs-xs);margin-left:4px}.exl__l{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.exl__go{color:var(--border-strong);font-size:var(--fs-xs)}.exl__a:hover .exl__go{color:var(--blue-deep)}
.ovatt__pv{margin-top:10px;border-top:1px solid var(--border-soft);padding-top:6px}
.ovatt__ph{display:flex;align-items:center;justify-content:space-between;font-size:var(--fs-xs);color:var(--text-3);font-weight:600;padding:2px 0 4px}
.ovh__more{font-size:var(--fs-sm);width:auto}
.ovatt__list{list-style:none;margin:0;padding:0}
.ovatt__list li+li{border-top:1px solid var(--border-soft)}
.ovatt__list a{display:grid;grid-template-columns:8px auto auto minmax(0,1fr) auto;gap:0 8px;align-items:center;padding:5px 4px;font-size:var(--fs-sm)}
.ovatt__list a:hover{background:var(--bg-alt)}
.ovatt__k{font-size:var(--fs-2xs);font-weight:700;color:var(--text-2);background:var(--border-soft);border-radius:var(--r-sm);padding:0 6px}
.ovatt__list .mono{font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap}
.ovatt__t{font-weight:600;color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ovatt__list small{color:var(--text-3);font-size:var(--fs-xs);white-space:nowrap}
/* Schedule · Scope · Quality band */
.ovband{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:0;padding:0}
.ovcol{padding:10px 16px 8px;min-width:0}.ovcol+.ovcol{border-left:1px solid var(--border-soft)}
.ovcol h3{margin-bottom:4px}
.kv{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 10px;align-items:baseline;padding:6px 0;border-top:1px solid var(--border-soft);font-size:var(--fs-sm);color:inherit;text-decoration:none;border-radius:var(--r-sm)}
a.kv:hover{background:var(--bg-alt);margin:0 -6px;padding-left:6px;padding-right:6px}
.kv__k{color:var(--text-2);font-weight:500}.kv__v{color:var(--navy);font-weight:600;font-variant-numeric:tabular-nums;white-space:nowrap}
.kv__v.is-good{color:var(--ok-fg)}.kv__v.is-warn{color:var(--warn-fg)}.kv__v.is-crit{color:var(--danger-fg)}
.kv__s{grid-column:1/-1;color:var(--text-3);font-size:var(--fs-xs);margin-top:-2px}
/* upcoming / activity */
.ov__row4{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.3fr);gap:10px}
.ovup__list{list-style:none;margin:0;padding:0}.ovup__list li+li{border-top:1px solid var(--border-soft)}
.ovup__list a{display:grid;grid-template-columns:62px auto minmax(0,1fr);gap:8px;align-items:center;padding:6px 4px;font-size:var(--fs-sm)}.ovup__list a:hover{background:var(--bg-alt)}
.ovup__list time{font-weight:600;color:var(--navy);font-variant-numeric:tabular-nums;white-space:nowrap}
.ovup__k{font-size:var(--fs-2xs);font-weight:700;color:var(--blue-deep);background:var(--bg-tint);border-radius:var(--r-sm);padding:0 6px;white-space:nowrap}
.ovup__t{color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.ovact__list{list-style:none;margin:0;padding:0}.ovact__list li+li{border-top:1px solid var(--border-soft)}
.ovact__list a{display:grid;grid-template-columns:64px auto minmax(0,1fr);grid-template-rows:auto auto;gap:0 10px;padding:6px 4px;font-size:var(--fs-sm);align-items:center}.ovact__list a:hover{background:var(--bg-alt)}
.ovact__list time{grid-row:span 2;color:var(--text-3);font-size:var(--fs-xs)}.ovact__w{color:var(--text-2);font-weight:600}.ovact__t{color:var(--navy);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ovact__list small{grid-column:2/4;color:var(--text-3)}
.hline{margin-bottom:10px}
@media (max-width:1100px){.ov__row4{grid-template-columns:1fr}.ovband{grid-template-columns:1fr}.ovcol+.ovcol{border-left:0;border-top:1px solid var(--border-soft)}.kpi4{grid-template-columns:repeat(2,minmax(0,1fr))}.kpi:nth-child(3){border-left:0}.kpi:nth-child(n+3){border-top:1px solid var(--border-soft)}}
@media (max-width:900px){.psum{grid-template-columns:repeat(2,minmax(0,1fr))}.psum__m:nth-child(3){border-left:0}.psum__m:nth-child(n+3){border-top:1px solid var(--border-soft)}}


/* ---- Phase 15: AI Project WBS Planner wizard ---- */
.dialog.dialog--ai-xl{max-width:min(1180px,97vw)}
.wpz__steps{list-style:none;margin:0 0 14px;padding:0;display:flex;gap:6px;flex-wrap:wrap}
.wpz__steps li{display:flex;align-items:center;gap:6px;font-size:var(--fs-sm);color:var(--text-3);padding:4px 10px;border-radius:999px;border:1px solid var(--border-soft);background:#fff}
.wpz__steps li i{width:18px;height:18px;border-radius:50%;background:var(--border-soft);font-style:normal;font-size:var(--fs-2xs);font-weight:700;display:inline-flex;align-items:center;justify-content:center}
.wpz__steps li.is-cur{color:var(--navy);border-color:var(--blue);font-weight:700}.wpz__steps li.is-cur i{background:var(--blue);color:#fff}
.wpz__steps li.is-done{color:var(--ok-fg)}.wpz__steps li.is-done i{background:var(--ok-bg);color:var(--ok-fg)}
.wpz__known{font-size:var(--fs-sm);color:var(--text-2);margin:0 0 12px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.wpz__qs{display:grid;grid-template-columns:repeat(auto-fit,minmax(360px,1fr));gap:12px}
.wpz__q{border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 14px 10px;margin:0;min-width:0}
.wpz__q legend{font-weight:600;color:var(--navy);font-size:var(--fs-md);padding:0 4px;display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.wpz__opts{display:flex;flex-direction:column;gap:4px;margin:6px 0}
.wpz__optw{display:flex;flex-direction:column}
.wpz__opt{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);padding:4px 6px;border-radius:var(--r);cursor:pointer}.wpz__opt:hover{background:var(--bg-alt)}.wpz__opt input{margin:0}
.wpz__opt--sm{font-size:var(--fs-sm);padding:2px 6px}
.wpz__fu{display:flex;flex-wrap:wrap;gap:0 8px;padding:2px 0 6px 26px}
.wpz__why{display:block;color:var(--text-3);font-size:var(--fs-xs);margin-top:4px}
.wpz__none{background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-lg);padding:16px}.wpz__none p{margin:4px 0 0;color:var(--text-2);font-size:var(--fs-sm)}
.wpz__legend{display:flex;gap:6px;align-items:center;font-size:var(--fs-xs);color:var(--text-3);flex-wrap:wrap}
.wtree__r.is-fix{background:var(--ok-bg)}
.wtree__dur{width:58px}.wtree__link{width:auto;font-size:var(--fs-xs)}
.wpz__cov{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.2fr);gap:14px;margin-bottom:12px}
.wpz__covc{border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 14px}.wpz__covc h4{margin:0 0 10px;font-size:var(--fs-sm);color:var(--navy)}
.wpz__big{display:flex;flex-direction:column;gap:4px}.wpz__big b{font-size:var(--fs-2xl);color:var(--navy)}.wpz__big span{font-size:var(--fs-sm);color:var(--text-2)}
.wpz__miss{list-style:none;margin:10px 0 0;padding:0;display:flex;flex-direction:column;gap:4px;font-size:var(--fs-sm)}.wpz__miss li{color:var(--danger-fg)}.wpz__miss .mono{margin-right:6px}
.wpz__ok{color:var(--ok-fg);font-size:var(--fs-sm);margin:8px 0 0}
.wpz__areas{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:6px}
.wpz__areas li{display:grid;grid-template-columns:22px 1fr;gap:0 8px;align-items:center;padding:6px 8px;border-radius:var(--r-lg);background:var(--bg-alt);font-size:var(--fs-sm)}
.wpz__areas li i{grid-row:span 2;width:22px;height:22px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;font-style:normal;font-weight:800;font-size:var(--fs-xs);background:var(--border-soft);color:var(--text-3)}
.wpz__areas li small{color:var(--text-3);font-size:var(--fs-xs)}
.wpz__areas li.is-ok i{background:var(--ok-bg);color:var(--ok-fg)}.wpz__areas li.is-warn i{background:var(--warn-bg);color:var(--warn-fg)}.wpz__areas li.is-crit i{background:var(--danger-bg);color:var(--danger-fg)}.wpz__areas li.is-crit span{color:var(--danger-fg);font-weight:600}
.wpz__final{display:flex;gap:18px;flex-wrap:wrap;align-items:center;background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-lg);padding:10px 14px;font-size:var(--fs-sm);color:var(--text-2)}.wpz__final>b{color:var(--navy)}.wpz__final span b{color:var(--navy)}
@media (max-width:720px){.wpz__cov{grid-template-columns:1fr}.wpz__qs{grid-template-columns:1fr}.wtree__parent{max-width:120px}}

/* lifecycle position dots (project list) */
.lcpos{display:inline-flex;gap:3px;align-items:center}
.lcpos i{display:inline-block;width:14px;height:5px;border-radius:var(--r-sm);background:var(--border)}
.lcpos i.is-done{background:var(--ok)}.lcpos i.is-cur{background:var(--blue)}.lcpos i.is-gap{background:var(--warn)}.lcpos i.is-quiet{background:var(--muted)}
/* ---------- badges: status (완료/진행 중/미시작/제외/확인 필요) and importance (필수/권장/선택) — same semantic colors as chips/health ---------- */
.badge{display:inline-flex;align-items:center;gap:4px;height:20px;padding:0 8px;border-radius:999px;font-size:var(--fs-xs);font-weight:700;white-space:nowrap;line-height:1;background:var(--border-soft);color:var(--text-2);flex:none}
.badge--req{background:var(--danger-bg);color:var(--danger-fg);height:18px;padding:0 6px;font-size:var(--fs-2xs)}
.badge--muted{background:var(--border-soft);color:var(--text-3);height:18px;padding:0 6px;font-size:var(--fs-2xs);font-weight:600}
.badge--st.is-done{background:var(--ok-bg);color:var(--ok-fg)}.badge--st.is-done::before{content:'✓';font-size:var(--fs-2xs)}
.badge--st.is-prog{background:var(--blue-soft);color:var(--blue-deep)}
.badge--st.is-todo{background:var(--border-soft);color:var(--text-2)}
.badge--st.is-skip{background:transparent;color:var(--text-3);border:1px dashed var(--border-strong)}
.badge--st.is-crit{background:var(--danger-bg);color:var(--danger-fg)}
/* weekly report list */
.rpl .ovsec__h{flex-wrap:wrap}.rpl__new{margin-left:auto}
.rpl__t{width:100%;font-size:var(--fs-sm)}.rpl__t td,.rpl__t th{padding:8px 10px;text-align:left}
.notice--soft{background:var(--bg-alt);color:var(--text-2);border-color:var(--border-soft)}

/* ---- 01 착수 Main Process View ---- */
.pv{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 18px 12px}
.pv__h{display:flex;align-items:center;gap:8px}.pv__no{font-size:var(--fs-xs);color:var(--text-3);font-weight:700}.pv__h h2{font-size:var(--fs-lg);margin:0;font-weight:700}
.pv__d{margin:2px 0 12px;color:var(--text-3);font-size:var(--fs-sm)}
.pv__now{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 14px;border:1px solid var(--border);border-left:3px solid var(--blue);border-radius:var(--r-lg);margin-bottom:12px;background:#fff}
.pv__now--done{border-left-color:var(--ok)}
.pv__now .pv__k{display:block;font-size:var(--fs-xs);color:var(--blue-deep);font-weight:700;margin-bottom:2px}.pv__now--done .pv__k{color:var(--ok-fg)}
.pv__now b{font-size:var(--fs-md);color:var(--navy);display:block}.pv__now p{margin:3px 0 0;font-size:var(--fs-sm);color:var(--text-2);line-height:1.5}
.pv__now .btn{flex:none;white-space:nowrap}
.pv__list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border-soft)}
.pv__row{display:grid;grid-template-columns:18px minmax(0,1fr) 64px 120px;gap:10px;align-items:start;padding:10px 6px 10px 4px;border-bottom:1px solid var(--border-soft);cursor:pointer;outline:none}
.pv__row:hover,.pv__row:focus-visible{background:var(--bg-alt)}
.pv__row.is-cur{box-shadow:inset 3px 0 0 var(--blue);padding-left:10px}
.pv__row>.st{margin-top:1px}
.pv__m{display:flex;flex-direction:column;gap:2px;min-width:0}
.pv__t{font-weight:600;color:var(--navy);font-size:var(--fs-sm);display:inline-flex;align-items:center;gap:6px}.pv__row.is-done .pv__t,.pv__row.is-skip .pv__t{color:var(--text-2);font-weight:500}.pv__row.is-skip .pv__t{text-decoration:line-through;text-decoration-color:var(--border-strong)}
.pv__imp{font-size:var(--fs-2xs);font-weight:500;color:var(--text-3)}
.pv__purpose{font-size:var(--fs-xs);color:var(--text-3);line-height:1.45}
.pv__sum{font-size:var(--fs-sm);color:var(--text-2)}.pv__row.is-todo .pv__sum,.pv__row.is-skip .pv__sum{color:var(--text-3)}
.pv__lab{font-size:var(--fs-xs);color:var(--text-3);white-space:nowrap;margin-top:2px}.pv__row.is-cur .pv__lab{color:var(--blue-deep)}.pv__row.is-review .pv__lab{color:var(--warn-fg)}
.pv__cta{text-align:right;white-space:nowrap;margin-top:1px}.pv__go{font-size:var(--fs-sm);width:auto;padding:0}
.pv__f{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-top:10px;font-size:var(--fs-sm);color:var(--text-2)}
.pv__f--ready{background:var(--bg-alt);border-radius:var(--r-lg);padding:10px 12px}.pv__f--ready b{display:block;color:var(--navy)}.pv__f--ready span{font-size:var(--fs-sm);color:var(--text-2)}
.pv__move{font-size:var(--fs-sm);color:var(--text-2);width:auto}.pv__move:hover{color:var(--blue-deep)}
.st--warn{background:var(--warn-bg);color:var(--warn-fg)}

/* ---- Work Screen drawer (right) + full screen expand ---- */
.wdrawer{position:fixed;top:0;right:0;bottom:0;width:min(560px,92vw);background:#fff;border-left:1px solid var(--border);box-shadow:-12px 0 32px rgba(16,24,40,.08);z-index:90;display:flex;flex-direction:column}
.wdrawer--wide{width:min(700px,92vw)}
.wdrawer--full{left:232px;width:auto;border-left:0;box-shadow:none}
.shell.is-collapsed .wdrawer--full{left:56px}
@media (max-width:900px){.wdrawer--full{left:0}}
.wd__h{display:flex;align-items:flex-start;gap:8px;padding:14px 18px;border-bottom:1px solid var(--border-soft)}
.wd__ht{flex:1;min-width:0}.wd__ht b{display:block;font-size:var(--fs-md);color:var(--navy)}.wd__ht small{display:block;font-size:var(--fs-xs);color:var(--text-3);margin-top:2px;line-height:1.45}
.wd__ib{width:28px;height:28px;border:1px solid var(--border);background:#fff;border-radius:var(--r);cursor:pointer;color:var(--text-2);font-size:var(--fs-md);line-height:1;flex:none}
.wd__ib:hover{background:var(--bg-alt);color:var(--navy)}
.wd__b{flex:1;overflow-y:auto;padding:16px 18px}
.wdrawer--full .wd__b{padding:20px 28px;max-width:980px}
.wd__form .field{margin-bottom:14px}
.wd__f{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 18px;border-top:1px solid var(--border-soft);background:#fff}
.wd__btns{display:inline-flex;gap:8px;align-items:center}.wd__stat{font-size:var(--fs-xs);color:var(--text-3);margin-right:4px}
.wd__skip{width:auto;font-size:var(--fs-sm);color:var(--warn-fg);padding:0}.wd__skip:hover{color:var(--warn-fg)}
.wd__skipped{display:flex;gap:12px;align-items:flex-start;padding:14px;border:1px dashed var(--border);border-radius:var(--r-lg);color:var(--text-2)}
.wd__skipped b{display:block;color:var(--navy);margin-bottom:4px}.wd__skipped p{margin:0 0 10px;font-size:var(--fs-sm);line-height:1.5}
.def__tools{display:flex;gap:8px;align-items:center;margin-bottom:10px;flex-wrap:wrap}.def__tpl{width:auto;font-size:var(--fs-sm);margin-left:auto}
.def__tblwrap{overflow-x:auto}.def__tbl--sh th,.def__tbl--sh td{padding:4px 4px}.def__tbl--sh .select--sm{min-width:86px}
.def__hier{margin:0 0 12px;border:1px solid var(--border-soft);border-radius:var(--r-lg);padding:8px 12px;font-size:var(--fs-sm);background:var(--bg-alt)}
.def__hier summary{cursor:pointer;font-weight:600;color:var(--navy)}.def__hier summary em{font-style:normal;color:var(--text-3);font-weight:500;margin-left:6px}
.def__hg{margin-top:8px}.def__hg>b{display:block;font-size:var(--fs-xs);color:var(--text-2);margin-bottom:2px}
.def__hd{display:grid;grid-template-columns:140px 1fr;gap:8px;padding:2px 0 2px 10px;color:var(--text-2)}.def__hd>span:first-child{color:var(--text-3)}
.xlm .imp__tbl{max-height:46vh;overflow:auto;margin:8px 0 12px}.xlm__tbl table{font-size:var(--fs-sm)}.xlm__tbl tr.is-err td{background:var(--danger-bg)}.xlm__err{color:var(--danger-fg);font-size:var(--fs-xs)}
.xlm .drop{border:1px dashed var(--border);border-radius:var(--r-lg);padding:28px 16px;text-align:center;cursor:pointer;color:var(--text-2);font-size:var(--fs-sm);margin:8px 0 14px}.xlm .drop.is-over{border-color:var(--blue);background:var(--bg-tint)}
.defp.has-wd{padding-right:0}
/* 프로젝트 정의 task tabs (UI/UX P1-1): one card per task — title · state · [수정], then what has been entered (프로젝트 개요 blocks) */
.defsec{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 18px 16px;margin-bottom:var(--gap-block,16px)}
.defsec__h{display:flex;align-items:center;gap:10px}.defsec__h h2{font-size:var(--fs-lg);margin:0;font-weight:700}
.defsec__st{display:inline-flex;align-items:center;gap:5px;font-size:var(--fs-xs);color:var(--text-3);font-weight:600}
.defsec__d{margin:4px 0 0;font-size:var(--fs-sm);color:var(--text-3)}
.defsec__b>.chx__blk:first-child{margin-top:12px}.defsec__skip{margin:12px 0 0;color:var(--text-2);font-size:var(--fs-sm)}
.defsec__pg{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:4px}
.pv__charter{margin:10px 0 8px;font-size:var(--fs-sm);color:var(--text-3)}
.wd__next{display:flex;justify-content:flex-end;padding:0 18px 10px;background:#fff}.wd__next .linkbtn{width:auto}
/* ---------- Workspace Home: project status cards (home.js) — ERP density, 2 columns on desktop ---------- */
.hgrid__sec{margin-top:4px}
.hgrid__h{display:flex;align-items:baseline;gap:14px;margin:0 0 10px}.hgrid__h h2{font-size:var(--fs-md);color:var(--navy);margin:0}
.hgrid__sum{display:inline-flex;gap:12px;font-size:var(--fs-xs);color:var(--text-2)}.hc__cnt{display:inline-flex;align-items:center;gap:5px}.hc__cnt i{width:7px;height:7px;border-radius:50%;background:var(--border-strong)}
.hc__cnt.is-blocker i{background:var(--danger)}.hc__cnt.is-attn i{background:var(--warn)}.hc__cnt.is-action i{background:var(--blue)}.hc__cnt.is-ok i{background:var(--ok)}.hc__cnt.is-wait i{background:var(--border-strong)}
.hgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
.hc{background:#fff;border:1px solid var(--border);border-left:3px solid var(--border-strong);border-radius:var(--r-lg);padding:10px 14px 10px 13px;min-width:0;display:flex;flex-direction:column;gap:6px;box-shadow:var(--sh-card)}
.hc.is-blocker{border-left-color:var(--danger)}.hc.is-attn{border-left-color:var(--warn)}.hc.is-action{border-left-color:var(--blue)}.hc.is-ok{border-left-color:var(--ok)}.hc.is-wait{border-left-color:var(--border-strong)}
.hc__h{display:flex;align-items:center;gap:8px;min-width:0}
.hc__prio{flex:none;font-size:var(--fs-2xs);font-weight:700;padding:1px 7px;border-radius:999px;background:var(--border-soft);color:var(--text-2);letter-spacing:.01em}
.hc.is-blocker .hc__prio{background:var(--h-crit-bg);color:var(--h-crit)}.hc.is-attn .hc__prio{background:var(--h-warn-bg);color:var(--h-warn)}.hc.is-action .hc__prio{background:var(--blue-soft);color:var(--blue-deep)}.hc.is-ok .hc__prio{background:var(--h-good-bg);color:var(--h-good)}
.hc__name{font-weight:700;color:var(--navy);font-size:var(--fs-md);letter-spacing:-.01em;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hc__name:hover{color:var(--blue-deep)}
.hc__client{font-size:var(--fs-sm);color:var(--text-2);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hc__h .chip{margin-left:auto;flex:none}
.hc__k{font-size:var(--fs-2xs);font-weight:700;color:var(--text-3);letter-spacing:.02em;flex:none}
.hc__phase{display:flex;align-items:center;gap:10px;font-size:var(--fs-sm)}.hc__phase>b{color:var(--navy);font-weight:600}
.hc__soon{margin-left:auto;font-size:var(--fs-xs);font-weight:600;color:var(--h-warn);background:var(--h-warn-bg);padding:1px 7px;border-radius:999px;white-space:nowrap;max-width:45%;overflow:hidden;text-overflow:ellipsis}
.hc__next{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:4px 10px;padding:8px 10px;background:var(--bg-tint);border-radius:var(--r-lg)}
.hc__next .hc__k{color:var(--blue-deep)}.hc__next--quiet{background:var(--bg-alt)}.hc__next--quiet .hc__k{color:var(--text-3)}
.hc__t{margin:0;font-size:var(--fs-sm);font-weight:600;color:var(--navy);line-height:1.4;min-width:0}.hc__t b{font-weight:700}
.hc__next .btn{white-space:nowrap}.hc__go{font-size:var(--fs-sm);white-space:nowrap}
.hc__strip{display:flex;align-items:center;gap:16px;font-size:var(--fs-sm);padding-top:6px;border-top:1px solid var(--border-soft);flex-wrap:wrap}
.hc__m{display:inline-flex;align-items:baseline;gap:5px}.hc__m small{color:var(--text-3);font-size:var(--fs-xs)}.hc__m b{color:var(--navy);font-variant-numeric:tabular-nums}
.hc__m b.is-good{color:var(--ok-fg)}.hc__m b.is-warn{color:var(--warn-fg)}.hc__m b.is-crit{color:var(--danger-fg)}.hc__m b.is-muted{color:var(--text-3);font-weight:500}
.hc__att{display:inline-flex;align-items:center;gap:6px;font-weight:700}.hc__att.is-crit{color:var(--danger-fg)}.hc__att.is-warn{color:var(--warn-fg)}.hc__att.is-ok{color:var(--ok-fg);font-weight:600}
.hc__health{margin-left:auto}
.hc__attl{list-style:none;margin:-2px 0 0;padding:0;display:flex;flex-direction:column;gap:2px}
.hc__attl a{display:grid;grid-template-columns:8px auto auto minmax(0,1fr);align-items:center;gap:7px;font-size:var(--fs-sm);color:var(--text-2);padding:1px 2px;border-radius:var(--r-sm)}.hc__attl a:hover{background:var(--bg-alt);color:var(--navy)}
.hc__attk{font-size:var(--fs-2xs);font-weight:700;color:var(--text-3)}.hc__attt{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hc__attl .mono{font-size:var(--fs-xs)}
.hc__attmore{font-size:var(--fs-xs);padding-left:15px}.hc__attl .hc__attmore a{display:inline;padding:0}
.hc__up{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm);min-width:0;flex-wrap:wrap;margin-top:auto}
.hc__ms{display:inline-flex;align-items:baseline;gap:5px;color:var(--navy);white-space:nowrap}.hc__ms time{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:var(--fs-xs);color:var(--text-2)}.hc__ms:hover{color:var(--blue-deep)}
.hc__sep{color:var(--border-strong);font-style:normal}.hc__none{color:var(--text-3)}
.hdone{margin-top:14px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff}
.hdone summary{cursor:pointer;padding:9px 14px;font-size:var(--fs-sm);color:var(--text-2);list-style:none;display:flex;align-items:center;gap:6px}.hdone summary::before{content:'▸';font-size:var(--fs-2xs);color:var(--text-3)}.hdone[open] summary::before{content:'▾'}.hdone summary b{color:var(--navy)}
.hdone__l{border-top:1px solid var(--border-soft)}
.hc__done{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr) auto auto;gap:14px;align-items:center;padding:8px 14px;font-size:var(--fs-sm);border-top:1px solid var(--border-soft);color:var(--text-2)}.hc__done:first-child{border-top:0}.hc__done:hover{background:var(--bg-alt)}
.hc__done-n{font-weight:600;color:var(--navy);min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.hc__done-ph{font-size:var(--fs-sm)}
@media (max-width:1100px){.hgrid{grid-template-columns:1fr}}
@media (max-width:767px){.hc__next{grid-template-columns:auto minmax(0,1fr)}.hc__next .btn,.hc__next .hc__go{grid-column:2}.hc__h{flex-wrap:wrap}.hc__h .chip{margin-left:0}}

/* ---- Overview › Project Charter (read-only reference document; sections over cards, only the AI strip is emphasised) ---- */
.chl{display:grid;grid-template-columns:minmax(0,920px) clamp(272px,22vw,320px);gap:0 40px;align-items:start;justify-content:start}
.chx{max-width:none;margin:6px 0 0;padding:0 4px;min-width:0}
/* right rail */
.chr{position:sticky;top:64px;margin-top:62px;width:100%;display:flex;flex-direction:column;gap:10px;max-height:calc(100vh - 80px);overflow-y:auto;scrollbar-width:thin;padding-bottom:8px}
.chr__box{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 14px}
.chr__k{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);letter-spacing:.02em;margin-bottom:6px;display:flex;align-items:center;gap:6px}
.chr__k em{font-style:normal;font-size:var(--fs-2xs);background:var(--warn-bg);color:var(--warn-fg);border-radius:999px;padding:0 7px}
.chr__fill{display:flex;align-items:baseline;gap:5px}.chr__fill b{font-size:var(--fs-2xl);line-height:1.1;color:var(--navy);font-variant-numeric:tabular-nums}.chr__fill span{font-size:var(--fs-sm);color:var(--text-2)}
.chr__seg{display:grid;grid-template-columns:repeat(16,1fr);gap:2px;margin:8px 0 6px}.chr__seg i{height:6px;border-radius:var(--r-sm);background:var(--border)}.chr__seg i.is-ok{background:var(--blue)}
.chr__hint{font-size:var(--fs-xs);color:var(--text-2);line-height:1.5}
.chr__toc ol{list-style:none;margin:0;padding:0}
.chr__ti{display:grid;grid-template-columns:16px minmax(0,1fr) auto;gap:8px;align-items:center;width:100%;padding:5px 6px;margin:0 -6px;border:0;background:none;border-radius:var(--r);text-align:left;cursor:pointer;font-size:var(--fs-sm);color:var(--text-2);width:calc(100% + 12px)}
.chr__ti:hover{background:var(--bg-alt);color:var(--navy)}
.chr__ti.is-cur{background:var(--bg-tint);color:var(--blue-deep);font-weight:600}
.chr__tn{font-size:var(--fs-2xs);color:var(--text-3);font-weight:700}
.chr__tt{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chr__tc{font-size:var(--fs-2xs);font-weight:700;color:var(--warn-fg);font-variant-numeric:tabular-nums}.chr__tc.is-ok{color:var(--ok-fg)}
.chr__miss{list-style:none;margin:0;padding:0}
.chr__miss a{display:flex;justify-content:space-between;gap:8px;padding:5px 0;border-bottom:1px solid var(--border-soft);font-size:var(--fs-sm);color:var(--navy)}
.chr__miss li:last-child a{border-bottom:0}
.chr__miss i{font-style:normal;font-size:var(--fs-xs);color:var(--blue-deep);font-weight:600;white-space:nowrap;opacity:.75}
.chr__miss a:hover i{opacity:1;text-decoration:underline}
.chr__ms b{display:block;font-size:var(--fs-md);color:var(--navy)}.chr__ms span{font-size:var(--fs-sm);color:var(--text-2);font-variant-numeric:tabular-nums}
@media (max-width:1100px){.chl{grid-template-columns:minmax(0,1fr)}.chr{display:none}.chx{margin:6px auto 0}}
.chx__head{margin:6px 0 14px}
.chx__head h1{font-size:var(--fs-2xl);letter-spacing:-.03em}
.chx__head p{margin-top:4px;color:var(--text-2);font-size:var(--fs-md)}
.chai{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:6px 14px;align-items:start;padding:14px 16px;border:1px solid var(--border-blue);border-radius:var(--r-lg);
  background:linear-gradient(180deg,var(--bg-tint),#fff 85%);margin-bottom:8px}
.chai__mark{width:28px;height:28px;border-radius:var(--r-lg);background:var(--navy);color:var(--border-blue);display:inline-flex;align-items:center;justify-content:center;margin-top:1px}
.chai__mark svg{width:16px;height:16px}
.chai__k{font-size:var(--fs-xs);font-weight:700;letter-spacing:.02em;color:var(--blue-deep);text-transform:none}
.chai__lead{font-size:var(--fs-lg);font-weight:700;color:var(--navy);margin-top:2px;line-height:1.45}
.chai__d{font-size:var(--fs-sm);color:var(--text-2);line-height:1.6;margin-top:3px;max-width:70ch}
.chai__em{font-size:var(--fs-sm);font-weight:600;color:var(--navy);margin-top:4px}
.chai__side{display:flex;flex-direction:column;align-items:flex-end;gap:8px;white-space:nowrap}
.chai__fill{font-size:var(--fs-xs);color:var(--text-2)}.chai__fill b{font-size:var(--fs-md);color:var(--navy);font-variant-numeric:tabular-nums}
.chx__sec{padding:26px 0 24px;border-bottom:1px solid var(--border)}
.chx__sec:last-of-type{border-bottom:0}
.chx__sh{display:flex;align-items:baseline;gap:10px}
.chx__no{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);min-width:14px}
.chx__sh h2{font-size:var(--fs-xl);letter-spacing:-.02em}
.chx__ai{display:flex;gap:8px;align-items:baseline;margin:6px 0 14px 24px;font-size:var(--fs-sm);color:var(--text-2);line-height:1.5}
.chx__aik{flex:none;font-size:var(--fs-xs);font-weight:700;color:var(--blue-deep);background:var(--bg-tint);border-radius:999px;padding:1px 8px}
.chx__sec>:not(.chx__sh):not(.chx__ai){margin-left:24px}
.chx__name{font-size:var(--fs-xl);margin-bottom:8px}
.chx__blk{margin-top:16px}
.chx__blk--lead{margin-top:0}
.chx__blk--lead .chx__p,.chx__blk--lead .chx__ul{font-size:var(--fs-md);color:var(--text)}
.chx__lbl{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);letter-spacing:.02em;margin-bottom:6px}
.chx__lbl small{font-weight:600;margin-left:4px}
.chx__p{font-size:var(--fs-md);line-height:1.75;color:var(--text);white-space:pre-line;max-width:72ch}
.chx__ul{margin:0;padding-left:18px;font-size:var(--fs-md);line-height:1.75;color:var(--text);max-width:72ch}
.chx__ul li+li{margin-top:2px}
.chx__two{display:grid;grid-template-columns:1fr 1fr;gap:0 32px}
.chx__two>.chx__blk{margin-top:16px}
.chx__kvs{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px 32px;margin:18px 0 0;padding:0}
.chx__kv{min-width:0}.chx__kv dt{font-size:var(--fs-xs);font-weight:700;color:var(--text-3)}
.chx__kv dd{margin:2px 0 0;font-size:var(--fs-md);color:var(--navy);font-weight:600;font-variant-numeric:tabular-nums}
.chx__none{color:var(--text-3);font-weight:500}
.chx__empty{border-left:2px solid var(--border-strong);padding:2px 0 2px 12px;max-width:68ch}
.chx__empty b{display:block;font-size:var(--fs-sm);color:var(--navy);font-weight:600}
.chx__empty p{font-size:var(--fs-sm);color:var(--text-2);line-height:1.55;margin-top:2px}
.chx__cta{display:inline-block;font-size:var(--fs-sm);margin-top:4px}
.chx__cta--in{margin:0 0 0 6px;font-weight:600}
.chx__tblw{overflow-x:auto}
.chx__tbl{width:100%;border-collapse:collapse;font-size:var(--fs-sm)}
.chx__tbl th{text-align:left;font-size:var(--fs-xs);font-weight:700;color:var(--text-3);padding:6px 10px 6px 0;border-bottom:1px solid var(--border)}
.chx__tbl td{padding:8px 10px 8px 0;border-bottom:1px solid var(--border-soft);vertical-align:top;color:var(--text-2)}
.chx__tbl td.chx__nm{color:var(--navy);font-weight:600;white-space:nowrap}
.chx__cat{font-size:var(--fs-xs);font-weight:700;border-radius:999px;padding:1px 8px;background:var(--border-soft);color:var(--text-2);white-space:nowrap}
.chx__cat--client{background:var(--bg-tint);color:var(--blue-deep)}.chx__cat--own{background:var(--ok-bg);color:var(--ok-fg)}.chx__cat--partner{background:var(--warn-bg);color:var(--warn-fg)}
.chx__ml{list-style:none;margin:6px 0 0;padding:0;max-width:560px}
.chx__ml li{display:grid;grid-template-columns:96px minmax(0,1fr) auto;gap:12px;align-items:baseline;padding:6px 0;border-bottom:1px solid var(--border-soft);font-size:var(--fs-sm);color:var(--navy)}
.chx__ml time{font-variant-numeric:tabular-nums;color:var(--text-2);font-size:var(--fs-sm)}
.chx__ml small{font-size:var(--fs-xs);color:var(--text-3)}
.chx__ml li.is-past{color:var(--text-2)}.chx__ml li.is-past time{color:var(--text-3)}
.chx__src{margin:18px 0 0;padding-top:14px;border-top:1px solid var(--border);font-size:var(--fs-sm);color:var(--text-3)}
/* horizontal timeline */
.chtl{margin:4px 0 18px}
.chtl__ends{display:flex;justify-content:space-between;align-items:baseline;gap:12px;font-size:var(--fs-sm);font-weight:600;color:var(--navy);font-variant-numeric:tabular-nums}
.chtl__ends small{display:block;font-size:var(--fs-2xs);font-weight:700;color:var(--text-3);letter-spacing:.06em}
.chtl__ends span:last-child{text-align:right}
.chtl__state{font-style:normal;font-size:var(--fs-xs);font-weight:700;border-radius:999px;padding:2px 10px;align-self:center}
.chtl__state.is-before{background:var(--bg-tint);color:var(--blue-deep)}.chtl__state.is-after{background:var(--border-soft);color:var(--text-2)}
.chtl__track{position:relative;height:118px;margin:0 6px}
.chtl--bare .chtl__track{height:64px}
.chtl__line{position:absolute;left:0;right:0;top:50%;height:4px;margin-top:-2px;border-radius:var(--r-sm);background:var(--border);overflow:hidden}
.chtl--bare .chtl__line{top:22px}
.chtl__done{position:absolute;left:0;top:0;bottom:0;background:var(--border-blue)}
.chtl__end{position:absolute;top:50%;width:12px;height:12px;margin:-6px 0 0 -6px;border-radius:50%;background:var(--navy);border:2px solid #fff;box-shadow:0 0 0 1px var(--navy)}
.chtl--bare .chtl__end{top:24px}
.chtl__end--s{left:0}.chtl__end--e{left:100%}
.chtl__mss{list-style:none;margin:0;padding:0}
.chtl__ms{position:absolute;top:50%;width:0}
.chtl__ms i{position:absolute;left:-6px;top:-6px;width:12px;height:12px;transform:rotate(45deg);background:#fff;border:2px solid var(--blue);border-radius:var(--r-sm)}
.chtl__ms.is-past i{background:var(--blue)}
.chtl__ms span{position:absolute;left:0;transform:translateX(-50%);display:flex;flex-direction:column;align-items:center;white-space:nowrap;font-size:var(--fs-xs);line-height:1.3;max-width:160px}
.chtl__ms span b{font-weight:600;color:var(--navy);overflow:hidden;text-overflow:ellipsis;max-width:160px}
.chtl__ms span time{color:var(--text-3);font-size:var(--fs-xs);font-variant-numeric:tabular-nums}
.chtl__ms.is-up span{bottom:12px}.chtl__ms.is-dn span{top:12px}
.chtl__ms.is-up span::after,.chtl__ms.is-dn span::before{content:"";width:1px;height:8px;background:var(--border-blue);order:3}
.chtl__ms.is-dn span::before{order:-1}
.chtl__ms.is-l span{transform:none;align-items:flex-start;left:-6px}.chtl__ms.is-r span{transform:none;align-items:flex-end;left:auto;right:-6px}
.chtl__today{position:absolute;top:6px;bottom:6px;width:0;border-left:2px solid var(--danger);z-index:2}
.chtl--bare .chtl__today{top:4px;bottom:auto;height:40px}
.chtl__today span{position:absolute;left:0;transform:translateX(-50%);white-space:nowrap;font-size:var(--fs-2xs);font-weight:800;letter-spacing:.04em;color:#fff;background:var(--danger);border-radius:var(--r-sm);padding:0 6px;top:-14px;font-variant-numeric:tabular-nums}
@media (max-width:760px){.chx__two{grid-template-columns:1fr}.chai{grid-template-columns:auto minmax(0,1fr)}.chai__side{grid-column:1/3;align-items:flex-start}
  .chx__sec>:not(.chx__sh):not(.chx__ai),.chx__ai{margin-left:0}.chtl__ms span{display:none}}
/* 프로젝트 정의: Project Charter sub-heading + deep-link target flash */
.def__sub{margin:22px 0 12px;padding-top:14px;border-top:1px solid var(--border-soft)}
.def__sub b{display:block;font-size:var(--fs-sm);color:var(--navy)}.def__sub small{font-size:var(--fs-xs);color:var(--text-3)}
.field.is-target,.def__dates.is-target{animation:defTarget 2.2s ease-out}
@keyframes defTarget{0%,40%{box-shadow:0 0 0 3px rgba(var(--blue-rgb),.25);background:var(--bg-tint)}100%{box-shadow:0 0 0 3px rgba(var(--blue-rgb),0);background:transparent}}
/* What’s Next: another phase's list (stepper click) */
.pstep li.is-sel a{background:var(--bg-tint);box-shadow:inset 0 0 0 1px var(--border-blue);color:var(--navy);font-weight:700}
.np__tag{font-size:var(--fs-2xs);font-weight:700;border-radius:999px;padding:1px 8px;background:var(--border-soft);color:var(--text-2)}
.np__tag.is-done{background:var(--ok-bg);color:var(--ok-fg)}
.np__tag.is-gap{background:var(--warn-bg);color:var(--warn-fg)}
.np__back{font-size:var(--fs-sm)}
.chr__more{display:inline-block;margin-top:6px;font-size:var(--fs-sm)}
.chx__sec{scroll-margin-top:56px}
/* 프로젝트 기본 특성 — create form sections, definition block, read grid */
.pform__sec{margin:6px 0 14px;padding-bottom:8px;border-bottom:1px solid var(--border-soft);display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.pform__sec:not(:first-of-type){margin-top:14px}
.pform__sec b{font-size:var(--fs-md);color:var(--navy)}.pform__sec small{font-size:var(--fs-sm);color:var(--text-3)}
.trf .select{height:var(--ctl-h)}
.trf__help{min-height:1.5em}
.pvp{margin:2px 0 12px;padding:10px 14px 12px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff}
.pvp__h{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:8px}
.pvp__h b{display:block;font-size:var(--fs-sm);color:var(--navy)}.pvp__h small{font-size:var(--fs-xs);color:var(--text-3)}
.trg{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px 24px;margin:0}
.trg__i{min-width:0}.trg dt{font-size:var(--fs-xs);font-weight:700;color:var(--text-3)}
.trg dd{margin:1px 0 0;font-size:var(--fs-md);font-weight:600;color:var(--navy)}.trg dd.is-unset{color:var(--text-3);font-weight:500}
@media (max-width:760px){.trg{grid-template-columns:repeat(2,minmax(0,1fr))}}
.trf2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@media (max-width:767px){.trf2{grid-template-columns:1fr}}
.chx__kvs--traits{margin-top:4px}
/* unverified e-mail banner (auth hardening) */
.verifybar{display:flex;align-items:center;gap:12px;min-height:36px;background:var(--bg-alt);border-bottom:1px solid var(--border-soft);color:var(--text-2);padding:3px 12px 3px 24px;font-size:var(--fs-sm);line-height:1.4}
.verifybar__t{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.verifybar__t b{font-weight:600;color:var(--text)}
.verifybar__a{flex:none;width:auto;padding:0;color:var(--blue-deep);font-weight:600;font-size:var(--fs-sm);white-space:nowrap}
.verifybar__a:hover{text-decoration:underline}
.verifybar__x{flex:none;border:0;background:none;color:var(--text-3);font-size:var(--fs-lg);line-height:1;width:28px;height:28px;border-radius:var(--r);cursor:pointer}
.verifybar__x:hover{background:var(--border-soft)}
@media (max-width:767px){.verifybar{padding:4px 8px 4px 16px;gap:8px}.verifybar__why{display:none}.verifybar__t{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical}}

/* 06 전환·오픈 · 07 운영 — activity checklist (project/checklist.js) */
.np__done{color:var(--ok-fg)}.np__done:hover{color:var(--ok-fg)}
.clk__tabs{display:flex;flex-wrap:wrap;gap:6px;margin:12px 0}
.clk__tab{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border:1px solid var(--border-soft);border-radius:var(--r-lg);font-size:var(--fs-sm);color:var(--text-2);text-decoration:none;background:#fff}
.clk__tab:hover{background:var(--bg-alt)}.clk__tab.is-active{border-color:var(--blue);color:var(--navy);font-weight:600}
.clk__card{border:1px solid var(--border-soft);border-radius:var(--r-lg);padding:16px;background:#fff}
.clk__h{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap}
.clk__t{display:flex;align-items:center;gap:8px;min-width:0}.clk__t h2{margin:0;font-size:var(--fs-lg);color:var(--navy)}
.clk__marks{display:inline-flex;align-items:center;gap:12px}
.clk__d{margin:6px 0 2px;color:var(--text-2);font-size:var(--fs-sm)}
.clk__crit{margin:0 0 10px;color:var(--text-3);font-size:var(--fs-sm)}.clk__crit b{color:var(--text-2);margin-right:4px}
.clk__cnt{color:var(--navy);font-variant-numeric:tabular-nums}
.clk__hint{margin:0 0 10px;font-size:var(--fs-sm);color:var(--warn-fg)}
.clk__tbl{width:100%;border-collapse:collapse;font-size:var(--fs-sm);table-layout:fixed}
.clk__tbl th{text-align:left;font-weight:500;font-size:var(--fs-xs);color:var(--text-3);padding:4px 6px;border-bottom:1px solid var(--border-soft)}
.clk__tbl td{padding:3px 4px;border-bottom:1px solid var(--border-soft);vertical-align:middle}
.clk__ck{width:32px;text-align:center}.clk__x{width:32px;text-align:center}
.clk__w-owner{width:130px}.clk__w-due{width:140px}
.clk__in{width:100%;min-width:0;height:30px;border-color:transparent;background:transparent;font-size:var(--fs-sm)}
.clk__in:hover:not(:disabled),.clk__in:focus{border-color:var(--border-soft);background:#fff}
.clk__row.is-done .clk__in[data-f=title]{text-decoration:line-through;color:var(--text-3)}
.clk__date.is-overdue{color:var(--danger-fg)}
.clk__del{color:var(--text-3);width:auto;padding:0 4px}.clk__del:hover{color:var(--danger-fg)}
.clk__empty{padding:14px;border:1px dashed var(--border-soft);border-radius:var(--r-lg);font-size:var(--fs-sm);color:var(--text-2)}.clk__empty p{margin:4px 0 10px;color:var(--text-3)}
.clk__add{display:flex;gap:6px;margin-top:10px;flex-wrap:wrap}.clk__add [name=title]{flex:1 1 220px;min-width:0}
.clk__memo{margin-top:16px;display:flex;flex-direction:column;gap:6px;align-items:flex-start}.clk__memo label{font-size:var(--fs-sm);color:var(--text-2);font-weight:600}.clk__memo textarea{width:100%}
.clk__back{margin-top:12px;font-size:var(--fs-sm)}
@media (max-width:760px){.clk__tbl thead{display:none}.clk__tbl,.clk__tbl tbody,.clk__tbl tr,.clk__tbl td{display:block;width:100%}.clk__tbl tr{display:grid;grid-template-columns:32px 1fr 32px;border-bottom:1px solid var(--border-soft);padding:4px 0}.clk__tbl td{border:0}.clk__tbl td:nth-child(n+3):not(.clk__x){grid-column:2}.clk__x{grid-column:3;grid-row:1}.clk__w-owner,.clk__w-due{width:100%}}

/* signup direction A — What's Next preview */
.auth--su-a .auth__form h1{font-size:30px;line-height:1.3;margin-bottom:12px}
.auth--su-a .auth__form .sub{line-height:1.7;margin-bottom:28px}
.su-eyebrow{display:inline-flex;align-items:center;gap:9px;font-size:var(--fs-sm);font-weight:700;letter-spacing:.08em;color:var(--blue);margin-bottom:14px}
.su-eyebrow::before{content:"";width:22px;height:1.5px;background:var(--blue);border-radius:var(--r-sm)}
.su-mobile{display:none}
.su-a{background:linear-gradient(180deg,var(--bg-tint),var(--bg-alt));justify-content:center}
.su-a__inner{width:100%;max-width:460px}
.su-a h2{font-size:28px;line-height:1.35;margin-bottom:28px}
.su-a__card{background:#fff;border:1px solid var(--border);border-radius:var(--r-xl);box-shadow:var(--sh-lift);display:grid;grid-template-columns:150px 1fr;overflow:hidden}
.su-a__head{grid-column:1/-1;display:flex;justify-content:space-between;align-items:center;padding:14px 18px;border-bottom:1px solid var(--border-soft);font-size:14px}
.su-a__head b{color:var(--navy)}
.su-a__head span{font-size:12px;font-weight:700;color:var(--blue-deep);background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:999px;padding:2px 10px}
.su-a__steps{list-style:none;margin:0;padding:12px 10px;border-right:1px solid var(--border-soft);background:var(--bg-alt)}
.su-a__steps li{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:var(--r);font-size:12.5px;color:var(--text-3);white-space:nowrap}
.su-a__steps i{font-style:normal;font-size:10.5px;font-weight:700;width:20px;color:var(--text-3)}
.su-a__steps li.is-current{background:#fff;color:var(--blue-deep);font-weight:700;box-shadow:inset 2px 0 0 var(--blue)}
.su-a__steps li.is-current i{color:var(--blue)}
.su-a__todo{padding:18px 18px 20px;display:flex;flex-direction:column}
.su-a__k{font-size:12px;font-weight:700;color:var(--blue);margin-bottom:6px}
.su-a__t{font-size:16px;font-weight:800;color:var(--navy);letter-spacing:-0.02em;margin-bottom:8px}
.su-a__d{font-size:13.5px;color:var(--text-2);line-height:1.65;margin-bottom:16px}
.su-a__cta{margin-top:auto;align-self:flex-end;font-size:13px;font-weight:600;color:#fff;background:var(--blue);border-radius:var(--r);padding:7px 12px}
.su-a__foot{margin-top:22px;font-size:13.5px;color:var(--text-2)}
@media (max-width:900px){
  .auth--su-a .auth__form{justify-content:flex-start;padding:32px 16px 40px}
  .auth--su-a .auth__form .logo{margin-bottom:28px}
  .auth--su-a .auth__form h1{font-size:25px}
  .auth--su-a .auth__form .sub{margin-bottom:16px}
  .su-a-m{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:26px}
  .su-a-m span{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;color:var(--text-2);background:var(--bg-alt);border:1px solid var(--border);border-radius:999px;padding:3px 10px}
  .su-a-m i{font-style:normal;font-size:10.5px;color:var(--text-3)}
  .su-a-m span.is-current{background:var(--bg-tint);border-color:var(--border-blue);color:var(--blue-deep)}
  .su-a-m span.is-current i{color:var(--blue)}
}

/* ---- Phase 1 v2 (01 착수): 사업수행계획서 메뉴 · 착수보고회 · 착수 결과 승인 · Home 7단계 ---- */
.pmenu{position:relative;display:inline-block}
.pmenu>summary{list-style:none;cursor:pointer;white-space:nowrap}.pmenu>summary::-webkit-details-marker{display:none}
.pmenu__list{position:absolute;right:0;top:calc(100% + 4px);z-index:30;min-width:160px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-lift);padding:6px;display:flex;flex-direction:column}
.pmenu__list button{border:0;background:none;text-align:left;padding:8px 10px;border-radius:var(--r);font-size:var(--fs-sm);cursor:pointer;color:var(--text)}
.pmenu__list button:hover,.pmenu__list button:focus-visible{background:var(--bg-tint)}
.pv__h{display:flex;align-items:center;gap:10px}.pv__sp{flex:1}
.np__noapv{display:flex;gap:8px;align-items:center;font-size:var(--fs-sm);color:var(--text-2);background:var(--warn-bg);border:1px solid var(--warn-bd);border-radius:var(--r-lg);padding:8px 12px;margin:0 0 12px}
.np__sum{display:block;font-size:var(--fs-sm);color:var(--blue-deep);margin-top:2px}.np__sum.is-crit{color:var(--danger)}
.def__schint{display:block;flex-basis:100%;font-size:var(--fs-xs);color:var(--text-3);margin:2px 0 0 2px}.def__schint:empty{display:none}
.def__list li:has(.def__schint:not(:empty)){flex-wrap:wrap}
.def__warn{flex-basis:100%;font-size:var(--fs-xs);color:var(--warn-fg);margin:2px 0 0}
.def__list--dates li{flex-wrap:wrap}
.def__shhelp{margin:0 0 8px}
.def__grid2{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
@media (max-width:720px){.def__grid2{grid-template-columns:1fr}}
.wd__tools{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:14px}
.kchk{display:flex;flex-wrap:wrap;gap:6px 14px}
.kchk__i{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm)}.kchk__i small{color:var(--text-3);font-size:var(--fs-xs)}
.kl li{display:flex;align-items:center;gap:8px}.kl li .input{flex:1}
.kl .kl__owner{flex:0 0 110px}.kl .kl__due{flex:0 0 140px}
.apv__what{background:var(--bg-alt);border:1px solid var(--border-soft);border-radius:var(--r-lg);padding:12px 14px;margin-bottom:16px}
.apv__wh{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}
.apv__what dl{margin:0;display:grid;gap:4px}.apv__what dl div{display:grid;grid-template-columns:72px 1fr;gap:8px;font-size:var(--fs-sm)}
.apv__what dt{color:var(--text-3)}.apv__what dd{margin:0;color:var(--text)}
.apv__direct{display:flex;flex-wrap:wrap;gap:6px 8px;margin-top:6px;align-items:center}.apv__direct .input{flex:1 1 120px}
.apv__methods{display:flex;flex-wrap:wrap;gap:6px 16px}
/* Phase 2 (02 요구사항 정의): 기준선 승인 Drawer · 범위 확정 hint · 우선순위 hint · What's Next row hint */
.apv__confirm{display:flex;margin:4px 0 8px;font-weight:600}
.apv__block{background:var(--danger-bg);border:1px solid var(--danger-bd);color:var(--danger);border-radius:var(--r-lg);padding:8px 12px;font-size:var(--fs-sm);margin:4px 0 8px}
.req-excl{font-size:var(--fs-sm);color:var(--text-2);background:var(--warn-bg);border:1px solid var(--warn-bd);border-radius:var(--r-lg);padding:8px 12px;margin:0 0 10px}
.req-phint{display:block;margin-top:4px;font-size:var(--fs-xs)}
.np__hint{display:block;font-size:var(--fs-sm);color:var(--text-3);margin-top:2px}
.np__reopen{color:var(--warn-fg)}
.dialog[tabindex="-1"]:focus{outline:none}
.notice--crit{background:var(--danger-bg);color:var(--danger-fg);border-color:var(--danger-bd)}
.chx__head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px}
.chx__badge{display:inline-block;font-size:var(--fs-xs);font-weight:700;border-radius:999px;padding:2px 8px;background:var(--border-soft);color:var(--text-2);margin-left:6px;vertical-align:2px}
.chx__badge.is-ok{background:var(--ok-bg);color:var(--ok-fg)}.chx__badge.is-crit{background:var(--danger-bg);color:var(--danger-fg)}
.chx__bypass{color:var(--danger-fg)}
.chtl__after{position:absolute;top:50%;right:0;height:22px;margin-top:-11px;background:repeating-linear-gradient(135deg,var(--border-soft) 0 6px,var(--border) 6px 8px);border-radius:var(--r-sm)}
.chtl__after span{position:absolute;left:50%;top:-18px;transform:translateX(-50%);font-size:var(--fs-2xs);font-weight:700;color:var(--text-3);white-space:nowrap}
.chtl__ms.is-late i{border-color:var(--muted)}.chtl__ms.is-late.is-past i{background:var(--muted)}
.chtl__ms.is-crowd span{display:none}
.chtl__ms.is-crowd:hover span,.chtl__ms.is-crowd:focus span{display:flex;z-index:5;background:#fff;padding:2px 6px;border-radius:var(--r);box-shadow:var(--sh-lift)}
.hero__flow{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.hero__flow li{display:inline-flex;align-items:center;gap:6px;font-size:var(--fs-sm);font-weight:600;color:var(--navy);background:var(--bg-alt);border-radius:999px;padding:6px 12px 6px 6px}
.hero__flow li i{font-style:normal;font-size:var(--fs-2xs);font-weight:700;color:#fff;background:var(--navy);border-radius:999px;padding:2px 6px}
.hero__flow li:first-child{background:var(--bg-tint);color:var(--blue-deep)}.hero__flow li:first-child i{background:var(--blue)}
.wd__form [data-af="evidence"],.wd__form [data-kf="place"]{width:100%}

/* ===== design clean-up batch (research/relai-design-system.md §7) ===== */
/* filters behind "필터 (n)": popover on desktop, bottom sheet on phones */
.fmore .gpop--filters{left:0;right:auto;width:240px;display:flex;flex-direction:column;gap:8px}
.fmore .gpop--filters[hidden]{display:none}
.fmore .gpop--filters .select{max-width:none!important;width:100%}
@media (max-width:767px){
  .fmore .gpop--filters{position:fixed;left:0;right:0;top:auto;bottom:0;width:auto;max-height:70vh;border-radius:var(--r-xl) var(--r-xl) 0 0;padding:16px 16px calc(16px + env(safe-area-inset-bottom));box-shadow:var(--sh-lift);z-index:120}
  .fmore .gpop--filters .select{height:40px}
}
/* tips are quiet one-line hints, not banners (design §3.10); dismissal persists per user (onboarding guide state) */
.coach{background:var(--bg-alt);border:0;border-radius:var(--r);padding:6px 8px 6px 10px;gap:8px;align-items:center;margin-bottom:10px}
.coach__i{width:18px;height:18px;background:none;border:1px solid var(--border-strong);color:var(--text-3);font-size:var(--fs-2xs)}
.coach__b b{display:inline;margin:0 6px 0 0;font-weight:600;color:var(--text)}
.coach__b p{display:inline;color:var(--text-2)}
.coach__b .link{margin-left:6px}
.coach__x{font-size:var(--fs-lg)}
/* Home: calm cards — neutral border; red border + 막힘 only for overdue / real blockers */
.hgrid{grid-template-columns:repeat(auto-fill,minmax(min(420px,100%),1fr))}
@media (max-width:1100px){.hgrid{grid-template-columns:repeat(auto-fill,minmax(min(420px,100%),1fr))}}
.hc{border-left:1px solid var(--border);padding-left:14px}
.hc.is-blocker{border-left:3px solid var(--danger);padding-left:12px}
.hc__strip{gap:8px}
.hc__strip .hc__att{margin-left:auto;font-weight:600}
/* tour: ✕ on every step; Home hero CTA + "1분 둘러보기" */
.tour__x{position:absolute;top:8px;right:8px;width:28px;height:28px;border:0;background:none;border-radius:var(--r);color:var(--text-3);font-size:var(--fs-lg);line-height:1;cursor:pointer}
.tour__x:hover{background:var(--border-soft);color:var(--text)}
.hero__cta{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.hero__cta .linkbtn{width:auto;color:var(--blue-deep);font-weight:600;font-size:var(--fs-md)}
.hero__cta .linkbtn:hover{text-decoration:underline}
/* badges: importance = quiet text tag (never red); status pills carry an icon (design §3.9) */
.badge--imp,.badge--req,.badge--muted{background:none;border:0;padding:0;height:auto;min-width:0;font-size:var(--fs-xs);font-weight:500;color:var(--text-3);margin-right:6px}
.badge--req{font-weight:700;color:var(--text)}
.badge--st{gap:4px}
.badge--st.is-prog::before{content:'●';font-size:var(--fs-2xs)}
.badge--st.is-todo::before{content:'○';font-size:var(--fs-2xs)}
.badge--st.is-crit::before{content:'!';font-weight:800}
.badge--st.is-skip::before{content:'—'}
/* 02 기준선 승인 = the same right-side panel as 01 착수 결과 승인 (Q6-1); chips for 승인 방법; inline errors; warn line (L-D1..L-D3) */
.rlayout.has-drawer:has(>.drawer--side)::before,.rlayout.has-drawer:has(.drawer.drawer--side)::before{background:transparent;pointer-events:none}
.rlayout .drawer.drawer--side{left:auto;right:0;top:0;bottom:0;transform:none;width:min(700px,92vw);height:auto;max-height:none;border-radius:0;border:0;border-left:1px solid var(--border);box-shadow:-12px 0 32px rgba(16,24,40,.08);z-index:90}
.drawer--side .wd__h{flex:none}
.drawer--side .drawer__b{flex:1;overflow-y:auto;padding:16px 18px}
.drawer--side .drawer__f{flex:none}
.apv__methods.choices{grid-template-columns:repeat(auto-fill,minmax(120px,1fr))}
.apv__err{font-size:var(--fs-xs);color:var(--danger-fg);margin-top:4px}
.apv__block{background:none;border:0;border-radius:0;padding:0;color:var(--warn-fg);font-weight:600;display:flex;gap:8px;align-items:baseline;flex-wrap:wrap}
.apv__block[hidden]{display:none}
.apv__block::before{content:'!';display:inline-flex;align-items:center;justify-content:center;width:16px;height:16px;border-radius:50%;background:var(--warn-bg);color:var(--warn-fg);font-size:var(--fs-2xs);font-weight:800;flex:none}
@media (max-width:900px){.rlayout .drawer.drawer--side{width:100%;left:0;border-left:0}}
/* dialogs: one grey summary line (L-D4); on phones buttons stack full width, primary on top (design §3.6) */
.dialog__diff{margin:-6px 0 16px;padding:6px 10px;background:var(--bg-alt);border-radius:var(--r);color:var(--text-2);font-size:var(--fs-sm);overflow-wrap:anywhere}
.actions__sp{flex:1}
@media (max-width:767px){
  .scrim .dialog .actions{flex-direction:column-reverse;align-items:stretch;gap:8px}
  .scrim .dialog .actions>.btn{width:100%}
  .scrim .dialog .actions>span:not(.btn){display:none}
}
/* stepper: one line on phones, tap to open the phase list */
.pstep__m{display:none}
@media (max-width:767px){
  .pstep__m{display:flex;align-items:center;gap:6px;width:100%;height:36px;padding:0 12px;margin:0 0 10px;background:#fff;border:1px solid var(--border);border-radius:var(--r);font-size:var(--fs-sm);font-weight:700;color:var(--blue-deep);cursor:pointer;font-variant-numeric:tabular-nums}
  .pstep__m i{margin-left:auto;font-style:normal;color:var(--text-3)}
  .pstepw:not(.is-open) .pstep{display:none}
  .pstepw.is-open .pstep{flex-direction:column;align-items:stretch;background:#fff;border:1px solid var(--border);border-radius:var(--r);padding:4px;margin-top:-6px}
  .pstepw.is-open .pstep li+li::before{display:none}
}
/* project title: wraps to 2 lines on phones, no ellipsis (design #7) */
@media (max-width:767px){
  .wsh__name,.shell .wsh__name{white-space:normal;max-width:none;overflow:hidden;text-overflow:clip;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.3;flex:1 1 auto}
  .wsh__row{flex-wrap:nowrap}
}
.btn--soft{background:var(--blue-soft);color:var(--blue-deep);border-color:var(--border-blue)}
.btn--soft:hover{background:var(--bg-tint);border-color:var(--blue)}
/* density (design §2.6): guide screens breathe — Home, 지금 할 일, 프로젝트 정의, 새 프로젝트, 설정 */
.page--guide,.wdrawer,.drawer--side{--ctl-h:36px;--row-h:48px;font-size:var(--fs-md)}
.page--guide .btn--sm,.wdrawer .btn--sm,.drawer--side .btn--sm{height:32px}
/* one primary per screen: while a drawer or dialog is open, its primary is the next step — page primaries behind it step back */
body:has(.scrim) #main .btn--primary,
#main:has(.wdrawer) .btn--primary:not(.wdrawer .btn--primary),
#main:has(.drawer--side:not([hidden])) .btn--primary:not(.drawer .btn--primary){background:#fff;color:var(--navy);border-color:var(--border-strong)}

/* ---------- Phase 3 (03 분석·설계): empty WBS · 뼈대 dialog · 계정 없음 · 종료일 초과 · 마일스톤 가져오기 ---------- */
.wempty__ic{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:50%;background:var(--blue-soft);color:var(--blue-deep);font-size:20px;margin-bottom:10px}
.wempty__a{align-items:center}
.wempty__add{max-width:420px;margin:14px auto 0}
.wempty__alt{margin:14px auto 0!important;font-size:var(--fs-sm)}
.wempty__alt .linkbtn{width:auto;display:inline;padding:0}
.skel{list-style:none;margin:4px 0 10px;padding:0;border:1px solid var(--border-soft);border-radius:var(--r-lg)}
.skel li{display:flex;justify-content:space-between;gap:12px;padding:7px 12px;border-top:1px solid var(--border-soft);font-size:var(--fs-sm)}
.skel li:first-child{border-top:0}
.skel b{font-variant-numeric:tabular-nums;text-align:right}.skel b small{font-weight:400;color:var(--text-3)}
.skel__note{margin:0;font-size:var(--fs-xs);color:var(--text-3)}
.wnoacct{margin-left:6px;font-size:12px;color:var(--text-3);font-weight:400;white-space:nowrap}
.whint{margin:4px 0 0;font-size:12px;color:var(--text-3);line-height:1.5}
.wpast{color:var(--warn-fg);font-weight:600;white-space:nowrap}.wpast i{font-style:normal;margin-right:3px}
.cell--past{color:var(--warn-fg)!important;font-weight:600}
.wpast__i{font-style:normal;font-weight:700;color:var(--warn-fg);margin-right:2px}
.wpast__msg{margin-top:4px}
.wsuggest{display:flex;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 12px;margin:0 0 10px;border:1px solid var(--border-soft);border-radius:var(--r-lg);background:#fff;font-size:var(--fs-sm)}
.gowner{margin-left:auto;padding-left:8px;font-size:12px;color:var(--text-2);white-space:nowrap}
.np__imp{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-top:4px;font-size:var(--fs-sm);color:var(--text-2)}
.rg__warn a{color:inherit;text-decoration:underline}
@media (max-width:600px){
  .wempty{padding:36px 16px}
  .wempty__a .btn{flex:1 1 100%}
  .wsuggest .btn{width:100%}
}

/* ---------- Phase 4 (04 구현) ---------- */
/* US-1 delay-reason dialog (440px confirm type; 375px: full-width buttons, primary on top) */
.dialog--confirm{max-width:440px}
.dly__shift{color:var(--navy);font-variant-numeric:tabular-nums}
@media (max-width:767px){.dialog--stack .actions{flex-direction:column-reverse;align-items:stretch}.dialog--stack .actions .btn{width:100%}}
/* US-1 "계획 5/14 → 5/21 (+7일)": a record, not a block — small grey text, never red */
.wshift{display:block;font-size:var(--fs-xs);line-height:1.3;color:var(--text-3);font-variant-numeric:tabular-nums;white-space:nowrap;margin-top:2px}
.wshift--d{white-space:normal;margin:6px 0 0}
.hnote{color:var(--text-3)}
/* US-2 CR customer approval */
.crapv{margin:0 0 8px;display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:var(--fs-sm)}
.crapv--none{color:var(--text-3)}
.crapv__l{display:block;font-size:var(--fs-xs);color:var(--text-3);margin-top:2px;white-space:nowrap}
.crapv__t{margin:0 0 8px;font-size:var(--fs-sm);color:var(--text)}
.crapv__dl dd.num{text-align:right;font-variant-numeric:tabular-nums}
.apv__what .crapv__dl div{grid-template-columns:1fr auto}
/* US-4 반영 완료 dialog */
.impl__list{margin:8px 0 0;padding-left:18px;display:grid;gap:4px;max-height:220px;overflow:auto}
.impl__warn{margin:0;color:var(--warn-fg)}
/* US-3 What's Next inline row action (secondary) */
.np__rowcta{white-space:nowrap}
/* US-8 Q9-1 주간보고 목록: <640px → card rows (기간 + 상태 / 제목 / 생성·확정) */
.rpl__wrap{overflow-x:auto}
@media (max-width:767px){
  .rpl__t thead{display:none}
  .rpl__t,.rpl__t tbody{display:block;width:100%}
  .rpl__t tr{display:grid;grid-template-columns:1fr auto;gap:4px 8px;padding:10px 0;border-bottom:1px solid var(--border-soft)}
  .rpl__t td{display:block;padding:0!important;border:0!important;min-width:0;white-space:normal!important;max-width:none!important}
  .rpl__t td a{white-space:normal;overflow-wrap:anywhere}
  .rpl__t .rpl__p{grid-column:1;grid-row:1}.rpl__t .rpl__s{grid-column:2;grid-row:1}
  .rpl__t .rpl__ti{grid-column:1/-1;overflow-wrap:anywhere}
  .rpl__t .rpl__d{grid-column:auto;font-size:var(--fs-xs)}
  .rpl__t .rpl__d::before{content:attr(data-label) " ";color:var(--text-3)}
}

/* ---------- Phase 5 (05 시험) ---------- */
/* 최근 결과 = status family pill with a shape (✓ 통과 · ! 실패 · ● 막힘 · ○ 미실행); only 실패 is red */
.res::before{margin-right:4px;font-weight:800}
.res--pass::before{content:'✓'}.res--fail::before{content:'!'}.res--blocked::before{content:'●';font-size:.8em}.res--not_run::before{content:'○'}
.noreq{color:var(--text-3);font-size:var(--fs-xs)}
.tag-later{display:inline-block;margin-left:6px;padding:0 6px;border-radius:999px;background:var(--border-soft);color:var(--text-3);font-size:var(--fs-xs);font-weight:600;vertical-align:middle}
.covhead{display:flex;flex-wrap:wrap;align-items:center;gap:8px 16px;margin:0 0 10px}
.covhead__n{font-size:var(--fs-md);color:var(--text-2)}.covhead__n b{color:var(--text)}.covhead__n .is-warn{color:var(--warn-fg);font-weight:700}
.covhead__sp{flex:1}
.covwarn{display:flex;align-items:center;gap:6px;margin:0 0 10px;font-size:var(--fs-sm);color:var(--text-2)}
.covx{color:var(--text-3)}.covx q{quotes:none}
.rtable tr.is-excl td{color:var(--text-3)}
.covacts{display:inline-flex;gap:10px;white-space:nowrap}
.dialog--sm{max-width:440px}
.prow{display:grid;grid-template-columns:1fr 1fr;gap:10px}
@media (max-width:767px){.prow{grid-template-columns:1fr}}
.rd-resolve{display:flex;flex-direction:column;gap:4px;margin:4px 0 10px;padding:8px 10px;border-radius:var(--r-lg);background:var(--ok-bg)}
.rd-resolve label{display:flex;align-items:center;gap:8px;font-size:var(--fs-sm)}
.exec__who small{color:var(--text-3)}
.reqpick{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.reqpick .chip button{border:0;background:none;margin-left:4px;cursor:pointer;color:inherit}
.tempty__alt{margin-top:10px;font-size:var(--fs-sm);display:flex;justify-content:center;align-items:center;gap:6px;flex-wrap:wrap}
.tempty__alt .linkbtn{width:auto;display:inline;padding:0}
.tag-later{white-space:nowrap}
@media (max-width:767px){
  .dialog--sm .actions{flex-direction:column-reverse;align-items:stretch}.dialog--sm .actions .btn{width:100%}
  .dialog--run .actions{position:sticky;bottom:0;background:var(--bg);padding-top:8px}
  .empty .btn--primary.btn--lg{width:100%}
}
.covacts .linkbtn{width:auto}

/* ---------- Phase 6 (06 전환 및 오픈) ---------- */
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}
/* 운영 이관 — grey text tag (same look as 계정 없음, never a badge or warn colour) */
.carry{margin-left:6px;font-size:12px;color:var(--text-3);font-weight:400;white-space:nowrap;max-width:260px;overflow:hidden;text-overflow:ellipsis;display:inline-block;vertical-align:middle}
.carryline{margin:8px 0 0;font-size:var(--fs-sm);color:var(--text-3)}
/* 오픈 dialog (§3.6 form, 560px): 오픈일 → 정할 항목 (segmented 처리하러 가기 | 운영 이관 + memo) → warn line → footer status + [취소][오픈 완료] */
.dialog.gl{max-width:560px;display:flex;flex-direction:column;max-height:90vh;padding:24px 24px 16px}
.gl__d{color:var(--text-2);margin:0 0 14px;font-size:var(--fs-sm)}
.gl__b{overflow:auto;flex:1 1 auto}
.gl__date{max-width:180px}
.gl__h{font-size:var(--fs-sm);margin:16px 0 6px;color:var(--text-2)}
.gl__list{list-style:none;margin:0;padding:0;border-top:1px solid var(--border-soft)}
.gl__row{display:grid;grid-template-columns:1fr auto;gap:6px 10px;align-items:center;padding:10px 0;border-bottom:1px solid var(--border-soft)}
.gl__m{display:flex;flex-wrap:wrap;gap:4px 8px;align-items:baseline;min-width:0}
.gl__type{font-size:12px;color:var(--text-3)}
.gl__t{font-weight:600;min-width:0;overflow-wrap:anywhere}
.gl__seg button{height:30px;padding:0 10px;font-size:12.5px}
.gl__note{grid-column:1/-1}
.gl__note .input{width:100%}
.gl__memo{grid-column:1/-1;margin:0;color:var(--text-2);font-size:var(--fs-sm)}
.gl__warn{margin:12px 0 0;font-size:var(--fs-sm);color:var(--warn-fg);display:flex;gap:6px;align-items:center}
.gl__f{display:flex;align-items:center;gap:10px;padding-top:14px;margin-top:8px;border-top:1px solid var(--border-soft)}
.gl__btns{display:flex;gap:8px;margin-left:auto}
/* 검수 승인 Drawer (US-1): "검수받을 내용" numbers right-aligned; only 열린 이슈 in warn colour (never red — it does not block) */
.accard dl{display:grid;grid-template-columns:1fr auto;gap:4px 12px;margin:6px 0 0}
.accard dd{margin:0;text-align:right;font-variant-numeric:tabular-nums}
.accard dd.is-warn{color:var(--warn-fg);font-weight:700}
.accscope{margin:10px 0 0;padding:10px 12px;border:1px solid var(--border-soft);border-radius:var(--r-lg);background:var(--bg-tint)}
.accscope .toggle{font-weight:600}
.accscope p{margin:4px 0 0;font-size:12px;color:var(--text-3)}
.clk__own{display:flex;flex-direction:column;gap:4px}
.clk__own small{color:var(--text-3)}
.np__links{display:flex;flex-wrap:wrap;gap:4px 10px;font-size:12.5px}
@media (max-width:767px){
  .scrim--sheet{padding:0;align-items:stretch}
  .scrim--sheet .dialog.gl{max-width:none;max-height:none;height:100%;border-radius:0;padding:16px}
  .gl__row{grid-template-columns:1fr}
  .gl__seg{justify-self:start}
  .gl__f{position:sticky;bottom:0;background:#fff}
}

/* ---------- Phase 7 (07 운영 및 유지보수): 운영 인수 · 종료 dialog · 종료 후 What's Next · 완료보고서 교훈 ---------- */
.ho__two{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:start}
.ho__two .select{width:100%}
.ho__own .select{min-width:180px;max-width:240px}
.dialog.gl.cl{max-width:440px}
.cl__carry{margin:8px 0 0;font-size:var(--fs-sm);color:var(--text-2)}
.dgap{margin:0 0 10px;font-size:var(--fs-sm);color:var(--warn-fg);display:flex;gap:6px;align-items:flex-start}
.dgap .link{color:inherit;text-decoration:underline}
.wsh__done{white-space:nowrap}
.closed{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:36px 20px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff}
.closed__ic{width:40px;height:40px;border-radius:50%;display:grid;place-items:center;font-size:20px;font-weight:700;color:var(--ok-fg);background:var(--ok-bg)}
.closed h2{margin:4px 0 0;font-size:var(--fs-lg,18px);color:var(--navy)}
.closed__d{margin:0;color:var(--text-2);font-size:var(--fs-sm)}
.closed__cta{margin-top:8px}
.closed .closed__undo{width:auto;align-self:center;font-size:var(--fs-sm);color:var(--text-3)}
.closed__ph{margin-top:14px}
.closed__ph>summary{cursor:pointer;padding:8px 2px;font-size:var(--fs-sm);color:var(--text-2)}
.doc__lessons{display:grid;gap:12px}
.doc__lesson h3{margin:0 0 4px;font-size:var(--fs-sm);color:var(--text-2)}
.hc__done-r{font-size:var(--fs-sm)}
.rpl__btns{display:flex;gap:8px;align-items:center;margin-left:auto}.rpl__btns .rpl__new{margin-left:0}
@media (max-width:767px){
  .ho__two{grid-template-columns:1fr}
  .ho__own .select{max-width:none;width:100%}
  .scrim--sheet .dialog.gl.cl{max-width:none}
  .closed__cta{align-self:stretch}
  .hc__done{grid-template-columns:1fr auto}.hc__done .hc__client{display:none}
}

/* ===== polish batch: 375px (K18–K22) ===== */
.pmore,.fsheet__f,.coach__more{display:none}
.gpop--filters .gpop__t{display:flex;align-items:center;justify-content:space-between}
.fsheet__x{background:none;border:0;color:var(--text-3);font-size:var(--fs-lg);line-height:1;cursor:pointer;padding:0 2px}
@media (max-width:767px){
  /* K18: toolbar = search + 필터 (row 1) · tabs + ⋯ + one primary (row 2); the rest lives behind ⋯ */
  .rtool .ph-hide,.rhead .ph-hide{display:none!important}
  .rtool .pmore{display:inline-flex}
  .rtool .pmore .gpop{left:auto;right:0}
  .rtool #q{order:1;flex:1 1 calc(100% - 112px);min-width:0;width:auto!important;max-width:none!important}
  .rtool .fmore{order:2}
  .rtool .pmore{order:3}
  .rtool .seg,.rtool .gtools:not(.fmore):not(.pmore):not(.ph-hide){order:4}
  .rtool .rtool__sp{display:none}
  .rtool #add{order:5;margin-left:auto}
  .kstrip{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;min-width:0;max-width:100%}
  .kstrip>*{flex:none}
  .rrow2 .qa{display:none}
  /* K20: filter sheet = dim backdrop · header ✕ · 적용 · 36px controls */
  .fmore:has(> .gpop--filters:not([hidden]))::before{content:'';position:fixed;inset:0;background:rgba(15,23,42,.42);z-index:119}
  .fmore .gpop--filters .gpop__t{font-size:var(--fs-md);font-weight:700;color:var(--navy);margin-bottom:4px}
  .fmore .gpop--filters .fsheet__x{width:36px;height:36px;font-size:var(--fs-xl)}
  .fmore .gpop--filters .select,.fmore .gpop--filters .input{height:36px;min-height:36px;font-size:var(--fs-md)}
  .fmore .gpop--filters .toggle{min-height:36px;display:flex;align-items:center;gap:8px}
  .fmore .gpop--filters .fsheet__f{display:block;margin-top:6px}
  .fmore .gpop--filters .fsheet__f .btn{width:100%;height:40px;justify-content:center}
  /* K21: tips on one line + 자세히 */
  .coach{align-items:center}
  .coach:not(.is-open) .coach__b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .coach:not(.is-open) .coach__b .link{display:none}
  .coach .coach__more{display:inline;flex:none;width:auto;font-size:var(--fs-xs);color:var(--blue-deep);background:none;border:0;padding:0;cursor:pointer}
  /* K19: WBS card = 1.1 제목 / 담당자 · 시작–종료 · 상태, no tree indent inside the card */
  .gtable--wbs .wtitle{padding-left:0!important}
  .gtable--wbs .wdrag{display:none}
  .gtable--wbs tbody tr td.gc--stick.mono{order:0;width:auto!important;min-width:0!important}
  .gtable--wbs tbody tr td .cell--date{width:48px;min-width:0;padding:0}
  .gtable--wbs tbody tr td .av{display:none}
  .gtable--wbs tbody tr td.ttl{order:1;flex:1 1 calc(100% - 60px)}
  .gtable--wbs tbody tr td[data-label="담당자"]{order:2}
  .gtable--wbs tbody tr td[data-label="계획 시작"]{order:3;margin-right:-8px;display:flex!important;align-items:center;white-space:nowrap}
  .gtable--wbs .wtog--none{display:none}
  .gtable--wbs tbody tr td[data-label="계획 시작"]::after{content:'–';margin-left:2px;color:var(--text-3)}
  .gtable--wbs tbody tr td[data-label="계획 종료"]{order:4}
  .gtable--wbs tbody tr td[data-label="상태"]{order:5}
  .gtable--wbs tbody tr.is-ms td[data-label="계획 시작"]{display:none!important}
  /* Q17-2: line 2 = 담당자 · 시작–종료 · 상태 fits 375 — controls size to their value, 계정 없음/계획 변경 stay in the drawer */
  .gtable--wbs tbody tr{column-gap:6px}
  .gtable--wbs tbody tr td .cell{field-sizing:content}
  .gtable--wbs tbody tr td[data-label="담당자"] .cellwrap{max-width:84px;vertical-align:middle}
  .gtable--wbs tbody tr td[data-label="담당자"] .cell{max-width:84px;text-overflow:ellipsis}
  .gtable--wbs tbody tr td[data-label="담당자"]{display:flex!important;align-items:center;white-space:nowrap}
  .gtable--wbs .wnoacct,.gtable--wbs .wshift{display:none}
  .gtable--wbs tbody tr td[data-label="계획 종료"],.gtable--wbs tbody tr td[data-label="상태"]{display:flex!important;align-items:center;white-space:nowrap}
  .gtable--wbs .wdep{white-space:nowrap;flex:none}
  .gtable--wbs tbody tr td[data-label="계획 시작"]{margin-right:0}
  .gtable--wbs tbody tr td[data-label="계획 시작"]::after{margin-left:6px}
  .gtable--wbs tbody tr td[data-label="담당자"]::after{content:'·';margin-left:8px;color:var(--text-3)}
  .gtable--wbs tbody tr td[data-label="상태"]::before{content:'·';margin-right:8px;color:var(--text-3)}
  /* K22: coverage rows = REQ-ID + 제목 / 검증 상태 + 할 일; tabs on one line */
  .rtable--cov thead{display:none}
  .rtable--cov,.rtable--cov tbody{display:block;width:100%}
  .rtable--cov tbody tr{display:grid;grid-template-columns:auto minmax(0,1fr);gap:4px 10px;padding:10px 12px;border-bottom:1px solid var(--border-soft)}
  .rtable--cov tbody td{display:block;padding:0;border:0;min-width:0;max-width:none;white-space:normal}
  .rtable--cov tbody td.cov__st,.rtable--cov tbody td.cov__n{display:none}
  .rtable--cov tbody td.cov__v{grid-column:1;grid-row:2}
  .rtable--cov tbody td.cov__a{grid-column:2;grid-row:2}
  .rtable--cov .covacts{flex-wrap:wrap}
  .rhead .seg--lg{flex-wrap:nowrap;max-width:100%;overflow-x:auto}
  .rhead .seg--lg button{white-space:nowrap;padding-left:10px;padding-right:10px}
  .rhead .seg--lg .tag-later{display:none}
}

/* ---------- B9: signup consent + public legal footer (shared/legal-info.js) ---------- */
.consent{border:1px solid var(--border);border-radius:var(--r-lg);padding:12px 14px;margin:4px 0 18px;font-size:var(--fs-md);min-width:0}
.consent label{display:inline-flex;align-items:center;gap:8px;cursor:pointer}
.consent input[type=checkbox]{width:16px;height:16px;margin:0;flex:none;accent-color:var(--blue)}
.consent__all{padding-bottom:10px;margin-bottom:8px;border-bottom:1px solid var(--border-soft);width:100%}
.consent__row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:4px 0}
.consent__row .link{font-size:var(--fs-sm);flex:none}
.consent .req{color:var(--blue-deep);font-weight:600}
.consent .err{margin:0 0 2px 24px}
.consent__d{margin:2px 0 4px 24px;font-size:var(--fs-sm);color:var(--text-2)}
.consent__d summary{cursor:pointer;color:var(--text-3)}
.consent__d dl{margin:8px 0 0;display:grid;grid-template-columns:auto 1fr;gap:4px 10px}
.consent__d dt{color:var(--text-3);white-space:nowrap}.consent__d dd{margin:0}
.auth__gnote{margin-top:10px;text-align:center}
.legal-foot{margin-top:40px;padding-top:18px;border-top:1px solid var(--border-soft);font-size:12px;line-height:1.7;color:var(--text-3)}
.legal-foot__links{display:flex;flex-wrap:wrap;gap:4px 14px;margin-bottom:6px}.legal-foot__links a{color:var(--text-2);text-decoration:none}.legal-foot__links a:hover{text-decoration:underline}
.legal-biz{margin:0;display:flex;flex-wrap:wrap;gap:0 12px}.legal-biz__k{color:var(--text-2)}.legal-biz a{color:inherit}
.legal-foot__c{margin:6px 0 0}
/* =====================================================================================================================
 * PHONE = VIEW MODE (< 768px, html.is-phone — core/device.js · hive research/relai-mobile-spec.md)
 * On a phone you look; on a PC you do. One block: shell (top bar · status strip · bottom tabs), PC line, hidden edit
 * controls, tables → 3-line cards, full-screen read-only detail sheet. Desktop / tablet (≥ 768px) is untouched.
 * ===================================================================================================================== */
.tabbar,.pstrip,.ptop,.pcline,.phone-only{display:none}
html.is-phone{--tabbar-h:56px}
html.is-phone body{font-size:14px;overflow-wrap:anywhere}
/* shell */
html.is-phone .shell,html.is-phone .shell--ws{grid-template-columns:minmax(0,1fr)}
html.is-phone .shell .topbar,html.is-phone .shell--ws .topbar{display:flex;align-items:center;gap:8px;height:48px;padding:0 8px 0 16px;background:#fff;border-bottom:1px solid var(--border-soft);position:sticky;top:0;z-index:50}
html.is-phone .topbar .logo{font-size:var(--fs-lg);font-weight:800;min-height:44px;display:flex;align-items:center}
html.is-phone .topbar #menu{display:none}
html.is-phone .topbar__r{margin-left:auto;display:flex;align-items:center}
html.is-phone .topbar__r .help,html.is-phone .topbar__r [data-help]{min-width:44px;min-height:44px}
html.is-phone .ptop:not([hidden]){display:flex;align-items:center;min-height:44px;flex:1 1 auto;min-width:0;font-size:15px;font-weight:700;color:var(--navy);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;overflow-wrap:normal}
html.is-phone .ptop:not([hidden])~.topbar__r{margin-left:0}
html.is-phone .topbar:has(.ptop:not([hidden])) .logo{display:none}
html.is-phone .pstrip:not([hidden]){display:block;height:32px;background:#fff;border-bottom:1px solid var(--border-soft);position:sticky;top:48px;z-index:49}
html.is-phone .pstrip__a{display:flex;align-items:center;gap:8px;height:32px;padding:0 16px;font-size:var(--fs-sm);color:var(--text-2);white-space:nowrap;overflow:hidden}
html.is-phone .pstrip__n{overflow:hidden;text-overflow:ellipsis;min-width:0;overflow-wrap:normal}
html.is-phone .pstrip .chip{flex:none}
html.is-phone .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:80;height:calc(var(--tabbar-h) + env(safe-area-inset-bottom));padding-bottom:env(safe-area-inset-bottom);background:#fff;border-top:1px solid var(--border-soft)}
html.is-phone .tabbar__i{flex:1 1 0;min-width:0;min-height:44px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;color:var(--text-3);font-size:11px;font-weight:600;background:none;border:0;padding:0;cursor:pointer;font-family:inherit}
html.is-phone .tabbar__i svg{width:22px;height:22px}
html.is-phone .tabbar__i.is-active{color:var(--accent,var(--blue))}
html.is-phone .maincol{padding-bottom:calc(72px + env(safe-area-inset-bottom))}
html.is-phone .side,html.is-phone .shell--ws .side{position:fixed;inset:0;width:auto;max-width:none;height:100%;z-index:95;transform:translateY(100%);transition:transform .2s;box-shadow:var(--sh-lift)}
html.is-phone .side.is-open{transform:none}
html.is-phone .side__fold{display:none}
html.is-phone .side .phone-only{display:flex}
html.is-phone .side .lnb__i,html.is-phone .side .lnb__phh,html.is-phone .side .navlink,html.is-phone .side .lnb__back{min-height:44px}
html.is-phone .wsh{display:none}
html.is-phone .shell--ws .page--wide{min-height:0;height:auto}
html.is-phone .shell--ws .page--wide:has(>.rlayout){height:auto}
html.is-phone .shell--ws .page--wide>*:not(.wsh){margin-left:16px;margin-right:16px}
html.is-phone .shell--ws .page--wide>.wsh+*{margin-top:12px}
html.is-phone .page{padding:16px 16px 24px}
html.is-phone .pcline{display:block;margin:4px 0 12px;font-size:13px;color:var(--text-2);font-weight:400}
html.is-phone .pconly{padding:48px 16px}
html.is-phone .pconly .link{display:inline-flex;min-height:44px;align-items:center}
/* hidden edit controls (the guard in core/api.js stops anything CSS misses) */
html.is-phone .main button.btn:not([data-phone-ok]),
html.is-phone .main a.btn[href$="/new"],html.is-phone .main a.btn[href*="/edit"],html.is-phone .main a[href*="move=next"],
html.is-phone .wsh__ask,html.is-phone [data-ai-ask],html.is-phone .ganttwrap,html.is-phone .bulk,
html.is-phone .grid input[type=checkbox],html.is-phone .rtable input[type=checkbox]{display:none!important}
/* tables → stacked cards: line 1 ID … status chip · line 2 title (2 lines) · line 3 owner · dates · one more value */
html.is-phone .rtable-wrap,html.is-phone .rpl__wrap{border:0;background:none;overflow:visible;max-height:none}
html.is-phone .rtable,html.is-phone .rtable tbody{display:block;width:100%}
html.is-phone .rtable thead{display:none}
html.is-phone .rtable tbody tr{display:flex;flex-wrap:wrap;align-items:center;row-gap:4px;padding:14px 16px;background:#fff;border:1px solid var(--border-soft);border-radius:var(--r-md);margin-bottom:12px;min-height:44px}
html.is-phone .rtable td{display:none;padding:0;border:0;height:auto;min-width:0;max-width:none;white-space:normal;font-size:14px;color:var(--text-2);background:none}
html.is-phone .rtable--iss tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-family:var(--mono,monospace);font-size:13px;color:var(--text-3)}
html.is-phone .rtable--iss tbody td:nth-child(4){display:block;order:2;margin-left:auto;flex:none;text-align:right}
html.is-phone .rtable--iss tbody td:nth-child(2){display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;order:3;flex:0 0 100%;font-size:15px;font-weight:600;color:var(--navy)}
html.is-phone .rtable--iss tbody td:nth-child(3){display:inline;order:4}
html.is-phone .rtable--iss tbody td:nth-child(5){display:inline;order:5}
html.is-phone .rtable--iss tbody td:nth-child(5)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--iss tbody td:nth-child(6){display:inline;order:6}
html.is-phone .rtable--iss tbody td:nth-child(6)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--risk tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-family:var(--mono,monospace);font-size:13px;color:var(--text-3)}
html.is-phone .rtable--risk tbody td:nth-child(6){display:block;order:2;margin-left:auto;flex:none;text-align:right}
html.is-phone .rtable--risk tbody td:nth-child(2){display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;order:3;flex:0 0 100%;font-size:15px;font-weight:600;color:var(--navy)}
html.is-phone .rtable--risk tbody td:nth-child(5){display:inline;order:4}
html.is-phone .rtable--risk tbody td:nth-child(7){display:inline;order:5}
html.is-phone .rtable--risk tbody td:nth-child(7)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--risk tbody td:nth-child(8){display:inline;order:6}
html.is-phone .rtable--risk tbody td:nth-child(8)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--tc tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-family:var(--mono,monospace);font-size:13px;color:var(--text-3)}
html.is-phone .rtable--tc tbody td:nth-child(3){display:block;order:2;margin-left:auto;flex:none;text-align:right}
html.is-phone .rtable--tc tbody td:nth-child(2){display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;order:3;flex:0 0 100%;font-size:15px;font-weight:600;color:var(--navy)}
html.is-phone .rtable--tc tbody td:nth-child(4){display:inline;order:4}
html.is-phone .rtable--tc tbody td:nth-child(6){display:inline;order:5}
html.is-phone .rtable--tc tbody td:nth-child(6)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--tc tbody td:nth-child(5){display:inline;order:6}
html.is-phone .rtable--tc tbody td:nth-child(5)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--acc tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-family:var(--mono,monospace);font-size:13px;color:var(--text-3)}
html.is-phone .rtable--acc tbody td:nth-child(3){display:block;order:2;margin-left:auto;flex:none;text-align:right}
html.is-phone .rtable--acc tbody td:nth-child(2){display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;order:3;flex:0 0 100%;font-size:15px;font-weight:600;color:var(--navy)}
html.is-phone .rtable--acc tbody td:nth-child(4){display:inline;order:4}
html.is-phone .rtable--acc tbody td:nth-child(7){display:inline;order:5}
html.is-phone .rtable--acc tbody td:nth-child(7)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--acc tbody td:nth-child(5){display:inline;order:6}
html.is-phone .rtable--acc tbody td:nth-child(5)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--cov tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-family:var(--mono,monospace);font-size:13px;color:var(--text-3)}
html.is-phone .rtable--cov tbody td:nth-child(8){display:block;order:2;margin-left:auto;flex:none;text-align:right}
html.is-phone .rtable--cov tbody td:nth-child(2){display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;order:3;flex:0 0 100%;font-size:15px;font-weight:600;color:var(--navy)}
html.is-phone .rtable--cov tbody td:nth-child(4){display:inline;order:4}
html.is-phone .rtable--cov tbody td:nth-child(3){display:inline;order:5}
html.is-phone .rtable--cov tbody td:nth-child(3)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--cr tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-family:var(--mono,monospace);font-size:13px;color:var(--text-3)}
html.is-phone .rtable--cr tbody td:nth-child(3){display:block;order:2;margin-left:auto;flex:none;text-align:right}
html.is-phone .rtable--cr tbody td:nth-child(2){display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;order:3;flex:0 0 100%;font-size:15px;font-weight:600;color:var(--navy)}
html.is-phone .rtable--cr tbody td:nth-child(7){display:inline;order:4}
html.is-phone .rtable--cr tbody td:nth-child(5){display:inline;order:5}
html.is-phone .rtable--cr tbody td:nth-child(5)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--cr tbody td:nth-child(9){display:inline;order:6}
html.is-phone .rtable--cr tbody td:nth-child(9)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rpl__t tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-family:var(--mono,monospace);font-size:13px;color:var(--text-3)}
html.is-phone .rpl__t tbody td:nth-child(3){display:block;order:2;margin-left:auto;flex:none;text-align:right}
html.is-phone .rpl__t tbody td:nth-child(2){display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;order:3;flex:0 0 100%;font-size:15px;font-weight:600;color:var(--navy)}
html.is-phone .rpl__t tbody td:nth-child(4){display:inline;order:4}
html.is-phone .rpl__t tbody td:nth-child(5){display:inline;order:5}
html.is-phone .rpl__t tbody td:nth-child(5)::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .rtable--tc tbody td:nth-child(4)::before{content:'요구 '}
html.is-phone .rtable td.ttl small{font-size:12px}
html.is-phone .side:not(.is-open){display:none}
html.is-phone .shell--ws .page--wide{padding:0 0 24px}
html.is-phone .shell--ws .page--wide>.pcline{margin-top:12px}
html.is-phone .pcnote{margin:0 0 12px;font-size:14px;color:var(--text-2)}
html.is-phone .seg:has([data-view="gantt"]){display:none}
/* grid (createGrid) rows → cards */
html.is-phone .gridwrap{max-height:none;overflow:visible;border:0;background:none}
html.is-phone .grid,html.is-phone .wbs-wrap{border:0;background:none}
html.is-phone .gtable tbody tr{padding:14px 16px;border:1px solid var(--border-soft);border-radius:var(--r-md);margin-bottom:12px;gap:4px 0;min-height:44px}
html.is-phone .gtable tbody tr td{font-size:14px}
html.is-phone .gtable tbody tr td.gc--stick.mono{font-size:13px;color:var(--text-3);min-width:0;margin-right:8px}
html.is-phone .gtable tbody tr td.ttl{font-size:15px;font-weight:600}
html.is-phone .gfoot{background:none;border:0;padding:4px 0}
html.is-phone .gtable--req tbody tr td.gc--stick.mono{order:1;flex:1 1 auto}
html.is-phone .gtable--req tbody tr td[data-label="상태"]{order:2;margin-left:auto}
html.is-phone .gtable--req tbody tr td.ttl{order:3;flex:0 0 100%;display:-webkit-box!important;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
html.is-phone .gtable--req tbody tr td[data-label="유형"]{display:block;order:4}
html.is-phone .gtable--req tbody tr td[data-label="우선순위"]{order:5}
html.is-phone .gtable--req tbody tr td[data-label="범위"]{order:6}
html.is-phone .gtable--req tbody tr td[data-label="우선순위"]::before,html.is-phone .gtable--req tbody tr td[data-label="범위"]::before{content:'·';margin:0 6px;color:var(--text-3)}
html.is-phone .gtable--req tbody tr td[data-label="범위"] *{border:0;padding:0;background:none;font-size:14px;color:var(--text-2)}
html.is-phone .gtable--wbs tbody tr td.gc--stick.mono{min-width:40px}
html.is-phone .gtable--wbs tbody tr td.ttl{flex:1 0 calc(100% - 56px)}
html.is-phone .summary--inline,html.is-phone .kpis--line,html.is-phone .rhead .summary{flex-wrap:wrap;overflow:visible;max-width:100%}
html.is-phone .pcdl{margin:0 0 12px;font-size:14px;color:var(--text-2)}
html.is-phone .pcdl .linkbtn{width:auto;display:inline-flex;align-items:center;min-height:44px;padding:0 4px;font-size:14px}
html.is-phone .np__purpose,html.is-phone .np__acts:empty,html.is-phone .np__d{display:none}
html.is-phone .rg__warn{white-space:normal;margin-left:0;max-width:100%}
html.is-phone .np__row{grid-template-columns:minmax(0,1fr) auto}
html.is-phone .doc__actions{display:flex;width:100%;gap:8px}
html.is-phone .doc__actions [data-dl]{flex:1 1 0;min-height:44px}
html.is-phone .doc{overflow-x:hidden}
html.is-phone .doc table{display:block;overflow-x:auto;max-width:100%}
html.is-phone .cmt,html.is-phone .qa{display:none}
html.is-phone .rofield{display:inline;font-size:14px;color:var(--navy);overflow-wrap:anywhere}
html.is-phone .rofield--long{display:block;white-space:pre-wrap}
html.is-phone .rofrozen{display:none!important}
html.is-phone .pv__row{grid-template-columns:24px minmax(0,1fr) auto;column-gap:8px}
html.is-phone .pv__purpose,html.is-phone .pv__cta{display:none}
html.is-phone .pv__m{min-width:0}
html.is-phone .phone-logout{width:100%;margin-top:20px;min-height:44px}
html.is-phone .main .inline-form{display:inline}
html.is-phone .hc__up{flex-wrap:wrap;white-space:normal;overflow:hidden}
html.is-phone .hc__ms{white-space:normal;min-width:0;overflow-wrap:anywhere}
html.is-phone #bill-buy,html.is-phone #billing details{display:none}
html.is-phone .rtable--mem tbody td:nth-child(1){display:block;order:1;flex:1 1 auto;font-weight:600;color:var(--navy)}
html.is-phone .rtable--mem tbody td:nth-child(3){display:block;order:2;margin-left:auto}
html.is-phone .rtable--mem tbody td:nth-child(2){display:block;order:3;flex:0 0 100%}
html.is-phone .gtable--wbs tbody tr td.gc--stick.mono{flex:0 0 48px;min-width:48px;margin-right:0}
html.is-phone .gtable--wbs tbody tr td.ttl{flex:1 0 calc(100% - 58px)}
html.is-phone .side,html.is-phone .shell--ws .side{bottom:calc(var(--tabbar-h) + env(safe-area-inset-bottom));height:auto}
html.is-phone .sidescrim{display:none!important}
html.is-phone .np__row{display:block;position:relative;padding:12px 8px 12px 9px}
html.is-phone .np__row>.badge--st{position:absolute;top:12px;right:8px;width:auto}
html.is-phone .np__st{padding-right:80px}
html.is-phone .shell--ws .page--wide>*+*{margin-top:8px}
html.is-phone .shell--ws .page--wide>.pcline{margin:8px 16px 0}
html.is-phone .rhead{gap:6px;margin-bottom:0}
html.is-phone .rhead .seg button{height:32px}
html.is-phone .rtool{margin-bottom:0}
html.is-phone .shell--ws .page--wide>.coach{margin-bottom:0}
html.is-phone .summary--inline>div{padding-top:4px;padding-bottom:4px}
html.is-phone .rhead .summary--inline>div{padding:3px 10px;min-height:0}
html.is-phone .rhead .seg{height:32px}
/* AI 크레딧 (설정 › AI 크레딧, AI-credits-only billing) */
.cr-kpis{display:grid;grid-template-columns:1fr 1fr;gap:12px 24px}
.cr-kpi{display:flex;flex-direction:column;gap:2px}
.cr-kpi__l{font-size:var(--fs-sm);color:var(--text-3)}
.cr-kpi__v{font-size:var(--fs-xl);font-weight:800;color:var(--navy);font-variant-numeric:tabular-nums}
.cr-kpi__w{font-size:var(--fs-md);color:var(--text-2);font-variant-numeric:tabular-nums}
.cr-sum.is-low{border-color:var(--warn-bd);background:var(--warn-bg)}
.cr-sum.is-low .cr-kpi__v{color:var(--warn-fg)}
.cr-warn{margin:14px 0 0;color:var(--warn-fg);font-weight:600;font-size:var(--fs-md)}
.cr-gift{margin:12px 0 0;padding:10px 12px;border-radius:var(--r-sm);background:var(--bg-tint);color:var(--blue-deep);font-size:var(--fs-md)}
.cr-early{margin:0 0 12px;font-size:var(--fs-md);color:var(--text-2)}
.cr-feat{margin:12px 0 0;display:flex;flex-wrap:wrap;gap:4px 8px;font-size:var(--fs-sm)}
.cr-feat__i b{font-variant-numeric:tabular-nums}
.cr-packs{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.cr-pack{display:flex;flex-direction:column;align-items:flex-start;gap:2px;padding:14px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff;cursor:pointer;text-align:left;font:inherit;color:inherit}
.cr-pack:hover{border-color:var(--blue);box-shadow:inset 3px 0 0 var(--blue)}
.cr-pack b{font-size:var(--fs-lg);color:var(--navy)}
.cr-pack small{font-size:var(--fs-2xs);color:var(--text-3)}
.cr-pack:disabled{opacity:.6;cursor:default}
.cr-filt{display:flex;flex-wrap:wrap;gap:8px;align-items:center;padding:12px 20px 0}
.cr-total{margin:10px 20px;font-size:var(--fs-md)}
.cr-log td.is-plus{color:var(--ok-fg)}
.cr-log tr.is-zero td{color:var(--text-3)}
.cr-log tbody tr,.cr-price tbody tr{cursor:default}
.cr-krw-m{display:none}
.ai-credit.is-low{color:var(--warn-fg)}
@media (max-width:767px){
  .cr-kpis{grid-template-columns:1fr}.cr-packs{grid-template-columns:1fr}.cr-filt{padding:10px 12px 0}.cr-filt .select{flex:1 1 40%;min-width:0;max-width:100%;text-overflow:ellipsis}.cr-total{margin:10px 12px}
  .cr-log th:nth-child(3),.cr-log td:nth-child(3),.cr-log th:nth-child(6),.cr-log td:nth-child(6),.cr-log th:nth-child(7),.cr-log td:nth-child(7){display:none}
  .cr-log .cr-krw-m{display:block;font-size:var(--fs-2xs);color:var(--text-3);white-space:nowrap}.cr-log td,.cr-log th{padding:8px 8px}
  .cr-log td{white-space:normal}
}
#ai-credits b.is-warn{color:var(--warn-fg)}
.ai-credit.is-short{white-space:normal}
.home__credits.is-low{color:var(--warn-fg)}
/* phone = view mode: the AI 크레딧 dashboard stays readable — its two small tables stay tables (not the 3-line cards) */
html.is-phone .rtable.cr-price,html.is-phone .rtable.cr-log{display:table;width:100%}
html.is-phone .rtable.cr-price thead,html.is-phone .rtable.cr-log thead{display:table-header-group}
html.is-phone .rtable.cr-price tbody,html.is-phone .rtable.cr-log tbody{display:table-row-group}
html.is-phone .rtable.cr-price tbody tr,html.is-phone .rtable.cr-log tbody tr{display:table-row;padding:0;border:0;border-radius:0;margin:0;background:none;min-height:0}
html.is-phone .rtable.cr-price td,html.is-phone .rtable.cr-log td{display:table-cell;padding:8px;border-bottom:1px solid var(--border-soft);font-size:13px}
html.is-phone .rtable.cr-log td:nth-child(3),html.is-phone .rtable.cr-log td:nth-child(6),html.is-phone .rtable.cr-log td:nth-child(7){display:none}

/* =====================================================================================================================
 * REDESIGN R1 — desktop frame (≥ 768px; hive research/relai-redesign-spec.md §4): 56px top bar · 76px rail · section tabs ·
 * page header. Everything here is scoped to html:not(.is-phone) — the phone view mode below keeps its own shell.
 * ===================================================================================================================== */
:root{--bg-page:#F5F6F8;--topbar-h:56px;--rail-w:76px;--tabs-h:44px;--drawer-w:480px}
html:not(.is-phone){--border:#E2E5EA}
.dtop,.rail{display:none}
html:not(.is-phone) .shell,html:not(.is-phone) .shell.is-collapsed,html:not(.is-phone) .shell--ws,html:not(.is-phone) .shell--ws.is-collapsed{display:grid;grid-template-columns:var(--rail-w) minmax(0,1fr);grid-template-rows:var(--topbar-h) minmax(0,1fr)}
html:not(.is-phone) .shell>.side,html:not(.is-phone) .shell>.sidescrim,html:not(.is-phone) .shell>.topbar,html:not(.is-phone) .shell>.pstrip,html:not(.is-phone) .shell>.tabbar,html:not(.is-phone) .verifybar{display:none!important}
html:not(.is-phone) .dtop{display:flex;grid-column:1/-1;grid-row:1;position:sticky;top:0;z-index:70;height:var(--topbar-h);align-items:center;gap:10px;padding:0 16px 0 20px;background:#fff;border-bottom:1px solid var(--border);min-width:0}
html:not(.is-phone) .rail{display:block;grid-column:1;grid-row:2;position:sticky;top:var(--topbar-h);height:calc(100vh - var(--topbar-h));background:#fff;border-right:1px solid var(--border);overflow-y:auto;scrollbar-width:none}
html:not(.is-phone) .maincol{grid-column:2;grid-row:2;min-height:calc(100vh - var(--topbar-h))}
html:not(.is-phone) .main,html:not(.is-phone) .appfoot{background:var(--bg-page)}
.dtop__logo{font-weight:800;font-size:var(--fs-xl);color:var(--navy);letter-spacing:-.03em;margin-right:6px;flex:none}
.dtop__p{display:flex;align-items:center;gap:8px;min-width:0}
.dtop__p:empty{display:none}
.dtop__proj{display:inline-flex;align-items:center;gap:6px;height:34px;padding:0 10px;border:1px solid var(--border);border-radius:var(--r);background:#fff;cursor:pointer;min-width:0;max-width:min(380px,36vw);font:inherit;color:var(--navy)}
.dtop__proj b{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:var(--fs-md)}
.dtop__proj i{font-style:normal;font-size:var(--fs-sm);line-height:1;color:var(--text-3)}
.dtop__proj:hover{background:var(--bg-alt)}
.dtop__phase{font-size:var(--fs-sm);font-weight:600;color:var(--text-2);white-space:nowrap}
.dtop__phase:hover{color:var(--blue-deep)}
.dtop__p .chip{flex:none;white-space:nowrap}
.dtop__sp{flex:1 1 auto;min-width:8px}
.dtop__r{display:flex;align-items:center;gap:8px;flex:none}
.vpill{height:28px;padding:0 12px;border-radius:999px;background:var(--warn-bg);color:var(--warn-fg);border:1px solid var(--warn-bd);font-weight:700;font-size:var(--fs-sm);cursor:pointer;white-space:nowrap;font-family:inherit}
.vpill:hover{filter:brightness(.97)}
.dtop__ic{width:32px;height:32px;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--r);color:var(--text-2)}
.dtop__ic svg{width:18px;height:18px}
.dtop__ic:hover{background:var(--bg-alt);color:var(--navy)}
.dtop__me{width:32px;height:32px;border-radius:50%;border:0;background:var(--bg-tint);color:var(--blue-deep);font-weight:700;font-size:var(--fs-sm);cursor:pointer;font-family:inherit}
.dmenuwrap{position:relative;display:inline-flex;min-width:0}
.dmenu{position:absolute;top:calc(100% + 6px);z-index:90;min-width:220px;max-width:360px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-pop);padding:6px;font-size:var(--fs-sm)}
.dmenu--left{left:0}.dmenu--right{right:0}
.dmenu a,.dmenu button{display:block;width:100%;padding:7px 10px;border-radius:var(--r);border:0;background:none;text-align:left;color:var(--navy);cursor:pointer;font:inherit;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.dmenu a:hover,.dmenu button:hover,.dmenu a:focus-visible,.dmenu button:focus-visible{background:var(--bg-alt);outline:none}
.dmenu .is-cur{font-weight:700;color:var(--blue-deep)}
.dmenu hr{border:0;border-top:1px solid var(--border-soft);margin:5px 2px}
.dmenu__h{font-size:var(--fs-xs);font-weight:600;color:var(--text-3);padding:4px 10px}
.dmenu__who{padding:6px 10px 8px;min-width:0}.dmenu__who b,.dmenu__who small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dmenu__who small{color:var(--text-3)}
.dmenu__empty{display:block;padding:7px 10px;color:var(--text-3)}
.rail__nav{display:flex;flex-direction:column;gap:2px;padding:10px 6px}
.rail__i{display:flex;flex-direction:column;align-items:center;gap:4px;padding:9px 2px 8px;border-radius:var(--r-lg);font-size:var(--fs-xs);font-weight:500;color:var(--text-2);text-align:center;line-height:1.25;word-break:keep-all}
.rail__i svg{width:20px;height:20px;flex:none}
.rail__i:hover{background:var(--bg-alt);color:var(--navy)}
.rail__i.is-active{background:var(--bg-tint);color:var(--blue-deep);font-weight:700}
.rail__i:focus-visible,.stabs__i:focus-visible{outline:2px solid var(--blue);outline-offset:-2px}
/* section tabs + page header */
.phead-wrap{flex:none}
.stabs{display:flex;gap:2px;height:var(--tabs-h);align-items:stretch;padding:0 20px;background:#fff;border-bottom:1px solid var(--border);overflow-x:auto;scrollbar-width:none}
.stabs__i{display:inline-flex;align-items:center;padding:0 12px;font-size:var(--fs-md);font-weight:500;color:var(--text-2);border:0;border-bottom:2px solid transparent;background:none;cursor:pointer;white-space:nowrap;font-family:inherit}
.stabs__i:hover{color:var(--navy)}
.stabs__i.is-active{color:var(--blue-deep);font-weight:700;border-bottom-color:var(--blue)}
.stabs--crumb{align-items:center;gap:8px;font-size:var(--fs-sm);color:var(--text-3);padding:0 24px}
.stabs--crumb a{color:var(--text-2)}.stabs--crumb a:hover{color:var(--blue-deep)}.stabs--crumb b{color:var(--navy);font-weight:600}
.phead{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:18px 24px 12px}
.phead__l{min-width:0}
.phead__t{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.phead__title{font-size:var(--fs-xl);font-weight:800;color:var(--navy);letter-spacing:-.02em;line-height:1.3}
.pchip{font-size:var(--fs-xs);font-weight:700;color:var(--blue-deep);background:var(--blue-soft);border-radius:var(--r);padding:2px 8px;white-space:nowrap}
.pchip:hover{background:var(--bg-tint)}
.pchip--other{color:var(--text-2);background:var(--border-soft)}.pchip--other:hover{background:var(--border)}   /* a phase that is not the current one (P1-4) */
.phead__purpose{margin-top:3px;color:var(--text-2);font-size:var(--fs-md)}
.phead__r{display:flex;align-items:center;gap:8px;flex:none}
.phead__act{display:inline-flex}
.phead__more{min-width:32px;padding:0 8px;letter-spacing:.05em}
html:not(.is-phone) .shell--ws .page--wide{min-height:calc(100vh - var(--topbar-h))}
html:not(.is-phone) .shell--ws .page--wide:has(>.rlayout){height:calc(100vh - var(--topbar-h))}
html:not(.is-phone) .shell--ws .page--wide>.phead-wrap{margin-left:0;margin-right:0}
html:not(.is-phone) .shell--ws .page--wide>*:not(.phead-wrap){margin-left:24px;margin-right:24px}
html:not(.is-phone) .shell--ws .page--wide>.phead-wrap+*{margin-top:0}
/* one banner slot: the first notice / tip wins (a state notice outranks a feature tip) */
html:not(.is-phone) .page:has(>.notice) .coach,html:not(.is-phone) .notice~.notice,html:not(.is-phone) .coach~.coach{display:none}
/* one way to switch views: the section tabs (the old in-page WBS/Gantt, 목록/추적 and 테스트/검수/커버리지 toggles stay on the phone only) */
html:not(.is-phone) .seg:has(>[data-view="gantt"]),html:not(.is-phone) .seg:has(>[data-rview]),html:not(.is-phone) .rhead>.seg:has(>[data-tab="acceptance"]){display:none}
/* counts / tags the hidden 시험 toggle used to carry now ride on the section tabs */
.stabs__n{margin-left:6px;padding:0 6px;border-radius:999px;background:var(--border-soft);color:var(--text-2);font-size:var(--fs-xs);font-style:normal;font-weight:600;line-height:18px}
.stabs__i.is-active .stabs__n{background:var(--blue-soft);color:var(--blue-deep)}
/* 공식 문서 (사업수행계획서): the page header carries the title — the body's own 프로젝트 개요 heading stays on the phone only */
html:not(.is-phone) .chx__head>.chx__ht{display:none}
html:not(.is-phone) .chx__head{justify-content:flex-end}
/* wide layout (desktop ≥ 768px; the prototype bhsn-client fills the width beside the rail): work pages (home, 프로젝트, reports…)
 * take the full width next to the rail with 24px gutters; reading/form pages (설정, AI 크레딧, 프로젝트 설정, report document)
 * start at the rail too — left-aligned, never centered. Phone keeps its own layout. */
html:not(.is-phone) .page{max-width:none;margin-left:0;margin-right:0}
/* wide cards (desktop ≥ 768px; founder: '카드형도 같이 넓어져야지'): cards, tiles and panels fill the row next to the rail.
 * Grids of like cards use auto-fit tracks — they stretch, wider screens get more columns, a lone card never sits beside a void.
 * Card pages (설정, AI 크레딧, 프로젝트 설정, report document, admin) drop their 1200px caps; inline inputs stay at a readable width. */
html:not(.is-phone) .hgrid{grid-template-columns:repeat(auto-fit,minmax(min(400px,100%),1fr))}
html:not(.is-phone) .apage{max-width:none}
html:not(.is-phone) .chl{grid-template-columns:minmax(0,1fr) clamp(272px,18vw,360px)}
html:not(.is-phone) .inline-form .input{flex:0 1 480px}
/* =====================================================================================================================
 * REDESIGN R2 — guide screens + busy tables (desktop ≥ 768px; hive research/relai-redesign-spec.md §5.1/5.2/5.4/5.5).
 * ===================================================================================================================== */
/* 지금 할 일: tiles → next-step card → 필수 업무 | 다가오는 일정 · 최근 활동 */
.nx--r2 .pstepw{margin-bottom:14px}
.nxtiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}
.nxt{display:flex;flex-direction:column;gap:6px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);padding:14px 18px;min-width:0;color:inherit}
a.nxt:hover{border-color:var(--border-blue);background:#fff}
.nxt__k{font-size:var(--fs-sm);color:var(--text-2)}
.nxt__v{font-size:24px;font-weight:800;color:var(--navy);line-height:1.15;letter-spacing:-.01em}
.nxt__v.is-crit{color:var(--crit-fg,#C0262D)}.nxt__v.is-good{color:var(--navy)}
.nxt__s{font-size:var(--fs-xs);color:var(--text-3)}
.nxg{display:flex;align-items:center;gap:24px;padding:20px 24px;margin-bottom:14px;background:var(--bg-tint);border:1px solid var(--border-blue)}
.nxg__m{min-width:0;flex:1 1 auto;display:flex;flex-direction:column;gap:4px}
.nxg__k{font-size:var(--fs-sm);font-weight:700;color:var(--blue-deep)}
.nx--r2 .nxg__t{font-size:var(--fs-lg);font-weight:800;color:var(--navy);margin:0}
.nx--r2 .nxg__d{margin:0;color:var(--text-2);flex:none;max-width:none;font-size:var(--fs-md)}
.nxg__w .rg__warn{margin-left:0;font-size:var(--fs-sm)}
.nxg__w{display:flex;flex-wrap:wrap;gap:4px 14px;margin:2px 0 0;font-size:var(--fs-sm)}
.nxg__cta{margin-left:auto}
.nxcols{display:grid;grid-template-columns:minmax(0,1fr) clamp(300px,26vw,420px);gap:14px;align-items:start}
.nxmain{min-width:0}
.nxp{padding:0}
.nxp>.np__h{padding:14px 20px;border-bottom:1px solid var(--border-soft);margin:0}
.nxp>.np__h h2{font-size:var(--fs-md);font-weight:800}
.nxp>.np__d{padding:10px 20px 0}
.nxp .np__list{border-top:0}
.nxp .np__row.nxr{grid-template-columns:minmax(0,1fr) auto auto;gap:14px;align-items:center;padding:12px 20px 12px 17px;font-size:var(--fs-md)}
.nxp .np__row.nxr .np__st{font-weight:700;color:var(--navy)}
.nxp .np__row.nxr.is-done .np__st,.nxp .np__row.nxr.is-skip .np__st{font-weight:500;color:var(--text-2)}
.nxp .np__purpose{display:block;font-size:var(--fs-sm);color:var(--text-2);margin-top:2px}
.np__tail{display:inline-flex;justify-content:flex-end}
.np__ok{font-size:var(--fs-sm);font-weight:700;color:var(--ok-fg,#0F7B4B);white-space:nowrap}
.np__skipped{font-size:var(--fs-sm);color:var(--text-3);white-space:nowrap}
.nxp .np__acts{gap:6px;margin:0;min-width:0}
.np__morew{position:relative;display:inline-flex}
.np__more{width:28px;height:28px;border:1px solid transparent;border-radius:var(--r);background:none;color:var(--text-3);cursor:pointer;font:inherit;letter-spacing:.05em}
.np__more:hover,.np__more[aria-expanded="true"]{background:var(--bg-alt);color:var(--navy);border-color:var(--border)}
.np__menu{position:absolute;right:0;top:calc(100% + 4px);z-index:60;min-width:150px;list-style:none;margin:0;padding:6px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-pop)}
.np__menu a,.np__menu button{display:block;width:100%;padding:7px 10px;border:0;border-radius:var(--r);background:none;text-align:left;font:inherit;font-size:var(--fs-sm);color:var(--navy);cursor:pointer;white-space:nowrap}
.np__menu a:hover,.np__menu button:hover,.np__menu a:focus-visible,.np__menu button:focus-visible{background:var(--bg-alt);outline:none}
.np__none{padding:14px 20px;color:var(--text-3);font-size:var(--fs-sm)}
.nx__opt{border-top:1px solid var(--border-soft)}
.nx__opt>summary{padding:12px 20px;cursor:pointer;font-size:var(--fs-sm);font-weight:700;color:var(--blue-deep);list-style:none}
.nx__opt>summary::-webkit-details-marker{display:none}
.nx__opt>summary::after{content:" ▾"}.nx__opt[open]>summary::after{content:" ▴"}
.nx__opt>.np__list{border-top:1px solid var(--border-soft)}
.nxp>.np__f{padding:12px 20px;border-top:1px solid var(--border-soft);margin:0}
.nxside{display:flex;flex-direction:column;gap:14px;min-width:0}
.nxbox{background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);min-width:0}
.nxbox__h{display:flex;align-items:center;gap:8px;padding:14px 20px;border-bottom:1px solid var(--border-soft)}
.nxbox__h h2{font-size:var(--fs-md);font-weight:800;color:var(--navy);margin:0}
.nxbox__more{margin-left:auto;font-size:var(--fs-sm);width:auto}
.nxbox__b{padding:4px 20px 8px}
.nxbox__none{padding:12px 0;color:var(--text-3);font-size:var(--fs-sm);margin:0}
.nxup,.nxact{list-style:none;margin:0;padding:0}
.nxup li+li,.nxact li+li{border-top:1px solid var(--border-soft)}
.nxup a{display:flex;align-items:flex-start;gap:12px;padding:10px 0;color:var(--navy)}
.nxup__t{flex:1 1 auto;min-width:0;font-size:var(--fs-md)}.nxup__t small{display:block;color:var(--text-3);font-size:var(--fs-xs);margin-top:2px}
.nxup__d{flex:none;font-size:var(--fs-sm);font-weight:700;color:var(--text-2)}.nxup__d.is-crit{color:var(--crit-fg,#C0262D)}
.nxact a{display:block;padding:10px 0;color:var(--navy)}
.nxact__t{display:block;font-size:var(--fs-sm);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nxact small{display:block;color:var(--text-3);font-size:var(--fs-xs);margin-top:2px}
.nxup a:hover .nxup__t,.nxact a:hover .nxact__t{color:var(--blue-deep)}
@media (max-width:1100px){.nxcols{grid-template-columns:minmax(0,1fr)}.nxtiles{grid-template-columns:repeat(2,minmax(0,1fr))}}
/* Home dashboard */
.hsum{background:#fff;border:1px solid var(--border);border-left:3px solid var(--blue);border-radius:var(--r-lg);padding:14px 18px;margin:0 0 14px;color:var(--text-1,var(--navy));font-size:var(--fs-md)}
.hdash{display:grid;grid-template-columns:minmax(0,1fr) clamp(300px,24vw,400px);gap:14px;align-items:start}
.hdash .hgrid__sec{min-width:0;margin:0}
.hc--r2{gap:12px;padding:16px 20px;border-left:1px solid var(--border)}
.hc--r2 .hc__h{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.hc--r2 .hc__name{font-size:var(--fs-lg);font-weight:800;color:var(--navy)}
.hc__pos{margin-left:auto;font-size:var(--fs-xs);font-weight:700;color:var(--blue-deep);background:var(--blue-soft);border-radius:var(--r);padding:3px 8px;white-space:nowrap}
.hc--r2 .hc__prio{background:var(--crit-bg,#FDECEC);color:var(--crit-fg,#C0262D)}
.hmini{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0;padding:0}
.hmini li{font-size:var(--fs-xs);padding:3px 10px;border:1px solid var(--border);border-radius:999px;color:var(--text-3);white-space:nowrap}
.hmini li.is-done{color:var(--ok-fg,#0F7B4B)}
.hmini li.is-gap{color:var(--warn-fg);border-color:var(--warn-bd)}
.hmini li.is-cur{background:var(--blue);border-color:var(--blue);color:#fff;font-weight:700}
.hnx{display:flex;align-items:center;gap:16px;background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-lg);padding:14px 18px}
.hnx>div{min-width:0;flex:1 1 auto}
.hnx--quiet{background:var(--bg-alt);border-color:var(--border)}
.hnx__k{display:block;font-size:var(--fs-xs);font-weight:700;color:var(--blue-deep)}
.hnx__t{margin:2px 0 0;font-weight:800;color:var(--navy);font-size:var(--fs-md)}
.hnx__d{margin:2px 0 0;color:var(--text-2);font-size:var(--fs-sm);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.hnx .btn{flex:none}
.hc__foot{margin:0;font-size:var(--fs-sm);color:var(--text-2)}.hc__foot .is-crit{color:var(--crit-fg,#C0262D)}
@media (max-width:1100px){.hdash{grid-template-columns:minmax(0,1fr)}}
/* quiet list toolbar: status segments + search + ⋯ + one primary */
.tmore{position:relative;display:inline-flex}
.tmore__b{min-width:34px;padding:0 9px;letter-spacing:.05em;font-weight:700}
.tmenu{position:absolute;right:0;top:calc(100% + 6px);z-index:85;width:300px;max-height:min(70vh,560px);overflow:auto;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-pop);padding:6px}
.tmenu__sec+.tmenu__sec{border-top:1px solid var(--border-soft);margin-top:4px;padding-top:4px}
.tmenu__t{font-size:var(--fs-xs);font-weight:700;color:var(--text-3);padding:6px 8px 4px}
.tmenu__i{display:flex;flex-direction:column;align-items:flex-start;width:100%;padding:7px 8px;border:0;border-radius:var(--r);background:none;text-align:left;font:inherit;font-size:var(--fs-sm);color:var(--navy);cursor:pointer}
.tmenu__i small{font-size:var(--fs-xs);color:var(--text-3)}
.tmenu__i:hover,.tmenu__i:focus-visible{background:var(--bg-alt);outline:none}
.tmenu__i:disabled{color:var(--text-3);cursor:default;background:none}
.tmenu__i.is-on::before{content:"✓ ";color:var(--blue-deep)}
.tmenu .select,.tmenu .input{width:100%;margin:2px 0}
.tmenu__f{display:grid;grid-template-columns:72px minmax(0,1fr);align-items:center;gap:4px 8px;padding:2px 8px}
.tmenu__f>span{font-size:var(--fs-sm);color:var(--text-2)}
.tmenu .toggle{padding:6px 8px;font-size:var(--fs-sm)}
.tmenu .gtools{display:block;position:relative}
.tmenu .gtools>[data-gcols]{display:block;width:100%;text-align:left;border:0;background:none;height:auto;padding:7px 8px;font-weight:400;font-size:var(--fs-sm);color:var(--navy)}
.tmenu .gtools>[data-gcols]:hover{background:var(--bg-alt)}
.tmenu .gtools>.gpop{left:0;right:auto;top:100%}
.sseg{display:inline-flex;align-items:stretch;height:32px;border:1px solid var(--border);border-radius:var(--r);background:#fff;overflow:hidden;flex:none}
.sseg button{border:0;background:none;padding:0 12px;font:inherit;font-size:var(--fs-sm);color:var(--text-2);cursor:pointer;white-space:nowrap;display:inline-flex;align-items:center;gap:5px}
.sseg button+button{border-left:1px solid var(--border-soft)}
.sseg button b{font-weight:700;color:var(--navy)}
.sseg button:hover{background:var(--bg-alt)}
.sseg button.is-on{background:var(--bg-tint);color:var(--blue-deep);font-weight:700}.sseg button.is-on b{color:var(--blue-deep)}
.rtool--r2{flex-wrap:wrap;row-gap:8px}
.rtool--r2 #q{max-width:280px;flex:1 1 160px;min-width:120px}
.rtool--r2 #f-owner{max-width:160px}
.qa--foot{margin:0;padding:8px 12px;background:#fff;border:1px solid var(--border);border-top:0;border-radius:0 0 var(--r-lg) var(--r-lg)}
.qa--foot .input{width:100%;max-width:none;border-style:dashed}
/* detail drawer (requirement · WBS item): a 480px panel beside the list — no scrim, the list stays usable; at ≥ 1280px the page
 * makes room for it, below that it overlays the right edge (never a sideways scroll). Create forms keep the centred dialog. */
html:not(.is-phone) .rlayout.has-drawer:has(>.drawer--lg:not([hidden]))::before{display:none}
html:not(.is-phone) .rlayout .drawer.drawer--lg{left:auto;right:0;top:var(--topbar-h);bottom:0;transform:none;width:min(var(--drawer-w),100vw - var(--rail-w));height:auto;max-height:none;border-radius:0;border:0;border-left:1px solid var(--border);box-shadow:-12px 0 32px rgba(16,24,40,.10);z-index:75}
@media (min-width:1280px){html:not(.is-phone) .shell--ws .page--wide:has(>.rlayout.has-drawer>.drawer--lg:not([hidden])){padding-right:var(--drawer-w)}}
html:not(.is-phone) #main:has(.drawer--lg:not([hidden])) .btn--primary:not(.drawer .btn--primary){background:#fff;color:var(--navy);border-color:var(--border-strong)}
.drawer--lg .drawer__b{overflow-y:auto}
.dstack{display:flex;flex-direction:column;gap:10px}
.dstack .dtitle{width:100%}
.dstack .ddesc{min-height:88px}
.dgrid{display:flex;flex-direction:column;gap:2px;border-top:1px solid var(--border-soft);padding-top:8px}
.dgrid .dfield{display:grid;grid-template-columns:96px minmax(0,1fr);align-items:center;gap:8px;padding:4px 0}
.dgrid .dfield>span{font-size:var(--fs-sm);color:var(--text-2);margin:0;font-weight:500}
.dgrid .dfield .select,.dgrid .dfield .input{width:100%;max-width:280px}
.dmore>summary{cursor:pointer;font-size:var(--fs-sm);font-weight:700;color:var(--blue-deep);padding:6px 0;list-style:none}
.dmore>summary::-webkit-details-marker{display:none}
.dmore>summary::after{content:" ▾"}.dmore[open]>summary::after{content:" ▴"}
.dfoot{display:flex;align-items:center;gap:14px}
.dfoot .linkbtn{width:auto;font-size:var(--fs-sm)}
.dfoot__arch{color:var(--text-3)}.dfoot__arch:hover{color:var(--crit-fg,#C0262D)}
.dfoot__r{margin-left:auto;display:inline-flex;align-items:center;gap:8px}
.dfoot__ok{font-size:var(--fs-sm);font-weight:700;color:var(--ok-fg)}
/* WBS on desktop: 기간 column, owner bar hint, single-column drawer with 세부 정보 더보기 */
.wper{white-space:nowrap}
.wper--empty{color:#667085;font-size:var(--fs-xs);border-bottom:1px dashed currentColor;cursor:pointer}
tr:hover .wper--empty{color:var(--blue)}
.ownbar{display:flex;align-items:center;gap:10px;margin-bottom:8px;padding:9px 14px;background:var(--bg-tint);border:1px solid var(--border-blue);border-radius:var(--r-lg);font-size:var(--fs-sm);color:var(--text-2)}
.ownbar b{color:var(--blue-deep)}
html:not(.is-phone) .drawer--lg .dlayout{display:flex;flex-direction:column;gap:12px}
html:not(.is-phone) .drawer--lg .dside{position:static;background:none;border:0;border-top:1px solid var(--border-soft);border-radius:0;padding:10px 0 0}
html:not(.is-phone) .drawer--lg:not(.is-more) .dx{display:none}
.dmore__b{width:auto;font-size:var(--fs-sm);font-weight:700;color:var(--blue-deep);margin-top:4px}
html:not(.is-phone) .drawer--lg .dtabs{overflow-x:auto;scrollbar-width:none;padding:0 10px}
html:not(.is-phone) .drawer--lg .dtabs button{white-space:nowrap;padding:8px 9px}
html:not(.is-phone) .drawer--lg .traceStrip,html:not(.is-phone) .drawer--lg .ddesc{max-width:none}
/* Q23-1: 이슈 · 리스크 are section tabs (with their counts) — the in-page switch stays on the phone only */
html:not(.is-phone) .rhead>.seg:has(>[data-tab="risks"]){display:none}

/* ===== Redesign R3a (보고서 view + 설정 tabs) — desktop only; keep this block together for merging ===== */
/* report view: 다운로드 ▾ · 복사 ▾ dropdowns (native <details>) */
.rmenu{position:relative;display:inline-flex}
.rmenu>summary{list-style:none;cursor:pointer}.rmenu>summary::-webkit-details-marker{display:none}
.rmenu[open]>summary{background:var(--bg-alt)}
.rmenu__list{position:absolute;top:calc(100% + 6px);right:0;z-index:90;min-width:160px;background:#fff;border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--sh-pop);padding:6px;font-size:var(--fs-sm)}
.rmenu__list button{display:block;width:100%;padding:7px 10px;border:0;border-radius:var(--r);background:none;text-align:left;color:var(--navy);cursor:pointer;font:inherit;white-space:nowrap}
.rmenu__list button:hover,.rmenu__list button:focus-visible{background:var(--bg-alt);outline:none}
html:not(.is-phone) .doc__actions{flex-wrap:nowrap;align-items:center}
/* 설정: four tabs, a title + purpose + one primary per tab, merged 팀원 table, collapsed 위험 구역 */
html:not(.is-phone) .page--settings .stabs--settings{padding:0;margin:0 0 20px;background:none}
.stab-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin:0 0 16px}
.stab-head h2{margin:0;font-size:var(--fs-lg);color:var(--navy)}
.stab-head__p{margin:4px 0 0;color:var(--text-2);font-size:var(--fs-sm)}
#teamtbl tr.is-invite td{background:var(--bg-alt)}
.danger-zone{margin-top:28px;border:1px solid var(--border);border-radius:var(--r-lg);background:#fff}
.danger-zone>summary{padding:14px 20px;cursor:pointer;font-weight:600;color:#B42318;display:flex;gap:10px;align-items:baseline}
.danger-zone>summary small{font-weight:400}
.danger-zone[open]>summary{border-bottom:1px solid var(--border-soft)}
.danger-zone__b{padding:4px 20px}
.danger-zone__row{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:12px 0}
.danger-zone__row+.danger-zone__row{border-top:1px solid var(--border-soft)}
.danger-zone__row .hint{margin:2px 0 0}
/* 보고서 › 주간보고: the page header already carries the title and purpose — the list keeps only its buttons */
html:not(.is-phone) .rpl .ovsec__h>h2,html:not(.is-phone) .rpl .ovsec__h>.ovsec__ctx{display:none}
html:not(.is-phone) .rpl .ovsec__h{justify-content:flex-end}
/* release-r2r3: with the WBS drawer open (≥ 1280px) the 작업 column gives up 80px so 상태 stays in view without a sideways scroll */
@media (min-width:1280px){
  html:not(.is-phone) .rlayout.has-drawer:has(>.drawer--lg:not([hidden])) .gtable--wbs{width:auto!important;min-width:100%}
  html:not(.is-phone) .rlayout.has-drawer:has(>.drawer--lg:not([hidden])) .gtable--wbs col[data-col="title"]{width:220px!important}
}

/* ============================================================================================================== * mobile-v2 (founder 2026-10-15: links are opened on phones — make an impact). Phone (< 768px) only; desktop is untouched.
 * Same rule as before: on a phone you look, on a PC you do. Brand band on login/signup, R mark + phase dots in the top bar,
 * 7-door grid in 더보기, home tiles, card polish, quieter WBS cards, readable report.
 * ===================================================================================================================== */
.aband,.mdoors,.mtiles,.pstrip__dots{display:none}
@media (max-width:767px){
  .auth .auth__form{justify-content:flex-start;padding:0 20px 40px}
  .auth .auth__form>.logo{display:none}
  .aband{display:block;margin:0 -20px 28px;padding:22px 20px 20px;color:#fff;border-radius:0 0 22px 22px;
    background:radial-gradient(420px 220px at 100% 0,rgba(46,81,196,.85) 0,transparent 70%),linear-gradient(140deg,#0B1324 0,#101828 60%,#1D2939 100%)}
  .aband__logo{display:inline-flex;align-items:center;gap:8px;font-size:19px;font-weight:800;letter-spacing:-.04em;color:#fff;text-decoration:none}
  .aband__logo img{border-radius:7px}
  .aband__t{margin:16px 0 14px;font-size:15px;font-weight:600;color:#DCE3F2;letter-spacing:-.02em}
  .aband__card{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:2px 10px;align-items:center;background:#fff;color:var(--navy);border-radius:14px;padding:12px 14px;box-shadow:0 10px 30px rgba(0,0,0,.25),inset 3px 0 0 var(--blue)}
  .aband__k{grid-column:1/3;font-size:11.5px;font-weight:700;color:var(--blue)}
  .aband__card b{grid-column:1/3;font-size:15.5px;letter-spacing:-.02em}
  .aband__dots{display:flex;gap:3px;margin-top:6px}
  .aband__dots i{width:16px;height:4px;border-radius:2px;background:var(--border)}
  .aband__dots i.is-done{background:var(--ok)}.aband__dots i.is-cur{background:var(--blue)}
  .aband__card small{margin-top:6px;font-size:11.5px;color:var(--text-2)}
  .auth .auth__form h1,.auth--su-a .auth__form h1{font-size:24px;line-height:1.3}
  .auth .auth__form .sub{margin-bottom:20px}
  .auth--su-a .auth__form{padding:0 20px 40px}
  .auth .su-a-m{display:none}
  .auth .input{height:48px;font-size:16px;border-radius:10px}
  .auth .btn--lg{height:52px;border-radius:12px;font-size:16px}
}
/* shell: R mark before the project name, phase dots in the strip, active tab as a pill */
html.is-phone .ptop:not([hidden])::before{content:"";flex:none;width:24px;height:24px;margin-right:8px;border-radius:6px;background:url(/brand/icon.svg) center/cover}
html.is-phone .topbar .logo{gap:8px}
html.is-phone .topbar .logo::before{content:"";width:26px;height:26px;border-radius:7px;background:url(/brand/icon.svg) center/cover}
html.is-phone .pstrip__dots{display:flex;gap:3px;margin-left:auto;flex:none}
html.is-phone .pstrip__dots i{width:12px;height:4px;border-radius:2px;background:var(--border)}
html.is-phone .pstrip__dots i.is-done{background:var(--ok)}html.is-phone .pstrip__dots i.is-cur{background:var(--blue)}
html.is-phone .tabbar{box-shadow:0 -4px 16px rgba(16,24,40,.05)}
html.is-phone .tabbar__i svg{padding:2px 14px;width:52px;height:26px;border-radius:13px;box-sizing:border-box;transition:background .15s}
html.is-phone .tabbar__i.is-active svg{background:var(--bg-tint,#EEF2FF)}
html.is-phone .tabbar__i.is-active span{font-weight:700}
/* 더보기 sheet: 7 doors on top */
html.is-phone .mdoors{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;padding:16px 16px 12px;border-bottom:1px solid var(--border-soft);background:var(--bg-alt)}
html.is-phone .mdoors__i{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:72px;padding:8px 2px;border-radius:14px;background:#fff;border:1px solid var(--border-soft);color:var(--text-2);font-size:12.5px;font-weight:600;text-align:center;text-decoration:none;overflow-wrap:normal;word-break:keep-all}
html.is-phone .mdoors__i i{width:32px;height:32px;border-radius:10px;display:grid;place-items:center;font-style:normal;font-size:16px;font-weight:800;background:var(--bg-tint,#EEF2FF);color:var(--blue)}
html.is-phone .mdoors__i.is-active{border-color:var(--blue);color:var(--blue-deep,var(--blue))}
html.is-phone .mdoors__i.is-active i{background:var(--blue);color:#fff}
html.is-phone .side.is-open{display:flex;flex-direction:column}
html.is-phone .side.is-open .lnb__wrap{flex:1 1 auto;min-height:0;overflow:auto}
/* page titles + PC line */
html.is-phone .page__head h1{font-size:22px;letter-spacing:-.03em}
html.is-phone .pcline{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-3)}
html.is-phone .pcline::before{content:"";width:14px;height:10px;border:1.5px solid currentColor;border-radius:2px;box-sizing:border-box;flex:none}
/* home: tiles · cards with a clear next step · upcoming */
html.is-phone .mtiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:4px 0 18px}
html.is-phone .mtile{background:#fff;border:1px solid var(--border-soft);border-radius:14px;padding:12px 12px 10px;box-shadow:var(--sh-card)}
html.is-phone .mtile small{display:block;font-size:12px;color:var(--text-2)}
html.is-phone .mtile b{display:block;margin-top:2px;font-size:20px;font-weight:800;letter-spacing:-.03em;color:var(--navy)}
html.is-phone .mtile.is-now b{color:var(--blue)}html.is-phone .mtile.is-warn b{color:var(--warn)}html.is-phone .mtile.is-crit b{color:var(--danger)}
html.is-phone .home .hc{border-radius:16px;padding:16px;gap:10px;box-shadow:0 2px 10px rgba(16,24,40,.06)}
html.is-phone .home .hc__name{font-size:16px;font-weight:700}
html.is-phone .home .hc__next{display:block;padding:12px 14px;border-radius:12px;background:var(--bg-tint,#EEF2FF);box-shadow:inset 3px 0 0 var(--blue)}
html.is-phone .home .hc__next .hc__k{display:block;font-size:11.5px;font-weight:700;color:var(--blue)}
html.is-phone .home .hc__next .hc__t{font-size:15px;font-weight:700;color:var(--navy);margin-top:2px}
html.is-phone .home:has(.mup) .hc__up{display:none}
html.is-phone .home .mup{margin-top:18px}
/* 지금 할 일: rows as a calm card stack */
html.is-phone .np__row{border-radius:12px}
/* WBS cards: ID … status on line 1, title on line 2, dates/owner only when set; parent rows read as section headers */
html.is-phone .gtable--wbs tbody tr td.gc--stick.mono{order:1;flex:1 1 auto;min-width:0}
html.is-phone .gtable--wbs tbody tr td[data-label="상태"]{order:2;margin-left:auto}
html.is-phone .gtable--wbs tbody tr td.ttl{order:3;flex:0 0 100%}
html.is-phone .gtable--wbs tbody tr td[data-label="계획 시작"]{order:4}
html.is-phone .gtable--wbs tbody tr td[data-label="계획 종료"]{order:5}
html.is-phone .gtable--wbs tbody tr td[data-label="계획 종료"]::before{content:"–";margin:0 4px;color:var(--text-3)}
html.is-phone .gtable--wbs tbody tr td[data-label="담당자"]{order:6}
html.is-phone .gtable--wbs tbody tr td[data-label="담당자"]::before{content:"·";margin:0 6px;color:var(--text-3)}
html.is-phone .gtable--wbs tbody tr td:is([data-label="계획 시작"],[data-label="계획 종료"],[data-label="담당자"]):has(>.dim:only-child){display:none!important}
html.is-phone .gtable--wbs tbody tr td.ttl .wtitle{padding-left:0!important}
html.is-phone .gtable--wbs tbody tr:has(.wtog:not(.wtog--none)){background:var(--bg-alt);border-color:var(--border)}
html.is-phone .gtable--wbs tbody tr:has(.wtog:not(.wtog--none)) td.ttl{font-size:16px;font-weight:700;color:var(--navy)}
/* counters wrap instead of running off the edge */
html.is-phone .summary--inline>*{flex:0 1 auto;min-width:0}
/* report viewer: document reads like a page */
html.is-phone .doc{border-radius:14px;box-shadow:0 2px 10px rgba(16,24,40,.05)}
html.is-phone .doc h2,html.is-phone .doc h3{scroll-margin-top:96px}
html.is-phone .gtable--wbs tbody tr td[data-label="상태"]::before{content:none}
html.is-phone .gtable--wbs tbody tr td.ttl .wtog{display:none}
html.is-phone .gtable--wbs tbody tr td[data-label="담당자"]::after{content:none}
/* counter strips keep one swipeable row (first card stays high on the screen); the fade says there is more */
html.is-phone .kstrip{scrollbar-width:none;-webkit-mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);mask-image:linear-gradient(90deg,#000 calc(100% - 28px),transparent);padding-right:24px}
html.is-phone .kstrip::-webkit-scrollbar{display:none}
html.is-phone .kpi__s{white-space:normal;overflow:visible;text-overflow:clip}
=======
/* ---------- 샘플 프로젝트 (server/samples/): badge on cards / list / project header, Home banner, 설정 panel ---------- */
.chip--sample{background:#F3EEFF;color:#6D28D9;margin-left:6px;flex:none}
.sbanner{display:flex;align-items:center;gap:12px;background:#FAF7FF;border:1px solid #E4D9FB;border-radius:var(--r-lg);padding:10px 16px;margin:0 0 14px}
.sbanner p{margin:0;flex:1;min-width:0;font-size:var(--fs-sm);color:var(--text-2)}
.sbanner .btn{flex:none}
.page__acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
@media (max-width:640px){.sbanner{flex-direction:column;align-items:flex-start;padding:10px 12px}}

/* 사용 분석 (/admin/funnel) */
.afunnel--wide .afunnel__r{grid-template-columns:minmax(150px,220px) 1fr 56px 56px 64px}
.afunnel__h{font-size:var(--fs-xs);color:var(--text-3);border-bottom:1px solid var(--border-soft)}.afunnel__h b,.afunnel__h small{font-weight:600}
.afunnel__r.is-drop{background:var(--danger-bg);border-radius:var(--r-sm);margin:0 -6px;padding:5px 6px}.afunnel__r.is-drop .afunnel__b i{background:var(--danger-fg)}
.afunnel__r .achip{margin-left:6px;font-style:normal}
#firstuse{min-width:0}.afunnel__r.is-side>span:first-child{color:var(--text-2);padding-left:10px}.asec__note{margin:0;padding:8px 14px 12px}
.atool--range{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.atool--range .input{width:auto}
@media (max-width:767px){.afunnel--wide .afunnel__r{grid-template-columns:1fr 44px 44px 52px}.afunnel--wide .afunnel__b{display:none}}

/* ---- fb-app (founder feedback 2026-10-15) ----
 * 1. Action rows: every button row sits on the right — form footers, dialog/drawer footers, card actions, page header actions.
 *    One rule for every action-row class; a leading text/link (status line, 보관, hint) keeps the left edge via margin-right:auto.
 * 2. Desktop spacing scale: blocks on a page are separated by --gap-block (16px); a toolbar that belongs to the table under it
 *    keeps --gap-tight (8px). Grids of cards/tiles use --gap-block too. */
:root{--gap-block:var(--s4);--gap-tight:var(--s2)}
.actions,.drawer__f,.wd__f,.def__foot,.stage__f,.gl__f,.imp__f,.aid__f,.tmenu__f,.doc__actions,.page__acts,.rpl__btns,.covacts,.act__f,.actpanel__f,.dfoot{display:flex;justify-content:flex-end}
:is(.actions,.drawer__f,.wd__f,.def__foot,.stage__f,.gl__f,.imp__f,.aid__f,.tmenu__f,.dfoot)>:first-child:not(.btn):not(button):not(.wd__btns):not(.def__btns):not(.stage__btns):not(.gl__btns):not(.aid__btns):not(.dfoot__r){margin-right:auto}
.welcome .actions{justify-content:center}
a.me{color:inherit;text-decoration:none;border-radius:var(--r)}
a.me:hover,a.me.is-active{background:var(--bg-tint)}
html:not(.is-phone) .page__head{margin-bottom:var(--gap-block)}
html:not(.is-phone) :is(.sbanner,.obcl,.hsum,.nxtiles,.ovsec,.asec,.akpi,.agrid2,.clk__tabs,.nxg,.ovsec+.hline){margin-bottom:var(--gap-block)}
html:not(.is-phone) .nx--r2 .pstepw{margin-bottom:var(--gap-block)}
html:not(.is-phone) :is(.hgrid,.hdash,.nxcols,.nxside,.nxtiles,.agrid2,.akpi){gap:var(--gap-block)}
html:not(.is-phone) :is(.rtool,.rhead,.ptoolbar){margin-bottom:var(--gap-tight)}
html:not(.is-phone) .page--settings .stabs--settings{margin-bottom:var(--gap-block)}
html:not(.is-phone) .page--settings .panel+.panel,html:not(.is-phone) .page--settings .panel[style*="margin-top"]{margin-top:var(--gap-block)!important}
html:not(.is-phone) .page--settings .danger-zone{margin-top:var(--gap-block)}
/* admin: KPI tiles inside a section sat on the section border; the note under the table had no side padding */
.asec>.akpi{margin:12px 14px}
.asec>.hint{margin:0;padding:8px 14px 12px}
.asec>.agrid2{padding:0 14px}
/* 06/07 checklist: 메모 저장 is a right-aligned button; the add-row button matches the input height */
.clk__memo [data-memo]{align-self:flex-end}
.clk__add{align-items:stretch}.clk__add>.btn{height:auto}
/* desktop toasts: bottom-left of the content column, so they never sit on a right drawer's footer buttons */
html:not(.is-phone) .toast{left:calc(var(--rail-w) + 24px);transform:none}
html:not(.is-phone) .agrid2>.asec,.agrid2>.asec{margin-bottom:0}
html:not(.is-phone) .clk__back{margin-top:var(--gap-block)}
/* new/edit project form: the date pair uses the form's own 24px column gap, so its columns line up with the rows above */
.pform .pdates .row2{column-gap:24px}

/* ---- layout-fit (founder 2026-10-19) ----
 * 1. Full-height list screens (WBS · 요구사항 · 이슈/리스크 · 변경 요청 · 테스트: .page--wide > .rlayout) already size themselves to the
 *    window, but the app footer still sat under them → a 35px page scroll beside the table's own scroll. The footer steps aside there
 *    (the old `.page--wide + .appfoot` rule never matched: the footer is a sibling of .main, not of the page). */
html:not(.is-phone) .maincol:has(>.main>.page--wide>.rlayout)>.appfoot{display:none}
/* 2. Phone: the column's min-height counted the 72px tab-bar padding on top of a full screen, so even an empty screen scrolled. */
html.is-phone .maincol{box-sizing:border-box;min-height:calc(100vh - 48px);min-height:calc(100dvh - 48px)}
html.is-phone .shell:has(>.pstrip>*) .maincol{min-height:calc(100vh - 80px);min-height:calc(100dvh - 80px)}   /* + the 32px project strip */
/* 3. A dialog that only explains never runs past the window: it scrolls inside instead (zero specificity — every sized dialog
 *    such as .dialog--ai or .gl keeps its own rule). */
:where(.scrim>.dialog){max-height:calc(100vh - 40px);max-height:calc(100dvh - 40px);overflow-y:auto}
/* 4. One look for every work screen (desktop): the same title size on workspace pages (홈 · 프로젝트 · 설정) as on project pages,
 *    32px header/toolbar controls everywhere (list screens had 28px, guide screens 32px), 36px list rows in both table kinds. */
html:not(.is-phone) .page__head h1{font-size:var(--fs-xl);font-weight:800;letter-spacing:-.02em;line-height:1.3}
html:not(.is-phone) :is(.phead__r,.rtool,.rhead,.page__head) :is(.btn,.input,.select):not(.btn--xs){height:32px}
html:not(.is-phone) .rtool :is(.btn--sm,.select--sm){font-size:var(--fs-sm)}
html:not(.is-phone) .rtable td{height:36px}
/* 5. 프로젝트 개요 (PC): 사업수행계획서 내려받기 moved up into the page header (charter.js), so the document starts right under the
 *    header and the outline rail lines up with it instead of keeping the old 62px offset. */
html:not(.is-phone) .chl:not(:has(.chx__head)) .chr{margin-top:0}
