/* =========================================================
   RiverSync DS — Task management layer
   Task cards · Kanban board · tree task list · Gantt chart.
   Light/dark via app-ui tokens; no hardcoded colors.
   ========================================================= */

/* ---------- shared bits ---------- */

/* Priority mark — three rising bars (low/medium/high); urgent renders an icon */
.rs-prio{display:inline-flex; align-items:flex-end; gap:2px; width:14px; height:13px; flex:none;}
.rs-prio i{width:3px; border-radius:1px; background:var(--border-strong);}
.rs-prio i:nth-child(1){height:5px;}
.rs-prio i:nth-child(2){height:9px;}
.rs-prio i:nth-child(3){height:13px;}
.rs-prio[data-p="low"] i:nth-child(1){background:var(--fg3);}
.rs-prio[data-p="medium"] i:nth-child(-n+2){background:var(--accent);}
.rs-prio[data-p="high"] i{background:var(--rs-orange-60);}
.rs-prio--urgent{display:inline-flex; align-items:center; color:var(--danger);}
.rs-prio--urgent .rs-ic{width:14px; height:14px;}

/* Mono task id */
.rs-taskid{font-family:var(--rs-font-mono); font-size:11px; letter-spacing:.02em; color:var(--fg3); white-space:nowrap;}

/* Meta chip (period, deps, subtasks…) */
.rs-taskchip{display:inline-flex; align-items:center; gap:5px; height:22px; padding:0 7px;
  border:1px solid var(--border); border-radius:4px; background:var(--surface);
  font-size:11.5px; font-weight:500; color:var(--fg2); white-space:nowrap;}
.rs-taskchip .rs-ic{width:12px; height:12px;}
.rs-taskchip[data-tone="danger"]{color:var(--danger); border-color:var(--danger-border); background:var(--danger-soft);}
.rs-taskchip[data-tone="warning"]{color:var(--rs-orange-70); border-color:var(--warning-border); background:var(--warning-soft);}
[data-theme="dark"] .rs-taskchip[data-tone="warning"]{color:var(--warning);}
.rs-taskchip[data-tone="success"]{color:var(--success); border-color:var(--success-border); background:var(--success-soft);}
.rs-taskchip[data-tone="accent"]{color:var(--accent); border-color:var(--accent-border); background:var(--accent-soft);}
.rs-taskchip--btn{cursor:pointer;}
.rs-taskchip--btn:hover{border-color:var(--border-strong); color:var(--fg);}
.rs-taskchip .rs-taskchip__x{display:grid; place-items:center; width:14px; height:14px; margin-right:-3px;
  border:none; background:none; padding:0; color:var(--fg3); cursor:pointer; border-radius:3px;}
.rs-taskchip .rs-taskchip__x:hover{background:var(--surface-3); color:var(--fg);}

/* Overlapping avatar stack */
.rs-avstack{display:inline-flex; align-items:center;}
.rs-avstack .rs-av{box-shadow:0 0 0 2px var(--surface);}
.rs-avstack > * + *{margin-left:-6px;}
.rs-avstack__more{display:inline-flex; align-items:center; justify-content:center; min-width:22px; height:22px; padding:0 3px;
  border-radius:2px; background:var(--surface-3); color:var(--fg2); font-size:10px; font-weight:600;
  box-shadow:0 0 0 2px var(--surface);}

/* Thin task progress bar */
.rs-taskbar{flex:1 1 auto; height:4px; border-radius:2px; background:var(--surface-3); overflow:hidden; min-width:36px;}
.rs-taskbar i{display:block; height:100%; border-radius:2px; background:var(--accent); transition:width .25s ease;}
.rs-taskbar[data-tone="success"] i{background:var(--success);}
.rs-taskbar[data-tone="warning"] i{background:var(--warning);}

/* ---------- Task card (kanban / lists) ---------- */
.rs-taskcard{position:relative; background:var(--surface); border:1px solid var(--border); border-radius:8px;
  box-shadow:var(--shadow-sm); padding:10px 12px 11px; display:flex; flex-direction:column; gap:8px;
  transition:border-color .12s, box-shadow .12s, opacity .12s;}
.rs-taskcard[draggable="true"]{cursor:grab;}
.rs-taskcard:hover{border-color:var(--border-strong); box-shadow:var(--shadow);}
.rs-taskcard.is-dragging{opacity:.35; cursor:grabbing;}
.rs-taskcard.is-selected{border-color:var(--accent); box-shadow:0 0 0 1px var(--accent), var(--shadow-sm);}
.rs-taskcard.is-done .rs-taskcard__title{color:var(--fg3); text-decoration:line-through; text-decoration-color:var(--fg3);}
.rs-taskcard__top{display:flex; align-items:center; gap:7px; min-height:14px;}
.rs-taskcard__top .rs-spacer{flex:1 1 auto;}
.rs-taskcard__title{font-size:13px; font-weight:500; line-height:1.35; color:var(--fg); text-wrap:pretty;}
.rs-taskcard__chips{display:flex; flex-wrap:wrap; gap:5px;}
.rs-taskcard__foot{display:flex; align-items:center; gap:10px;}
.rs-taskcard__foot .rs-taskbar{flex:1 1 auto;}

/* ---------- Kanban board ---------- */
.rs-kanban{display:flex; align-items:flex-start; gap:14px; overflow-x:auto; padding-bottom:4px; min-height:0; height:100%;}
.rs-kanban__col{width:288px; flex:none; display:flex; flex-direction:column; max-height:100%;
  background:var(--surface-2); border:1px solid var(--border); border-radius:10px;}
.rs-kanban__col.is-over{border-color:var(--accent-border);}
.rs-kanban__colhead{display:flex; align-items:center; gap:8px; padding:10px 12px 8px; flex:none;}
.rs-kanban__colhead h4{font-size:12.5px; font-weight:600; color:var(--fg); letter-spacing:.01em;}
.rs-kanban__dot{width:8px; height:8px; border-radius:50%; background:var(--neutral); flex:none;}
.rs-kanban__count{min-width:20px; height:18px; padding:0 6px; border-radius:9px; display:grid; place-items:center;
  background:var(--surface-3); color:var(--fg2); font-size:11px; font-weight:600;}
.rs-kanban__wip{margin-left:auto; font-size:11px; font-weight:600; color:var(--fg3);}
.rs-kanban__wip.is-full{color:var(--danger);}
.rs-kanban__list{display:flex; flex-direction:column; gap:8px; padding:2px 10px 10px; overflow-y:auto; min-height:48px;}
.rs-kanban__drop{height:0; border-top:2px solid var(--accent); border-radius:1px; margin:-5px 2px; position:relative;}
.rs-kanban__drop::before{content:""; position:absolute; left:-3px; top:-4px; width:6px; height:6px; border-radius:50%; background:var(--accent);}
.rs-kanban__empty{border:1.5px dashed var(--border-strong); border-radius:8px; padding:14px 10px; text-align:center;
  font-size:12px; color:var(--fg3);}
.rs-kanban__add{margin:0 10px 10px; flex:none;}

/* ---------- Task list (tree) ---------- */
.rs-tasklist .rs-table td{vertical-align:middle;}
.rs-tasklist__main{display:flex; align-items:center; gap:7px; min-width:0;}
.rs-tasklist__twisty{width:18px; height:18px; flex:none; display:grid; place-items:center; border:none; padding:0;
  background:none; color:var(--fg3); cursor:pointer; border-radius:4px;}
.rs-tasklist__twisty:hover{background:var(--surface-3); color:var(--fg);}
.rs-tasklist__twisty .rs-ic{width:13px; height:13px; transition:transform .15s ease;}
.rs-tasklist__twisty.is-open .rs-ic{transform:rotate(90deg);}
.rs-tasklist__spacer{width:18px; flex:none;}
.rs-tasklist__title{font-weight:500; color:var(--fg); overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
tr.is-parentrow .rs-tasklist__title{font-weight:600;}
.rs-tasklist__title.is-done{color:var(--fg3); text-decoration:line-through;}
.rs-tasklist__span{font-size:12px; color:var(--fg2); white-space:nowrap; display:inline-flex; align-items:center; gap:5px;}
.rs-tasklist__span .rs-ic{width:12px; height:12px; color:var(--fg3);}
.rs-tasklist__deps{display:flex; gap:4px; flex-wrap:wrap;}
.rs-tasklist__progress{display:flex; align-items:center; gap:8px; min-width:110px;}
.rs-tasklist__progress b{font-size:11px; color:var(--fg2); font-weight:600; min-width:30px; text-align:right;}

/* ---------- Gantt ---------- */
.rs-gantt{border:1px solid var(--border); border-radius:10px; background:var(--surface); overflow:hidden;
  display:flex; flex-direction:column;}
.rs-gantt__scroll{overflow:auto; flex:1 1 auto; position:relative;}
.rs-gantt__inner{display:grid;}
.rs-gantt__side{position:sticky; left:0; z-index:5; background:var(--surface); border-right:1px solid var(--border-strong);
  display:flex; flex-direction:column;}
.rs-gantt__sidehead{position:sticky; top:0; z-index:2; background:var(--surface); border-bottom:1px solid var(--border);
  display:flex; align-items:flex-end; padding:0 12px 8px; font-size:10.5px; font-weight:600; letter-spacing:.07em;
  text-transform:uppercase; color:var(--fg3);}
.rs-gantt__siderow{display:flex; align-items:center; gap:6px; padding:0 10px 0 8px; border-bottom:1px solid var(--border);
  cursor:pointer; min-width:0;}
.rs-gantt__siderow:hover{background:var(--surface-2);}
.rs-gantt__siderow.is-selected{background:var(--accent-soft);}
.rs-gantt__siderow .rs-tasklist__title{font-size:12.5px; flex:1 1 auto;}
.rs-gantt__siderow .rs-taskid{font-size:10px;}

.rs-gantt__track{position:relative; min-width:0;}
.rs-gantt__head{position:sticky; top:0; z-index:3; background:var(--surface); border-bottom:1px solid var(--border);}
.rs-gantt__h1{position:absolute; top:0; height:24px; display:flex; align-items:center; padding:0 8px;
  border-left:1px solid var(--border); font-size:11px; font-weight:600; color:var(--fg2); white-space:nowrap; overflow:hidden;}
.rs-gantt__h2{position:absolute; top:24px; bottom:0; display:flex; flex-direction:column; align-items:center;
  justify-content:center; border-left:1px solid var(--border); font-size:11px; color:var(--fg2); line-height:1.15; overflow:hidden;}
.rs-gantt__h2.is-off{background:var(--surface-2); color:var(--fg3);}
.rs-gantt__h2 small{font-size:9px; color:var(--fg3); text-transform:uppercase; letter-spacing:.04em;}
.rs-gantt__h2.is-now{color:var(--accent); font-weight:600;}

.rs-gantt__body{position:relative;}
.rs-gantt__off{position:absolute; top:0; bottom:0; background:var(--surface-2); opacity:.55;}
.rs-gantt__v{position:absolute; top:0; bottom:0; width:1px; background:var(--border); opacity:.6;}
.rs-gantt__hline{position:absolute; left:0; right:0; height:1px; background:var(--border); opacity:.55;}
.rs-gantt__rowhl{position:absolute; left:0; right:0; background:var(--accent-soft); opacity:.45; pointer-events:none;}

.rs-gantt__deps{position:absolute; inset:0; pointer-events:none; z-index:2; overflow:visible;}
.rs-gantt__deps path{fill:none; stroke:var(--fg3); stroke-width:1.2px; opacity:.75;}
.rs-gantt__deps path.is-hl{stroke:var(--accent); stroke-width:1.8px; opacity:1;}
.rs-gantt__deps polygon{fill:var(--fg3);}
.rs-gantt__deps polygon.is-hl{fill:var(--accent);}

.rs-gantt__bar{position:absolute; height:20px; border-radius:5px; background:var(--accent-soft-2);
  border:1px solid var(--accent-border); cursor:pointer; z-index:1; overflow:hidden;}
.rs-gantt__bar:hover{box-shadow:var(--shadow-sm); filter:brightness(1.02);}
.rs-gantt__fill{position:absolute; top:0; bottom:0; left:0; background:var(--accent); opacity:.8; border-radius:4px 0 0 4px;}
.rs-gantt__bar[data-tone="success"]{background:var(--success-soft); border-color:var(--success-border);}
.rs-gantt__bar[data-tone="success"] .rs-gantt__fill{background:var(--success);}
.rs-gantt__bar[data-tone="warning"]{background:var(--warning-soft); border-color:var(--warning-border);}
.rs-gantt__bar[data-tone="warning"] .rs-gantt__fill{background:var(--warning);}
.rs-gantt__bar[data-tone="neutral"]{background:var(--surface-3); border-color:var(--border-strong);}
.rs-gantt__bar[data-tone="neutral"] .rs-gantt__fill{background:var(--neutral); opacity:.5;}
.rs-gantt__bar.is-selected{box-shadow:0 0 0 2px var(--ring);} 
.rs-gantt__bar.is-blocked{border-style:dashed;}

.rs-gantt__parentbar{position:absolute; height:7px; border-radius:2px; background:var(--fg2); z-index:1; cursor:pointer;}
.rs-gantt__parentbar::before,.rs-gantt__parentbar::after{content:""; position:absolute; top:0; width:2.5px; height:12px;
  background:inherit; border-radius:0 0 2px 2px;}
.rs-gantt__parentbar::before{left:0;}
.rs-gantt__parentbar::after{right:0;}

.rs-gantt__ms{position:absolute; width:13px; height:13px; transform:rotate(45deg); border-radius:2.5px;
  background:var(--rs-indigo-50); cursor:pointer; z-index:1;}
.rs-gantt__ms.is-done{background:var(--success);}

.rs-gantt__lbl{position:absolute; font-size:11.5px; color:var(--fg2); white-space:nowrap; pointer-events:none; z-index:1;}
.rs-gantt__lbl b{font-weight:600; color:var(--fg);}

.rs-gantt__today{position:absolute; top:0; bottom:0; width:1.5px; background:var(--danger); z-index:2; pointer-events:none;}
.rs-gantt__todaytag{position:absolute; z-index:4; transform:translateX(-50%); top:2px; padding:1px 6px;
  border-radius:3px; background:var(--danger); color:#fff; font-size:9.5px; font-weight:700; letter-spacing:.05em;
  text-transform:uppercase; pointer-events:none;}

/* ---------- Gantt: direct editing ---------- */
.rs-gantt__bar.is-editable{cursor:grab; touch-action:none;}
.rs-gantt__bar.is-dragging{cursor:grabbing; box-shadow:var(--shadow); opacity:.92; z-index:3;}
.rs-gantt__ms.is-editable{cursor:grab; touch-action:none;}
.rs-gantt__ms.is-dragging{cursor:grabbing; box-shadow:var(--shadow); z-index:3;}
.rs-gantt__hdl{position:absolute; top:-1px; bottom:-1px; width:8px; cursor:ew-resize; opacity:0; transition:opacity .12s; touch-action:none; z-index:2;}
.rs-gantt__hdl::after{content:""; position:absolute; top:4px; bottom:4px; width:2.5px; border-radius:2px; background:var(--accent); left:50%; transform:translateX(-50%);}
.rs-gantt__hdl--w{left:-3px;}
.rs-gantt__hdl--e{right:-3px;}
.rs-gantt__bar:hover .rs-gantt__hdl,.rs-gantt__bar.is-dragging .rs-gantt__hdl{opacity:1;}

/* ---------- Gantt: interactive dependency linking ---------- */
.rs-gantt__linkdot{position:absolute; width:16px; height:16px; z-index:4; display:grid; place-items:center;
  cursor:crosshair; opacity:0; pointer-events:none; transition:opacity .12s; touch-action:none;}
.rs-gantt__linkdot::after{content:""; width:10px; height:10px; border-radius:50%; box-sizing:border-box;
  border:1.5px solid var(--accent); background:var(--surface);}
.rs-gantt__linkdot:hover::after,.rs-gantt__linkdot:active::after{background:var(--accent-soft-2); transform:scale(1.15);}
.rs-gantt__linkdot.is-on{opacity:1; pointer-events:auto;}
.rs-gantt__linkline{position:absolute; left:0; top:0; z-index:4; pointer-events:none; overflow:visible;}
.rs-gantt__linkline path{fill:none; stroke:var(--fg3); stroke-width:1.6px; stroke-dasharray:5 4;}
.rs-gantt__linkline path.is-valid{stroke:var(--accent);}
.rs-gantt__linkline circle{fill:var(--fg3);}
.rs-gantt__linkline circle.is-valid{fill:var(--accent);}
.rs-gantt__bar.is-linktarget{border-color:var(--accent); box-shadow:0 0 0 2px var(--ring);}
.rs-gantt__ms.is-linktarget{box-shadow:0 0 0 3px var(--ring);}

/* ---------- Task list: drag reorder & re-parent ---------- */
.rs-tasklist__grip{width:14px; height:18px; flex:none; border-radius:3px; cursor:grab; opacity:0; transition:opacity .12s;
  background-image:radial-gradient(circle, var(--fg3) 1.1px, transparent 1.2px);
  background-size:5px 5px; background-position:2px 2px; background-repeat:repeat;}
.rs-tasklist tr:hover .rs-tasklist__grip{opacity:.9;}
.rs-tasklist tr.is-dragrow{opacity:.35;}
.rs-tasklist tr.is-drop-before td{box-shadow:inset 0 2px 0 0 var(--accent);}
.rs-tasklist tr.is-drop-after td{box-shadow:inset 0 -2px 0 0 var(--accent);}
.rs-tasklist tr.is-drop-into td{background:var(--accent-soft); box-shadow:inset 0 0 0 1px var(--accent-border);}
.rs-tasklist tr.is-drop-into td:first-child{box-shadow:inset 2px 0 0 0 var(--accent), inset 0 0 0 1px var(--accent-border);}

/* ---------- Kanban: swimlanes ---------- */
.rs-kanbanlanes{display:grid; gap:0 14px; align-items:stretch; align-content:start; overflow:auto; padding-bottom:4px; max-height:100%;}
.rs-kanbanlanes__head{position:sticky; top:0; z-index:2; background:var(--bg); display:flex; align-items:center; gap:8px;
  padding:6px 4px 8px;}
.rs-kanbanlanes__head h4{font-size:12.5px; font-weight:600; color:var(--fg);}
.rs-kanbanlanes__lane{grid-column:1 / -1; display:flex; align-items:center; gap:8px; padding:14px 2px 8px;
  font-size:11px; font-weight:600; letter-spacing:.07em; text-transform:uppercase; color:var(--fg3);}
.rs-kanbanlanes__lane::after{content:""; flex:1 1 auto; height:1px; background:var(--border);}
.rs-kanbanlanes__cell{background:var(--surface-2); border:1px solid var(--border); border-radius:10px; min-height:64px;
  display:flex; flex-direction:column;}
.rs-kanbanlanes__cell.is-over{border-color:var(--accent-border);}
.rs-kanbanlanes__cell .rs-kanban__list{padding:8px 10px; flex:1 1 auto;}

/* ---------- Chat task card (task reference inside a chat thread) ---------- */
.rs-chattask{max-width:360px; border:1px solid var(--border); border-radius:8px; background:var(--surface);
  box-shadow:var(--shadow-sm); padding:10px 12px 11px; display:flex; flex-direction:column; gap:7px;}
.rs-chattask__head{display:flex; align-items:center; gap:7px;}
.rs-chattask__head .rs-spacer{flex:1 1 auto;}
.rs-chattask__title{font-size:13px; font-weight:500; color:var(--fg); line-height:1.35;}
.rs-chattask__foot{display:flex; align-items:center; gap:10px;}
.rs-chattask__foot .rs-spacer{flex:1 1 auto;}

/* ---------- User profile card & hover popover ---------- */
.rs-usercard{width:264px; background:var(--surface); border:1px solid var(--border); border-radius:8px;
  box-shadow:var(--shadow-lg); padding:14px; display:flex; flex-direction:column; gap:10px;}
.rs-usercard__head{display:flex; align-items:center; gap:11px; min-width:0;}
.rs-usercard__id{display:flex; flex-direction:column; gap:1px; min-width:0;}
.rs-usercard__id b{font-size:13.5px; font-weight:600; color:var(--fg); white-space:nowrap; overflow:hidden; text-overflow:ellipsis;}
.rs-usercard__id span{font-size:12px; color:var(--fg2);}
.rs-usercard__presence{display:inline-flex; align-items:center; gap:6px; font-size:11.5px; font-weight:500; color:var(--fg2);}
.rs-usercard__presence i{width:7px; height:7px; border-radius:50%; background:var(--fg3);}
.rs-usercard__presence[data-p="online"] i{background:var(--success);}
.rs-usercard__presence[data-p="away"] i{background:var(--warning);}
.rs-usercard__meta{display:flex; flex-direction:column; gap:7px; border-top:1px solid var(--border); padding-top:10px;}
.rs-usercard__row{display:flex; align-items:center; gap:8px; font-size:12px; color:var(--fg1, var(--fg2)); min-width:0;}
.rs-usercard__row .rs-ic{width:13px; height:13px; color:var(--fg3); flex:none;}
.rs-usercard__row span{overflow:hidden; text-overflow:ellipsis; white-space:nowrap;}
.rs-usercard__foot{display:flex; align-items:center; gap:8px; border-top:1px solid var(--border); padding-top:10px;}

.rs-userpop{display:inline-flex; position:relative;}
.rs-userpop__card{position:fixed; z-index:1000;}
.rs-userpop__card[data-above="true"]{transform:translateY(-100%);}
@media (prefers-reduced-motion: no-preference){
  .rs-userpop__card{animation:rs-userpop-in .14s cubic-bezier(.4,0,.2,1);}
  @keyframes rs-userpop-in{from{opacity:0; margin-top:4px;} to{opacity:1; margin-top:0;}}
}

/* ---------- Task editor (relations & schedule) ---------- */
.rs-taskeditor__rel{display:flex; flex-direction:column; gap:6px;}
.rs-taskeditor__relrow{display:flex; align-items:center; gap:8px; padding:7px 10px; border:1px solid var(--border);
  border-radius:6px; background:var(--surface); cursor:pointer; min-width:0;}
.rs-taskeditor__relrow:hover{border-color:var(--border-strong); background:var(--surface-2);}
.rs-taskeditor__relrow.is-dragrow{opacity:.35;}
.rs-taskeditor__relrow.is-drop-before{box-shadow:inset 0 2px 0 0 var(--accent);}
.rs-taskeditor__relrow.is-drop-after{box-shadow:inset 0 -2px 0 0 var(--accent);}
.rs-taskeditor__relrow .rs-tasklist__grip{opacity:0;}
.rs-taskeditor__relrow:hover .rs-tasklist__grip{opacity:.9;}
.rs-taskeditor__relrow .rs-tasklist__title{font-size:12.5px; flex:1 1 auto;}
.rs-taskeditor__chips{display:flex; flex-wrap:wrap; gap:5px;}
.rs-taskeditor__dur{font-size:12px; color:var(--fg2); display:inline-flex; align-items:center; gap:5px;}
.rs-taskeditor__dur .rs-ic{width:13px; height:13px; color:var(--fg3);}
