@import url('https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,600;0,700;1,600;1,700&display=swap');
:root{--navy:#193b67;--blue:#244f82;--gold:#c79a4b;--ink:#17283c;--muted:#718096;--line:#e7edf3}
*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(ellipse at 50% 8%,#f1f6fb 0,#f8fafc 48%,#fff 100%);font-family:'DM Sans',Arial,sans-serif;color:var(--ink);display:flex;flex-direction:column}
.topbar{height:86px;padding:0 clamp(22px,7vw,100px);display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid #e8edf2;background:rgba(255,255,255,.86)}
.brand{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--navy)}.brand-symbol{width:43px;height:43px;border:2px solid var(--gold);border-radius:50%;display:grid;place-items:center;font-family:Georgia,serif;font-size:27px;font-weight:bold;color:var(--navy);line-height:1}
.brand-copy{display:flex;flex-direction:column;gap:3px}.brand-copy strong{font-size:20px;letter-spacing:3px}.brand-copy small{font-size:8px;letter-spacing:1.05px;color:#68788a}
.admin-link,.logout{font-size:13px;font-weight:600;color:var(--navy);text-decoration:none;border:1px solid #dce5ee;padding:10px 16px;border-radius:7px}.admin-link:hover,.logout:hover{background:#f0f5fa}
.main{flex:1;display:grid;place-items:center;padding:55px 20px 65px}.hero{text-align:center;width:min(100%,690px)}.eyebrow{font-size:10px;letter-spacing:2.2px;font-weight:700;color:var(--gold)}
h1{font-size:clamp(36px,6vw,58px);line-height:1.12;letter-spacing:-1.8px;margin:18px 0 13px;color:var(--navy)}h1 em{font-family:'Playfair Display',Georgia,serif;font-weight:600;color:var(--gold)}
.intro{color:#718096;font-size:15px;line-height:1.7;max-width:490px;margin:0 auto 32px}
.draw-card{background:#fff;border:1px solid #e6ebf0;border-radius:16px;padding:36px 34px 26px;box-shadow:0 18px 55px rgba(29,57,87,.09);max-width:510px;margin:auto;position:relative;overflow:hidden}
.draw-card:before{content:"";position:absolute;top:0;left:0;width:100%;height:4px;background:linear-gradient(90deg,var(--navy),var(--gold))}
.card-label{font-size:10px;letter-spacing:2px;font-weight:700;color:#8795a5}.result{font-size:clamp(43px,8vw,62px);font-weight:700;letter-spacing:5px;color:var(--navy);padding:24px 0 4px;min-height:104px;font-variant-numeric:tabular-nums;overflow-wrap:anywhere}
.result.success{color:#1b755b}.result-message{font-size:12px;color:#98a4b2;min-height:20px;margin-bottom:23px}
.generate-btn{width:100%;border:0;border-radius:8px;background:var(--navy);color:#fff;padding:17px 20px;font:600 14px 'DM Sans',sans-serif;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:16px;transition:.2s}
.generate-btn:hover{background:#244f82;transform:translateY(-1px);box-shadow:0 8px 18px #193b6725}.generate-btn:disabled{opacity:.7;cursor:wait}.btn-arrow{font-size:19px;font-weight:400}
.remaining{margin-top:22px;color:#8492a2;font-size:11px;display:flex;justify-content:center;align-items:center;gap:7px}.pulse{width:7px;height:7px;border-radius:50%;background:#35a77b;box-shadow:0 0 0 4px #35a77b1c}
.slogan{margin:27px 0 0;color:#7d8b9b;font-size:12px;letter-spacing:2px}.slogan b{color:var(--gold);padding:0 4px}
footer{text-align:center;padding:22px;color:#9aa6b2;font-size:10px;letter-spacing:.3px;border-top:1px solid #edf0f4}
.loader{position:fixed;z-index:10;inset:0;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center;transition:opacity .45s,visibility .45s}.loader.hidden{opacity:0;visibility:hidden}.loader-brand{display:flex;align-items:center;gap:12px;color:var(--navy);font-weight:700;font-size:25px;letter-spacing:4px}.loader-brand .brand-symbol{width:52px;height:52px;font-size:33px}.loader p{font-size:11px;letter-spacing:1px;color:#8290a0}.loader-line{width:135px;height:2px;background:#e9edf2;margin-top:25px;overflow:hidden}.loader-line:after{content:"";display:block;width:45%;height:100%;background:var(--gold);animation:load 1s infinite ease-in-out}@keyframes load{from{transform:translateX(-110%)}to{transform:translateX(330%)}}
.shuffling{animation:shuffle .14s infinite alternate}@keyframes shuffle{from{opacity:.35;transform:translateY(2px)}to{opacity:1;transform:translateY(-2px)}}
.admin-main{width:min(100% - 36px,850px);margin:55px auto;flex:1}.admin-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:25px}.admin-heading h1,.admin-panel h1{font-size:34px;letter-spacing:-.8px;margin:10px 0}.admin-panel{background:#fff;border:1px solid var(--line);border-radius:13px;padding:28px;margin:18px 0;box-shadow:0 10px 35px #193b6709}.admin-panel h2{font-size:19px;color:var(--navy);margin:0 0 9px}.admin-panel p{font-size:13px;color:#718096;line-height:1.7}.admin-panel form{display:grid;gap:12px;margin-top:20px}.admin-panel label{font-size:12px;font-weight:700;color:#43556a}.admin-panel input[type=password],.admin-panel input[type=file]{width:100%;padding:13px;border:1px solid #dce4ec;border-radius:7px;background:#fff;font:13px 'DM Sans',sans-serif}.admin-panel .generate-btn{margin-top:5px;max-width:260px}.login-panel{max-width:460px;margin:70px auto}.login-panel .generate-btn{max-width:none}.stats{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}.stats div{background:#fff;border:1px solid var(--line);border-radius:10px;padding:19px}.stats strong{display:block;color:var(--navy);font-size:27px}.stats span{color:#8794a3;font-size:11px}.alert{padding:13px 15px;border-radius:7px;font-size:13px;margin:15px 0}.error{background:#fff0f0;color:#a33333}.success-alert{background:#edf8f2;color:#23734c}.hint{font-size:11px!important;color:#99a4b0!important}.admin-panel code{background:#f2f5f8;padding:2px 5px;border-radius:4px}
@media(max-width:560px){.topbar{height:72px;padding:0 17px}.brand-copy strong{font-size:17px}.brand-copy small{font-size:7px}.brand-symbol{width:38px;height:38px}.admin-link{font-size:11px;padding:8px 10px}.draw-card{padding:30px 20px 23px}.admin-main{margin:30px auto}.admin-panel{padding:21px}.stats{gap:7px}.stats div{padding:13px}.stats strong{font-size:22px}.stats span{font-size:10px}.admin-heading h1{font-size:27px}}


/* Enhanced motion: entrance, number shuffle, reveal and celebration */
.topbar{animation:topbarIn .65s cubic-bezier(.2,.75,.25,1) both}
.hero>.eyebrow{animation:fadeUp .7s .12s both}
.hero h1{animation:fadeUp .7s .2s both}
.hero .intro{animation:fadeUp .7s .3s both}
.draw-card{animation:cardIn .85s .35s cubic-bezier(.16,1,.3,1) both}
.slogan{animation:fadeUp .7s .65s both}
@keyframes topbarIn{from{opacity:0;transform:translateY(-18px)}to{opacity:1;transform:translateY(0)}}
@keyframes fadeUp{from{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}
@keyframes cardIn{from{opacity:0;transform:translateY(28px) scale(.97)}to{opacity:1;transform:translateY(0) scale(1)}}
.generate-btn .btn-arrow{display:inline-block;transition:transform .25s}
.generate-btn:hover .btn-arrow{transform:translateX(5px)}
.generate-btn.loading .btn-arrow{animation:arrowPulse .65s infinite alternate}
@keyframes arrowPulse{to{transform:translateY(-4px);opacity:.45}}
.result.shuffling{filter:blur(.35px);color:var(--gold);animation:slotGlow .3s infinite alternate}
@keyframes slotGlow{from{transform:translateY(2px);opacity:.65;text-shadow:0 0 0 transparent}to{transform:translateY(-2px);opacity:1;text-shadow:0 0 18px #c79a4b55}}
.result.reveal{animation:resultReveal .7s cubic-bezier(.16,1,.3,1) both}
@keyframes resultReveal{0%{opacity:0;transform:translateY(24px) scale(.82);filter:blur(8px)}65%{opacity:1;transform:translateY(-5px) scale(1.06);filter:blur(0)}100%{transform:translateY(0) scale(1)}}
.draw-card.celebrate{animation:cardCelebrate .65s ease}
@keyframes cardCelebrate{0%,100%{box-shadow:0 18px 55px rgba(29,57,87,.09)}35%{box-shadow:0 18px 55px #c79a4b45,0 0 0 5px #c79a4b18}}
.confetti{position:absolute;top:15%;width:7px;height:11px;border-radius:2px;z-index:2;pointer-events:none;animation:confettiFall 1.25s cubic-bezier(.2,.7,.4,1) forwards}
@keyframes confettiFall{0%{opacity:0;transform:translate3d(0,-12px,0) rotate(0)}12%{opacity:1}100%{opacity:0;transform:translate3d(var(--drift),260px,0) rotate(640deg)}}
.pulse{animation:pulseBeat 1.8s infinite}
@keyframes pulseBeat{0%,100%{box-shadow:0 0 0 4px #35a77b1c}50%{box-shadow:0 0 0 8px #35a77b08}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}


/* Campus logo, longer roll-number format and refreshed visual background */
body{
  background:
    radial-gradient(ellipse at 12% 18%,rgba(199,154,75,.15),transparent 33%),
    radial-gradient(ellipse at 88% 72%,rgba(36,79,130,.14),transparent 35%),
    linear-gradient(135deg,#f7f9fc 0%,#edf3f8 48%,#fbf8f1 100%);
  background-attachment:fixed;
}
.main{position:relative;isolation:isolate;overflow:hidden}
.main:before,.main:after{content:"";position:absolute;z-index:-1;border:1px solid rgba(25,59,103,.08);border-radius:50%;pointer-events:none}
.main:before{width:540px;height:540px;left:-300px;top:5%;box-shadow:0 0 0 28px rgba(25,59,103,.018),0 0 0 58px rgba(25,59,103,.015)}
.main:after{width:620px;height:620px;right:-360px;bottom:-15%;box-shadow:0 0 0 30px rgba(199,154,75,.035),0 0 0 65px rgba(199,154,75,.025)}
.riphah-logo{display:block;width:min(330px,43vw);height:auto;max-height:68px;object-fit:contain;object-position:left center}
.loader-logo{display:block;width:min(490px,78vw);height:auto;max-height:150px;object-fit:contain}
.loader-brand{display:block}
.brand{gap:0}
.draw-card{max-width:760px;width:min(100%,760px);padding-left:clamp(22px,5vw,56px);padding-right:clamp(22px,5vw,56px);background:rgba(255,255,255,.94);backdrop-filter:blur(10px)}
.result{font-size:clamp(31px,5.4vw,54px);letter-spacing:clamp(1px,.35vw,3px);white-space:nowrap;overflow:visible;min-height:100px;padding-left:2px;padding-right:2px;font-variant-numeric:tabular-nums}
.card-label{letter-spacing:2.4px}
.hero h1{ text-shadow:0 5px 22px rgba(25,59,103,.07)}
@media(max-width:560px){
  .riphah-logo{width:min(245px,61vw);max-height:54px}
  .loader-logo{max-height:105px}
  .draw-card{width:100%;padding-left:14px;padding-right:14px}
  .result{font-size:clamp(25px,7.1vw,38px);letter-spacing:1px;min-height:78px}
}


/* Mandatory Morning / Weekend session selector */
.session-picker{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin:0 auto 15px;max-width:480px}
.session-option{border:1.5px solid #dce5ee;background:#f9fbfd;border-radius:9px;padding:13px 15px;display:flex;align-items:center;justify-content:center;gap:10px;color:#52657a;font:600 14px 'DM Sans',sans-serif;cursor:pointer;transition:all .22s ease}
.session-option:hover{border-color:#b9c9d9;background:#f2f6fa;transform:translateY(-2px)}
.session-option.selected{border-color:var(--gold);background:linear-gradient(135deg,#fffaf0,#fff);color:var(--navy);box-shadow:0 5px 17px rgba(199,154,75,.16);transform:translateY(-2px)}
.session-icon{font-size:19px;color:var(--gold)}
.generate-btn:disabled{background:#aab7c5;box-shadow:none;transform:none;cursor:not-allowed;opacity:.8}
.generate-btn:disabled:hover{background:#aab7c5}
@media(max-width:560px){.session-picker{gap:8px}.session-option{padding:12px 8px;font-size:13px}}


/* Student name shown with the generated roll number */
.student-name{min-height:26px;margin:-2px 0 5px;color:#53677d;font-size:clamp(15px,2.5vw,20px);font-weight:600;letter-spacing:.2px;overflow-wrap:anywhere}
.student-name:not(:empty){animation:fadeUp .45s ease both}


/* Academic program shown under the student's name */
.program-name{min-height:21px;margin:0 0 8px;color:#9a763b;font-size:12px;font-weight:600;letter-spacing:.45px;text-transform:uppercase;overflow-wrap:anywhere}
.program-name:not(:empty){animation:fadeUp .5s .08s ease both}
