:root{
  --bg:#10141a;
  --surface:#1a212a;
  --surface-hi:#212a35;
  --border:#2a323d;
  --text:#e9edf2;
  --muted:#8b96a6;
  --accent:#31c7ae;
  --accent-dim:#1f8a78;
  --amber:#e3a857;
  --danger:#e2685a;
  --radius:12px;
  --font-ui:'B Nazanin','BNazanin','Vazirmatn',Tahoma,sans-serif;
  --font-mono:'JetBrains Mono',ui-monospace,monospace;
}
*{box-sizing:border-box;}
html,body{margin:0;padding:0;}
body{
  background:
    radial-gradient(1200px 500px at 15% -10%, rgba(49,199,174,0.08), transparent 60%),
    var(--bg);
  color:var(--text);
  font-family:var(--font-ui);
  direction:rtl;
  min-height:100vh;
}
#app{min-height:100vh; display:flex; flex-direction:column;}
.topbar{
  display:flex; align-items:center; justify-content:space-between;
  padding:16px 28px; border-bottom:1px solid var(--border);
  background:rgba(26,33,42,0.6); backdrop-filter:blur(6px);
  position:sticky; top:0; z-index:10;
}
.brand{display:flex; align-items:center; gap:10px; font-weight:700; letter-spacing:.2px;}
.brand .mark{
  width:30px; height:30px; border-radius:8px;
  background:linear-gradient(135deg, var(--accent), var(--accent-dim));
  display:flex; align-items:center; justify-content:center;
  font-family:var(--font-mono); font-weight:700; font-size:13px; color:#08110f;
}
.brand .sub{font-size:12px; color:var(--muted); font-weight:500;}
.logout-btn{
  background:transparent; border:1px solid var(--border); color:var(--muted);
  padding:8px 14px; border-radius:8px; cursor:pointer; font-family:var(--font-ui); font-size:13px;
  transition:.15s;
}
.logout-btn:hover{border-color:var(--danger); color:var(--danger);}
main{flex:1; display:flex; align-items:flex-start; justify-content:center; padding:36px 20px;}
.center-screen{
  position:relative;
  flex:1; display:flex; align-items:center; justify-content:center; padding:20px;
  background:
    radial-gradient(900px 600px at 12% 15%, rgba(49,199,174,0.10), transparent 60%),
    radial-gradient(700px 500px at 90% 85%, rgba(49,199,174,0.06), transparent 60%),
    var(--bg);
  background-image:
    linear-gradient(rgba(255,255,255,0.025) 1px, transparent 1px),
    linear-gradient(90deg, rgba(255,255,255,0.025) 1px, transparent 1px),
    radial-gradient(900px 600px at 12% 15%, rgba(49,199,174,0.10), transparent 60%),
    radial-gradient(700px 500px at 90% 85%, rgba(49,199,174,0.06), transparent 60%);
  background-size:42px 42px, 42px 42px, auto, auto;
  background-position:center;
  overflow:hidden;
}
.center-screen::before{
  content:'';
  position:absolute; inset:0; z-index:0; pointer-events:none;
  background:
    radial-gradient(560px 380px at 18% 20%, rgba(49,199,174,0.13), transparent 70%),
    radial-gradient(480px 360px at 88% 82%, rgba(49,199,174,0.07), transparent 70%);
}

/* ---------- Login ---------- */
.login-wrap{position:relative; z-index:1; width:100%; max-width:960px; display:grid; grid-template-columns:1fr 1fr; gap:36px; align-items:center;}
@media (max-width:820px){.login-wrap{grid-template-columns:1fr;}}
.login-hero{padding:20px; text-align:center;}
@media (max-width:820px){.login-hero{display:none;}}
.login-hero h1{font-size:29px; line-height:1.45; margin:26px 0 14px; font-weight:800; letter-spacing:-.2px;}
.login-hero h1 .accent-text{color:var(--accent);}
.login-hero p{color:var(--muted); font-size:14px; line-height:1.9; max-width:360px; margin:0 auto;}

/* decorative visual */
.login-visual{
  position:relative; width:230px; height:230px; margin:0 auto;
  display:flex; align-items:center; justify-content:center;
}
.orbit-ring{
  position:absolute; border:1px solid rgba(49,199,174,0.18); border-radius:50%;
  top:50%; left:50%; transform:translate(-50%,-50%);
}
.orbit-ring.ring-1{width:100%; height:100%; animation:spin 22s linear infinite;}
.orbit-ring.ring-2{width:76%; height:76%; border-style:dashed; border-color:rgba(49,199,174,0.28); animation:spin 16s linear infinite reverse;}
@keyframes spin{ from{transform:translate(-50%,-50%) rotate(0deg);} to{transform:translate(-50%,-50%) rotate(360deg);} }
.visual-glow{
  position:absolute; width:64%; height:64%; border-radius:50%;
  background:radial-gradient(circle, rgba(49,199,174,0.35), transparent 70%);
  filter:blur(6px);
  animation:glowPulse 3.4s ease-in-out infinite;
}
@keyframes glowPulse{ 0%,100%{opacity:.6; transform:scale(1);} 50%{opacity:1; transform:scale(1.08);} }
.v-dot{
  position:absolute; width:6px; height:6px; border-radius:50%; background:var(--accent);
  box-shadow:0 0 10px rgba(49,199,174,0.8);
  animation:dotFloat 4s ease-in-out infinite;
}
.v-dot.vd1{top:8%; left:18%; animation-delay:0s;}
.v-dot.vd2{top:22%; right:6%; width:4px; height:4px; animation-delay:.6s;}
.v-dot.vd3{bottom:14%; left:4%; width:5px; height:5px; animation-delay:1.2s;}
.v-dot.vd4{bottom:6%; right:20%; animation-delay:1.8s;}
.v-dot.vd5{top:50%; left:-2%; width:4px; height:4px; animation-delay:2.4s;}
@keyframes dotFloat{ 0%,100%{transform:translateY(0); opacity:.7;} 50%{transform:translateY(-8px); opacity:1;} }

.login-shield-img{
  position:relative; z-index:2;
  width:88px; height:88px; border-radius:50%;
  filter:drop-shadow(0 0 18px rgba(49,199,174,0.35));
  animation:logoRise .7s cubic-bezier(.16,1,.3,1) both, logoPulse 3s ease-in-out .7s infinite;
}
@keyframes logoRise{
  from{opacity:0; transform:translateY(-8px) scale(.92);}
  to{opacity:1; transform:translateY(0) scale(1);}
}
@keyframes logoPulse{
  0%,100%{filter:drop-shadow(0 0 18px rgba(49,199,174,0.35));}
  50%{filter:drop-shadow(0 0 26px rgba(49,199,174,0.55));}
}

.login-card{
  position:relative; overflow:hidden;
  padding:36px;
  border-radius:22px;
  background:linear-gradient(160deg, rgba(255,255,255,0.06), rgba(255,255,255,0.02));
  backdrop-filter:blur(20px);
  border:1px solid rgba(255,255,255,0.09);
  box-shadow:0 30px 70px -28px rgba(0,0,0,0.7), inset 0 1px 0 rgba(255,255,255,0.06);
  animation:cardRise .6s cubic-bezier(.16,1,.3,1) both;
}
@property --border-angle{
  syntax:'<angle>';
  initial-value:0deg;
  inherits:false;
}
.login-card::before{
  content:'';
  position:absolute; inset:0; z-index:0; pointer-events:none;
  border-radius:inherit;
  padding:1.5px;
  background:conic-gradient(from var(--border-angle), transparent 0%, transparent 74%, rgba(49,199,174,0.9) 84%, #eafffa 88%, rgba(49,199,174,0.9) 92%, transparent 98%);
  -webkit-mask:linear-gradient(#fff 0 0) content-box, linear-gradient(#fff 0 0);
  -webkit-mask-composite:xor;
  mask-composite:exclude;
  animation:borderTravel 5s linear infinite;
}
@keyframes borderTravel{ to{ --border-angle:360deg; } }
.login-card::after{
  content:'';
  position:absolute; inset:0; z-index:0; pointer-events:none; border-radius:inherit;
  background-image:linear-gradient(135deg, rgba(255,255,255,0.4) 0.5px, transparent 0.5px), linear-gradient(45deg, rgba(255,255,255,0.4) 0.5px, transparent 0.5px);
  background-size:26px 26px;
  opacity:.025;
}
.login-card > *{position:relative; z-index:1;}
.card-corner-glow{
  position:absolute; width:7px; height:7px; border-radius:50%; z-index:1;
  background:rgba(49,199,174,0.9); box-shadow:0 0 8px 2px rgba(49,199,174,0.7);
  animation:cornerPulse 2.4s ease-in-out infinite;
}
.card-corner-glow.cg-tl{top:12px; inset-inline-start:12px;}
.card-corner-glow.cg-tr{top:12px; inset-inline-end:12px; animation-delay:.6s;}
.card-corner-glow.cg-br{bottom:12px; inset-inline-end:12px; animation-delay:1.2s;}
.card-corner-glow.cg-bl{bottom:12px; inset-inline-start:12px; animation-delay:1.8s;}
@keyframes cornerPulse{ 0%,100%{opacity:.25; transform:scale(1);} 50%{opacity:.9; transform:scale(1.3);} }
@keyframes cardRise{
  from{opacity:0; transform:translateY(14px);}
  to{opacity:1; transform:translateY(0);}
}
@media (prefers-reduced-motion: reduce){
  .login-card, .login-shield-img, .orbit-ring, .visual-glow, .v-dot, .login-card::before, .card-corner-glow, .ambient-blob{animation:none !important;}
}

.ambient-blob{
  position:absolute; border-radius:50%; filter:blur(70px); pointer-events:none; z-index:0;
  background:radial-gradient(circle, rgba(49,199,174,0.22), transparent 70%);
}
.ambient-blob.blob-1{width:380px; height:380px; top:-8%; left:-6%; animation:blobFloat1 12s ease-in-out infinite;}
.ambient-blob.blob-2{width:320px; height:320px; bottom:-10%; right:-6%; animation:blobFloat2 14s ease-in-out infinite;}
@keyframes blobFloat1{
  0%,100%{transform:translate(0,0) scale(1); opacity:.5;}
  50%{transform:translate(30px,20px) scale(1.15); opacity:.8;}
}
@keyframes blobFloat2{
  0%,100%{transform:translate(0,0) scale(1); opacity:.4;}
  50%{transform:translate(-25px,-15px) scale(1.12); opacity:.7;}
}

.login-welcome{color:var(--muted); font-size:12.5px; font-weight:600; margin-bottom:6px;}

.card{
  background:var(--surface); border:1px solid var(--border); border-radius:var(--radius);
  padding:28px; width:100%;
}
.role-tabs{display:flex; gap:8px; margin-bottom:24px; background:var(--bg); padding:4px; border-radius:12px; border:1px solid var(--border);}
.role-tab{
  flex:1; text-align:center; padding:11px 0; border-radius:9px; cursor:pointer; font-size:13.5px;
  color:var(--muted); transition:.18s; font-weight:600;
}
.role-tab.active{background:var(--surface-hi); color:var(--accent); box-shadow:inset 0 0 0 1px rgba(49,199,174,0.25);}
.btn-ghost{background:transparent; border:1px solid var(--border); color:var(--text);}
.btn-ghost:hover{border-color:var(--accent); color:var(--accent);}
.hint{font-size:12px; color:var(--muted); margin-bottom:14px; line-height:1.8;}
.field{margin-bottom:16px;}
.field label{display:block; font-size:12.5px; color:var(--muted); margin-bottom:7px;}
.field input, .field select{
  width:100%; background:var(--bg); border:1px solid var(--border); color:var(--text);
  padding:13px 16px; border-radius:12px; font-family:var(--font-ui); font-size:14px; outline:none;
  transition:.15s;
}
.field input:focus, .field select:focus{border-color:var(--accent); box-shadow:0 0 0 3px rgba(49,199,174,0.12);}
.btn{
  width:100%; padding:13px; border:none; border-radius:12px; cursor:pointer; font-family:var(--font-ui);
  font-size:14.5px; font-weight:700; transition:.15s;
}
.btn-primary{background:var(--accent); color:#07231d; box-shadow:0 8px 24px -10px rgba(49,199,174,0.55);}
.btn-primary:hover{background:#3fd8bd; box-shadow:0 10px 28px -8px rgba(49,199,174,0.7);}
.error-box{background:rgba(226,104,90,0.1); border:1px solid rgba(226,104,90,0.4); color:#f2a89e; font-size:13px; padding:9px 12px; border-radius:8px; margin-bottom:14px;}

/* ---------- Dashboard shell ---------- */
.wrap{width:100%; max-width:980px;}
.badge-card{
  background:linear-gradient(160deg, var(--surface-hi), var(--surface));
  border:1px solid var(--border); border-radius:var(--radius); padding:22px 24px;
  display:flex; align-items:center; gap:18px; margin-bottom:26px; position:relative; overflow:hidden;
}
.badge-card::after{
  content:''; position:absolute; inset-inline-end:0; top:0; bottom:0; width:64px;
  background-image:repeating-linear-gradient(90deg, rgba(255,255,255,0.06) 0 3px, transparent 3px 7px);
  opacity:.5;
}
.avatar{
  width:56px; height:56px; border-radius:50%; background:linear-gradient(135deg, var(--accent), var(--accent-dim));
  display:flex; align-items:center; justify-content:center; font-weight:800; font-size:19px; color:#07231d; flex-shrink:0;
}
.badge-info .name{font-size:17px; font-weight:700; margin-bottom:3px;}
.badge-info .code{font-family:var(--font-mono); font-size:12.5px; color:var(--muted); letter-spacing:.5px;}

.year-tabs{display:flex; gap:8px; margin-bottom:18px; flex-wrap:wrap;}
.year-tab{
  padding:8px 16px; border-radius:8px; border:1px solid var(--border); cursor:pointer;
  font-family:var(--font-mono); font-size:13.5px; color:var(--muted); background:var(--surface);
}
.year-tab.active{border-color:var(--accent); color:var(--accent); background:rgba(49,199,174,0.08);}

.month-grid{display:grid; grid-template-columns:repeat(4,1fr); gap:12px;}
@media (max-width:640px){.month-grid{grid-template-columns:repeat(2,1fr);}}
.month-tile{
  border:1px solid var(--border); background:var(--surface); border-radius:10px; padding:16px 14px;
  display:flex; flex-direction:column; gap:10px; min-height:96px; position:relative;
}
.month-tile .m-name{font-size:14px; font-weight:600;}
.month-tile .m-status{font-size:11.5px; color:var(--muted); font-family:var(--font-mono);}
.month-tile.available{border-color:var(--accent-dim); cursor:pointer; transition:.15s;}
.month-tile.available:hover{background:rgba(49,199,174,0.08); border-color:var(--accent);}
.month-tile.available .m-status{color:var(--accent);}
.dl-icon{position:absolute; inset-inline-end:12px; top:12px; color:var(--accent); font-size:15px;}
.lock-icon{position:absolute; inset-inline-end:12px; top:12px; color:var(--muted); font-size:13px; opacity:.6;}

.empty-state{
  border:1px dashed var(--border); border-radius:var(--radius); padding:40px 20px; text-align:center; color:var(--muted); font-size:13.5px;
}

/* ---------- Admin ---------- */
.admin-tabs{display:flex; gap:10px; margin-bottom:22px; border-bottom:1px solid var(--border);}
.admin-tab{padding:10px 4px; margin-inline-end:18px; cursor:pointer; color:var(--muted); font-size:14px; font-weight:600; border-bottom:2px solid transparent;}
.admin-tab.active{color:var(--text); border-color:var(--accent);}
.grid-2{display:grid; grid-template-columns:1fr 1fr; gap:18px;}
@media (max-width:760px){.grid-2{grid-template-columns:1fr;}}
table{width:100%; border-collapse:collapse; font-size:13.5px;}
th{text-align:right; color:var(--muted); font-weight:600; padding:9px 8px; border-bottom:1px solid var(--border); font-size:12px;}
td{padding:10px 8px; border-bottom:1px solid var(--border);}
.row-actions{display:flex; gap:8px;}
.icon-btn{
  background:transparent; border:1px solid var(--border); color:var(--muted); border-radius:6px; padding:5px 9px;
  cursor:pointer; font-size:12px; font-family:var(--font-ui);
}
.icon-btn:hover{color:var(--danger); border-color:var(--danger);}
.edit-input{
  width:100%; background:var(--bg); border:1px solid var(--border); color:var(--text);
  padding:6px 8px; border-radius:6px; font-family:var(--font-ui); font-size:13px; outline:none;
}
.edit-input:focus{border-color:var(--accent);}
.toast{
  position:fixed; bottom:24px; left:50%; transform:translateX(-50%); background:var(--surface-hi);
  border:1px solid var(--accent-dim); color:var(--text); padding:11px 20px; border-radius:9px; font-size:13.5px;
  box-shadow:0 8px 24px rgba(0,0,0,0.4); z-index:100; opacity:0; transition:.25s; pointer-events:none;
}
.toast.show{opacity:1;}
.section-title{font-size:14px; font-weight:700; margin-bottom:14px; display:flex; align-items:center; gap:8px;}
.section-title::before{content:''; width:3px; height:14px; background:var(--accent); border-radius:2px;}
.file-drop{
  border:1.5px dashed var(--border); border-radius:10px; padding:22px; text-align:center; cursor:pointer;
  color:var(--muted); font-size:13px; transition:.15s;
}
.file-drop:hover{border-color:var(--accent); color:var(--accent);}
.emp-result-list{
  max-height:220px; overflow-y:auto; border:1px solid var(--border); border-radius:8px; margin-bottom:14px;
}
.emp-result-row{
  display:flex; justify-content:space-between; align-items:center;
  padding:9px 12px; cursor:pointer; border-bottom:1px solid var(--border); font-size:13.5px; transition:.15s;
}
.emp-result-row:last-child{border-bottom:none;}
.emp-result-row:hover{background:var(--surface-hi);}
.emp-result-meta{color:var(--muted); font-family:var(--font-mono); font-size:12px;}
.emp-picked{
  display:flex; justify-content:space-between; align-items:center;
  border:1px solid var(--accent-dim); border-radius:8px; padding:12px 14px; margin-bottom:14px;
  background:rgba(49,199,174,0.06); font-size:13.5px;
}
