.header{position:absolute;top:0;left:0;right:0;z-index:100;pointer-events:none}.header-content{display:inline-block;max-width:min(420px,calc(100vw - 32px));background:#fffffff2;-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px);padding:12px 20px;margin:max(12px,env(safe-area-inset-top)) 16px 16px;border-radius:8px;box-shadow:var(--shadow-md);pointer-events:auto;border:1px solid rgba(226,232,240,.8);-webkit-user-select:none;user-select:none}.header-title{font-size:1.25rem;font-weight:600;color:var(--color-text-primary);margin:0;display:flex;align-items:center;gap:8px;min-width:0}.header-icon{font-size:1.5rem}.header-subtitle{font-size:.875rem;color:var(--color-text-secondary);margin:4px 0 0}@media (max-width: 480px){.header-content{margin:max(8px,env(safe-area-inset-top)) 8px 8px;padding:8px 12px;max-width:calc(100vw - 16px)}.header-title{font-size:.95rem;line-height:1.15}.header-subtitle{font-size:.72rem}.header-icon{font-size:1.15rem}}@media (max-height: 520px) and (orientation: landscape){.header-content{margin:max(8px,env(safe-area-inset-top)) 8px 8px;padding:8px 12px}.header-title{font-size:1rem}.header-subtitle{font-size:.74rem}}.info-panel{position:absolute;top:80px;right:16px;width:320px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 96px);display:flex;flex-direction:column;background:#fffffffa;-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);border-radius:8px;box-shadow:var(--shadow-lg);z-index:100;overflow:hidden;animation:slideIn .2s ease-out;border:1px solid rgba(226,232,240,.78);will-change:transform}@keyframes slideIn{0%{opacity:0;transform:translate(20px)}to{opacity:1;transform:translate(0)}}.info-panel-handle{display:none}.info-panel-header{flex:0 0 auto;display:flex;justify-content:space-between;align-items:center;padding:12px 16px;border-bottom:1px solid var(--color-border)}.region-type-badge{display:inline-block;padding:4px 12px;border-radius:999px;font-size:.75rem;font-weight:600;color:#fff;text-transform:uppercase;letter-spacing:0}.region-type-badge[data-region-type=country]{background:var(--color-country)}.region-type-badge[data-region-type=distrito]{background:var(--color-distrito)}.region-type-badge[data-region-type=concelho]{background:var(--color-concelho)}.region-type-badge[data-region-type=freguesia]{background:var(--color-freguesia)}.close-button{display:flex;align-items:center;justify-content:center;width:34px;height:34px;border:none;background:var(--color-surface-hover);border-radius:6px;cursor:pointer;color:var(--color-text-secondary);font-size:.875rem;touch-action:manipulation;transition:all .15s ease}.close-button:hover{background:var(--color-border);color:var(--color-text-primary)}.close-button:active{background:var(--color-border);color:var(--color-text-primary);transform:scale(.94)}.info-panel-content{min-height:0;overflow-y:auto;padding:16px;-webkit-overflow-scrolling:touch}.region-name{font-size:1.25rem;font-weight:600;color:var(--color-text-primary);margin:0 0 16px;line-height:1.3}.metadata-status{margin:-6px 0 12px;padding:8px 10px;color:var(--color-text-secondary);background:var(--color-surface-hover);border:1px solid var(--color-border-light);border-radius:6px;font-size:.8rem}.metadata-status-error{color:#7f1d1d;background:#fef2f2;border-color:#fecaca}.region-details{margin:0}.detail-row{display:grid;grid-template-columns:minmax(108px,1fr) minmax(0,auto);align-items:flex-start;column-gap:16px;padding:8px 0;border-bottom:1px solid var(--color-border-light)}.detail-row:last-child{border-bottom:none}.detail-row dt{font-size:.875rem;color:var(--color-text-secondary);font-weight:500}.detail-row dd{margin:0;font-size:.875rem;color:var(--color-text-primary);text-align:right;font-family:var(--font-mono);min-width:0;overflow-wrap:anywhere}.parent-code{color:var(--color-text-tertiary);font-size:.8em}.info-panel-footer{margin-top:16px;padding-top:12px;border-top:1px solid var(--color-border)}.data-note{font-size:.75rem;color:var(--color-text-tertiary);margin:0}@media (prefers-reduced-motion: reduce){.info-panel{animation:none}}@media (max-width: 480px){.info-panel{top:auto;bottom:0;right:0;left:0;width:auto;max-width:none;max-height:min(62dvh,520px);display:flex;flex-direction:column;border-right:none;border-bottom:none;border-left:none;border-radius:8px 8px 0 0;box-shadow:0 -16px 40px #0f172a2e;animation:sheetIn .22s ease-out;transition:transform var(--transition-normal)}.info-panel-dragging{transition:none}.info-panel-handle{flex:0 0 auto;display:flex;align-items:center;justify-content:center;width:100%;height:28px;padding:0;background:#fffffff5;border:none;cursor:grab;touch-action:none}.info-panel-handle:active span{background:#94a3b8;transform:scaleX(1.16)}.info-panel-handle span{display:block;width:44px;height:5px;border-radius:999px;background:#cbd5e1;transition:background var(--transition-fast),transform var(--transition-fast)}.info-panel-header{flex:0 0 auto;padding:8px 16px 10px}.close-button{width:44px;height:44px;font-size:1rem}.region-type-badge{padding:5px 12px;font-size:.72rem}.info-panel-content{flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;padding:14px 18px calc(16px + env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch}.region-name{margin-bottom:12px;font-size:1.35rem}.detail-row{padding:10px 0;grid-template-columns:minmax(112px,1fr) minmax(0,auto);column-gap:14px}.detail-row dt,.detail-row dd{font-size:.9rem}.info-panel-footer{margin-top:12px}}@keyframes sheetIn{0%{opacity:0;transform:translateY(100%)}to{opacity:1;transform:translateY(0)}}@media (max-height: 520px) and (orientation: landscape){.info-panel{top:80px;right:16px;bottom:12px;width:min(320px,calc(100vw - 32px));max-height:calc(100dvh - 92px);display:flex;flex-direction:column}.info-panel-header{flex:0 0 auto;padding:10px 16px}.close-button{width:40px;height:40px}.info-panel-content{flex:1 1 auto;min-height:0;max-height:none;overflow-y:auto;padding:14px 16px;-webkit-overflow-scrolling:touch}.region-name{margin-bottom:10px;font-size:1.15rem}.detail-row{padding:7px 0}.info-panel-footer{margin-top:10px}}.app{display:flex;flex-direction:column;height:100%;min-height:100dvh;width:100%;overflow:hidden}.main-content{position:relative;flex:1;width:100%;height:100%}.map-fallback{position:relative;display:grid;place-items:center;width:100%;height:100%;min-height:280px;overflow:hidden;background:radial-gradient(circle at 50% 38%,rgba(37,99,235,.1),transparent 34%),linear-gradient(180deg,#f8fafc,#edf5f1)}.map-fallback-shape{width:min(54vw,220px);aspect-ratio:.55;border:2px solid rgba(26,95,42,.2);border-radius:58% 42% 48% 52%/44% 46% 54% 56%;background:linear-gradient(135deg,#1a5f2a24,#2563eb1a),#ffffff57;box-shadow:0 22px 70px #0f172a14;transform:rotate(8deg)}.map-fallback-card{position:absolute;top:calc(50% + 98px);left:50%;transform:translate(-50%);display:inline-flex;align-items:center;justify-content:center;gap:9px;min-width:min(252px,calc(100vw - 48px));min-height:44px;padding:10px 14px;color:var(--color-text-secondary);background:#fffffff0;border:1px solid var(--color-border);border-radius:8px;box-shadow:var(--shadow-md);font-size:.875rem;white-space:nowrap}.map-fallback-spinner{width:16px;height:16px;border:2px solid var(--color-border);border-top-color:var(--color-primary);border-radius:999px;animation:spin .8s linear infinite}.map-fallback-dots{display:inline-flex;gap:3px;align-items:center}.map-fallback-dots span{width:4px;height:4px;border-radius:999px;background:var(--color-text-tertiary);animation:pulseDot 1s ease-in-out infinite}.map-fallback-dots span:nth-child(2){animation-delay:.12s}.map-fallback-dots span:nth-child(3){animation-delay:.24s}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulseDot{0%,80%,to{opacity:.28;transform:translateY(0)}40%{opacity:1;transform:translateY(-2px)}}@media (max-width: 480px){.map-fallback{place-items:start center;padding-top:calc(118px + env(safe-area-inset-top))}.map-fallback-card{top:calc(118px + env(safe-area-inset-top) + min(54vw,220px) / .55 + 22px)}}@media (max-height: 520px) and (orientation: landscape){.map-fallback{place-items:center;padding-top:0}.map-fallback-shape{width:min(30vw,150px)}.map-fallback-card{top:auto;bottom:max(18px,env(safe-area-inset-bottom))}}@media (prefers-reduced-motion: reduce){.map-fallback-spinner,.map-fallback-dots span{animation:none}}:root{--color-primary: #2563eb;--color-primary-hover: #1d4ed8;--color-primary-light: #dbeafe;--color-text-primary: #1e293b;--color-text-secondary: #475569;--color-text-tertiary: #94a3b8;--color-background: #f8fafc;--color-surface: #ffffff;--color-surface-hover: #f1f5f9;--color-border: #e2e8f0;--color-border-light: #f1f5f9;--color-country: #1a5f2a;--color-distrito: #2563eb;--color-concelho: #c2410c;--color-freguesia: #0284c7;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;--font-mono: "SF Mono", "Fira Code", "Fira Mono", Menlo, Monaco, monospace;--shadow-sm: 0 1px 2px 0 rgba(0, 0, 0, .05);--shadow-md: 0 4px 6px -1px rgba(0, 0, 0, .1), 0 2px 4px -1px rgba(0, 0, 0, .06);--shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, .1), 0 4px 6px -2px rgba(0, 0, 0, .05);--transition-fast: .15s ease;--transition-normal: .2s ease;--z-map: 0;--z-overlay: 10;--z-panel: 100;--z-header: 200;--z-modal: 300}*,*:before,*:after{box-sizing:border-box}*{margin:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}html,body,#root{height:100%;min-height:100%}body{font-family:var(--font-sans);font-size:16px;line-height:1.5;color:var(--color-text-primary);background-color:var(--color-background);overflow:hidden;overscroll-behavior:none;-webkit-tap-highlight-color:transparent}img,picture,video,canvas,svg{display:block;max-width:100%}input,button,textarea,select{font:inherit}button{-webkit-user-select:none;user-select:none}p,h1,h2,h3,h4,h5,h6{overflow-wrap:break-word}h1,h2,h3,h4,h5,h6{font-weight:600;line-height:1.25;color:var(--color-text-primary)}h1{font-size:1.875rem}h2{font-size:1.5rem}h3{font-size:1.25rem}h4{font-size:1.125rem}p{color:var(--color-text-secondary)}a{color:var(--color-primary);text-decoration:none}a:hover{text-decoration:underline}code,pre{font-family:var(--font-mono)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.text-primary{color:var(--color-text-primary)}.text-secondary{color:var(--color-text-secondary)}.text-tertiary{color:var(--color-text-tertiary)}:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px}button:focus-visible,a:focus-visible{outline:2px solid var(--color-primary);outline-offset:2px;border-radius:4px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-track{background:var(--color-surface-hover)}::-webkit-scrollbar-thumb{background:var(--color-border);border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--color-text-tertiary)}
