/* =============================================================================================
   EduLS Suite — CSS lõi (khung host, nút, modal, paywall, hub, tabs). Mỗi công cụ có CSS riêng.
   Kiến trúc kích thước: .el-host là position:fixed chiếm ĐÚNG phần màn hình còn trống
   (bên phải Sidebar, dưới Topbar, trên Bottom-nav) => tự co giãn kín khung ở mọi thiết bị.
   ============================================================================================= */
/* Chuẩn chiều cao control dùng chung toàn hệ thống (khớp public/css/controls.css; khai báo lại để /join và /tools của khách chỉ nạp file này vẫn đúng cỡ) */
:root { --ctl-h-std: 38px; --ctl-h-sm: 32px; --ctl-h: var(--ctl-h-std); }
@media (pointer: coarse) { :root { --ctl-h-std: 44px; --ctl-h-sm: 36px; } }
.el-host {
  --el-bg: #f4f6fb; --el-panel: #fff; --el-ink: #0f172a; --el-ink2: #334155; --el-mute: #64748b; --el-line: #e2e8f0; --el-line2: #cbd5e1;
  --el-primary: var(--primary, #2563eb); --el-primary-d: #1d4ed8; --el-primary-soft: #eaf1ff;
  --el-danger: #dc2626; --el-ok: #16a34a; --el-warn: #f59e0b;
  --el-r: 12px; --el-r-lg: 18px; --el-shadow: 0 1px 2px rgba(15,23,42,.06), 0 8px 24px -12px rgba(15,23,42,.18);
  --el-font: 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
  --el-safe-b: env(safe-area-inset-bottom, 0px); --el-safe-t: env(safe-area-inset-top, 0px);
  --el-safe-l: env(safe-area-inset-left, 0px); --el-safe-r: env(safe-area-inset-right, 0px);
  position: fixed; z-index: 30; display: flex; flex-direction: column; min-height: 0; min-width: 0;
  background: var(--el-bg); color: var(--el-ink); font-family: var(--el-font); font-size: 15px; line-height: 1.45;
  -webkit-text-size-adjust: 100%; text-size-adjust: 100%; -webkit-tap-highlight-color: transparent;
  overscroll-behavior: contain;
}
.el-host *, .el-host *::before, .el-host *::after { box-sizing: border-box; }
.el-host [hidden] { display: none !important; }
.el-host button, .el-host input, .el-host select, .el-host textarea { font-family: inherit; }

/* ---- Vị trí khung theo ngữ cảnh ---- */
.el-host[data-mode="dashboard"] { top: var(--topbar-h, 64px); left: var(--sidebar-w, 264px); right: 0; bottom: 0; }
body.sidebar-collapsed .el-host[data-mode="dashboard"] { left: var(--sidebar-w-mini, 76px); }
.el-host[data-mode="public"], .el-host[data-mode="player"] { inset: 0; padding-left: var(--el-safe-l); padding-right: var(--el-safe-r); }
@media (max-width: 1024px) {
  .el-host[data-mode="dashboard"], body.sidebar-collapsed .el-host[data-mode="dashboard"] { left: 0; bottom: calc(var(--bottom-nav-h, 60px) + var(--el-safe-b)); }
}
@media (max-width: 768px) { .el-host[data-mode="dashboard"] { top: 56px; } }
body.el-tools-page { overflow: hidden; }
body.el-tools-page #chatFabBtn { display: none !important; } /* không cho bong bóng chat che điều khiển của công cụ */
/* Fullscreen: native (top layer) hoặc giả lập cho iPhone */
.el-host.is-pseudo-fs, .el-host:fullscreen { position: fixed !important; inset: 0 !important; z-index: 2147483000; padding-left: var(--el-safe-l); padding-right: var(--el-safe-r); }
.el-host:-webkit-full-screen { width: 100%; height: 100%; }

/* ---- Thanh tiêu đề (Header của Component View) ---- */
.el-bar { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; min-height: 54px; padding: 6px 14px; background: #fff; border-bottom: 1px solid var(--el-line); position: relative; z-index: 3; }
.el-brand { display: inline-flex; align-items: center; gap: 8px; color: var(--el-ink); text-decoration: none; font-size: 17px; letter-spacing: -.01em; }
.el-brand-mark { width: 32px; height: 32px; border-radius: 9px; background: var(--el-primary); color: #fff; display: grid; place-items: center; }
.el-bar-sep { width: 1px; height: 24px; background: var(--el-line); margin: 0 2px; }
.el-bar-title { display: flex; align-items: center; gap: 10px; min-width: 0; flex: 0 1 auto; }
.el-bar-ic { width: 34px; height: 34px; flex: 0 0 34px; border-radius: 10px; display: grid; place-items: center; color: var(--c, var(--el-primary)); background: color-mix(in srgb, var(--c, #2563eb) 12%, #fff); }
.el-bar-text { display: flex; flex-direction: column; min-width: 0; line-height: 1.15; }
.el-bar-name { font-size: 16px; font-weight: 750; letter-spacing: -.01em; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.el-bar-sub { color: var(--el-mute); font-size: 12px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.el-bar-actions { flex: 1 1 auto; min-width: 0; display: flex; justify-content: flex-end; align-items: center; }
.el-tool-actions { display: flex; align-items: center; gap: 8px; flex-wrap: nowrap; overflow-x: auto; scrollbar-width: none; max-width: 100%; padding: 2px; }
.el-tool-actions::-webkit-scrollbar { display: none; }
.el-fs-btn { flex: 0 0 auto; }
.el-host.is-fs .el-bar { min-height: 46px; padding-top: max(6px, var(--el-safe-t)); }
.el-host.is-fs .el-tabs, .el-host.is-fs .el-sandbox, .el-host.is-fs .el-bar-login, .el-host.is-fs .el-bar-signup { display: none !important; }

/* ---- Tabs chuyển công cụ (hiện khi không có Sidebar: khách / điện thoại / iPad dọc) ---- */
.el-tabs { display: flex; gap: 4px; flex: 0 0 auto; overflow-x: auto; padding: 6px 12px; background: #fff; border-bottom: 1px solid var(--el-line); scrollbar-width: none; -webkit-overflow-scrolling: touch; }
.el-tabs::-webkit-scrollbar { display: none; }
.el-host[data-mode="dashboard"] .el-tabs { display: none; }
@media (max-width: 1024px) { .el-host[data-mode="dashboard"] .el-tabs { display: flex; } }
.el-tab { display: inline-flex; align-items: center; gap: 7px; flex: 0 0 auto; min-height: 38px; padding: 0 13px; border-radius: 999px; border: 0; background: transparent; color: var(--el-ink2); font: 600 13.5px var(--el-font); cursor: pointer; text-decoration: none; white-space: nowrap; transition: background .15s, color .15s; }
.el-tab:hover { background: var(--el-bg); }
.el-tab.is-active { background: color-mix(in srgb, var(--tab-c, #2563eb) 13%, #fff); color: color-mix(in srgb, var(--tab-c, #2563eb) 88%, #000); }
.el-tab[data-route=""].is-active { background: var(--el-primary-soft); color: var(--el-primary-d); }

.el-sandbox { display: flex; align-items: center; gap: 10px; flex: 0 0 auto; padding: 7px 14px; background: #fff8e6; border-bottom: 1px solid #fde7a8; color: #7a5200; font-size: 13px; }
.el-sandbox > span { flex: 1; }
.el-sandbox .el-icon-btn { width: 28px; height: 28px; }

/* ---- Vùng làm việc ---- */
.el-stage { position: relative; flex: 1 1 auto; min-height: 0; overflow: hidden; }
.el-view { position: absolute; inset: 0; display: flex; flex-direction: column; min-height: 0; min-width: 0; overflow: hidden; container: elv / inline-size; } /* @container elv: đáp ứng theo bề rộng khung công cụ, không phải bề rộng màn hình */
.el-loading { position: absolute; inset: 0; display: grid; place-items: center; background: rgba(244,246,251,.7); z-index: 5; }
.el-spinner { width: 34px; height: 34px; border-radius: 50%; border: 3px solid var(--el-line2); border-top-color: var(--el-primary); animation: el-spin .8s linear infinite; }
@keyframes el-spin { to { transform: rotate(360deg); } }

/* ---- Nút & điều khiển ---- */
.el-btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: var(--ctl-h, 38px); padding: 0 16px; border-radius: 10px; border: 1px solid transparent; font: 650 14px var(--el-font); line-height: 1; cursor: pointer; text-decoration: none; white-space: nowrap; user-select: none; -webkit-user-select: none; touch-action: manipulation; position: relative; transition: background .15s, box-shadow .15s, transform .06s, opacity .15s; }
.el-btn:active:not(.is-locked):not([disabled]) { transform: translateY(1px); }
.el-btn[disabled] { opacity: .45; cursor: not-allowed; }
.el-btn-primary { background: var(--el-primary); color: #fff; box-shadow: 0 1px 0 rgba(255,255,255,.2) inset, 0 6px 14px -8px var(--el-primary); }
.el-btn-primary:hover:not([disabled]) { background: var(--el-primary-d); }
.el-btn-soft { background: var(--el-primary-soft); color: var(--el-primary-d); }
.el-btn-soft:hover:not([disabled]) { background: #dbe8ff; }
.el-btn-ghost { background: #fff; border-color: var(--el-line2); color: var(--el-ink2); }
.el-btn-ghost:hover:not([disabled]) { background: var(--el-bg); }
.el-btn-danger { background: var(--el-danger); color: #fff; }
.el-btn-ok { background: var(--el-ok); color: #fff; }
.el-btn-dark { background: #0f172a; color: #fff; }
.el-btn-lg { min-height: 54px; padding: 0 26px; font-size: 17px; border-radius: 15px; }
.el-btn-sm { min-height: var(--ctl-h-sm, 32px); padding: 0 11px; font-size: 13px; border-radius: 8px; }
.el-btn-block { width: 100%; }
.el-icon-btn { display: inline-grid; place-items: center; width: 38px; height: 38px; border-radius: 10px; border: 0; background: transparent; color: var(--el-ink2); cursor: pointer; touch-action: manipulation; transition: background .15s; flex: 0 0 auto; position: relative; }
.el-icon-btn:hover { background: var(--el-bg); }
.el-icon-btn.is-on { background: var(--el-primary-soft); color: var(--el-primary-d); }
.el-icon-btn[disabled] { opacity: .35; cursor: not-allowed; }
@media (pointer: coarse) { .el-icon-btn { width: 44px; height: 44px; } } /* cỡ nút/ô nhập cảm ứng nằm trong biến --ctl-h (44px / 36px) */
.el-host :focus-visible { outline: 3px solid color-mix(in srgb, var(--el-primary) 45%, transparent); outline-offset: 2px; }
.el-host :focus:not(:focus-visible) { outline: none; }

/* Khoá PRO */
.el-btn.is-locked, .el-icon-btn.is-locked { opacity: .78; background-image: repeating-linear-gradient(135deg, transparent 0 7px, rgba(148,163,184,.13) 7px 14px); }
.el-btn-primary.is-locked { background-color: #64748b; box-shadow: none; }
.el-pro-badge { display: inline-flex; align-items: center; gap: 3px; height: 18px; padding: 0 6px; margin-left: 2px; border-radius: 999px; background: #fef3c7; color: #92400e; font: 800 10px var(--el-font); letter-spacing: .04em; flex: 0 0 auto; }
.el-pro-badge.is-inline { vertical-align: 1px; }
.el-icon-btn > .el-pro-badge { position: absolute; top: -3px; right: -4px; height: 15px; padding: 0 4px; font-size: 9px; }

.el-input, .el-select, .el-textarea { width: 100%; min-height: var(--ctl-h, 38px); padding: 8px 12px; border-radius: 10px; border: 1px solid var(--el-line2); background: #fff; color: var(--el-ink); font: 500 15px var(--el-font); transition: border-color .15s, box-shadow .15s; }
.el-input, .el-select { height: var(--ctl-h, 38px); padding-top: 0; padding-bottom: 0; box-sizing: border-box; }
.el-textarea { min-height: 96px; resize: vertical; line-height: 1.5; }
.el-input:focus, .el-select:focus, .el-textarea:focus { outline: none; border-color: var(--el-primary); box-shadow: 0 0 0 3px color-mix(in srgb, var(--el-primary) 20%, transparent); }
@media (pointer: coarse) { .el-input, .el-select { font-size: 16px; } .el-textarea { font-size: 16px; } } /* 16px chặn iOS tự phóng to khi focus */
.el-field { display: flex; flex-direction: column; gap: 6px; margin-bottom: 12px; }
.el-field > span { font-size: 13px; font-weight: 650; color: var(--el-ink2); }
.el-seg { display: inline-flex; padding: 3px; gap: 2px; background: #e9edf5; border-radius: 11px; }
.el-seg button { border: 0; background: transparent; padding: 0 14px; min-height: 34px; border-radius: 9px; font: 650 13.5px var(--el-font); color: var(--el-ink2); cursor: pointer; touch-action: manipulation; }
.el-seg button.is-on { background: #fff; color: var(--el-ink); box-shadow: 0 1px 3px rgba(15,23,42,.14); }
@media (pointer: coarse) { .el-seg button { min-height: 40px; } }
.el-switch { display: inline-flex; align-items: center; gap: 10px; cursor: pointer; user-select: none; font-weight: 600; font-size: 14px; color: var(--el-ink2); min-height: 34px; }
.el-switch input { position: absolute; opacity: 0; pointer-events: none; }
.el-switch i { width: 42px; height: 24px; border-radius: 999px; background: #cbd5e1; position: relative; transition: background .18s; flex: 0 0 42px; }
.el-switch i::after { content: ''; position: absolute; left: 3px; top: 3px; width: 18px; height: 18px; border-radius: 50%; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.3); transition: transform .18s; }
.el-switch input:checked + i { background: var(--el-primary); }
.el-switch input:checked + i::after { transform: translateX(18px); }
.el-switch input:focus-visible + i { outline: 3px solid color-mix(in srgb, var(--el-primary) 45%, transparent); outline-offset: 2px; }
.el-badge { display: inline-flex; align-items: center; height: 22px; padding: 0 9px; border-radius: 999px; background: #eef2f7; color: var(--el-ink2); font: 650 11.5px var(--el-font); }
.el-badge.is-pro { background: #fef3c7; color: #92400e; }
.el-chip { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 10px; border-radius: 999px; background: #eef2f7; color: var(--el-ink2); font: 600 13px var(--el-font); }
.el-muted { color: var(--el-mute); }
.el-kbd { display: inline-block; min-width: 22px; padding: 1px 6px; border-radius: 6px; border: 1px solid var(--el-line2); border-bottom-width: 2px; background: #fff; font: 700 11.5px ui-monospace, Menlo, monospace; color: var(--el-ink2); text-align: center; }
.el-empty { display: flex; flex-direction: column; align-items: center; justify-content: center; text-align: center; gap: 8px; padding: 28px 18px; color: var(--el-mute); }
.el-empty b { color: var(--el-ink2); font-size: 15px; }
.el-img { max-width: 100%; max-height: 260px; border-radius: 8px; display: block; margin: 6px 0; }
.el-math-raw { font-family: ui-monospace, Menlo, monospace; font-size: .92em; color: var(--el-mute); }
.katex { font-size: 1.04em; }

/* ---- Modal / bottom-sheet ---- */
.el-backdrop { position: absolute; inset: 0; z-index: 60; display: flex; align-items: center; justify-content: center; padding: 18px; background: rgba(15,23,42,.5); backdrop-filter: blur(3px); -webkit-backdrop-filter: blur(3px); opacity: 0; transition: opacity .18s; }
.el-backdrop.in { opacity: 1; }
.el-modal { display: flex; flex-direction: column; width: 100%; max-height: 100%; background: #fff; border-radius: 20px; box-shadow: 0 30px 70px -20px rgba(15,23,42,.5); transform: translateY(10px) scale(.98); transition: transform .2s cubic-bezier(.2,.9,.3,1.2); overflow: hidden; }
.el-backdrop.in .el-modal { transform: none; }
.el-modal-sm { max-width: 420px; } .el-modal-md { max-width: 560px; } .el-modal-lg { max-width: 860px; } .el-modal-xl { max-width: 1120px; height: 100%; max-height: 780px; }
.el-modal-head { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 14px 14px 10px 20px; border-bottom: 1px solid var(--el-line); }
.el-modal-head h3 { margin: 0; font-size: 17px; letter-spacing: -.01em; }
.el-modal-body { padding: 18px 20px; overflow: auto; flex: 1 1 auto; min-height: 0; -webkit-overflow-scrolling: touch; }
.el-modal-foot { display: flex; justify-content: flex-end; gap: 10px; flex-wrap: wrap; padding: 12px 20px calc(14px + var(--el-safe-b)); border-top: 1px solid var(--el-line); background: #fafbfd; }
.el-modal-msg { margin: 0; font-size: 15px; color: var(--el-ink2); }
@media (max-width: 640px) {
  .el-backdrop { align-items: flex-end; padding: 0; }
  .el-modal, .el-modal-sm, .el-modal-md, .el-modal-lg { max-width: none; border-radius: 22px 22px 0 0; max-height: 92%; transform: translateY(40px); }
  .el-modal-xl { height: 96%; max-height: 96%; border-radius: 22px 22px 0 0; }
  .el-modal-foot .el-btn { flex: 1 1 auto; }
}
.el-toasts { position: absolute; left: 0; right: 0; bottom: calc(18px + var(--el-safe-b)); z-index: 90; display: flex; flex-direction: column; align-items: center; gap: 8px; pointer-events: none; padding: 0 14px; }
.el-toast { max-width: 560px; padding: 11px 18px; border-radius: 12px; background: #0f172a; color: #fff; font-weight: 600; font-size: 14px; box-shadow: 0 12px 30px -10px rgba(0,0,0,.5); opacity: 0; transform: translateY(10px); transition: all .22s; }
.el-toast.in { opacity: 1; transform: none; }
.el-toast.has-ic { display: flex; align-items: center; gap: 9px; } .el-toast.has-ic svg { flex: none; }
.el-toast.is-error { background: #b91c1c; } .el-toast.is-ok { background: #15803d; }

/* ---- Paywall modal ---- */
.el-paywall .el-modal-body { padding: 26px 24px 8px; text-align: center; }
.el-pw-hero { position: relative; width: 70px; height: 70px; margin: 0 auto 14px; }
.el-pw-ic { width: 70px; height: 70px; border-radius: 22px; display: grid; place-items: center; background: linear-gradient(145deg, #eaf1ff, #dbe6ff); color: var(--el-primary-d); }
.el-pw-tag { position: absolute; right: -14px; bottom: -6px; display: inline-flex; align-items: center; gap: 4px; padding: 3px 9px; border-radius: 999px; background: #f59e0b; color: #fff; font: 800 11px var(--el-font); letter-spacing: .05em; box-shadow: 0 4px 10px -3px rgba(245,158,11,.7); }
.el-pw-title { margin: 6px 0 6px; font-size: 20px; letter-spacing: -.02em; }
.el-pw-lead { margin: 0 0 14px; color: var(--el-ink2); }
.el-pw-list { list-style: none; margin: 0 0 16px; padding: 14px 16px; background: #f5f8ff; border-radius: 14px; text-align: left; display: grid; gap: 9px; }
.el-pw-list li { display: flex; gap: 10px; align-items: flex-start; font-size: 14px; color: var(--el-ink2); }
.el-pw-list .el-ic { color: var(--el-ok); flex: 0 0 auto; margin-top: 1px; }
.el-pw-foot { margin: 0 0 8px; font-size: 13px; color: var(--el-mute); }
.el-pw-id { margin: 8px 0 6px; padding: 8px 10px; border-radius: 10px; background: #f1f5f9; color: var(--el-ink2); font-size: 12px; line-height: 1.5; text-align: left; } .el-pw-id code { font: 700 11.5px ui-monospace, Menlo, Consolas, monospace; background: #e2e8f0; padding: 1px 6px; border-radius: 5px; word-break: break-all; }

/* ---- Trang tổng quan (hub) ---- */
.el-hub { overflow-y: auto; -webkit-overflow-scrolling: touch; }
.el-hub-inner { width: 100%; max-width: 1180px; margin: 0 auto; padding: 26px 20px calc(30px + var(--el-safe-b)); }
.el-hub-head h1 { margin: 0 0 6px; font-size: clamp(22px, 3.4vw, 32px); letter-spacing: -.03em; }
.el-hub-head p { margin: 0 0 22px; max-width: 62ch; color: var(--el-mute); font-size: 15px; }
.el-hub-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 300px), 1fr)); gap: 16px; }
.el-hub-card { position: relative; display: flex; flex-direction: column; gap: 6px; padding: 20px 20px 18px; background: #fff; border: 1px solid var(--el-line); border-radius: 20px; text-decoration: none; color: inherit; overflow: hidden; transition: transform .16s, box-shadow .16s, border-color .16s; }
.el-hub-card::before { content: ''; position: absolute; left: 0; top: 0; bottom: 0; width: 5px; background: var(--c); }
.el-hub-card:hover { transform: translateY(-3px); box-shadow: 0 18px 34px -18px color-mix(in srgb, var(--c) 60%, transparent); border-color: color-mix(in srgb, var(--c) 45%, #fff); }
.el-hub-ic { width: 50px; height: 50px; border-radius: 15px; display: grid; place-items: center; color: #fff; background: var(--c); margin-bottom: 6px; }
.el-hub-card h3 { margin: 0; font-size: 18px; letter-spacing: -.02em; }
.el-hub-sub { margin: 0; font-weight: 650; color: var(--c); font-size: 13.5px; }
.el-hub-desc { margin: 2px 0 8px; color: var(--el-mute); font-size: 14px; flex: 1; }
.el-hub-badges { display: flex; flex-wrap: wrap; gap: 6px; }

/* ---- Bố cục dùng chung cho công cụ ---- */
.el-row { display: flex; align-items: center; gap: 10px; } .el-col { display: flex; flex-direction: column; gap: 10px; }
.el-grow { flex: 1 1 auto; min-width: 0; }
.el-panel { background: var(--el-panel); border: 1px solid var(--el-line); border-radius: var(--el-r-lg); box-shadow: var(--el-shadow); }
.el-scroll { overflow: auto; -webkit-overflow-scrolling: touch; min-height: 0; }
.el-noselect { user-select: none; -webkit-user-select: none; -webkit-touch-callout: none; }
.el-fade-in { animation: el-fade .25s ease-out both; }
@keyframes el-fade { from { opacity: 0; transform: translateY(6px); } to { opacity: 1; transform: none; } }
.el-host canvas { touch-action: manipulation; }

/* ---- Thanh header trên màn hình nhỏ ---- */
@media (max-width: 768px) {
  .el-bar { padding: 6px 10px; gap: 8px; min-height: 50px; }
  .el-bar-sub { display: none; }
  .el-bar-name { font-size: 15px; }
  .el-bar-ic { width: 30px; height: 30px; flex-basis: 30px; }
  .el-bar-login { display: none; }
  .el-bar-signup { min-height: 38px; padding: 0 12px; font-size: 13px; }
  .el-sandbox { font-size: 12px; padding: 6px 10px; }
  .el-hub-inner { padding: 18px 14px 26px; }
}
@media (max-width: 480px) { .el-bar-text { display: none; } } /* tên công cụ đã có ở thanh tab -> nhường chỗ cho nút thao tác */
@media (max-width: 420px) { .el-bar-signup { display: none; } .el-brand b { display: none; } }
@media (max-height: 480px) and (orientation: landscape) { /* điện thoại xoay ngang: dồn hết không gian cho công cụ */
  .el-bar { min-height: 42px; padding-top: 3px; padding-bottom: 3px; gap: 8px; }
  .el-bar-sub, .el-brand b, .el-bar-login, .el-bar-signup { display: none; }
  .el-tabs { padding-top: 2px; padding-bottom: 2px; } .el-tab { min-height: 34px; padding: 0 14px; } .el-tab span { display: none; }
  .el-tab.is-active span { display: inline; } .el-sandbox { display: none; }
}
@media (prefers-reduced-motion: reduce) { .el-host *, .el-host *::before, .el-host *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; } }

/* ---- Thư viện tài liệu dùng chung (Note, Cards) ---- */
.el-lib-modal .el-modal-body { padding: 0; overflow: hidden; display: flex; }
.el-lib { flex: 1; min-height: 0; display: grid; grid-template-columns: 220px minmax(0, 1fr); width: 100%; }
.el-lib-side { border-right: 1px solid var(--el-line); background: #f8fafc; padding: 12px 10px; overflow: auto; display: flex; flex-direction: column; gap: 2px; }
.el-lib-f { display: flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 10px; border: 0; border-radius: 10px; background: none; color: var(--el-ink2); font: 600 14px var(--el-font); cursor: pointer; text-align: left; }
.el-lib-f span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .el-lib-f em { font-style: normal; font-size: 11px; font-weight: 700; background: #e8edf5; border-radius: 999px; padding: 1px 8px; color: var(--el-mute); }
.el-lib-f:hover { background: #eef2f8; } .el-lib-f.is-on { background: var(--el-primary-soft); color: var(--el-primary-d); }
.el-lib-sep { height: 1px; background: var(--el-line); margin: 8px 4px; } .el-lib-hint { margin: 0; padding: 0 6px; font-size: 12px; color: var(--el-mute); line-height: 1.5; }
.el-lib-main { min-width: 0; min-height: 0; display: flex; flex-direction: column; padding: 14px 16px 0; gap: 10px; }
.el-lib-top { display: flex; align-items: center; gap: 10px; } .el-lib-search { position: relative; flex: 1; max-width: 360px; } .el-lib-search .el-ic { position: absolute; left: 11px; top: 12px; color: var(--el-mute); } .el-lib-search .el-input { padding-left: 34px; }
.el-lib-note { display: flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--el-mute); }
.el-lib-grid { flex: 1; display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; align-content: start; padding: 2px 2px 16px; }
.el-lib-card { display: flex; flex-direction: column; border: 1px solid var(--el-line); border-radius: 16px; background: #fff; overflow: hidden; transition: box-shadow .15s, border-color .15s; } .el-lib-card:hover { box-shadow: 0 10px 24px -14px rgba(15,23,42,.35); border-color: var(--el-line2); } .el-lib-card.is-cur { border-color: var(--el-primary); }
.el-lib-th { height: 130px; background: #eef2f7; display: grid; place-items: center; color: #94a3b8; overflow: hidden; } .el-lib-th img { width: 100%; height: 100%; object-fit: cover; object-position: top center; background: #fff; }
.el-lib-info { padding: 10px 12px 4px; display: flex; flex-direction: column; gap: 2px; min-width: 0; } .el-lib-info b { font-size: 15px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .el-lib-info .el-muted { font-size: 12px; } .el-lib-x { font-size: 12px; color: var(--el-ink2); }
.el-lib-act { display: flex; align-items: center; gap: 2px; padding: 6px 8px 10px 12px; } .el-lib-act .el-btn { margin-right: auto; } .el-lib-act .el-icon-btn { width: 32px; height: 32px; }
@container elv (max-width: 700px) { .el-lib { grid-template-columns: 1fr; } .el-lib-side { flex-direction: row; overflow-x: auto; border-right: 0; border-bottom: 1px solid var(--el-line); padding: 8px; } .el-lib-f { flex: 0 0 auto; } .el-lib-sep, .el-lib-hint { display: none; } }
@media (max-width: 700px) { .el-lib { grid-template-columns: 1fr; } .el-lib-side { flex-direction: row; overflow-x: auto; border-right: 0; border-bottom: 1px solid var(--el-line); padding: 8px; } .el-lib-f { flex: 0 0 auto; } .el-lib-sep, .el-lib-hint { display: none; } .el-lib-grid { grid-template-columns: 1fr 1fr; } .el-lib-th { height: 100px; } }


/* =============================================================================================
   Nút Back (kiểu tablet) · lối vào Thư viện ở hub · trang "Thư viện & Lịch sử" · ẩn thanh tiêu đề (Note)
   ============================================================================================= */
.el-back-btn { flex: 0 0 auto; width: 40px; height: 40px; border-radius: 12px; background: #f1f5f9; color: var(--el-ink); margin-right: -2px; }
.el-back-btn:hover { background: #e2e8f0; } .el-back-btn[hidden] { display: none; }
/* Note ở chế độ tự ẩn: thanh tiêu đề của khung nổi lên cùng thanh công cụ khi đưa chuột sát mép trên; tab + banner khách ẩn hẳn */
.el-host.is-note-auto > .el-tabs, .el-host.is-note-auto > .el-sandbox { display: none !important; }
.el-host.is-note-auto > .el-bar { position: absolute; left: 0; right: 0; top: 0; z-index: 70; box-shadow: 0 12px 30px rgba(15, 23, 42, .2); transform: translateY(-110%); opacity: 0; pointer-events: none; transition: transform .17s ease, opacity .14s ease; }
.el-host.is-note-auto.nt-top-open > .el-bar { transform: none; opacity: 1; pointer-events: auto; }
@media (prefers-reduced-motion: reduce) { .el-host.is-note-auto > .el-bar { transition: none; } }

.el-hub-lib { display: flex; align-items: center; gap: 14px; margin: 0 0 18px; padding: 14px 18px; background: linear-gradient(135deg, #eef2ff, #f5f3ff); border: 1px solid #c7d2fe; border-radius: 18px; color: var(--el-ink); text-decoration: none; transition: transform .15s, box-shadow .15s; }
.el-hub-lib:hover { transform: translateY(-1px); box-shadow: 0 8px 22px rgba(79,70,229,.14); }
.el-hub-lib-ic { width: 44px; height: 44px; flex: 0 0 44px; border-radius: 13px; background: #6366f1; color: #fff; display: grid; place-items: center; }
.el-hub-lib-tx { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; } .el-hub-lib-tx b { font-size: 16px; } .el-hub-lib-tx small { color: var(--el-mute); font-size: 13px; line-height: 1.4; }

.el-libpage { overflow: hidden; background: #f8fafc; }
.lp { display: flex; flex-direction: column; height: 100%; min-height: 0; max-width: 1180px; width: 100%; margin: 0 auto; }
.lp-top { display: flex; align-items: center; gap: 10px; padding: 14px 16px 6px; flex: 0 0 auto; }
.lp-search { position: relative; flex: 1; min-width: 0; } .lp-search > svg { position: absolute; left: 12px; top: 50%; transform: translateY(-50%); color: var(--el-mute); pointer-events: none; }
.lp-search .el-input { width: 100%; padding-left: 36px; height: 42px; border-radius: 12px; }
.lp-chips { display: flex; gap: 6px; padding: 8px 16px 6px; overflow-x: auto; flex: 0 0 auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; } .lp-chips::-webkit-scrollbar { display: none; }
.lp-chip { display: inline-flex; align-items: center; gap: 7px; flex: 0 0 auto; min-height: 40px; padding: 0 14px; border-radius: 999px; border: 1px solid var(--el-line); background: #fff; color: var(--el-ink2); font: 600 13.5px var(--el-font); cursor: pointer; }
.lp-chip em { font-style: normal; font-size: 11.5px; background: #f1f5f9; color: var(--el-mute); border-radius: 999px; padding: 1px 7px; }
.lp-chip.is-on { background: var(--c, var(--el-primary)); border-color: var(--c, var(--el-primary)); color: #fff; } .lp-chip.is-on em { background: rgba(255,255,255,.25); color: #fff; }
.lp-note { display: flex; align-items: center; gap: 7px; padding: 2px 18px 6px; font-size: 12.5px; color: var(--el-mute); flex: 0 0 auto; }
.lp-body { flex: 1 1 auto; min-height: 0; padding: 4px 16px calc(24px + var(--el-safe-b, 0px)); overflow-y: auto; -webkit-overflow-scrolling: touch; }
.lp-sec { margin-bottom: 22px; }
.lp-sh { display: flex; align-items: center; gap: 9px; margin: 6px 0 10px; } .lp-sh h3 { margin: 0; font-size: 16px; }
.lp-sic { width: 30px; height: 30px; border-radius: 9px; display: grid; place-items: center; color: var(--c); background: color-mix(in srgb, var(--c) 13%, #fff); }
.lp-sh em { font-style: normal; font-size: 12px; color: var(--el-mute); background: #eef2f7; padding: 1px 8px; border-radius: 999px; }
.lp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 420px), 1fr)); gap: 10px; }
.lp-card { display: flex; align-items: center; gap: 12px; padding: 10px 12px; background: #fff; border: 1px solid var(--el-line); border-radius: 16px; cursor: pointer; transition: border-color .15s, box-shadow .15s; min-width: 0; }
.lp-card:hover { border-color: color-mix(in srgb, var(--c) 55%, #fff); box-shadow: 0 6px 18px rgba(15,23,42,.08); }
.lp-th { width: 54px; height: 54px; flex: 0 0 54px; border-radius: 12px; overflow: hidden; display: grid; place-items: center; color: var(--c); background: color-mix(in srgb, var(--c) 11%, #fff); } .lp-th img { width: 100%; height: 100%; object-fit: cover; }
.lp-info { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; }
.lp-info b { font-size: 14.5px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lp-sub { font-size: 12.5px; color: var(--el-ink2); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.lp-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 4px 6px; font-size: 12px; color: var(--el-mute); } .lp-meta svg { vertical-align: -1px; }
.lp-tag, .lp-prog { display: inline-flex; align-items: center; gap: 3px; padding: 1px 8px; border-radius: 999px; background: color-mix(in srgb, var(--c) 12%, #fff); color: var(--c); font-weight: 600; font-size: 11.5px; }
.lp-act { display: flex; align-items: center; gap: 4px; flex: 0 0 auto; flex-wrap: wrap; justify-content: flex-end; max-width: 52%; }
.lp-empty { display: flex; align-items: center; justify-content: center; gap: 10px; padding: 22px 16px; border: 1.5px dashed #cbd5e1; border-radius: 16px; color: var(--el-mute); font-size: 13.5px; text-align: center; background: #fff; }
.lp-err { display: flex; align-items: center; gap: 7px; padding: 10px 12px; border-radius: 12px; background: #fff7ed; color: #9a3412; font-size: 13px; margin-bottom: 8px; }
.lp-modal .el-modal-body { display: flex; flex-direction: column; gap: 10px; max-height: 64vh; overflow-y: auto; }
.lp-dt { margin: 0; display: flex; align-items: center; gap: 6px; color: var(--el-mute); font-size: 13px; }
.lp-kpis { display: flex; gap: 10px; flex-wrap: wrap; } .lp-kpis > div { flex: 1 1 110px; display: flex; flex-direction: column; gap: 2px; padding: 12px 14px; background: #f8fafc; border: 1px solid var(--el-line); border-radius: 14px; } .lp-kpis b { font-size: 20px; word-break: break-word; } .lp-kpis span { font-size: 12px; color: var(--el-mute); }
.lp-rank { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 4px; }
.lp-rank li { display: flex; align-items: center; gap: 10px; padding: 8px 12px; border-radius: 11px; background: #f8fafc; } .lp-rank li > span { width: 26px; height: 26px; border-radius: 50%; background: #e2e8f0; display: grid; place-items: center; font-size: 12.5px; font-weight: 700; flex: 0 0 26px; } .lp-rank li b { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .lp-rank li em { font-style: normal; color: var(--el-ink2); font-size: 13px; }
.lp-rank li.top1 > span { background: #fde047; } .lp-rank li.top2 > span { background: #cbd5e1; } .lp-rank li.top3 > span { background: #fdba74; }
.lp-win { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-radius: 16px; background: linear-gradient(135deg, #fef9c3, #fef3c7); color: #92400e; } .lp-win > div { display: flex; flex-direction: column; gap: 1px; } .lp-win small { font-size: 12px; } .lp-win b { font-size: 22px; color: #78350f; } .lp-win span { font-size: 13px; }
.lp-h4 { margin: 6px 0 0; font-size: 13.5px; } .lp-chipsrow { display: flex; flex-wrap: wrap; gap: 6px; }
.lp-pill { padding: 4px 11px; border-radius: 999px; background: #f1f5f9; font-size: 13px; } .lp-pill.is-win { background: #fde68a; font-weight: 700; }
@media (max-width: 640px) { .lp-card { flex-wrap: wrap; } .lp-act { max-width: 100%; width: 100%; justify-content: flex-start; } .lp-top, .lp-chips, .lp-body { padding-left: 12px; padding-right: 12px; } }

/* Khung báo lỗi khi không nạp được công cụ (xem showLoadError trong eduls-shell.js) */
.el-loaderr { position: absolute; inset: 0; display: grid; place-items: center; padding: 20px; z-index: 6; }
.el-loaderr[hidden] { display: none; }
.el-loaderr-in { background: #fff; color: #1e1b4b; border-radius: 20px; padding: 26px 22px; max-width: 340px; text-align: center; box-shadow: 0 18px 50px rgba(0,0,0,.35); display: flex; flex-direction: column; align-items: center; gap: 10px; }
.el-loaderr-in h2 { margin: 0; font-size: 19px; } .el-loaderr-in p { margin: 0 0 4px; font-size: 14px; line-height: 1.45; color: #475569; }
.el-loaderr-in small { font-size: 11px; color: #94a3b8; word-break: break-all; }
.el-loaderr-ic { width: 54px; height: 54px; border-radius: 50%; display: grid; place-items: center; background: #fef3c7; color: #b45309; }

/* =============================================================================================
   Nút "Hướng dẫn" trên thanh tiêu đề + hộp hướng dẫn (dữ liệu mẫu chỉ nạp lần đầu — xem eduls-guide.js)
   ============================================================================================= */
.el-guide-btn { position: relative; flex: 0 0 auto; } .el-guide-btn[hidden] { display: none; }
.el-guide-dot { display: none; position: absolute; top: 3px; right: 3px; width: 8px; height: 8px; border-radius: 50%; background: var(--el-primary); box-shadow: 0 0 0 2px #fff; }
.el-guide-btn.is-new .el-guide-dot { display: block; }
@media (max-width: 640px) { .el-guide-btn span { display: none; } .el-guide-btn { padding-left: 9px; padding-right: 9px; } }
.el-guide-lead { margin: 0 0 12px; font-size: 14.5px; line-height: 1.55; color: var(--el-ink); }
.el-guide-steps { margin: 0 0 14px; padding-left: 22px; display: flex; flex-direction: column; gap: 8px; font-size: 14px; line-height: 1.55; color: var(--el-ink2); } .el-guide-steps li::marker { font-weight: 800; color: var(--el-primary); }
.el-guide-steps code { background: #eef2f7; border-radius: 6px; padding: 1px 6px; font-size: 12.5px; } .el-guide-steps kbd { background: #f1f5f9; border: 1px solid var(--el-line2); border-bottom-width: 2px; border-radius: 6px; padding: 0 6px; font: 700 12px var(--el-font); }
.el-guide-sample { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border: 1px dashed var(--el-line2); border-radius: 14px; background: #f8fafc; } .el-guide-sample > div { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 2px; } .el-guide-sample span { font-size: 12.5px; color: var(--el-mute); line-height: 1.45; }
.el-guide-foot { margin: 12px 2px 0; font-size: 12px; line-height: 1.5; }
@media (max-width: 480px) { .el-guide-sample { flex-direction: column; align-items: stretch; } }

/* =============================================================================================
   Thư viện dùng chung — sửa lỗi thẻ bị ép xẹp khi có nhiều mục; bấm thẻ để mở; chọn nhiều; kéo thả vào "phần"
   ============================================================================================= */
/* NGUYÊN NHÂN GỐC: .el-lib-grid là lưới có chiều cao cố định (flex) + thẻ có overflow:hidden ⇒ các hàng `auto` bị co về mức tối thiểu (~54px) khi có nhiều thẻ:
   mất ảnh xem trước, mất nút Mở / Chuyển phần, và vùng cuộn không còn gì để cuộn. Hàng luôn cao đúng bằng nội dung thẻ → danh sách dài thì CUỘN. */
.el-lib-grid { grid-auto-rows: max-content; min-height: 0; overflow-y: auto; overscroll-behavior: contain; }
.el-lib-card { position: relative; flex: 0 0 auto; min-height: 0; cursor: pointer; user-select: none; -webkit-user-select: none; }
.el-lib-card:focus-visible { outline: 3px solid var(--el-primary); outline-offset: 2px; }
.el-lib-card.is-picked { border-color: var(--el-primary); box-shadow: 0 0 0 2px var(--el-primary-soft), 0 10px 24px -14px rgba(15,23,42,.35); }
.el-lib-card.is-drag { opacity: .45; }
.el-lib-info b { line-height: 1.35; } .el-lib-info .el-muted { line-height: 1.4; }
.el-lib-pick { position: absolute; top: 8px; left: 8px; z-index: 2; width: 26px; height: 26px; display: grid; place-items: center; border-radius: 8px; background: rgba(255,255,255,.92); border: 1.5px solid var(--el-line2); cursor: pointer; opacity: 0; transition: opacity .12s; }
.el-lib-pick input { position: absolute; inset: 0; opacity: 0; margin: 0; cursor: pointer; }
.el-lib-pick i { width: 14px; height: 14px; border-radius: 4px; border: 2px solid #94a3b8; background: #fff; display: block; }
.el-lib-pick input:checked + i { background: var(--el-primary); border-color: var(--el-primary); box-shadow: inset 0 0 0 2px #fff; }
.el-lib-card:hover .el-lib-pick, .el-lib-card:focus-within .el-lib-pick, .el-lib-card.is-picked .el-lib-pick, .el-lib-grid:has(.is-picked) .el-lib-pick { opacity: 1; }
@media (pointer: coarse) { .el-lib-pick { opacity: 1; width: 32px; height: 32px; } }
.el-lib-bulk { display: flex; align-items: center; gap: 6px; padding: 6px 10px; border: 1px solid var(--el-primary); background: var(--el-primary-soft); border-radius: 12px; font-size: 13px; color: var(--el-primary-d); flex-wrap: wrap; } .el-lib-bulk[hidden] { display: none; }
.el-lib-danger { color: #b91c1c; }
.el-lib-f.is-drop { background: var(--el-primary-soft); outline: 2px dashed var(--el-primary); outline-offset: -2px; color: var(--el-primary-d); }
.el-lib-addf { margin-top: 4px; color: var(--el-primary-d); }
.el-fp-list { display: flex; flex-direction: column; gap: 4px; max-height: 240px; overflow: auto; margin: 4px 0 12px; }
.el-fp-it { display: flex; align-items: center; gap: 8px; min-height: 42px; padding: 0 12px; border: 1.5px solid var(--el-line2); border-radius: 12px; background: #fff; font: 600 14px var(--el-font); color: var(--el-ink2); cursor: pointer; text-align: left; }
.el-fp-it span { flex: 1; min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .el-fp-it:hover { background: #f1f5f9; } .el-fp-it.is-on { border-color: var(--el-primary); background: var(--el-primary-soft); color: var(--el-primary-d); }

/* EduLS Note: thanh tiêu đề + dải tab của khung được ẨN khi đang dùng Note — mọi nút (tên sổ, thư viện, Live, Quay lại, Hướng dẫn, Toàn màn hình, chuyển công cụ)
   đã gom vào MỘT capsule công cụ nổi trong trang. Nút gốc của khung vẫn còn trong DOM nên capsule bấm hộ được (#elBack, #elGuide, #elFsBtn, .el-tab). */
.el-host.is-note-compact > .el-bar, .el-host.is-note-compact > .el-tabs, .el-host.is-note-compact > .el-sandbox { display: none !important; }

/* ===== Dashboard mode: đồng bộ với Header chuẩn của hệ thống (.page-header-bar) =====
   Trang Hub: icon 36px nền nhạt + tiêu đề 20px/700, KHÔNG phụ đề, lưới công cụ sát ngay dưới thanh tiêu đề. */
.el-host[data-mode="dashboard"] .el-bar { padding-left: 24px; padding-right: 24px; }
.el-host[data-mode="dashboard"][data-tool="hub"] .el-bar { min-height: 60px; }
.el-host[data-mode="dashboard"][data-tool="hub"] .el-bar-ic { width: 36px; height: 36px; flex-basis: 36px; border-radius: 10px; }
.el-host[data-mode="dashboard"][data-tool="hub"] .el-bar-name { font-size: 20px; font-weight: 700; color: #0f172a; letter-spacing: 0; }
.el-host[data-mode="dashboard"] .el-hub-inner { padding-top: 20px; padding-left: 24px; padding-right: 24px; }
@media (max-width: 640px) {
  .el-host[data-mode="dashboard"] .el-bar { padding-left: 14px; padding-right: 14px; }
  .el-host[data-mode="dashboard"] .el-hub-inner { padding-top: 14px; padding-left: 14px; padding-right: 14px; }
  .el-host[data-mode="dashboard"][data-tool="hub"] .el-bar-name { font-size: 18px; }
}

/* =============================================================================================
   MENU CHUỘT PHẢI (core/ContextMenuHandler.js) + THANH CLIPBOARD ẢO NỔI
   Cỡ dòng dùng chuẩn control thu nhỏ (--ctl-h-sm: 32px, cảm ứng 36px).
   ============================================================================================= */
.cm-menu { position: fixed; z-index: 120; min-width: 224px; max-width: min(320px, calc(100vw - 16px)); overflow-y: auto; padding: 6px; background: rgba(255,255,255,.94); -webkit-backdrop-filter: blur(14px) saturate(1.4); backdrop-filter: blur(14px) saturate(1.4); border: 1px solid rgba(15,23,42,.1); border-radius: 12px; box-shadow: 0 14px 38px rgba(15,23,42,.22), 0 2px 6px rgba(15,23,42,.08); font-family: var(--el-font, inherit); outline: none; opacity: 0; transform: scale(.97); transform-origin: top left; transition: opacity .1s ease, transform .1s ease; }
.cm-menu.in { opacity: 1; transform: none; }
.cm-it { display: flex; align-items: center; gap: 10px; width: 100%; min-height: var(--ctl-h-sm, 32px); padding: 0 10px; border: 0; border-radius: 8px; background: transparent; color: var(--el-ink, #0f172a); font: 600 13.5px var(--el-font, inherit); text-align: left; cursor: pointer; white-space: nowrap; }
.cm-it:hover:not([disabled]), .cm-it.is-active:not([disabled]), .cm-it:focus-visible { background: var(--el-primary, #2563eb); color: #fff; outline: none; }
.cm-it[disabled] { opacity: .42; cursor: default; }
.cm-ic { flex: 0 0 18px; display: inline-grid; place-items: center; line-height: 0; color: var(--el-ink2, #475569); } .cm-it:hover:not([disabled]) .cm-ic, .cm-it.is-active:not([disabled]) .cm-ic, .cm-it:focus-visible .cm-ic { color: inherit; }
.cm-lb { flex: 1 1 auto; overflow: hidden; text-overflow: ellipsis; }
.cm-it kbd { flex: 0 0 auto; margin-left: 18px; font: 500 12px var(--el-font, inherit); color: var(--el-ink3, #94a3b8); } .cm-it:hover:not([disabled]) kbd, .cm-it.is-active:not([disabled]) kbd { color: rgba(255,255,255,.78); }
.cm-it.is-danger { color: #dc2626; } .cm-it.is-danger:hover:not([disabled]), .cm-it.is-danger.is-active:not([disabled]), .cm-it.is-danger:focus-visible { background: #dc2626; color: #fff; }
.cm-it.is-danger .cm-ic { color: inherit; }
.cm-sep { height: 1px; margin: 5px 6px; background: rgba(15,23,42,.09); }
.cm-stash { position: absolute; left: 16px; bottom: calc(72px + var(--el-safe-b, 0px)); /* nằm trên vùng thông báo (toast) để không chồng lên nhau */ z-index: 45; display: flex; align-items: center; gap: 10px; max-width: min(calc(100% - 32px), 560px); padding: 6px 6px 6px 8px; border-radius: 14px; background: rgba(15,23,42,.8); -webkit-backdrop-filter: blur(10px) saturate(1.3); backdrop-filter: blur(10px) saturate(1.3); color: #fff; font: 600 13.5px var(--el-font, inherit); box-shadow: 0 10px 30px rgba(15,23,42,.3); opacity: 0; transform: translateY(8px); transition: opacity .18s ease, transform .18s ease; pointer-events: auto; }
.cm-stash.in { opacity: 1; transform: none; }
.cm-st-mode { flex: 0 0 auto; padding: 4px 10px; border-radius: 999px; background: rgba(255,255,255,.18); font-size: 12px; font-weight: 700; }
.cm-st-tx { min-width: 0; line-height: 1.35; } .cm-st-tx b { font-weight: 800; }
.cm-st-x { flex: 0 0 auto; min-height: var(--ctl-h-sm, 32px); padding: 0 14px; border: 1px solid rgba(255,255,255,.35); border-radius: 9px; background: transparent; color: #fff; font: 700 13px var(--el-font, inherit); cursor: pointer; } .cm-st-x:hover { background: rgba(255,255,255,.16); }
@media (max-width: 760px) { .cm-stash { left: 8px; right: 8px; max-width: none; bottom: calc(128px + var(--el-safe-b, 0px)); } }  /* chừa chỗ cho thanh tab dưới của Bank / Note (điện thoại) */
@media (prefers-reduced-motion: reduce) { .cm-menu, .cm-stash { transition: none; } }
/* nút ⋮ mở cùng menu ngữ cảnh — cần cho điện thoại/tablet không có chuột phải */
.cm-more { display: inline-grid; place-items: center; width: var(--ctl-h-sm, 32px); height: var(--ctl-h-sm, 32px); padding: 0; border: 0; border-radius: 9px; background: transparent; color: var(--el-ink2, #475569); cursor: pointer; flex: 0 0 auto; touch-action: manipulation; }
.cm-more:hover, .cm-more[aria-expanded="true"] { background: #eef2f7; color: var(--el-ink, #0f172a); }

/* ---- Thư viện: menu chuột phải / Cắt-Dán (core/ContextMenuHandler.js) ---- */
.el-lib-modal { position: relative; }
.el-lib-card.is-cut { opacity: .5; } .el-lib-card.is-ctx { outline: 2px solid #93c5fd; outline-offset: -2px; } .el-lib-f.is-ctx { background: #eef2f7; outline: 2px solid #93c5fd; outline-offset: -2px; }
.el-lib-act .cm-more { margin-left: 2px; } .el-lib-bulk .cm-more { margin-left: 4px; }
.lp-card.is-ctx { outline: 2px solid #93c5fd; outline-offset: -2px; }
@media (pointer: coarse) { .cm-it kbd { display: none; } } /* điện thoại/tablet không có bàn phím: ẩn gợi ý phím tắt */

/* =============================================================================================
   BẢNG CÔNG THỨC (core/MathPalette.js): nút "Công thức" + bảng ô render/mã LaTeX/màu + thanh xem trước tại con trỏ
   ============================================================================================= */
.mp-panel { position: fixed; z-index: 130; display: flex; flex-direction: column; max-height: min(74vh, 660px); background: #fff; border: 1px solid rgba(15,23,42,.12); border-radius: 14px; box-shadow: 0 18px 50px rgba(15,23,42,.26), 0 2px 8px rgba(15,23,42,.08); font-family: var(--el-font, inherit); color: var(--el-ink, #0f172a); overflow: hidden; }
.mp-hd { display: flex; align-items: center; gap: 10px; padding: 10px 14px; border-bottom: 1px solid #eef2f7; } .mp-hd b { font-size: 15px; } .mp-hint { font-size: 12px; color: var(--el-ink3, #94a3b8); }
.mp-x { width: var(--ctl-h-sm, 32px); height: var(--ctl-h-sm, 32px); border: 0; border-radius: 9px; background: transparent; font-size: 22px; line-height: 1; color: var(--el-ink2, #475569); cursor: pointer; } .mp-x:hover { background: #eef2f7; }
.mp-tabs { display: flex; gap: 4px; padding: 8px 10px 0; overflow-x: auto; flex: 0 0 auto; border-bottom: 1px solid #eef2f7; }
.mp-tabs button { flex: 0 0 auto; min-height: var(--ctl-h-sm, 32px); padding: 0 12px; border: 0; border-bottom: 2px solid transparent; border-radius: 9px 9px 0 0; background: transparent; color: var(--el-ink2, #475569); font: 650 13px var(--el-font, inherit); cursor: pointer; white-space: nowrap; }
.mp-tabs button:hover { background: #f1f5f9; } .mp-tabs button.is-on { color: var(--el-primary, #2563eb); border-bottom-color: var(--el-primary, #2563eb); background: #eff6ff; }
.mp-opts { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; padding: 8px 14px; border-bottom: 1px solid #eef2f7; background: #f8fafc; flex: 0 0 auto; }
.mp-ol { font-size: 12.5px; font-weight: 650; color: var(--el-ink2, #475569); } .mp-sw { display: inline-flex; align-items: center; gap: 6px; }
.mp-swb { width: 24px; height: 24px; padding: 0; border: 2px solid #fff; border-radius: 50%; background: var(--c); color: #fff; font: 800 11px var(--el-font, inherit); box-shadow: 0 0 0 1px #cbd5e1; cursor: pointer; } .mp-swb.is-on { box-shadow: 0 0 0 2px var(--el-primary, #2563eb); }
.mp-cust { position: relative; width: 24px; height: 24px; border-radius: 50%; overflow: hidden; box-shadow: 0 0 0 1px #cbd5e1; background: conic-gradient(#f43f5e, #f59e0b, #22c55e, #3b82f6, #a855f7, #f43f5e); cursor: pointer; } .mp-cust input { position: absolute; inset: -6px; width: 40px; height: 40px; opacity: 0; cursor: pointer; }
.mp-btn2 { min-height: var(--ctl-h-sm, 32px); padding: 0 12px; border: 1px solid #cbd5e1; border-radius: 9px; background: #fff; color: var(--el-ink, #0f172a); font: 650 12.5px var(--el-font, inherit); cursor: pointer; } .mp-btn2:hover { border-color: var(--el-primary, #2563eb); color: var(--el-primary, #2563eb); }
.mp-seg { display: inline-flex; border: 1px solid #cbd5e1; border-radius: 9px; overflow: hidden; } .mp-seg button { min-height: var(--ctl-h-sm, 32px); padding: 0 10px; border: 0; background: #fff; font: 650 12.5px ui-monospace, SFMono-Regular, Menlo, monospace; color: var(--el-ink2, #475569); cursor: pointer; } .mp-seg button.is-on { background: var(--el-primary, #2563eb); color: #fff; }
.mp-auto { display: inline-flex; align-items: center; gap: 6px; font-size: 12.5px; color: var(--el-ink2, #475569); cursor: pointer; }
.mp-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(112px, 1fr)); gap: 8px; padding: 12px 14px; overflow: auto; flex: 1 1 auto; min-height: 120px; align-content: start; }
.mp-wait { grid-column: 1 / -1; padding: 20px; text-align: center; color: var(--el-ink3, #94a3b8); font-size: 13px; }
.mp-cell { display: flex; flex-direction: column; align-items: center; justify-content: space-between; gap: 6px; min-height: 78px; padding: 8px 6px; border: 1px solid #e2e8f0; border-radius: 10px; background: #fff; cursor: pointer; transition: border-color .12s, background .12s, transform .06s; }
.mp-cell:hover, .mp-cell:focus-visible { border-color: var(--el-primary, #2563eb); background: #eff6ff; outline: none; } .mp-cell:active { transform: scale(.97); }
.mp-r { display: flex; align-items: center; justify-content: center; min-height: 32px; max-width: 100%; overflow: hidden; font-size: 19px; }
.mp-c { max-width: 100%; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; font: 11px/1.25 ui-monospace, SFMono-Regular, Menlo, monospace; color: #64748b; }
.mp-ft { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; padding: 10px 14px; border-top: 1px solid #eef2f7; flex: 0 0 auto; background: #fff; }
.mp-code { flex: 1 1 220px; min-width: 0; height: var(--ctl-h-sm, 32px); padding: 0 10px; border: 1px solid #cbd5e1; border-radius: 8px; font: 13px ui-monospace, SFMono-Regular, Menlo, monospace; } .mp-code:focus { outline: 2px solid #93c5fd; border-color: #93c5fd; }
.mp-prev { display: inline-flex; align-items: center; min-width: 90px; min-height: 28px; font-size: 17px; } .mp-prev.is-err, .mp-raw { color: #dc2626; font-size: 12px; }
.mp-panel.is-sheet { left: 0; right: 0; top: auto; bottom: 0; width: 100% !important; max-height: 68vh; border-radius: 16px 16px 0 0; } .mp-panel.is-sheet .mp-hint { display: none; }
.mp-live { display: flex; align-items: baseline; gap: 12px; margin-top: 8px; padding: 8px 12px; min-height: 42px; border: 1px dashed #cbd5e1; border-radius: 10px; background: #f8fafc; overflow-x: auto; }
.mp-lh { flex: 0 0 auto; font-size: 11.5px; font-weight: 700; letter-spacing: .02em; color: var(--el-ink3, #94a3b8); text-transform: uppercase; } .mp-lr { font-size: 18px; } .mp-lm { font-size: 12.5px; color: var(--el-ink3, #94a3b8); }
.mp-live.is-err { border-color: #fca5a5; background: #fef2f2; } .mp-live.is-err .mp-lh, .mp-live.is-err .mp-lm { color: #dc2626; }
.mp-btn { gap: 6px; }
@media (pointer: coarse) { .mp-cell { min-height: 84px; } }
