*{box-sizing:border-box}body{margin:0;font:14px/1.55 -apple-system,BlinkMacSystemFont,"Segoe UI","Microsoft YaHei",sans-serif;color:#253750;background:#f4f6fa}a{color:#2866b6;text-decoration:none}a:hover{color:#17447e}button,input,select,textarea{font:inherit}button,.button{cursor:pointer;border:1px solid #d5dfea;border-radius:7px;background:#fff;color:#496078;padding:9px 15px;line-height:1.5;display:inline-flex;align-items:center;justify-content:center;gap:7px;text-decoration:none;white-space:nowrap}button:hover,.button:hover{background:#f0f5fb}.primary{background:#286ac2!important;color:#fff!important;border-color:#286ac2!important;box-shadow:0 3px 7px #286ac218}.primary:hover{background:#1c5aab!important}.danger-button{border-color:#e6bbbb;color:#b94747;background:#fff7f7}button:disabled{opacity:.4;cursor:not-allowed}input,select,textarea{width:100%;border:1px solid #d7e0ea;border-radius:7px;background:#fff;color:#314b69;padding:10px 12px;min-height:42px}input[type=checkbox],input[type=radio]{width:16px;min-height:0;height:16px;accent-color:#286ac2;vertical-align:middle}input:focus,select:focus,textarea:focus{outline:2px solid #7fa9e6;outline-offset:1px;border-color:#89ace0}a:focus-visible,button:focus-visible{outline:2px solid #5994df;outline-offset:3px}textarea{resize:vertical;line-height:1.7}h1,h2,h3,p{margin-top:0}h2{font-size:17px;font-weight:600;margin-bottom:16px}h3{font-size:17px}.muted{color:#8a99ad;font-size:13px}.field-hint{font-size:12px;color:#8192a8;line-height:1.8;margin:2px 0}.step-label,.eyebrow{font-size:10px;letter-spacing:2px;font-weight:600;color:#8ca2bc}.login-body,.install-body{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(145deg,#ecf2fa,#f9fbfe);padding:36px 20px}.login-card{width:430px;border:1px solid #e2e9f2;border-radius:16px;background:#fff;padding:38px;box-shadow:0 18px 50px #284e7c0c}.install-card{width:820px;background:#fff;border:1px solid #e2e9f2;border-radius:16px;padding:34px;box-shadow:0 18px 50px #284e7c0c}.admin-logo{display:flex;align-items:center;gap:10px;color:#304e73}.admin-logo b{font:900 31px/1 Arial,sans-serif;color:#e83e3c;letter-spacing:-2px}.admin-logo span{font-size:13px;font-weight:600}.login-card .admin-logo,.install-card .admin-logo{margin-bottom:35px}.login-card h1,.install-card h1{font-size:27px;margin:9px 0 8px;color:#203957}.login-card .muted{margin-bottom:24px}.stack-form{display:grid;gap:16px}.stack-form label{display:grid;gap:7px;font-size:13px;color:#5b708b}.stack-form>button{justify-self:start}.login-card .stack-form>button{justify-self:stretch;margin-top:7px}.back-site{display:block;text-align:center;color:#91a1b5;font-size:12px;margin-top:23px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:20px}.form-grid label,.field{display:flex;flex-direction:column;gap:7px;color:#5b708b;font-size:13px;min-width:0}.full{grid-column:1/-1}.form-grid h2{border-bottom:1px solid #edf0f5;padding-bottom:10px;margin-bottom:0;margin-top:4px}.form-actions{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:4px}.environment-checks{display:flex;flex-wrap:wrap;gap:8px;margin:20px 0}.environment-checks span{font-size:11px;padding:6px 9px;border-radius:5px}.environment-checks .ok{background:#edf8f1;color:#4d8664}.environment-checks .bad{background:#fff0ee;color:#b74a43}.error-message,.success-message{padding:12px 16px;border-radius:8px;margin:0 0 20px;font-size:13px;border:1px solid}.error-message{background:#fff3f1;border-color:#f2d4cd;color:#b55245}.success-message{background:#ecf8f0;border-color:#cae9d6;color:#39815b}.sidebar{position:fixed;top:0;bottom:0;left:0;width:218px;background:#fff;border-right:1px solid #e5ebf3;z-index:60;display:flex;flex-direction:column;padding:28px 16px 18px}.sidebar .admin-logo{padding:0 8px;margin-bottom:30px}.sidebar-caption{padding:0 14px;color:#a1aec0;font-size:10px;letter-spacing:2px;margin-bottom:10px}.sidebar nav{display:flex;flex-direction:column;gap:3px;overflow-y:auto;flex:1}.sidebar nav>a{display:flex;align-items:center;gap:12px;font-size:13px;color:#73859b;padding:11px 15px;border-radius:7px}.sidebar nav>a>span{font-size:17px;line-height:1;width:20px;text-align:center;color:#8ba0b8}.sidebar nav>a.active{background:#eaf1fc;color:#286ac2;font-weight:600}.sidebar nav>a.active>span{color:#286ac2}.sidebar nav>a:hover{background:#f1f5fa}.sidebar-site{padding:16px 10px 0;border-top:1px solid #edf0f4;margin-top:12px;font-size:12px;color:#8b9db4}.admin-shell{margin-left:218px}.admin-topbar{height:70px;background:#fff;border-bottom:1px solid #e7edf4;padding:0 34px;display:flex;align-items:center;justify-content:space-between;gap:14px}.admin-topbar>div{display:flex;align-items:center;gap:14px;font-size:12px;color:#8fa0b5}.admin-topbar strong{font-weight:500;color:#536c8b}.admin-topbar i{font-style:normal;color:#c5cfdc}.admin-user span{width:32px;height:32px;display:flex;align-items:center;justify-content:center;border-radius:50%;background:#ebf2fb;color:#4e78a9;font-size:10px;overflow:hidden}.admin-user form{margin:0}.admin-user button{padding:3px 0;border:0;font-size:12px;color:#8b9fb8}.admin-main{max-width:1600px;margin:auto;padding:30px 34px}.page-heading{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:25px}.page-heading .eyebrow{margin:0 0 5px}.page-heading h1{font-size:26px;line-height:1.4;color:#233d5e;margin:0 0 6px}.page-heading .muted{margin:0}.stats-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:18px;margin-bottom:22px}.stat-card{background:#fff;border:1px solid #e4eaf2;border-radius:10px;padding:22px 24px;position:relative;overflow:hidden}.stat-card:after{content:'';position:absolute;right:-10px;top:-15px;width:66px;height:66px;border:12px solid #f2f6fc;border-radius:50%}.stat-card>span{font-size:12px;color:#7f94ae;display:block}.stat-card strong{font-size:32px;line-height:1.4;display:block;color:#284e7a;font-weight:600;letter-spacing:-1px;margin:7px 0}.stat-card small{font-size:10px;color:#a6b2c3}.panel{border:1px solid #e1e8f0;border-radius:10px;background:#fff;padding:24px;margin-bottom:22px;min-width:0}.panel-title{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:20px}.panel-title h2{margin:0;color:#355374;font-size:16px}.panel-title>span,.panel-title>a{font-size:11px;color:#90a4bb}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(0,1fr);gap:22px}.quick-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.quick-actions>a{display:flex;align-items:center;gap:12px;padding:17px 14px;border:1px solid #e7edf5;border-radius:7px;background:#fcfdff;color:#617a99;font-size:12px}.quick-actions b{display:grid;place-items:center;width:30px;height:30px;background:#edf3fc;color:#6391ce;border-radius:8px;font-size:18px;font-weight:400}.quick-actions i{margin-left:auto;color:#c4d0df;font-style:normal}.status-list{margin:0}.status-list>div{display:flex;justify-content:space-between;gap:14px;padding:10px 0;border-bottom:1px solid #edf1f7;font-size:12px}.status-list dt{color:#93a2b6}.status-list dd{margin:0;color:#617d9e}.text-link{font-size:12px;display:inline-block;margin-top:14px}.status{display:inline-block;border-radius:4px;padding:3px 8px;font-size:10px;white-space:nowrap}.status.enabled{background:#edf8f1;color:#4e976e}.status.disabled{background:#f1f3f6;color:#95a1b1}.table-scroll{width:100%;overflow:auto}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px}th{font-weight:500;color:#8a9bb0;background:#f7f9fc;border-bottom:1px solid #e7edf5;padding:12px;white-space:nowrap}td{border-bottom:1px solid #edf1f6;padding:14px 12px;vertical-align:middle;color:#6a809c}tr:last-child td{border-bottom:0}.check-col{width:30px}.name-cell{min-width:180px;max-width:300px}.name-cell strong{font-weight:500;color:#3c587b;font-size:13px;display:block}.name-cell small{display:block;max-width:270px;overflow:hidden;white-space:nowrap;text-overflow:ellipsis;color:#a1aec0;font-size:10px;margin-top:5px}.detail-cell{max-width:250px;word-break:break-word;font-size:11px}.actions{white-space:nowrap}.actions>a{padding:5px 8px;color:#5989c4;font-size:12px}.filter-bar{display:flex;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:20px}.filter-bar>input{width:220px}.filter-bar>select{width:170px}.filter-bar button,.filter-bar .button{padding:8px 15px;font-size:12px}.result-count{margin-left:auto;font-size:11px;color:#9aabbe}.filter-chip{font-size:11px;border-radius:5px;background:#eaf2fb;color:#547dac;padding:7px}.table-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:18px;border-top:1px solid #edf1f6;margin-top:6px}.bulk-controls{display:flex;gap:7px}.bulk-controls select{width:126px;min-height:32px;padding:6px 8px;font-size:11px}.bulk-controls button{padding:6px 11px;font-size:11px}.pagination{display:flex;align-items:center;justify-content:center;gap:16px;font-size:12px;color:#8fa2b9;margin:10px 0}.pagination>a{padding:6px 9px;border:1px solid #e0e7ef;border-radius:5px;background:white}.empty-admin{text-align:center;padding:50px 16px;color:#a4b3c6}.empty-admin>span{display:grid;place-items:center;width:60px;height:60px;border:1px solid #dce8f6;border-radius:18px;background:#f1f6fd;color:#8cacd1;font:31px sans-serif;margin:0 auto 18px}.empty-admin h3{color:#7f95b0;font-size:16px;margin-bottom:7px}.empty-admin p{font-size:12px;color:#a8b6c8}.empty-admin .button{margin-top:9px;font-size:12px;color:#6c92c1}.select-filter{font-size:12px;min-height:34px;padding:7px 10px;background:#fafcff}.narrow-panel{max-width:650px}.wrap-anywhere{overflow-wrap:anywhere}.admin-footer{font-size:10px;text-align:center;letter-spacing:1px;color:#adb9c8;padding:15px 0}.menu-toggle{display:none}[hidden]{display:none!important}.sidebar-backdrop{display:none}
@media(max-width:1100px){.admin-main{padding:25px 22px}.admin-topbar{padding:0 22px}.stats-grid{gap:12px}.stat-card{padding:18px 16px}.stat-card strong{font-size:28px}.dashboard-grid{gap:15px}.quick-actions{grid-template-columns:1fr}.quick-actions>a{padding:10px}.panel{padding:20px}}
@media(max-width:800px){body{font-size:13px}.sidebar{transform:translateX(-100%);transition:transform .2s;width:235px;padding-top:25px}.menu-open .sidebar{transform:translateX(0)}.sidebar-backdrop{position:fixed;inset:0;background:#16314d55;z-index:55;display:block}.admin-shell{margin-left:0}.admin-topbar{position:sticky;top:0;z-index:40;height:60px;padding:0 16px}.admin-topbar>div{gap:9px;font-size:11px}.admin-topbar>div>span{display:none}.menu-toggle{display:inline-flex;padding:3px 7px;border:0;font-size:19px;color:#66809e}.admin-main{padding:22px 14px}.page-heading{gap:10px;margin-bottom:20px;align-items:flex-start}.page-heading h1{font-size:24px}.page-heading .muted{font-size:11px;max-width:230px}.page-heading>.button{padding:8px 11px;font-size:11px;margin-top:20px}.eyebrow{font-size:8px;letter-spacing:1.5px}.stats-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin-bottom:15px}.stat-card{padding:16px}.stat-card strong{font-size:28px;margin:5px 0}.stat-card>span{font-size:11px}.stat-card small{font-size:9px}.dashboard-grid{grid-template-columns:1fr;gap:0}.quick-actions{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.quick-actions>a{padding:11px 9px;gap:8px;font-size:11px}.quick-actions b{width:26px;height:26px;font-size:16px}.panel{padding:17px 14px;border-radius:10px;margin-bottom:15px}.panel-title{margin-bottom:16px}.panel-title h2{font-size:15px}.panel-title>a{font-size:10px}.table-scroll{margin:0 -4px;width:calc(100% + 8px)}table{font-size:11px}td,th{padding:12px 9px}.filter-bar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.filter-bar>input,.filter-bar>select{width:100%;min-width:0;font-size:12px;padding:9px}.filter-bar>input[name=q]{grid-column:1/-1}.result-count{grid-column:1/-1;margin:0}.filter-bar>.button,.filter-bar>button{font-size:11px;padding:7px}.table-footer{align-items:flex-start;flex-direction:column}.pagination{align-self:center;font-size:11px;gap:12px}.form-grid{grid-template-columns:1fr;gap:16px}.full{grid-column:auto}.form-grid label,.stack-form label{font-size:12px}.form-grid input,.form-grid select,.form-grid textarea,.stack-form input,.stack-form select,.stack-form textarea{font-size:16px}.form-grid .select-filter{font-size:12px}.field-hint{font-size:11px}.empty-admin{padding:36px 12px}.login-body,.install-body{padding:20px 14px;align-items:flex-start}.login-card{margin-top:6vh;max-width:430px;width:100%;padding:28px 24px;border-radius:14px}.install-card{width:100%;padding:25px 20px}.login-card h1,.install-card h1{font-size:24px}.environment-checks{gap:6px}.environment-checks span{font-size:10px}.admin-footer{font-size:9px}.back-site{font-size:11px}.name-cell{min-width:150px}.name-cell small{max-width:200px}.detail-cell{min-width:170px}.admin-main .narrow-panel{max-width:100%}}
.stat-card>*{position:relative;z-index:1}.stat-card:after{z-index:0;pointer-events:none}.admin-user span{width:auto;padding:6px 10px;border-radius:6px;max-width:130px;white-space:nowrap;text-overflow:ellipsis}
@media(max-width:800px){.stat-card:after{display:none}.admin-user span{font-size:10px;max-width:90px}}

/* Prevent intrinsic control widths and long labels from widening the admin page. */
button,.button{max-width:100%;flex-shrink:0;white-space:normal;overflow-wrap:anywhere;text-align:center;vertical-align:middle}
input,select,textarea{min-width:0;max-width:100%}
.stack-form{grid-template-columns:minmax(0,1fr)}
.stack-form>*,.stack-form label,.form-grid>*,.quick-actions>a{min-width:0}
.panel-title,.page-heading,.table-footer,.bulk-controls{flex-wrap:wrap}
.page-heading>div{flex:1 1 200px;min-width:0}
.panel-title h2,.panel p,.field-hint,.error-message,.success-message,.status-list dd,.name-cell strong{overflow-wrap:anywhere}
.quick-actions b,.quick-actions i,.sidebar nav>a>span{flex-shrink:0}
.pagination{flex-wrap:wrap;max-width:100%}
.field:has(>input[type="checkbox"]){flex-direction:row;align-items:flex-start;line-height:1.6}
.field>input[type="checkbox"]{flex:0 0 16px;margin:2px 0 0}
@media(max-width:800px){.page-heading>.button{margin-top:0}.panel-title{row-gap:8px}.admin-topbar strong,.admin-user button{white-space:nowrap}}

/* Separate the weather preview from its action row. */
.admin-weather-preview{display:block;margin:16px 0 0;border:0}

/* Weather API reference: readable addresses without widening the page. */
.weather-api-list{display:grid;grid-template-columns:minmax(0,1fr);gap:14px}
.weather-api-item{min-width:0;padding:16px;border:1px solid #e1e8f0;border-radius:7px;background:#fafcff}
.weather-api-heading{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:8px;margin-bottom:10px}
.weather-api-heading h3{margin:0;color:#355374;font-size:14px}
.weather-api-heading a{font-size:12px;white-space:nowrap}
.weather-api-reference code{font-family:ui-monospace,SFMono-Regular,Consolas,monospace;overflow-wrap:anywhere;word-break:break-word;white-space:normal}
.weather-api-url{display:block;max-width:100%;padding:9px 11px;background:#edf3fb;border:1px solid #dce6f3;border-radius:4px;color:#2866b6;font-size:13px;line-height:1.65;-webkit-user-select:all;user-select:all}
.weather-api-item p{margin:10px 0 0;font-size:13px;line-height:1.75}
.weather-api-item .weather-api-params{color:#6a809c;font-size:12px}
.weather-api-note{margin:16px 0 0}
@media(max-width:800px){.weather-api-item{padding:12px}.weather-api-url{padding:8px;font-size:12px}}
