:root{color-scheme:light;--admin-bg: #f9f9ff;--surface: #ffffff;--surface-muted: #f4f6fb;--ink: #181c21;--ink-muted: #414752;--ink-soft: #5c5f61;--line: #e0e2ea;--line-strong: #cfd4df;--primary: #1976d2;--primary-strong: #005dac;--success: #2e7d32;--warning: #f9a825;--danger: #c62828;--info: #0277bd;--sidebar-width: 260px;--topbar-height: 64px;font-family:Inter,Segoe UI,Roboto,Arial,sans-serif}*{box-sizing:border-box}html,body{min-height:100%}body{margin:0;background:var(--admin-bg);color:var(--ink);font-family:Inter,Segoe UI,Roboto,Arial,sans-serif;font-size:14px;letter-spacing:0}button,input,select{font:inherit}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid rgba(25,118,210,.28);outline-offset:2px}a{color:var(--primary-strong);text-decoration:none}.btn{align-items:center;border:1px solid transparent;border-radius:8px;cursor:pointer;display:inline-flex;font-weight:700;gap:8px;min-height:40px;padding:0 14px;transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease}.btn:disabled{cursor:not-allowed;opacity:.54}.btn:not(:disabled):active{transform:translateY(1px)}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover{background:var(--primary-strong)}.btn-light{background:#fff;border-color:var(--line);color:var(--ink-muted)}.btn-light:hover{border-color:var(--line-strong);color:var(--ink)}.admin-shell{display:grid;grid-template-columns:var(--sidebar-width) minmax(0,1fr);min-height:100vh}.sidebar{background:#fff;border-right:1px solid var(--line);min-height:100vh;padding:18px 14px;position:sticky;top:0;z-index:30}.sidebar .brand{align-items:center;border-bottom:1px solid var(--line);display:flex;gap:10px;margin-bottom:14px;padding:2px 8px 18px}.sidebar .brand img{border-radius:8px;height:38px;width:38px}.sidebar .brand strong{color:var(--ink);display:block;font-size:20px;line-height:1.15}.sidebar .brand span{color:var(--ink-soft);font-size:12px;font-weight:700;text-transform:uppercase}.sidebar nav{display:grid;gap:4px}.sidebar a{align-items:center;border-radius:8px;color:var(--ink-muted);display:flex;font-weight:700;gap:10px;min-height:42px;padding:0 10px}.sidebar a svg{color:var(--ink-soft);flex:0 0 auto}.sidebar a:hover{background:var(--surface-muted);color:var(--ink)}.sidebar a.active{background:#1976d21a;color:var(--primary-strong)}.sidebar a.active svg{color:var(--primary-strong)}.shell-main{min-width:0}.topbar{align-items:center;background:#fffffff5;border-bottom:1px solid var(--line);display:grid;gap:14px;grid-template-columns:auto minmax(120px,1fr) minmax(220px,360px) auto auto auto auto;height:var(--topbar-height);padding:0 24px;position:sticky;top:0;z-index:20}.topbar h2{font-size:18px;line-height:1.2;margin:0}.topbar select{background:#fff;border:1px solid var(--line);border-radius:8px;color:var(--ink-muted);height:38px;padding:0 10px}.nav-toggle{background:transparent;border:0;color:var(--ink-muted);cursor:pointer;display:none;padding:8px}.global-search,.search-input{align-items:center;background:#fff;border:1px solid var(--line);border-radius:8px;color:var(--ink-soft);display:flex;gap:8px;min-height:40px;padding:0 12px}.global-search input,.search-input input{background:transparent;border:0;color:var(--ink);min-width:0;outline:0;width:100%}.top-icon,.icon-action,.modal-close{align-items:center;background:#fff;border:1px solid var(--line);border-radius:8px;color:var(--ink-muted);cursor:pointer;display:inline-flex;height:38px;justify-content:center;position:relative;width:38px}.top-icon:hover,.icon-action:hover,.modal-close:hover{border-color:var(--line-strong);color:var(--ink)}.top-icon span{background:var(--danger);border-radius:999px;height:8px;position:absolute;right:9px;top:8px;width:8px}.profile{align-items:center;background:var(--primary);border-radius:999px;color:#fff;display:inline-flex;font-size:12px;font-weight:800;height:36px;justify-content:center;width:36px}main{display:grid;gap:22px;margin:0 auto;max-width:1180px;padding:28px 28px 40px}.page-header{align-items:flex-start;display:flex;gap:18px;justify-content:space-between}.page-header h1{font-size:36px;line-height:1.08;margin:0 0 8px}.page-header p{color:var(--ink-soft);font-size:15px;line-height:1.45;margin:0;max-width:720px}.page-header .eyebrow{color:var(--primary-strong);font-size:12px;font-weight:800;margin:0 0 8px;text-transform:uppercase}.page-actions{align-items:center;display:flex;flex:0 0 auto;gap:10px}.kpi-grid{display:grid;gap:14px;grid-template-columns:repeat(4,minmax(0,1fr))}.dashboard-kpis{grid-template-columns:repeat(4,minmax(0,1fr))}.kpi-card,.panel,.table-card,.login-panel{background:var(--surface);border:1px solid var(--line);border-radius:8px}.kpi-card{display:grid;gap:12px;min-height:128px;padding:18px}.kpi-card strong{font-size:28px;line-height:1}.kpi-card small,.kpi-card span{color:var(--ink-soft)}.kpi-card small.good{color:var(--success)}.kpi-card small.bad{color:var(--danger)}.kpi-top{align-items:center;display:flex;justify-content:space-between}.kpi-top>span{font-size:12px;font-weight:800;text-transform:uppercase}.kpi-icon{align-items:center;background:#1976d21a;border-radius:8px;color:var(--primary-strong);display:inline-flex;height:34px;justify-content:center;width:34px}.chart-grid{display:grid;gap:16px;grid-template-columns:minmax(0,1.45fr) minmax(320px,.8fr)}.panel{padding:20px}.panel h2{font-size:20px;line-height:1.2;margin:0}.panel-heading{align-items:flex-start;display:flex;gap:12px;justify-content:space-between;margin-bottom:18px}.panel-heading span{color:var(--ink-soft);font-size:13px}.bar-chart{align-items:end;display:grid;gap:10px;grid-template-columns:repeat(14,minmax(22px,1fr));height:230px;padding-top:12px}.bar-chart div{align-items:center;display:grid;gap:8px;grid-template-rows:minmax(30px,1fr) auto;height:100%}.bar-chart span{align-self:end;background:linear-gradient(180deg,var(--primary),var(--primary-strong));border-radius:7px 7px 3px 3px;display:block;min-height:10px;width:100%;height:var(--value)}.bar-chart small{color:var(--ink-soft);font-size:11px;text-align:center}.donut{align-items:center;aspect-ratio:1;background:radial-gradient(circle at center,#ffffff 0 56%,transparent 57%),conic-gradient(var(--warning) 0 var(--pending),var(--success) var(--pending) 100%);border-radius:999px;display:flex;flex-direction:column;justify-content:center;margin:8px auto 18px;max-width:210px}.donut strong{font-size:34px}.donut span{color:var(--ink-soft);font-weight:700}.legend-row{display:flex;flex-wrap:wrap;gap:14px;justify-content:center}.legend-row span{align-items:center;color:var(--ink-muted);display:inline-flex;gap:6px}.legend-row i{border-radius:999px;display:inline-block;height:10px;width:10px}.legend-row .legend-ok{background:var(--success)}.legend-row .legend-alert{background:var(--warning)}.attention-panel{display:grid;gap:12px}.attention-item{border-left:4px solid var(--line-strong);border-radius:8px;padding:14px 16px}.attention-item strong{display:block;margin-bottom:4px}.attention-item p{color:var(--ink-soft);margin:0}.attention-item.danger{background:#c6282814;border-color:var(--danger)}.attention-item.warning{background:#f9a8251f;border-color:var(--warning)}.attention-item.success{background:#2e7d3214;border-color:var(--success)}.filter-bar{align-items:center;display:grid;gap:10px;grid-template-columns:minmax(240px,1fr) auto}.table-card{overflow:hidden}.table-wrap{overflow-x:auto}table{border-collapse:collapse;min-width:920px;width:100%}table th,table td{border-bottom:1px solid var(--line);padding:13px 16px;text-align:left;vertical-align:middle;white-space:nowrap}table th{background:#fbfcff;color:var(--ink-soft);font-size:12px;font-weight:800;text-transform:uppercase}table td{color:var(--ink-muted)}table tbody tr:hover{background:#fbfcff}.legal-page{color:var(--ink);margin:0 auto;max-width:860px;padding:40px 24px 64px}.legal-page header{align-items:center;border-bottom:1px solid var(--line);display:flex;gap:16px;margin-bottom:28px;padding-bottom:24px}.legal-page header img{border-radius:12px;height:64px;width:64px}.legal-page header p{color:var(--ink-soft);font-size:13px;font-weight:800;margin:0 0 4px;text-transform:uppercase}.legal-page header h1{font-size:34px;line-height:1.1;margin:0}.legal-page section{display:grid;gap:14px}.legal-page h2{font-size:18px;margin:18px 0 0}.legal-page p,.legal-page li{color:var(--ink-muted);font-size:16px;line-height:1.65}.legal-page a{color:var(--primary);font-weight:800}.legal-page .legal-updated{color:var(--ink-soft);font-size:13px;margin-top:20px}.status-badge{align-items:center;background:#eef1f6;border-radius:999px;color:var(--ink-muted);display:inline-flex;font-size:12px;font-weight:800;min-height:26px;padding:0 10px}.status-badge.success{background:#2e7d321a;color:var(--success)}.status-badge.info{background:#0277bd1a;color:var(--info)}.status-badge.warning{background:#f9a82529;color:#8a5d00}.status-badge.danger{background:#c628281a;color:var(--danger)}.pagination{align-items:center;display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}.pagination span{color:var(--ink-soft);margin-right:auto}.empty-state,.error-state{align-items:center;color:var(--ink-soft);display:grid;justify-items:center;min-height:190px;padding:28px;text-align:center}.empty-state h3,.error-state h3{color:var(--ink);margin:10px 0 4px}.empty-state p,.error-state p{margin:0}.error-state{align-items:center;background:#c6282814;border:1px solid rgba(198,40,40,.18);border-radius:8px;color:var(--danger);display:flex;justify-content:flex-start;min-height:56px;text-align:left}.skeleton-grid{display:grid;gap:14px;grid-template-columns:repeat(4,minmax(0,1fr))}.skeleton-grid span{animation:pulse 1.25s ease-in-out infinite;background:linear-gradient(90deg,#eef1f6,#f7f8fc 46%,#eef1f6);border-radius:8px;height:124px}@keyframes pulse{0%{opacity:.65}50%{opacity:1}to{opacity:.65}}.detail-hero{align-items:center;display:flex;gap:20px;justify-content:space-between}.detail-hero h2{font-size:24px;margin:10px 0 4px}.detail-hero p{color:var(--ink-soft);margin:0}.detail-meta{display:grid;gap:6px;min-width:240px;text-align:right}.detail-meta span{color:var(--ink-soft);font-size:12px;font-weight:800;text-transform:uppercase}.detail-meta code{background:var(--surface-muted);border-radius:8px;color:var(--ink-muted);overflow-wrap:anywhere;padding:10px}.tabs-panel{display:grid;gap:16px}.tabs{border-bottom:1px solid var(--line);display:flex;gap:4px;overflow-x:auto}.tabs button{background:transparent;border:0;border-bottom:3px solid transparent;color:var(--ink-soft);cursor:pointer;font-weight:800;padding:12px 16px;white-space:nowrap}.tabs button.active{border-color:var(--primary);color:var(--primary-strong)}.settings-grid{display:grid;gap:16px;grid-template-columns:repeat(2,minmax(0,1fr))}.admin-form,.admin-actions{display:grid;gap:16px}.admin-form h2,.admin-actions h2{font-size:18px}.form-grid{display:grid;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}.form-grid.compact{align-items:end;grid-template-columns:minmax(220px,1fr) auto auto auto}.form-grid label{color:var(--ink-muted);display:grid;font-weight:800;gap:7px}.form-grid input,.form-grid select{background:#fff;border:1px solid var(--line);border-radius:8px;color:var(--ink);min-height:40px;padding:0 10px}.form-grid .check-row{align-items:center;display:flex;gap:8px;min-height:40px}.form-grid .check-row input{min-height:auto;width:auto}.form-actions{display:flex;flex-wrap:wrap;gap:10px}.action-message{background:#1976d214;border:1px solid rgba(25,118,210,.18);border-radius:8px;color:var(--primary-strong);font-weight:800;margin:0;padding:12px 14px}.settings-list,.photo-meta dl{display:grid;gap:12px}.settings-list div,.photo-meta dl div{align-items:start;border-bottom:1px solid var(--line);display:grid;gap:10px;grid-template-columns:minmax(120px,.42fr) minmax(0,1fr);padding-bottom:12px}.settings-list dt,.photo-meta dl dt{color:var(--ink-soft);font-size:12px;font-weight:800;text-transform:uppercase}.settings-list dd,.photo-meta dl dd{color:var(--ink-muted);margin:0;overflow-wrap:anywhere}.modal-backdrop{align-items:center;background:#181c2194;display:flex;inset:0;justify-content:center;padding:24px;position:fixed;z-index:60}.photo-modal{background:#fff;border-radius:8px;display:grid;gap:20px;grid-template-columns:minmax(300px,.95fr) minmax(300px,.75fr);max-height:min(760px,100vh - 48px);max-width:1040px;overflow:auto;padding:20px;position:relative;width:min(100%,1040px)}.modal-close{height:34px;padding:0 12px;position:absolute;right:16px;top:16px;width:auto}.photo-stage{align-items:center;aspect-ratio:4/3;background:linear-gradient(135deg,#1976d22e,#2e7d321f),#eef1f6;border-radius:8px;color:var(--primary-strong);display:flex;font-size:64px;font-weight:900;justify-content:center;min-height:300px;overflow:hidden}.photo-stage img{height:100%;object-fit:contain;width:100%}.photo-stage.has-image span{display:none}.photo-meta{padding-right:20px}.photo-meta h2{font-size:22px;margin:0 0 12px;padding-right:78px;overflow-wrap:anywhere}.photo-meta p{color:var(--ink-muted);line-height:1.55}.login-screen{align-items:center;background:linear-gradient(180deg,#f9f9fff0,#f9f9fffa),url(/icon-512.png) center/220px no-repeat;display:flex;justify-content:center;min-height:100vh;padding:24px}.login-panel{display:grid;gap:16px;max-width:420px;padding:30px;width:100%}.login-panel .brand-mark{align-items:center;background:transparent;border-radius:8px;display:inline-flex;height:56px;justify-content:center;overflow:hidden;width:56px}.login-panel .brand-mark img{display:block;height:56px;width:56px}.login-panel h1{font-size:28px;line-height:1.15;margin:0}.login-panel p{color:var(--ink-soft);margin:0}.login-panel label{color:var(--ink-muted);display:grid;font-weight:800;gap:8px}.login-panel .google-login-slot{display:flex;min-height:44px}.login-panel .login-divider{align-items:center;color:var(--ink-soft);display:grid;font-size:12px;font-weight:800;gap:10px;grid-template-columns:1fr auto 1fr;text-transform:uppercase}.login-panel .login-divider:before,.login-panel .login-divider:after{background:var(--line);content:"";height:1px}.login-panel input{border:1px solid var(--line);border-radius:8px;color:var(--ink);min-height:42px;padding:0 12px}.login-panel .error-copy{color:var(--danger);font-weight:700}.portal-shell,.portal-login-screen,.portal-page,.portal-map-page{--portal-green-900: #00342b;--portal-green-800: #004d40;--portal-green-300: #7ebdac;--portal-mint: #afefdd;--portal-bg: #fdf9f2;--portal-sidebar-bg: #f2ede7;--portal-surface: #ffffff;--portal-surface-alt: #f7f3ec;--portal-border: #bfc9c4;--portal-text: #1c1c18;--portal-muted: #3f4945;--portal-gold: #d8a84f;--portal-danger: #b23b32;--portal-shadow: 0 18px 48px rgba(0, 52, 43, .12);color:var(--portal-text);font-family:Inter,Segoe UI,Roboto,Arial,sans-serif}.portal-primary,.portal-secondary,.portal-danger{align-items:center;border-radius:10px;cursor:pointer;display:inline-flex;font-weight:800;gap:8px;justify-content:center;min-height:42px;padding:0 16px;text-decoration:none;transition:background .16s ease,border-color .16s ease,color .16s ease,transform .16s ease}.portal-primary:disabled,.portal-secondary:disabled,.portal-danger:disabled{cursor:not-allowed;opacity:.58}.portal-primary:not(:disabled):active,.portal-secondary:not(:disabled):active,.portal-danger:not(:disabled):active{transform:translateY(1px)}.portal-primary{background:var(--portal-green-800);border:1px solid var(--portal-green-800);color:#fff}.portal-primary:hover{background:var(--portal-green-900);border-color:var(--portal-green-900)}.portal-secondary{background:#ffffffb3;border:1px solid var(--portal-border);color:var(--portal-green-900)}.portal-secondary:hover{background:#fff;border-color:var(--portal-green-300)}.portal-danger{background:#b23b321a;border:1px solid rgba(178,59,50,.28);color:var(--portal-danger)}.portal-danger:hover{background:#b23b3229}.portal-login-screen{align-items:center;background:linear-gradient(90deg,#00342bdb,#004d4094),radial-gradient(circle at 82% 18%,rgba(126,189,172,.34),transparent 28%),var(--portal-bg);display:grid;grid-template-rows:auto 1fr auto;min-height:100vh;padding:24px}.portal-login-screen.compact{grid-template-rows:1fr}.portal-login-screen footer{color:#ffffffd6;font-weight:700;text-align:center}.portal-login-topbar{align-self:start}.portal-login-topbar a{color:#fff;font-size:22px;font-weight:900}.portal-login-panel{align-self:center;background:#fdf9f2fa;border:1px solid rgba(255,255,255,.42);border-radius:16px;box-shadow:var(--portal-shadow);display:grid;gap:22px;justify-self:end;margin-right:min(8vw,120px);max-width:460px;padding:34px;width:min(100%,460px)}.portal-login-panel form,.portal-login-panel label{display:grid;gap:9px}.portal-login-panel label{color:var(--portal-muted);font-weight:800}.login-title-block{display:grid;gap:8px}.login-title-block h1{color:var(--portal-green-900);font-size:34px;line-height:1.08;margin:0}.login-title-block p{color:var(--portal-muted);font-size:15px;line-height:1.5;margin:0}.portal-field{align-items:center;background:#fff;border:1px solid var(--portal-border);border-radius:12px;display:grid;gap:8px;grid-template-columns:auto minmax(0,1fr) auto;min-height:48px;padding:0 12px}.portal-field svg{color:var(--portal-muted)}.portal-field input{background:transparent;border:0;color:var(--portal-text);min-width:0;outline:0}.password-toggle{align-items:center;background:transparent;border:0;color:var(--portal-muted);cursor:pointer;display:inline-flex;justify-content:center;padding:6px}.forgot-link{color:var(--portal-green-800);font-weight:800;justify-self:end}.portal-login-submit{align-items:center;background:var(--portal-green-900);border:0;border-radius:12px;color:#fff;cursor:pointer;display:inline-flex;font-weight:900;justify-content:center;min-height:50px;padding:0 18px}.portal-login-submit.as-link{text-decoration:none}.portal-login-submit:disabled{cursor:not-allowed;opacity:.56}.portal-form-error{background:#b23b321a;border:1px solid rgba(178,59,50,.22);border-radius:10px;color:var(--portal-danger);font-weight:800;margin:0;padding:12px 14px}.portal-divider{align-items:center;color:var(--portal-muted);display:grid;font-size:12px;font-weight:900;gap:10px;grid-template-columns:1fr auto 1fr}.portal-divider:before,.portal-divider:after{background:var(--portal-border);content:"";height:1px}.portal-google-slot{min-height:44px}.portal-shell{background:var(--portal-bg);display:grid;grid-template-columns:256px minmax(0,1fr);min-height:100vh}.portal-sidebar{background:var(--portal-sidebar-bg);border-right:1px solid rgba(191,201,196,.86);display:grid;grid-template-rows:auto auto 1fr auto;min-height:100vh;padding:20px 16px;position:sticky;top:0;z-index:35}.portal-brand{align-items:center;color:var(--portal-green-900);display:flex;gap:12px;margin-bottom:18px}.portal-brand img{border-radius:13px;height:44px;width:44px}.portal-brand strong{display:block;font-size:22px;line-height:1.1}.portal-brand small{color:var(--portal-muted);font-size:12px;font-weight:800}.portal-upload-button{align-items:center;background:var(--portal-green-900);border:0;border-radius:12px;color:#fff;cursor:pointer;display:inline-flex;font-weight:900;gap:8px;justify-content:center;margin-bottom:16px;min-height:44px}.portal-nav,.portal-sidebar-footer{display:grid;gap:6px}.portal-nav a,.portal-nav button,.portal-sidebar-footer a,.portal-sidebar-footer button{align-items:center;background:transparent;border:0;border-radius:10px;color:var(--portal-muted);cursor:pointer;display:flex;font:inherit;font-weight:800;gap:10px;min-height:42px;padding:0 12px;text-align:left}.portal-nav a:hover,.portal-nav button:hover,.portal-sidebar-footer a:hover,.portal-sidebar-footer button:hover{background:#ffffffb8;color:var(--portal-green-900)}.portal-nav a.active,.portal-nav button.active,.portal-sidebar-footer a.active,.portal-sidebar-footer button.active{background:#fff;box-shadow:0 10px 26px #00342b14;color:var(--portal-green-900)}.portal-sidebar-footer{border-top:1px solid rgba(191,201,196,.8);padding-top:14px}.portal-body{min-width:0}.portal-topbar{align-items:center;background:#fdf9f2eb;border-bottom:1px solid rgba(191,201,196,.72);display:grid;gap:14px;grid-template-columns:auto minmax(220px,1fr) auto auto auto auto auto;min-height:64px;padding:0 24px;position:sticky;top:0;z-index:30}.portal-menu{background:transparent;border:0;cursor:pointer;display:none;gap:4px;padding:8px}.portal-menu span{background:var(--portal-green-900);border-radius:999px;display:block;height:2px;width:20px}.portal-search{align-items:center;background:#fff;border:1px solid var(--portal-border);border-radius:12px;display:grid;gap:8px;grid-template-columns:auto minmax(0,1fr);min-height:42px;padding:0 12px}.portal-search input{background:transparent;border:0;color:var(--portal-text);min-width:0;outline:0}.portal-topnav{align-items:center;display:flex;gap:4px}.portal-topnav a{border-radius:999px;color:var(--portal-muted);font-weight:800;padding:9px 12px;white-space:nowrap}.portal-topnav a:hover,.portal-topnav a.active{background:#7ebdac38;color:var(--portal-green-900)}.portal-new-button,.portal-icon-button,.portal-avatar{align-items:center;border:1px solid var(--portal-border);border-radius:999px;cursor:pointer;display:inline-flex;justify-content:center}.portal-new-button{background:var(--portal-green-800);color:#fff;font-weight:900;gap:7px;min-height:40px;padding:0 14px}.portal-icon-button{background:#fff;color:var(--portal-muted);height:40px;width:40px}.portal-avatar{background:var(--portal-green-900);color:#fff;font-weight:900;height:40px;overflow:hidden;width:40px}.portal-avatar img{height:100%;object-fit:cover;width:100%}.portal-search-popover{background:#fff;border:1px solid var(--portal-border);border-radius:14px;box-shadow:var(--portal-shadow);display:grid;gap:12px;max-height:min(540px,100vh - 82px);overflow:auto;padding:16px;position:absolute;right:128px;top:58px;width:min(560px,100vw - 32px)}.portal-search-popover h3{color:var(--portal-green-900);font-size:13px;margin:0 0 8px;text-transform:uppercase}.portal-search-popover button:not(.popover-close){background:var(--portal-surface-alt);border:1px solid transparent;border-radius:10px;cursor:pointer;display:grid;gap:4px;margin-bottom:6px;padding:10px 12px;text-align:left;width:100%}.portal-search-popover button:not(.popover-close):hover{border-color:var(--portal-green-300)}.portal-search-popover strong,.portal-search-popover span{overflow-wrap:anywhere}.popover-close{background:transparent;border:0;color:var(--portal-green-800);cursor:pointer;font-weight:900;justify-self:end}.portal-page{background:var(--portal-bg);display:grid;gap:22px;margin:0;max-width:none;min-height:calc(100vh - 64px);padding:30px;width:100%}.portal-page-header,.project-detail-hero,.collection-header{align-items:flex-start;display:flex;gap:18px;justify-content:space-between}.portal-page-header h1,.project-detail-hero h1,.collection-header h1{color:var(--portal-green-900);font-size:34px;line-height:1.08;margin:0 0 8px}.portal-page-header p,.project-detail-hero p,.collection-header p{color:var(--portal-muted);font-size:15px;line-height:1.5;margin:0;max-width:760px}.portal-page-header>span,.project-detail-hero>span,.collection-header>span{color:var(--portal-muted);font-size:12px;font-weight:900;text-transform:uppercase}.project-detail-hero>div:last-child,.collection-header>div:last-child{align-items:center;display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}.collection-header nav{color:var(--portal-muted);font-weight:800;margin-bottom:8px}.collection-header nav a{color:var(--portal-green-800)}.collection-header div div{display:flex;flex-wrap:wrap;gap:10px}.collection-header div div span{background:#7ebdac2e;border:1px solid rgba(126,189,172,.32);border-radius:999px;color:var(--portal-green-900);font-size:12px;font-weight:900;padding:6px 10px}.portal-summary-grid,.project-card-grid,.collection-card-grid,.portal-skeleton-grid{display:grid;gap:16px}.portal-summary-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.portal-summary-grid article{background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:16px;box-shadow:0 10px 28px #00342b0f;display:grid;gap:12px;min-height:154px;padding:20px}.portal-summary-grid div{align-items:center;display:flex;justify-content:space-between}.portal-summary-grid svg{color:var(--portal-green-800)}.portal-summary-grid small{color:var(--portal-muted);font-weight:800}.portal-summary-grid span{color:var(--portal-muted);font-size:12px;font-weight:900;text-transform:uppercase}.portal-summary-grid strong{color:var(--portal-green-900);font-size:30px;line-height:1.1}.portal-summary-grid em{color:var(--portal-muted);display:block;font-size:13px;font-style:normal;margin-top:4px}.portal-summary-grid p{color:var(--portal-muted);margin:0}.storage-meter{background:var(--portal-surface-alt);border-radius:999px;height:10px;overflow:hidden}.storage-meter i{background:linear-gradient(90deg,var(--portal-green-300),var(--portal-green-800));border-radius:inherit;display:block;height:100%}.portal-upload-banner{align-items:center;background:linear-gradient(90deg,#00342bf0,#004d40d6),var(--portal-green-900);border-radius:16px;color:#fff;display:flex;gap:18px;justify-content:space-between;padding:22px}.portal-upload-banner h2{font-size:24px;margin:0 0 6px}.portal-upload-banner p{color:#ffffffd1;margin:0}.portal-upload-banner .portal-primary{background:#fff;border-color:#fff;color:var(--portal-green-900)}.portal-section-heading{align-items:center;display:flex;gap:12px;justify-content:space-between}.portal-section-heading h2{color:var(--portal-green-900);font-size:22px;margin:0}.portal-section-heading a{color:var(--portal-green-800);font-weight:900}.portal-section-heading select{background:#fff;border:1px solid var(--portal-border);border-radius:10px;color:var(--portal-text);min-height:40px;padding:0 12px}.project-card-grid,.collection-card-grid{grid-template-columns:repeat(auto-fill,minmax(280px,1fr))}.project-card,.collection-card,.collection-list article{background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:16px;box-shadow:0 10px 28px #00342b0f;color:var(--portal-text);overflow:hidden;position:relative}.project-card,.collection-card{display:grid}.project-card>a,.collection-card>a{color:inherit}.project-card>div:not(.photo-mosaic),.collection-card>div:not(.photo-mosaic){display:grid;gap:10px;padding:16px}.project-card header,.project-card footer,.collection-card header,.collection-card footer{align-items:center;display:flex;flex-wrap:wrap;gap:8px;justify-content:space-between}.project-card h3,.collection-card h3{color:var(--portal-green-900);font-size:18px;line-height:1.22;margin:0;overflow-wrap:anywhere}.project-card p,.collection-card p{color:var(--portal-muted);line-height:1.5;margin:0;min-height:44px}.project-card footer span,.collection-card footer span{color:var(--portal-muted);font-size:12px;font-weight:800}.project-card footer button,.collection-card footer button{background:transparent;border:1px solid var(--portal-border);border-radius:999px;color:var(--portal-muted);cursor:pointer;height:34px;width:34px}.photo-mosaic{aspect-ratio:16/10;background:var(--portal-surface-alt);display:grid;gap:3px;grid-template-columns:1.5fr 1fr;min-height:150px;overflow:hidden}.photo-mosaic.compact{aspect-ratio:4/3;min-height:112px}.photo-mosaic div:first-child{grid-row:span 2}.photo-mosaic div{align-items:center;background:linear-gradient(135deg,#7ebdac3d,#d8a84f33);display:flex;justify-content:center;min-width:0;overflow:hidden}.photo-mosaic img{height:100%;object-fit:cover;width:100%}.photo-mosaic span{color:var(--portal-green-900);font-weight:900}.portal-skeleton-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.portal-skeleton-grid span{animation:pulse 1.25s ease-in-out infinite;background:linear-gradient(90deg,#ede7dd,#f8f3ea 48%,#ede7dd);border-radius:16px;height:170px}.portal-filter-row{align-items:center;background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:14px;display:flex;flex-wrap:wrap;gap:10px;padding:12px}.portal-filter-row span{color:var(--portal-muted);font-weight:900}.portal-filter-row button{background:var(--portal-surface-alt);border:1px solid transparent;border-radius:999px;color:var(--portal-muted);cursor:pointer;font-weight:900;min-height:36px;padding:0 13px}.portal-filter-row button.active,.portal-filter-row button:hover{background:#7ebdac3d;border-color:#7ebdac70;color:var(--portal-green-900)}.portal-filter-row label{flex:1 1 260px}.portal-filter-row input,.portal-filter-row select{background:#fff;border:1px solid var(--portal-border);border-radius:10px;color:var(--portal-text);min-height:40px;padding:0 12px;width:100%}.context-menu{background:#fff;border:1px solid var(--portal-border);border-radius:12px;box-shadow:var(--portal-shadow);display:grid;min-width:190px;padding:8px;position:absolute;right:12px;top:214px;z-index:4}.context-menu button{background:transparent;border:0;border-radius:8px;color:var(--portal-text);cursor:pointer;font:inherit;font-weight:800;padding:10px;text-align:left}.context-menu button:hover{background:var(--portal-surface-alt)}.context-menu button.danger{color:var(--portal-danger)}.portal-form{background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:16px;display:grid;gap:16px;max-width:860px;padding:22px}.portal-form label{color:var(--portal-muted);display:grid;font-weight:900;gap:8px}.portal-form input,.portal-form textarea,.portal-form select{background:var(--portal-bg);border:1px solid var(--portal-border);border-radius:10px;color:var(--portal-text);min-height:42px;padding:10px 12px;resize:vertical;width:100%}.portal-form h2{color:var(--portal-green-900);font-size:22px;margin:0}.portal-form p{color:var(--portal-muted);line-height:1.55;margin:0}.portal-form .action-message{background:#afefdd5c;border-color:#004d402e;color:var(--portal-green-900)}.form-two{display:grid;gap:14px;grid-template-columns:repeat(2,minmax(0,1fr))}.portal-check-grid{display:grid;gap:10px;grid-template-columns:repeat(3,minmax(0,1fr))}.portal-check-grid label{align-items:center;background:var(--portal-surface-alt);border:1px solid transparent;border-radius:10px;display:flex;min-height:44px;padding:0 12px}.portal-check-grid input{width:auto}.form-actions{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}.collection-list{display:grid;gap:14px}.collection-list article{align-items:center;cursor:pointer;display:grid;gap:16px;grid-template-columns:180px minmax(0,1fr);padding:12px}.collection-list h3{color:var(--portal-green-900);font-size:19px;margin:0 0 6px}.collection-list p{color:var(--portal-muted);line-height:1.5;margin:0 0 12px}.collection-list footer{display:flex;flex-wrap:wrap;gap:10px}.collection-list footer span{color:var(--portal-muted);font-size:12px;font-weight:800}.collection-workspace{gap:18px}.collection-tools{align-items:center;background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:14px;display:grid;gap:10px;grid-template-columns:auto minmax(220px,1fr) auto auto;padding:12px}.collection-tools h2{color:var(--portal-green-900);font-size:18px;margin:0}.collection-tools input{background:var(--portal-bg);border:1px solid var(--portal-border);border-radius:10px;min-height:40px;padding:0 12px;width:100%}.collection-tools button{background:var(--portal-surface-alt);border:1px solid var(--portal-border);border-radius:10px;color:var(--portal-muted);cursor:pointer;height:40px;width:40px}.collection-tools button.active{background:var(--portal-green-900);color:#fff}.collection-main{display:grid;gap:18px;grid-template-columns:minmax(360px,1.02fr) minmax(360px,.98fr);min-height:580px}.photo-list-panel{background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:16px;display:grid;gap:8px;max-height:calc(100vh - 292px);min-height:420px;overflow:auto;padding:12px}.photo-list-panel.grid-mode{align-content:start;grid-template-columns:repeat(auto-fill,minmax(150px,1fr))}.photo-list-panel.grid-mode .photo-row{align-content:start;grid-template-columns:1fr;min-height:220px;text-align:left}.photo-list-panel.grid-mode .photo-row img,.photo-list-panel.grid-mode .photo-row .photo-placeholder{height:132px;width:100%}.photo-row{align-items:center;background:var(--portal-surface-alt);border:1px solid transparent;border-radius:12px;color:var(--portal-text);cursor:pointer;display:grid;gap:10px;grid-template-columns:72px minmax(0,1fr) auto auto auto;min-height:86px;padding:8px;text-align:left}.photo-row:hover,.photo-row.selected{border-color:var(--portal-green-300);box-shadow:0 8px 22px #00342b14}.photo-row img,.photo-row .photo-placeholder{background:#7ebdac38;border-radius:10px;height:68px;object-fit:cover;width:72px}.photo-row .photo-placeholder{align-items:center;color:var(--portal-green-900);display:flex;font-weight:900;justify-content:center}.photo-row strong{overflow-wrap:anywhere}.photo-row small{color:var(--portal-muted);font-weight:700}.photo-row i{background:#afefddb8;border-radius:999px;color:var(--portal-green-900);font-size:11px;font-style:normal;font-weight:900;padding:5px 8px}.collection-map-panel{background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:16px;display:grid;grid-template-rows:auto minmax(360px,1fr) auto;overflow:hidden}.collection-map-panel header{align-items:center;display:flex;justify-content:space-between;padding:14px}.collection-map-panel header h2{color:var(--portal-green-900);font-size:18px;margin:0}.collection-map-panel header button{background:var(--portal-surface-alt);border:1px solid var(--portal-border);border-radius:999px;color:var(--portal-green-900);cursor:pointer;font-weight:900;min-height:34px;padding:0 12px}.collection-map-panel p{color:var(--portal-muted);margin:0;padding:12px 14px}.portal-map-canvas{background:var(--portal-surface-alt);height:100%;min-height:360px;width:100%}.photo-pin{background:transparent;border:0}.photo-pin .pin-card{align-items:center;background:#fff;border:3px solid var(--portal-green-900);border-radius:14px;box-shadow:0 12px 28px #00342b3d;display:flex;height:58px;justify-content:center;overflow:hidden;width:58px}.photo-pin .pin-card.is-selected{border-color:var(--portal-gold)}.photo-pin img{height:100%;object-fit:cover;width:100%}.photo-pin .pin-placeholder{color:var(--portal-green-900);font-weight:900}.photo-pin .pin-pointer{border-left:8px solid transparent;border-right:8px solid transparent;border-top:12px solid var(--portal-green-900);display:block;height:0;margin:-1px auto 0;width:0}.photo-pin .pin-cluster{align-items:center;background:var(--portal-green-900);border:3px solid #ffffff;border-radius:999px;box-shadow:0 10px 26px #00342b38;color:#fff;display:flex;font-weight:900;height:46px;justify-content:center;width:46px}.portal-map-page{background:var(--portal-bg);display:grid;grid-template-columns:minmax(320px,380px) minmax(0,1fr);height:calc(100vh - 64px);margin:0;max-width:none;padding:0;width:100%}.portal-map-page>.portal-map-canvas{min-height:calc(100vh - 64px)}.map-side-panel{background:#fdf9f2fa;border-right:1px solid var(--portal-border);display:grid;grid-template-rows:auto auto minmax(0,1fr);min-width:0;overflow:hidden;padding:18px;z-index:5}.map-side-panel.collapsed{grid-template-rows:auto}.map-side-panel.collapsed .portal-filter-column,.map-side-panel.collapsed .visible-photo-list{display:none}.map-side-panel header{align-items:flex-start;display:flex;gap:12px;justify-content:space-between}.map-side-panel header h1{color:var(--portal-green-900);font-size:28px;line-height:1.1;margin:0 0 6px}.map-side-panel header p{color:var(--portal-muted);margin:0}.map-side-panel header button{background:#fff;border:1px solid var(--portal-border);border-radius:999px;color:var(--portal-green-900);cursor:pointer;font-weight:900;min-height:34px;padding:0 12px}.portal-filter-column{display:grid;gap:10px;padding:16px 0}.portal-filter-column input,.portal-filter-column select,.portal-filter-column button{border:1px solid var(--portal-border);border-radius:10px;color:var(--portal-text);min-height:40px;padding:0 12px;width:100%}.portal-filter-column button{background:var(--portal-green-800);color:#fff;cursor:pointer;font-weight:900}.visible-photo-list{display:grid;gap:8px;overflow:auto}.visible-photo-list button{align-items:center;background:#fff;border:1px solid rgba(191,201,196,.76);border-radius:12px;cursor:pointer;display:grid;gap:10px;grid-template-columns:54px minmax(0,1fr);min-height:66px;padding:6px;text-align:left}.visible-photo-list button:hover{border-color:var(--portal-green-300)}.visible-photo-list img{border-radius:9px;height:54px;object-fit:cover;width:54px}.visible-photo-list strong,.visible-photo-list small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.visible-photo-list small{color:var(--portal-muted)}.drawer-backdrop{background:#1c1c186b;inset:0;position:fixed;z-index:70}.photo-drawer{background:#fff;box-shadow:-18px 0 48px #00342b38;display:grid;gap:16px;height:100vh;max-width:min(560px,100vw);overflow:auto;padding:20px;position:fixed;right:0;top:0;width:560px;z-index:71}.photo-drawer h2{color:var(--portal-green-900);font-size:22px;margin:0;overflow-wrap:anywhere}.drawer-close{align-items:center;background:#fff;border:1px solid var(--portal-border);border-radius:999px;color:var(--portal-muted);cursor:pointer;display:inline-flex;height:38px;justify-content:center;justify-self:end;width:38px;z-index:2}.photo-viewer{align-items:center;background:var(--portal-surface-alt);border-radius:16px;display:flex;justify-content:center;min-height:320px;overflow:auto}.photo-viewer img{max-height:68vh;max-width:100%;object-fit:contain}.photo-viewer.zoomed img{max-height:none;max-width:none;width:140%}.photo-actions{display:flex;flex-wrap:wrap;gap:8px}.photo-actions button{align-items:center;background:var(--portal-surface-alt);border:1px solid var(--portal-border);border-radius:999px;color:var(--portal-green-900);cursor:pointer;display:inline-flex;font-weight:900;gap:6px;min-height:36px;padding:0 12px}.photo-edit-form{display:grid;gap:12px}.photo-edit-form label{color:var(--portal-muted);display:grid;font-weight:900;gap:7px}.photo-edit-form input,.photo-edit-form textarea{background:var(--portal-bg);border:1px solid var(--portal-border);border-radius:10px;color:var(--portal-text);min-height:40px;padding:10px 12px;resize:vertical;width:100%}.photo-meta-grid{display:grid;gap:10px}.photo-meta-grid div{border-bottom:1px solid rgba(191,201,196,.72);display:grid;gap:8px;grid-template-columns:130px minmax(0,1fr);padding-bottom:10px}.photo-meta-grid dt{color:var(--portal-muted);font-size:12px;font-weight:900;text-transform:uppercase}.photo-meta-grid dd{color:var(--portal-text);margin:0;overflow-wrap:anywhere}.upload-backdrop{z-index:80}.upload-dialog{background:#fff;border-radius:16px;box-shadow:var(--portal-shadow);display:grid;gap:16px;max-height:min(860px,100vh - 36px);max-width:1040px;overflow:auto;padding:22px;position:relative;width:min(100%,1040px)}.upload-dialog header{padding-right:44px}.upload-dialog h2{color:var(--portal-green-900);font-size:26px;margin:0 0 6px}.upload-dialog p{color:var(--portal-muted);margin:0}.upload-targets{display:grid;gap:12px;grid-template-columns:repeat(3,minmax(0,1fr))}.upload-targets label{color:var(--portal-muted);display:grid;font-weight:900;gap:7px}.upload-targets select,.upload-targets input{background:var(--portal-bg);border:1px solid var(--portal-border);border-radius:10px;min-height:40px;padding:0 12px;width:100%}.drop-zone{align-items:center;background:var(--portal-surface-alt);border:2px dashed var(--portal-border);border-radius:16px;color:var(--portal-muted);cursor:pointer;display:grid;gap:8px;justify-items:center;min-height:170px;padding:22px;text-align:center}.drop-zone.dragging{background:#afefdd5c;border-color:var(--portal-green-800)}.drop-zone strong{color:var(--portal-green-900);font-size:18px}.drop-zone input{height:1px;opacity:0;position:absolute;width:1px}.upload-bulk{display:grid;gap:10px;grid-template-columns:minmax(0,1fr) auto}.upload-bulk input{border:1px solid var(--portal-border);border-radius:10px;min-height:40px;padding:0 12px}.upload-bulk button{background:var(--portal-green-800);border:0;border-radius:10px;color:#fff;cursor:pointer;font-weight:900;padding:0 14px}.upload-queue{display:grid;gap:10px}.upload-queue article{align-items:center;background:var(--portal-bg);border:1px solid rgba(191,201,196,.76);border-radius:14px;display:grid;gap:10px;grid-template-columns:78px minmax(0,1fr) auto auto auto;padding:10px}.upload-queue img{border-radius:10px;height:70px;object-fit:cover;width:78px}.upload-queue strong{color:var(--portal-text);display:block;overflow-wrap:anywhere}.upload-queue input{border:1px solid var(--portal-border);border-radius:8px;margin:6px 0;min-height:34px;padding:0 10px;width:100%}.upload-queue progress{accent-color:var(--portal-green-800);display:block;width:100%}.upload-queue small{color:var(--portal-danger);display:block;font-weight:800}.upload-queue button{background:#fff;border:1px solid var(--portal-border);border-radius:9px;color:var(--portal-muted);cursor:pointer;min-height:34px;padding:0 10px}.upload-dialog footer{display:flex;flex-wrap:wrap;gap:10px;justify-content:flex-end}@media(max-width:1100px){.kpi-grid,.dashboard-kpis,.skeleton-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.chart-grid,.settings-grid{grid-template-columns:1fr}.topbar{grid-template-columns:auto minmax(100px,1fr) minmax(160px,260px) auto auto auto}.topbar select{display:none}}@media(max-width:860px){.admin-shell{grid-template-columns:1fr}.sidebar{box-shadow:0 22px 60px #181c2129;height:100vh;left:0;position:fixed;transform:translate(-105%);transition:transform .18s ease;width:var(--sidebar-width)}.admin-shell.nav-open .sidebar{transform:translate(0)}.nav-toggle{display:inline-flex}.topbar{grid-template-columns:auto minmax(80px,1fr) auto auto auto;padding:0 14px}.topbar .global-search{display:none}main{padding:22px 16px 34px}.page-header{display:grid}.page-header h1{font-size:30px}.page-actions{flex-wrap:wrap}.photo-modal{grid-template-columns:1fr}}@media(max-width:620px){.kpi-grid,.dashboard-kpis,.skeleton-grid,.filter-bar{grid-template-columns:1fr}.detail-hero{align-items:flex-start;display:grid}.detail-meta{min-width:0;text-align:left}.settings-list div,.form-grid,.form-grid.compact,.photo-meta dl div{grid-template-columns:1fr}.bar-chart{gap:6px;grid-template-columns:repeat(7,minmax(22px,1fr));overflow-x:auto}}@media(max-width:1180px){.portal-topbar{grid-template-columns:auto minmax(180px,1fr) auto auto auto}.portal-topnav{display:none}.portal-summary-grid,.portal-skeleton-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.collection-main{grid-template-columns:1fr}.photo-list-panel{max-height:none}}@media(max-width:920px){.portal-shell{grid-template-columns:1fr}.portal-sidebar{box-shadow:0 22px 60px #00342b33;height:100vh;left:0;position:fixed;transform:translate(-105%);transition:transform .18s ease;width:256px}.portal-shell.nav-open .portal-sidebar{transform:translate(0)}.portal-menu{display:grid}.portal-topbar{grid-template-columns:auto minmax(0,1fr) auto auto;padding:0 14px}.portal-new-button{display:none}.portal-page{padding:22px 16px 34px}.portal-page-header,.project-detail-hero,.collection-header{display:grid}.portal-page-header h1,.project-detail-hero h1,.collection-header h1{font-size:30px}.portal-login-panel{justify-self:center;margin-right:0}.upload-targets{grid-template-columns:1fr}.portal-map-page{grid-template-columns:1fr;grid-template-rows:auto minmax(520px,1fr);height:auto}.map-side-panel{border-bottom:1px solid var(--portal-border);border-right:0;max-height:420px}.portal-map-page>.portal-map-canvas{min-height:560px}}@media(max-width:700px){.portal-topbar{grid-template-columns:auto minmax(0,1fr) auto}.portal-topbar .portal-icon-button:first-of-type{display:none}.portal-search{min-width:0}.portal-icon-button{display:none}.portal-summary-grid,.portal-skeleton-grid,.project-card-grid,.collection-card-grid,.form-two,.portal-check-grid,.collection-tools,.collection-list article,.photo-meta-grid div,.upload-bulk,.upload-queue article{grid-template-columns:1fr}.portal-upload-banner,.portal-section-heading{align-items:flex-start;display:grid}.photo-row{grid-template-columns:68px minmax(0,1fr)}.photo-row small,.photo-row i{grid-column:2}.photo-list-panel.grid-mode{grid-template-columns:repeat(2,minmax(0,1fr))}.photo-drawer{width:100vw}.upload-dialog{border-radius:12px;max-height:calc(100vh - 20px);padding:18px}.portal-search-popover{left:12px;right:12px;top:58px;width:auto}}@media(max-width:460px){.portal-login-screen{padding:16px}.portal-login-panel{border-radius:14px;padding:24px}.photo-list-panel.grid-mode{grid-template-columns:1fr}}
