/* TDC Coaching v2 — page layout on top of tokens.css + bundle.css.
   Load order: tokens.css → bundle.css → v2.css. Only tdc-* classes and
   layout rules for *-v2.html pages belong here; never import app.css. */

/* Arimo (body font) is self-hosted in /fonts/ — the same files app.css
   uses, so v2 needs no Google Fonts request. */
@font-face{font-family:Arimo;src:url('../fonts/Arimo-Regular.woff2') format('woff2');font-weight:400;font-style:normal;font-display:swap}
@font-face{font-family:Arimo;src:url('../fonts/Arimo-SemiBold.woff2') format('woff2');font-weight:600;font-style:normal;font-display:swap}
@font-face{font-family:Arimo;src:url('../fonts/Arimo-Bold.woff2') format('woff2');font-weight:700;font-style:normal;font-display:swap}

html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--paper);color:var(--ink);font-family:var(--font-body)}

/* SuccessBurst (v2.js successBurst): bundle.js sets these inline. */
.tdc-success__detail{font-size:14px;line-height:20px}
.tdc-success__action{margin-top:16px}
body>.tdc-success{position:fixed}

/* ---------- mobile screen shell (student/mentor/account pages) ----------
   Designs are phone-only; on wider screens the same column is centred
   (GAPS T-6). */
.v2-screen{position:relative;box-sizing:border-box;max-width:480px;min-height:100vh;min-height:100dvh;margin:0 auto;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top)}
.v2-screen>.tdc-topbar{padding-top:12px;padding-bottom:6px}
.v2-px{padding-left:var(--space-4);padding-right:var(--space-4)}
.v2-stack{display:flex;flex-direction:column;gap:10px}
.v2-title{margin-bottom:12px}
.v2-title .tdc-h1{margin-top:2px}
.v2-sub{margin-top:4px;font-size:13px;line-height:18px}
.v2-grow{flex:1}
/* CTA pinned to the bottom of the viewport, content scrolls under it */
.v2-cta{position:sticky;bottom:0;z-index:5;margin-top:auto;display:flex;gap:8px;padding:14px var(--space-4) calc(14px + env(safe-area-inset-bottom));background:linear-gradient(to bottom,rgba(248,247,245,0),var(--paper) 18px)}
.v2-cta .tdc-btn--block{flex:1}
.v2-link{font:700 13px/18px var(--font-body);color:var(--tdc-red-deep);text-decoration:none;border-radius:4px}
.v2-link:hover{text-decoration:underline}
.v2-link:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.v2-center{text-align:center}
[hidden]{display:none!important}

/* ---------- form bits ---------- */
.v2-pwwrap{position:relative}
.v2-pwwrap .tdc-field{padding-right:52px}
.v2-pw{all:unset;cursor:pointer;position:absolute;right:6px;top:6px;width:44px;height:44px;display:grid;place-items:center;border-radius:var(--radius-sm);color:var(--ink-muted)}
.v2-pw:hover{color:var(--ink)}
.v2-pw:focus-visible{outline:2px solid var(--focus);outline-offset:0}
.v2-pw svg{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
/* password rules that tick while typing (ScreensAuth) */
.v2-rule{display:flex;gap:8px;align-items:center;font:13px/18px var(--font-body);color:var(--ink-muted);padding:3px 0}
.v2-rule b{width:18px;height:18px;border-radius:50%;display:grid;place-items:center;font:700 11px var(--font-body);background:var(--paper-sunk);color:var(--ink-muted);flex:none}
.v2-rule.is-ok{color:var(--ink)}
.v2-rule.is-ok b{background:var(--ok);color:#fff}

/* inline messages (say() in v2.js) */
.v2-msg{border-radius:var(--radius-md);padding:10px 12px;font:14px/20px var(--font-body);margin-top:10px}
.v2-msg--err{background:var(--red-tint);color:var(--tdc-red-deep)}
.v2-msg--ok{background:var(--ok-tint);color:var(--ok)}
.v2-msg--info{background:var(--paper-sunk);color:var(--ink)}
/* note card with a small mascot (ScreensAuth "Đã gửi link") */
.v2-note{display:flex;gap:10px;align-items:flex-start;background:var(--paper-raised);border-radius:16px;box-shadow:var(--shadow-card);padding:12px;font:13px/18px var(--font-body)}
.v2-note img{width:30px;flex:none}
.v2-note__t{font:700 14px/19px var(--font-body)}

/* ---------- account pages ---------- */
.v2-login-top{position:relative;overflow:hidden;height:300px;flex:none;background:var(--sand);border-radius:0 0 30px 30px}
.v2-login-top .v2-logo{position:absolute;left:20px;top:24px;height:34px}
.v2-login-top .v2-letter{position:absolute;left:18px;top:98px;width:170px}
.v2-login-top .v2-door{position:absolute;right:12px;bottom:-4px;width:84px;animation:v2-walk 3.5s ease-in-out infinite}
@keyframes v2-walk{50%{transform:translateX(-6px)}}
.v2-hero-sand{position:relative;overflow:hidden;height:128px;flex:none;margin:8px 12px 0;border-radius:22px;background:var(--sand)}
.v2-hero-sand .v2-logo{position:absolute;left:16px;top:16px;height:22px}
.v2-hero-sand .v2-door{position:absolute;right:18px;bottom:-6px;width:62px}
.v2-foot{margin-top:14px;text-align:center}
@media (min-width:600px){
  .v2-screen{min-height:0;margin-top:32px;margin-bottom:32px}
  .v2-login-top{border-radius:30px}
}
@media (prefers-reduced-motion:reduce){.v2-login-top .v2-door{animation:none}}

/* =================== app shell (student / mentor) =================== */
.v2-noscroll{overflow:hidden}
.v2-visually-hidden{position:absolute!important;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.v2-screen--tabs{padding-bottom:calc(96px + env(safe-area-inset-bottom))}
.v2-screen--tabs>.tdc-topbar{position:sticky;top:0;z-index:6;background:var(--paper)}
.v2-panel{padding-bottom:var(--space-5)}
.v2-tabdock{position:fixed;left:0;right:0;bottom:0;z-index:8;padding:0 10px calc(12px + env(safe-area-inset-bottom));max-width:480px;margin:0 auto;box-sizing:border-box;pointer-events:none}
.v2-tabdock .tdc-tabbar{pointer-events:auto}
.v2-sheet-open .v2-tabdock{visibility:hidden}
.v2-label{font:600 11px/14px var(--font-display);letter-spacing:.6px;text-transform:uppercase;color:var(--ink-muted);margin:14px 0 6px}
.v2-label--section{margin:var(--space-5) 0 8px}
.v2-p{font:14px/20px var(--font-body);margin:8px 0 0}
.v2-ok{color:var(--ok);font:700 13px/18px var(--font-body)}
.v2-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.v2-list{margin-top:12px}

/* toasts (replaces v1 #flash banner) */
.v2-toasts{position:fixed;left:0;right:0;top:calc(56px + env(safe-area-inset-top));z-index:30;max-width:480px;margin:0 auto;padding:0 var(--space-4);box-sizing:border-box;pointer-events:none}
.v2-toast{pointer-events:auto;display:flex;gap:10px;align-items:flex-start;border-radius:14px;padding:10px 8px 10px 14px;font:14px/20px var(--font-body);box-shadow:var(--shadow-float);animation:tdc-rise var(--dur-base) var(--ease-out) both}
.v2-toast--ok{background:var(--ok-tint);color:var(--ok)}
.v2-toast--err{background:var(--red-tint);color:var(--tdc-red-deep)}
.v2-toast>span{flex:1}
.v2-toast__x{all:unset;cursor:pointer;width:28px;height:28px;display:grid;place-items:center;border-radius:50%;font:700 13px var(--font-body);flex:none}
.v2-toast__x:focus-visible{outline:2px solid var(--focus)}

/* cards + rows */
.v2-card{background:var(--paper-raised);border-radius:20px;box-shadow:var(--shadow-card);padding:14px 16px}
.v2-card__head{display:flex;flex-direction:column;gap:2px;margin-bottom:10px;align-items:flex-start}
.v2-card__title{font:700 20px/24px var(--font-display);margin:0}
.v2-rows{padding-top:4px;padding-bottom:4px}
.v2-row{display:flex;align-items:center;gap:12px;padding:12px 0;flex-wrap:wrap}
.v2-rows>.v2-row+.v2-row,.v2-rows>.v2-row+.v2-row--link{border-top:1px solid var(--line)}
.v2-row__sw{width:36px;height:36px;flex:none;border-radius:50%;display:grid;place-items:center;background:var(--lab)}
.v2-row__sw svg{width:12px;height:20px}
.v2-row__sw--ok{background:var(--ok-tint);color:var(--ok)}
.v2-row__sw--warn{background:var(--warn-tint);color:var(--warn)}
.v2-row__sw--ok svg,.v2-row__sw--warn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.v2-row__thumb{width:44px;height:44px;flex:none;border-radius:12px;object-fit:cover}
.v2-row__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.v2-row__t{font:700 15px/20px var(--font-body);color:var(--ink)}
.v2-row__action{flex:none}
.v2-row.is-editing .v2-row__action{flex-basis:100%}
.v2-row--link{all:unset;box-sizing:border-box;cursor:pointer;display:flex;align-items:center;gap:12px;width:100%;padding:12px 0}
.v2-row--link:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:8px}
.v2-row__chev svg{width:18px;height:18px;fill:none;stroke:var(--ink-muted);stroke-width:2;stroke-linecap:round;transform:scaleX(-1);display:block}
.v2-note-sunk{background:var(--paper-sunk);border-radius:14px;padding:12px;margin-top:10px}
.v2-note-warn{background:var(--warn-tint);color:var(--ink);border-radius:14px;padding:12px;font:13px/18px var(--font-body);margin-top:6px}
.v2-editor{display:flex;flex-direction:column;gap:8px;margin-top:8px;width:100%}
.v2-picker{margin-top:6px}
.v2-picker .tdc-select{display:flex;min-width:0}
.v2-picker .tdc-select select{flex:1;min-width:0}
.v2-bullets{margin:8px 0 0;padding-left:18px;font:14px/20px var(--font-body)}
.v2-bullets li+li{margin-top:6px}

/* home */
#homeCards{margin-top:4px}

/* book */
.v2-chiprow{padding:4px var(--space-4) 6px}
.v2-subject-meta{margin:6px 0 0;min-height:16px}
.v2-weeknav{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:16px 0 12px}
.v2-weeknav b{font:700 16px/20px var(--font-display);font-variant-numeric:tabular-nums}
#dayPills .tdc-days{padding-top:4px}
#noSlots{margin:14px 0 0}
.v2-suggest{display:flex;gap:10px;align-items:center;border:1.5px dashed var(--line-strong);border-radius:20px;padding:12px 14px;margin-top:18px}
.v2-suggest img{width:34px;flex:none}
.v2-ranges{margin:0 0 10px;padding-left:18px;font:13px/19px var(--font-body)}
#scheduleRequestOpen{margin-top:18px}
.v2-old{display:flex;gap:6px;align-items:center;background:var(--paper-raised);border-radius:14px;box-shadow:var(--shadow-card);padding:10px 12px;font:13px/18px var(--font-body);color:var(--ink-muted);margin-bottom:10px}
.v2-old s{font:700 16px/20px var(--font-display);color:var(--ink-muted)}
.v2-old--banner{margin:0 0 12px}
.v2-booksheet{position:fixed;left:0;right:0;bottom:0;z-index:12;max-width:480px;margin:0 auto;box-sizing:border-box;padding-bottom:calc(16px + env(safe-area-inset-bottom))}
.v2-booksheet .v2-dialog__x{position:absolute;top:10px;right:12px;width:32px;height:32px;font:700 13px var(--font-body)}
.v2-sheet-open .v2-screen--tabs{padding-bottom:300px}

/* schedule request (Đề xuất lịch) sub-view */
.v2-subbar{display:flex;justify-content:space-between;align-items:center;padding:4px 16px 8px}
.v2-gridwrap{padding:4px 8px 0;overflow-x:auto}
.v2-srfoot{display:flex;align-items:flex-start;justify-content:space-between;gap:10px}
.v2-srfoot p{margin:0;display:flex;flex-direction:column;gap:2px;font:14px/19px var(--font-body)}
/* CTA inside a tabbed screen sits just above the fixed tab bar (58px + 12px gap) */
.v2-cta--tabs{bottom:calc(70px + env(safe-area-inset-bottom));padding-bottom:14px}
/* slot-grid.js grid, restyled as WeekPainter (GAPS D0 G-15) */
.paintgrid{display:grid;gap:3px;user-select:none;-webkit-user-select:none;min-width:320px}
.paintgrid .h{font:600 11px/14px var(--font-body);color:var(--ink-muted);text-align:center;padding-bottom:4px;position:sticky;top:0}
.paintgrid .h b{display:block;font:700 15px/17px var(--font-display);color:var(--ink)}
.paintgrid .t{font:600 10px/12px var(--font-body);color:var(--ink-muted);display:flex;align-items:flex-start;justify-content:flex-end;padding-right:4px}
.paintgrid .t:not(.hour) span{visibility:hidden}
.paintgrid .cell{all:unset;box-sizing:border-box;cursor:pointer;height:22px;border-radius:6px;background:var(--paper-raised);box-shadow:inset 0 0 0 1px var(--line);touch-action:pan-y;transition:background .12s}
.paintgrid .cell.hour{margin-top:3px}
.paintgrid .cell.on{background:var(--lab-strong);box-shadow:inset 0 0 0 1.5px var(--ink)}
.paintgrid .cell:focus-visible{outline:2px solid var(--focus);outline-offset:1px}

/* sessions */
.v2-due{font:13px/18px var(--font-body);color:var(--tdc-red-deep);background:var(--red-tint);border-radius:12px;padding:8px 10px;margin-top:8px}
.v2-attach{display:inline-flex;gap:6px;align-items:center;margin-top:6px}
.v2-attach svg{width:15px;height:15px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;flex:none}
.tdc-session .v2-meet{margin-top:10px}
.tdc-session__body .tdc-meta+.tdc-meta{margin-top:4px}

/* subjects */
.v2-hero{position:relative;overflow:hidden;background:var(--lab);padding:10px 16px 18px;border-radius:0 0 26px 26px;margin-top:-6px}
.v2-hero .tdc-iconbtn{margin-bottom:12px}
.v2-hero__mascot{position:absolute;right:-6px;top:18px;width:104px}
.v2-hero .tdc-paren,.v2-hero__title,.v2-hero .tdc-meta{position:relative;max-width:calc(100% - 96px)}
.v2-hero__title{font-size:34px;line-height:36px;margin:2px 0 6px}
.v2-hero .tdc-progress{margin-top:14px}
.v2-lessons{padding:4px 0}
.v2-lessons .tdc-lesson{padding-left:16px;padding-right:16px}
.v2-lessons .tdc-lesson .v2-link{font-size:12px}
.v2-lock svg{width:18px;height:18px;fill:none;stroke:var(--ink-muted);stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.v2-certcard{display:flex;gap:12px;align-items:center;background:var(--sand);border-radius:20px;padding:14px;margin-top:12px}
.v2-certcard img{width:120px;flex:none}

/* me */
.v2-profile{display:flex;gap:14px;align-items:center;margin:8px 0 16px}
.v2-avatar{width:64px;height:64px;flex:none;border-radius:50%;background:var(--lab-strong);display:grid;place-items:center;font:700 26px var(--font-display);color:var(--ink)}
.v2-profile__name{font:700 28px/30px var(--font-display);margin:0;overflow-wrap:anywhere}
.v2-doc{max-height:260px;overflow-y:auto;border-radius:14px;background:var(--paper);box-shadow:inset 0 0 0 1px var(--line);padding:10px 12px;font:13px/19px var(--font-body)}
.v2-doc:focus-visible{outline:2px solid var(--focus);outline-offset:2px}
.v2-doc p{margin:0 0 8px}
.v2-doc__h{text-align:center;font-weight:700}
.v2-doc__sh{font-weight:700;margin-top:12px!important}
.v2-doc__i{font-style:italic;color:var(--ink-muted)}
.v2-doc hr{border:0;border-top:1px solid var(--line);margin:10px 0}
.v2-doc__table{width:100%;border-collapse:collapse;margin:6px 0}
.v2-doc__table th{text-align:left;font-weight:600;padding:2px 8px 2px 0;vertical-align:top;white-space:nowrap}
.v2-doc__table td{padding:2px 0;vertical-align:top}
.v2-doc__accept td{width:50%;padding-right:10px}
.v2-sig{display:block;width:100%;max-width:100%;height:auto;aspect-ratio:3/1;border-radius:14px;background:#fff;box-shadow:inset 0 0 0 1px var(--line-strong);touch-action:none}
.v2-cert__letter{width:90px;flex:none;background:var(--sand);border-radius:10px;padding:6px}
.v2-links{padding-top:4px;padding-bottom:4px}
.v2-linkrow{all:unset;box-sizing:border-box;cursor:pointer;display:flex;align-items:center;gap:10px;width:100%;padding:13px 0;font:700 15px var(--font-body);color:var(--ink)}
.v2-linkrow+.v2-linkrow{border-top:1px solid var(--line)}
.v2-linkrow svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.v2-linkrow.is-out{color:var(--tdc-red-deep)}
.v2-linkrow:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:8px}
#pushCard .tdc-switchrow{padding:0}
.tdc-seg button[aria-pressed="true"]{background:var(--paper-raised)}

/* =================== dialogs =================== */
.v2-dialog{position:fixed;inset:0;z-index:40;background:rgba(18,18,17,.4);display:flex;align-items:flex-end;justify-content:center;animation:tdc-rise var(--dur-base) var(--ease-out) both}
.v2-dialog[hidden]{display:none}
.v2-sheet{position:relative;box-sizing:border-box;width:100%;max-width:480px;max-height:92vh;max-height:92dvh;overflow-y:auto;background:var(--paper);border-radius:26px 26px 0 0;padding:10px 16px calc(16px + env(safe-area-inset-bottom));box-shadow:var(--shadow-float)}
.v2-dialog__x{position:absolute;top:12px;right:12px;width:32px;height:32px;font:700 13px var(--font-body);color:var(--ink)}
.v2-sheet__title{font:700 28px/30px var(--font-display);margin:2px 44px 4px 0}
.v2-sheet__body{font-size:13px;line-height:18px;margin:0 0 12px}
.v2-sheet__actions{position:sticky;bottom:calc(-16px - env(safe-area-inset-bottom));display:flex;gap:8px;background:var(--paper);padding:12px 0 0;margin-top:14px}
.v2-sheet__actions .tdc-btn--block{flex:1}
.v2-lessonpick{background:var(--lab-soft);border-radius:18px;padding:12px;display:flex;flex-direction:column;gap:8px}
.v2-select-block{display:flex;height:44px;background:var(--paper-raised)}
.v2-select-block select{flex:1;min-width:0}
.v2-brief{background:rgba(255,255,255,.7);border-radius:12px;padding:10px 12px;font:14px/20px var(--font-body);white-space:pre-wrap}
.v2-brief .v2-label{margin:0 0 2px}
.v2-seg-radio label{flex:1;display:flex;align-items:center;justify-content:center;gap:6px;cursor:pointer;border-radius:999px;padding:9px 10px;font:700 13px/1 var(--font-body);color:var(--ink-muted)}
.v2-seg-radio input{position:absolute;opacity:0;width:1px;height:1px}
.v2-seg-radio label:has(input:checked){background:var(--paper-raised);color:var(--ink);box-shadow:var(--shadow-card)}
.v2-seg-radio label:has(input:focus-visible){outline:2px solid var(--focus);outline-offset:1px}
@media (min-width:600px){
  .v2-dialog{align-items:center;padding:24px}
  .v2-sheet{border-radius:26px;max-height:88vh}
  .v2-sheet .tdc-sheet__grab{display:none}
}

/* full-screen overlay (notifications) */
.v2-overlay{position:fixed;inset:0;z-index:35;background:var(--paper);overflow-y:auto}
.v2-overlay[hidden]{display:none}
.v2-overlay__inner{max-width:480px;margin:0 auto;padding:env(safe-area-inset-top) 0 32px}
.v2-overlay__inner>.tdc-topbar{padding-top:12px}
.v2-ntfs{padding-top:2px;padding-bottom:2px}
.v2-ntf{position:relative}
.v2-ntf+.v2-ntf{border-top:1px solid var(--line)}
.v2-ntf__day{margin:14px 0 2px}
.v2-ntf__day:first-child{margin-top:8px}
.v2-ntf__main{all:unset;box-sizing:border-box;cursor:pointer;display:flex;gap:12px;width:100%;padding:12px 0;align-items:flex-start}
.v2-ntf__main:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:8px}
.v2-ntf__ic{width:36px;height:36px;flex:none;border-radius:50%;background:var(--paper-sunk);display:grid;place-items:center}
.v2-ntf.is-unread .v2-ntf__ic{background:var(--lab-soft)}
.v2-ntf__ic svg{width:16px;height:16px;fill:none;stroke:var(--ink);stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.v2-ntf__body{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.v2-ntf__t{font:700 15px/20px var(--font-body)}
.v2-ntf q{display:block;quotes:none;font:italic 13px/18px var(--font-body);background:var(--paper);border-radius:10px;padding:6px 8px;margin-top:6px}
.v2-ntf__dot{width:8px;height:8px;border-radius:50%;background:var(--tdc-red);margin-top:6px;flex:none}
.v2-ntf__meet{display:inline-block;margin:0 0 12px 48px}
.v2-booksheet.is-hidden{visibility:hidden;transition:transform .45s cubic-bezier(.2,.8,.2,1),visibility 0s .45s}
.v2-clamp{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}

/* =================== mentor =================== */
.v2-parenrule{display:flex;align-items:center;gap:8px;margin:var(--space-5) 0 8px}
.v2-parenrule hr{flex:1;border:0;border-top:1px solid var(--line);margin:0}
.v2-linkrow--plain{margin-top:10px;padding:12px 4px}
.v2-row__sw--lab{background:var(--lab-soft);color:var(--ink)}
.v2-row__sw--lab svg,.v2-row__sw--warn svg{width:18px;height:18px;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round}
.v2-tiles{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.v2-tile{background:var(--paper-raised);border-radius:16px;box-shadow:inset 0 0 0 1px var(--line);padding:12px 14px;display:flex;flex-direction:column;gap:2px}
.v2-tile b{font:700 24px/26px var(--font-display)}
.v2-brief--lab{background:var(--lab-soft);margin-bottom:6px}
.v2-quote{margin:0;background:var(--paper-raised);border-radius:16px;box-shadow:var(--shadow-card);padding:12px 14px 12px 38px;position:relative;font:15px/22px var(--font-body)}
.v2-quote:before{content:"\201C";position:absolute;left:12px;top:4px;font:700 34px/1 var(--font-display);color:var(--lab-strong)}
.v2-pickconfirm{border-radius:22px;margin-top:14px;box-shadow:none}
.v2-pickconfirm .tdc-sheet__when{font-size:26px;line-height:28px}
.v2-subjline{display:flex;gap:8px;align-items:center;font:14px/20px var(--font-body)}
.v2-subjline i{width:10px;height:10px;border-radius:50%;background:var(--lab);box-shadow:inset 0 0 0 1px rgba(18,18,17,.25);flex:none}
.v2-sheet .tdc-slotgrid{margin-top:6px}
/* search/select wrappers (bundle.css shows focus as an inset line) also get
   the design's 2px focus ring, like every other control */
.tdc-search:focus-within,.tdc-select:focus-within{outline:2px solid var(--focus);outline-offset:2px}
.v2-stack>.tdc-skeleton,.v2-rows>.tdc-skeleton{display:block;border-radius:20px;margin:6px 0}

/* =================== motion — "Sống động" (anh Phương chốt 30/09) ===================
   Builds on bundle.css's motion system (same tokens: --dur-*, --ease-*).
   bundle.css's prefers-reduced-motion rule (.tdc-root *) still switches every
   one of these off. */
@keyframes v2-slide-in{from{opacity:0;transform:translateX(32px) scale(.985)}to{opacity:1;transform:none}}
@keyframes v2-slide-in-left{from{opacity:0;transform:translateX(-32px) scale(.985)}to{opacity:1;transform:none}}
@keyframes v2-rise-in{from{opacity:0;transform:translateY(22px)}to{opacity:1;transform:none}}
@keyframes v2-hl-sweep{from{background-size:0% 100%}to{background-size:100% 100%}}
@keyframes v2-sheet-up{0%{transform:translateY(100%)}70%{transform:translateY(-6px)}100%{transform:translateY(0)}}
@keyframes v2-pop-in{0%{opacity:0;transform:translateY(-14px) scale(.9)}60%{opacity:1;transform:translateY(3px) scale(1.02)}100%{transform:none}}
@keyframes v2-scrim{from{opacity:0}to{opacity:1}}

/* tab / sub-view change: a longer, clearly visible slide */
.tdc-enter{animation:v2-slide-in 420ms var(--ease-out) both}
.tdc-enter.from-left{animation-name:v2-slide-in-left}
/* screen titles rise in, the highlight sweeps its colour in afterwards */
.tdc-enter .v2-title>*,.tdc-enter .v2-adminhead>*{animation:v2-rise-in var(--dur-slow) var(--ease-out) both}
.tdc-enter .v2-title>*:nth-child(2),.tdc-enter .v2-adminhead>*:nth-child(2){animation-delay:70ms}
.tdc-enter .v2-title>*:nth-child(3){animation-delay:140ms}
mark.tdc-hl{background-image:linear-gradient(var(--lab-soft),var(--lab-soft));background-color:transparent;background-repeat:no-repeat;background-size:100% 100%;animation:v2-hl-sweep 700ms 250ms var(--ease-out) both}
/* list stagger: a touch further + bouncier than bundle.css */
.tdc-stagger>*{animation-name:v2-rise-in;animation-duration:600ms}
/* hover lift on pointer devices */
@media (hover:hover){
  .tdc-session,.v2-card,.tdc-deadline,.tdc-stat,.v2-row--link,.tdc-next{transition:transform var(--dur-base) var(--ease-spring),box-shadow var(--dur-base) var(--ease-out)}
  .tdc-session:hover,.tdc-deadline:hover,button.tdc-stat:hover,.tdc-next:hover{transform:translateY(-3px);box-shadow:var(--shadow-float)}
  .v2-row--link:hover{transform:translateX(4px)}
  .tdc-btn:not([disabled]){transition:transform var(--dur-fast) var(--ease-spring),box-shadow var(--dur-base),background var(--dur-base)}
  .tdc-btn:not([disabled]):hover{transform:translateY(-2px)}
  .tdc-btn:not([disabled]):active{transform:scale(.95)}
  .tdc-slot:not([disabled]):hover,.tdc-day:not([disabled]):not([aria-pressed="true"]):hover,.tdc-chip:hover,.tdc-choice:hover{transform:translateY(-2px)}
}
/* sheets and dialogs spring up from the bottom; toasts pop in */
.v2-dialog:not([hidden]){animation:v2-scrim var(--dur-base) var(--ease-out) both}
.v2-dialog:not([hidden])>.v2-sheet{animation:v2-sheet-up 480ms var(--ease-out) both}
.v2-booksheet:not(.is-hidden){transition:transform 520ms cubic-bezier(.3,1.35,.5,1)}
.v2-toast{animation:v2-pop-in 480ms var(--ease-out) both}
.v2-drawer:not([hidden])>.v2-drawer__panel{animation:v2-slide-in 420ms var(--ease-out) both}
@media (min-width:600px){.v2-dialog:not([hidden])>.v2-sheet{animation:v2-pop-in 420ms var(--ease-out) both}}
/* entrance animations must not keep holding `transform` after they finish,
   or the hover lift above can never apply */
.tdc-stagger>*,.tdc-rise,.tdc-enter .v2-title>*,.tdc-enter .v2-adminhead>*{animation-fill-mode:backwards}
/* NDA not verified yet: booking tab shows only the title + the gate card */
#bookMain.is-nda-gated > :not(.v2-title):not(#ndaBookGate){display:none}
/* 2026-10-03 — account locked (membership expired / payment / policy / no package):
   booking tab shows only the title + the reason cards */
#bookMain.is-blocked > :not(.v2-title):not(#blockBookGate){display:none}
.v2-block a{font-weight:600}
/* v42 — legacy "TDC Homework" form history in the mentor's submission sheet */
.v2-legacy-hw summary{cursor:pointer}
.v2-legacy-hw__row{padding:8px 0;border-top:1px solid var(--line)}
/* 2026-10-06 — mentor Buổi học → "Tuần": Google-Calendar-style week grid (mentor-week.js) */
#sessionsSeg .tdc-seg button{padding:9px 6px}
.v2-wk{background:var(--paper-raised);border-radius:var(--radius-lg);box-shadow:var(--shadow-card);padding:12px 10px}
.v2-wk__nav{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.v2-wk__nav .tdc-iconbtn{font:700 20px/1 var(--font-body);color:var(--ink);flex:none}
.v2-wk__range{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;line-height:1.2}
.v2-wk__range b{font:700 16px/20px var(--font-display)}
.v2-wk__grid{display:grid;grid-template-columns:30px repeat(7,minmax(0,1fr));column-gap:3px}
.v2-wk__hd{all:unset;cursor:pointer;display:flex;flex-direction:column;align-items:center;gap:1px;padding:4px 0 6px;border-radius:12px;font:600 11px/14px var(--font-body);color:var(--ink-muted)}
.v2-wk__hd b{font:700 16px/22px var(--font-display);color:var(--ink);width:26px;text-align:center;border-radius:50%}
.v2-wk__hd.is-today b{background:var(--tdc-red);color:var(--on-red)}
.v2-wk__hd[aria-pressed="true"]{background:var(--ink);color:var(--on-ink)}
.v2-wk__hd[aria-pressed="true"] b{color:var(--on-ink)}
.v2-wk__hd[aria-pressed="true"].is-today b{color:var(--on-red)}
.v2-wk__hd i{width:5px;height:5px;border-radius:50%}
.v2-wk__hd i.has{background:currentColor}
.v2-wk__hd:focus-visible{outline:2px solid var(--focus);outline-offset:1px}
.v2-wk__times{position:relative}
.v2-wk__times span{position:absolute;right:2px;transform:translateY(-50%);font:600 10px/12px var(--font-body);color:var(--ink-muted)}
.v2-wk__times span:first-child{transform:none}
.v2-wk__col{position:relative;cursor:pointer;border-radius:6px;background:repeating-linear-gradient(to bottom,var(--line) 0 1px,transparent 1px var(--wk-hour))}
.v2-wk__col.is-before{background-color:var(--paper)}
.v2-wk__col.is-sel{background-color:var(--paper-sunk)}
.v2-wk__ev{all:unset;box-sizing:border-box;cursor:pointer;position:absolute;left:1px;right:1px;overflow:hidden;border-radius:6px;padding:2px 3px;background:var(--lab-strong);box-shadow:inset 0 0 0 1.5px var(--ink);font:10px/12px var(--font-body);color:var(--ink);display:flex;flex-direction:column}
.v2-wk__ev b{font-weight:700}
.v2-wk__ev span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.v2-wk__ev.is-short{flex-direction:row;gap:3px;align-items:center}
.v2-wk__ev.is-short span{min-width:0}
.v2-wk__ev.is-due{background:var(--warn-tint);box-shadow:inset 0 0 0 1.5px var(--warn);border:0;outline:1.5px dashed var(--warn);outline-offset:-1.5px}
.v2-wk__ev.is-past{background:var(--paper-sunk);box-shadow:inset 0 0 0 1px var(--line-strong);color:var(--ink-muted)}
.v2-wk__ev.is-live{box-shadow:inset 0 0 0 2px var(--tdc-red)}
.v2-wk__ev:focus-visible{outline:2px solid var(--focus);outline-offset:1px}
.v2-wk__now{position:absolute;left:-2px;right:-2px;height:2px;background:var(--tdc-red);pointer-events:none;z-index:1}
.v2-wk__now:before{content:"";position:absolute;left:-3px;top:-3px;width:8px;height:8px;border-radius:50%;background:var(--tdc-red)}
.v2-wk__sw{background:var(--lab-strong);box-shadow:inset 0 0 0 1.5px var(--ink)}
.v2-wk__sw.is-due{background:var(--warn-tint);box-shadow:inset 0 0 0 1.5px var(--warn)}
.v2-wk__sw.is-past{background:var(--paper-sunk);box-shadow:inset 0 0 0 1px var(--line-strong)}
.v2-wkday{margin-top:16px;scroll-margin-top:72px}
