/* Komponentlar. Har biri faqat tokenlardan foydalanadi. */

/* ---------- Tugmalar ---------- */
.btn{
  display:inline-flex; align-items:center; justify-content:center; gap:10px;
  min-height:44px; padding:0 18px; border-radius:var(--r-md);
  border:1.5px solid transparent; background:transparent;
  font-weight:700; font-size:15px; line-height:1; white-space:nowrap;
  text-decoration:none; transition:background .15s var(--ease),border-color .15s var(--ease),transform .1s var(--ease);
}
.btn:active{transform:translateY(1px)}
.btn[disabled],.btn[aria-disabled="true"]{opacity:.5;pointer-events:none}
.btn svg{width:18px;height:18px;flex:0 0 auto}
.btn-primary{background:var(--primary);color:var(--on-primary)}
.btn-primary:hover{background:var(--primary-hover);color:var(--on-primary)}
.btn-secondary{background:var(--surface);color:var(--text);border-color:var(--border)}
.btn-secondary:hover{border-color:var(--border-strong);color:var(--text)}
.btn-ghost{color:var(--text-2)}
.btn-ghost:hover{background:var(--surface-2);color:var(--text)}
.btn-ink{background:var(--ink);color:var(--on-ink)}
.btn-ink:hover{opacity:.92;color:var(--on-ink)}
.btn-danger{background:var(--danger-soft);color:var(--danger)}
.btn-sm{min-height:36px;padding:0 12px;font-size:13px;border-radius:var(--r-sm)}
.btn-lg{min-height:52px;padding:0 26px;font-size:16px;border-radius:16px}
.btn-block{width:100%}
.btn-icon{width:44px;padding:0}

/* ---------- Kartalar ---------- */
.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r-2xl);padding:var(--s-6)}
.card-sm{border-radius:var(--r-xl);padding:var(--s-5)}
.card-ink{background:var(--ink);color:var(--on-ink);border-color:transparent}
.card-ink .muted{color:var(--on-ink-2)}
.card-soft{background:var(--primary-soft);border-color:transparent;color:var(--primary-soft-text)}
.card-link{display:flex;gap:14px;align-items:center;color:var(--text);transition:border-color .15s var(--ease),transform .15s var(--ease)}
.card-link:hover{border-color:var(--primary-400);color:var(--text);transform:translateY(-2px)}
.card-title{font-size:14px;font-weight:700;color:var(--text-2)}
.card-ink .card-title{color:var(--on-ink-2)}

/* ---------- Badge / chip ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;padding:5px 10px;border-radius:999px;font-size:12px;font-weight:700;line-height:1.2;background:var(--surface-2);color:var(--text-2)}
.badge-primary{background:var(--primary-soft);color:var(--primary-soft-text)}
.badge-success{background:var(--success-soft);color:var(--success)}
.badge-warning{background:var(--warning-soft);color:var(--warning)}
.badge-caution{background:var(--caution-soft);color:var(--caution)}
.badge-danger{background:var(--danger-soft);color:var(--danger)}
.badge-ink{background:var(--ink);color:var(--on-ink)}

/* ---------- Icon box ---------- */
.icon-box{width:48px;height:48px;flex:0 0 48px;border-radius:14px;display:flex;align-items:center;justify-content:center;background:var(--primary-soft);color:var(--primary)}
.icon-box svg{width:22px;height:22px}
.icon-box.accent{background:var(--accent-soft);color:var(--accent)}
.icon-box.warning{background:var(--warning-soft);color:var(--warning)}
.icon-box.success{background:var(--success-soft);color:var(--success)}

/* ---------- Stat ---------- */
.stat-value{font-size:40px;font-weight:800;line-height:1;letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.stat-hero{font-size:88px;font-weight:800;line-height:1;letter-spacing:-.04em;font-variant-numeric:tabular-nums}
.stat-unit{font-size:20px;font-weight:600;color:var(--text-3)}
@media (max-width:600px){ .stat-hero{font-size:64px} }

/* ---------- Progress ---------- */
.progress{height:8px;border-radius:999px;background:var(--surface-2);overflow:hidden;border:1px solid var(--border)}
.progress > span{display:block;height:100%;border-radius:inherit;background:var(--primary);transition:width .6s var(--ease)}
.progress-lg{height:14px}
.scale{display:flex;height:14px;border-radius:8px;overflow:hidden;background:var(--surface-2)}
.scale > span{display:block;height:100%}
.scale-labels{display:flex;justify-content:space-between;gap:4px;font-size:12px;font-weight:600;color:var(--text-2);white-space:nowrap}
@media (max-width:600px){ .scale-labels .lbl{display:none} }

/* ---------- Formalar ---------- */
.field{display:flex;flex-direction:column;gap:6px}
.label{font-size:14px;font-weight:700;color:var(--text)}
.hint{font-size:13px;color:var(--text-3)}
.error-text{font-size:13px;color:var(--danger);font-weight:600}
.input,.select,.textarea{
  width:100%; min-height:48px; padding:0 14px;
  border-radius:var(--r-md); border:1.5px solid var(--border); background:var(--surface);
  transition:border-color .15s var(--ease);
}
.textarea{padding:12px 14px;min-height:96px;resize:vertical}
.input:hover,.select:hover{border-color:var(--border-strong)}
.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--primary);box-shadow:var(--focus)}
.field.invalid .input,.field.invalid .select{border-color:var(--danger)}

/* ---------- Test javob varianti ---------- */
.option{
  position:relative; display:flex; align-items:center; gap:12px;
  min-height:56px; padding:12px 16px; border-radius:var(--r-lg);
  background:var(--surface); border:1.5px solid var(--border); cursor:pointer;
  font-weight:600; transition:border-color .15s var(--ease),background .15s var(--ease);
}
.option input{position:absolute;opacity:0;pointer-events:none}
.option:hover{border-color:var(--primary-400)}
.option .key{width:32px;height:32px;flex:0 0 32px;border-radius:10px;border:1.5px solid var(--border-strong);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:800;color:var(--text-2)}
.option.selected,.option:has(input:checked){background:var(--primary);border-color:var(--primary);color:var(--on-primary)}
.option.selected .key,.option:has(input:checked) .key{background:var(--on-primary);border-color:var(--on-primary);color:var(--primary)}
.option:has(input:focus-visible){box-shadow:var(--focus)}
/* Tekshirilgan holat "tanlangan" uslubidan ustun turishi kerak */
.option.correct,.option.correct:has(input:checked){background:var(--success-soft);border-color:var(--success);color:var(--text)}
.option.correct .key,.option.correct:has(input:checked) .key{background:var(--success);border-color:var(--success);color:#fff}
.option.wrong,.option.wrong:has(input:checked){background:var(--danger-soft);border-color:var(--danger);color:var(--text)}
.option.wrong .key,.option.wrong:has(input:checked) .key{background:var(--danger);border-color:var(--danger);color:#fff}

/* ---------- Kod bloki ---------- */
.code{margin:0;padding:14px 16px;border-radius:var(--r-md);background:#111827;color:#E5E7EB;font-size:13.5px;line-height:1.65;overflow-x:auto;white-space:pre}
:root[data-theme="dark"] .code{background:#0A0E17;border:1px solid var(--border)}

/* ---------- Jadval ---------- */
.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--r-xl);background:var(--surface)}
.table{width:100%;border-collapse:collapse;font-size:14px}
.table th{text-align:left;font-size:12px;font-weight:700;color:var(--text-3);text-transform:uppercase;letter-spacing:.04em;padding:12px 16px;border-bottom:1px solid var(--border);white-space:nowrap}
.table td{padding:14px 16px;border-bottom:1px solid var(--border);vertical-align:middle}
.table tr:last-child td{border-bottom:0}
.table tbody tr:hover{background:var(--surface-2)}

/* ---------- Tablar ---------- */
.tabs{display:inline-flex;gap:4px;padding:4px;border-radius:var(--r-md);background:var(--surface-2);border:1px solid var(--border)}
.tab{min-height:36px;padding:0 14px;border:0;border-radius:10px;background:transparent;font-weight:700;font-size:14px;color:var(--text-2)}
.tab-link{display:inline-flex;align-items:center;color:var(--text-2)}
.tab-link:hover{color:var(--text)}
.tab[aria-selected="true"]{background:var(--surface);color:var(--text);box-shadow:0 1px 2px rgba(17,24,39,.08)}

/* ---------- Avatar ---------- */
.avatar{width:38px;height:38px;flex:0 0 38px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:14px;background:var(--accent-soft);color:var(--accent)}

/* ---------- Modal ---------- */
.modal-backdrop{position:fixed;inset:0;z-index:50;background:rgba(11,15,26,.55);display:flex;align-items:center;justify-content:center;padding:16px;animation:fade .15s var(--ease)}
.modal{width:100%;max-width:460px;background:var(--surface);border-radius:var(--r-2xl);padding:var(--s-6);box-shadow:var(--shadow-pop);display:flex;flex-direction:column;gap:16px;animation:pop .18s var(--ease)}
.modal-actions{display:flex;justify-content:flex-end;gap:10px;flex-wrap:wrap}

/* ---------- Toast ---------- */
.toast-region{position:fixed;z-index:60;right:16px;bottom:16px;display:flex;flex-direction:column;gap:10px;max-width:min(380px,calc(100vw - 32px))}
.toast{display:flex;gap:12px;align-items:flex-start;padding:14px 16px;border-radius:var(--r-lg);background:var(--ink);color:var(--on-ink);box-shadow:var(--shadow-pop);font-size:14px;font-weight:600;animation:slide-up .2s var(--ease)}
.toast svg{width:18px;height:18px;flex:0 0 18px;margin-top:1px}

/* ---------- Skeleton / bo'sh holat ---------- */
.skeleton{border-radius:var(--r-sm);background:linear-gradient(90deg,var(--surface-2),var(--border),var(--surface-2));background-size:200% 100%;animation:shimmer 1.2s infinite linear;min-height:14px}
.empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:10px;padding:40px 20px;color:var(--text-2)}
.empty .icon-box{width:56px;height:56px}

@keyframes fade{from{opacity:0}to{opacity:1}}
@keyframes pop{from{opacity:0;transform:scale(.96)}to{opacity:1;transform:none}}
@keyframes slide-up{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
@keyframes shimmer{from{background-position:200% 0}to{background-position:-200% 0}}

/* Matnli tugma (havola ko'rinishida) */
.link-btn{display:inline-flex;align-items:center;gap:6px;align-self:flex-start;min-height:32px;padding:0;border:0;background:none;color:var(--text-2);font-size:13px;font-weight:600;text-decoration:underline;text-underline-offset:3px}
.link-btn:hover{color:var(--text)}

/* Belgilash katagi (yorliq bilan) */
.check{display:inline-flex;align-items:center;gap:8px;font-size:14px;font-weight:600;color:var(--text-2);cursor:pointer;align-self:flex-start}
.check input{width:18px;height:18px;accent-color:var(--primary)}
