@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@400;600;700;800;900&family=Open+Sans:wght@400;500;600&display=swap');

:root{
--navy:#1b2f5e;
--navy-dark:#122044;
--navy-light:#243870;
--gold:#c8922a;
--white:#ffffff;
--bg:#eef0f5;
--border:#dde2ec;
--text-dark:#1a1a2e;
--text-mid:#4a5568;
--text-light:#8a95a8;
--red:#c0392b;
--shadow:0 2px 12px rgba(27,47,94,0.10);
--shadow-lg:0 8px 32px rgba(27,47,94,0.16);
}

*,
*::before,
*::after{
box-sizing:border-box;
margin:0;
padding:0;
}

body{
font-family:'Open Sans',sans-serif;
background:var(--bg);
color:var(--text-dark);
min-height:100vh;
}

/* HEADER */

.page-header{
background:linear-gradient(135deg,var(--navy-dark),var(--navy),var(--navy-light));
padding:18px 32px;
display:flex;
align-items:center;
justify-content:space-between;
box-shadow:0 4px 16px rgba(0,0,0,0.25);
}

.page-header h1{
font-family:'Montserrat',sans-serif;
font-size:22px;
font-weight:900;
color:#fff;
letter-spacing:1px;
text-transform:uppercase;
}

.page-header .subtitle{
font-size:12px;
color:rgba(255,255,255,0.7);
letter-spacing:2px;
text-transform:uppercase;
}

/* LAYOUT */

.layout{
display:grid;
grid-template-columns:360px 1fr;
gap:24px;
max-width:1280px;
margin:28px auto;
padding:0 24px;
align-items:start;
}

/* PANELS */

.panel{
background:#fff;
border-radius:12px;
box-shadow:var(--shadow);
overflow:hidden;
}

.panel-header{
background:var(--navy);
padding:14px 20px;
font-family:'Montserrat';
font-size:13px;
font-weight:700;
color:#fff;
letter-spacing:1px;
text-transform:uppercase;
}

.panel-body{
padding:20px;
}

/* FORM */

.form-group{
margin-bottom:12px;
}

.form-group label{
display:block;
font-size:11px;
font-weight:600;
color:var(--text-mid);
letter-spacing:1px;
text-transform:uppercase;
margin-bottom:5px;
}

.form-group input[type="text"],
.form-group input[type="number"]{
width:100%;
padding:10px 14px;
border:1.5px solid var(--border);
border-radius:7px;
font-size:14px;
background:#f8f9fc;
}

.form-group input[type="file"]{
width:100%;
padding:8px 12px;
border:1.5px dashed var(--border);
border-radius:7px;
font-size:12px;
background:#f8f9fc;
}

.form-row{
display:grid;
grid-template-columns:1fr 1fr;
gap:10px;
}

/* BUTTONS */

.btn{
font-family:'Montserrat';
font-size:12px;
font-weight:700;
letter-spacing:1px;
padding:11px 20px;
border:none;
border-radius:7px;
cursor:pointer;
display:inline-flex;
align-items:center;
gap:6px;
}

.btn-primary{
background:var(--navy);
color:#fff;
width:100%;
justify-content:center;
}

.btn-primary:hover{
background:var(--navy-dark);
}

.btn-sm{
padding:6px 12px;
font-size:11px;
border-radius:5px;
background:var(--navy);
color:#fff;
}

.btn-danger{
background:#fef2f2;
color:var(--red);
border:1px solid #fecaca;
}

/* RESULTS */

.results-header{
background:linear-gradient(135deg,var(--navy-dark),var(--navy));
border-radius:12px 12px 0 0;
padding:18px 24px;
text-align:center;
}

.results-header h2{
font-family:'Montserrat';
font-size:20px;
font-weight:900;
color:#fff;
letter-spacing:2px;
text-transform:uppercase;
}

.const-name{
font-size:13px;
color:#dce3ff;
letter-spacing:2px;
margin-top:4px;
}

/* CANDIDATE CARD */

.candidates-wrapper{
background:var(--bg);
border-radius:0 0 12px 12px;
padding:16px;
display:flex;
flex-direction:column;
gap:12px;
}

.candidate-card{
background:#fff;
border-radius:10px;
padding:14px;
display:flex;
align-items:center;
gap:12px;
box-shadow:var(--shadow);
}

.candidate-card.leading{
border-left:6px solid var(--gold);
}

.cand-photo-wrap{
width:60px;
height:60px;
border-radius:50%;
overflow:hidden;
position:relative;
}

.cand-photo{
width:100%;
height:100%;
object-fit:cover;
}

.party-logo-badge{
position:absolute;
bottom:-3px;
right:-3px;
width:24px;
height:24px;
border-radius:50%;
background:#fff;
padding:2px;
}

/* CANDIDATE INFO */

.cand-info{
flex:1;
}

.cand-name{
font-weight:700;
font-size:15px;
}

.cand-party{
font-size:12px;
color:var(--text-light);
}

.cand-bar-track{
height:6px;
background:#e6e8ef;
border-radius:6px;
margin-top:6px;
overflow:hidden;
}

.cand-bar-fill{
height:100%;
background:var(--navy);
}

/* VOTES */

.cand-votes{
text-align:right;
min-width:90px;
}

.vote-number{
font-weight:800;
font-size:16px;
}

.vote-pct{
font-size:12px;
color:var(--text-light);
}

.leading-badge{
display:inline-block;
background:var(--gold);
color:#fff;
font-size:10px;
padding:3px 6px;
border-radius:4px;
margin-bottom:4px;
}

/* POSTER AREA */

.poster-outer{
margin-top:28px;
}

#poster1,
#poster2{
width:1080px;
max-width:100%;
border-radius:12px;
overflow:hidden;
-webkit-font-smoothing:antialiased;
-moz-osx-font-smoothing:grayscale;
}

/* TEMPLATE 1 */

#poster1{
background:var(--bg);
}

.poster-header{
background:var(--navy);
color:#fff;
padding:26px;
}

.poster-header h2{
font-family:'Montserrat';
font-size:30px;
font-weight:900;
letter-spacing:2px;
}

.poster-const{
font-size:14px;
letter-spacing:3px;
opacity:.8;
margin-top:4px;
}

.poster-body{
padding:26px;
display:flex;
flex-direction:column;
gap:16px;
}

.poster-card{
display:flex;
align-items:center;
gap:14px;
background:#fff;
padding:14px;
border-radius:8px;
box-shadow:var(--shadow);
}

.poster-card.leading{
border-left:6px solid var(--gold);
}

.p-photo-wrap{
width:64px;
height:64px;
border-radius:50%;
overflow:hidden;
position:relative;
}

.p-photo{
width:100%;
height:100%;
object-fit:cover;
}

.p-logo{
position:absolute;
bottom:-3px;
right:-3px;
width:26px;
height:26px;
border-radius:50%;
background:#fff;
padding:2px;
}

.p-info{
flex:1;
}

.p-name{
font-weight:700;
font-size:16px;
}

.p-party{
font-size:13px;
color:var(--text-light);
}

.p-bar-track{
height:8px;
background:#e6e8ef;
border-radius:8px;
margin-top:6px;
overflow:hidden;
}

.p-bar-fill{
height:100%;
background:var(--navy);
}

.p-votes{
text-align:right;
}

.p-vote-num{
font-size:20px;
font-weight:900;
}

.p-leading-badge{
display:inline-block;
background:var(--gold);
color:#fff;
font-size:11px;
padding:4px 7px;
border-radius:4px;
margin-bottom:4px;
}

.poster-footer{
background:#0f1e42;
color:#fff;
text-align:center;
padding:12px;
font-size:12px;
letter-spacing:1px;
}

/* TEMPLATE 2 */

#poster2{
background:#f0f2f7;
}

.t2-body{
padding:26px;
display:flex;
flex-direction:column;
gap:14px;
}

.t2-row{
display:flex;
align-items:center;
gap:12px;
background:#fff;
padding:14px;
border-radius:8px;
box-shadow:var(--shadow);
}

.t2-row-leading{
border-left:6px solid #000;
}

.t2-photo-wrap{
width:48px;
height:48px;
border-radius:50%;
overflow:hidden;
}

.t2-photo{
width:100%;
height:100%;
object-fit:cover;
}

.t2-info{
flex:1;
}

.t2-name{
font-weight:700;
}

.t2-vote-count{
font-size:13px;
color:var(--text-light);
}

.t2-bar-track{
height:6px;
background:#e6e8ef;
border-radius:6px;
margin-top:5px;
overflow:hidden;
}

.t2-bar-fill{
height:100%;
}

.t2-pct{
font-weight:700;
font-size:14px;
}

/* IMAGE QUALITY FIX */

.cand-photo,
.p-photo,
.t2-photo{
image-rendering:auto;
transform:translateZ(0);
}

.party-logo-badge,
.p-logo{
object-fit:contain;
}

/* FLASH MESSAGE */

.flash{
position:fixed;
bottom:20px;
right:20px;
background:var(--navy);
color:#fff;
padding:12px 18px;
border-radius:6px;
font-size:13px;
box-shadow:var(--shadow-lg);
}

.p-elected-badge {
    display:inline-block;
    background:#28a745; /* green */
    color:#fff;
    font-size:10px;
    font-weight:600;
    padding:2px 6px;
    border-radius:4px;
    margin-right:4px;
}