/* ============================================================
   components.css — Buttons · Cards · Badges · Tables · Forms
   Modals · Toasts · Progress · Tabs · Toggles · Empty States
   ============================================================ */

/* ---------- Buttons ---------- */
.btn{
  display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:9px 16px;border-radius:11px;font-size:13px;font-weight:650;
  border:1px solid transparent;cursor:pointer;white-space:nowrap;
  transition:all var(--t-fast);user-select:none;
}
.btn svg{width:15px;height:15px;flex-shrink:0}
.btn:active{transform:scale(.97)}
.btn:disabled{opacity:.5;cursor:not-allowed}
.btn-primary{background:var(--grad);color:#fff;box-shadow:0 3px 12px rgba(0,0,0,.30)}
.btn-primary:hover{filter:brightness(1.1);box-shadow:0 4px 14px rgba(0,0,0,.36)}
.btn-ghost{background:var(--panel-2);color:var(--text);border-color:var(--line)}
.btn-ghost:hover{border-color:var(--brand);color:var(--brand)}
.btn-danger{background:var(--red-soft);color:var(--red);border-color:rgba(240,86,109,.3)}
.btn-danger:hover{background:rgba(240,86,109,.22)}
.btn-success{background:var(--green-soft);color:var(--green);border-color:rgba(47,191,143,.3)}
.btn-sm{padding:6px 12px;font-size:12px;border-radius:9px}
.btn-xs{padding:4px 10px;font-size:11.5px;border-radius:8px}
.btn-block{width:100%}

/* ---------- Cards ---------- */
.card{
  background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);
  padding:18px;transition:border var(--t-fast), box-shadow var(--t-fast), transform var(--t-fast);
}
.card.hoverable:hover{border-color:var(--line-2);box-shadow:var(--shadow-sm);transform:translateY(-2px)}
.card-title{font-size:14.5px;font-weight:700;display:flex;align-items:center;gap:9px}
.card-title svg{width:17px;height:17px;color:var(--brand)}

/* ---------- Stat Cards ---------- */
.stat-card{position:relative;overflow:hidden}
.stat-card .sc-top{display:flex;align-items:center;justify-content:space-between;margin-bottom:12px}
.stat-card .sc-ico{
  width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;flex-shrink:0;
}
.stat-card .sc-ico svg{width:19px;height:19px}
.sc-brand{background:var(--brand-soft);color:var(--brand)} .sc-green{background:var(--green-soft);color:var(--green)}
.sc-red{background:var(--red-soft);color:var(--red)} .sc-amber{background:var(--amber-soft);color:var(--amber)}
.sc-cyan{background:var(--cyan-soft);color:var(--cyan)} .sc-purple{background:var(--purple-soft);color:var(--purple)}
.stat-card .sc-value{font-size:26px;font-weight:800;font-variant-numeric:tabular-nums;line-height:1.15}
.stat-card .sc-label{font-size:12.5px;color:var(--muted);margin-top:2px}
.delta{display:inline-flex;align-items:center;gap:3px;font-size:11.5px;font-weight:700;border-radius:8px;padding:2px 8px}
.delta.up{color:var(--green);background:var(--green-soft)}
.delta.down{color:var(--red);background:var(--red-soft)}
.delta svg{width:11px;height:11px}

/* ---------- Badges (Icon + Label — لا اعتماد على اللون وحده) ---------- */
.badge{
  display:inline-flex;align-items:center;gap:6px;padding:3px 11px;border-radius:20px;
  font-size:11.5px;font-weight:650;white-space:nowrap;line-height:1.6;
}
.badge .bd{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.badge svg{width:11px;height:11px;flex-shrink:0}
.bg-green{background:var(--green-soft);color:var(--green)} .bg-green .bd{background:var(--green)}
.bg-red{background:var(--red-soft);color:var(--red)} .bg-red .bd{background:var(--red)}
.bg-amber{background:var(--amber-soft);color:var(--amber)} .bg-amber .bd{background:var(--amber)}
.bg-blue{background:var(--brand-soft);color:var(--brand)} .bg-blue .bd{background:var(--brand)}
.bg-cyan{background:var(--cyan-soft);color:var(--cyan)} .bg-cyan .bd{background:var(--cyan)}
.bg-purple{background:var(--purple-soft);color:var(--purple)} .bg-purple .bd{background:var(--purple)}
.bg-gray{background:var(--gray-soft);color:var(--muted)} .bg-gray .bd{background:var(--gray)}

/* ---------- Tables ---------- */
.table-wrap{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);overflow:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:13px;min-width:640px}
.tbl th{
  color:var(--muted);font-weight:650;font-size:11.5px;text-align:right;padding:12px 16px;
  border-bottom:1px solid var(--line);background:var(--panel-2);white-space:nowrap;
  position:sticky;top:0;z-index:2;
}
.tbl td{padding:13px 16px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tbody tr{transition:background var(--t-fast)}
.tbl tbody tr:hover{background:color-mix(in srgb,var(--brand) 4%,transparent)}
.tbl tbody tr:last-child td{border-bottom:none}
.tbl .cell-main{font-weight:650}
.tbl .cell-sub{font-size:11.5px;color:var(--muted)}
.row-actions{display:flex;gap:6px;justify-content:flex-end}

/* ---------- Forms ---------- */
.field{margin-bottom:16px}
.field label{display:block;font-size:12.5px;font-weight:600;color:var(--muted);margin-bottom:6px}
.field label .req{color:var(--red)}
.input,.select,.textarea{
  width:100%;background:var(--input-bg);border:1px solid var(--line);border-radius:11px;
  padding:10px 13px;font-size:13.5px;color:var(--text);outline:none;
  transition:border var(--t-fast),box-shadow var(--t-fast);
}
.input:focus,.select:focus,.textarea:focus{border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-soft)}
.input::placeholder,.textarea::placeholder{color:var(--muted-2)}
.textarea{resize:vertical;min-height:90px;line-height:1.7}
.select{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%238f99ae' stroke-width='2.5'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:left 12px center;padding-inline-end:13px;padding-left:32px;cursor:pointer}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.form-hint{font-size:11.5px;color:var(--muted-2);margin-top:5px}

/* Toggle Switch */
.toggle{position:relative;width:42px;height:24px;flex-shrink:0;cursor:pointer}
.toggle input{position:absolute;opacity:0;width:100%;height:100%;cursor:pointer;margin:0}
.toggle .tk{position:absolute;inset:0;background:var(--line-2);border-radius:20px;transition:background var(--t-fast)}
.toggle .tk::after{content:'';position:absolute;top:3px;inset-inline-start:3px;width:18px;height:18px;border-radius:50%;background:#fff;transition:transform var(--t-fast);box-shadow:0 1px 4px rgba(0,0,0,.3)}
.toggle input:checked + .tk{background:var(--brand)}
.toggle input:checked + .tk::after{transform:translateX(-18px)}
.toggle input:focus-visible + .tk{outline:2px solid var(--brand);outline-offset:2px}

/* Check list */
.check-list{display:flex;flex-direction:column;gap:2px;max-height:230px;overflow-y:auto;border:1px solid var(--line);border-radius:11px;padding:8px;background:var(--input-bg)}
.check-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;cursor:pointer;font-size:13px;transition:background var(--t-fast)}
.check-item:hover{background:var(--panel-2)}
.check-item input{width:16px;height:16px;accent-color:var(--brand);cursor:pointer;flex-shrink:0}

/* ---------- Tabs & Chips ---------- */
.tabs{display:flex;gap:4px;background:var(--panel-2);border:1px solid var(--line);border-radius:12px;padding:4px;width:max-content;max-width:100%;overflow-x:auto}
.tab{padding:7px 16px;border-radius:9px;font-size:12.5px;font-weight:600;color:var(--muted);cursor:pointer;white-space:nowrap;transition:all var(--t-fast)}
.tab:hover{color:var(--text)}
.tab.active{background:var(--panel);color:var(--brand);box-shadow:var(--shadow-sm)}
.chips{display:flex;gap:8px;flex-wrap:wrap}
.chip{
  padding:6px 14px;border-radius:20px;background:var(--panel);border:1px solid var(--line);
  color:var(--muted);font-size:12.5px;cursor:pointer;transition:all var(--t-fast);white-space:nowrap;
}
.chip:hover{border-color:var(--brand)}
.chip.active{background:var(--brand-soft);color:var(--brand);border-color:var(--brand);font-weight:650}
.chip .n{opacity:.75;font-size:11px}

/* ---------- Progress ---------- */
.progress{height:8px;background:var(--panel-3);border-radius:10px;overflow:hidden;position:relative}
.progress .fill{height:100%;background:var(--grad);border-radius:10px;transition:width .6s cubic-bezier(.22,.8,.3,1)}
.progress.striped .fill{background:repeating-linear-gradient(-55deg,var(--brand) 0 10px,var(--brand-2) 10px 20px);background-size:200% 100%;animation:stripes 1.1s linear infinite}
@keyframes stripes{to{background-position:-28px 0}}
.progress-label{display:flex;justify-content:space-between;font-size:11.5px;color:var(--muted);margin-bottom:5px}

/* Ring progress */
.ring{transform:rotate(-90deg)}
.ring .track{stroke:var(--panel-3)}
.ring .val{stroke:url(#ringGrad);stroke-linecap:round;transition:stroke-dashoffset .8s cubic-bezier(.22,.8,.3,1)}

/* ---------- Modal ---------- */
.modal-back{
  position:fixed;inset:0;background:rgba(5,8,14,.65);backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px);
  z-index:100;display:flex;align-items:center;justify-content:center;padding:22px;
  opacity:0;transition:opacity .22s;
}
.modal-back.show{opacity:1}
.modal{
  background:var(--panel);border:1px solid var(--line-2);border-radius:var(--radius-lg);
  padding:24px;width:min(540px,100%);max-height:88vh;overflow-y:auto;box-shadow:var(--shadow);
  transform:translateY(16px) scale(.98);transition:transform .25s cubic-bezier(.22,.8,.3,1);
}
.modal-back.show .modal{transform:none}
.modal.lg{width:min(820px,100%)}
.modal.sm{width:min(400px,100%)}
.modal-head{display:flex;align-items:flex-start;gap:12px;margin-bottom:16px}
.modal-head h3{font-size:16.5px}
.modal-head .m-sub{font-size:12.5px;color:var(--muted);margin-top:2px}
.modal-close{margin-inline-start:auto;width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;color:var(--muted);flex-shrink:0}
.modal-close:hover{background:var(--panel-2);color:var(--text)}
.modal-close svg{width:15px;height:15px}
.modal-actions{display:flex;gap:10px;margin-top:22px}
.modal-actions .spacer{flex:1}

/* ---------- Toasts ---------- */
#toasts{position:fixed;bottom:22px;inset-inline-start:22px;z-index:200;display:flex;flex-direction:column;gap:10px;pointer-events:none}
.toast{
  display:flex;align-items:flex-start;gap:11px;background:var(--panel);border:1px solid var(--line-2);
  border-radius:13px;padding:13px 16px;font-size:13px;box-shadow:var(--shadow);max-width:360px;
  animation:toastIn .3s cubic-bezier(.22,.8,.3,1);pointer-events:auto;
}
.toast.out{animation:toastOut .25s forwards}
.toast .t-ico{width:30px;height:30px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.toast .t-ico svg{width:15px;height:15px}
.toast .t-title{font-weight:700;font-size:13px}
.toast .t-body{color:var(--muted);font-size:12px;margin-top:1px}
.toast.ok .t-ico{background:var(--green-soft);color:var(--green)}
.toast.err .t-ico{background:var(--red-soft);color:var(--red)}
.toast.info .t-ico{background:var(--brand-soft);color:var(--brand)}
.toast.warn .t-ico{background:var(--amber-soft);color:var(--amber)}
@keyframes toastIn{from{opacity:0;transform:translateY(14px) scale(.96)}to{opacity:1;transform:none}}
@keyframes toastOut{to{opacity:0;transform:translateY(8px) scale(.97)}}

/* ---------- Avatars ---------- */
.acc-avatar{
  width:38px;height:38px;border-radius:11px;display:flex;align-items:center;justify-content:center;
  font-weight:800;font-size:14px;color:#fff;flex-shrink:0;
}
.platform-ic{width:22px;height:22px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;font-size:10px;font-weight:800;color:#fff;flex-shrink:0}

/* ---------- Empty state ---------- */
.empty{text-align:center;padding:52px 24px;color:var(--muted)}
.empty .e-ico{width:58px;height:58px;border-radius:16px;background:var(--panel-2);display:flex;align-items:center;justify-content:center;margin:0 auto 14px;color:var(--muted-2)}
.empty .e-ico svg{width:26px;height:26px}
.empty .e-title{font-weight:700;color:var(--text);font-size:14.5px;margin-bottom:4px}
.empty .e-sub{font-size:12.5px;max-width:340px;margin:0 auto 16px}

/* ---------- Section header ---------- */
.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:28px 0 14px;flex-wrap:wrap}
.section-head h2{display:flex;align-items:center;gap:9px;font-size:16px}
.section-head h2 svg{width:18px;height:18px;color:var(--brand)}
.section-head .sh-sub{font-size:12px;color:var(--muted);margin-top:2px}

/* ---------- List rows (notifications, activity) ---------- */
.list-row{display:flex;align-items:flex-start;gap:12px;padding:14px 16px;border-bottom:1px solid var(--line);transition:background var(--t-fast)}
.list-row:last-child{border-bottom:none}
.list-row:hover{background:color-mix(in srgb,var(--brand) 3%,transparent)}
.lr-ico{width:36px;height:36px;border-radius:11px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.lr-ico svg{width:16px;height:16px}
.lr-title{font-size:13px;font-weight:650;line-height:1.5}
.lr-sub{font-size:12px;color:var(--muted);margin-top:1px}
.lr-time{font-size:11px;color:var(--muted-2);white-space:nowrap;margin-inline-start:auto}
.unread-dot{width:8px;height:8px;border-radius:50%;background:var(--brand);flex-shrink:0;margin-top:8px}

/* ---------- KPI inline ---------- */
.kpi-inline{display:flex;gap:22px;flex-wrap:wrap}
.kpi-inline .kpi .kv{font-size:19px;font-weight:800;font-variant-numeric:tabular-nums}
.kpi-inline .kpi .kl{font-size:11.5px;color:var(--muted)}
