:root{--bg:#f5f7fb;--surface:#fff;--ink:#172033;--muted:#6b7280;--line:#e5e7eb;--primary:#5b21b6;--primary2:#7c3aed;--success:#15803d;--warning:#b45309;--danger:#b91c1c;--shadow:0 10px 30px rgba(25,30,45,.08);--radius:18px}*{box-sizing:border-box}html{font-family:Inter,ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;background:var(--bg);color:var(--ink)}body{margin:0;min-height:100vh}a{color:var(--primary);text-decoration:none}button,input,select,textarea{font:inherit}.topbar{height:72px;background:#111827;color:#fff;display:flex;align-items:center;justify-content:space-between;padding:0 24px;position:sticky;top:0;z-index:20;box-shadow:0 4px 20px rgba(0,0,0,.12)}.brand{display:flex;align-items:center;gap:12px;color:#fff;min-width:0}.brand img{width:44px;height:44px;object-fit:contain;background:#fff;border-radius:10px;padding:3px}.brand span{display:flex;flex-direction:column;min-width:0}.brand b{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.brand small{color:#cbd5e1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-actions{display:flex;align-items:center;gap:10px}.chip{background:#263244;border:1px solid #3b475a;border-radius:999px;padding:7px 11px;font-size:13px}.shell{display:grid;grid-template-columns:220px minmax(0,1fr);min-height:calc(100vh - 72px)}.sidebar{background:#fff;border-right:1px solid var(--line);padding:18px 12px}.sidebar nav{display:grid;gap:4px;position:sticky;top:90px}.sidebar a{padding:11px 13px;border-radius:10px;color:#374151;font-weight:650}.sidebar a:hover{background:#f1edff;color:var(--primary)}.main,.public-main{padding:28px;min-width:0}.public-main{max-width:1180px;margin:0 auto}.panel{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);padding:22px;box-shadow:var(--shadow);margin-bottom:20px}.panel h1,.panel h2,.panel h3{margin-top:0}.panel-head,.page-head,.event-main{display:flex;align-items:flex-start;justify-content:space-between;gap:20px}.page-head{margin-bottom:22px}.page-head h1{margin:4px 0 5px;font-size:clamp(26px,3vw,38px)}.page-head p{margin:0;color:var(--muted)}.eyebrow{font-size:12px;font-weight:800;letter-spacing:.12em;color:var(--primary);text-transform:uppercase}.hero{background:linear-gradient(135deg,#111827,#3b176e);color:#fff;border-radius:28px;padding:42px;margin-bottom:22px;min-height:220px;display:flex;align-items:flex-end;box-shadow:var(--shadow)}.hero h1{font-size:clamp(34px,5vw,58px);margin:8px 0}.hero p{max-width:700px;color:#ddd6fe;margin:0}.login-card{max-width:500px;margin:24px auto}.login-card h1{margin:6px 0 22px}.login-links{text-align:center;margin-top:18px}.btn{appearance:none;border:0;border-radius:11px;padding:10px 15px;font-weight:750;display:inline-flex;align-items:center;justify-content:center;gap:8px;cursor:pointer;transition:.15s}.btn:hover{transform:translateY(-1px)}.btn:disabled{opacity:.45;cursor:not-allowed;transform:none}.btn.primary{background:linear-gradient(135deg,var(--primary),var(--primary2));color:#fff}.btn.ghost{background:#fff;border:1px solid var(--line);color:#374151}.topbar .btn.ghost{background:#202b3d;border-color:#3b475a;color:#fff}.btn.danger{background:#fee2e2;color:var(--danger);border:1px solid #fecaca}.btn.small{padding:7px 10px;font-size:13px}.btn.full{width:100%}label{display:grid;gap:7px;font-weight:650;color:#374151}input,select,textarea{width:100%;border:1px solid #d1d5db;border-radius:10px;background:#fff;padding:10px 11px;color:#111827;outline:none}input:focus,select:focus,textarea:focus{border-color:#8b5cf6;box-shadow:0 0 0 3px #ede9fe}textarea{min-height:110px;resize:vertical}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.span2{grid-column:span 2}.inline{display:flex;gap:10px;align-items:center;flex-wrap:wrap}.selector{margin-bottom:20px}.selector select{min-width:320px}.search input{min-width:280px}.mini-form{display:grid;gap:8px;min-width:260px;margin:10px 0}.check{display:flex;align-items:center;gap:7px;font-weight:600}.check input{width:auto}.perm-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px}.alert{border-radius:12px;padding:13px 15px;margin-bottom:16px;border:1px solid}.alert.success{background:#ecfdf5;color:#166534;border-color:#bbf7d0}.alert.warning{background:#fffbeb;color:#92400e;border-color:#fde68a}.alert.danger{background:#fef2f2;color:#991b1b;border-color:#fecaca}.badge{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:12px;font-weight:800;background:#eef2ff;color:#4338ca}.badge.active,.badge.sudah_memilih{background:#dcfce7;color:#166534}.badge.draft,.badge.belum_memilih{background:#f3f4f6;color:#4b5563}.badge.paused{background:#fef3c7;color:#92400e}.badge.finished{background:#e0e7ff;color:#3730a3}.stats{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:14px;margin-bottom:20px}.stats>div{background:#fff;border:1px solid var(--line);border-radius:16px;padding:17px;box-shadow:var(--shadow)}.stats span{display:block;color:var(--muted);font-size:13px}.stats b{display:block;font-size:28px;margin-top:5px}.checklist{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.checkitem{padding:12px;border:1px solid var(--line);border-radius:12px;display:flex;justify-content:space-between;gap:10px}.checkitem.ok b{color:var(--success)}.checkitem.bad b{color:var(--danger)}.checkitem span{color:var(--muted);font-size:13px}.event-row details{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}.event-actions,.status-actions,.review-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}.status-actions{margin-top:12px}.table-wrap{overflow:auto}.table-wrap.panel{padding:0}.table-wrap table,.panel .table-wrap table{width:100%;border-collapse:collapse}.table-wrap.panel table{min-width:900px}th,td{text-align:left;padding:12px 14px;border-bottom:1px solid var(--line);vertical-align:top}th{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:#6b7280;background:#f8fafc}tr:last-child td{border-bottom:0}details summary{cursor:pointer;color:#4c1d95}hr{border:0;border-top:1px solid var(--line);margin:18px 0}.muted{color:var(--muted)}.ballot{margin:28px 0}.ballot-title{display:flex;align-items:center;gap:12px;margin-bottom:14px}.ballot-title h2{margin:0}.ballot-title p{margin:2px 0 0;color:var(--muted)}.step{width:36px;height:36px;border-radius:12px;background:#ede9fe;color:var(--primary);font-weight:850;display:grid;place-items:center}.candidate-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.candidate-card{display:block;cursor:pointer}.candidate-card>input{position:absolute;opacity:0;pointer-events:none}.candidate-inner{height:100%;background:#fff;border:2px solid #e5e7eb;border-radius:20px;padding:14px;box-shadow:var(--shadow);transition:.18s}.candidate-card>input:checked+.candidate-inner{border-color:#7c3aed;box-shadow:0 0 0 4px #ede9fe,0 12px 34px rgba(91,33,182,.15)}.candidate-inner>img,.candidate-top img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:14px;background:#eef2f7}.photo-placeholder{display:grid;place-items:center;aspect-ratio:4/3;border-radius:14px;background:linear-gradient(135deg,#ede9fe,#ddd6fe);font-size:56px;font-weight:900;color:#5b21b6}.candidate-inner .number{font-size:12px;font-weight:900;color:var(--primary);margin-top:12px}.candidate-inner h3{margin:5px 0 10px;font-size:20px}.candidate-inner details{border-top:1px solid var(--line);padding-top:9px}.candidate-inner summary{font-size:13px}.pick-label{display:block;margin-top:12px;text-align:center;background:#f5f3ff;color:#5b21b6;border-radius:10px;padding:9px;font-size:13px;font-weight:800}.candidate-card>input:checked+.candidate-inner .pick-label{background:#5b21b6;color:#fff}.rich{font-size:13px;color:#4b5563;max-height:250px;overflow:auto}.rich b{display:block;color:#111827;margin-top:10px}.sticky-submit{position:sticky;bottom:14px;background:#111827;color:#fff;border-radius:16px;padding:12px 14px;display:flex;align-items:center;justify-content:space-between;gap:12px;box-shadow:0 18px 40px rgba(0,0,0,.25);z-index:12}.sticky-submit small{display:block;color:#cbd5e1}.progress-box{min-width:120px;text-align:center;background:#fff;border:1px solid var(--line);border-radius:14px;padding:12px}.progress-box b{font-size:24px;display:block}.progress-box span{font-size:12px;color:var(--muted)}.narrow{max-width:760px;margin:auto}.review-card{background:#fff;border:1px solid var(--line);border-radius:15px;padding:16px 18px;margin-bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:12px}.review-card span{color:var(--muted)}.review-actions{justify-content:flex-end}.thanks{max-width:620px;margin:70px auto;text-align:center;padding:44px}.check{width:72px;height:72px;background:#dcfce7;color:#15803d;border-radius:50%;display:grid;place-items:center;font-size:38px;font-weight:900;margin:0 auto 18px}.candidate-admin-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.candidate-admin{margin:0}.candidate-top{display:grid;grid-template-columns:150px 1fr;gap:14px;align-items:start}.candidate-top img,.candidate-top .photo-placeholder{width:150px;aspect-ratio:1/1;object-fit:cover}.candidate-top .photo-placeholder{font-size:34px}.candidate-top h2{margin:7px 0}.result-section{margin-top:20px}.result-list{display:grid;gap:12px;margin-top:18px}.result-row{display:grid;grid-template-columns:minmax(180px,280px) 1fr 80px;gap:12px;align-items:center}.result-name{display:flex;align-items:center;gap:10px}.num{width:34px;height:34px;border-radius:10px;background:#ede9fe;color:#5b21b6;font-weight:900;display:grid;place-items:center}.bar,.project-bar{height:14px;background:#eef2f7;border-radius:999px;overflow:hidden}.bar i,.project-bar i{display:block;height:100%;background:linear-gradient(90deg,#5b21b6,#8b5cf6);border-radius:inherit}.result-count{text-align:right}.result-count b,.result-count small{display:block}.presentation{max-width:1200px;margin:0 auto}.presentation-head{text-align:center;margin:20px 0 34px}.presentation-head h1{font-size:clamp(34px,5vw,64px);margin:6px}.project-ballot{background:#111827;color:#fff;border-radius:24px;padding:24px;margin:20px 0;box-shadow:var(--shadow)}.project-ballot h2{font-size:28px;margin-top:0}.project-ballot h2 small{font-size:14px;color:#cbd5e1}.project-row{display:grid;grid-template-columns:minmax(220px,360px) 1fr 90px;gap:18px;align-items:center;padding:13px 0;border-top:1px solid #273348}.project-row>div:first-child span,.project-row>div:first-child b{display:block}.project-row>div:first-child span{font-size:12px;color:#c4b5fd}.project-row strong{font-size:28px;text-align:right}.project-bar{background:#253147;height:18px}footer{text-align:center;color:#9ca3af;padding:24px;font-size:12px}fieldset{border:1px solid var(--line);border-radius:12px}legend{font-weight:800;color:#374151;padding:0 7px}@media(max-width:980px){.shell{grid-template-columns:1fr}.sidebar{border-right:0;border-bottom:1px solid var(--line);padding:8px 12px;overflow:auto}.sidebar nav{display:flex;position:static;min-width:max-content}.main,.public-main{padding:18px}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.candidate-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.candidate-admin-grid{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.span2{grid-column:auto}.checklist{grid-template-columns:1fr}.perm-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:640px){.topbar{height:64px;padding:0 12px}.brand img{width:38px;height:38px}.brand small,.top-actions .chip{display:none}.main,.public-main{padding:12px}.hero{padding:26px 20px;border-radius:20px;min-height:180px}.panel{padding:16px;border-radius:15px}.page-head,.panel-head,.event-main{display:block}.page-head .event-actions,.page-head>a{margin-top:12px}.stats{grid-template-columns:repeat(2,1fr);gap:8px}.stats>div{padding:12px}.stats b{font-size:22px}.candidate-grid{grid-template-columns:1fr}.candidate-inner{padding:12px}.candidate-inner>img,.photo-placeholder{aspect-ratio:16/10}.sticky-submit{bottom:8px}.selector{display:block}.selector select{min-width:0}.review-card{display:block}.review-card b{display:block;margin-top:5px}.review-actions{display:grid;grid-template-columns:1fr 1fr}.review-actions .btn,.review-actions form,.review-actions button{width:100%}.result-row{grid-template-columns:1fr 60px}.result-row .bar{grid-column:1/-1;grid-row:2}.candidate-top{grid-template-columns:100px 1fr}.candidate-top img,.candidate-top .photo-placeholder{width:100px}.project-ballot{padding:16px;border-radius:17px}.project-row{grid-template-columns:1fr 60px;gap:8px}.project-row .project-bar{grid-column:1/-1;grid-row:2}.project-row strong{font-size:22px}.perm-grid{grid-template-columns:1fr}.thanks{margin:30px auto}.top-actions .btn{display:inline-flex}}

/* v1.1 merged enhancements */
.dashboard-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;margin:20px 0}.mini-result-list{display:grid;gap:10px}.mini-result{display:grid;grid-template-columns:1fr auto auto;gap:10px;align-items:center;padding:12px;border:1px solid var(--line);border-radius:12px}.mini-result>div{display:flex;align-items:center;gap:8px;min-width:0}.mini-result strong{font-size:18px}.mini-result small{color:var(--muted);min-width:58px;text-align:right}.table-wrap.compact{max-height:430px}.table-wrap.compact th,.table-wrap.compact td{padding:9px 11px}.filter-grid{display:grid;grid-template-columns:2fr 1fr 1fr auto;gap:12px;align-items:end}.filter-actions{display:flex;gap:8px;align-items:center}.pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:14px 0 2px;flex-wrap:wrap}.pagination>div{display:flex;gap:6px;flex-wrap:wrap}.public-grid{display:grid;grid-template-columns:minmax(320px,520px) minmax(280px,1fr);gap:18px;align-items:start;max-width:1050px;margin:22px auto}.public-grid .login-card{margin:0}.public-info{margin:0}.public-info h2{margin:8px 0}.info-list{display:grid;gap:10px;margin-top:18px}.info-list span{display:grid;gap:2px;padding:10px 12px;background:#f8fafc;border:1px solid var(--line);border-radius:11px}.info-list b{font-size:12px;color:#6b7280;text-transform:uppercase;letter-spacing:.04em}code{background:#f3f4f6;border-radius:6px;padding:2px 6px;word-break:break-all}
@media(max-width:980px){.dashboard-grid,.public-grid{grid-template-columns:1fr}.filter-grid{grid-template-columns:1fr 1fr}.filter-actions{grid-column:1/-1}}
@media(max-width:640px){.filter-grid{grid-template-columns:1fr}.filter-actions{grid-column:auto}.pagination{display:block}.pagination>div{margin-top:8px}.mini-result{grid-template-columns:1fr auto}.mini-result small{grid-column:1/-1;text-align:left}.public-grid{margin:12px auto}}


/* v1.2 candidate showcase + event geofence */
.candidate-showcase{max-width:1050px;margin:20px auto;overflow:hidden}
.showcase-head{display:flex;justify-content:space-between;align-items:center;gap:18px;margin-bottom:16px}
.showcase-head h2{margin:5px 0 3px}.showcase-head p{margin:0;color:var(--muted)}
.slider-actions{display:flex;gap:8px;flex:0 0 auto}
.slider-btn{width:42px;height:42px;border:1px solid var(--line);border-radius:13px;background:#fff;color:var(--primary);font-size:28px;line-height:1;cursor:pointer;font-weight:800;box-shadow:0 5px 18px rgba(31,41,55,.08)}
.slider-btn:hover{background:#f5f3ff}
.candidate-slider{overflow-x:auto;scroll-behavior:smooth;scroll-snap-type:x mandatory;scrollbar-width:none;-ms-overflow-style:none}
.candidate-slider::-webkit-scrollbar{display:none}
.slider-track{display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 32px)/3);gap:16px}
.front-candidate{scroll-snap-align:start;overflow:hidden;border:1px solid var(--line);border-radius:18px;background:#fff;box-shadow:0 8px 24px rgba(31,41,55,.08)}
.front-candidate>img,.front-photo-placeholder{width:100%;aspect-ratio:16/10;object-fit:cover;background:#eef2f7;display:grid;place-items:center}
.front-photo-placeholder{font-size:50px;font-weight:900;color:var(--primary);background:linear-gradient(135deg,#ede9fe,#ddd6fe)}
.front-candidate-body{padding:14px}.front-candidate-body small{display:block;margin-top:10px;color:var(--muted);font-weight:700}
.front-candidate-body h3{margin:4px 0 5px;font-size:18px;line-height:1.2}.front-candidate-body p{margin:0;color:var(--muted);font-size:13px}
.slider-dots{display:flex;justify-content:center;gap:6px;margin-top:14px}
.slider-dot{width:8px;height:8px;padding:0;border:0;border-radius:999px;background:#d1d5db;cursor:pointer;transition:.18s}
.slider-dot.active{width:24px;background:var(--primary)}
.geo-login-note,.geo-review{display:grid;gap:4px;padding:12px 14px;margin:0 0 14px;border:1px solid #bae6fd;background:#f0f9ff;color:#075985;border-radius:12px}
.geo-login-note span,.geo-review span,.geo-review small{font-size:13px;line-height:1.45}
.geo-review{margin:16px 0}.geo-review small{font-weight:700;color:#0c4a6e}
.geo-settings{padding:14px 16px}.geo-settings legend{font-weight:850}.geo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:12px 0}
.geo-grid label{display:grid;gap:6px;font-weight:700;font-size:13px}
@media(max-width:980px){.slider-track{grid-auto-columns:calc((100% - 16px)/2)}}
@media(max-width:640px){
  .candidate-showcase{margin:12px auto}.showcase-head{align-items:flex-end}.showcase-head p{font-size:13px}
  .slider-track{grid-auto-columns:100%;gap:12px}.slider-btn{width:38px;height:38px}
  .front-candidate-body h3{font-size:17px}.geo-grid{grid-template-columns:1fr}
}

/* v1.3 PROFESSIONAL UI POLISH — compact navigation, balanced hierarchy, sample data */
:root{
  --bg:#f4f5f9;--surface:#ffffff;--ink:#19182a;--muted:#767589;--line:#e8e8ef;
  --primary:#5b35b5;--primary2:#7657cc;--nav:#17152f;--nav2:#211d42;
  --shadow:0 10px 34px rgba(29,24,63,.065);--radius:18px
}
body{background:linear-gradient(180deg,#f7f7fa 0,#f3f4f8 100%)}
.topbar{height:68px;background:rgba(23,21,47,.98);padding:0 20px;box-shadow:0 1px 0 rgba(255,255,255,.05),0 8px 30px rgba(18,15,45,.12);backdrop-filter:blur(14px)}
.brand{gap:11px}.brand img{width:40px;height:40px;border-radius:12px;padding:4px;box-shadow:0 2px 12px rgba(0,0,0,.16)}
.brand b{font-size:14px;letter-spacing:.01em}.brand small{font-size:11px;color:#aaa8bd;margin-top:2px}
.top-actions{gap:9px}.profile-chip{display:flex;align-items:center;gap:8px;color:#e9e7f5;font-size:12px;font-weight:700;max-width:230px}
.profile-dot{width:31px;height:31px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(135deg,#8e70e8,#6142bd);color:#fff;font-size:12px;box-shadow:inset 0 0 0 1px rgba(255,255,255,.18)}
.profile-name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.icon-action{width:36px;height:36px;border-radius:11px;color:#d8d4e9;display:grid;place-items:center;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.04);transition:.18s}
.icon-action:hover{background:rgba(255,255,255,.1);color:#fff;transform:translateY(-1px)}.icon-action .nav-icon{width:18px;height:18px}
.shell{grid-template-columns:82px minmax(0,1fr);min-height:calc(100vh - 68px)}
.sidebar{background:#fbfbfd;border-right:1px solid var(--line);padding:14px 10px;overflow:visible}
.nav-rail{display:flex!important;flex-direction:column;align-items:center;gap:6px;position:sticky!important;top:82px!important;min-width:0!important}
.nav-item{position:relative;width:50px;height:48px;padding:0!important;border-radius:14px!important;display:grid;place-items:center;color:#77758a!important;transition:.16s;border:1px solid transparent}
.nav-item:hover{background:#f1effa!important;color:var(--primary)!important;border-color:#e6e0f7}.nav-item.active{background:linear-gradient(135deg,#eee9fb,#e8e0fa)!important;color:#4d2ca4!important;border-color:#ddd2f5;box-shadow:inset 0 0 0 1px rgba(255,255,255,.7)}
.nav-icon{width:20px;height:20px;display:block}.nav-text{display:none}
.nav-item::after{content:attr(data-label);position:absolute;left:62px;top:50%;transform:translateY(-50%) translateX(-4px);background:#17152f;color:#fff;font-size:12px;font-weight:750;line-height:1;padding:9px 11px;border-radius:9px;white-space:nowrap;opacity:0;visibility:hidden;pointer-events:none;transition:.14s;box-shadow:0 8px 24px rgba(23,21,47,.18);z-index:90}
.nav-item:hover::after,.nav-item:focus-visible::after{opacity:1;visibility:visible;transform:translateY(-50%) translateX(0)}
.nav-separator{display:block;width:28px;height:1px;background:#e5e3eb;margin:5px 0}
.main{padding:26px 30px;max-width:1540px;width:100%;margin:0 auto}.public-main{padding:26px;max-width:1160px}
.panel{border-color:#e9e9f0;box-shadow:var(--shadow);padding:20px}.page-head{margin-bottom:18px;align-items:center}.page-head h1{font-size:clamp(25px,2.5vw,34px);letter-spacing:-.025em}.page-head p{font-size:13px}.eyebrow{font-size:10px;letter-spacing:.15em;color:#7156bd}
.btn{border-radius:11px;padding:9px 14px;font-size:13px;box-shadow:none}.btn.primary{background:linear-gradient(135deg,#5a38aa,#7253c6);box-shadow:0 6px 14px rgba(91,53,181,.16)}.btn.ghost{background:#fff;border-color:#e3e3eb}.btn.danger{box-shadow:none}
input,select,textarea{border-color:#ddddE7;border-radius:11px;padding:10px 12px;background:#fdfdfe}input:focus,select:focus,textarea:focus{background:#fff;border-color:#8d73d1;box-shadow:0 0 0 3px rgba(114,83,198,.1)}
.selector{background:#fff;border:1px solid var(--line);border-radius:14px;padding:9px 12px;display:inline-flex;margin-bottom:18px;box-shadow:0 5px 18px rgba(29,24,63,.04)}.selector label{font-size:11px;color:var(--muted);font-weight:800}.selector select{min-width:280px;border:0;background:#f7f7fa;padding:8px 10px}
.stats{gap:11px}.stats>div{border-radius:15px;padding:15px 16px;box-shadow:0 6px 20px rgba(29,24,63,.045)}.stats span{font-size:11px}.stats b{font-size:25px;letter-spacing:-.03em}
th{background:#fafafd;font-size:10px;letter-spacing:.07em;color:#7d7b8e}th,td{padding:11px 13px}td{font-size:13px}
details summary{color:#5c3eac;font-size:13px;font-weight:750}.form-grid{gap:14px}.form-grid label,.mini-form label{font-size:12px}.panel h2{letter-spacing:-.015em}
.hero.elegant-hero{min-height:184px;padding:34px 36px;background:radial-gradient(circle at 80% 0,rgba(124,88,210,.45),transparent 42%),linear-gradient(135deg,#17152f,#2a2253);border-radius:24px;box-shadow:0 18px 44px rgba(30,25,65,.15);position:relative;overflow:hidden}.hero.elegant-hero:after{content:"";position:absolute;width:230px;height:230px;border:1px solid rgba(255,255,255,.08);border-radius:50%;right:-45px;bottom:-110px}.hero.elegant-hero h1{font-size:clamp(31px,4.5vw,51px);line-height:1.04;letter-spacing:-.04em;max-width:840px}.hero.elegant-hero p{font-size:14px;max-width:760px;color:#d3cce7}
.candidate-showcase{max-width:1080px;border-radius:22px;padding:20px;margin:18px auto}.showcase-head{margin-bottom:14px}.showcase-head h2{font-size:22px;letter-spacing:-.02em}.showcase-head p{font-size:13px;max-width:650px}.slider-btn{width:38px;height:38px;border-radius:11px;font-size:24px;box-shadow:none;background:#faf9fd}.slider-btn:hover{background:#efeafb}
.front-candidate{position:relative;border-radius:17px;box-shadow:none;transition:.2s;border-color:#e8e7ee}.front-candidate:hover{transform:translateY(-2px);box-shadow:0 12px 28px rgba(31,26,65,.09)}.front-candidate>img,.front-photo-placeholder{aspect-ratio:4/3}.front-candidate-body{padding:14px 15px 16px}.front-candidate-body h3{font-size:17px;letter-spacing:-.015em;margin:9px 0 5px}.front-candidate-body p{font-size:12px}.candidate-meta{display:flex;align-items:center;justify-content:space-between;gap:8px}.candidate-number{font-size:11px;color:var(--muted);font-weight:800}.sample-ribbon{position:absolute;z-index:2;top:12px;right:12px;background:rgba(23,21,47,.9);color:#fff;border:1px solid rgba(255,255,255,.18);font-size:9px;font-weight:900;letter-spacing:.13em;padding:6px 8px;border-radius:999px;backdrop-filter:blur(8px)}.sample-card{background:#fcfbff}.badge.sample{background:#fff2cc;color:#8a5b00;border:1px solid #f4d88b;margin-left:5px}.badge{font-size:10px;padding:4px 8px}
.public-grid{grid-template-columns:minmax(330px,500px) minmax(300px,1fr);max-width:1080px;gap:16px;margin:18px auto}.public-grid .panel{box-shadow:0 8px 28px rgba(29,24,63,.055)}.login-card h2,.public-info h2{font-size:20px}.login-card label{font-size:12px}.info-list span{background:#fafafd;border-color:#ededf3;border-radius:10px;padding:9px 11px}.info-list b{font-size:9px}.public-info p{font-size:13px;line-height:1.6}
.candidate-admin-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.candidate-admin{padding:16px;border-radius:17px}.candidate-top{grid-template-columns:118px 1fr;gap:14px}.candidate-top img,.candidate-top .photo-placeholder{width:118px;border-radius:13px}.candidate-top h2{font-size:17px;line-height:1.25;margin:7px 0 4px}.candidate-top p{font-size:12px;color:var(--muted)}
footer{font-size:10px;color:#a09ead;padding:18px 24px}
@media(max-width:980px){
  .shell{grid-template-columns:1fr}.sidebar{position:sticky;top:68px;z-index:18;padding:8px 10px;border-right:0;border-bottom:1px solid var(--line);overflow-x:auto;background:rgba(251,251,253,.97);backdrop-filter:blur(12px)}
  .nav-rail{position:static!important;display:flex!important;flex-direction:row;justify-content:flex-start;min-width:max-content!important;gap:5px}.nav-item{width:44px;height:42px}.nav-item::after{display:none}.nav-separator{width:1px;height:25px;margin:8px 4px}.main{padding:20px}.candidate-admin-grid{grid-template-columns:1fr}
}
@media(max-width:640px){
  .topbar{height:60px;padding:0 11px}.brand img{width:36px;height:36px}.brand b{font-size:12px}.brand small{display:none}.profile-name{display:none}.profile-chip{gap:0}.profile-dot{width:30px;height:30px}.icon-action{width:34px;height:34px}
  .sidebar{top:60px;padding:6px 8px}.nav-item{width:40px;height:38px;border-radius:11px}.nav-icon{width:18px;height:18px}.main,.public-main{padding:12px}.panel{padding:15px}.page-head{align-items:flex-start}.page-head h1{font-size:25px}
  .hero.elegant-hero{padding:25px 20px;min-height:154px;border-radius:19px}.hero.elegant-hero h1{font-size:30px}.hero.elegant-hero p{font-size:12px;line-height:1.55}
  .candidate-showcase{padding:14px;border-radius:17px}.showcase-head h2{font-size:19px}.showcase-head p{display:none}.slider-actions{gap:5px}.slider-btn{width:34px;height:34px}.front-candidate>img,.front-photo-placeholder{aspect-ratio:16/11}.public-grid{gap:12px}.candidate-top{grid-template-columns:92px 1fr}.candidate-top img,.candidate-top .photo-placeholder{width:92px}.selector{width:100%;display:grid}.selector select{min-width:0;width:100%}
}
/* fix shared checkbox/checkmark class collision */
label.check{width:auto;height:auto;border-radius:0;background:transparent;color:#4b4a5d;display:flex;align-items:center;justify-content:flex-start;gap:8px;padding:0;font-size:12px;font-weight:650;margin:0}
label.check input{width:auto;flex:0 0 auto}.thanks .check{width:72px;height:72px;background:#dcfce7;color:#15803d;border-radius:50%;display:grid;place-items:center;font-size:38px;font-weight:900;margin:0 auto 18px;padding:0}

/* v1.4 MOBILE-FIRST POLISH — touch ergonomics, compact voting, bottom admin dock */
@media (max-width:760px){
  :root{--mobile-pad:12px;--mobile-dock:66px}
  html{scroll-padding-top:72px;-webkit-text-size-adjust:100%}
  body{overflow-x:hidden;padding-bottom:env(safe-area-inset-bottom)}
  button,a,input,select,textarea,summary{-webkit-tap-highlight-color:transparent}
  .topbar{height:58px;padding:0 max(10px,env(safe-area-inset-left)) 0 max(10px,env(safe-area-inset-right));position:sticky;top:0}
  .brand{gap:9px;max-width:calc(100vw - 92px)}
  .brand img{width:35px;height:35px;border-radius:9px}
  .brand b{font-size:12px;max-width:58vw}
  .brand small{display:none}
  .profile-name{display:none}
  .profile-chip{gap:0}
  .profile-dot{width:32px;height:32px;font-size:11px}
  .icon-action{width:38px;height:38px;border-radius:12px}

  /* Admin navigation becomes a thumb-friendly bottom dock. */
  .admin-session .shell{display:block;min-height:calc(100vh - 58px)}
  .admin-session .sidebar{position:fixed;left:0;right:0;bottom:0;top:auto;z-index:40;height:calc(var(--mobile-dock) + env(safe-area-inset-bottom));padding:7px max(8px,env(safe-area-inset-left)) calc(7px + env(safe-area-inset-bottom)) max(8px,env(safe-area-inset-right));border:0;border-top:1px solid #e3e1eb;background:rgba(253,253,255,.96);backdrop-filter:blur(18px);box-shadow:0 -8px 28px rgba(31,26,65,.09);overflow-x:auto;overflow-y:hidden;scrollbar-width:none}
  .admin-session .sidebar::-webkit-scrollbar{display:none}
  .admin-session .nav-rail{position:static!important;display:flex!important;flex-direction:row;align-items:center;gap:4px;min-width:max-content!important;height:52px}
  .admin-session .nav-item{width:48px;height:48px;flex:0 0 48px;border-radius:14px!important;overflow:visible}
  .admin-session .nav-item::after{display:none!important}
  .admin-session .nav-icon{width:20px;height:20px}
  .admin-session .nav-item.active{width:72px;flex-basis:72px;padding-bottom:13px!important}
  .admin-session .nav-item.active .nav-text{display:block;position:absolute;left:4px;right:4px;bottom:4px;font-size:8px;line-height:1;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;color:#50339b;font-weight:850}
  .admin-session .nav-separator{width:1px;height:28px;margin:0 4px;flex:0 0 1px}
  .admin-session .main{padding:14px var(--mobile-pad) calc(var(--mobile-dock) + 22px + env(safe-area-inset-bottom));max-width:none}
  .public-main{padding:12px var(--mobile-pad) calc(20px + env(safe-area-inset-bottom));width:100%}
  .voter-session .public-main{padding-bottom:calc(102px + env(safe-area-inset-bottom))}

  .panel{padding:14px;border-radius:16px;margin-bottom:12px;box-shadow:0 5px 18px rgba(29,24,63,.045)}
  .page-head,.panel-head,.event-main{display:flex;flex-direction:column;gap:9px;align-items:stretch;margin-bottom:14px}
  .page-head h1{font-size:23px;line-height:1.12;margin:3px 0 4px}
  .page-head p{font-size:12px;line-height:1.45}
  .panel-head h2{font-size:18px;margin-bottom:0}
  .eyebrow{font-size:9px;letter-spacing:.14em}

  .btn{min-height:44px;padding:10px 13px;border-radius:12px;font-size:13px;touch-action:manipulation}
  .btn.small{min-height:38px;padding:8px 10px;font-size:12px}
  input,select,textarea{min-height:46px;padding:11px 12px;border-radius:12px;font-size:16px}
  textarea{min-height:110px}
  label{gap:6px;font-size:12px}
  label.check{min-height:32px}
  label.check input{min-height:0}

  .form-grid,.filter-grid,.dashboard-grid,.public-grid,.checklist,.perm-grid,.geo-grid{grid-template-columns:1fr!important;gap:10px}
  .span2,.filter-actions{grid-column:auto!important}
  .inline{gap:8px}
  .selector{display:grid;width:100%;padding:9px 10px;margin-bottom:12px}
  .selector label{font-size:10px}
  .selector select{width:100%;min-width:0;background:#f7f7fa}
  .search input{min-width:0}
  .filter-actions{display:grid;grid-template-columns:1fr 1fr;width:100%}
  .filter-actions .btn{width:100%}
  .event-actions,.status-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%;gap:7px}
  .event-actions .btn,.status-actions .btn,.event-actions form,.status-actions form{width:100%}
  .event-actions form .btn,.status-actions form .btn{width:100%}

  .stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:12px}
  .stats>div{padding:12px 13px;border-radius:14px;min-width:0}
  .stats span{font-size:10px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .stats b{font-size:22px;margin-top:4px}
  .checkitem{padding:11px;border-radius:11px;align-items:flex-start}
  .checkitem b{font-size:12px;line-height:1.35}
  .checkitem span{font-size:11px;text-align:right;max-width:46%}
  .mini-result{grid-template-columns:1fr auto;padding:10px}
  .mini-result>div{align-items:flex-start;flex-direction:column;gap:5px}
  .mini-result strong{font-size:16px}
  .mini-result small{grid-column:1/-1;text-align:left;font-size:11px}

  /* Tables remain complete, but scrolling is deliberate and the first column stays readable. */
  .table-wrap{margin-left:-2px;margin-right:-2px;overflow-x:auto;overscroll-behavior-x:contain;-webkit-overflow-scrolling:touch;scrollbar-width:thin;border-radius:12px;box-shadow:inset -14px 0 16px -18px rgba(25,24,42,.35)}
  .table-wrap.panel{padding:0;margin-bottom:12px;border-radius:14px}
  .table-wrap table,.table-wrap.panel table{min-width:680px!important}
  .table-wrap.compact table{min-width:560px!important}
  th,td{padding:10px 11px;font-size:12px;white-space:nowrap}
  th{font-size:9px}
  .table-wrap th:first-child,.table-wrap td:first-child{position:sticky;left:0;z-index:2;background:#fff;box-shadow:7px 0 12px -12px rgba(25,24,42,.6)}
  .table-wrap th:first-child{background:#fafafd;z-index:3}
  .pagination{display:grid;gap:8px;margin-top:10px}
  .pagination>div{display:flex;overflow-x:auto;flex-wrap:nowrap;padding-bottom:2px;scrollbar-width:none}
  .pagination>div::-webkit-scrollbar{display:none}
  .pagination .btn{min-width:42px;flex:0 0 auto}

  /* Public/login */
  .hero.elegant-hero{min-height:132px;padding:22px 18px;border-radius:18px;margin-bottom:12px;align-items:flex-end}
  .hero.elegant-hero h1{font-size:27px;line-height:1.04;margin:6px 0 7px}
  .hero.elegant-hero p{font-size:11px;line-height:1.5;max-width:92%}
  .candidate-showcase{padding:13px 12px;border-radius:17px;margin:12px auto}
  .showcase-head{align-items:center;gap:8px;margin-bottom:11px}
  .showcase-head h2{font-size:18px;margin:3px 0 0}
  .showcase-head p{display:none}
  .slider-actions{gap:5px}
  .slider-btn{width:36px;height:36px;border-radius:11px;font-size:22px}
  .candidate-slider{margin-right:-12px;padding-right:12px;scroll-padding-left:0;touch-action:pan-x}
  .slider-track{grid-auto-columns:min(84vw,310px)!important;gap:10px}
  .front-candidate{scroll-snap-stop:always;border-radius:16px}
  .front-candidate>img,.front-photo-placeholder{aspect-ratio:16/10}
  .front-candidate-body{padding:12px 13px 13px}
  .front-candidate-body h3{font-size:16px;margin:7px 0 3px}
  .front-candidate-body p{font-size:11px}
  .candidate-number{font-size:10px}
  .sample-ribbon{top:9px;right:9px;padding:5px 7px;font-size:8px}
  .slider-dots{margin-top:10px}
  .public-grid{margin:10px auto;gap:10px}
  .login-card{margin:0;max-width:none}
  .login-card h2,.public-info h2{font-size:18px}
  .login-card form{display:grid;gap:11px}
  .login-links{margin-top:13px;font-size:12px}
  .public-info p{font-size:12px}
  .info-list{gap:7px;margin-top:12px}
  .info-list span{padding:9px 10px;font-size:12px}
  .geo-login-note,.geo-review{padding:10px 11px;border-radius:11px}
  .geo-login-note span,.geo-review span,.geo-review small{font-size:11px}

  /* Voting: compact horizontal cards reduce excessive scrolling on phones. */
  .ballot{margin:18px 0 24px}
  .ballot-title{gap:10px;margin-bottom:10px}
  .ballot-title h2{font-size:19px;line-height:1.15}
  .ballot-title p{font-size:11px}
  .step{width:32px;height:32px;border-radius:10px;flex:0 0 32px;font-size:13px}
  .candidate-grid{grid-template-columns:1fr;gap:9px}
  .candidate-inner{padding:10px;display:grid;grid-template-columns:104px minmax(0,1fr);grid-template-areas:"photo number" "photo name" "photo details" "photo pick";column-gap:11px;row-gap:5px;border-radius:16px;align-content:start;min-height:142px}
  .candidate-inner>img,.candidate-inner>.photo-placeholder{grid-area:photo;width:104px;height:122px;aspect-ratio:auto!important;object-fit:cover;border-radius:12px;align-self:start}
  .candidate-inner>.photo-placeholder{font-size:34px}
  .candidate-inner .number{grid-area:number;margin:2px 0 0;font-size:10px;align-self:end}
  .candidate-inner h3{grid-area:name;font-size:17px;line-height:1.15;margin:0;align-self:start}
  .candidate-inner details{grid-area:details;border-top:0;padding-top:0;align-self:start}
  .candidate-inner summary{font-size:11px;min-height:28px;display:flex;align-items:center}
  .candidate-inner .rich{font-size:11px;max-height:190px;padding-top:5px}
  .pick-label{grid-area:pick;margin-top:2px;padding:8px 7px;border-radius:9px;font-size:11px;align-self:end}
  .candidate-card>input:checked+.candidate-inner{box-shadow:0 0 0 3px #ede9fe,0 9px 24px rgba(91,33,182,.12)}

  .progress-box{min-width:0;width:100%;display:flex;justify-content:space-between;align-items:center;padding:9px 12px;border-radius:12px;text-align:left}
  .progress-box b{font-size:20px}
  .progress-box span{font-size:10px}
  .voter-session .sticky-submit{position:fixed;left:max(10px,env(safe-area-inset-left));right:max(10px,env(safe-area-inset-right));bottom:calc(10px + env(safe-area-inset-bottom));z-index:45;border-radius:15px;padding:10px 11px;background:rgba(23,21,47,.97);backdrop-filter:blur(14px);box-shadow:0 12px 36px rgba(13,10,35,.28)}
  .sticky-submit b{font-size:12px}
  .sticky-submit small{font-size:9px;line-height:1.2}
  .sticky-submit .btn{min-width:126px;min-height:42px;padding:9px 12px}

  /* Review/thanks */
  .narrow{max-width:none}
  .review-card{padding:12px 13px;border-radius:13px;display:block}
  .review-card span{display:block;font-size:11px;margin-bottom:4px}
  .review-card b{font-size:14px;line-height:1.35}
  .review-actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;position:sticky;bottom:calc(8px + env(safe-area-inset-bottom));z-index:25;background:rgba(244,245,249,.93);backdrop-filter:blur(10px);padding:8px 0 2px}
  .review-actions .btn,.review-actions form,.review-actions button{width:100%}
  .thanks{margin:20px auto;padding:26px 17px}
  .thanks h1{font-size:24px}
  .thanks p{font-size:13px;line-height:1.55}
  .thanks .check{width:62px;height:62px;font-size:32px}

  /* Admin cards and results */
  .candidate-admin-grid{grid-template-columns:1fr;gap:10px}
  .candidate-admin{padding:12px}
  .candidate-top{grid-template-columns:86px minmax(0,1fr);gap:10px}
  .candidate-top img,.candidate-top .photo-placeholder{width:86px;height:86px;aspect-ratio:1/1;border-radius:11px}
  .candidate-top h2{font-size:16px;margin:4px 0 2px}
  .candidate-top p{font-size:11px;margin:3px 0}
  .result-row{grid-template-columns:minmax(0,1fr) 54px;gap:8px;padding:3px 0}
  .result-row .bar{grid-column:1/-1;grid-row:2;height:11px}
  .result-name{min-width:0}
  .result-name b{font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
  .num{width:30px;height:30px;border-radius:9px;font-size:11px;flex:0 0 30px}
  .result-count{font-size:11px}
  .project-ballot{padding:13px;border-radius:15px}
  .project-ballot h2{font-size:21px}
  .project-row{grid-template-columns:minmax(0,1fr) 50px;gap:7px}
  .project-row strong{font-size:19px}
  footer{padding:12px 14px calc(12px + env(safe-area-inset-bottom));font-size:9px}
  .admin-session footer{padding-bottom:calc(var(--mobile-dock) + 12px + env(safe-area-inset-bottom))}
}

@media (max-width:380px){
  :root{--mobile-pad:9px}
  .brand b{max-width:52vw;font-size:11px}
  .hero.elegant-hero{padding:19px 15px}.hero.elegant-hero h1{font-size:24px}
  .panel{padding:12px}
  .stats>div{padding:10px}.stats b{font-size:20px}
  .event-actions,.status-actions{grid-template-columns:1fr}
  .candidate-inner{grid-template-columns:92px minmax(0,1fr);column-gap:9px;padding:9px;min-height:130px}
  .candidate-inner>img,.candidate-inner>.photo-placeholder{width:92px;height:110px}
  .candidate-inner h3{font-size:15px}
  .sticky-submit small{display:none}
  .sticky-submit .btn{min-width:112px;font-size:12px}
  .review-actions{grid-template-columns:1fr}
}

@media (max-height:520px) and (orientation:landscape){
  .admin-session .sidebar{height:58px;padding-top:4px;padding-bottom:4px}
  .admin-session .nav-rail{height:48px}.admin-session .nav-item{height:42px}
  .hero.elegant-hero{min-height:110px}
  .voter-session .sticky-submit{bottom:6px}
}

/* === Public Front Refinement 2026-08-29 === */
.public-session{background:linear-gradient(180deg,#f7f7fb 0,#f4f5f9 42%,#f7f8fb 100%)}
.public-session .topbar{background:rgba(17,24,39,.96);backdrop-filter:blur(14px);box-shadow:0 1px 0 rgba(255,255,255,.05),0 8px 28px rgba(17,24,39,.12)}
.public-session .public-main{max-width:1120px;padding-top:22px}
.public-hero{min-height:148px!important;padding:27px 30px!important;align-items:center!important;justify-content:space-between;gap:24px;margin-bottom:16px!important;background:radial-gradient(circle at 84% 10%,rgba(139,92,246,.34),transparent 34%),linear-gradient(132deg,#151329 0%,#211a43 52%,#30235c 100%)!important}
.public-hero-copy{position:relative;z-index:2;min-width:0}
.public-hero h1{font-size:clamp(29px,4vw,44px)!important;margin:7px 0 11px!important;max-width:760px!important;letter-spacing:-.035em!important}
.public-hero-meta{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.public-status,.public-mode{display:inline-flex;align-items:center;gap:7px;min-height:29px;padding:5px 10px;border-radius:999px;font-size:10px;font-weight:850;letter-spacing:.06em;text-transform:uppercase;border:1px solid rgba(255,255,255,.13);background:rgba(255,255,255,.08);color:#eeeaf8;backdrop-filter:blur(8px)}
.public-status i{width:7px;height:7px;border-radius:50%;display:block;background:#c4b5fd;box-shadow:0 0 0 4px rgba(196,181,253,.12)}
.public-status.active i{background:#86efac;box-shadow:0 0 0 4px rgba(134,239,172,.12)}
.public-status.preview i{background:#fcd34d;box-shadow:0 0 0 4px rgba(252,211,77,.12)}
.hero-mark{width:86px;height:86px;display:grid;place-items:center;border-radius:24px;background:rgba(255,255,255,.07);border:1px solid rgba(255,255,255,.1);color:rgba(255,255,255,.65);transform:rotate(-4deg);flex:0 0 auto}
.hero-mark .nav-icon{width:43px;height:43px}
.candidate-showcase{margin:14px auto!important;padding:17px!important;border-radius:20px!important;border-color:#e9e8ef!important;box-shadow:0 8px 28px rgba(28,24,58,.05)!important}
.candidate-showcase .showcase-head{margin-bottom:12px!important;align-items:center!important}
.candidate-showcase .showcase-head h2{font-size:20px!important;margin:3px 0 0!important}
.candidate-showcase .showcase-head p{display:none!important}
.refined-public-grid{grid-template-columns:minmax(340px,.92fr) minmax(360px,1.08fr)!important;gap:14px!important;margin:14px auto!important}
.refined-public-grid .panel{margin:0!important;border-radius:20px!important;border-color:#e9e8ef!important;box-shadow:0 8px 28px rgba(28,24,58,.05)!important}
.refined-login{padding:20px!important;max-width:none!important}
.login-title,.school-block{display:flex;align-items:center;gap:12px;margin-bottom:17px}
.login-title h2,.school-block h2{margin:2px 0 0!important;font-size:19px!important;line-height:1.2;letter-spacing:-.018em}
.login-symbol,.school-symbol{width:42px;height:42px;display:grid;place-items:center;border-radius:13px;background:#f0ebff;color:var(--primary);border:1px solid #e4dbff;flex:0 0 auto}
.login-symbol .nav-icon,.school-symbol .nav-icon{width:20px;height:20px}
.refined-login form{gap:12px!important}
.refined-login label{font-size:11px;color:#4b5563}
.refined-login input{background:#fcfcfe;border-color:#dcdde4}
.refined-login .btn.primary{min-height:46px;border-radius:12px;box-shadow:0 8px 18px rgba(91,33,182,.15)}
.refined-login .login-links{margin-top:13px;font-size:11px}
.refined-login .login-links a{color:#6b7280;font-weight:700}
.refined-login .login-links a:hover{color:var(--primary)}
.refined-info{padding:20px!important;background:linear-gradient(180deg,#fff,#fcfcfe)}
.refined-info .school-block{margin-bottom:15px}
.refined-info .school-symbol{background:#f3f4f6;color:#3f4653;border-color:#e5e7eb}
.refined-info .info-list{display:grid;gap:7px;margin:0}
.refined-info .info-list span{display:grid;grid-template-columns:84px minmax(0,1fr);align-items:start;gap:11px;padding:10px 11px!important;border-radius:11px!important;background:#f8f8fb!important;border:1px solid #eeeeF3!important;font-size:12px;line-height:1.45;color:#3f4653}
.refined-info .info-list b{font-size:9px!important;letter-spacing:.09em;color:#8a8f9b;margin-top:2px}
.refined-info>p{display:none!important}
.geo-login-note{grid-template-columns:1fr auto!important;align-items:center;gap:8px!important;padding:9px 11px!important;margin-bottom:12px!important;background:#f7fbff!important;border-color:#dbeafe!important;color:#075985!important}
.geo-login-note b{font-size:11px}.geo-login-note span{font-size:10px!important;text-align:right;white-space:nowrap}
.public-session footer{color:#9ca3af}

@media(max-width:760px){
  .public-session .public-main{padding-top:10px!important}
  .public-hero{min-height:112px!important;padding:18px 16px!important;border-radius:17px!important;margin-bottom:10px!important}
  .public-hero h1{font-size:25px!important;line-height:1.06!important;margin:5px 0 9px!important;max-width:88%!important}
  .public-status,.public-mode{min-height:25px;padding:4px 8px;font-size:8px;gap:5px}
  .public-status i{width:6px;height:6px}
  .hero-mark{width:58px;height:58px;border-radius:17px;position:absolute;right:14px;top:50%;transform:translateY(-50%) rotate(-5deg);opacity:.82}
  .hero-mark .nav-icon{width:28px;height:28px}
  .candidate-showcase{margin:10px auto!important;padding:12px!important;border-radius:16px!important}
  .candidate-showcase .showcase-head{margin-bottom:9px!important}
  .candidate-showcase .showcase-head h2{font-size:17px!important}
  .refined-public-grid{display:flex!important;flex-direction:column!important;gap:9px!important;margin:9px auto!important}
  .refined-login{order:1;padding:14px!important;border-radius:16px!important}
  .refined-info{order:2;padding:13px!important;border-radius:16px!important}
  .login-title,.school-block{gap:10px;margin-bottom:12px}
  .login-title h2,.school-block h2{font-size:16px!important}
  .login-symbol,.school-symbol{width:36px;height:36px;border-radius:11px}
  .login-symbol .nav-icon,.school-symbol .nav-icon{width:18px;height:18px}
  .refined-login form{gap:9px!important}
  .refined-login .btn.primary{min-height:45px}
  .refined-info .info-list{gap:6px}
  .refined-info .info-list span{grid-template-columns:65px minmax(0,1fr);gap:8px;padding:8px 9px!important;font-size:10.5px;line-height:1.4}
  .refined-info .info-list b{font-size:8px!important}
  .geo-login-note{grid-template-columns:1fr!important;gap:2px!important}
  .geo-login-note span{text-align:left;white-space:normal;font-size:9.5px!important}
}

@media(max-width:380px){
  .public-hero h1{font-size:22px!important;max-width:85%!important}
  .hero-mark{width:52px;height:52px;right:12px}
  .refined-info .info-list span{grid-template-columns:58px minmax(0,1fr)}
}
.public-session footer{display:none}


/* =====================================================
   E-VOTING PROFESSIONAL UI v2 - UX Enhancement Patch
   Generated 2026
   ===================================================== */
:root{
 --primary:#2563eb;
 --primary2:#0ea5e9;
 --election-gold:#f59e0b;
 --soft-bg:#f8fafc;
}

/* Premium vote button */
.btn.primary{
 background:linear-gradient(135deg,#2563eb,#0ea5e9)!important;
 border-radius:14px!important;
 min-height:46px;
 box-shadow:0 12px 24px rgba(37,99,235,.22);
 transition:.25s ease;
}
.btn.primary:hover{
 transform:translateY(-3px) scale(1.02)!important;
 box-shadow:0 18px 35px rgba(37,99,235,.3);
}

/* Candidate card professional */
.candidate-grid{
 grid-template-columns:repeat(auto-fit,minmax(250px,1fr));
 gap:22px;
}
.candidate-inner{
 border-radius:24px!important;
 padding:16px!important;
 overflow:hidden;
 position:relative;
 background:linear-gradient(180deg,#fff,#f8fafc);
 transition:.3s ease!important;
}
.candidate-inner:hover{
 transform:translateY(-8px);
 box-shadow:0 25px 45px rgba(15,23,42,.15)!important;
}

/* Full candidate photo no crop */
.candidate-inner>img,
.candidate-top img{
 object-fit:contain!important;
 object-position:center!important;
 background:linear-gradient(145deg,#eef2ff,#f8fafc)!important;
 padding:10px;
}

.candidate-inner>img{
 aspect-ratio:3/4!important;
 border-radius:18px!important;
}

/* Number badge */
.candidate-inner .number{
 display:inline-flex;
 background:#eff6ff;
 padding:6px 12px;
 border-radius:999px;
 font-size:13px!important;
}

/* selected animation */
.candidate-card>input:checked+.candidate-inner{
 border-color:#2563eb!important;
 box-shadow:0 0 0 5px rgba(37,99,235,.12),0 25px 45px rgba(37,99,235,.18)!important;
 animation:selectedPulse .45s ease;
}
@keyframes selectedPulse{
 from{transform:scale(.98)}
 to{transform:scale(1)}
}
.candidate-card>input:checked+.candidate-inner .pick-label{
 background:linear-gradient(135deg,#2563eb,#0ea5e9)!important;
}

/* vote sticky action */
.sticky-submit{
 border-radius:20px!important;
 backdrop-filter:blur(14px);
 background:rgba(15,23,42,.92)!important;
}

/* mobile improvement */
@media(max-width:768px){
 .candidate-grid{grid-template-columns:1fr!important}
 .candidate-inner>img{aspect-ratio:3/4!important}
 .sticky-submit{bottom:8px;padding:10px!important}
 .btn.primary{width:100%}
}

/* admin stat cards */
.stats>div:hover{
 transform:translateY(-4px);
 transition:.25s;
 box-shadow:0 18px 35px rgba(15,23,42,.12);
}

/* ===== E-Voting Professional UI v2.1 Upgrade ===== */
:root{--primary:#2563eb;--primary2:#06b6d4;--accent:#f59e0b;--shadow:0 14px 38px rgba(15,23,42,.10)}
.candidate-inner{position:relative;overflow:hidden;background:linear-gradient(180deg,#fff,#f8fafc);}
.candidate-inner>img,.candidate-top img{object-fit:contain!important;padding:10px;background:linear-gradient(135deg,#f8fafc,#e2e8f0);}
.candidate-inner:before{content:"";position:absolute;inset:0;background:linear-gradient(135deg,rgba(37,99,235,.08),transparent);opacity:0;transition:.25s;pointer-events:none}
.candidate-card:hover .candidate-inner:before{opacity:1}
.candidate-card:hover .candidate-inner{transform:translateY(-6px);box-shadow:0 22px 45px rgba(37,99,235,.16)}
.candidate-card>input:checked+.candidate-inner{border-color:#2563eb;box-shadow:0 0 0 4px rgba(37,99,235,.15),0 20px 45px rgba(37,99,235,.20)}
.pick-label{background:#eff6ff;color:#2563eb;transition:.25s}
.candidate-card>input:checked+.candidate-inner .pick-label{background:linear-gradient(135deg,#2563eb,#06b6d4)}
.btn.primary{background:linear-gradient(135deg,#2563eb,#06b6d4);box-shadow:0 12px 25px rgba(37,99,235,.25)}
.btn.primary:hover{transform:translateY(-2px) scale(1.02)}
.vote-success-animation{animation:votePop .5s ease}
@keyframes votePop{0%{transform:scale(.8);opacity:0}100%{transform:scale(1);opacity:1}}
.countdown-box{display:flex;gap:10px;justify-content:center}
.countdown-box div{background:#fff;border-radius:14px;padding:12px;min-width:70px;text-align:center;box-shadow:var(--shadow)}
.countdown-box b{font-size:25px;display:block}
@media(max-width:760px){.candidate-grid{grid-template-columns:1fr}.candidate-inner>img{aspect-ratio:3/4}.sticky-submit{flex-direction:column;align-items:stretch}}

/* E-Voting Professional UI v2.2 Intelligent Photo Manager */
.candidate-inner>img,.candidate-top img,.front-candidate img{object-fit:contain!important;background:#f8fafc;padding:8px}
.photo-ai-badge{display:inline-flex;padding:5px 10px;border-radius:999px;background:#dbeafe;color:#1d4ed8;font-weight:800;font-size:12px}
.presentation .project-bar i{transition:width .8s ease}


/* E-Voting Professional UI v2.3 */
.candidate-card{cursor:pointer;transition:.25s ease;}
.candidate-card:hover{transform:translateY(-5px);}
.candidate-coblos{outline:4px solid rgba(37,99,235,.35);box-shadow:0 0 25px rgba(37,99,235,.35)!important;transform:scale(1.02);}
.candidate-coblos::after{content:'✓ TERPILIH';position:absolute;top:12px;right:12px;background:#10b981;color:#fff;padding:6px 10px;border-radius:999px;font-weight:700;}


/* ===== E-Voting Professional UI v2.4 ===== */
.candidate-card .candidate-inner{position:relative;overflow:hidden}
.candidate-card.candidate-coblos .candidate-inner:after{
 content:'✓ TERPILIH';
 position:absolute;
 top:14px;
 right:14px;
 background:#15803d;
 color:#fff;
 padding:6px 10px;
 border-radius:999px;
 font-size:12px;
 font-weight:900;
 animation:selectedPop .25s ease;
}
@keyframes selectedPop{from{transform:scale(.5);opacity:.2}to{transform:scale(1);opacity:1}}

/* v2.9.1 FINAL POLISH PATCH */
.candidate-inner img, .confirm-photo {
 object-fit: contain;
 width:100%;
 max-height:280px;
 background:#fff;
 border-radius:16px;
}
.candidate-card input[type=radio]{position:absolute;opacity:0}
.candidate-card:has(input:checked) .candidate-inner{
 border:3px solid var(--primary2);
 box-shadow:0 0 0 4px rgba(124,58,237,.18),var(--shadow);
 transform:translateY(-3px);
}
.candidate-card .candidate-inner{transition:.2s}
.confirm-photo{
 display:block;
 margin:18px auto;
 width:180px;
 height:220px;
}
.candidate-confirm{
 text-align:center;
 display:flex;
 flex-direction:column;
 align-items:center;
 gap:12px;
}
.candidate-confirm em{
 color:var(--success);
 font-weight:800;
 font-style:normal;
}
.qr-print canvas,.qr-print img{
 width:88px!important;
 height:88px!important;
 image-rendering:auto;
}
@media print{
 .qr-print canvas,.qr-print img{width:88px!important;height:88px!important}
}

/* v2.9.3 Candidate Selection UX Patch */
.candidate-card{cursor:pointer;position:relative;transition:transform .2s ease,box-shadow .2s ease,border-color .2s ease}
.candidate-card:hover{transform:translateY(-4px)}
.candidate-card input{position:absolute;opacity:0}
.candidate-inner{height:100%;border:2px solid transparent;border-radius:18px;padding:14px;transition:.25s;overflow:hidden}
.candidate-card input:checked + .candidate-inner{
 border-color:#7c3aed;
 box-shadow:0 0 0 4px rgba(124,58,237,.16),0 18px 35px rgba(91,33,182,.18);
 animation:coblosPulse .45s ease;
}
.candidate-card input:checked + .candidate-inner:after{
 content:"✓ TERPILIH";
 position:absolute;right:18px;top:18px;background:#5b21b6;color:white;padding:7px 12px;border-radius:999px;font-weight:800;font-size:12px;
 animation:stampIn .35s ease;
}
.candidate-photo,.candidate-inner img{width:100%;height:270px;object-fit:contain;object-position:center;background:linear-gradient(135deg,#f5f3ff,#fff);border-radius:14px}
.candidate-inner h3,.front-candidate-body h3{overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;font-size:clamp(14px,2vw,20px)}
.confirm-photo{width:240px!important;height:240px!important;object-fit:contain!important;background:#faf5ff;border-radius:22px;border:4px solid #7c3aed;margin:15px auto;display:block;animation:photoReveal .45s ease}
.candidate-confirm{text-align:center}
.pick-label{transition:.2s}
.candidate-card input:checked + .candidate-inner .pick-label{background:#5b21b6;color:white}
@keyframes coblosPulse{0%{transform:scale(.98)}50%{transform:scale(1.02)}100%{transform:scale(1)}}
@keyframes stampIn{from{transform:scale(0) rotate(-20deg)}to{transform:scale(1) rotate(0)}}
@keyframes photoReveal{from{opacity:0;transform:scale(.92)}to{opacity:1;transform:scale(1)}}
@media(max-width:600px){.candidate-photo,.candidate-inner img{height:220px}.confirm-photo{width:180px!important;height:180px!important}}
