/* ============================================================
   4Q LIFE · PLATFORM PROTOTYPE · DESIGN SYSTEM
   Спільний файл стилів для всіх сторінок прототипу.
   Стан сайдбара керується класом .sb-open на <html>.
   ============================================================ */

/* ============================================================
   ТОКЕНИ
   ============================================================ */
:root{
  --bg:#F6F7FB;
  --card:#FFFFFF;
  --text:#0F172A;
  --muted:#64748B;
  --border:rgba(15,23,42,0.08);

  --sidebar-bg:#0E1130;
  --sidebar-text:#CDD3EA;
  --sidebar-muted:#7D86AD;

  --accent:rgb(9,143,227);
  --accent-2:#5CB6F0;
  --accent-soft:rgba(9,143,227,.1);
  --grad:linear-gradient(135deg, rgb(9,143,227), #5CB6F0);
  --success:#34D399;
  --success-soft:rgba(52,211,153,.12);
  --warning:#FBBF24;
  --warning-soft:rgba(251,191,36,.15);
  --roots:#8A5A3B;

  --ph:#DFE4EE;
  --ph-icon:#9AA5C0;

  --r-card:18px;
  --r-card-lg:20px;
  --r-btn:11px;
  --r-chip:999px;
  --shadow:0 8px 24px rgba(14,17,48,.06);
  --shadow-hover:0 14px 34px rgba(14,17,48,.1);

  --font-head:'Plus Jakarta Sans',sans-serif;
  --font-body:'Inter',sans-serif;

  --sb-collapsed:72px;
  --sb-expanded:264px;
}

/* ============================================================
   БАЗА
   ============================================================ */
*{margin:0;padding:0;box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  font-family:var(--font-body);
  font-size:14px;
  line-height:1.55;
  color:var(--text);
  background:var(--bg);
}
h1,h2,h3,h4{font-family:var(--font-head);letter-spacing:-0.02em;color:var(--text)}
h1{font-size:28px;font-weight:800}
h2{font-size:22px;font-weight:700}
h3{font-size:17px;font-weight:700}
h4{font-size:14px;font-weight:700}
.small{font-size:12.5px}
.caption{font-size:11px;text-transform:uppercase;letter-spacing:1px;font-weight:600;color:var(--muted)}
.muted{color:var(--muted)}
.big-num{font-family:var(--font-head);font-size:28px;font-weight:800;letter-spacing:-0.02em;line-height:1.1}
button{font-family:inherit;cursor:pointer;border:none;background:none;color:inherit;font-size:inherit}
a{color:inherit;text-decoration:none}
svg.icon{width:20px;height:20px;stroke:currentColor;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}

/* Фото-заглушка (замість будь-якого фото) */
.ph{
  background:var(--ph);
  display:flex;align-items:center;justify-content:center;
  color:var(--ph-icon);
}
.ph svg.icon{width:24px;height:24px}

/* Аватар-заглушка */
.avatar{
  width:36px;height:36px;border-radius:50%;
  background:var(--ph);
  display:flex;align-items:center;justify-content:center;
  color:var(--ph-icon);flex-shrink:0;
}
.avatar svg.icon{width:16px;height:16px}
.avatar.sm{width:30px;height:30px}
.avatar.sm svg.icon{width:14px;height:14px}
.avatar.lg{width:56px;height:56px}
.avatar.lg svg.icon{width:22px;height:22px}

/* ============================================================
   САЙДБАР
   Стани: згорнутий 72px (за замовчуванням) ↔ розгорнутий 264px.
   Розгортає клік будь-де по панелі, згортає вихід курсора (app.js).
   Розгорнутий стан = клас .sb-open на <html>, не зберігається між сторінками.
   ============================================================ */
.sidebar{
  position:fixed;left:0;top:0;bottom:0;z-index:100;
  width:var(--sb-collapsed);
  background:var(--sidebar-bg);
  color:var(--sidebar-text);
  transition:width .25s ease;
  /* overflow видимий — щоб кнопка-стрілка виступала за край */
}
html.sb-open .sidebar{width:var(--sb-expanded)}

.sb-inner{
  height:100%;display:flex;flex-direction:column;
  overflow:hidden;
}

/* --- Кнопка-стрілка на правому краю (перемикач станів) --- */
/* Згорнутий сайдбар — суцільна зона «клікни, щоб розгорнути» (логіка в app.js) */
html:not(.sb-open) .sidebar{cursor:pointer}

/* --- Підписи: без стрибків — тільки opacity --- */
.sb-label{
  opacity:0;transition:opacity .2s ease .05s;
  white-space:nowrap;overflow:hidden;
  font-size:13.5px;font-weight:500;
  pointer-events:none;
}
html.sb-open .sb-label{opacity:1;pointer-events:auto}

.sb-top{padding:16px 0 8px;display:flex;flex-direction:column;gap:12px;flex-shrink:0}

/* Лого */
/* Згорнутий сайдбар: лого по центру; розгорнутий — з відступом зліва */
.sb-logo-row{
  display:flex;align-items:center;justify-content:center;gap:12px;
  padding:0;height:74px;transition:padding .25s ease;
}
html.sb-open .sb-logo-row{justify-content:flex-start;padding:0 26px}
/* Лого-вордмарк: у згорнутому сайдбарі вужчий, у розгорнутому — на всю ширину.
   Назва школи вшита в саме зображення, тому окремого .sb-label тут немає. */
.sb-logo{
  width:40px;height:auto;flex-shrink:0;
  object-fit:contain;
  transition:width .25s ease;
}
html.sb-open .sb-logo{width:129px}

/* Пошук */
.sb-search{
  margin:0 16px;height:40px;border-radius:10px;
  background:rgba(255,255,255,.06);
  border:1px solid rgba(255,255,255,.08);
  display:flex;align-items:center;gap:10px;
  padding:0 10px;overflow:hidden;flex-shrink:0;
}
.sb-search svg.icon{width:18px;height:18px;color:var(--sidebar-muted);margin-left:1px}
.sb-search input{
  border:none;background:none;outline:none;flex:1;min-width:0;
  color:var(--sidebar-text);font-family:var(--font-body);font-size:13px;
  opacity:0;transition:opacity .2s ease .05s;
}
.sb-search input::placeholder{color:var(--sidebar-muted)}
html.sb-open .sb-search input{opacity:1}

/* Навігація */
.sb-nav{flex:1;min-height:0;overflow:visible;padding:8px 12px;display:flex;flex-direction:column;gap:2px}
/* Пункти НЕ стискаються: коли розкрита група не вміщається у висоту екрана,
   меню має прокручуватись / нижній пункт частково ховатись — а не «сплющувати»
   висоти рядків (через це відступи між пунктами ставали нерівними). */
.sb-nav > *{flex-shrink:0}
html.sb-open .sb-nav{overflow-y:auto;overflow-x:hidden;overscroll-behavior:contain}
html.sb-open .sb-nav::-webkit-scrollbar{width:0}

.sb-item{
  display:flex;align-items:center;gap:12px;
  height:44px;flex-shrink:0;padding:0 14px;border-radius:11px;
  color:var(--sidebar-text);position:relative;
  transition:background .15s,color .15s;
  width:100%;text-align:left;
}
.sb-item:hover{background:rgba(255,255,255,.07);color:#fff}
.sb-item.active{background:var(--grad);color:#fff}
.sb-item .icon-wrap{position:relative;display:flex;flex-shrink:0}
.sb-item .sb-label{flex:1}

/* Бейджі (у розгорнутому стані) */
.sb-badge{
  font-size:11px;font-weight:600;padding:2px 8px;border-radius:var(--r-chip);
  background:rgba(92,182,240,.18);color:var(--accent-2);
  opacity:0;transition:opacity .2s ease .05s;flex-shrink:0;
}
html.sb-open .sb-badge{opacity:1}
/* у згорнутому стані — крапка на іконці */
.sb-dot{
  position:absolute;top:-2px;right:-3px;width:7px;height:7px;border-radius:50%;
  background:var(--accent-2);border:1.5px solid var(--sidebar-bg);
  transition:opacity .2s ease;
}
html.sb-open .sb-dot{opacity:0}

/* Шеврон підпунктів (групи) */
.sb-caret{
  width:24px;height:24px;border-radius:6px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  color:var(--sidebar-muted);
  opacity:0;pointer-events:none;
  transition:opacity .2s ease .05s,transform .2s ease,background .15s;
}
html.sb-open .sb-caret{opacity:1;pointer-events:auto}
.sb-caret:hover{background:rgba(255,255,255,.1);color:#fff}
.sb-caret svg.icon{width:14px;height:14px}
.sb-group.open .sb-caret{transform:rotate(180deg)}
.sb-item.active .sb-caret{color:rgba(255,255,255,.8)}
.sb-item.active .sb-caret:hover{background:rgba(255,255,255,.18);color:#fff}

/* Підпункти */
.sb-sub{
  max-height:0;overflow:hidden;transition:max-height .25s ease;
  display:flex;flex-direction:column;gap:2px;
}
.sb-group.open .sb-sub{max-height:320px}
/* у згорнутому сайдбарі підпункти недоступні */
html:not(.sb-open) .sb-sub{max-height:0!important}
.sb-sub a{
  display:flex;align-items:center;gap:10px;
  height:42px;flex-shrink:0;padding:0 14px 0 46px;border-radius:10px;
  font-size:13.5px;color:var(--sidebar-muted);
  transition:background .15s,color .15s;white-space:nowrap;
}
.sb-sub a:hover{background:rgba(255,255,255,.06);color:#fff}
.sb-sub a.active{color:#fff;background:rgba(92,182,240,.14)}
.sb-sub a::before{content:"";width:4px;height:4px;border-radius:50%;background:var(--sidebar-muted);flex-shrink:0}

/* Роздільник під сповіщеннями */
.sb-divider{height:1px;background:rgba(255,255,255,.18);margin:10px 6px;flex-shrink:0}

/* Низ сайдбара */
.sb-bottom{padding:10px 12px 14px;border-top:1px solid rgba(255,255,255,.07);display:flex;flex-direction:column;gap:2px;flex-shrink:0}

/* Кнопка-стрілки »/«: розгорнути/запінити сайдбар (над карткою профілю).
   У згорнутому стані підпис повністю прибираємо з потоку —
   інакше flex:1 label зміщує стрілку вліво (має бути по центру). */
.sb-collapse{
  display:flex;align-items:center;justify-content:center;gap:11px;
  padding:8px;border-radius:10px;border:0;background:none;
  color:rgba(255,255,255,.55);cursor:pointer;width:100%;
  transition:background .15s,color .15s;
}
html.sb-open .sb-collapse{justify-content:flex-start}
.sb-collapse:hover{background:rgba(255,255,255,.07);color:#fff}
.sb-collapse svg.icon{
  width:17px;height:17px;flex-shrink:0;
  transition:transform .25s ease;
}
html.sb-open .sb-collapse svg.icon{transform:rotate(180deg);margin-left:3px}
.sb-collapse .sb-label{display:none;flex:1;text-align:left;font-size:12.5px}
html.sb-open .sb-collapse .sb-label{display:block}

/* Перемикач ролі в меню профілю (демо) */
.sb-um-roles{
  margin:6px 4px 4px;padding:9px 8px 8px;
  border-top:1px solid rgba(255,255,255,.08);
}
.sb-um-roles-t{
  font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;
  color:rgba(255,255,255,.4);margin:0 4px 7px;
}
.sb-um-roles-row{display:grid;grid-template-columns:repeat(3,1fr);gap:5px}
.sb-um-roles-row button{
  border:1px solid rgba(255,255,255,.14);background:none;border-radius:8px;
  padding:6px 4px;font-size:11.5px;font-family:inherit;
  color:var(--sidebar-text);cursor:pointer;
  transition:background .15s,color .15s,border-color .15s;
}
.sb-um-roles-row button:hover{background:rgba(255,255,255,.08);color:#fff}
.sb-um-roles-row button.on{
  background:var(--grad);border-color:transparent;color:#fff;font-weight:700;
}
.sb-user{
  display:flex;align-items:center;gap:11px;
  padding:9px 8px;border-radius:12px;margin-top:6px;
  transition:background .15s;
}
.sb-user:hover{background:rgba(255,255,255,.06)}
.sb-user .avatar{width:38px;height:38px;background:rgba(255,255,255,.1);color:var(--sidebar-muted)}
/* У згорнутому стані мету і шеврон прибираємо з потоку повністю,
   щоб аватар стояв рівно по центру вузької панелі */
.sb-user{justify-content:center}
html.sb-open .sb-user{justify-content:flex-start}
.sb-user-meta{flex:1;min-width:0;opacity:0;transition:opacity .2s ease .05s;display:none}
html.sb-open .sb-user-meta{opacity:1;display:block}
.sb-user-name{font-size:13.5px;font-weight:600;color:#fff;white-space:nowrap}
.sb-user-mail{font-size:11.5px;color:var(--sidebar-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-logout{
  width:30px;height:30px;border-radius:8px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;
  color:var(--sidebar-muted);
  opacity:0;pointer-events:none;
  transition:opacity .2s ease .05s,background .15s,color .15s;
}
html.sb-open .sb-logout{opacity:1;pointer-events:auto}
.sb-logout:hover{background:rgba(255,255,255,.1);color:#fff}
.sb-logout svg.icon{width:16px;height:16px}

/* Тултип згорнутого стану (позиціонується через JS, .sb-tip у app.js) */
.sb-tip{
  position:fixed;left:calc(var(--sb-collapsed) + 12px);
  background:var(--sidebar-bg);color:#fff;
  font-size:12.5px;font-weight:600;white-space:nowrap;
  padding:7px 12px;border-radius:9px;
  border:1px solid rgba(255,255,255,.14);
  box-shadow:0 8px 24px rgba(14,17,48,.35);
  z-index:250;pointer-events:none;
  opacity:0;transform:translateX(-4px);
  transition:opacity .15s ease,transform .15s ease;
}
.sb-tip.show{opacity:1;transform:none}
.sb-tip::before{
  content:"";position:absolute;left:-4px;top:50%;
  width:8px;height:8px;background:var(--sidebar-bg);
  border-left:1px solid rgba(255,255,255,.14);
  border-bottom:1px solid rgba(255,255,255,.14);
  transform:translateY(-50%) rotate(45deg);
}

/* ============================================================
   ЛЕЙАУТ КОНТЕНТУ
   ============================================================ */
.main{
  margin-left:var(--sb-collapsed);
  transition:margin-left .25s ease;
  padding:28px 32px 56px;
}
html.sb-open .main{margin-left:var(--sb-expanded)}
.layout{
  width:100%;
  display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:24px;
  align-items:start;
}
.layout.single{grid-template-columns:minmax(0,1fr)}
.content-col{display:flex;flex-direction:column;gap:26px;min-width:0}
.side-col{display:flex;flex-direction:column;gap:18px}

/* Верхній бар сторінки */
.topbar{
  grid-column:1/-1;
  display:flex;align-items:center;justify-content:space-between;gap:16px;
}
.topbar-left{display:flex;align-items:center;gap:14px;flex-wrap:wrap}
.greeting{font-family:var(--font-head);font-size:20px;font-weight:700;letter-spacing:-0.02em}
.topbar-right{display:flex;align-items:center;gap:12px}
.bell-btn{
  position:relative;width:40px;height:40px;border-radius:12px;
  background:var(--card);border:1px solid var(--border);
  display:flex;align-items:center;justify-content:center;color:var(--muted);
  transition:box-shadow .15s,color .15s,transform .15s;
}
.bell-btn:hover{box-shadow:var(--shadow);color:var(--text);transform:translateY(-1px)}
.bell-dot{
  position:absolute;top:9px;right:10px;width:7px;height:7px;border-radius:50%;
  background:var(--accent);border:1.5px solid var(--card);
}

/* Заголовки секцій */
.section-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}
.section-link{font-size:13px;font-weight:600;color:var(--accent);transition:opacity .15s}
.section-link:hover{opacity:.75}

/* ============================================================
   КАРТКИ / ВІДЖЕТИ
   ============================================================ */
.card{
  background:var(--card);border:1px solid var(--border);
  border-radius:var(--r-card);box-shadow:var(--shadow);
}
.card.pad{padding:20px 22px}
.card-hover{transition:transform .15s,box-shadow .15s}
.card-hover:hover{transform:translateY(-2px);box-shadow:var(--shadow-hover)}

.widget{padding:18px 20px}
.widget h3{font-size:15px;margin-bottom:12px}

/* Профіль-блок правої колонки (компактний, за v1-hub).
   На сторінках із деревом — обʼєднаний з віджетом «Моє дерево»
   в один контейнер .card.widget через роздільник .pw-divider. */
.profile-card{display:flex;align-items:center;gap:12px}
.card.profile-card{padding:14px 18px} /* якщо стоїть окремою карткою */
.p-ava{
  width:44px;height:44px;border-radius:50%;flex-shrink:0;
  background:var(--ph);display:flex;align-items:center;justify-content:center;color:var(--ph-icon);
}
.p-meta{flex:1;min-width:0}
.p-name{
  font-family:var(--font-head);font-weight:700;font-size:12.5px;line-height:1.3;
  text-transform:uppercase;letter-spacing:.3px;margin-bottom:2px;
}
.p-link{font-size:11.5px;color:var(--muted);text-decoration:underline;text-underline-offset:3px;white-space:nowrap}
.p-link:hover{color:var(--accent)}
.q-box{
  background:var(--sidebar-bg);color:#fff;border-radius:13px;
  padding:8px 12px;flex-shrink:0;
  display:flex;flex-direction:column;align-items:center;line-height:1.1;
}
.q-box-top{display:flex;align-items:center;gap:6px}
.q-box-num{font-family:var(--font-head);font-size:17px;font-weight:800}
/* Монетка к'юшки — офіційний арт. Літера «Q» в розмітці лишилась
   як запасний варіант, якщо арт не завантажиться; коли він є — схована. */
.q-coin{
  width:17px;height:17px;flex-shrink:0;
  background:url(img/q-shka.png) center/contain no-repeat;
  font-size:0;color:transparent;
}
.q-box-label{font-size:10px;color:#9BA6CC;margin-top:2px}

/* Роздільник між профілем і деревом (кружечок-шеврон по центру) */
.pw-divider{position:relative;border-top:1px solid var(--border);margin:16px -20px 16px}
.pw-divider i{
  position:absolute;left:50%;top:-11px;transform:translateX(-50%);
  width:22px;height:22px;border-radius:50%;
  background:var(--card);border:1px solid var(--border);
  display:flex;align-items:center;justify-content:center;color:var(--muted);
}
.pw-divider i svg.icon{width:12px;height:12px}

/* Індикатор стадій дерева: 4 крапки + підпис */
.stage-dots{display:flex;gap:6px;justify-content:center;margin:2px 0 10px}
.stage-dots i{width:8px;height:8px;border-radius:50%;background:#E2E8F0}
.stage-dots i.on{background:var(--success)}
.tree-caption{font-size:12.5px;color:var(--muted);text-align:center;margin-bottom:12px}

/* Рядок плоду у віджеті дерева (повна реалізація плодів — на tree.html) */
.fruit-line{
  display:inline-flex;align-items:center;gap:6px;margin-top:3px;
  font-size:12.5px;color:var(--muted);
}
.fruit-line svg{flex-shrink:0}
.fruit-line b{color:var(--text);font-weight:600}

/* Віджет «Моє дерево» — компактний tree-of-life (стиль tree.html /
   tools/tree-stages.html, стадія 2): темний стовбур-фігура, листя-краплі,
   дзеркальне коріння, 1 золотий плід.
   Спільний для dashboard.html / course.html / academy.html — у сторінках не дублювати. */
.tree-widget .tree-svg{display:block;width:100%;height:auto;margin:2px auto 10px}
.tree-widget img.tree-svg{max-width:250px}
.dw-lf{animation:dwFlutter 4.2s ease-in-out infinite;transform-box:fill-box;transform-origin:50% 100%}
@keyframes dwFlutter{0%,100%{transform:rotate(0deg)}50%{transform:rotate(2.4deg)}}
.dw-glow{animation:dwTwinkle 3.2s ease-in-out infinite}
@keyframes dwTwinkle{0%,100%{opacity:.15}50%{opacity:.55}}
@media (prefers-reduced-motion: reduce){.dw-lf,.dw-glow{animation:none}}

/* ============================================================
   КНОПКИ
   ============================================================ */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  font-family:var(--font-head);font-weight:700;font-size:13.5px;
  padding:10px 18px;border-radius:var(--r-btn);
  transition:transform .15s,box-shadow .15s,background .15s,color .15s,border-color .15s;
  white-space:nowrap;
}
.btn svg.icon{width:16px;height:16px}
.btn-primary{background:var(--grad);color:#fff}
.btn-primary:hover{transform:translateY(-2px);box-shadow:0 8px 20px rgba(9,143,227,.35)}
.btn-white{background:#fff;color:var(--accent)}
.btn-white:hover{transform:translateY(-2px);box-shadow:0 10px 24px rgba(14,17,48,.2)}
.btn-outline{border:1px solid rgba(9,143,227,.35);color:var(--accent);background:transparent}
.btn-outline:hover{background:var(--accent);color:#fff}
.btn-ghost{color:var(--muted);background:transparent}
.btn-ghost:hover{background:rgba(9,143,227,.08);color:var(--accent)}
.btn-danger{background:rgba(239,68,68,.1);color:#EF4444}
.btn-danger:hover{background:#EF4444;color:#fff}
.btn-sm{padding:7px 13px;font-size:12.5px;border-radius:9px}
.btn-sm svg.icon{width:14px;height:14px}
.btn-lg{padding:13px 24px;font-size:14.5px}
.btn-block{display:flex;width:100%}
.btn[disabled],.btn.disabled{opacity:.5;pointer-events:none}
.btn-icon{
  width:36px;height:36px;padding:0;border-radius:10px;
  display:inline-flex;align-items:center;justify-content:center;
  color:var(--muted);transition:background .15s,color .15s;
}
.btn-icon:hover{background:rgba(9,143,227,.1);color:var(--accent)}

/* ============================================================
   ЧИПИ / БЕЙДЖІ
   ============================================================ */
.chip{
  display:inline-flex;align-items:center;gap:6px;
  padding:4px 12px;border-radius:var(--r-chip);
  font-size:11px;font-weight:700;letter-spacing:.4px;text-transform:uppercase;
  background:var(--accent-soft);color:var(--accent);
}
.chip svg.icon{width:13px;height:13px}
.chip-success{background:var(--success-soft);color:#0E9F6E}
.chip-warning{background:var(--warning-soft);color:#B45309}
.chip-muted{background:#EAEDF5;color:var(--muted)}
.chip-navy{background:var(--sidebar-bg);color:#fff}
.chip-lg{padding:6px 14px;font-size:12px}

.badge{
  display:inline-flex;align-items:center;justify-content:center;
  min-width:20px;height:20px;padding:0 6px;border-radius:var(--r-chip);
  font-size:11px;font-weight:700;
  background:var(--accent);color:#fff;
}
.badge-success{background:var(--success)}
.badge-warning{background:var(--warning);color:var(--text)}

/* ============================================================
   ПРОГРЕС
   ============================================================ */
.progress-track{
  height:8px;border-radius:var(--r-chip);background:#EAEDF5;overflow:hidden;margin-bottom:6px;
}
.progress-fill{height:100%;border-radius:var(--r-chip);background:var(--grad);transition:width .4s ease}
.progress-fill.green{background:linear-gradient(135deg,#34D399,#6EE7B7)}
.progress-label{font-size:12.5px;color:var(--muted)}
.progress-label b{color:var(--text);font-weight:600}
.progress-track.slim{height:5px}

/* ============================================================
   ТАБИ
   Розмітка: <div data-tabs> <div class="tabs"> <button class="tab-btn active" data-tab="pane1">…
   Панелі: <div class="tab-pane active" id="pane1">…
   ============================================================ */
.tabs{
  display:inline-flex;gap:4px;background:#EAEDF5;
  padding:4px;border-radius:12px;
}
.tab-btn{
  padding:8px 16px;border-radius:9px;
  font-size:13px;font-weight:600;color:var(--muted);
  transition:background .15s,color .15s,box-shadow .15s;
}
.tab-btn:hover{color:var(--text)}
.tab-btn.active{background:var(--card);color:var(--text);box-shadow:0 2px 8px rgba(14,17,48,.08)}
.tab-pane{display:none}
.tab-pane.active{display:block}

/* Таби-підкреслення (альтернативний вигляд) */
.tabs-line{display:flex;gap:22px;border-bottom:1px solid var(--border)}
.tabs-line .tab-btn{
  padding:10px 2px;border-radius:0;background:none;box-shadow:none;
  border-bottom:2px solid transparent;margin-bottom:-1px;
}
.tabs-line .tab-btn.active{background:none;color:var(--accent);border-bottom-color:var(--accent);box-shadow:none}

/* ============================================================
   МОДАЛКА
   Розмітка: <div class="modal-overlay" id="myModal"> <div class="modal">…
   Відкриття: openModal('myModal') або data-modal-open="myModal"
   Закриття: closeModal(), data-modal-close, клік по фону, Esc
   ============================================================ */
.modal-overlay{
  position:fixed;inset:0;z-index:300;
  background:rgba(14,17,48,.5);
  display:flex;align-items:center;justify-content:center;
  padding:20px;
  opacity:0;pointer-events:none;
  transition:opacity .2s ease;
}
.modal-overlay.open{opacity:1;pointer-events:auto}
.modal{
  background:var(--card);border-radius:var(--r-card-lg);
  width:100%;max-width:520px;max-height:85vh;overflow-y:auto;
  padding:24px;
  box-shadow:0 24px 64px rgba(14,17,48,.3);
  transform:translateY(14px) scale(.97);
  transition:transform .2s ease;
}
.modal-overlay.open .modal{transform:none}
.modal-head{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:14px}
.modal-head h3{font-size:18px}
.modal-close{
  width:32px;height:32px;border-radius:9px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;color:var(--muted);
  transition:background .15s,color .15s;
}
.modal-close:hover{background:rgba(15,23,42,.06);color:var(--text)}
.modal-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:20px;flex-wrap:wrap}
body.modal-open{overflow:hidden}

/* ============================================================
   ТОСТ
   Виклик: showToast('Текст')
   ============================================================ */
.toast-stack{
  position:fixed;bottom:26px;left:50%;transform:translateX(-50%);
  display:flex;flex-direction:column;align-items:center;gap:8px;
  z-index:400;pointer-events:none;
}
.toast{
  background:var(--sidebar-bg);color:#fff;
  font-size:13.5px;font-weight:500;
  padding:11px 20px;border-radius:12px;
  box-shadow:0 12px 32px rgba(14,17,48,.35);
  opacity:0;transform:translateY(10px);
  transition:opacity .25s ease,transform .25s ease;
  max-width:min(420px,calc(100vw - 40px));text-align:center;
}
.toast.show{opacity:1;transform:none}

/* ============================================================
   ТАБЛИЦІ
   ============================================================ */
.table-wrap{overflow-x:auto}
.table{width:100%;border-collapse:collapse;font-size:13.5px}
.table th{
  text-align:left;padding:11px 16px;
  font-size:11px;text-transform:uppercase;letter-spacing:1px;font-weight:600;color:var(--muted);
  border-bottom:1px solid var(--border);white-space:nowrap;
}
.table td{padding:12px 16px;border-bottom:1px solid var(--border);vertical-align:middle}
.table tr:last-child td{border-bottom:none}
.table tbody tr{transition:background .15s}
.table tbody tr:hover{background:rgba(9,143,227,.04)}

/* ============================================================
   ФОРМИ
   ============================================================ */
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field-label{font-size:12.5px;font-weight:600}
.field-hint{font-size:11.5px;color:var(--muted)}
.input,.select,.textarea{
  width:100%;font-family:var(--font-body);font-size:13.5px;color:var(--text);
  background:var(--card);border:1px solid rgba(15,23,42,.14);
  border-radius:10px;padding:10px 13px;outline:none;
  transition:border-color .15s,box-shadow .15s;
}
.input::placeholder,.textarea::placeholder{color:#9AA5C0}
.input:focus,.select:focus,.textarea:focus{
  border-color:var(--accent);
  box-shadow:0 0 0 3px rgba(9,143,227,.14);
}
.textarea{min-height:88px;resize:vertical}
.select{
  appearance:none;cursor:pointer;
  background-image:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%2364748B' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right 12px center;
  padding-right:38px;
}

/* Чекбокс: <label class="check"><input type="checkbox"><span class="box"><svg class="icon"><use href="#i-check"/></svg></span> Текст</label> */
.check{display:flex;align-items:center;gap:10px;cursor:pointer;font-size:13.5px;user-select:none}
.check input{position:absolute;opacity:0;width:0;height:0}
.check .box{
  width:20px;height:20px;border-radius:6px;flex-shrink:0;
  border:2px solid #CBD3E3;background:var(--card);
  display:flex;align-items:center;justify-content:center;color:#fff;
  transition:background .15s,border-color .15s;
}
.check .box svg.icon{width:12px;height:12px;stroke-width:3;opacity:0;transition:opacity .15s}
.check input:checked + .box{background:var(--grad);border-color:transparent}
.check input:checked + .box svg.icon{opacity:1}
.check:hover .box{border-color:var(--accent-2)}

/* Радіо: <label class="check radio"><input type="radio" name="…"><span class="box"></span> Текст</label> */
.check.radio .box{border-radius:50%;position:relative}
.check.radio .box::after{
  content:"";width:8px;height:8px;border-radius:50%;background:#fff;
  opacity:0;transition:opacity .15s;
}
.check.radio input:checked + .box::after{opacity:1}

/* ============================================================
   ЗАБЛОКОВАНИЙ КОНТЕНТ
   Завжди: іконка замка + причина («Відкриється з Тижнем 3»)
   ============================================================ */
.locked{opacity:.55;position:relative}
.locked-icon{
  width:42px;height:42px;border-radius:12px;flex-shrink:0;
  background:#EAEDF5;color:var(--muted);
  display:flex;align-items:center;justify-content:center;
}
.lock-note{
  display:inline-flex;align-items:center;gap:6px;
  font-size:12.5px;color:var(--muted);font-weight:500;
}
.lock-note svg.icon{width:14px;height:14px}

/* ============================================================
   СТРІЧКА / СПИСКОВІ РЯДКИ
   ============================================================ */
.feed{padding:6px 0}
.feed-row{
  display:flex;align-items:center;gap:13px;
  padding:13px 20px;transition:background .15s;
}
.feed-row:hover{background:rgba(9,143,227,.04)}
.feed-row + .feed-row{border-top:1px solid var(--border)}
.feed-text{flex:1;min-width:0;font-size:13.5px}
.feed-text b{font-weight:600}
.feed-time{font-size:12px;color:var(--muted);flex-shrink:0}
.feed-reacts{display:flex;gap:4px;flex-shrink:0}
.react-btn{
  width:30px;height:30px;border-radius:8px;
  display:flex;align-items:center;justify-content:center;
  color:var(--muted);transition:background .15s,color .15s,transform .15s;
}
.react-btn:hover{background:rgba(9,143,227,.1);color:var(--accent);transform:scale(1.1)}
.react-btn.on{color:var(--accent)}
.react-btn svg.icon{width:16px;height:16px}

/* Пости спільноти (картки, за v1-hub) */
.posts{display:flex;flex-direction:column;gap:14px}
.post{padding:18px 20px;display:flex;flex-direction:column;gap:12px}
.post-head{display:flex;align-items:center;gap:12px}
.post-who{flex:1;min-width:0}
.post-who b{font-size:14px}
.post-badge{
  display:inline-block;margin-left:6px;padding:2px 9px;border-radius:var(--r-chip);
  background:var(--accent-soft);color:var(--accent);
  font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;vertical-align:1px;
}
.post-time{font-size:11.5px;color:var(--muted);margin-top:1px}
.post-text{font-size:13.5px;line-height:1.6}
.post-img{aspect-ratio:16/6;border-radius:12px}
.post-img-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.post-img-grid .post-img{aspect-ratio:16/9}
.post-acts{display:flex;gap:8px}
.react-btn2{
  display:inline-flex;align-items:center;gap:7px;
  padding:7px 13px;border-radius:9px;border:1px solid var(--border);
  font-size:12.5px;font-weight:500;color:var(--muted);
  transition:border-color .15s,color .15s,background .15s;
}
.react-btn2:hover,.react-btn2.on{border-color:var(--accent);color:var(--accent);background:rgba(9,143,227,.05)}
.react-btn2 svg.icon{width:15px;height:15px}

/* Рейтинг */
.rating-row{
  display:flex;align-items:center;gap:11px;
  padding:8px 9px;border-radius:11px;transition:background .15s;
}
.rating-row:hover{background:rgba(9,143,227,.05)}
.rating-pos{width:20px;font-size:12px;font-weight:700;color:var(--muted);text-align:center;flex-shrink:0}
.rating-name{flex:1;font-size:13.5px;font-weight:500;min-width:0}
.rating-score{font-family:var(--font-head);font-size:14px;font-weight:800}
.rating-row.me{background:rgba(9,143,227,.1);border:1px solid rgba(9,143,227,.25)}
.rating-row.me .rating-pos,.rating-row.me .rating-score{color:var(--accent)}
.rating-row.me .rating-name{font-weight:600}

/* Події / чек-рядки */
.event-row{
  display:flex;align-items:center;gap:12px;width:100%;text-align:left;
  padding:10px 9px;border-radius:11px;transition:background .15s;
}
.event-row:hover{background:rgba(9,143,227,.05)}
.event-check{
  width:22px;height:22px;border-radius:7px;flex-shrink:0;
  border:2px solid #CBD3E3;
  display:flex;align-items:center;justify-content:center;
  color:#fff;transition:background .15s,border-color .15s;
}
.event-check svg.icon{width:13px;height:13px;opacity:0;transition:opacity .15s}
.event-row.done .event-check{background:var(--success);border-color:var(--success)}
.event-row.done .event-check svg.icon{opacity:1}
.event-row.done .event-title{text-decoration:line-through;color:var(--muted)}
.event-title{flex:1;font-size:13.5px;font-weight:500;min-width:0}
.event-when{font-size:12px;color:var(--muted);flex-shrink:0}

/* ============================================================
   КАЛЕНДАР
   ============================================================ */
.cal-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}
.cal-title{font-family:var(--font-head);font-weight:700;font-size:14px}
.cal-nav{display:flex;gap:4px}
.cal-nav button{width:26px;height:26px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--muted);transition:background .15s,color .15s}
.cal-nav button:hover{background:rgba(9,143,227,.08);color:var(--accent)}
.cal-nav svg.icon{width:14px;height:14px}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px;text-align:center}
.cal-dow{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:var(--muted);padding:4px 0}
.cal-day{position:relative;font-size:12px;padding:6px 0;border-radius:8px;transition:background .15s;cursor:default}
.cal-day:hover{background:rgba(9,143,227,.07)}
.cal-day.out{visibility:hidden}
.cal-day.today{background:var(--grad);color:#fff;font-weight:700}
.cal-day.ev::after{
  content:'';position:absolute;left:50%;transform:translateX(-50%);bottom:2px;
  width:4px;height:4px;border-radius:50%;background:var(--accent);
}
.cal-day.ev.evg::after{background:var(--success)}
.cal-day.today.ev::after{background:#fff}
.cal-legend{display:flex;flex-wrap:wrap;gap:6px 14px;margin-top:10px;font-size:11.5px;color:var(--muted)}
.cal-legend span{display:flex;align-items:center;gap:5px}
.cal-legend i{width:6px;height:6px;border-radius:50%;display:inline-block}

/* Сегментація календаря за курсами (рішення 11.07):
   чипи-фільтри над сіткою + третій тип події «Загальні» (золота крапка).
   Фільтр ховає крапки не свого сегмента класом .ev-off (JS сторінки). */
.cal-filters{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:10px}
.cal-filter{
  padding:4px 11px;border-radius:var(--r-chip);
  font-size:11px;font-weight:700;letter-spacing:.3px;
  background:#EAEDF5;color:var(--muted);
  transition:background .15s,color .15s;
}
.cal-filter:hover{color:var(--text)}
.cal-filter.on{background:var(--grad);color:#fff}
.cal-day.ev.evw::after{background:var(--warning)}
.cal-day.ev-off::after{display:none}

/* ============================================================
   ДОПОМІЖНЕ
   ============================================================ */
.row{display:flex;align-items:center;gap:12px}
.row.between{justify-content:space-between}
.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:18px}
.grid-3{display:grid;grid-template-columns:1fr 1fr 1fr;gap:18px}
.divider{height:1px;background:var(--border);margin:14px 0}
.stack{display:flex;flex-direction:column;gap:14px}

/* Hero-банер (градієнтний блок) */
.hero{
  position:relative;overflow:hidden;
  background:var(--grad);
  border-radius:var(--r-card-lg);
  padding:26px 30px;color:#fff;
  box-shadow:0 12px 32px rgba(9,143,227,.25);
}
.hero h2{color:#fff;font-size:26px;font-weight:800}
.hero .muted{color:rgba(255,255,255,.85)}

/* ============================================================
   БАНЕР РОЗДІЛУ (на кожній сторінці учня, крім головної)
   Фото-заглушка на всю ширину контентної зони (~200px, менше за
   банер школи 340px) + назва розділу і рядок «де я» на
   напівпрозорій підкладці зліва знизу (щоб читалось на фото).
   ============================================================ */
.page-banner{
  position:relative;overflow:hidden;
  height:200px;border-radius:var(--r-card-lg);
  background:var(--ph);border:1.5px dashed #C7CEDD;
  display:flex;align-items:center;justify-content:center;
  color:var(--ph-icon);
}
.layout > .page-banner{grid-column:1/-1}
/* Фото-банер (20.07): вшитий у зображення текст, заглушка і рамка зникають */
.page-banner.has-img{border:none;background:none}
.page-banner .banner-img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;border-radius:inherit;display:block;
}
.page-banner > svg.icon{width:32px;height:32px}
.pb-overlay{
  position:absolute;left:18px;bottom:16px;max-width:72%;
  background:rgba(255,255,255,.85);backdrop-filter:blur(4px);
  border-radius:13px;padding:10px 16px 11px;
  box-shadow:0 6px 18px rgba(14,17,48,.08);
}
.pb-title{font-family:var(--font-head);font-weight:800;font-size:19px;letter-spacing:-0.02em;line-height:1.25;color:var(--text)}
.pb-sub{font-size:12.5px;color:var(--muted);margin-top:2px}
.pb-sub a{color:var(--muted);text-decoration:underline;text-underline-offset:3px}
.pb-sub a:hover{color:var(--accent)}
.pb-right{position:absolute;top:14px;right:16px}
@media (max-width:760px){
  .page-banner{height:150px}
  .pb-overlay{left:12px;bottom:12px;max-width:85%;padding:8px 13px 9px}
  .pb-title{font-size:16px}
  .pb-right{display:none}
}

/* Банер-заглушка школи (під згенерований банер, за v1-hub) */
.banner-ph{
  position:relative;overflow:hidden;
  height:340px;border-radius:var(--r-card-lg);
  background:var(--ph);border:1.5px dashed #C7CEDD;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;
  color:var(--ph-icon);
}
.banner-ph svg.icon{width:36px;height:36px}
.banner-note{font-size:12.5px;color:var(--ph-icon);letter-spacing:.3px}

/* ============================================================
   КАРУСЕЛЬ КУРСІВ (academy.html · рішення 11.07: куплені курси
   чергуються стрілками). Слайд = 100% ширини, гортання — transform.
   ============================================================ */
.carousel{position:relative;overflow:hidden;border-radius:var(--r-card)}
.carousel-track{display:flex;transition:transform .35s cubic-bezier(.4,0,.2,1)}
.carousel-slide{min-width:100%;flex-shrink:0}
.carousel-nav{display:flex;gap:6px}
.carousel-btn{
  width:32px;height:32px;border-radius:10px;
  background:var(--card);border:1px solid var(--border);
  display:flex;align-items:center;justify-content:center;color:var(--muted);
  transition:color .15s,box-shadow .15s,transform .15s;
}
.carousel-btn:hover{color:var(--accent);box-shadow:var(--shadow);transform:translateY(-1px)}
.carousel-btn svg.icon{width:15px;height:15px}
.carousel-dots{display:flex;gap:6px;justify-content:center;margin-top:12px}
.carousel-dots i{width:7px;height:7px;border-radius:50%;background:#E2E8F0;transition:background .2s,transform .2s}
.carousel-dots i.on{background:var(--accent);transform:scale(1.25)}

/* ============================================================
   АКТИВНОСТІ ПЛАТФОРМИ (dashboard.html · головна = про спільноту)
   3 картки подій із фото-заглушками + кнопка «Долучитись»
   ============================================================ */
.activity-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.activity-card{display:flex;flex-direction:column;overflow:hidden;padding:0}
.act-img{height:104px;flex-shrink:0}
.act-body{display:flex;flex-direction:column;align-items:flex-start;gap:8px;padding:14px 16px 16px;flex:1}
.act-body h4{font-size:14px;line-height:1.35}
.act-when{
  display:inline-flex;align-items:center;gap:6px;
  font-size:12px;color:var(--muted);font-weight:500;
}
.act-when svg.icon{width:13px;height:13px}
.act-body .btn{margin-top:auto}
@media (max-width:900px){
  .activity-grid{grid-template-columns:1fr}
  .activity-card{flex-direction:row;align-items:stretch}
  .act-img{width:110px;height:auto}
}

/* ============================================================
   МОБІЛЬНИЙ ТАБ-БАР (<760px)
   ============================================================ */
.tabbar{
  display:none;
  position:fixed;left:0;right:0;bottom:0;z-index:100;
  background:var(--card);border-top:1px solid var(--border);
  padding:8px 10px calc(10px + env(safe-area-inset-bottom));
  box-shadow:0 -8px 24px rgba(14,17,48,.08);
}
.tabbar-inner{display:flex;justify-content:space-around;max-width:520px;margin:0 auto}
.tab-item{
  display:flex;flex-direction:column;align-items:center;gap:3px;
  color:var(--muted);font-size:10.5px;font-weight:600;
  padding:4px 10px;border-radius:10px;transition:color .15s;
}
.tab-item:hover{color:var(--text)}
.tab-item.active{color:var(--accent)}
.tab-item svg.icon{width:22px;height:22px}

/* ============================================================
   АДАПТИВ
   ============================================================ */
@media (max-width:1200px){
  .layout{grid-template-columns:1fr}
  .side-col{
    display:grid;grid-template-columns:1fr 1fr;gap:18px;
    align-items:stretch;
  }
  .side-col > .profile-card{grid-column:1/-1}
}
@media (max-width:900px){
  .grid-3{grid-template-columns:1fr 1fr}
}
@media (max-width:760px){
  .sidebar{display:none}
  .sb-tip{display:none}
  .main{margin-left:0;padding:20px 16px 96px}
  html.sb-open .main{margin-left:0}
  .tabbar{display:block}
  .side-col{grid-template-columns:1fr}
  .greeting{font-size:17px}
  h1{font-size:24px}
  .hero{padding:22px 20px}
  .grid-2,.grid-3{grid-template-columns:1fr}
  .feed-time{display:none}
  .modal{padding:20px}
}

/* ============================================================
   ОНБОРДИНГ-ЕКСКУРСІЯ (assets/onboarding.js · лише dashboard.html)
   Затемнення — через box-shadow 0 0 0 9999px на .tour-spot:
   не залежить від stacking context'ів сторінки.
   ============================================================ */
.tour-root{position:fixed;inset:0;z-index:480;transition:opacity .25s ease}
.tour-root.closing{opacity:0;pointer-events:none}
.tour-root .hide{display:none!important}

/* Повне затемнення для центральних кроків (перший/останній) */
.tour-dim{
  position:absolute;inset:0;background:rgba(14,17,48,.55);
  opacity:0;transition:opacity .25s ease;pointer-events:none;
}
.tour-dim.show{opacity:1}

/* Спотлайт: біла рамка 2px + сяйво акценту + виріз у затемненні */
.tour-spot{
  position:absolute;visibility:hidden;pointer-events:none;
  border:2px solid #fff;border-radius:14px;
  box-shadow:
    0 0 0 9999px rgba(14,17,48,.55),
    0 0 0 5px rgba(9,143,227,.35),
    0 0 26px rgba(92,182,240,.55);
  transition:
    top .35s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,1),
    width .35s cubic-bezier(.4,0,.2,1),height .35s cubic-bezier(.4,0,.2,1),
    border-radius .35s ease;
}
.tour-spot.show{visibility:visible}

/* Пунктирна лінія-конектор картка → ціль */
.tour-svg{
  position:absolute;inset:0;width:100%;height:100%;
  pointer-events:none;opacity:0;transition:opacity .2s ease;
}
.tour-svg.show{opacity:1}
.tour-line{stroke:rgba(255,255,255,.8);stroke-width:2;stroke-dasharray:5 6;stroke-linecap:round}

/* Картка-підказка */
.tour-card{
  position:absolute;width:380px;max-width:calc(100vw - 32px);
  background:#fff;border-radius:16px;padding:24px;
  box-shadow:0 24px 64px rgba(14,17,48,.35);
  transition:top .35s cubic-bezier(.4,0,.2,1),left .35s cubic-bezier(.4,0,.2,1);
}
/* Центрові кроки (привітання, вибір персонажа, форма) — ширші,
   щоб три картки персонажів і кнопки не тиснулись і нічого не вилазило */
.tour-card.center{
  left:50%!important;top:50%!important;
  transform:translate(-50%,-50%);transition:none;
  width:560px;
}
.tour-card.pop{animation:tourPop .28s ease}
@keyframes tourPop{from{opacity:0}to{opacity:1}}

/* Провідник: аватар-заглушка 40px + ім'я */
.tour-guide{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.tour-ava{
  width:40px;height:40px;border-radius:50%;flex-shrink:0;
  background:var(--ph);color:var(--ph-icon);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 0 0 2px var(--accent-soft);
}
.tour-ava svg.icon{width:18px;height:18px}
.tour-ava img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}
.tour-guide-name{display:flex;flex-direction:column;line-height:1.3;font-size:12px;color:var(--muted)}
.tour-guide-name b{font-family:var(--font-head);font-size:13.5px;color:var(--text)}

/* Онбординг v2: вибір AI-персонажа */
.tour-picks{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:14px 0 6px}
.tour-pick{
  border:2px solid var(--border);border-radius:14px;padding:14px 8px 11px;
  background:#fff;cursor:pointer;text-align:center;transition:.15s;
  font-family:inherit;
}
.tour-pick:hover{border-color:#B9D9F5;transform:translateY(-1px)}
.tour-pick.on{
  border-color:var(--accent);background:#F0F7FD;
  box-shadow:0 0 0 3px rgba(9,143,227,.12);
}
.tour-pick img{width:62px;height:62px;border-radius:50%;object-fit:cover;display:block;margin:0 auto 8px}
.tour-pick b{display:block;font-size:14px;color:var(--text)}
.tour-pick span{display:block;font-size:11px;color:var(--muted);line-height:1.3;margin-top:2px}

/* Онбординг v2: міні-форма профілю */
.tour-form{display:flex;flex-direction:column;gap:10px;margin:12px 0 6px}
.tour-form .tf-photo{display:flex;align-items:center;gap:12px}
.tf-ava{
  width:52px;height:52px;border-radius:50%;flex-shrink:0;overflow:hidden;
  background:var(--bg);border:1px solid var(--border);color:var(--ph-icon);
  display:flex;align-items:center;justify-content:center;
}
.tf-ava svg.icon{width:20px;height:20px}
.tf-ava img{width:100%;height:100%;object-fit:cover;display:block}
.tour-form .tf-row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.tour-form .field{margin:0}
.tour-form .input{font-size:13.5px;padding:9px 12px}
.tour-form .field-label{font-size:11.5px;margin-bottom:4px}

/* Вузькі екрани: картки персонажів і поля форми — в колонку,
   футер туру — кнопки зверху на всю ширину, «Пропустити» під ними */
@media (max-width:560px){
  .tour-picks{grid-template-columns:1fr;gap:8px}
  .tour-pick{display:flex;align-items:center;gap:12px;text-align:left;padding:10px 12px}
  .tour-pick img{width:44px;height:44px;margin:0}
  .tour-form .tf-row{grid-template-columns:1fr}
  .tour-foot{flex-direction:column-reverse;align-items:stretch}
  .tour-btns{width:100%}
  .tour-btns .tour-next{flex:1;justify-content:center}
  .tour-skip{text-align:center}
}

.tour-title{font-size:17px;margin-bottom:6px}
.tour-text{font-size:13.5px;color:var(--muted);margin-bottom:14px}

/* Прогрес-крапки */
.tour-dots{display:flex;gap:6px;margin-bottom:16px}
.tour-dots i{
  width:7px;height:7px;border-radius:50%;background:#E2E7F2;
  transition:background .2s,transform .2s;
}
.tour-dots i.done{background:var(--accent-2)}
.tour-dots i.on{background:var(--accent);transform:scale(1.3)}

/* Низ картки: пропустити + назад/далі */
.tour-foot{display:flex;align-items:center;justify-content:space-between;gap:10px}
.tour-skip{
  font-size:12px;color:var(--muted);padding:0;
  text-decoration:underline;text-decoration-style:dotted;text-underline-offset:3px;
  transition:color .15s;white-space:nowrap;
}
.tour-skip:hover{color:var(--text)}
.tour-btns{display:flex;gap:8px}
.tour-final{display:flex;flex-direction:column;gap:8px}

@media (max-width:760px){
  .tour-card{width:calc(100vw - 32px)}
}

/* ============================================================
   СПОВІЩЕННЯ: випадаюча панель праворуч від сайдбара (app.js)
   ============================================================ */
.notif-pop{
  position:fixed;z-index:460;width:340px;max-width:calc(100vw - 110px);
  background:var(--card);border:1px solid var(--border);border-radius:16px;
  padding:14px;box-shadow:0 18px 48px rgba(14,17,48,.28);
  opacity:0;pointer-events:none;transform:translateX(-8px);
  transition:opacity .18s ease,transform .18s ease;
}
.notif-pop.open{opacity:1;pointer-events:auto;transform:none}
/* стрілочка до сайдбара */
.notif-pop::before{
  content:"";position:absolute;left:-6px;top:var(--arrow-top,24px);
  width:12px;height:12px;background:var(--card);
  border-left:1px solid var(--border);border-bottom:1px solid var(--border);
  transform:rotate(45deg);
}
.notif-head{display:flex;align-items:center;gap:8px;padding:2px 6px 10px;border-bottom:1px solid var(--border)}
.notif-head h3{font-size:15px;flex:1}
.notif-row{display:flex;align-items:flex-start;gap:11px;padding:10px 6px;border-radius:10px;transition:background .15s}
.notif-row:hover{background:rgba(9,143,227,.05)}
.notif-row + .notif-row{border-top:1px solid var(--border)}
.notif-ic{
  width:32px;height:32px;border-radius:9px;flex-shrink:0;
  background:var(--accent-soft);color:var(--accent);
  display:flex;align-items:center;justify-content:center;
}
.notif-ic svg.icon{width:15px;height:15px}
.notif-ic.green{background:var(--success-soft);color:#0E9F6E}
.notif-ic.warn{background:var(--warning-soft);color:#B45309}
.notif-body{display:flex;flex-direction:column;min-width:0}
.notif-txt{font-size:13px;line-height:1.4}
.notif-time{font-size:11.5px;color:var(--muted);margin-top:1px}
.notif-foot{border-top:1px solid var(--border);padding-top:10px;margin-top:2px;text-align:center}
.notif-foot a{font-size:13px;font-weight:600;color:var(--accent);transition:opacity .15s}
.notif-foot a:hover{opacity:.75}

/* ============================================================
   МЕНЮ ПРОФІЛЮ: картка користувача → підменю вгору (app.js)
   Розмітка — прямий нащадок <aside>, щоб не різалось overflow'ом
   .sb-inner. У згорнутому сайдбарі спливає поруч.
   ============================================================ */
.sb-user{width:100%;text-align:left;cursor:pointer}
.sb-user-caret{
  width:24px;height:24px;border-radius:6px;flex-shrink:0;
  display:none;align-items:center;justify-content:center;
  color:var(--sidebar-muted);
  opacity:0;transition:opacity .2s ease .05s,transform .2s ease;
}
html.sb-open .sb-user-caret{opacity:1;display:flex}
.sb-user-caret svg.icon{width:14px;height:14px}
.sb-user.open .sb-user-caret{transform:rotate(180deg)}

.sb-user-menu{
  position:absolute;left:12px;right:12px;bottom:84px;z-index:130;
  background:#181C4A;border:1px solid rgba(255,255,255,.1);
  border-radius:13px;padding:6px;
  box-shadow:0 16px 40px rgba(0,0,0,.45);
  display:flex;flex-direction:column;gap:2px;
  opacity:0;pointer-events:none;transform:translateY(6px);
  transition:opacity .18s ease,transform .18s ease;
}
.sb-user-menu.open{opacity:1;pointer-events:auto;transform:none}
/* згорнутий сайдбар: підменю спливає праворуч, біля аватара */
html:not(.sb-open) .sb-user-menu{
  left:calc(100% + 14px);right:auto;width:212px;bottom:14px;
  transform:translateX(-6px);
}
html:not(.sb-open) .sb-user-menu.open{transform:none}
.sb-user-menu a{
  display:flex;align-items:center;gap:10px;
  height:38px;padding:0 12px;border-radius:9px;
  font-size:13px;color:var(--sidebar-text);white-space:nowrap;
  transition:background .15s,color .15s;
}
.sb-user-menu a:hover{background:rgba(255,255,255,.07);color:#fff}
.sb-user-menu a.active{background:var(--grad);color:#fff}
.sb-user-menu a svg.icon{width:16px;height:16px;flex-shrink:0}
/* Хедер меню профілю: фото · ім'я · мейл */
.sb-um-head{display:flex;align-items:center;gap:10px;padding:8px 10px 12px}
.sb-um-head .avatar{
  width:38px;height:38px;flex-shrink:0;
  background:rgba(255,255,255,.1);color:var(--sidebar-muted);
}
.sb-um-meta{min-width:0}
.sb-um-name{font-size:13.5px;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.sb-um-mail{font-size:11.5px;color:var(--sidebar-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* Кнопка апгрейду тарифу — CTA-блок під хедером */
.sb-user-menu .sb-upgrade{
  justify-content:center;
  background:var(--grad);color:#fff;font-weight:600;
  height:42px;margin-bottom:6px;
}
.sb-user-menu .sb-upgrade:hover{background:var(--grad);color:#fff;filter:brightness(1.08)}

/* Вийти — акцент небезпеки */
.sb-user-menu .sb-um-logout{color:#EF4444}
.sb-user-menu .sb-um-logout:hover{background:rgba(239,68,68,.12);color:#EF4444}

/* ============================================================
   AI-ПРОВІДНИК «КЬЮ» (assets/app.js · рішення 11.07)
   Маскот-спрайт #qbotMascot, плаваюча кнопка, хмарка-підказка
   (раз на сесію) та чат-панель — інжектяться на всіх сторінках.
   ============================================================ */

/* --- Плаваюча кнопка 56px внизу праворуч --- */
.qbot-fab{
  position:fixed;right:22px;bottom:22px;z-index:440;
  width:56px;height:56px;border-radius:50%;
  background:var(--card);border:1px solid var(--border);
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 10px 26px rgba(9,143,227,.25);
  transition:transform .15s ease;
  animation:qbotPulse 2.8s ease-out infinite;
}
.qbot-fab:hover{transform:translateY(-2px) scale(1.05)}
/* Маскот Кью — растрове фото (q-expert), а не SVG-спрайт */
.qbot-fab img{width:100%;height:100%;object-fit:contain;display:block;border-radius:50%}
.qbot-head img.qbot-face{object-fit:contain;border-radius:50%}
.qbot-fab > svg{width:44px;height:44px;display:block}
@keyframes qbotPulse{
  0%{box-shadow:0 10px 26px rgba(9,143,227,.25),0 0 0 0 rgba(9,143,227,.3)}
  70%{box-shadow:0 10px 26px rgba(9,143,227,.25),0 0 0 12px rgba(9,143,227,0)}
  100%{box-shadow:0 10px 26px rgba(9,143,227,.25),0 0 0 0 rgba(9,143,227,0)}
}

/* --- Хмарка-підказка над кнопкою (раз на сесію) --- */
.qbot-bubble{
  position:fixed;right:24px;bottom:88px;z-index:440;
  background:var(--sidebar-bg);color:#fff;
  font-size:13px;font-weight:500;line-height:1.45;
  padding:10px 15px;border-radius:14px 14px 4px 14px;
  box-shadow:0 12px 32px rgba(14,17,48,.3);
  max-width:230px;cursor:pointer;
  opacity:0;transform:translateY(8px);pointer-events:none;
  transition:opacity .25s ease,transform .25s ease;
}
.qbot-bubble.show{opacity:1;transform:none;pointer-events:auto}

/* --- Чат-панель --- */
.qbot-panel{
  position:fixed;right:22px;bottom:90px;z-index:450;
  width:380px;max-width:calc(100vw - 32px);
  background:var(--card);border:1px solid var(--border);
  border-radius:20px;overflow:hidden;
  box-shadow:0 24px 64px rgba(14,17,48,.3);
  display:flex;flex-direction:column;
  opacity:0;pointer-events:none;
  transform:translateY(12px) scale(.98);transform-origin:bottom right;
  transition:opacity .2s ease,transform .2s ease;
}
.qbot-panel.open{opacity:1;pointer-events:auto;transform:none}

.qbot-head{
  display:flex;align-items:center;gap:11px;
  padding:13px 14px 13px 16px;
  background:var(--sidebar-bg);color:#fff;
}
.qbot-head .qbot-face{width:38px;height:38px;flex-shrink:0;display:block}
.qbot-head-meta{flex:1;min-width:0;line-height:1.3}
.qbot-head-name{font-family:var(--font-head);font-weight:700;font-size:14px;white-space:nowrap}
.qbot-head-status{display:flex;align-items:center;gap:5px;font-size:11.5px;color:#9BA6CC}
.qbot-head-status i{width:7px;height:7px;border-radius:50%;background:var(--success);flex-shrink:0}
.qbot-close{
  width:30px;height:30px;border-radius:8px;flex-shrink:0;
  display:flex;align-items:center;justify-content:center;color:#9BA6CC;
  transition:background .15s,color .15s;
}
.qbot-close:hover{background:rgba(255,255,255,.1);color:#fff}
.qbot-close svg.icon{width:16px;height:16px}

/* Стрічка повідомлень */
.qbot-msgs{
  padding:16px;display:flex;flex-direction:column;gap:10px;
  overflow-y:auto;max-height:340px;min-height:170px;
  background:var(--bg);
}
.qbot-msg{
  max-width:84%;padding:9px 13px;border-radius:14px;
  font-size:13px;line-height:1.5;
}
.qbot-msg.bot{
  align-self:flex-start;border-bottom-left-radius:4px;
  background:var(--card);border:1px solid var(--border);color:var(--text);
}
.qbot-msg.user{
  align-self:flex-end;border-bottom-right-radius:4px;
  background:var(--grad);color:#fff;
}
.qbot-msg a{
  color:var(--accent);font-weight:600;
  text-decoration:underline;text-underline-offset:3px;
}
.qbot-msg a:hover{opacity:.8}

/* «Кью друкує…» */
.qbot-msg.qbot-typing{display:flex;gap:4px;align-items:center;padding:13px 14px}
.qbot-typing i{
  width:6px;height:6px;border-radius:50%;background:#B9C2D8;
  animation:qbotDot 1s ease-in-out infinite;
}
.qbot-typing i:nth-child(2){animation-delay:.15s}
.qbot-typing i:nth-child(3){animation-delay:.3s}
@keyframes qbotDot{
  0%,100%{opacity:.35;transform:translateY(0)}
  50%{opacity:1;transform:translateY(-3px)}
}

/* Чипи швидких питань */
.qbot-chips{
  display:flex;flex-wrap:wrap;gap:6px;
  padding:10px 16px;border-top:1px solid var(--border);
}
.qbot-chip{
  padding:6px 12px;border-radius:var(--r-chip);
  border:1px solid rgba(9,143,227,.35);color:var(--accent);
  font-size:12px;font-weight:600;
  transition:background .15s,color .15s;
}
.qbot-chip:hover{background:var(--accent);color:#fff}

/* Поле вводу */
.qbot-form{display:flex;gap:8px;padding:10px 16px 14px;border-top:1px solid var(--border)}
.qbot-form input{
  flex:1;min-width:0;font-family:var(--font-body);font-size:13px;color:var(--text);
  background:var(--card);border:1px solid rgba(15,23,42,.14);
  border-radius:10px;padding:9px 12px;outline:none;
  transition:border-color .15s,box-shadow .15s;
}
.qbot-form input::placeholder{color:#9AA5C0}
.qbot-form input:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(9,143,227,.14)}
.qbot-send{
  width:38px;height:38px;border-radius:10px;flex-shrink:0;
  background:var(--grad);color:#fff;
  display:flex;align-items:center;justify-content:center;
  transition:transform .15s,box-shadow .15s;
}
.qbot-send:hover{transform:translateY(-1px);box-shadow:0 6px 16px rgba(9,143,227,.35)}
.qbot-send svg.icon{width:16px;height:16px}

/* Голосове повідомлення Кью (прототип: імітація запису) */
.qbot-mic{
  width:38px;height:38px;border-radius:10px;flex-shrink:0;
  background:var(--card);border:1px solid rgba(15,23,42,.14);color:var(--muted);
  display:flex;align-items:center;justify-content:center;
  transition:color .15s,border-color .15s,background .15s;
}
.qbot-mic:hover{color:var(--accent);border-color:var(--accent)}
.qbot-mic svg.icon{width:16px;height:16px}
.qbot-mic .ic-stop{display:none}
.qbot-form.rec input,
.qbot-form.rec .qbot-send{display:none}
.qbot-form.rec .qbot-mic{
  background:#EF4444;border-color:transparent;color:#fff;
  animation:qbotRecPulse 1.2s ease-in-out infinite;
}
.qbot-form.rec .qbot-mic:hover{color:#fff}
.qbot-form.rec .qbot-mic .ic-mic{display:none}
.qbot-form.rec .qbot-mic .ic-stop{display:block}
.qbot-rec{display:none;flex:1;min-width:0;align-items:center;gap:9px;font-size:13px;color:var(--text)}
.qbot-form.rec .qbot-rec{display:flex}
.qbot-rec .dot{width:9px;height:9px;border-radius:50%;background:#EF4444;flex-shrink:0;animation:qbotRecDot 1s ease-in-out infinite}
.qbot-rec b{margin-left:auto;font-family:var(--font-head);font-size:13px}
@keyframes qbotRecDot{0%,100%{opacity:1}50%{opacity:.25}}
@keyframes qbotRecPulse{
  0%,100%{box-shadow:0 0 0 0 rgba(239,68,68,.35)}
  50%{box-shadow:0 0 0 7px rgba(239,68,68,0)}
}
/* бульбашка надісланого голосового: іконка + хвиля + тривалість */
.qbot-voice{display:inline-flex;align-items:center;gap:3px}
.qbot-voice svg.icon{width:14px;height:14px;margin-right:5px;flex-shrink:0}
.qbot-voice i{width:3px;height:8px;border-radius:2px;background:currentColor;opacity:.85}
.qbot-voice i:nth-child(3n){height:14px}
.qbot-voice i:nth-child(4n){height:11px}
.qbot-voice i:nth-child(5n){height:16px}
.qbot-voice b{margin-left:7px;font-size:11.5px;font-weight:700}

/* Маскот замість аватара-заглушки в онбордингу */
.tour-ava.qbot{background:transparent;box-shadow:0 0 0 2px var(--accent-soft)}
.tour-ava.qbot svg{width:38px;height:38px;display:block}

/* Мобільний: над таб-баром */
@media (max-width:760px){
  .qbot-fab{right:14px;bottom:calc(84px + env(safe-area-inset-bottom))}
  .qbot-bubble{right:16px;bottom:calc(150px + env(safe-area-inset-bottom))}
  .qbot-panel{right:12px;bottom:calc(152px + env(safe-area-inset-bottom))}
  .qbot-msgs{max-height:min(300px,calc(100vh - 380px))}
}

/* ============================================================
   Рольові фічі (20.07): адмін-редагування + клікабельний календар
   ============================================================ */

/* Олівець на банері (тільки адмін) */
.admin-edit-fab{
  position:absolute;top:12px;right:12px;z-index:5;
  width:38px;height:38px;border-radius:50%;border:0;cursor:pointer;
  background:rgba(14,17,48,.72);color:#fff;
  display:flex;align-items:center;justify-content:center;
  box-shadow:0 4px 14px rgba(14,17,48,.3);
  transition:background .15s,transform .15s;
}
.admin-edit-fab:hover{background:var(--accent);transform:scale(1.06)}
.admin-edit-fab svg.icon{width:16px;height:16px}

/* Олівець біля назви тренінгу (тільки адмін) */
.admin-edit-inline{
  display:inline-flex;align-items:center;justify-content:center;
  width:26px;height:26px;margin-left:8px;vertical-align:middle;
  border:0;border-radius:8px;cursor:pointer;
  background:var(--bg);color:var(--muted);
  transition:background .15s,color .15s;
}
.admin-edit-inline:hover{background:var(--accent);color:#fff}
.admin-edit-inline svg.icon{width:13px;height:13px}
h2.admin-editing{
  outline:2px dashed var(--accent);outline-offset:4px;border-radius:6px;
  background:#F0F7FD;
}

/* Дроп-зона заміни банера */
.admin-drop{
  border:2px dashed var(--border);border-radius:14px;
  padding:26px 18px;text-align:center;color:var(--muted);
  display:flex;flex-direction:column;align-items:center;gap:10px;
  font-size:13px;margin-bottom:16px;background:var(--bg);
}
.admin-drop svg.icon{width:28px;height:28px;opacity:.5}
.admin-drop .ab-pick{color:var(--accent);font-weight:700;cursor:pointer;text-decoration:underline}

/* Клікабельні дні календаря */
.cal-day.cal-clickable{cursor:pointer;transition:transform .12s ease,box-shadow .12s ease}
.cal-day.cal-clickable:hover{transform:scale(1.12);box-shadow:0 2px 10px rgba(14,17,48,.18)}
