:root{--navy:#0b2d46;--navy2:#123f60;--ink:#173248;--muted:#738698;--line:#dfe7ed;--surface:#f3f6f8;--white:#fff;--blue:#3178c6;--teal:#138c8c;--gold:#b98638;--shadow:0 12px 32px rgba(14,45,68,.07)}*{box-sizing:border-box}html,body{margin:0;min-height:100%;font-family:Aptos,"Segoe UI Variable Text","Segoe UI",Arial,sans-serif;background:var(--surface);color:var(--ink);font-weight:400;-webkit-font-smoothing:antialiased}button,input,select{font:inherit}.boot{padding:60px;text-align:center;color:var(--muted)}.error{background:#fff0f0;color:#9c3636;border:1px solid #efcaca;padding:12px 14px;border-radius:9px}.login-shell{min-height:100vh;display:grid;grid-template-columns:minmax(390px,520px) 1fr;background:linear-gradient(135deg,#0a2b44,#175777)}.login-card{background:#fff;padding:64px 58px;display:flex;flex-direction:column;justify-content:center}.brand{display:flex;align-items:center;gap:20px}.brand img{width:126px;height:auto;object-fit:contain}.brand h1{font-size:32px;font-weight:500;margin:0}.brand p{margin:5px 0 0;color:var(--muted)}.login-card h2{font-size:28px;font-weight:500;margin:58px 0 9px}.muted{color:var(--muted)}.login-btn{width:100%;margin-top:22px;padding:14px}.login-art{color:#fff;display:flex;align-items:flex-end;padding:78px;background:radial-gradient(circle at 70% 20%,rgba(58,147,190,.28),transparent 38%)}.login-art-copy{max-width:740px}.login-art-copy>span,.eyebrow{font-size:10px;letter-spacing:1.5px;text-transform:uppercase}.login-art h3{font-size:44px;line-height:1.18;font-weight:350;margin:15px 0}.login-art p{font-size:18px;line-height:1.6;color:#d2e2ec}.field label{display:block;font-size:12px;color:#5e7484;margin:0 0 6px}.field input{width:100%;padding:11px 12px;border:1px solid #cfdbe3;border-radius:9px}.btn{border:1px solid #ccd9e2;background:#fff;color:var(--navy);border-radius:9px;padding:9px 14px;cursor:pointer;text-decoration:none}.btn.primary{background:var(--navy);color:#fff;border-color:var(--navy)}.btn.sm{padding:7px 10px;font-size:12px}.shell{min-height:100vh;display:grid;grid-template-columns:260px 1fr}.sidebar{background:linear-gradient(180deg,#0a2a42,#0b314d);color:#fff;padding:26px 18px;display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.side-brand{padding:2px 10px 10px}.side-brand img{width:142px;height:auto;display:block;margin-bottom:16px}.side-brand strong{font-size:21px;font-weight:500}.side-brand small{display:block;margin-top:4px;color:#a9c0d0;font-size:11px}.side-rule{height:1px;background:rgba(255,255,255,.12);margin:10px 8px 22px}.nav a{display:flex;align-items:center;gap:12px;padding:12px 13px;border-radius:9px;color:#c7d8e3;text-decoration:none;margin-bottom:5px}.nav a b{font-weight:400}.nav a.active,.nav a:hover{background:rgba(255,255,255,.1);color:#fff}.side-foot{margin-top:auto;padding:12px 10px;color:#91adbf;font-size:11px;line-height:1.6}.main{min-width:0}.topbar{height:82px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 32px}.page-mark{display:flex;align-items:center;gap:16px}.page-mark img{width:92px;height:auto}.page-mark h2{margin:0;font-size:20px;font-weight:500}.page-mark span{font-size:11px;color:var(--muted)}.userchip{display:flex;align-items:center;gap:11px}.usertext{text-align:right}.usertext>div{font-size:14px}.usertext small{color:var(--muted)}.avatar{width:38px;height:38px;border-radius:50%;display:grid;place-items:center;background:#e6eef3;color:var(--navy);font-weight:500}.content{max-width:1540px;margin:auto;padding:34px}.hub-head{background:linear-gradient(120deg,#0d314b,#175575);color:#fff;border-radius:18px;padding:36px 38px;display:flex;align-items:flex-end;justify-content:space-between;box-shadow:var(--shadow)}.hub-head .eyebrow{color:#a9c9dc}.hub-head h1{font-size:34px;font-weight:450;margin:8px 0}.hub-head p{margin:0;max-width:800px;color:#c9dce8;font-size:15px}.hub-version{border:1px solid rgba(255,255,255,.25);padding:9px 13px;border-radius:999px;color:#dceaf2}.section-title{display:flex;align-items:end;justify-content:space-between;margin:30px 0 15px}.section-title h3{margin:0;font-size:20px;font-weight:500}.section-title p{margin:5px 0 0;color:var(--muted);font-size:13px}.module-grid{display:grid;grid-template-columns:repeat(3,minmax(240px,1fr));gap:18px}.module-card{background:#fff;border:1px solid var(--line);border-radius:16px;padding:23px;box-shadow:var(--shadow);text-decoration:none;color:inherit;min-height:218px;position:relative;transition:.18s}.module-card:hover{transform:translateY(-2px);box-shadow:0 15px 36px rgba(14,45,68,.11)}.module-card:before{content:"";position:absolute;inset:0 0 auto;height:4px;background:var(--accent);border-radius:16px 16px 0 0}.module-top{display:flex;justify-content:space-between;align-items:center}.module-icon{width:52px;height:52px;border-radius:13px;background:var(--soft);color:var(--accent);display:grid;place-items:center;font-size:23px}.module-arrow{font-size:20px;color:var(--accent)}.module-card h3{font-size:20px;font-weight:500;margin:19px 0 6px}.module-card p{margin:0;color:var(--muted);line-height:1.5}.module-meta{position:absolute;left:23px;right:23px;bottom:19px;padding-top:12px;border-top:1px solid #edf1f3;color:var(--accent);font-size:12px}.snapshot-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.snap-card{background:#fff;border:1px solid var(--line);border-radius:13px;padding:18px;box-shadow:0 5px 18px rgba(14,45,68,.04)}.snap-card span{font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--muted)}.snap-card strong{display:block;font-size:20px;font-weight:500;margin:7px 0 2px}.snap-card small{color:var(--muted)}.page-intro{margin-bottom:24px}.page-intro .eyebrow{color:#6f8798}.page-intro h1{font-size:28px;font-weight:500;margin:7px 0}.page-intro p{margin:0;color:var(--muted)}.panel{background:#fff;border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:hidden}.add-panel{margin-bottom:18px}.access-add{display:grid;grid-template-columns:minmax(160px,.8fr) minmax(260px,1.4fr) auto auto;gap:14px;align-items:end;padding:18px}.access-add .field{margin:0}.access-mods{display:flex;gap:12px;padding-bottom:10px}.access-mods label,.switch label{font-size:12px;color:#516978}.table-wrap{overflow:auto}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:12px 15px;border-bottom:1px solid #edf1f4;font-size:13px}th{background:#f8fafb;color:#637684;font-weight:500}.tag{font-size:11px;border-radius:999px;padding:4px 8px;background:#eaf0f4}.switch{display:flex;gap:9px}.switch input{width:17px;height:17px}@media(max-width:1000px){.shell{grid-template-columns:90px 1fr}.side-brand div,.nav span,.side-foot{display:none}.side-brand img{width:58px;margin:auto}.module-grid,.snapshot-grid{grid-template-columns:1fr}.access-add{grid-template-columns:1fr 1fr}}@media(max-width:650px){.shell{display:block}.sidebar{height:auto;position:static;flex-direction:row;align-items:center}.side-rule,.side-foot,.side-brand div{display:none}.side-brand img{width:72px;margin:0}.nav{display:flex;margin-left:auto}.topbar{padding:0 16px}.page-mark img{width:70px}.content{padding:18px}.hub-head{padding:26px;display:block}.hub-version{display:inline-block;margin-top:18px}.access-add{grid-template-columns:1fr}.login-shell{grid-template-columns:1fr}.login-art{display:none}}

/* CPPS Hub v1.0.4 transparent-logo refinements */
.side-brand img{width:176px;max-width:100%;height:auto;object-fit:contain;margin-bottom:15px}.page-mark img{width:118px;height:auto;object-fit:contain}.brand img{width:158px;height:auto;object-fit:contain}
@media(max-width:1000px){.side-brand img{width:64px}.page-mark img{width:96px}}
@media(max-width:650px){.side-brand img{width:82px}.page-mark img{width:78px}}

/* CPPS Hub v1.0.5 — official transparent CPPS logo */
.side-brand img{width:190px;max-width:100%;background:#fff;padding:8px 10px;border-radius:10px;box-shadow:0 5px 16px rgba(0,0,0,.08)}
.page-mark img{width:136px}.brand img{width:176px}
@media(max-width:1000px){.side-brand img{width:70px;padding:6px}.page-mark img{width:106px}}
@media(max-width:650px){.side-brand img{width:88px}.page-mark img{width:84px}}


/* CPPS Hub v1.0.7 — reliable navigation + mobile install */
.side-brand img{width:205px;max-width:100%;height:auto;background:transparent!important;padding:0!important;border-radius:0!important;box-shadow:none!important;filter:none!important}
.page-mark img{width:144px;background:transparent!important}.brand img{width:184px;background:transparent!important}
.retry-shell{display:flex;flex-direction:column;gap:14px;align-items:center;justify-content:center;min-height:70vh}.retry-shell .error{max-width:680px;width:100%;text-align:left}.error button{margin-top:10px}
.install-card{display:grid;grid-template-columns:150px 1fr;gap:26px;align-items:start;background:#fff;border:1px solid var(--line);border-radius:16px;padding:28px;box-shadow:var(--shadow)}.phone-icon{width:132px;height:132px;border-radius:28px;box-shadow:0 10px 30px rgba(14,45,68,.12)}.install-card h2{margin:6px 0;font-weight:500}.install-steps{line-height:1.8;padding-left:22px}.install-url{margin-top:18px;border:1px solid var(--line);border-radius:10px;padding:10px 12px;display:flex;align-items:center;gap:10px;justify-content:space-between;word-break:break-all}.install-done{background:#eef8f2;border:1px solid #c8e8d3;color:#246740;padding:12px 14px;border-radius:10px;margin:14px 0}
@media(max-width:1000px){.side-brand img{width:72px}.page-mark img{width:106px}}
@media(max-width:650px){body{background:#fff}.shell{display:block}.sidebar{position:sticky;top:0;z-index:20;height:auto;padding:10px 12px;display:flex;gap:8px;box-shadow:0 2px 12px rgba(0,0,0,.08)}.side-brand{padding:0}.side-brand img{width:82px;margin:0}.nav{display:flex;margin-left:auto;overflow-x:auto;gap:4px}.nav a{margin:0;padding:9px 10px;white-space:nowrap}.nav a b{display:none}.nav span{display:inline!important;font-size:12px}.topbar{height:68px;padding:0 14px}.page-mark img{width:76px}.page-mark span,.usertext{display:none}.content{padding:16px}.hub-head{border-radius:14px;padding:22px}.hub-head h1{font-size:28px}.module-grid,.snapshot-grid{grid-template-columns:1fr}.module-card{min-height:190px}.access-add{grid-template-columns:1fr}.access-mods{flex-wrap:wrap}.install-card{grid-template-columns:1fr;text-align:left;padding:22px}.phone-icon{width:96px;height:96px}.install-url{display:block}.install-url button{margin-top:10px}.login-card{padding:36px 24px}.brand img{width:150px}.login-card h2{margin-top:36px}}


/* CPPS Hub v1.0.8 — module symbols */
.module-icon .module-svg{width:28px;height:28px;display:block}.module-icon{font-size:0}
@media(max-width:650px){.module-icon{width:48px;height:48px}.module-icon .module-svg{width:25px;height:25px}}

/* CPPS Hub v1.0.10 — Pricing v1.2 and Villa v0.7.2 integration */
.hub-brand-lockup{object-fit:contain;background:transparent!important;box-shadow:none!important;padding:0!important;border-radius:0!important}
.brand{display:block}.brand .hub-brand-lockup{width:min(360px,100%);height:auto}
.side-brand .hub-brand-lockup{width:212px;max-width:100%;height:auto;margin:0 0 13px}.side-brand strong{letter-spacing:.09em}
.page-mark .hub-brand-lockup{width:185px;height:auto}.page-mark>div{display:flex;align-items:center}.page-mark h2{font-size:19px}
.hub-head{align-items:center}.hub-head .hub-lead{font-size:16px;line-height:1.55;max-width:900px;color:#d7e6ef;margin:8px 0 0}.hub-head h1{display:none}
.module-svg{width:28px;height:28px;display:block}.module-icon{width:56px;height:56px;border-radius:15px}
.device-alert{margin:0 0 14px;padding:14px 16px;border:1px solid #f0d29a;background:#fff8e8;border-radius:13px}.device-alert>div{display:flex;align-items:center;gap:12px}.device-alert-icon{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;background:#f0b34b;color:#fff;font-weight:700}.device-alert strong{display:block;color:#6f4c12}.device-alert p{margin:3px 0 0;color:#80683e;font-size:12px}.device-panel{margin-bottom:16px}.device-actions{display:flex;gap:7px}.device-ua{font-size:11px;max-width:520px}.security-note{display:flex;align-items:center;gap:10px;margin:0 0 16px;padding:11px 14px;background:#edf6fb;border:1px solid #d6e8f2;border-radius:11px;font-size:12px}.security-note strong{white-space:nowrap}.security-note span{color:#587185}
@media(max-width:1000px){.side-brand .hub-brand-lockup{width:70px}.page-mark .hub-brand-lockup{width:145px}.side-brand>div{display:none}}
@media(max-width:650px){.topbar{height:68px;padding:0 14px}.page-mark{gap:10px}.page-mark .hub-brand-lockup{width:118px}.page-mark h2{font-size:16px}.hub-head{padding:22px}.hub-head .hub-lead{font-size:14px}.security-note{display:block}.security-note strong,.security-note span{display:block}.security-note span{margin-top:4px}.device-actions{flex-direction:column}.side-brand .hub-brand-lockup{width:82px;margin:0}.module-icon{width:50px;height:50px}.module-svg{width:25px;height:25px}}

/* v1.0.11: the CPPS+HUB lockup is the home title; suppress duplicate Hub text. */
.page-mark h2:empty{display:none}.side-brand .hub-brand-lockup{max-width:230px}


/* CPPS Hub v1.0.20-r5 — custom module emblems + phone app icon refresh */
.module-icon{background:transparent!important;width:68px;height:68px;border-radius:0;padding:0;box-shadow:none}
.module-icon .module-icon-img{display:block;width:64px;height:64px;object-fit:contain;filter:drop-shadow(0 6px 12px rgba(11,45,70,.10))}
.phone-icon{border-radius:30px}
@media(max-width:650px){.module-icon{width:58px;height:58px}.module-icon .module-icon-img{width:56px;height:56px}}

/* v1.0.20 — unified owner access and device recovery; no inline script events. */
.access-workspace{max-width:1300px;margin:0 auto}.access-page-title{display:flex;justify-content:space-between;align-items:center;gap:16px}.access-page-title h1{margin:8px 0}.access-page-title p{margin:0}.access-section{margin:24px 0}.access-section .section-title{margin-bottom:14px}.access-count{display:inline-grid;min-width:26px;min-height:26px;place-items:center;border-radius:30px;background:#e8f0f7;color:#183b54;font-size:13px;font-weight:600;padding:0 8px;margin-left:6px}.access-nav-badge{background:#f0b34b;color:#19384c;border-radius:20px;padding:2px 7px;font-size:12px!important;min-width:20px;text-align:center;margin-left:auto}.access-nav-badge[hidden]{display:none!important}.access-device-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,340px),1fr));gap:14px}.access-device{background:#fff;border:1px solid #dfe8ef;border-radius:15px;padding:18px;min-width:0;box-shadow:0 5px 16px rgba(20,50,70,.035)}.access-device-top{display:flex;justify-content:space-between;gap:8px;align-items:start}.access-device-top>div{min-width:0}.access-email{display:block;font-size:12px;overflow-wrap:anywhere;margin-top:4px}.access-device h3{font-size:17px;margin:18px 0 5px}.access-device p{font-size:13px;margin:6px 0 12px}.access-device dl{font-size:12px;margin:12px 0}.access-device dl>div{display:flex;gap:10px;margin:5px 0}.access-device dt{color:#617587;min-width:74px}.access-device dd{margin:0;overflow-wrap:anywhere}.access-old-note{color:#7c570e!important;background:#fff7e5;border-radius:8px;padding:9px;line-height:1.5}.access-state{display:inline-block;font-size:11px;line-height:1.5;border-radius:20px;padding:3px 9px;font-weight:600;white-space:nowrap}.access-state.active{color:#12684b;background:#e7f5ee}.access-state.pending{color:#845e17;background:#fff2d5}.access-state.disabled,.access-state.deleted{color:#704c52;background:#f8e9ec}.access-account-role{display:block;max-width:160px;font-size:11px;margin-top:7px}.access-approved{border:1px solid #dfe8ef;border-radius:14px;background:#f8fafc;padding:17px;margin:22px 0}.access-approved summary{cursor:pointer;font-size:18px;font-weight:600}.access-approved>p{font-size:13px;line-height:1.6;margin:12px 0 16px}.access-empty{background:#fff;padding:20px;border:1px dashed #d6e3ed;border-radius:10px;color:#667b8b;font-size:14px}.access-filters{display:flex;gap:16px;align-items:end;flex-wrap:wrap;margin:18px 0 12px}.access-filters label{display:grid;gap:6px;color:#577085;font-size:12px}.access-filters input,.access-filters select{padding:10px 12px;border:1px solid #d8e4ed;border-radius:9px;background:#fff;color:#153349;font:inherit;font-size:14px;min-width:210px}.access-filters>span{margin-bottom:10px;font-size:12px}.access-users{width:100%}.access-users th,.access-users td{padding:14px 12px;vertical-align:top}.access-users .switch{gap:7px;flex-wrap:wrap}.access-users .switch label{white-space:nowrap}.access-user-actions{display:flex;gap:6px;flex-wrap:wrap;max-width:290px}.access-user-actions .btn{font-size:11px;padding:7px 9px;min-height:32px}.danger-outline{border-color:#e1bac1!important;color:#973f4f!important;background:#fff!important}.btn.danger{background:#a1354b!important;color:#fff!important;border-color:#a1354b!important}.access-notice{padding:13px 16px;line-height:1.6;border:1px solid #bedbcc;border-radius:10px;margin:14px 0;font-size:14px}.access-notice.success{background:#edf9f2;color:#246144}.access-dialog{padding:0;border:1px solid #d7e3ec;border-radius:17px;width:min(560px,calc(100vw - 30px));max-height:calc(100dvh - 40px);box-shadow:0 24px 80px #091f4640;color:#19384b}.access-dialog::backdrop{background:#142d456f}.access-confirm{padding:24px}.access-dialog-head{display:flex;justify-content:space-between;align-items:start;gap:16px}.access-dialog-head h2{font-size:21px;line-height:1.4;margin:0}.access-confirm>p{line-height:1.65;font-size:14px}.access-dialog-foot{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}.access-review-box,.access-old-device{border:1px solid #dfe7ee;background:#f6f9fb;border-radius:10px;padding:14px;margin:15px 0;display:grid;gap:7px;font-size:13px;overflow-wrap:anywhere}.access-old-device{background:#fff7e8;border-color:#f0d69f}.access-confirm label{display:block;font-size:13px;line-height:1.6}.access-confirm input{display:block;width:100%;box-sizing:border-box;margin-top:8px;padding:11px 12px;border:1px solid #cfdee9;border-radius:9px;font:inherit}.access-confirm .field{margin:14px 0}.access-confirm .error{font-size:13px;line-height:1.6;margin-top:14px}.access-users input:disabled{opacity:.65}.access-add label{font-size:12px}.access-add .field input{display:block;width:100%;box-sizing:border-box;margin-top:6px}
@media(max-width:800px){.access-page-title{align-items:start}.access-page-title h1{font-size:23px}.access-page-title p{font-size:13px;line-height:1.6}.access-users thead{display:none}.access-users,.access-users tbody{display:block}.access-users tbody tr{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;padding:16px;border-bottom:1px solid #dce6ed}.access-users td{display:block;padding:0;border:0;min-width:0}.access-users td[data-label=User],.access-users td[data-label=Account],.access-users td[data-label=Actions]{grid-column:1/-1}.access-users td[data-label=RTU]:before,.access-users td[data-label=Pricing]:before,.access-users td[data-label=Villa]:before{content:attr(data-label);display:block;font-weight:600;font-size:12px;margin-bottom:8px}.access-users .switch{display:grid;gap:8px}.access-account-role{display:inline;max-width:none;margin-left:8px}.access-user-actions{max-width:none}.access-user-actions .btn{min-height:39px;font-size:12px}.access-filters label:first-child{flex:1;min-width:0}.access-filters input,.access-filters select{min-width:0;max-width:100%;box-sizing:border-box}.access-add{display:grid;grid-template-columns:1fr;gap:12px}.access-device .device-actions{flex-direction:row;flex-wrap:wrap}.access-device .device-actions .btn{min-height:40px}.access-confirm{padding:20px}.access-dialog-foot{flex-wrap:wrap}.access-dialog-foot .btn{min-height:44px}.access-notice{font-size:13px}.access-page-title .btn{flex-shrink:0}}

/* r50: blend the existing white-backed emblems into their card surface. */
.module-card{isolation:isolate}.module-icon{background:transparent!important;box-shadow:none!important}.module-icon .module-icon-img{mix-blend-mode:multiply;filter:none;background:transparent}

/* Clip outside each circular emblem without altering the original artwork. */
.module-icon-img[src*="module_rtu"]{clip-path:ellipse(40% 40% at 50% 47%)}
.module-icon-img[src*="module_pricing"]{clip-path:ellipse(40.5% 40% at 50% 49%)}
.module-icon-img[src*="module_torishima"]{clip-path:ellipse(39% 38.5% at 50% 50.5%)}
.module-icon-img[src*="module_villa"]{clip-path:ellipse(42.5% 42% at 50% 49%)}
.module-card{display:flex;flex-direction:column}.module-card>p{margin-bottom:16px}.module-meta{position:static;margin-top:auto;min-height:29px}
