:root{--bg: #eef3ef;--bg-deep: #dfe8e2;--surface: #f7faf8;--ink: #14241c;--ink-soft: #3d5348;--muted: #6a7d73;--line: #c5d2ca;--brand: #0f5c45;--brand-2: #187a5a;--gold: #b8892a;--gold-soft: #f3e6c8;--ok: #1b7a4a;--ok-bg: #dff3e8;--warn: #9a6b12;--warn-bg: #f8ecd2;--danger: #a33a2f;--danger-bg: #f8e2de;--info: #1f5f8b;--info-bg: #ddeef8;--sidebar: #0c2f24;--sidebar-ink: #d7e6df;--shadow: 0 12px 40px rgba(20, 36, 28, .08);--radius: 14px;--font: "IBM Plex Sans", "IBM Plex Sans Arabic", system-ui, sans-serif;--display: "Libre Franklin", "IBM Plex Sans Arabic", "IBM Plex Sans", sans-serif}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100%}body{font-family:var(--font);color:var(--ink);background:radial-gradient(900px 480px at 10% -10%,rgba(184,137,42,.12),transparent 55%),radial-gradient(700px 420px at 100% 0%,rgba(15,92,69,.1),transparent 50%),linear-gradient(180deg,var(--bg) 0%,var(--bg-deep) 100%)}button,input,select{font:inherit}button{cursor:pointer}.app{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.gate{min-height:100vh;display:grid;place-items:center;padding:1.5rem}.gate form{width:min(24rem,100%)}.sidebar{background:var(--sidebar);color:var(--sidebar-ink);padding:1.4rem 1rem 1.5rem;display:flex;flex-direction:column;gap:1.5rem}.brand{padding:.4rem .6rem .8rem}.brand-mark{font-family:var(--display);font-weight:800;font-size:1.45rem;letter-spacing:-.03em;color:#fff}.brand-sub{margin-top:.25rem;font-size:.78rem;color:#9bb5aa}.nav{display:flex;flex-direction:column;gap:.35rem}.nav button{text-align:left;border:0;background:transparent;color:inherit;padding:.7rem .8rem;border-radius:10px;transition:background .15s ease}.nav button:disabled{opacity:.38;cursor:not-allowed}.nav button:disabled:hover{background:transparent}.nav button:hover,.nav button.active{background:#ffffff14}.nav button.active{color:#fff;box-shadow:inset 3px 0 0 var(--gold)}html[dir=rtl] .nav button.active{box-shadow:inset -3px 0 0 var(--gold)}.lang-switch{display:grid;grid-template-columns:1fr 1fr;gap:.35rem;padding:0 .2rem}.lang-switch button{border:1px solid rgba(255,255,255,.14);background:#ffffff0a;color:var(--sidebar-ink);border-radius:8px;padding:.45rem .5rem;font-weight:600;font-size:.82rem}.lang-switch button.active{background:#b8892a59;border-color:var(--gold);color:#fff}.sidebar-note{margin-top:auto;padding:.85rem;border-radius:12px;background:#ffffff0f;font-size:.78rem;line-height:1.45;color:#a9c0b6}.main{padding:1.4rem 1.6rem 2.4rem;min-width:0}.topbar{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:1rem;margin-bottom:1.25rem}.topbar h1{margin:0;font-family:var(--display);font-size:clamp(1.5rem,2.4vw,2rem);letter-spacing:-.03em}.topbar p{margin:.35rem 0 0;color:var(--ink-soft);max-width:42rem;line-height:1.45}.toolbar{display:flex;flex-wrap:wrap;gap:.55rem;align-items:center}.field{background:var(--surface);border:1px solid var(--line);border-radius:10px;padding:.55rem .75rem;color:var(--ink);min-width:10rem}.btn{border:0;border-radius:10px;padding:.58rem .95rem;font-weight:600;transition:transform .12s ease,background .12s ease,opacity .12s ease}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--brand);color:#fff}.btn-primary:hover{background:var(--brand-2)}.btn-ghost{background:var(--surface);border:1px solid var(--line);color:var(--ink)}.btn-ghost:hover{background:#fff}.btn-gold{background:var(--gold);color:#1a1406}.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:.8rem;margin-bottom:1.1rem}.stat{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:.95rem 1rem;box-shadow:var(--shadow)}.stat .label{font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}.stat .value{margin-top:.35rem;font-family:var(--display);font-size:1.7rem;font-weight:700;letter-spacing:-.03em}.stat.danger .value{color:var(--danger)}.stat.warn .value{color:var(--warn)}.stat.ok .value{color:var(--ok)}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}.panel-head{display:flex;justify-content:space-between;align-items:center;gap:.75rem;padding:.9rem 1.05rem;border-bottom:1px solid var(--line)}.panel-head h2{margin:0;font-size:1rem;font-family:var(--display);letter-spacing:-.02em}.panel-body{padding:.4rem 0}.table{width:100%;border-collapse:collapse}.table th,.table td{padding:.75rem 1.05rem;text-align:left;vertical-align:top;border-bottom:1px solid var(--line);font-size:.92rem}.table th{font-size:.72rem;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600}.table tr:last-child td{border-bottom:0}.table tr:hover td{background:#0f5c4508}.badge{display:inline-flex;align-items:center;gap:.3rem;padding:.22rem .55rem;border-radius:999px;font-size:.75rem;font-weight:600}.badge.ok{background:var(--ok-bg);color:var(--ok)}.badge.warn{background:var(--warn-bg);color:var(--warn)}.badge.danger{background:var(--danger-bg);color:var(--danger)}.badge.info{background:var(--info-bg);color:var(--info)}.badge.neutral{background:#e7ece9;color:var(--ink-soft)}.muted{color:var(--muted);font-size:.85rem}.grid-2{display:grid;grid-template-columns:1.4fr 1fr;gap:1rem}.group-card{border-bottom:1px solid var(--line);padding:1rem 1.05rem}.group-card:last-child{border-bottom:0}.group-top{display:flex;justify-content:space-between;gap:1rem;align-items:flex-start}.group-top h3{margin:0;font-size:1.02rem;font-family:var(--display)}.assign-banner{margin:0 1.05rem;padding:.75rem .9rem;border-radius:10px;background:var(--gold-soft);color:var(--ink);font-size:.9rem;line-height:1.45}.assign-box{min-width:16rem;padding:.7rem .75rem;border-radius:12px;border:1px solid #ecc4be;background:var(--danger-bg);display:grid;gap:.4rem}.assign-box.ok{border-color:#b7dfc8;background:var(--ok-bg)}.assign-label{font-size:.75rem;font-weight:700;letter-spacing:.02em;text-transform:uppercase;color:var(--ink-soft)}.assign-who{font-size:.86rem;font-weight:600}.chip-pick{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.85rem}.chip-pick button{border:1px solid var(--line);background:#fff;color:var(--ink);border-radius:999px;padding:.28rem .65rem;font-size:.78rem;cursor:pointer}.chip-pick button.on{background:var(--ink);color:#fff;border-color:var(--ink)}.assign-list{margin-top:.85rem;max-height:32rem;overflow:auto;border:1px solid var(--line);border-radius:12px}.assign-list .table{margin:0}tr.needs-agent td{background:var(--danger-bg)}.meta-row{display:flex;flex-wrap:wrap;gap:.55rem 1rem;margin-top:.35rem;color:var(--ink-soft);font-size:.86rem}.pilgrims{display:flex;flex-wrap:wrap;gap:.35rem;margin-top:.65rem}.chip{background:#e8f0eb;color:var(--ink-soft);border-radius:999px;padding:.2rem .55rem;font-size:.75rem}.timeline{margin-top:.85rem;display:grid;gap:.45rem}.movement{display:grid;grid-template-columns:7.5rem 1fr auto;gap:.7rem;align-items:center;padding:.55rem .65rem;border-radius:10px;background:#f0f5f2;border:1px solid transparent}.movement.overdue{background:var(--danger-bg);border-color:#ecc4be}.movement.today{background:var(--gold-soft);border-color:#e4d2a3}.movement .when{font-size:.78rem;color:var(--ink-soft);font-weight:600}.movement .title{font-weight:600;font-size:.9rem}.movement .actions{display:flex;gap:.35rem;flex-wrap:wrap;justify-content:flex-end}.tiny{border:0;background:#fff;border:1px solid var(--line);border-radius:8px;padding:.28rem .5rem;font-size:.75rem;font-weight:600}.tiny.primary{background:var(--brand);color:#fff;border-color:var(--brand)}.log-item{padding:.85rem 1.05rem;border-bottom:1px solid var(--line)}.log-item:last-child{border-bottom:0}.log-item .msg{margin-top:.35rem;white-space:pre-wrap;line-height:1.45}.empty{padding:2rem 1.05rem;text-align:center;color:var(--muted)}.empty-start{background:var(--surface);border:1px dashed var(--brand-2);border-radius:var(--radius);padding:2.2rem 1.5rem;text-align:center;box-shadow:var(--shadow)}.empty-start h2{margin:0;font-family:var(--display);letter-spacing:-.02em}.empty-start p{margin:.65rem auto 1.1rem;max-width:34rem;color:var(--ink-soft);line-height:1.5}.upload-hint{margin-top:.75rem;padding:.85rem 1rem;border-radius:12px;background:#eaf3ee;border:1px dashed var(--brand-2);font-size:.86rem;color:var(--ink-soft);line-height:1.45}.drop-zone{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.35rem;min-height:160px;padding:1.5rem 1.25rem;border-radius:var(--radius);border:2px dashed var(--line);background:#f3f7f4;color:var(--ink-soft);cursor:pointer;text-align:center;transition:border-color .15s ease,background .15s ease,transform .12s ease}.drop-zone:hover{border-color:var(--brand-2);background:#eaf3ee}.drop-zone.active{border-color:var(--brand);background:#dff3e8;color:var(--ink);transform:scale(1.01)}.drop-zone.disabled{opacity:.72;cursor:wait;pointer-events:none}.drop-zone-title{font-family:var(--display);font-weight:700;font-size:1.05rem;color:var(--ink);letter-spacing:-.02em}.drop-zone-sub{font-size:.86rem;color:var(--muted)}.ingest-log{margin-top:.85rem;padding:.85rem 1rem;border-radius:var(--radius);border:1px solid var(--line);background:#f7faf8;max-height:280px;overflow:auto}.ingest-log-list{margin:.4rem 0 0;padding-inline-start:1.1rem;font-size:.82rem;line-height:1.45;color:var(--ink-soft)}.ingest-log-list li{margin-bottom:.25rem}.ingest-log-list li.err{color:#9b1c1c}.ingest-log-ms{font-variant-numeric:tabular-nums;color:var(--muted);margin-inline-end:.25rem}.ingest-report{margin-top:.85rem;padding:.95rem 1rem;border-radius:12px;background:#f3f7f4;border:1px solid var(--line);font-size:.86rem;color:var(--ink-soft)}.ingest-report-title{font-family:var(--display);font-weight:700;color:var(--ink);margin-bottom:.45rem}.ingest-report ul{margin:0;padding-left:1.1rem;line-height:1.55}.ingest-warnings{margin-top:.65rem;padding-top:.55rem;border-top:1px solid var(--line);color:var(--warn);line-height:1.45}code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:.82em;background:#0000000d;padding:.05rem .3rem;border-radius:4px}@media(max-width:980px){.app{grid-template-columns:1fr}.sidebar{padding-bottom:1rem}.nav{flex-direction:row;flex-wrap:wrap}.sidebar-note{display:none}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-2,.movement{grid-template-columns:1fr}}
