*{margin:0;padding:0;box-sizing:border-box}body{font-family:Segoe UI,Tahoma,Geneva,Verdana,sans-serif;background:#f5f5f5;height:100vh;overflow:hidden}#root{height:100vh}.container{display:flex;height:100vh}.sidebar{width:320px;background:#fff;box-shadow:2px 0 10px #0000001a;display:flex;flex-direction:column;z-index:1000;position:relative;transition:width .4s cubic-bezier(.4,0,.2,1)}@media (min-width: 769px){.sidebar.collapsed{width:56px;overflow:visible}.sidebar.collapsed .sidebar-header{padding:16px 8px;text-align:center}.sidebar.collapsed .sidebar-header h1{font-size:0;margin:0;display:flex;justify-content:center}.sidebar.collapsed .sidebar-header h1 img{margin:0!important;width:32px;height:32px}.sidebar.collapsed .sidebar-header p{display:none}}.sidebar-collapse-btn{display:none;position:absolute;top:70px;right:-16px;width:32px;height:32px;background:linear-gradient(135deg,#1e3a5f,#16213e);border:2px solid white;border-radius:50%;cursor:pointer;z-index:1001;align-items:center;justify-content:center;color:#fff;box-shadow:0 2px 8px #0003;transition:all .2s}.sidebar-collapse-btn:hover{background:linear-gradient(135deg,#2563eb,#1e40af);transform:scale(1.1);box-shadow:0 4px 12px #2563eb66}.sidebar-collapse-btn:active{transform:scale(.95)}.sidebar.collapsed .sidebar-collapse-btn{right:-16px}@media (min-width: 769px){.sidebar-collapse-btn{display:flex}}.sidebar-header{padding:20px;background:linear-gradient(135deg,#1a1a2e,#16213e);color:#fff}.sidebar-header h1{font-size:1.4rem;margin-bottom:5px}.sidebar-header p{font-size:.85rem;opacity:.8}.info-panel{flex:1;padding:20px;overflow-y:auto}.info-title{font-size:1.5rem;color:#1a1a2e;margin-bottom:15px;padding-bottom:10px;border-bottom:2px solid #e0e0e0}.info-stats{display:grid;grid-template-columns:1fr 1fr;gap:15px;margin-bottom:20px}.stat-card{background:#f8f9fa;padding:15px;border-radius:8px;text-align:center}.stat-value{font-size:1.8rem;font-weight:700;color:#1a1a2e}.stat-label{font-size:.75rem;color:#666;text-transform:uppercase;margin-top:5px}.breadcrumb{padding:10px 20px;background:#f8f9fa;border-bottom:1px solid #e0e0e0;font-size:.85rem;display:flex;align-items:flex-start;justify-content:space-between;gap:8px}.breadcrumb-nav{flex:1;min-width:0;line-height:1.5;word-wrap:break-word}.breadcrumb a{color:#3b82f6;text-decoration:none;cursor:pointer}.breadcrumb a:hover{text-decoration:underline}.breadcrumb span{color:#666}.share-btn{background:none;border:none;font-size:1rem;cursor:pointer;padding:4px 8px;border-radius:4px;transition:background .2s,color .2s;flex-shrink:0;margin-top:-2px}.share-btn:hover{background:#3b82f61a}.share-btn.copied{color:#059669;background:#0596691a}.map-container{flex:1;position:relative;transition:margin-right .5s cubic-bezier(.22,1,.36,1),width .5s cubic-bezier(.22,1,.36,1)}@media (min-width: 769px){.map-container.panel-open{margin-right:380px}}@media (max-width: 1024px) and (orientation: landscape){.map-container.panel-open{margin-right:320px}}.map-container .leaflet-container{width:100%;height:100%}.map-toolbar{position:absolute;top:12px;left:50%;transform:translate(-50%);display:flex;align-items:center;gap:8px;background:#fff;padding:6px 10px;border-radius:12px;box-shadow:0 4px 16px #00000026;z-index:1000;pointer-events:auto;transition:opacity .3s,visibility .3s}.toolbar-section{display:flex;align-items:center;gap:4px}.toolbar-section.toolbar-center{flex-direction:column;align-items:center}.toolbar-section:not(:last-child){padding-right:8px;border-right:1px solid #e2e8f0}.toolbar-btn{background:#f8fafc;color:#374151;padding:8px 10px;border-radius:8px;border:none;cursor:pointer;font-size:1rem;transition:all .15s;display:flex;align-items:center;justify-content:center;min-width:38px;height:38px}.toolbar-btn:hover{background:#e2e8f0}.toolbar-btn:active{background:#cbd5e1;transform:scale(.95)}.toolbar-btn.toolbar-toggle{font-size:.8rem;padding:8px 12px;gap:4px}.toolbar-btn.toolbar-toggle.active{background:#1a1a2e;color:#fff}.toolbar-view-toggle{display:flex;align-items:center;gap:4px}.toolbar-year-selector{display:flex;align-items:center;gap:4px;margin-top:6px;padding-top:6px;border-top:1px solid #e2e8f0;flex-wrap:wrap;justify-content:center}.toolbar-year-btn{background:#fff;color:#64748b;padding:4px 10px;border-radius:6px;border:1px solid #e2e8f0;cursor:pointer;font-size:.75rem;font-weight:600;transition:all .15s;min-width:auto;height:auto}.toolbar-year-btn:hover{border-color:#3b82f6;color:#3b82f6}.toolbar-year-btn.active{background:#1e3a5f;border-color:#1e3a5f;color:#fff}.toolbar-year-btn.parliament-year:hover{border-color:#3b82f6;color:#3b82f6}.toolbar-year-btn.parliament-year.active{background:#1e3a5f;border-color:#1e3a5f;color:#fff}.toolbar-show-acs{display:inline-flex;align-items:center;gap:6px;margin-left:10px;padding:4px 8px;font-size:.85rem;color:#374151;cursor:pointer;user-select:none}.toolbar-show-acs input[type=checkbox]{width:16px;height:16px;accent-color:#10b981;cursor:pointer}.toolbar-show-acs span{white-space:nowrap}.toolbar-dropdown{position:relative}.toolbar-dropdown-btn{min-width:38px}.toolbar-dropdown-menu{position:absolute;top:100%;right:0;margin-top:6px;background:#fff;border-radius:8px;box-shadow:0 4px 16px #00000026;overflow:hidden;opacity:0;visibility:hidden;transform:translateY(-8px);transition:all .2s;min-width:100px}.toolbar-dropdown-menu.visible{opacity:1;visibility:visible;transform:translateY(0)}.toolbar-dropdown-item{display:block;width:100%;padding:10px 14px;border:none;background:#fff;color:#374151;font-size:.85rem;cursor:pointer;text-align:left;transition:background .15s}.toolbar-dropdown-item:hover{background:#f1f5f9}.toolbar-dropdown-item.active{background:#1a1a2e;color:#fff}.toolbar-dropdown-item .layer-badge{font-size:.65rem;background:#10b981;color:#fff;padding:2px 6px;border-radius:10px;margin-left:8px;font-weight:600;text-transform:uppercase}.toolbar-dropdown-item.active .layer-badge{background:#34d399}.map-legend{background:#fffffff2;padding:8px 12px;border-radius:8px;box-shadow:0 2px 6px #00000026;font-size:.8rem;min-width:120px;max-width:160px;margin-bottom:10px!important;margin-left:10px!important}.map-legend h4{margin:0 0 4px;font-size:.7rem;text-transform:uppercase;letter-spacing:.5px;font-weight:600}.legend-item{display:flex;align-items:center;gap:8px;margin-bottom:4px}.legend-color{width:16px;height:16px;border-radius:4px;border:1px solid rgba(0,0,0,.1)}.legend-label{color:#374151;font-size:.75rem}.leaflet-control-scale-line{background:#ffffffe6!important;border-color:#64748b!important;color:#374151!important;font-size:.7rem!important;padding:2px 6px!important}.leaflet-control-zoom{border:none!important;box-shadow:0 2px 6px #00000026!important;border-radius:8px!important;overflow:hidden;transition:opacity .3s,visibility .3s}.container .leaflet-control-zoom,.container .map-toolbar{opacity:1;visibility:visible;pointer-events:auto}.leaflet-control-zoom a{background:#fff!important;color:#374151!important;width:32px!important;height:32px!important;line-height:32px!important;font-size:16px!important}.leaflet-control-zoom a:hover{background:#f1f5f9!important}.leaflet-control-attribution{background:#fffc!important;font-size:.65rem!important;padding:2px 6px!important}.search-box{position:relative;margin:15px 20px}.search-input-wrapper{position:relative;display:flex;align-items:center}.search-icon{position:absolute;left:12px;font-size:.9rem;pointer-events:none;z-index:1}.search-input{width:100%;padding:12px 36px;border:2px solid #e2e8f0;border-radius:10px;font-size:.9rem;background:#f8fafc;transition:all .2s;outline:none}.search-input:focus{border-color:#3b82f6;background:#fff;box-shadow:0 0 0 3px #3b82f626}.search-input::placeholder{color:#94a3b8}.search-clear{position:absolute;right:8px;background:#e2e8f0;border:none;border-radius:50%;width:24px;height:24px;font-size:.75rem;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#64748b;transition:all .2s}.search-clear:hover{background:#cbd5e1;color:#1e293b}.search-results{position:absolute;top:100%;left:0;right:0;background:linear-gradient(180deg,#fff,#f8fafc);border:1px solid #e2e8f0;border-radius:10px;box-shadow:0 10px 25px #00000026;max-height:320px;overflow-y:auto;z-index:1001;margin-top:6px}.search-result-item{display:flex;align-items:center;gap:10px;padding:10px 14px 10px 12px;cursor:pointer;transition:all .15s;border-bottom:1px solid #f1f5f9;border-left:3px solid transparent}.search-result-item:last-child{border-bottom:none}.search-result-item:hover,.search-result-item.selected{background:#f8fafc}.search-result-item[data-type=state]:hover,.search-result-item[data-type=state].selected{background:linear-gradient(135deg,#fffbeb,#fef3c7)}.search-result-item[data-type=constituency]:hover,.search-result-item[data-type=constituency].selected{background:linear-gradient(135deg,#f5f3ff,#ede9fe)}.search-result-item[data-type=assembly]:hover,.search-result-item[data-type=assembly].selected{background:linear-gradient(135deg,#ecfdf5,#d1fae5)}.search-result-item[data-type=district]:hover,.search-result-item[data-type=district].selected{background:linear-gradient(135deg,#eff6ff,#bfdbfe)}.result-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;color:#fff;transition:all .2s}.result-icon svg{width:14px;height:14px}.search-result-item[data-type=state] .result-icon{background:linear-gradient(135deg,#f59e0b,#d97706)}.search-result-item[data-type=constituency] .result-icon{background:linear-gradient(135deg,#8b5cf6,#6d28d9)}.search-result-item[data-type=assembly] .result-icon{background:linear-gradient(135deg,#10b981,#047857)}.search-result-item[data-type=district] .result-icon{background:linear-gradient(135deg,#3b82f6,#1d4ed8)}.search-result-item:hover .result-icon{filter:brightness(1.1);transform:scale(1.05)}.result-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}.result-name{font-weight:500;color:#1e293b;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result-state{font-size:.75rem;color:#64748b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.result-badge{font-size:.65rem;font-weight:600;padding:3px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.5px;flex-shrink:0}.result-badge-state{background:#fef3c7;color:#b45309}.result-badge-constituency{background:#ede9fe;color:#6d28d9}.result-badge-assembly{background:#d1fae5;color:#047857}.result-badge-district{background:#dbeafe;color:#1d4ed8}:root{--color-state: #f59e0b;--color-parliament: #8b5cf6;--color-assembly: #10b981}.search-result-item[data-type=state]{border-left:3px solid #f59e0b}.search-result-item[data-type=constituency]{border-left:3px solid var(--color-parliament)}.search-result-item[data-type=assembly]{border-left:3px solid var(--color-assembly)}.search-result-item[data-type=district]{border-left:3px solid #3b82f6}.search-no-results{padding:16px;text-align:center;color:#64748b;font-size:.9rem}.search-hint{font-size:.7rem;color:#94a3b8;text-align:center;margin-top:4px}.cache-status{padding:12px 20px;background:linear-gradient(135deg,#f0f7ff,#e8f4fc);border-top:1px solid #e0e0e0;font-size:.75rem;color:#555;display:flex;flex-wrap:wrap;align-items:center;gap:5px}.cache-status strong{color:#64748b}.cache-icon{display:inline;vertical-align:middle}.cache-icon.state-icon{color:var(--color-state)}.cache-icon.pc-icon{color:var(--color-parliament)}.cache-icon.ac-icon{color:var(--color-assembly)}.cache-check{color:var(--color-assembly);display:inline;vertical-align:middle;margin-left:4px}.leaflet-tooltip{background:transparent!important;border:none!important;box-shadow:none!important;color:#1a1a2e;font-weight:600;font-size:12px;text-shadow:-1px -1px 0 #fff,1px -1px 0 #fff,-1px 1px 0 #fff,1px 1px 0 #fff,0 0 8px rgba(255,255,255,.9);padding:0!important;white-space:nowrap}.leaflet-tooltip.selected-tooltip{background:#065f46!important;color:#fff!important;font-weight:700;font-size:13px;padding:6px 12px!important;border-radius:6px!important;border:2px solid #10b981!important;box-shadow:0 4px 12px #0003!important;text-shadow:none!important}.leaflet-tooltip.hover-tooltip{background:#1f2937f2!important;color:#fff!important;font-weight:600;font-size:12px;padding:4px 10px!important;border-radius:4px!important;box-shadow:0 2px 8px #00000026!important;text-shadow:none!important}.leaflet-tooltip.background-state-tooltip{background:#6366f1f2!important;color:#fff!important;font-weight:600;font-size:11px;padding:4px 10px!important;border-radius:4px!important;box-shadow:0 2px 8px #6366f14d!important}.leaflet-tooltip-pane{z-index:650}.leaflet-container:focus{outline:none}.leaflet-container a{color:inherit}.leaflet-interactive:focus{outline:none!important}.leaflet-container path:focus{outline:none!important}.leaflet-container *:focus{outline:none!important}svg:focus,path:focus{outline:none!important}.leaflet-pane svg{outline:none!important}.leaflet-overlay-pane svg path{outline:none!important}.loading-overlay{position:fixed;inset:0;background:#fffc;display:flex;align-items:center;justify-content:center;z-index:2000;opacity:0;pointer-events:none;transition:opacity .2s}.loading-overlay.active{opacity:1;pointer-events:all}.spinner{width:40px;height:40px;border:3px solid #e0e0e0;border-top-color:#3b82f6;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.view-toggle{display:flex;gap:0;margin:15px 0;background:#f1f5f9;border-radius:8px;padding:4px}.toggle-btn{flex:1;padding:10px 12px;border:none;background:transparent;color:#64748b;font-size:.8rem;font-weight:500;cursor:pointer;border-radius:6px;transition:all .2s ease;display:flex;align-items:center;justify-content:center;gap:6px}.toggle-btn .toggle-icon{flex-shrink:0}.toggle-btn.active{background:#fff;color:#1a1a2e;box-shadow:0 1px 3px #0000001a}.toggle-btn:hover:not(.active){color:#1a1a2e}.district-list{margin-top:15px}.district-list h3{font-size:.9rem;color:#666;margin-bottom:10px}.district-item{padding:8px 12px;background:linear-gradient(135deg,#f8f9fa,#f1f5f9);margin-bottom:5px;border-radius:5px;font-size:.85rem;cursor:pointer;transition:all .2s;border-left:4px solid var(--item-color, #6b7280);display:flex;align-items:center;gap:8px}.district-item:hover{background:linear-gradient(135deg,#fffbeb,#fef3c7);transform:translate(3px)}.district-item.state-item{border-left-color:var(--item-color, var(--color-state))}.district-item .item-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:4px;background:linear-gradient(135deg,var(--item-color, var(--color-state)) 0%,color-mix(in srgb,var(--item-color, var(--color-state)) 80%,black) 100%);color:#fff;transition:all .2s}.district-item .item-icon svg{width:12px;height:12px}.district-item:hover .item-icon{filter:brightness(1.1)}.constituency-item{padding:8px 12px;background:linear-gradient(135deg,#f8f9fa,#f5f3ff);margin-bottom:5px;border-radius:5px;font-size:.85rem;cursor:pointer;border-left:4px solid var(--item-color, var(--color-parliament, #8b5cf6));display:flex;align-items:center;gap:8px;transition:all .2s;justify-content:space-between}.constituency-item:hover{background:linear-gradient(135deg,#f5f3ff,#ede9fe);transform:translate(3px)}.constituency-item .item-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:4px;background:var(--item-color, var(--color-parliament));color:#fff;transition:all .2s}.constituency-item .item-icon svg{width:12px;height:12px}.constituency-item:hover .item-icon{filter:brightness(.9)}.constituency-item .pc-number{font-size:.7rem;background:var(--item-color, var(--color-parliament, #8b5cf6));color:#fff;padding:2px 6px;border-radius:4px;font-weight:600;margin-left:auto}.assembly-item{padding:8px 12px;background:linear-gradient(135deg,#f8f9fa,#ecfdf5);margin-bottom:5px;border-radius:5px;font-size:.85rem;cursor:pointer;transition:all .2s;display:flex;align-items:center;gap:8px;border-left:4px solid var(--item-color, var(--color-assembly, #10b981))}.assembly-item:hover{background:linear-gradient(135deg,#ecfdf5,#d1fae5);transform:translate(3px)}.assembly-item .item-icon{flex-shrink:0;display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:4px;background:var(--item-color, var(--color-assembly));color:#fff;transition:all .2s}.assembly-item .item-icon svg{width:12px;height:12px}.assembly-item:hover .item-icon{filter:brightness(.9)}.assembly-item .ac-number{font-size:.7rem;background:var(--item-color, var(--color-assembly, #10b981));color:#fff;padding:2px 6px;border-radius:4px;font-weight:600;margin-left:auto}.no-data-message{padding:20px;background:linear-gradient(135deg,#fef3c7,#fde68a);border-radius:10px;color:#92400e;font-size:.9rem;text-align:center}.no-data-icon{font-size:2rem;margin-bottom:10px}.no-data-message p{margin-top:10px;font-size:.8rem;opacity:.9}.mobile-toggle{display:none;position:fixed;bottom:20px;left:20px;z-index:1001;width:50px;height:50px;border-radius:50%;background:linear-gradient(135deg,#1a1a2e,#16213e);color:#fff;border:none;font-size:1.5rem;cursor:pointer;box-shadow:0 4px 12px #0000004d;transition:transform .3s,box-shadow .3s;align-items:center;justify-content:center}.mobile-toggle:hover{transform:scale(1.05);box-shadow:0 6px 16px #0006}.mobile-toggle.active{background:#ef4444}.sidebar-overlay{display:none;position:fixed;inset:0;background:#00000080;z-index:999}@media (max-width: 768px){.container{flex-direction:column}.sidebar{position:fixed;top:0;left:0;width:85%;max-width:320px;height:100vh;transform:translate(-100%);transition:transform .4s cubic-bezier(.4,0,.2,1);z-index:1000}.sidebar.open{transform:translate(0)}.sidebar-overlay.visible{display:block}.mobile-toggle{display:flex}.map-toolbar{top:10px;right:10px;left:auto;transform:none;padding:4px 6px;gap:4px;max-width:calc(100% - 80px)}.container:has(.sidebar.open) .leaflet-control-zoom,.container:has(.sidebar.open) .map-toolbar,.container:has(.sidebar.open) .map-legend{opacity:0;visibility:hidden;pointer-events:none}.toolbar-section{gap:2px}.toolbar-section:not(:last-child){padding-right:4px}.toolbar-btn{padding:6px 8px;min-width:34px;height:34px;font-size:.9rem}.toolbar-btn.toolbar-toggle{font-size:.7rem;padding:6px 8px}.toolbar-dropdown-menu{min-width:80px}.toolbar-dropdown-item{padding:8px 10px;font-size:.8rem}.map-legend{padding:8px 10px;font-size:.75rem;min-width:120px}.map-legend h4{font-size:.65rem}.district-item,.constituency-item,.assembly-item{padding:12px 14px 12px 18px;font-size:.9rem;min-height:44px}.toggle-btn{padding:10px 14px;font-size:.85rem;min-height:44px}.breadcrumb a{padding:4px 2px}.sidebar-header{padding:16px}.sidebar-header h1{font-size:1.2rem}.info-panel{padding:15px}.stat-card{padding:12px}.stat-value{font-size:1.3rem}.leaflet-control-zoom a{width:36px!important;height:36px!important;line-height:36px!important;font-size:18px!important}.leaflet-control-scale{margin-bottom:70px!important}}@media (max-width: 480px){.sidebar{width:100%;max-width:none}.info-stats{flex-direction:column;gap:10px}.stat-card{width:100%}.view-toggle{flex-direction:column}.toggle-btn{border-radius:8px;margin-bottom:5px}.toggle-btn:first-child{border-radius:8px}.map-legend{bottom:70px!important}}@media (max-height: 500px) and (orientation: landscape){.sidebar-header{padding:10px 16px}.sidebar-header h1{font-size:1.1rem;margin-bottom:2px}.sidebar-header p{font-size:.75rem}.info-panel{padding:10px 15px}.district-list h3{margin-bottom:6px;font-size:.85rem}}.election-panel{position:fixed;top:0;right:0;bottom:0;width:380px;max-height:100vh;background:linear-gradient(135deg,#fff,#f8fafc);border-radius:0;border-left:1px solid #e2e8f0;box-shadow:-4px 0 20px #0000001a;z-index:1001;overflow:hidden;overflow-y:auto;display:flex;flex-direction:column;animation:slideInFromRight .5s cubic-bezier(.22,1,.36,1);transition:transform .5s cubic-bezier(.22,1,.36,1),opacity .4s ease-out}@keyframes slideInFromRight{0%{opacity:0;transform:translate(60px) scale(.98)}60%{opacity:1;transform:translate(-5px) scale(1)}to{opacity:1;transform:translate(0) scale(1)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(15px)}to{opacity:1;transform:translateY(0)}}.election-panel .election-panel-header{animation:fadeInUp .4s cubic-bezier(.22,1,.36,1) .1s both}.election-panel .election-year-selector{animation:fadeInUp .4s cubic-bezier(.22,1,.36,1) .15s both}.election-panel .panel-tabs{animation:fadeInUp .4s cubic-bezier(.22,1,.36,1) .2s both}.election-panel .winner-card,.election-panel .winner-card-compact{animation:fadeInUp .4s cubic-bezier(.22,1,.36,1) .25s both}.election-panel .constituency-stats,.election-panel .stats-inline{animation:fadeInUp .4s cubic-bezier(.22,1,.36,1) .3s both}.election-panel .candidates-section,.election-panel .candidates-preview{animation:fadeInUp .4s cubic-bezier(.22,1,.36,1) .35s both}.copy-toast{position:absolute;top:12px;left:50%;transform:translate(-50%);background:linear-gradient(135deg,#059669,#047857);color:#fff;padding:8px 16px;border-radius:20px;font-size:.8rem;font-weight:600;display:flex;align-items:center;gap:6px;z-index:10;box-shadow:0 4px 12px #05966966;animation:toastIn .3s ease-out}@keyframes toastIn{0%{opacity:0;transform:translate(-50%) translateY(-10px)}to{opacity:1;transform:translate(-50%) translateY(0)}}.election-panel-header{display:flex;align-items:flex-start;justify-content:space-between;padding:16px 20px;background:linear-gradient(135deg,#1e3a5f,#0f2744);color:#fff}.election-panel-title{flex:1;min-width:0}.election-panel-title h3{font-size:1.1rem;font-weight:700;margin:0;line-height:1.3;word-wrap:break-word}.constituency-type{display:inline-block;font-size:.65rem;font-weight:700;padding:3px 8px;border-radius:4px;text-transform:uppercase;letter-spacing:.5px}.election-panel-title>.constituency-type{margin-top:6px}.constituency-type.type-gen{background:#fff3;color:#fff}.constituency-type.type-sc{background:#3b82f6;color:#fff}.constituency-type.type-st{background:#10b981;color:#fff}.election-panel-close{background:#ffffff26;border:none;border-radius:8px;padding:8px;cursor:pointer;color:#fff;transition:all .2s;flex-shrink:0;margin-left:12px}.election-panel-close:hover{background:#ffffff40}.election-year-selector{display:flex;flex-wrap:wrap;gap:6px;padding:10px 16px;background:#f1f5f9;border-bottom:1px solid #e2e8f0}@media (max-width: 768px){.election-year-selector{flex-wrap:nowrap;overflow-x:auto;overflow-y:hidden;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:12px 16px;gap:8px;max-width:100%;margin:0;min-height:52px}.election-year-selector::-webkit-scrollbar{display:none}.election-year-selector:after{content:"";position:sticky;right:0;top:0;bottom:0;width:24px;flex-shrink:0;background:linear-gradient(to right,transparent,#f1f5f9);pointer-events:none}}.year-btn{flex-shrink:0;padding:6px 12px;background:#fff;border:2px solid #e2e8f0;border-radius:6px;font-size:.8rem;font-weight:600;color:#64748b;cursor:pointer;transition:all .2s}.year-btn:hover{border-color:#3b82f6;color:#3b82f6}.year-btn.active{background:#1e3a5f;border-color:#1e3a5f;color:#fff}.year-btn.parliament-year:hover{border-color:#3b82f6;color:#3b82f6}.year-btn.parliament-year.active{background:#1e3a5f;border-color:#1e3a5f;color:#fff}.panel-tabs{display:flex;flex-wrap:wrap;gap:6px;padding:8px 12px;background:#f8fafc;border-bottom:1px solid #e2e8f0}.panel-tab{flex:0 0 auto;display:flex;align-items:center;justify-content:center;gap:6px;padding:8px 12px;background:transparent;border:none;border-radius:6px;font-size:.75rem;font-weight:600;color:#64748b;white-space:nowrap;cursor:pointer;transition:all .2s}.panel-tab:hover{background:#e2e8f0;color:#374151}.panel-tab.active{background:#1e3a5f;color:#fff}.panel-tab svg{flex-shrink:0}.panel-tab-content{flex:1;overflow-y:auto;min-height:0}.overview-view,.candidates-view{padding:12px;display:flex;flex-direction:column;gap:12px}.winner-card-compact{padding:12px;background:linear-gradient(135deg,#fff,#f0fdf4);border-radius:10px;border:2px solid;border-left-width:4px;margin-bottom:10px}.winner-card-compact.parliament{background:linear-gradient(135deg,#fff,#eff6ff)}.winner-badge-small.parliament{color:#1e40af}.winner-main{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.winner-badge-small{display:inline-flex;align-items:center;gap:3px;font-size:.6rem;font-weight:700;text-transform:uppercase;color:#059669}.winner-card-compact .winner-name{flex:1;font-size:.9rem;font-weight:700;color:#1e293b;min-width:100px}.winner-card-compact .winner-party{font-size:.65rem;font-weight:700;padding:3px 8px;border-radius:4px;color:#fff}.winner-stats-compact{display:flex;gap:12px;margin-top:8px;padding-top:8px;border-top:1px solid rgba(0,0,0,.08)}.stat-compact{display:flex;align-items:center;gap:4px;font-size:.75rem;color:#475569}.stat-compact.highlight{font-weight:700;color:#059669}.stat-compact.margin{color:#0d9488;font-weight:600}.stat-compact svg{color:#94a3b8}.stats-inline{display:flex;gap:8px;margin-bottom:10px}.stat-inline{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:8px 6px;background:#f1f5f9;border-radius:8px;text-align:center}.stat-inline.highlight{background:linear-gradient(135deg,#dbeafe,#bfdbfe)}.stat-inline.nota{background:linear-gradient(135deg,#fef3c7,#fde68a)}.stat-inline.nota .label{color:#92400e}.stat-inline.nota .value{color:#78350f}.stat-inline svg{color:#64748b}.stat-inline .label{font-size:.6rem;font-weight:600;color:#64748b;text-transform:uppercase}.stat-inline .value{font-size:.8rem;font-weight:700;color:#1e293b}.stat-inline.share-pc-btn{cursor:pointer;background:linear-gradient(135deg,#c7d2fe,#a5b4fc);border:none;transition:all .2s ease}.stat-inline.share-pc-btn:hover{background:linear-gradient(135deg,#a5b4fc,#818cf8);transform:translateY(-1px)}.stat-inline.share-pc-btn svg{color:#4f46e5}.stat-inline.share-pc-btn .label{color:#4f46e5}.candidates-preview{margin-bottom:10px}.candidates-preview h4{font-size:.7rem;font-weight:700;color:#64748b;text-transform:uppercase;margin-bottom:8px}.candidate-row-compact{position:relative;display:flex;align-items:center;gap:6px;padding:8px 10px;background:#fff;border-radius:8px;margin-bottom:4px;font-size:.75rem;overflow:hidden}.candidate-row-compact.winner{background:linear-gradient(135deg,#dcfce7,#bbf7d0)}.candidate-row-compact .pos{width:18px;font-weight:700;color:#64748b}.candidate-row-compact .name{flex:1;font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.candidate-row-compact .party{font-size:.55rem;font-weight:700;padding:2px 6px;border-radius:3px}.candidate-row-compact .votes{width:55px;text-align:right;font-weight:600;color:#374151}.candidate-row-compact .share{width:40px;text-align:right;font-weight:700;color:#059669}.candidate-row-compact .bar{position:absolute;bottom:0;left:0;height:3px;opacity:.6}.view-all-btn{width:100%;padding:8px;background:#f1f5f9;border:1px dashed #cbd5e1;border-radius:6px;font-size:.7rem;font-weight:600;color:#3b82f6;cursor:pointer;transition:all .2s;margin-top:4px}.view-all-btn:hover{background:#e0f2fe;border-color:#3b82f6}.parliament-contribution-compact{padding:10px;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;border-radius:8px}.parliament-contribution-compact h4{display:flex;align-items:center;gap:6px;font-size:.7rem;font-weight:600;color:#1e40af;margin-bottom:8px}.parliament-row-compact{display:flex;align-items:center;gap:6px;padding:6px 8px;background:#fff;border-radius:6px;margin-bottom:4px;font-size:.7rem}.parliament-row-compact.winner{background:linear-gradient(135deg,#dcfce7,#bbf7d0)}.parliament-row-compact .pos{width:16px;font-weight:700;color:#64748b}.parliament-row-compact .name{flex:1;font-weight:600;color:#1e293b;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.parliament-row-compact .party{font-size:.55rem;font-weight:700;padding:2px 5px;border-radius:3px}.parliament-row-compact .share{width:40px;text-align:right;font-weight:700;color:#059669}.candidates-full{height:100%;display:flex;flex-direction:column}.candidates-table-full{flex:1;display:flex;flex-direction:column;min-height:0}.candidates-scroll{flex:1;overflow-y:auto;max-height:calc(100vh - 350px)}.winner-card{margin:16px;padding:16px;background:linear-gradient(135deg,#fff,#f0fdf4);border-radius:12px;border:2px solid;border-left-width:5px}.winner-badge{display:inline-flex;align-items:center;gap:4px;font-size:.7rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;color:#059669;margin-bottom:8px}.winner-info{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px}.winner-name{font-size:1rem;font-weight:700;color:#1e293b;flex:1;min-width:0;word-wrap:break-word}.winner-party{padding:4px 10px;border-radius:6px;font-size:.75rem;font-weight:700;color:#fff;flex-shrink:0}.winner-stats{display:flex;flex-wrap:wrap;gap:10px}.winner-stats .stat{display:flex;align-items:center;gap:4px;font-size:.8rem;color:#475569}.winner-stats .stat svg{color:#94a3b8}.winner-stats .stat-value{font-weight:700;color:#1e293b;font-size:.85rem}.winner-stats .stat-label{font-size:.7rem;color:#64748b;text-transform:none;margin-top:0}.winner-stats .stat.margin{background:#ecfdf5;padding:4px 8px;border-radius:6px}.winner-stats .stat.margin .stat-value{color:#059669}.constituency-stats{margin:0 16px 16px;padding:12px;background:#f8fafc;border-radius:10px}.stat-row{display:flex;gap:10px;align-items:stretch}.stat-row+.stat-row{margin-top:10px;padding-top:10px;border-top:1px solid #e2e8f0}.stat-item{flex:1;display:flex;flex-direction:column;gap:2px;padding:8px;border-radius:8px;background:#f1f5f9}.stat-item svg{color:#64748b;margin-bottom:2px}.stat-item .label{font-size:.7rem;color:#64748b;text-transform:uppercase;letter-spacing:.3px}.stat-item .value{font-size:.9rem;font-weight:700;color:#1e293b}.stat-item.highlight{background:linear-gradient(135deg,#dbeafe,#bfdbfe)}.stat-item.highlight .value{font-size:1rem;color:#1e40af}.candidates-section{flex:1;overflow-y:auto;padding:0 16px}.candidates-section h4{font-size:.8rem;color:#64748b;text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px}.candidates-table{background:#fff;border-radius:10px;overflow:hidden;border:1px solid #e2e8f0}.candidates-header{display:flex;align-items:center;padding:10px 12px;background:#f1f5f9;font-size:.7rem;font-weight:700;color:#64748b;text-transform:uppercase;letter-spacing:.3px}.candidate-row{display:flex;align-items:center;padding:10px 12px;border-bottom:1px solid #f1f5f9;transition:background .15s;position:relative}.candidate-row:last-child{border-bottom:none}.candidate-row:hover{background:#f8fafc}.candidate-row.winner{background:linear-gradient(90deg,#ecfdf5,#fff)}.candidate-row.runner-up{background:linear-gradient(90deg,#fef3c7,#fff)}.col-pos{width:24px;flex-shrink:0;font-size:.75rem;font-weight:700;color:#64748b}.col-name{flex:1;min-width:0;font-size:.8rem;color:#1e293b;line-height:1.3;word-break:break-word;display:flex;align-items:center;gap:4px;flex-wrap:wrap}.sex-badge{font-size:.55rem;font-weight:700;padding:1px 3px;border-radius:3px;background:#e2e8f0;color:#64748b;flex-shrink:0}.col-party{width:60px;flex-shrink:0;font-size:.6rem;font-weight:700;padding:2px 4px;border-radius:4px;text-align:center;border:1px solid;margin:0 6px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.col-votes{width:50px;flex-shrink:0;font-size:.7rem;font-weight:600;color:#374151;text-align:right}.col-share{width:42px;flex-shrink:0;font-size:.7rem;color:#64748b;text-align:right;position:relative}.vote-bar{position:absolute;bottom:0;left:12px;height:3px;border-radius:2px;opacity:.5;max-width:calc(100% - 24px)}.show-more-btn{display:flex;align-items:center;justify-content:center;gap:4px;width:100%;padding:10px;background:#f1f5f9;border:none;border-top:1px solid #e2e8f0;font-size:.8rem;font-weight:600;color:#3b82f6;cursor:pointer;transition:background .2s}.show-more-btn:hover{background:#e2e8f0}.election-panel-actions{display:flex;align-items:center;gap:8px;flex-shrink:0;margin-left:12px}.election-panel-btn{background:#ffffff26;border:none;border-radius:8px;padding:8px;cursor:pointer;color:#fff;transition:all .2s}.election-panel-btn:hover{background:#ffffff40}.election-panel-btn.twitter-btn{color:#1da1f2}.election-panel-btn.twitter-btn:hover{background:#1da1f233}.election-panel-btn.screenshot-btn{background:#ffffff1f;color:#fff;border:1px solid rgba(255,255,255,.2)}.election-panel-btn.screenshot-btn:hover{background:#fff3;transform:translateY(-1px)}.election-panel-btn.copied{color:#10b981;background:#10b98133}.share-dropdown{position:relative}.share-menu{position:absolute;top:100%;right:0;margin-top:8px;background:#fff;border-radius:12px;box-shadow:0 10px 40px #0003;overflow:hidden;min-width:160px;z-index:10;animation:fadeIn .15s ease}@keyframes fadeIn{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.share-menu-item{display:flex;align-items:center;gap:10px;width:100%;padding:12px 16px;background:#fff;border:none;font-size:.85rem;color:#374151;cursor:pointer;transition:background .15s;text-align:left}.share-menu-item:hover{background:#f1f5f9}.share-menu-item svg{color:#64748b}.share-bar{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:linear-gradient(135deg,#1e3a5f,#0f2744);border-top:1px solid rgba(255,255,255,.1)}.share-bar-info{font-size:.75rem;color:#fffc}.share-bar-info .district-label{color:#fff9}.share-bar-info .district-name{font-weight:600;color:#fff;margin-left:4px}.share-bar-actions{display:flex;gap:8px}.share-bar-btn{display:flex;align-items:center;gap:5px;padding:8px 14px;border-radius:8px;border:none;font-size:.8rem;font-weight:600;cursor:pointer;transition:all .2s}.share-bar-btn span{display:none}@media (min-width: 480px){.share-bar-btn span{display:inline}}.share-bar-btn.share-x{background:#000;color:#fff}.share-bar-btn.share-x:hover{background:#1a1a1a;transform:translateY(-1px)}.share-bar-btn.share-copy{background:#ffffff26;color:#fff;border:1px solid rgba(255,255,255,.2)}.share-bar-btn.share-copy:hover{background:#ffffff40}.district-info{padding:12px 16px;background:#f8fafc;border-top:1px solid #e2e8f0;font-size:.75rem}.district-label{color:#64748b}.district-name{font-weight:600;color:#1e293b;margin-left:4px}@media (max-width: 768px) and (orientation: portrait){.election-panel{position:fixed;inset:auto 0 0;width:100%;height:auto;max-height:85vh;border-radius:16px 16px 0 0;border-left:none;border-top:none;box-shadow:0 -4px 20px #00000026;animation:slideUp .5s cubic-bezier(.22,1,.36,1);overflow-y:auto}@keyframes slideUp{0%{opacity:0;transform:translateY(80px) scale(.98)}60%{opacity:1;transform:translateY(-8px) scale(1)}to{opacity:1;transform:translateY(0)}}}@media (max-width: 768px) and (orientation: landscape){.election-panel{inset:0 0 0 auto;width:320px;max-width:45vw;max-height:100vh;height:100%;border-radius:0;animation:slideInFromRight .5s cubic-bezier(.22,1,.36,1);box-shadow:-4px 0 20px #00000026;overflow:visible;overflow-y:auto}}@media (max-width: 768px){.election-panel-header{padding:8px 12px 10px}.election-panel-title h3{font-size:1.1rem;margin-bottom:2px}.constituency-type{font-size:.6rem;padding:2px 6px}.title-badges{gap:6px;margin-top:4px}.pc-badge{font-size:.6rem;padding:2px 6px}.winner-card{margin:8px 10px;padding:12px;border-radius:10px}.winner-info{gap:10px}.winner-avatar{width:44px;height:44px;font-size:1.2rem}.winner-name{font-size:1rem;margin-bottom:2px}.winner-party{font-size:.75rem}.winner-stats{gap:12px;margin-top:10px}.stat-item{padding:6px 0}.stat-value{font-size:1rem}.stat-label{font-size:.65rem}.constituency-stats{margin:0 10px 8px;gap:6px}.constituency-stat{padding:8px 6px;border-radius:8px}.constituency-stat-value{font-size:.95rem}.constituency-stat-label{font-size:.6rem}.candidates-section{padding:0 10px 12px;max-height:180px}.candidates-section h4{font-size:.75rem;margin-bottom:6px}.candidate-row{padding:8px 0}}@media (max-width: 480px){.winner-stats{flex-direction:column;gap:8px}.col-pos{width:20px}.col-name{font-size:.75rem}.col-party{width:50px;font-size:.55rem;margin:0 4px}.col-votes{width:50px;font-size:.7rem}.col-share{width:42px;font-size:.7rem}}.election-panel.pc-panel{border-left:4px solid #1e40af}.pc-title-row{display:flex;align-items:center;gap:10px}.title-badges{display:flex;align-items:center;gap:6px;margin-top:6px}.pc-badge{font-size:.65rem;font-weight:700;padding:3px 8px;background:linear-gradient(135deg,#1e40af,#3b82f6);color:#fff;border-radius:4px;text-transform:uppercase;letter-spacing:.5px}.ac-contribution-notice{display:flex;align-items:center;gap:8px;margin:0 16px 12px;padding:10px 14px;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;border-radius:8px;font-size:.8rem;color:#1e40af}.ac-contribution-notice svg{flex-shrink:0}.ac-list-section{margin:0 16px 12px;padding:12px;background:#f8fafc;border-radius:8px}.ac-list-section h4{display:flex;align-items:center;gap:6px;font-size:.75rem;font-weight:600;color:#475569;text-transform:uppercase;letter-spacing:.5px;margin-bottom:10px}.ac-chips{display:flex;flex-wrap:wrap;gap:6px}.ac-chip{font-size:.7rem;padding:4px 10px;background:#fff;border:1px solid #e2e8f0;border-radius:12px;color:#475569;white-space:nowrap;transition:all .2s}.ac-chip.selected{background:#1e40af;color:#fff;border-color:#1e40af}.show-more-btn.compact{font-size:.7rem;padding:4px 10px;margin-top:8px}.show-more-btn.compact svg{width:12px;height:12px}.parliament-contribution-section{margin:0 16px 12px;padding:12px;background:linear-gradient(135deg,#eff6ff,#dbeafe);border:1px solid #bfdbfe;border-radius:8px}.parliament-contribution-section h4{display:flex;align-items:center;gap:8px;font-size:.8rem;font-weight:600;color:#1e40af;margin-bottom:10px}.pc-badge-small{font-size:.6rem;font-weight:700;padding:2px 6px;background:linear-gradient(135deg,#1e40af,#3b82f6);color:#fff;border-radius:3px;text-transform:uppercase;letter-spacing:.3px}.parliament-contribution-table{display:flex;flex-direction:column;gap:4px}.parliament-row{display:flex;align-items:center;gap:6px;padding:6px 8px;background:#fff;border-radius:6px;font-size:.75rem}.parliament-row.winner{background:linear-gradient(135deg,#dcfce7,#bbf7d0);border:1px solid #86efac}.parliament-row .col-pos{width:18px;font-weight:600;color:#64748b}.parliament-row .col-name{flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:500;color:#1e293b}.parliament-row .col-party{width:45px;font-size:.55rem;font-weight:700;padding:2px 4px;border-radius:3px;text-align:center;border:1px solid}.parliament-row .col-votes{width:55px;text-align:right;font-weight:600;color:#374151}.parliament-row .col-share{width:40px;text-align:right;font-weight:600;color:#059669}.feedback-modal-overlay{position:fixed;inset:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:10000;padding:1rem;backdrop-filter:blur(2px)}.feedback-modal{background:#fff;border-radius:12px;box-shadow:0 20px 40px #0003;width:100%;max-width:500px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column}.feedback-modal-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid #e2e8f0;background:linear-gradient(135deg,#667eea,#764ba2);color:#fff}.feedback-modal-header h2{margin:0;font-size:1.1rem;font-weight:600}.feedback-modal-close{background:#fff3;border:none;padding:.4rem;border-radius:6px;cursor:pointer;display:flex;align-items:center;justify-content:center;color:#fff;transition:background .2s}.feedback-modal-close:hover{background:#ffffff4d}.feedback-modal-content{padding:1.25rem;overflow-y:auto;flex:1}.feedback-section{margin-bottom:1.25rem}.feedback-section:last-child{margin-bottom:0}.feedback-label{display:block;font-size:.875rem;font-weight:600;color:#374151;margin-bottom:.5rem}.feedback-label .required{color:#dc2626}.feedback-label .optional{font-weight:400;color:#9ca3af}.feedback-type-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.75rem}.feedback-type-btn{display:flex;flex-direction:column;align-items:center;gap:.35rem;padding:.75rem;background:#f8fafc;border:2px solid #e2e8f0;border-radius:8px;cursor:pointer;transition:all .2s;text-align:center}.feedback-type-btn:hover{border-color:#667eea;background:#f0f4ff}.feedback-type-btn.selected{border-color:#667eea;background:linear-gradient(135deg,#667eea15,#764ba215)}.feedback-type-icon{color:#667eea}.feedback-type-label{font-size:.8rem;font-weight:600;color:#1e293b}.feedback-type-desc{font-size:.65rem;color:#64748b;line-height:1.3}.feedback-textarea{width:100%;padding:.75rem;border:2px solid #e2e8f0;border-radius:8px;font-size:.875rem;font-family:inherit;resize:vertical;min-height:100px;transition:border-color .2s}.feedback-textarea:focus{outline:none;border-color:#667eea}.feedback-textarea::placeholder{color:#9ca3af}.feedback-input{width:100%;padding:.75rem;border:2px solid #e2e8f0;border-radius:8px;font-size:.875rem;font-family:inherit;transition:border-color .2s}.feedback-input:focus{outline:none;border-color:#667eea}.feedback-input::placeholder{color:#9ca3af}.feedback-hint{font-size:.75rem;color:#9ca3af;margin-top:.35rem}.feedback-error{background:#fef2f2;color:#dc2626;padding:.75rem;border-radius:8px;font-size:.85rem;margin-bottom:1rem;border:1px solid #fecaca}.feedback-actions{display:flex;gap:.75rem;justify-content:flex-end;padding-top:1rem;border-top:1px solid #e2e8f0;margin-top:1rem}.feedback-cancel-btn{padding:.6rem 1.25rem;background:#f1f5f9;border:none;border-radius:8px;font-size:.875rem;font-weight:500;color:#64748b;cursor:pointer;transition:all .2s}.feedback-cancel-btn:hover{background:#e2e8f0;color:#374151}.feedback-submit-btn{display:flex;align-items:center;gap:.5rem;padding:.6rem 1.25rem;background:linear-gradient(135deg,#667eea,#764ba2);border:none;border-radius:8px;font-size:.875rem;font-weight:600;color:#fff;cursor:pointer;transition:all .2s}.feedback-submit-btn:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 4px 12px #667eea66}.feedback-submit-btn:disabled{opacity:.6;cursor:not-allowed}.feedback-submit-btn .spinner{animation:spin 1s linear infinite}.feedback-success{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;color:#059669}.feedback-success h3{margin:1rem 0 .5rem;color:#1e293b}.feedback-success p{margin:0;color:#64748b}.feedback-unavailable{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:2rem;text-align:center;color:#64748b}.feedback-unavailable p{margin:1rem 0 0}.feedback-unavailable-hint{font-size:.85rem;color:#9ca3af}.toolbar-btn.feedback-btn{color:#667eea}.toolbar-btn.feedback-btn:hover{background:#667eea1a;color:#5a67d8}@media (max-width: 768px){.feedback-modal{max-width:none;margin:.5rem;max-height:calc(100vh - 1rem)}.feedback-type-grid{grid-template-columns:1fr}}.bottom-sheet-handle{display:none;width:40px;height:5px;background:#cbd5e1;border-radius:3px;margin:10px auto 2px;cursor:pointer;flex-shrink:0;position:relative;transition:background .2s}.bottom-sheet-handle:hover{background:#94a3b8}.bottom-sheet-handle:active{background:#64748b;transform:scaleX(1.1)}@media (max-width: 768px) and (orientation: portrait){.bottom-sheet-handle{display:block;width:48px;height:5px;background:#94a3b8;margin:8px auto 4px}}@media (max-width: 768px){.election-panel-header{padding:8px 14px 10px}.election-panel-title h3{font-size:1.05rem;line-height:1.2}.election-panel-actions{gap:4px}.election-panel-btn,.election-panel-close{padding:8px}}@supports (padding-bottom: env(safe-area-inset-bottom)){@media (max-width: 768px){.election-panel{padding-bottom:env(safe-area-inset-bottom)}.mobile-toggle{bottom:calc(20px + env(safe-area-inset-bottom))}.map-legend{bottom:calc(20px + env(safe-area-inset-bottom))!important}.leaflet-control-scale{margin-bottom:calc(70px + env(safe-area-inset-bottom))!important}.sidebar{padding-bottom:env(safe-area-inset-bottom)}}}@media (max-width: 768px){.year-btn{min-height:36px;min-width:auto;padding:8px 14px;font-size:.8rem;white-space:nowrap;border-radius:18px;border-width:1.5px;font-weight:600}.year-btn.parliament-year{font-size:.75rem;padding:8px 10px;background:#eff6ff;border-color:#93c5fd;color:#1d4ed8}.year-btn.parliament-year.active{background:#2563eb;border-color:#2563eb;color:#fff}.panel-tab{min-height:36px;padding:6px 8px;font-size:.75rem;gap:4px}.panel-tab svg{width:14px;height:14px}.panel-tabs{padding:6px 10px;gap:6px}.district-info{padding:8px 12px;font-size:.7rem}.election-panel-close{min-width:44px;min-height:44px;display:flex;align-items:center;justify-content:center}.share-bar-btn{min-height:44px;padding:10px 16px}.year-btn,.panel-tab,.share-bar-btn,.toolbar-btn,.candidate-row,.district-item,.constituency-item,.assembly-item{transition:transform .1s ease,background .15s ease}.year-btn:active,.panel-tab:active,.share-bar-btn:active,.toolbar-btn:active{transform:scale(.96)}.candidate-row:active,.district-item:active,.constituency-item:active,.assembly-item:active{background:#0000000d!important;transform:scale(.99)}}@media (max-width: 768px){.search-box{position:relative}.search-box:focus-within .search-results{position:fixed;inset:0;max-height:none;border-radius:0;z-index:2000;background:#fff;padding-top:70px}.search-box:focus-within .search-input-wrapper{position:fixed;top:0;left:0;right:0;z-index:2001;padding:12px 16px;background:#1a1a2e;box-shadow:0 2px 10px #0003}.search-box:focus-within .search-input{background:#ffffff26;border-color:transparent;color:#fff}.search-box:focus-within .search-input::placeholder{color:#fff9}.search-box:focus-within .search-icon{color:#fffc}.search-box:focus-within .search-clear{color:#fffc}.search-result-item{min-height:56px;padding:14px 16px}.result-name{font-size:1rem}.result-state{font-size:.85rem}}.skeleton{background:linear-gradient(90deg,#f0f0f0 25%,#e0e0e0,#f0f0f0 75%);background-size:200% 100%;animation:skeleton-shimmer 1.5s infinite;border-radius:4px}@keyframes skeleton-shimmer{0%{background-position:200% 0}to{background-position:-200% 0}}.skeleton-text{height:1em;margin-bottom:.5em}.skeleton-text.short{width:40%}.skeleton-text.medium{width:70%}.skeleton-text.long{width:90%}.skeleton-card{height:80px;margin-bottom:12px}.skeleton-circle{width:40px;height:40px;border-radius:50%}@media (max-width: 768px){.info-title{font-size:1.25rem;line-height:1.3}.election-panel-title h3{font-size:1.1rem;line-height:1.25}.winner-name{font-size:1.1rem}.winner-party{font-size:.85rem}.candidates-section,.info-panel{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}}@media (max-width: 768px){.pull-indicator{position:absolute;top:-40px;left:50%;transform:translate(-50%);width:40px;height:40px;display:flex;align-items:center;justify-content:center;opacity:0;transition:opacity .2s,transform .2s}.pull-indicator.visible{opacity:1}.pull-indicator.refreshing{animation:spin 1s linear infinite}@keyframes spin{0%{transform:translate(-50%) rotate(0)}to{transform:translate(-50%) rotate(360deg)}}}@media (max-width: 768px){.leaflet-control-zoom{margin-right:10px!important;margin-bottom:80px!important}.leaflet-control-zoom a{width:44px!important;height:44px!important;line-height:44px!important;font-size:20px!important}.leaflet-control-zoom-in,.leaflet-control-zoom-out{position:relative}.leaflet-control-zoom-in:before,.leaflet-control-zoom-out:before{content:"";position:absolute;inset:-4px}}.peek-winner{display:none}@media (max-width: 768px) and (orientation: portrait){.election-panel.panel-peek{height:100px!important;max-height:100px!important;overflow:hidden!important}.election-panel.panel-peek .election-year-selector,.election-panel.panel-peek .panel-tabs,.election-panel.panel-peek .winner-card,.election-panel.panel-peek .winner-card-compact,.election-panel.panel-peek .stats-inline,.election-panel.panel-peek .constituency-stats,.election-panel.panel-peek .candidates-section,.election-panel.panel-peek .candidates-preview,.election-panel.panel-peek .election-panel-content,.election-panel.panel-peek .pc-mp-info,.election-panel.panel-peek .share-bar,.election-panel.panel-peek .district-info{display:none!important}.election-panel.panel-peek .election-panel-header{cursor:pointer}.election-panel.panel-peek .peek-winner{display:block!important;font-size:.75rem;font-weight:500;color:#ffffffe6;margin-top:4px}.election-panel.panel-half{height:45vh!important;max-height:45vh!important}.election-panel.panel-half .winner-card,.election-panel.panel-half .winner-card-compact,.election-panel.panel-half .stats-inline,.election-panel.panel-half .constituency-stats,.election-panel.panel-half .share-bar,.election-panel.panel-half .district-info,.election-panel.panel-half .pc-mp-info,.election-panel.panel-half .parliament-contribution{display:none!important}.election-panel.panel-half .candidates-preview{margin-top:8px;max-height:180px;overflow:hidden;position:relative}.election-panel.panel-half .candidates-preview:after{content:"▼ Expand for more";position:absolute;bottom:0;left:0;right:0;height:36px;background:linear-gradient(transparent,#fff 50%);display:flex;align-items:flex-end;justify-content:center;padding-bottom:6px;font-size:.7rem;color:#64748b;pointer-events:none}.election-panel.panel-full{height:85vh!important;max-height:85vh!important}.election-panel.panel-full .candidates-preview:after{display:none}.election-panel.panel-peek .bottom-sheet-handle{background:#94a3b8}.election-panel.panel-full .bottom-sheet-handle{background:#64748b}.election-panel.panel-peek,.election-panel.panel-half,.election-panel.panel-full{transition:height .4s cubic-bezier(.4,0,.2,1)}}.swipe-hint{display:none;position:absolute;bottom:100%;left:50%;transform:translate(-50%);padding:8px 16px;background:#000000b3;color:#fff;font-size:.75rem;border-radius:16px;margin-bottom:8px;white-space:nowrap;opacity:0;animation:fadeInOut 3s ease-in-out}@keyframes fadeInOut{0%,to{opacity:0}20%,80%{opacity:1}}@media (max-width: 768px){.swipe-hint.show{display:block}}.mobile-loading-overlay{display:none;position:fixed;inset:0;background:#fffffff2;z-index:9999;align-items:center;justify-content:center;flex-direction:column;gap:16px}@media (max-width: 768px){.mobile-loading-overlay.visible{display:flex}}.loading-spinner{width:40px;height:40px;border:3px solid #e2e8f0;border-top-color:#1e3a5f;border-radius:50%;animation:spin .8s linear infinite}.loading-text{font-size:.9rem;color:#64748b}@media (max-width: 768px){.election-panel-content,.candidates-section,.info-panel,.search-results{-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.election-panel-content::-webkit-scrollbar,.candidates-section::-webkit-scrollbar{display:none}.election-panel-content,.candidates-section{-ms-overflow-style:none;scrollbar-width:none}}@media (max-width: 768px){.winner-card,.stat-card{transition:transform .15s ease,box-shadow .15s ease}.winner-card:active,.stat-card:active{transform:scale(.98)}}@media (max-width: 1024px) and (orientation: landscape){.election-panel{position:fixed;inset:0 0 0 auto;width:320px;max-height:100vh!important;border-radius:0;border-left:1px solid #e2e8f0;overflow:hidden;background:#fff;animation:slideInRight .4s cubic-bezier(.4,0,.2,1)}.election-panel.panel-peek,.election-panel.panel-half,.election-panel.panel-full{max-height:100vh!important}@keyframes slideInRight{0%{opacity:0;transform:translate(40px)}to{opacity:1;transform:translate(0)}}.bottom-sheet-handle{display:none!important}.election-panel-header{padding:10px 12px}.election-panel-title h3{font-size:.95rem}.constituency-type{font-size:.6rem;padding:2px 6px}.election-year-selector{padding:6px 10px;gap:4px;flex-wrap:nowrap;overflow-x:auto}.year-btn{min-height:26px;padding:4px 10px;font-size:.65rem;flex-shrink:0}.panel-tabs{padding:4px 8px;gap:3px}.panel-tab{min-height:26px;padding:4px 10px;font-size:.65rem}.election-panel-content{flex:1;overflow-y:auto;padding:6px}.winner-card-compact{margin:6px;padding:10px}.winner-name{font-size:.85rem}.winner-stats-compact{font-size:.7rem}.stats-inline{padding:6px;gap:4px}.stat-inline{font-size:.6rem;padding:6px}.candidates-preview h4{font-size:.7rem}.candidate-row-compact{padding:6px 8px;font-size:.65rem}.share-bar,.district-info{display:none!important}}@media (prefers-contrast: high){.year-btn{border-width:3px}.year-btn.active{outline:2px solid white;outline-offset:2px}.candidate-row{border-bottom:2px solid #000}}@media (prefers-reduced-motion: reduce){.skeleton{animation:none;background:#e0e0e0}.election-panel,.sidebar{animation:none!important;transition:none!important}.year-btn:active,.panel-tab:active,.share-bar-btn:active{transform:none}}.booth-popup .leaflet-popup-content-wrapper{border-radius:8px;box-shadow:0 4px 12px #00000026}.booth-popup .leaflet-popup-content{margin:12px}.booth-popup .leaflet-popup-tip{box-shadow:0 2px 4px #0000001a}.booth-tooltip{background:#000000d9;border:none;border-radius:4px;color:#fff;font-size:12px;padding:4px 8px;box-shadow:0 2px 8px #0003}.booth-tooltip:before{border-top-color:#000000d9}.booth-wise-view{padding:12px;display:flex;flex-direction:column;gap:12px}.booth-year-selector{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}.booth-year-btn{padding:6px 14px;font-size:13px;font-weight:500;border:1px solid #e5e7eb;border-radius:6px;background:#fff;cursor:pointer;transition:all .15s;color:#374151}.booth-year-btn:hover{background:#f3f4f6;border-color:#d1d5db}.booth-year-btn.active{background:#10b981;border-color:#10b981;color:#fff}.booth-year-label{display:flex;align-items:center;gap:8px;font-size:13px;color:#6b7280;margin-bottom:8px}.booth-year-label .year-badge{background:#10b981;color:#fff;padding:4px 10px;border-radius:4px;font-weight:600}.booth-year-label .election-type{font-size:11px;text-transform:uppercase;letter-spacing:.5px;background:#f3f4f6;padding:3px 8px;border-radius:4px}.year-btn-small{padding:4px 10px;font-size:12px;border:1px solid #e5e7eb;border-radius:4px;background:#fff;cursor:pointer;transition:all .15s}.year-btn-small.active{background:#10b981;color:#fff;border-color:#10b981}.booth-selector{display:flex;flex-direction:column;gap:8px}.booth-selector label{font-size:12px;font-weight:600;color:#374151}.booth-dropdown-wrapper{position:relative}.booth-dropdown{width:100%;padding:10px 32px 10px 12px;font-size:13px;border:1px solid #d1d5db;border-radius:6px;background:#fff;cursor:pointer;appearance:none;-webkit-appearance:none}.booth-dropdown:focus{outline:none;border-color:#10b981;box-shadow:0 0 0 2px #10b98133}.dropdown-icon{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:#6b7280;pointer-events:none}.booth-stats-summary{display:flex;gap:12px;padding:10px;background:#f0fdf4;border-radius:8px}.booth-stats-summary .stat-item{display:flex;flex-direction:column;gap:2px}.booth-stats-summary .stat-label{font-size:10px;color:#6b7280;text-transform:uppercase}.booth-stats-summary .stat-value{font-size:14px;font-weight:600;color:#047857}.selected-booth-details{background:#fff;border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.selected-booth-details .booth-header{padding:12px;background:linear-gradient(135deg,#10b981,#059669);color:#fff}.selected-booth-details .booth-header h4{margin:0;font-size:16px;display:flex;align-items:center;gap:8px}.women-badge{font-size:12px;background:#fff3;padding:2px 8px;border-radius:12px}.booth-address{display:flex;gap:10px;padding:12px;background:#f9fafb;border-bottom:1px solid #e5e7eb}.booth-address svg{color:#6b7280;flex-shrink:0;margin-top:2px}.address-name{font-weight:600;font-size:13px;color:#111827}.address-area{font-size:12px;color:#4b5563;margin-top:2px}.address-locality{font-size:11px;color:#9ca3af;margin-top:2px}.booth-vote-summary{display:flex;gap:16px;padding:12px;border-bottom:1px solid #e5e7eb}.booth-vote-summary .vote-stat{display:flex;flex-direction:column;gap:2px}.booth-vote-summary .label{font-size:10px;color:#6b7280;text-transform:uppercase}.booth-vote-summary .value{font-size:14px;font-weight:600;color:#111827}.booth-vote-summary .value.party-badge{color:#fff;padding:2px 8px;border-radius:4px;font-size:12px}.booth-candidates{padding:12px}.booth-candidates h5{margin:0 0 10px;font-size:12px;color:#6b7280;text-transform:uppercase}.booth-candidates-scroll::-webkit-scrollbar{width:6px}.booth-candidates-scroll::-webkit-scrollbar-track{background:#f1f1f1;border-radius:3px}.booth-candidates-scroll::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:3px}.booth-candidates-scroll::-webkit-scrollbar-thumb:hover{background:#a1a1a1}.booth-candidate-row{display:flex;flex-direction:column;gap:4px;padding:8px 0;border-bottom:1px solid #f3f4f6}.booth-candidate-row:last-child{border-bottom:none}.booth-candidate-row.winner{background:#f0fdf4;margin:0 -12px;padding:8px 12px}.booth-candidate-row .candidate-info{display:flex;align-items:center;gap:8px}.booth-candidate-row .party-tag{font-size:10px;font-weight:600;color:#fff;padding:2px 6px;border-radius:3px;min-width:40px;text-align:center}.booth-candidate-row .candidate-name{font-size:12px;color:#374151;flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.booth-candidate-row .candidate-votes{display:flex;gap:12px;font-size:12px}.booth-candidate-row .votes{font-weight:600;color:#111827;min-width:50px}.booth-candidate-row .percent{color:#6b7280;min-width:45px;text-align:right}.booth-candidate-row .vote-bar-bg{height:4px;background:#e5e7eb;border-radius:2px;overflow:hidden}.booth-candidate-row .vote-bar-fill{height:100%;border-radius:2px;transition:width .3s ease}.no-booth-selected{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;color:#9ca3af}.no-booth-selected svg{margin-bottom:12px;opacity:.5}.no-booth-selected p{margin:0;font-size:13px}.boothwise-analysis{padding:16px;display:flex;flex-direction:column;gap:20px}.section-heading{display:flex;align-items:center;gap:8px;margin:0 0 12px;font-size:13px;font-weight:600;color:#374151;text-transform:uppercase;letter-spacing:.5px}.section-heading svg{color:#6b7280;flex-shrink:0}.analysis-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:40px 20px;text-align:center;color:#9ca3af}.analysis-empty svg{margin-bottom:12px;opacity:.5}.analysis-header{display:flex;flex-direction:column;gap:12px}.analysis-title{display:flex;align-items:center;gap:8px;color:#374151}.analysis-title h4{margin:0;font-size:16px;font-weight:600}.analysis-title svg{color:#f59e0b}.analysis-summary-stats{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.summary-stat{display:flex;align-items:center;gap:8px}.summary-stat.winner{font-weight:600}.summary-stat .party{padding:4px 10px;border-radius:4px;font-size:12px;font-weight:600;color:#fff}.summary-stat .count{font-size:13px;color:#6b7280}.summary-stat.winner .count{color:#374151;font-weight:500}.analysis-summary-stats .vs{font-size:11px;color:#9ca3af;text-transform:uppercase}.booth-distribution{background:#f9fafb;border-radius:8px;padding:12px}.distribution-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#6b7280;margin-bottom:8px}.distribution-bar{display:flex;height:28px;border-radius:6px;overflow:hidden;background:#e5e7eb}.distribution-segment{display:flex;align-items:center;justify-content:center;min-width:2px;transition:all .3s ease}.distribution-segment:hover{filter:brightness(1.1)}.segment-label{font-size:10px;font-weight:600;color:#fff;text-shadow:0 1px 2px rgba(0,0,0,.3)}.distribution-legend{display:flex;flex-wrap:wrap;gap:12px;margin-top:10px}.legend-item{display:flex;align-items:center;gap:6px;font-size:12px}.legend-color{width:10px;height:10px;border-radius:2px}.legend-party{color:#374151;font-weight:500}.legend-count{color:#9ca3af}.analysis-insights h5{margin:0 0 12px;font-size:13px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#6b7280}.insights-list{display:flex;flex-direction:column;gap:12px}.insight-card{display:flex;gap:12px;padding:12px;background:#fff;border-radius:8px;border:1px solid #e5e7eb;transition:all .2s ease}.insight-card:hover{border-color:#d1d5db;box-shadow:0 2px 4px #0000000d}.insight-card.strength{border-left:3px solid #10b981}.insight-card.weakness{border-left:3px solid #ef4444}.insight-card.opportunity{border-left:3px solid #f59e0b}.insight-card.insight{border-left:3px solid #6366f1}.insight-icon{flex-shrink:0;width:36px;height:36px;border-radius:8px;display:flex;align-items:center;justify-content:center}.insight-card.strength .insight-icon{color:#10b981}.insight-card.weakness .insight-icon{color:#ef4444}.insight-card.opportunity .insight-icon{color:#f59e0b}.insight-card.insight .insight-icon{color:#6366f1}.insight-content{flex:1;min-width:0}.insight-header{display:flex;align-items:center;justify-content:space-between;gap:8px;margin-bottom:4px}.insight-title{font-size:13px;font-weight:600;color:#374151}.insight-value{font-size:12px;font-weight:600;color:#10b981;background:#10b98115;padding:2px 8px;border-radius:4px}.insight-card.weakness .insight-value{color:#ef4444;background:#ef444415}.insight-card.opportunity .insight-value{color:#f59e0b;background:#f59e0b15}.insight-card.insight .insight-value{color:#6366f1;background:#6366f115}.insight-description{margin:0;font-size:12px;line-height:1.5;color:#6b7280}.insight-booths{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.expand-collapse-btn{display:inline-flex;align-items:center;gap:4px;padding:4px 10px;background:#e0e7ff;border:1px solid #c7d2fe;border-radius:4px;font-size:11px;font-weight:500;color:#4f46e5;cursor:pointer;transition:all .15s ease}.expand-collapse-btn:hover{background:#c7d2fe;border-color:#a5b4fc}.expand-collapse-btn svg{transition:transform .2s ease}.expand-collapse-btn svg.rotate-180{transform:rotate(180deg)}.insight-booths-unused::-webkit-scrollbar{width:4px}.insight-booths::-webkit-scrollbar-track{background:#f1f1f1;border-radius:2px}.insight-booths::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:2px}.insight-booths::-webkit-scrollbar-thumb:hover{background:#a1a1a1}.booth-link{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:4px;font-size:11px;color:#374151;cursor:pointer;transition:all .15s ease}.booth-link:hover{background:#e5e7eb;border-color:#d1d5db;color:#111827}.booth-link:active{transform:scale(.98)}.booth-link svg{color:#10b981;flex-shrink:0}.booth-link-name{font-weight:600}.booth-link-detail{color:#6b7280;font-size:10px}.insight-card.strength .booth-link:hover{background:#d1fae5;border-color:#10b981}.insight-card.weakness .booth-link:hover{background:#fee2e2;border-color:#ef4444}.insight-card.weakness .booth-link svg{color:#ef4444}.insight-card.opportunity .booth-link:hover{background:#fef3c7;border-color:#f59e0b}.insight-card.opportunity .booth-link svg{color:#f59e0b}.insight-card.insight .booth-link:hover{background:#e0e7ff;border-color:#6366f1}.insight-card.insight .booth-link svg{color:#6366f1}.analysis-quick-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;padding-top:8px;border-top:1px solid #e5e7eb}.quick-stat{display:flex;flex-direction:column;align-items:center;text-align:center;padding:12px 8px;background:#f9fafb;border-radius:8px}.quick-stat .stat-number{font-size:20px;font-weight:700;color:#374151}.quick-stat .stat-label{font-size:10px;color:#9ca3af;margin-top:4px;line-height:1.3}.quick-stat.highlight-nota{background:#fef3c7}.quick-stat.highlight-nota .stat-number{color:#d97706}.quick-stat.highlight-zero{background:#fee2e2}.quick-stat.highlight-zero .stat-number{color:#dc2626}.strike-rate-table{background:#f9fafb;border-radius:8px;padding:12px}.strike-rate-table h5{margin:0 0 12px;font-size:12px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:#6b7280}.strike-rate-list{display:flex;flex-direction:column;gap:8px}.strike-rate-row{display:grid;grid-template-columns:20px 50px 70px 45px 1fr;align-items:center;gap:8px;padding:8px;background:#fff;border-radius:6px;font-size:12px}.strike-rate-row.winner{background:#ecfdf5;border:1px solid #10b981}.sr-rank{font-weight:600;color:#9ca3af;text-align:center}.strike-rate-row.winner .sr-rank{color:#10b981}.sr-party{padding:3px 8px;border-radius:4px;font-size:10px;font-weight:600;color:#fff;text-align:center;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sr-booths{color:#6b7280;font-size:11px}.sr-rate{font-weight:700;color:#374151;text-align:right}.strike-rate-row.winner .sr-rate{color:#10b981}.sr-bar{height:6px;background:#e5e7eb;border-radius:3px;overflow:hidden}.sr-bar-fill{height:100%;border-radius:3px;transition:width .3s ease}.party-booth-breakdown{background:#f9fafb;border-radius:8px;padding:12px;margin-top:16px}.party-booth-breakdown h5{margin:0 0 12px;font-size:13px;font-weight:600;color:#374151;display:flex;align-items:center;gap:6px}.party-booth-cards{display:flex;flex-direction:column;gap:8px}.party-booth-card{background:#fff;border-radius:8px;border:1px solid #e5e7eb;overflow:hidden;transition:all .2s ease}.party-booth-card.expanded{border-color:#d1d5db;box-shadow:0 2px 8px #0000000f}.party-booth-header{width:100%;display:flex;align-items:center;justify-content:space-between;padding:10px 12px;background:transparent;border:none;border-left:4px solid;cursor:pointer;transition:background .2s ease}.party-booth-header:hover{background:#f9fafb}.party-info{display:flex;align-items:center;gap:8px}.party-badge{padding:3px 10px;border-radius:4px;font-size:11px;font-weight:700;color:#fff;letter-spacing:.3px}.booth-count{font-size:12px;color:#6b7280;font-weight:500}.party-stats{display:flex;gap:12px}.party-stats .stat{font-size:11px;color:#9ca3af;font-weight:500}.expand-icon{color:#9ca3af;transition:transform .2s ease}.expand-icon.rotated{transform:rotate(180deg)}.party-booth-list{border-top:1px solid #f3f4f6;max-height:240px;overflow-y:auto}.booth-list-header{display:grid;grid-template-columns:1.5fr 1fr .8fr;gap:8px;padding:8px 12px;background:#f9fafb;font-size:10px;font-weight:600;color:#9ca3af;text-transform:uppercase;letter-spacing:.5px;position:sticky;top:0}.booth-list-items{display:flex;flex-direction:column}.booth-list-item{display:grid;grid-template-columns:1.5fr 1fr .8fr;gap:8px;padding:8px 12px;background:transparent;border:none;border-bottom:1px solid #f3f4f6;cursor:pointer;text-align:left;transition:background .15s ease}.booth-list-item:hover{background:#f0fdf4}.booth-list-item:last-child{border-bottom:none}.booth-list-item .col-booth{font-size:12px;color:#374151;font-weight:500;display:flex;align-items:center;gap:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.booth-list-item .women-badge{font-size:10px;background:#fce7f3;color:#be185d;padding:1px 4px;border-radius:3px;font-weight:600}.booth-list-item .col-vote{font-size:11px;color:#6b7280;display:flex;flex-direction:column;gap:2px}.booth-list-item .mini-bar{height:3px;background:#e5e7eb;border-radius:2px;max-width:60px}.booth-list-item .col-margin{font-size:11px;color:#10b981;font-weight:600;text-align:right}.analysis-quick-stats-section{background:#f9fafb;border-radius:8px;padding:12px}.analysis-quick-stats-section .section-heading{margin-bottom:12px}.analysis-quick-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;padding-top:12px;border-top:1px solid #e5e7eb}@media (max-width: 400px){.analysis-quick-stats{grid-template-columns:repeat(2,1fr)}}.postal-ballots-view{padding:12px;display:flex;flex-direction:column;gap:16px}.postal-summary{background:linear-gradient(135deg,#f0fdf4,#dcfce7);border-radius:12px;padding:16px;border:1px solid #86efac}.postal-summary-header{display:flex;align-items:center;gap:8px;margin-bottom:12px;color:#166534}.postal-summary-header h3{margin:0;font-size:14px;font-weight:600}.postal-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.postal-stat{display:flex;flex-direction:column;align-items:center;text-align:center}.postal-stat .stat-value{font-size:20px;font-weight:700;color:#15803d}.postal-stat .stat-label{font-size:11px;color:#166534;margin-top:4px}.postal-candidates{background:#fff;border-radius:8px;border:1px solid #e5e7eb;overflow:hidden}.postal-candidates-header{display:grid;grid-template-columns:24px 70px 1fr 1fr 1fr;gap:6px;padding:10px 12px;background:#f9fafb;border-bottom:1px solid #e5e7eb;font-size:11px;font-weight:600;color:#6b7280;text-transform:uppercase}.postal-candidates-header span{background:transparent;border:none;padding:0}.postal-candidates-header .col-postal,.postal-candidates-header .col-booth,.postal-candidates-header .col-total{text-align:right}.postal-candidate-row{display:grid;grid-template-columns:24px 70px 1fr 1fr 1fr;gap:6px;padding:10px 12px;border-bottom:1px solid #f3f4f6;font-size:13px;align-items:center}.postal-candidate-row:last-child{border-bottom:none}.postal-candidate-row.winner{background:#f0fdf4}.postal-candidate-row .col-rank{font-weight:600;color:#9ca3af}.postal-candidate-row.winner .col-rank{color:#16a34a}.postal-candidate-row .col-name{font-weight:500;color:#374151;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.postal-candidate-row .col-party{padding:2px 6px;border-radius:4px;font-size:10px;font-weight:600;color:#fff;text-align:center}.postal-candidate-row .col-postal{font-weight:600;color:#15803d;display:flex;flex-direction:column;align-items:flex-end}.postal-candidate-row .col-postal .postal-pct{font-size:10px;font-weight:400;color:#6b7280}.postal-candidate-row .col-booth,.postal-candidate-row .col-total{text-align:right;color:#6b7280}.postal-candidate-row .col-total{font-weight:600;color:#374151}.postal-note{display:flex;align-items:flex-start;gap:8px;padding:12px;background:#fef3c7;border-radius:8px;font-size:11px;color:#92400e;line-height:1.4}.postal-note svg{flex-shrink:0;margin-top:1px}@media (max-width: 400px){.postal-stats{grid-template-columns:repeat(2,1fr)}.postal-candidates-header,.postal-candidate-row{grid-template-columns:20px 55px 1fr 1fr 1fr;gap:4px}}.sidebar-header-actions{display:flex;flex-direction:column;gap:8px}.blog-btn{display:flex;align-items:center;gap:6px;padding:8px 12px;background:linear-gradient(135deg,#7c3aed,#5b21b6);color:#fff;border:none;border-radius:8px;cursor:pointer;font-size:13px;font-weight:600;transition:all .2s;margin-top:4px}.blog-btn:hover{background:linear-gradient(135deg,#8b5cf6,#6d28d9);transform:translateY(-1px);box-shadow:0 4px 12px #7c3aed4d}.blog-btn:active{transform:translateY(0)}.blog-section{position:fixed;top:0;right:0;width:100%;max-width:600px;height:100vh;background:#fff;box-shadow:-4px 0 20px #00000026;z-index:2000;display:flex;flex-direction:column;transform:translate(100%);transition:transform .3s cubic-bezier(.4,0,.2,1);overflow:hidden}.blog-section:has(.blog-header){transform:translate(0)}.blog-header{display:flex;align-items:center;justify-content:space-between;padding:20px 24px;border-bottom:1px solid #e5e7eb;background:linear-gradient(135deg,#7c3aed,#5b21b6);color:#fff}.blog-title{display:flex;align-items:center;gap:12px}.blog-title h2{font-size:24px;font-weight:700;margin:0;color:#fff}.blog-close{background:#fff3;border:none;color:#fff;width:36px;height:36px;border-radius:8px;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}.blog-close:hover{background:#ffffff4d}.blog-content{flex:1;overflow-y:auto;padding:0}.blog-list{padding:24px;display:flex;flex-direction:column;gap:16px}.blog-post-card{padding:20px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:12px;cursor:pointer;transition:all .2s}.blog-post-card:hover{background:#f3f4f6;border-color:#7c3aed;transform:translateY(-2px);box-shadow:0 4px 12px #7c3aed1a}.blog-post-card h3{font-size:18px;font-weight:700;color:#1f2937;margin:0 0 8px}.blog-date{font-size:12px;color:#6b7280;margin:0 0 12px}.blog-excerpt{font-size:14px;color:#4b5563;line-height:1.6;margin:0 0 12px}.blog-read-more{display:inline-flex;align-items:center;gap:6px;color:#7c3aed;font-size:13px;font-weight:600;background:none;border:none;cursor:pointer;padding:0}.blog-post-view{height:100%;overflow-y:auto}.blog-back{display:flex;align-items:center;gap:8px;padding:16px 24px;background:#f9fafb;border-bottom:1px solid #e5e7eb;color:#7c3aed;font-size:14px;font-weight:600;border:none;cursor:pointer;width:100%;transition:background .2s}.blog-back:hover{background:#f3f4f6}.blog-article{padding:24px;max-width:800px;margin:0 auto}.blog-article header{margin-bottom:32px}.blog-header-content{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;flex-wrap:wrap}.blog-header-content>div:first-child{flex:1;min-width:300px}.blog-article h1{font-size:28px;font-weight:800;color:#1f2937;margin:0 0 12px;line-height:1.3}.article-meta{font-size:14px;color:#6b7280;margin:0}.blog-share-buttons{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.blog-share-btn{display:flex;align-items:center;gap:6px;padding:8px 14px;border:1px solid #e5e7eb;border-radius:8px;background:#fff;color:#374151;font-size:13px;font-weight:600;cursor:pointer;transition:all .2s}.blog-share-btn:hover{background:#f9fafb;border-color:#d1d5db;transform:translateY(-1px);box-shadow:0 2px 8px #0000001a}.blog-share-btn.twitter-btn{color:#1da1f2;border-color:#1da1f2}.blog-share-btn.twitter-btn:hover{background:#1da1f2;color:#fff}.blog-share-btn.facebook-btn{color:#1877f2;border-color:#1877f2}.blog-share-btn.facebook-btn:hover{background:#1877f2;color:#fff}.blog-share-btn.linkedin-btn{color:#0a66c2;border-color:#0a66c2}.blog-share-btn.linkedin-btn:hover{background:#0a66c2;color:#fff}.blog-share-btn.copy-btn{color:#7c3aed;border-color:#7c3aed}.blog-share-btn.copy-btn:hover{background:#7c3aed;color:#fff}.blog-share-btn.copy-btn.copied{background:#10b981;border-color:#10b981;color:#fff}.blog-share-btn span{font-size:13px}@media (max-width: 768px){.blog-header-content{flex-direction:column}.blog-share-buttons{width:100%;justify-content:flex-start}.blog-share-btn{flex:1;justify-content:center;min-width:100px}}.article-content{font-size:16px;line-height:1.8;color:#374151}.article-content p{margin:0 0 20px}.article-content h2{font-size:22px;font-weight:700;color:#1f2937;margin:32px 0 16px;padding-top:8px;border-top:2px solid #e5e7eb}.article-content h3{font-size:18px;font-weight:600;color:#374151;margin:24px 0 12px}.article-content ul,.article-content ol{margin:16px 0;padding-left:24px}.article-content li{margin:8px 0}.analysis-summary{display:grid;grid-template-columns:repeat(2,1fr);gap:16px;margin:32px 0}.summary-card{padding:20px;background:linear-gradient(135deg,#7c3aed,#5b21b6);border-radius:12px;color:#fff;text-align:center}.summary-card h3{font-size:36px;font-weight:800;margin:0 0 8px;color:#fff}.summary-card p{font-size:14px;margin:0;opacity:.9}.flip-list{display:flex;flex-direction:column;gap:16px;margin:24px 0}.flip-item{padding:0;background:#f9fafb;border:2px solid #e5e7eb;border-radius:12px;transition:all .2s;overflow:hidden}.flip-item-main{padding:20px;cursor:pointer;transition:all .2s}.flip-item:hover .flip-item-main{background:#f3f4f6}.flip-item:hover{border-color:#7c3aed;box-shadow:0 4px 12px #7c3aed26}.flip-header{display:flex;align-items:center;gap:12px;margin-bottom:16px}.flip-rank{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:#7c3aed;color:#fff;border-radius:8px;font-weight:700;font-size:14px;flex-shrink:0}.flip-ac-name{flex:1;font-size:18px;font-weight:700;color:#1f2937;margin:0}.flip-ac-id{font-size:12px;color:#6b7280;background:#e5e7eb;padding:4px 8px;border-radius:6px;font-weight:600}.flip-details{display:flex;flex-direction:column;gap:12px}.flip-current,.flip-new{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.flip-current .label,.flip-new .label{font-size:13px;color:#6b7280;font-weight:600}.flip-current .value,.flip-new .value{font-size:15px;font-weight:700;padding:4px 10px;border-radius:6px}.flip-current .value.winner{background:#fee2e2;color:#dc2626}.flip-new .value.combined{background:#dcfce7;color:#16a34a}.flip-current .votes,.flip-new .margin{font-size:13px;color:#6b7280}.flip-breakdown{display:flex;align-items:center;gap:8px;font-size:12px;color:#6b7280;padding:8px;background:#f3f4f6;border-radius:6px;flex-wrap:wrap}.flip-actions{display:flex;align-items:center;justify-content:space-between;margin-top:12px;gap:12px}.flip-click-hint{font-size:12px;color:#7c3aed;font-weight:600;flex:1}.flip-toggle-booths{display:flex;align-items:center;gap:6px;padding:6px 12px;background:#7c3aed;color:#fff;border:none;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;transition:all .2s}.flip-toggle-booths:hover{background:#6d28d9;transform:translateY(-1px)}.flip-booths-section{border-top:1px solid #e5e7eb;background:#fff;padding:20px;max-height:500px;overflow-y:auto}.booth-loading,.booth-error{padding:20px;text-align:center;color:#6b7280;font-size:14px}.booth-error{color:#dc2626}.booth-list{margin-top:12px}.booth-list-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:16px;padding-bottom:12px;border-bottom:2px solid #e5e7eb}.booth-list-header h4{font-size:16px;font-weight:700;color:#1f2937;margin:0}.booth-count{font-size:12px;color:#6b7280;font-weight:600}.booth-table{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden}.booth-table-header{display:grid;grid-template-columns:1fr 1fr 1fr 1fr 1fr 1.2fr 1fr;gap:12px;padding:12px 16px;background:#f3f4f6;border-bottom:2px solid #e5e7eb;font-size:12px;font-weight:700;color:#374151;text-transform:uppercase;letter-spacing:.5px}.booth-table-body{max-height:400px;overflow-y:auto}.booth-row{display:grid;grid-template-columns:1fr 1fr 1fr 1fr 1fr 1.2fr 1fr;gap:12px;padding:12px 16px;border-bottom:1px solid #f3f4f6;font-size:13px;transition:background .15s}.booth-row:hover{background:#f9fafb}.booth-row:last-child{border-bottom:none}.booth-col-id{font-weight:600;color:#1f2937;font-family:Courier New,monospace;font-size:12px}.booth-col-admk{color:#059669;font-weight:500}.booth-col-bjp{color:#f93;font-weight:500}.booth-col-pmk{color:#d4a017;font-weight:500}.booth-col-ammk{color:#dc2626;font-weight:500}.booth-col-combined{font-weight:700;color:#7c3aed}.booth-col-total{color:#6b7280;font-size:12px}.margin-increase-list{display:flex;flex-direction:column;gap:12px;margin:24px 0}.margin-item{display:flex;align-items:center;gap:12px;padding:12px 16px;background:#f9fafb;border:1px solid #e5e7eb;border-radius:8px;cursor:pointer;transition:all .2s}.margin-item:hover{background:#f3f4f6;border-color:#7c3aed;transform:translate(4px)}.margin-rank{font-weight:700;color:#7c3aed;min-width:24px}.margin-ac-info{flex:1;display:flex;flex-direction:column;gap:2px}.margin-ac{font-weight:600;color:#1f2937}.margin-winner{font-size:11px;color:#6b7280;font-weight:500}.margin-value{font-weight:700;color:#16a34a;font-size:14px}.show-more-container{display:flex;justify-content:center;margin:24px 0;padding-top:16px;border-top:1px solid #e5e7eb}.show-more-btn{display:flex;align-items:center;gap:8px;padding:12px 24px;background:linear-gradient(135deg,#7c3aed,#5b21b6);color:#fff;border:none;border-radius:8px;font-size:14px;font-weight:600;cursor:pointer;transition:all .2s}.show-more-btn:hover{background:linear-gradient(135deg,#8b5cf6,#6d28d9);transform:translateY(-2px);box-shadow:0 4px 12px #7c3aed4d}.show-more-btn:active{transform:translateY(0)}.article-footer{margin-top:48px;padding-top:24px;border-top:1px solid #e5e7eb}.article-footer p{font-size:13px;color:#6b7280;font-style:italic;margin:0}.loading{padding:40px;text-align:center;color:#6b7280}@media (max-width: 768px){.blog-section{max-width:100%}.analysis-summary{grid-template-columns:1fr}.flip-header{flex-wrap:wrap}.flip-ac-name{font-size:16px}}
