/* ═══════════════════════════════════════════════════════════════════════════
   RAVVO — V16 DASHBOARD DO ALUNO (upgrade 2026-08-21)
   Hero de progresso, "Treino do dia", atalhos, desafio semanal, sininho de
   notificações, Anotações e a Ficha de Treino redesenhada (dia único +
   tabs). Usa só as variáveis já existentes (--bg-card, --accent, etc.) —
   funciona em dark e light sem ajuste extra, mesmo espírito do v10-fitcore.
   ═══════════════════════════════════════════════════════════════════════════ */

/* ── Header do dashboard: saudação + sino + avatar ── */
.sh-topbar { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-bottom:16px; }
.sh-topbar-greet h1 { font-size:1.3rem; font-weight:800; }
.sh-topbar-greet p { font-size:0.85rem; color:var(--text-secondary); margin-top:2px; }
.sh-topbar-actions { display:flex; align-items:center; gap:10px; flex-shrink:0; }

.sh-bell { position:relative; width:40px; height:40px; border-radius:50%; background:var(--bg-card); border:1px solid var(--border); display:flex; align-items:center; justify-content:center; cursor:pointer; color:var(--text-secondary); transition:all .15s; }
.sh-bell:hover { color:var(--accent); border-color:var(--accent); }
.sh-bell svg { width:19px; height:19px; }
.sh-bell-dot { position:absolute; top:6px; right:7px; min-width:16px; height:16px; padding:0 4px; border-radius:10px; background:var(--danger); color:#fff; font-size:0.62rem; font-weight:800; display:flex; align-items:center; justify-content:center; font-family:var(--font-display); }

.sh-avatar { width:40px; height:40px; border-radius:50%; background:var(--accent); color:#fff; display:flex; align-items:center; justify-content:center; font-family:var(--font-display); font-weight:700; font-size:0.9rem; flex-shrink:0; cursor:pointer; }

/* ── Hero "SEU PROGRESSO" ── */
.sh-hero { position:relative; overflow:hidden; border-radius:var(--radius-lg); padding:24px; margin-bottom:18px; background:linear-gradient(135deg, #2A1354 0%, #4A1F8F 45%, var(--accent) 100%); color:#fff; border:1px solid var(--border-accent); }
.sh-hero::after { content:''; position:absolute; inset:0; background:radial-gradient(circle at 88% 12%, rgba(255,255,255,0.16), transparent 55%); pointer-events:none; }
.sh-hero-kicker { font-family:var(--font-display); font-size:0.72rem; font-weight:700; text-transform:uppercase; letter-spacing:1.5px; color:rgba(255,255,255,0.75); }
.sh-hero-title { font-size:1.4rem; font-weight:800; line-height:1.15; margin:6px 0 18px; }
.sh-hero-body { display:flex; align-items:center; gap:22px; flex-wrap:wrap; position:relative; z-index:1; }

.sh-ring { --pct:0; width:112px; height:112px; border-radius:50%; flex-shrink:0; background:conic-gradient(#fff calc(var(--pct)*1%), rgba(255,255,255,0.22) 0); display:flex; align-items:center; justify-content:center; }
.sh-ring-inner { width:88px; height:88px; border-radius:50%; background:#3B1B78; display:flex; flex-direction:column; align-items:center; justify-content:center; }
.sh-ring-pct { font-family:var(--font-display); font-size:1.5rem; font-weight:800; line-height:1; }
.sh-ring-label { font-size:0.6rem; color:rgba(255,255,255,0.8); text-align:center; margin-top:2px; line-height:1.2; max-width:70px; }

.sh-hero-stats { display:flex; flex-direction:column; gap:10px; flex:1; min-width:150px; }
.sh-hero-stat-label { font-size:0.72rem; color:rgba(255,255,255,0.72); }
.sh-hero-stat-val { font-family:var(--font-display); font-size:1.15rem; font-weight:800; }
.sh-hero-stat-val small { font-size:0.75rem; font-weight:500; color:rgba(255,255,255,0.75); }

.sh-hero-quote { margin-top:18px; padding-top:14px; border-top:1px solid rgba(255,255,255,0.18); font-size:0.85rem; font-style:italic; color:rgba(255,255,255,0.92); position:relative; z-index:1; }

/* ── Treino do dia ── */
.sh-section-label { display:flex; align-items:center; gap:8px; font-family:var(--font-display); font-size:0.78rem; font-weight:700; text-transform:uppercase; letter-spacing:1px; color:var(--text-secondary); margin-bottom:10px; }

.sh-treino-card { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-lg); padding:16px; margin-bottom:18px; }

/* v36 — grid de modalidades: 1 card por tipo de treino ativo hoje
   (Academia/Studio/... + CrossFit lado a lado quando o estabelecimento
   tem os dois). Em telas estreitas empilha (1 coluna). */
.sh-modality-grid { display:grid; grid-template-columns:repeat(auto-fit, minmax(280px, 1fr)); gap:14px; margin-bottom:4px; }
.sh-modality-grid .sh-treino-card { margin-bottom:0; }
.sh-modality-badge { display:inline-flex; align-items:center; gap:5px; font-size:0.68rem; font-weight:700; text-transform:uppercase; letter-spacing:0.5px; color:var(--accent); background:var(--accent-dim); padding:3px 10px; border-radius:20px; margin-bottom:10px; }
.sh-treino-head { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; margin-bottom:14px; }
.sh-treino-icon { width:42px; height:42px; border-radius:12px; background:var(--accent-dim); color:var(--accent); display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:1.1rem; }
.sh-treino-title-row { display:flex; align-items:center; gap:10px; }
.sh-treino-name { font-family:var(--font-display); font-weight:700; font-size:1rem; }
.sh-treino-sub { font-size:0.76rem; color:var(--text-muted); }

.sh-mini-scroll { display:flex; gap:10px; overflow-x:auto; padding-bottom:2px; scrollbar-width:thin; }
.sh-mini-card { flex:0 0 118px; background:var(--bg-input); border:1px solid var(--border); border-radius:var(--radius-md); padding:10px; position:relative; cursor:pointer; transition:border-color .15s; }
.sh-mini-card:hover { border-color:var(--accent); }
.sh-mini-badge { position:absolute; top:8px; left:8px; background:var(--accent); color:#fff; font-family:var(--font-display); font-size:0.68rem; font-weight:800; padding:1px 6px; border-radius:5px; z-index:1; }
.sh-mini-check { position:absolute; top:8px; right:8px; width:20px; height:20px; border-radius:50%; display:flex; align-items:center; justify-content:center; z-index:1; }
.sh-mini-check.done { background:var(--success); color:#fff; }
.sh-mini-check.pending { border:2px dashed var(--text-muted); }
.sh-mini-photo { width:100%; height:70px; border-radius:8px; margin-bottom:8px; display:flex; align-items:center; justify-content:center; font-size:1.6rem; background:linear-gradient(135deg, var(--accent-dim), var(--bg-card)); color:var(--accent); overflow:hidden; }
.sh-mini-photo img { width:100%; height:100%; object-fit:cover; }
.sh-mini-name { font-size:0.78rem; font-weight:700; line-height:1.2; margin-bottom:2px; }
.sh-mini-sets { font-size:0.68rem; color:var(--text-muted); }

.sh-mini-more { flex:0 0 92px; background:var(--bg-input); border:1px dashed var(--border-hover); border-radius:var(--radius-md); display:flex; flex-direction:column; align-items:center; justify-content:center; gap:8px; text-align:center; font-size:0.72rem; color:var(--text-secondary); cursor:pointer; padding:10px; }
.sh-mini-more:hover { border-color:var(--accent); color:var(--accent); }
.sh-mini-more-arrow { width:30px; height:30px; border-radius:50%; background:var(--accent); color:#fff; display:flex; align-items:center; justify-content:center; }

/* ── Grid de atalhos ── */
.sh-grid { display:grid; grid-template-columns:repeat(3, 1fr); gap:10px; margin-bottom:18px; }
.sh-tile { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-md); padding:14px 12px; cursor:pointer; transition:all .15s; }
.sh-tile:hover { border-color:var(--accent); transform:translateY(-1px); }
.sh-tile svg { width:22px; height:22px; color:var(--accent); margin-bottom:8px; }
.sh-tile-title { font-size:0.84rem; font-weight:700; margin-bottom:2px; }
.sh-tile-sub { font-size:0.68rem; color:var(--text-muted); line-height:1.3; }

/* ── Desafio semanal ── */
.sh-challenge { display:flex; align-items:center; gap:14px; background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-lg); padding:14px 16px; margin-bottom:8px; cursor:pointer; }
.sh-challenge-ic { width:44px; height:44px; border-radius:50%; background:var(--warning-dim); color:var(--warning); display:flex; align-items:center; justify-content:center; font-size:1.2rem; flex-shrink:0; }
.sh-challenge-body { flex:1; min-width:0; }
.sh-challenge-title { font-weight:700; font-size:0.88rem; }
.sh-challenge-sub { font-size:0.72rem; color:var(--text-muted); margin-bottom:6px; }
.sh-challenge-bar { height:6px; border-radius:4px; background:var(--bg-input); overflow:hidden; }
.sh-challenge-bar > div { height:100%; background:var(--accent); border-radius:4px; transition:width .3s; }
.sh-challenge-count { font-family:var(--font-display); font-weight:800; font-size:0.95rem; white-space:nowrap; }
.sh-challenge-count small { font-size:0.68rem; color:var(--text-muted); font-weight:500; }
.sh-challenge-chev { width:28px; height:28px; border-radius:50%; background:var(--bg-input); display:flex; align-items:center; justify-content:center; color:var(--text-secondary); flex-shrink:0; }

/* ── Painel de notificações (dropdown-modal) ── */
.sh-notif-list { display:flex; flex-direction:column; gap:2px; max-height:60vh; overflow-y:auto; }
.sh-notif-item { display:flex; gap:10px; padding:12px 8px; border-radius:var(--radius-sm); cursor:pointer; border-bottom:1px solid var(--border); }
.sh-notif-item:hover { background:var(--bg-input); }
.sh-notif-item.unread { background:var(--accent-dim); }
.sh-notif-dot { width:8px; height:8px; border-radius:50%; background:var(--accent); flex-shrink:0; margin-top:6px; }
.sh-notif-dot.read { background:transparent; }
.sh-notif-title { font-size:0.85rem; font-weight:700; }
.sh-notif-msg { font-size:0.78rem; color:var(--text-secondary); margin-top:2px; }
.sh-notif-time { font-size:0.68rem; color:var(--text-muted); margin-top:4px; }
.sh-notif-empty { text-align:center; padding:40px 20px; color:var(--text-muted); font-size:0.85rem; }

/* ── Anotações ── */
.sh-note-card { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-md); padding:14px 16px; margin-bottom:10px; }
.sh-note-head { display:flex; align-items:center; justify-content:space-between; gap:8px; margin-bottom:6px; }
.sh-note-title { font-weight:700; font-size:0.9rem; }
.sh-note-date { font-size:0.7rem; color:var(--text-muted); flex-shrink:0; }
.sh-note-content { font-size:0.85rem; color:var(--text-secondary); white-space:pre-wrap; line-height:1.5; }
.sh-note-actions { display:flex; gap:8px; margin-top:10px; }
.sh-note-actions button { background:none; border:none; color:var(--text-muted); font-size:0.75rem; cursor:pointer; padding:2px 4px; }
.sh-note-actions button:hover { color:var(--accent); }

/* ═══════════════ FICHA DE TREINO (redesenho) ═══════════════ */
.ft-daytabs { display:flex; gap:8px; overflow-x:auto; margin-bottom:14px; }
.ft-daytab { flex:0 0 auto; padding:8px 16px; border-radius:20px; background:var(--bg-card); border:1px solid var(--border); color:var(--text-secondary); font-family:var(--font-display); font-weight:700; font-size:0.82rem; cursor:pointer; white-space:nowrap; }
.ft-daytab.active { background:var(--accent); border-color:var(--accent); color:#fff; }
.ft-daytab-wd { font-weight:500; opacity:0.75; font-size:0.72rem; }

.ft-schedule-note { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-md); padding:10px 14px; font-size:0.82rem; color:var(--text-secondary); margin-bottom:14px; }
.ft-schedule-note b { color:var(--text-primary); }
.ft-schedule-note.today { background:var(--accent-dim); border-color:var(--border-accent); }
.ft-schedule-note.today b { color:var(--accent); }

.ft-hero { background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-lg); padding:13px 15px; margin-bottom:14px; display:flex; align-items:center; justify-content:space-between; gap:14px; flex-wrap:nowrap; }
.ft-hero > div:first-child { min-width:0; flex:1; }
.ft-hero-kicker { font-family:var(--font-display); font-size:0.66rem; font-weight:700; text-transform:uppercase; letter-spacing:1.5px; color:var(--accent); }
.ft-hero-title { font-size:1.15rem; font-weight:800; margin:1px 0 3px; line-height:1.1; }
.ft-hero-sub { display:flex; align-items:center; gap:6px; font-size:0.8rem; color:var(--text-muted); }
.ft-hero-tip { margin-top:5px; font-size:0.76rem; line-height:1.32; color:var(--text-secondary); display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden; }

.ft-ring { --pct:0; width:66px; height:66px; border-radius:50%; flex-shrink:0; background:conic-gradient(var(--accent) calc(var(--pct)*1%), var(--bg-input) 0); display:flex; align-items:center; justify-content:center; }
.ft-ring-inner { width:53px; height:53px; border-radius:50%; background:var(--bg-card); display:flex; flex-direction:column; align-items:center; justify-content:center; }
.ft-ring-frac { font-family:var(--font-display); font-weight:800; font-size:0.92rem; line-height:1; }
.ft-ring-label { font-size:0.52rem; color:var(--text-muted); margin-top:1px; }

.ft-exercise { display:flex; flex-direction:row; align-items:stretch; gap:10px; background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-lg); overflow:hidden; padding:8px; margin-bottom:10px; }
.ft-exercise.done { border-color:var(--success); }

.ft-ex-photo-wrap { position:relative; width:120px; flex-shrink:0; border-radius:var(--radius-md); overflow:hidden; }
.ft-ex-num-badge { position:absolute; top:5px; left:5px; background:var(--accent); color:#fff; font-family:var(--font-display); font-weight:800; font-size:0.65rem; padding:2px 6px; border-radius:5px; z-index:1; box-shadow:0 2px 8px rgba(0,0,0,.35); }
.ft-ex-chart-btn { flex-shrink:0; width:26px; height:26px; border-radius:7px; background:var(--bg-input); border:1px solid var(--border); color:var(--text-secondary); display:flex; align-items:center; justify-content:center; cursor:pointer; }
.ft-ex-chart-btn:hover { color:var(--accent); border-color:var(--accent); }
.ft-ex-photo { width:100%; height:100%; display:flex; align-items:center; justify-content:center; font-size:1.8rem; background:linear-gradient(135deg, var(--accent-dim), var(--bg-input)); color:var(--accent); overflow:hidden; }
.ft-ex-photo img { width:100%; height:100%; object-fit:cover; }
.ft-ex-play-btn { position:absolute; inset:0; margin:auto; width:36px; height:36px; border-radius:50%; background:rgba(10,10,10,.55); backdrop-filter:blur(2px); border:2px solid rgba(255,255,255,.85); color:#fff; display:flex; align-items:center; justify-content:center; cursor:pointer; transition:transform .15s, background .15s; }
.ft-ex-play-btn:hover { background:var(--accent); transform:scale(1.08); }
.ft-ex-play-btn svg { margin-left:2px; }

.ft-ex-body { flex:1; min-width:0; padding:0; display:flex; flex-direction:column; justify-content:center; gap:7px; }
.ft-ex-name-row { display:flex; align-items:center; justify-content:space-between; gap:8px; }
.ft-ex-name { flex:1; min-width:0; font-weight:700; font-size:0.92rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ft-ex-badges { display:grid; grid-template-columns:repeat(3, 1fr); gap:6px; }
.ft-ex-badge { display:flex; flex-direction:column; align-items:center; background:var(--accent-dim); border:1px solid var(--border-accent); border-radius:var(--radius-md); padding:5px 4px; }
.ft-ex-badge-val { font-family:var(--font-display); font-weight:800; font-size:1.05rem; color:var(--accent); line-height:1.1; }
.ft-ex-badge-label { font-size:0.58rem; color:var(--text-secondary); text-transform:uppercase; letter-spacing:0.5px; margin-top:1px; }
.ft-ex-history { font-size:0.7rem; color:var(--text-secondary); background:var(--bg-input); border-radius:var(--radius-sm); padding:5px 9px; }
.ft-ex-history b { color:var(--accent); }
/* v43 — método de treino + séries flexíveis + RIR (tela do aluno) */
.ft-ex-method { display:inline-flex; align-items:center; gap:6px; font-size:0.62rem; font-weight:800; text-transform:uppercase; letter-spacing:0.04em; color:var(--accent); background:var(--accent-dim); padding:2px 8px; border-radius:100px; margin-bottom:6px; }
.ft-ex-method-grp { font-weight:600; color:var(--text-secondary); background:none; letter-spacing:0; text-transform:none; }
.ft-ex-series { display:flex; flex-direction:column; gap:4px; margin:2px 0; }
.ft-ex-serie { font-size:0.82rem; color:var(--text-primary); background:var(--accent-dim); border:1px solid var(--border-accent); border-radius:var(--radius-sm); padding:5px 10px; }
.ft-ex-serie b { color:var(--accent); margin-right:4px; }
.ft-ex-rir { font-size:0.72rem; color:var(--text-secondary); margin-top:2px; }
.ft-ex-rir b { color:var(--accent); }
/* v47 — mini-evolução de carga no card */
.ft-ex-prog { font-size:0.74rem; color:var(--text-secondary); margin-top:3px; }
.ft-ex-prog-delta { font-weight:700; }
.ft-ex-prog-delta.up { color:var(--success, #22C55E); }
.ft-ex-prog-delta.down { color:var(--danger, #EF4444); }

/* v43 — bloco de conjunto (bi/tri/super-set, circuito) na tela do aluno */
.ft-superset { border:1px dashed var(--border-accent); border-radius:var(--radius-lg, 14px); padding:8px; margin-bottom:12px; background:var(--bg-input); }
.ft-superset-head { font-size:0.64rem; font-weight:800; letter-spacing:0.06em; text-transform:uppercase; color:var(--accent); padding:4px 6px 8px; }
.ft-superset-foot { font-size:0.72rem; color:var(--text-secondary); padding:6px 6px 2px; }
.ft-superset .ft-exercise { margin-bottom:6px; }
.ft-superset .ft-exercise:last-of-type { margin-bottom:0; }

/* v45 — concluir treino */
.ft-concluir-btn {
  width:100%; margin:6px 0 4px; padding:15px; border:none; border-radius:var(--radius-lg, 14px);
  background:var(--accent); color:#fff; font-family:var(--font-display); font-weight:800;
  font-size:1rem; text-transform:uppercase; letter-spacing:0.04em; cursor:pointer;
}
.ft-concluir-btn:active { transform:scale(0.98); }
.ft-done-banner {
  margin:6px 0 4px; padding:14px; border-radius:var(--radius-lg, 14px);
  background:var(--success-dim, rgba(34,197,94,.15)); color:var(--success, #22C55E);
  font-size:0.9rem; text-align:center;
}

/* v45 — barra de descanso (fixa, vive no body) */
.ft-rest-bar {
  position:fixed; left:0; right:0; bottom:0; z-index:9500;
  background:var(--bg-card, #161616); border-top:1px solid var(--border, #222);
  padding:10px 12px calc(10px + env(safe-area-inset-bottom, 0px));
  box-shadow:0 -6px 24px rgba(0,0,0,.4);
}
body.is-student-shell .ft-rest-bar { bottom:calc(58px + env(safe-area-inset-bottom, 0px)); padding-bottom:10px; }
.ft-rest-bar.done { background:var(--success-dim, rgba(34,197,94,.15)); }
.ft-rest-fill { position:absolute; left:0; top:0; height:3px; background:var(--accent, #8B3FE8); transition:width 1s linear; }
.ft-rest-bar.done .ft-rest-fill { background:var(--success, #22C55E); }
.ft-rest-row { display:flex; align-items:center; gap:8px; }
.ft-rest-time { font-family:var(--font-display, sans-serif); font-weight:800; font-size:1.3rem; color:var(--text-primary, #f5f5f5); font-variant-numeric:tabular-nums; }
.ft-rest-label { flex:1; min-width:0; font-size:0.78rem; color:var(--text-secondary, #999); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ft-rest-btn { flex-shrink:0; background:var(--bg-input, #1A1A1A); border:1px solid var(--border, #222); color:var(--text-primary, #f5f5f5); border-radius:var(--radius-sm, 6px); padding:8px 12px; font-size:0.82rem; cursor:pointer; }
.ft-rest-btn.strong { background:var(--accent, #8B3FE8); color:#fff; border-color:transparent; font-weight:700; }
.ft-ex-actions { display:flex; gap:6px; }
.ft-ex-register { flex:1; background:var(--accent); color:#fff; border:none; border-radius:var(--radius-sm); padding:7px; font-family:var(--font-display); font-weight:700; font-size:0.68rem; text-transform:uppercase; letter-spacing:0.4px; cursor:pointer; display:flex; align-items:center; justify-content:center; gap:5px; transition:background .15s; }
.ft-ex-register:hover { background:var(--accent-hover); }
.ft-ex-register.completed { background:var(--success-dim); color:var(--success); }
.ft-ex-edit-btn { flex-shrink:0; width:30px; background:var(--bg-input); border:1px solid var(--border); border-radius:var(--radius-sm); color:var(--text-secondary); display:flex; align-items:center; justify-content:center; cursor:pointer; }
.ft-ex-edit-btn:hover { color:var(--accent); border-color:var(--accent); }
.ft-ex-swap-link { display:block; width:100%; background:none; border:none; color:var(--text-secondary); font-size:0.7rem; text-align:left; padding:0; cursor:pointer; }
.ft-ex-swap-link:hover { color:var(--accent); }

/* Contador "Série X/Y" ao lado do botão "Registrar série" — pedido explícito
   pra deixar claro em qual série o aluno está, igual referência de outro app. */
.ft-serie-counter { flex-shrink:0; display:flex; align-items:baseline; gap:1px; background:var(--bg-input); border:1px solid var(--border-accent); color:var(--accent); font-family:var(--font-display); font-weight:800; font-size:0.85rem; padding:0 9px; border-radius:var(--radius-sm); }
.ft-serie-counter small { font-size:0.62rem; font-weight:700; color:var(--text-secondary); }

/* Card recolhido — exercício já concluído hoje vira um resumo de 1 linha em
   vez de continuar ocupando o mesmo espaço que um em andamento. Toca em
   qualquer ponto (fora de botão) pra reabrir e registrar uma série extra. */
.ft-exercise.collapsed { padding:7px 10px; cursor:pointer; align-items:center; gap:10px; transition:background .15s; }
.ft-exercise.collapsed:hover { background:var(--bg-input); }
.ft-ex-photo-wrap-sm { width:38px; height:38px; flex-shrink:0; }
.ft-ex-photo-wrap-sm .ft-ex-num-badge { display:none; }
.ft-ex-photo-wrap-sm .ft-ex-photo { font-size:1.1rem; border-radius:var(--radius-sm); }
.ft-ex-collapsed-body { flex:1; min-width:0; }
.ft-ex-collapsed-body .ft-ex-name { font-size:0.85rem; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ft-ex-collapsed-meta { font-size:0.68rem; color:var(--text-secondary); overflow:hidden; text-overflow:ellipsis; white-space:nowrap; }
.ft-ex-done-check { flex-shrink:0; width:24px; height:24px; border-radius:50%; background:var(--success-dim); color:var(--success); display:flex; align-items:center; justify-content:center; font-size:0.8rem; font-weight:800; }

@media (max-width:380px) {
  .ft-ex-photo-wrap { width:96px; }
  .ft-ex-badge-val { font-size:0.9rem; }
}

.ft-tip-card { display:flex; gap:12px; background:var(--bg-card); border:1px solid var(--border); border-radius:var(--radius-lg); padding:14px 16px; margin:16px 0; }
.ft-tip-ic { width:38px; height:38px; border-radius:50%; background:var(--warning-dim); color:var(--warning); display:flex; align-items:center; justify-content:center; flex-shrink:0; font-size:1.05rem; }
.ft-tip-title { font-weight:700; font-size:0.85rem; color:var(--accent); }
.ft-tip-text { font-size:0.8rem; color:var(--text-secondary); margin-top:2px; }

/* ═══════════════ BARRA INFERIOR (mobile, área do aluno) ═══════════════ */
.mobile-tabbar { display:none; }

@media (max-width: 768px) {
  .sh-grid { grid-template-columns:repeat(2, 1fr); }
  .sh-hero-body { gap:16px; }

  .app-layout.student-shell .main-content { padding-bottom:82px; }

  .mobile-tabbar {
    display:flex;
    position:fixed; left:0; right:0; bottom:0;
    background:var(--bg-secondary);
    border-top:1px solid var(--border);
    padding:6px 4px calc(6px + env(safe-area-inset-bottom, 0px));
    z-index:150;
  }
  .mobile-tabbar button {
    flex:1; display:flex; flex-direction:column; align-items:center; gap:3px;
    background:none; border:none; color:var(--text-muted);
    font-size:0.62rem; font-family:var(--font-body); padding:6px 2px; cursor:pointer;
  }
  .mobile-tabbar button svg { width:20px; height:20px; }
  .mobile-tabbar button.active { color:var(--accent); }

  /* O prompt de instalar PWA (app-nav.js, z-index mais alto de propósito
     pra cobrir a tela toda em qualquer outra página) tampava a barra
     inferior nova por cima — sobe o prompt pra ficar acima dela. Só se
     aplica na área do aluno (`body.is-student-shell`, setado em
     Nav.loadStudentPanel/loadAdminPanel); admin não tem barra inferior. */
  body.is-student-shell .pwa-install-banner { bottom:58px; }

  /* Mesmo problema do banner de instalar: o botão flutuante de tema
     (premium-theme.js, `#themeFab`, z-index 1800) fica exatamente em
     cima do último item ("Perfil") da barra inferior nova. Sobe ele
     pra ficar acima da barra, só na área do aluno. */
  body.is-student-shell .theme-fab { bottom: calc(58px + 14px + env(safe-area-inset-bottom, 0px)); }

  /* Mesmo problema, terceira vítima: o menu lateral é `position:fixed;
     bottom:0` (layout.css) com z-index 100 — abaixo da barra inferior
     (z-index 150). Resultado: os ~58px de baixo do drawer ficam ATRÁS da
     barra e o `.sidebar-footer` (nome do aluno · Sair) some.
     Não dá pra só subir o z-index do drawer: ele tem 280px de largura e
     taparia só um pedaço da barra, deixando o resto aparecendo do lado.
     Então o drawer recua: encolhe a altura útil na medida da barra, o
     footer encosta logo acima dela e a lista rola normalmente.
     `--tabbar-h` é a altura REAL da barra, medida por Nav.syncTabbarHeight()
     (app-nav.js) — o 58px fixo errava por 2px e o rodapé ainda encostava.
     A safe-area já está dentro da altura medida, então não soma de novo. */
  body.is-student-shell .sidebar {
    padding-bottom: var(--tabbar-h, calc(58px + env(safe-area-inset-bottom, 0px)));
  }
}
