:root{--navy:#132943;--muted:#617083;--line:#dce2e8;--paper:#f5f6f8;--gold:#e5b74b}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--paper);color:var(--navy);font-family:Arial,Helvetica,sans-serif}header{background:#fff;border-top:5px solid var(--navy);border-bottom:1px solid var(--line);padding:22px max(5vw,20px);display:flex;align-items:center;justify-content:space-between;gap:20px}.brand{font-size:36px;font-weight:900;display:flex;gap:1px;align-items:center;text-decoration:none;color:var(--navy)}.brand>span{color:#b33042}.brand b{font-size:15px;letter-spacing:2px;margin-left:13px}.brand small{display:block;font-size:8px;letter-spacing:1.4px;margin-top:6px}nav{display:flex;gap:28px}a{color:inherit}nav a{font-size:13px;text-decoration:none;font-weight:700}.edition{font-size:12px;border:1px solid var(--line);padding:10px;letter-spacing:2px}main{max-width:1440px;margin:auto;padding:42px 5vw}.eyebrow{font-size:10px;letter-spacing:2px;font-weight:800;color:var(--muted)}.headline{display:flex;align-items:center;justify-content:space-between;gap:15px}h1{font-family:Georgia,serif;font-size:clamp(32px,4.5vw,61px);letter-spacing:-2px;margin:14px 0}h2{font-size:21px;margin:0 0 10px;letter-spacing:-.4px}h3{font-size:15px}.intro{color:var(--muted);max-width:690px;line-height:1.6;margin:0 0 28px}.badge{display:inline-block;background:#e9edf1;border-radius:4px;padding:8px 10px;font-size:11px;white-space:nowrap}.controls,.section-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.controls{padding:14px 0;border-top:1px solid var(--line);margin-bottom:12px}.controls label{font-size:12px;font-weight:700}.refresh{display:flex;gap:15px;align-items:center;font-size:11px;color:var(--muted)}button,.button,select,input{font:inherit;border:1px solid var(--line);border-radius:5px;background:#fff;color:var(--navy);padding:10px 12px}button,.button{cursor:pointer;text-decoration:none;font-size:12px;font-weight:700}select{font-size:12px;margin-left:8px}button:hover,.button:hover{background:#edf2f7}button:focus-visible,a:focus-visible,select:focus-visible,input:focus-visible,[role=button]:focus-visible{outline:3px solid #da9d21;outline-offset:3px}#notice{font-size:12px;line-height:1.5;padding:12px 15px;background:#fff5d8;border-left:3px solid var(--gold);margin-bottom:22px}.race{background:#fff;padding:26px;border:1px solid var(--line);border-radius:8px}.section-head>span{font-size:11px;color:var(--muted)}.party-cards{display:grid;grid-template-columns:repeat(7,1fr);gap:14px;margin:20px 0}.party-card{border-top:4px solid var(--colour);padding-top:12px}.party-card b{font-size:11px}.party-card strong{display:block;font-size:31px;margin:10px 0 3px}.party-card small{font-size:10px;color:var(--muted)}.track-wrap{position:relative;padding-bottom:25px}.seat-track{display:grid;grid-template-columns:repeat(28,1fr);gap:3px}.seat-track i{height:19px;background:#d9e0e7}.majority{position:absolute;left:53.57%;border-left:2px solid var(--navy);top:-5px;height:48px;padding-top:30px;padding-left:6px;font-size:9px;font-weight:bold}.caption{font-size:11px;color:var(--muted);line-height:1.6}.explorer{display:grid;grid-template-columns:1.45fr 1fr;gap:22px;margin:24px 0}.map-panel,aside,.directory{background:#fff;border:1px solid var(--line);border-radius:8px;padding:25px}.map{height:390px;background:radial-gradient(ellipse at 50% 45%,#fff,#edf2f6);border-radius:5px;margin-top:18px;overflow:hidden}.map svg{width:100%;height:100%}.map path{stroke:#fff;stroke-width:1.3;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill .2s}.map path:hover{stroke:#0d2947;stroke-width:2.7}.map path.selected{stroke:#bd8117;stroke-width:3}.map text{pointer-events:none;font-size:9px;fill:#24374b;paint-order:stroke;stroke:#fff;stroke-width:2px;font-weight:700}.switch{display:flex}.switch button[aria-pressed=true]{background:var(--navy);color:#fff}.legend{display:flex;flex-wrap:wrap;gap:13px;margin-top:16px;font-size:10px}.dot{display:inline-block;width:8px;height:8px;border-radius:2px;background:var(--colour);margin-right:6px}.grid{grid-template-columns:repeat(4,1fr);gap:7px;margin:24px 0;min-height:340px}.grid:not([hidden]){display:grid}.grid button{font-size:9px;border-top:4px solid var(--colour)}aside>select{width:100%;margin:15px 0;font-weight:bold}aside h2{font-family:Georgia,serif;font-size:29px}.chart-row{display:flex;align-items:center;gap:22px;margin:22px 0}.pie{width:128px;height:128px;flex:none}.pie svg{width:100%;height:100%}.big{font-size:31px}.chart-row p{margin:4px 0 12px}.candidate{border-top:1px solid var(--line);padding:13px 0}.candidate-top{display:flex;justify-content:space-between;gap:16px;font-size:12px}.candidate-name{font-weight:700;line-height:1.5}.candidate small{display:block;color:var(--muted);font-size:10px;margin-top:4px}.bar{height:4px;background:#eef1f5;margin-top:9px}.bar span{display:block;height:100%;background:var(--colour)}.filters{display:flex;gap:12px;align-items:center;margin:20px 0}.filters input{flex:1;min-width:0}.filters select{margin:0}.filters span{font-size:11px;color:var(--muted);white-space:nowrap}.table-wrap{overflow:auto;max-height:550px}table{width:100%;border-collapse:collapse;font-size:12px}th{text-align:left;position:sticky;top:0;background:#f1f4f7;z-index:1;font-size:10px;text-transform:uppercase;letter-spacing:.6px}td,th{padding:15px 12px;border-bottom:1px solid var(--line)}td:first-child{white-space:nowrap}td button{border:0;padding:0;font-size:12px;text-align:left}td button small{display:block;color:var(--muted);margin-top:5px}.num{text-align:right;white-space:nowrap}.sources{display:grid;grid-template-columns:1fr 1fr;gap:60px;padding:40px 0}.sources p{color:var(--muted);font-size:12px;line-height:1.8}.sources h2{font-family:Georgia,serif;font-size:30px;margin-top:12px}.sources a{font-size:11px}footer{display:flex;justify-content:space-between;gap:20px;border-top:1px solid var(--line);padding:22px 0;font-size:11px;color:var(--muted)}.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0,0,0,0)}@media(max-width:900px){nav{display:none}.explorer{grid-template-columns:1fr}.party-cards{gap:8px}.party-card b{font-size:9px}.map{height:420px}}@media(max-width:560px){main{padding:25px 16px}header{padding:16px}.brand b{font-size:11px}.edition{display:none}.headline,.controls,.refresh{align-items:flex-start;flex-direction:column}.headline{gap:3px;margin-bottom:15px}h1{letter-spacing:-1px}.party-cards{grid-template-columns:repeat(4,1fr);gap:16px}.race,.map-panel,aside,.directory{padding:17px}.section-head{align-items:flex-start}.section-head h2{font-size:18px}.map{height:310px}.filters{flex-wrap:wrap}.filters input{flex-basis:100%}.sources{grid-template-columns:1fr;gap:15px}.seat-track{gap:2px}footer{flex-direction:column}.controls select{margin-left:0}.map text{font-size:10px}}

/* Melaka flag palette: blue, red, white and yellow */
:root{--navy:#103776;--muted:#586982;--line:#dbe3ef;--paper:#f4f6fb;--gold:#ffd028;--red:#cf142b;--blue:#123e91}
body{background:linear-gradient(180deg,#fff 0,#f4f6fb 720px)}
header{border-top:7px solid transparent;border-image:linear-gradient(90deg,#123e91 0 33%,#ffd028 33% 39%,#cf142b 39% 72%,#fff 72%) 1;padding-top:12px;padding-bottom:12px}
.brand-logo{width:94px;height:70px;object-fit:contain;border-radius:6px;display:block}
.brand{gap:0}.brand b{color:var(--blue)}.brand small{color:var(--muted)}
nav a:hover{color:var(--red)}.edition{background:var(--blue);color:#fff;border:0;border-bottom:3px solid var(--gold);font-weight:bold}
main{padding-top:28px}
.melaka-hero{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(230px,1fr);gap:32px;align-items:center;background:linear-gradient(115deg,#0a2863,#17469b);color:white;padding:36px;border-radius:14px;position:relative;overflow:hidden;margin-bottom:24px;border-bottom:7px solid var(--red);box-shadow:0 12px 30px #123e9114}
.melaka-hero::before{content:"";position:absolute;left:0;top:0;width:7px;height:100%;background:var(--gold)}
.melaka-hero .eyebrow{color:#ffdc63;line-height:1.7}.melaka-hero .headline{display:block}.melaka-hero h1{font-size:clamp(32px,3.6vw,52px);line-height:1.12;letter-spacing:-1.5px;margin:18px 0}
.melaka-hero .badge{background:var(--gold);color:#142b58;font-weight:800;letter-spacing:.7px;margin:0 0 15px}
.melaka-hero .intro{color:#e2ebff;font-size:14px;line-height:1.8;margin:0 0 20px;max-width:550px}
.hero-tag{font-size:10px;letter-spacing:1.5px;font-weight:bold;border-top:1px solid #ffffff36;padding-top:17px}
.hero-art{background:#f8f7f2;border-radius:10px;padding:10px;box-shadow:0 8px 24px #001b4b33}.hero-art img{display:block;width:100%;height:auto;border-radius:5px}
.controls{border:1px solid var(--line);background:white;padding:15px 18px;border-radius:8px}
#refresh,.button{background:var(--blue);color:white;border-color:var(--blue)}#refresh:hover,.button:hover{background:#09275e}
#notice{background:#fff8db;border-left:4px solid var(--gold);color:#614d13;border-radius:0 7px 7px 0}
.race{border-top:4px solid var(--red)}.map-panel{border-top:4px solid var(--blue)}aside{border-top:4px solid var(--gold)}.directory{border-top:4px solid var(--red)}
.map{background:radial-gradient(ellipse at 50% 45%,#fff,#e8effb)}
.map path.selected{stroke:#b87800;stroke-width:3}
th{background:#123e91;color:#fff}.sources h2{color:var(--blue)}.sources a{color:#123e91}
footer{border-top:4px solid transparent;border-image:linear-gradient(90deg,#123e91 0 33%,#ffd028 33% 39%,#cf142b 39% 72%,#fff 72%) 1}
@media(max-width:900px){.melaka-hero{gap:24px;padding:28px;grid-template-columns:minmax(0,1.3fr) minmax(210px,1fr)}}
@media(max-width:620px){.melaka-hero{grid-template-columns:1fr;padding:24px;gap:22px}.hero-art{width:min(100%,290px);justify-self:center;grid-row:1}.melaka-hero h1{font-size:36px}.melaka-hero .intro{font-size:13px}.brand-logo{width:76px;height:57px}.brand b{font-size:11px;margin-left:9px}.brand small{font-size:7px;letter-spacing:.9px}.controls{padding:14px}.hero-tag{line-height:1.6}}
