.sf-dashboard{max-width:1400px;margin:0 auto;padding:48px 24px 80px;color:#182230}
.sf-dashboard__head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px;margin-bottom:28px}
.sf-dashboard__head h1{font-size:34px;line-height:1.25;margin:4px 0 8px}
.sf-dashboard__head p{margin:0;color:#667085}
.sf-eyebrow{font-weight:700!important;font-size:12px;letter-spacing:.12em;color:#16803c!important}
.sf-site-picker{display:flex;flex-direction:column;gap:8px;min-width:260px;font-weight:600}
.sf-site-picker select{height:46px;border:1px solid #d0d5dd;border-radius:10px;padding:0 14px;background:#fff}
.sf-dashboard-links{display:flex!important;gap:12px;margin-top:4px}.sf-dashboard-links a{color:#16803c;text-decoration:none;font-size:13px}.sf-dashboard-links a:hover{text-decoration:underline}
.sf-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:20px}
.sf-summary article{border:1px solid #e4e7ec;border-radius:14px;padding:20px;background:#fff;box-shadow:0 2px 8px rgba(16,24,40,.04)}
.sf-summary span{display:block;color:#667085;font-size:13px}
.sf-summary strong{display:block;margin-top:8px;font-size:30px}.is-normal{color:#16803c}.is-warning{color:#dc6803}.is-offline{color:#d92d20}
.sf-message{margin:12px 0 20px;padding:12px 14px;border-radius:9px;background:#f2f4f7;color:#475467}
.sf-sensor-grid{display:grid;grid-template-columns:repeat(4,minmax(220px,1fr));gap:16px}
.sf-sensor-card{position:relative;border:1px solid #e4e7ec;border-radius:16px;padding:20px;background:#fff;overflow:hidden}
.sf-sensor-card:before{content:"";position:absolute;left:0;top:0;width:100%;height:4px;background:#12b76a}
.sf-sensor-card.is-warning:before{background:#f79009}.sf-sensor-card.is-critical:before,.sf-sensor-card.is-offline:before,.sf-sensor-card.is-invalid:before{background:#f04438}
.sf-sensor-card__top{display:flex;justify-content:space-between;gap:10px}.sf-sensor-card__top span{font-weight:700}.sf-sensor-card__top em{font-size:11px;font-style:normal;color:#667085}
.sf-sensor-card__value{display:flex;align-items:baseline;gap:7px;margin:24px 0}.sf-sensor-card__value strong{font-size:36px}.sf-sensor-card__value span{color:#667085}
.sf-sensor-card dl{margin:0;border-top:1px solid #eaecf0;padding-top:12px}.sf-sensor-card dl div{display:flex;justify-content:space-between;gap:16px;margin-top:7px}.sf-sensor-card dt{color:#667085}.sf-sensor-card dd{margin:0;text-align:right;overflow-wrap:anywhere}
.sf-empty{padding:40px;border:1px dashed #d0d5dd;border-radius:14px;text-align:center;background:#fafafa}.sf-empty p{margin:8px 0 0;color:#667085}
.sf-chart-panel{margin-top:28px;padding:24px;border:1px solid #e4e7ec;border-radius:16px;background:#fff}
.sf-chart-panel__head{display:flex;align-items:flex-end;justify-content:space-between;gap:24px}.sf-chart-panel__head h2{margin:4px 0 0;font-size:22px}
.sf-chart-filters{display:flex;align-items:flex-end;gap:10px}.sf-chart-filters label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:#667085}.sf-chart-filters select{height:40px;border:1px solid #d0d5dd;border-radius:8px;padding:0 32px 0 10px;background:#fff}.sf-chart-filters button{height:40px;border:0;border-radius:8px;padding:0 18px;background:#16803c;color:#fff;font-weight:700;cursor:pointer}
.sf-chart-message{margin:18px 0 8px;color:#667085}.sf-chart{width:100%;min-height:320px}.sf-chart svg{display:block;width:100%;height:320px;overflow:visible}.sf-chart-grid{stroke:#eaecf0;stroke-width:1}.sf-chart-label{fill:#667085;font-size:11px}.sf-chart-line{fill:none;stroke:#16803c;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke}.sf-chart-point{fill:#fff;stroke:#16803c;stroke-width:3;vector-effect:non-scaling-stroke}.sf-chart-current{fill:#16803c;font-size:15px;font-weight:700}.sf-chart-legend{display:flex;flex-wrap:wrap;gap:8px 16px;margin:10px 0 2px}.sf-chart-legend span{display:inline-flex;align-items:center;gap:6px;color:#667085;font-size:11px}.sf-chart-legend i{width:8px;height:8px;border-radius:50%}.sf-chart-legend strong{font-weight:700}.sf-chart-legend em{font-style:normal}
.sf-back-link{display:inline-flex;align-items:center;height:42px;padding:0 16px;border:1px solid #d0d5dd;border-radius:9px;color:#344054;text-decoration:none;background:#fff}.sf-alert-list{display:grid;gap:14px}.sf-alert-item{display:grid;grid-template-columns:1fr minmax(280px,420px);gap:20px;padding:20px;border:1px solid #e4e7ec;border-left:5px solid #f79009;border-radius:12px;background:#fff}.sf-alert-item.is-critical{border-left-color:#f04438}.sf-alert-item__content h2{margin:10px 0 6px;font-size:18px}.sf-alert-item__content p{margin:0 0 8px;color:#475467}.sf-alert-item__content small{color:#667085}.sf-alert-severity{display:inline-flex;margin-right:8px;padding:3px 8px;border-radius:99px;background:#fff4ed;color:#b93815;font-size:11px;font-weight:700;text-transform:uppercase}.sf-alert-action{display:grid;grid-template-columns:110px 1fr auto;align-items:center;gap:8px}.sf-alert-action select,.sf-alert-action input,.sf-export-form select,.sf-export-form input{height:42px;border:1px solid #d0d5dd;border-radius:8px;padding:0 10px;background:#fff}.sf-alert-action button,.sf-export-form button{height:42px;border:0;border-radius:8px;padding:0 16px;background:#16803c;color:#fff;font-weight:700}.sf-export-form{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;padding:24px;border:1px solid #e4e7ec;border-radius:14px;background:#fff}.sf-export-form label{display:flex;flex-direction:column;gap:7px;color:#475467;font-weight:600}.sf-export-form button{grid-column:1/-1;justify-self:end}
.sf-device-filter{display:flex;align-items:flex-end;gap:10px;margin-bottom:14px}.sf-device-filter label{display:flex;flex-direction:column;gap:6px;min-width:260px;color:#475467;font-weight:600}.sf-device-filter select{height:42px;border:1px solid #d0d5dd;border-radius:8px;padding:0 10px;background:#fff}.sf-device-filter button{height:42px;border:0;border-radius:8px;padding:0 18px;background:#16803c;color:#fff;font-weight:700}.sf-device-list{display:grid;gap:10px}.sf-device-row{display:grid;grid-template-columns:minmax(180px,1.4fr) repeat(4,minmax(120px,1fr)) auto;align-items:center;gap:16px;padding:16px 18px;border:1px solid #e4e7ec;border-left:4px solid #12b76a;border-radius:12px;background:#fff}.sf-device-row.is-offline{border-left-color:#f04438}.sf-device-row>div{display:flex;flex-direction:column;gap:4px}.sf-device-row span,.sf-device-row small{color:#667085;font-size:12px}.sf-device-row a{color:#16803c;font-weight:700;text-decoration:none}
.sf-head-actions{display:flex;gap:8px}.sf-maintenance-form{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;padding:22px;border:1px solid #e4e7ec;border-radius:14px;background:#fff}.sf-maintenance-form label{display:flex;flex-direction:column;gap:7px;color:#475467;font-weight:600}.sf-maintenance-form input,.sf-maintenance-form select{height:42px;border:1px solid #d0d5dd;border-radius:8px;padding:0 10px;background:#fff}.sf-maintenance-form textarea{min-height:100px;border:1px solid #d0d5dd;border-radius:8px;padding:10px;resize:vertical}.sf-maintenance-memo{grid-column:1/-1}.sf-maintenance-form button{grid-column:1/-1;justify-self:end;height:42px;border:0;border-radius:8px;padding:0 18px;background:#16803c;color:#fff;font-weight:700}.sf-maintenance-history{margin-top:28px}.sf-maintenance-history h2{margin-bottom:14px}.sf-maintenance-history article{display:grid;grid-template-columns:1fr 1fr 2fr auto;align-items:start;gap:16px;padding:18px;border:1px solid #e4e7ec;border-radius:12px;background:#fff;margin-bottom:10px}.sf-maintenance-history article>div{display:flex;flex-direction:column;gap:4px}.sf-maintenance-history span,.sf-maintenance-history small{color:#667085;font-size:12px}.sf-maintenance-history p{margin:0;color:#344054}
@media(max-width:1100px){.sf-sensor-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:1000px){.sf-device-row{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.sf-dashboard{padding:28px 16px 60px}.sf-dashboard__head,.sf-chart-panel__head{align-items:stretch;flex-direction:column}.sf-site-picker{min-width:0}.sf-summary{grid-template-columns:repeat(2,1fr)}.sf-sensor-grid{grid-template-columns:1fr}.sf-chart-filters{display:grid;grid-template-columns:1fr 1fr}.sf-chart-filters button{grid-column:1/-1}.sf-chart-panel{padding:18px}.sf-chart{overflow-x:auto}.sf-chart svg{min-width:720px}.sf-alert-item{grid-template-columns:1fr}.sf-alert-action{grid-template-columns:1fr}.sf-export-form,.sf-maintenance-form{grid-template-columns:1fr}.sf-export-form button,.sf-maintenance-form button{justify-self:stretch}.sf-device-filter{align-items:stretch;flex-direction:column}.sf-device-filter label{min-width:0;width:100%}.sf-device-row,.sf-maintenance-history article{grid-template-columns:1fr}.sf-head-actions{align-items:stretch;flex-direction:column}}

/* PDF 시안 기반 통합 관제 대시보드 */
.sf-control-room{max-width:none;padding:0 32px 72px;background:#08120f;color:#edf7f2;min-height:100vh}
.sf-control-room *{box-sizing:border-box}
.sf-control-room .sf-control-header{height:72px;margin:0 -32px 30px;padding:0 32px;border-bottom:1px solid rgba(129,205,168,.14);display:flex;align-items:center;justify-content:space-between;background:rgba(8,18,15,.94)}
.sf-brand{display:flex;align-items:center;gap:12px}.sf-brand__mark{display:grid;place-items:center;width:40px;height:40px;border:1px solid rgba(77,211,139,.35);border-radius:12px;background:#10261d}.sf-brand__mark svg{width:28px;height:28px;fill:none;stroke:#4dd38b;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.sf-brand strong,.sf-brand span{display:block}.sf-brand strong{font-size:16px;letter-spacing:.02em}.sf-brand span{margin-top:2px;color:#769889;font-size:10px;letter-spacing:.12em;text-transform:uppercase}
.sf-live-state{display:flex;align-items:center;gap:8px;color:#8dad9e;font-size:12px}.sf-live-state i{width:7px;height:7px;border-radius:50%;background:#4dd38b;box-shadow:0 0 0 5px rgba(77,211,139,.08),0 0 14px #4dd38b}.sf-live-state span{padding-left:7px;border-left:1px solid #263b32;color:#68877a}
.sf-control-room .sf-dashboard__head{align-items:center;max-width:1540px;margin:0 auto 24px}.sf-control-room .sf-dashboard__head h1{margin:5px 0 8px;color:#f5fbf8;font-size:30px}.sf-control-room .sf-dashboard__head p{color:#7c9a8c}.sf-control-room .sf-eyebrow,.sf-panel-kicker{margin:0!important;color:#4dd38b!important;font-size:10px!important;font-weight:800!important;letter-spacing:.16em}
.sf-control-room .sf-site-picker{min-width:0;flex-direction:row;align-items:end;gap:10px}.sf-control-room .sf-site-picker label{display:flex;flex-direction:column;gap:6px;color:#789588;font-size:11px}.sf-control-room .sf-site-picker select{width:210px;height:42px;border:1px solid #294239;border-radius:9px;padding:0 36px 0 12px;background:#10211b;color:#dbe9e2}
.sf-overview-grid{display:grid;grid-template-columns:minmax(480px,1.15fr) minmax(440px,.85fr);gap:16px;max-width:1540px;margin:0 auto 16px}.sf-status-panel,.sf-quick-panel,.sf-live-panel,.sf-control-room .sf-chart-panel{border:1px solid rgba(118,165,143,.17);border-radius:14px;background:linear-gradient(145deg,rgba(18,39,31,.96),rgba(11,25,20,.96));box-shadow:0 18px 50px rgba(0,0,0,.16)}
.sf-status-panel{display:grid;grid-template-columns:minmax(170px,1fr) 138px minmax(125px,.7fr);align-items:center;gap:24px;min-height:218px;padding:26px}.sf-status-panel h2,.sf-quick-panel h2,.sf-section-head h2,.sf-control-room .sf-chart-panel h2{margin:6px 0 0;color:#f2f8f5;font-size:19px}.sf-status-panel>div>p:last-child{margin:15px 0 0;color:#769587;font-size:13px;line-height:1.6}.sf-panel-kicker{white-space:nowrap}
.sf-status-ring{width:138px;height:138px;border-radius:50%;display:grid;place-items:center;background:conic-gradient(#4dd38b 0 var(--normal-angle),#f5bd4f var(--normal-angle) var(--warning-angle),var(--ring-tail) var(--warning-angle) 360deg);position:relative}.sf-status-ring:before{content:"";position:absolute;inset:13px;border-radius:50%;background:#10251d}.sf-status-ring>div{position:relative;text-align:center}.sf-status-ring strong,.sf-status-ring span{display:block}.sf-status-ring strong{font-size:32px;color:#fff}.sf-status-ring span{margin-top:2px;color:#6f9181;font-size:10px}
.sf-status-legend{display:grid;gap:13px;margin:0;padding:0;list-style:none}.sf-status-legend li{display:grid;grid-template-columns:8px 1fr auto;align-items:center;gap:9px;color:#789789;font-size:12px}.sf-status-legend i{width:7px;height:7px;border-radius:50%;background:#4dd38b}.sf-status-legend i.is-warning{background:#f5bd4f}.sf-status-legend i.is-offline{background:#f06767}.sf-status-legend strong{color:#e4f1eb;font-size:14px}
.sf-quick-panel{padding:26px}.sf-quick-panel>div{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:18px}.sf-quick-panel a{display:grid;grid-template-columns:36px 1fr;column-gap:11px;padding:13px;border:1px solid #233d33;border-radius:10px;color:#dcece4;text-decoration:none;background:rgba(21,46,36,.58);transition:.2s}.sf-quick-panel a:hover{border-color:#3b7058;background:#173d2d;transform:translateY(-1px)}.sf-quick-icon{grid-row:1/3;display:grid;place-items:center;width:36px;height:36px;border-radius:9px;background:#204b37;color:#5de19a;font-size:18px}.sf-quick-panel a strong{font-size:12px}.sf-quick-panel a small{margin-top:3px;color:#6e8d7f;font-size:10px}
.sf-live-panel{max-width:1540px;margin:0 auto 16px;padding:24px}.sf-section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:18px}.sf-control-room .sf-message{margin:0;padding:0;background:none;color:#6f9181;font-size:11px}.sf-control-room .sf-sensor-grid{grid-template-columns:repeat(4,minmax(190px,1fr));gap:11px}.sf-control-room .sf-sensor-card{min-height:168px;border:1px solid #254238;border-radius:11px;padding:17px;background:linear-gradient(145deg,#132a21,#0e2019)}.sf-control-room .sf-sensor-card:before{top:auto;bottom:0;height:2px;background:#4dd38b}.sf-control-room .sf-sensor-card.is-warning:before{background:#f5bd4f}.sf-control-room .sf-sensor-card.is-critical:before,.sf-control-room .sf-sensor-card.is-offline:before,.sf-control-room .sf-sensor-card.is-invalid:before{background:#f06767}.sf-control-room .sf-sensor-card__top span{color:#93b3a4;font-size:12px}.sf-control-room .sf-sensor-card__top em{padding:3px 7px;border-radius:20px;background:#18392a;color:#5fda96;font-size:9px}.sf-control-room .sf-sensor-card__value{margin:18px 0 15px}.sf-control-room .sf-sensor-card__value strong{color:#f4faf7;font-size:31px}.sf-control-room .sf-sensor-card__value span{color:#759487}.sf-control-room .sf-sensor-card dl{border-color:#264037}.sf-control-room .sf-sensor-card dl div{margin-top:5px}.sf-control-room .sf-sensor-card dt,.sf-control-room .sf-sensor-card dd{color:#668679;font-size:10px}
.sf-control-room .sf-chart-panel{max-width:1540px;margin:0 auto;padding:24px}.sf-control-room .sf-chart-filters label{color:#739286}.sf-control-room .sf-chart-filters select{border-color:#294239;background:#10211b;color:#dbe9e2}.sf-control-room .sf-chart-filters button{background:#3fbd78}.sf-control-room .sf-chart-message{color:#68877a;font-size:11px}.sf-control-room .sf-chart-grid{stroke:#234037}.sf-control-room .sf-chart-label{fill:#658578}.sf-control-room .sf-chart-line{stroke:#4dd38b}.sf-control-room .sf-chart-point{fill:#10251d;stroke:#4dd38b}.sf-control-room .sf-chart-current{fill:#68e5a2}.sf-control-room .sf-chart-legend span{color:#789789}.sf-control-room .sf-chart-legend strong{color:#dbe9e2}
.sf-control-room .sf-empty{border-color:#29443a;background:#10231c;color:#dcebe4}.sf-control-room .sf-empty p{color:#718f82}
@media(max-width:1100px){.sf-overview-grid{grid-template-columns:1fr}.sf-control-room .sf-sensor-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:760px){.sf-control-room{padding:0 15px 45px}.sf-control-room .sf-control-header{height:62px;margin:0 -15px 22px;padding:0 15px}.sf-live-state span{display:none}.sf-control-room .sf-dashboard__head{align-items:stretch}.sf-control-room .sf-site-picker{display:grid;grid-template-columns:1fr 1fr}.sf-control-room .sf-site-picker select{width:100%}.sf-overview-grid{display:block}.sf-status-panel{grid-template-columns:1fr 110px;gap:16px;min-height:0;margin-bottom:14px;padding:20px}.sf-status-ring{width:104px;height:104px}.sf-status-ring:before{inset:10px}.sf-status-ring strong{font-size:25px}.sf-status-legend{grid-column:1/-1;grid-template-columns:repeat(3,1fr)}.sf-quick-panel{margin-bottom:14px;padding:20px}.sf-quick-panel>div{grid-template-columns:1fr}.sf-section-head{align-items:flex-start;flex-direction:column}.sf-live-panel{padding:18px}.sf-control-room .sf-sensor-grid{grid-template-columns:1fr}.sf-control-room .sf-chart-panel{padding:18px}}

/* 스마트팜 페이지는 리빌더의 본문·서브 폭 설정을 우회해 전체 화면을 사용한다. */
section.sf-theme-full-width{width:100%!important;max-width:none!important;padding:0!important;margin:0!important}
section.sf-theme-full-width>#container_title{display:none!important}
section.sf-theme-full-width #rb_sidemenu_float{float:none!important;width:100%!important}
.sf-theme-full-width .sf-control-room{width:100%;max-width:none;margin:0}
body:has(.sf-theme-full-width) #cbp-hrmenu-btm{display:none!important}
.sf-public-control-room{padding-bottom:84px}
.sf-public-control-room .sf-control-header{position:relative;z-index:3;margin-bottom:0}
.sf-brand{text-decoration:none;color:inherit}.sf-brand>span:last-child strong,.sf-brand>span:last-child small{display:block}.sf-brand>span:last-child small{margin-top:2px;color:#769889;font-size:10px;letter-spacing:.12em;text-transform:uppercase}
.sf-public-user{display:flex;align-items:center;gap:9px}.sf-public-user .sf-live-state{margin-right:8px}.sf-header-button{display:inline-flex;align-items:center;justify-content:center;height:38px;padding:0 14px;border:1px solid #294239;border-radius:9px;color:#a9c1b6;text-decoration:none;font-size:11px;font-weight:700;background:#10211b}.sf-header-button:hover{border-color:#4b7b65;color:#fff}.sf-header-button.is-primary{border-color:#42b977;background:#42b977;color:#07120d}
.sf-demo-badge{display:inline-flex;align-items:center;gap:7px;height:27px;padding:0 10px;border:1px solid rgba(245,189,79,.35);border-radius:30px;background:rgba(245,189,79,.08);color:#f5bd4f;font-size:9px;font-weight:800;letter-spacing:.12em}.sf-demo-badge i{width:6px;height:6px;border-radius:50%;background:#f5bd4f;box-shadow:0 0 8px rgba(245,189,79,.8)}
.sf-user-chip{display:flex;align-items:center;gap:9px;padding-right:4px;color:#dcebe4;text-decoration:none}.sf-user-chip>span:last-child small,.sf-user-chip>span:last-child strong{display:block}.sf-user-chip>span:last-child small{color:#68877a;font-size:9px}.sf-user-chip>span:last-child strong{margin-top:2px;font-size:11px}.sf-user-avatar{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;background:#204b37;color:#64df9d;font-size:12px;font-weight:800}
.sf-public-hero{position:relative;display:flex;align-items:flex-end;justify-content:space-between;gap:40px;min-height:320px;margin:0 -32px 18px;padding:70px max(32px,calc((100vw - 1540px)/2 + 32px)) 54px;overflow:hidden;background:radial-gradient(circle at 80% 15%,rgba(55,179,109,.16),transparent 30%),linear-gradient(115deg,#07130e,#0d241a)}.sf-public-hero:before{content:"";position:absolute;width:430px;height:430px;right:8%;top:-260px;border:1px solid rgba(84,207,141,.12);border-radius:50%;box-shadow:0 0 0 70px rgba(84,207,141,.025),0 0 0 140px rgba(84,207,141,.018)}.sf-public-hero>div,.sf-public-picker{position:relative}.sf-public-hero h1{margin:12px 0 14px;color:#eff9f4;font-size:44px;line-height:1.17;letter-spacing:-.045em}.sf-public-hero h1 em{color:#55d991;font-style:normal}.sf-public-hero>div>p:last-child{margin:0;color:#769688;font-size:14px}
.sf-public-picker{display:flex;flex-direction:column;gap:8px;width:300px;padding:20px;border:1px solid rgba(90,175,133,.2);border-radius:13px;background:rgba(16,36,28,.78);backdrop-filter:blur(8px)}.sf-public-picker span{color:#7e9e8f;font-size:11px}.sf-public-picker select{height:46px;border:1px solid #315044;border-radius:9px;padding:0 14px;background:#0d2119;color:#e1ede7}
.sf-public-empty{display:flex;align-items:center;gap:17px;max-width:1540px;margin:0 auto 18px;padding:18px 22px;border:1px dashed #305044;border-radius:12px;background:#0e2019}.sf-public-empty>span{display:grid;place-items:center;width:42px;height:42px;border-radius:10px;background:#17392a;color:#54d790;font-size:20px}.sf-public-empty strong{color:#dbe9e2;font-size:13px}.sf-public-empty p{margin:4px 0 0;color:#6f8e80;font-size:11px}
.sf-public-overview{grid-template-columns:minmax(520px,1fr) minmax(420px,1fr)}.sf-public-info-panel{padding:26px;border:1px solid rgba(118,165,143,.17);border-radius:14px;background:linear-gradient(145deg,rgba(18,39,31,.96),rgba(11,25,20,.96))}.sf-public-info-panel h2{margin:6px 0 8px;color:#f2f8f5;font-size:19px}.sf-public-info-panel>p:not(.sf-panel-kicker){margin:0;color:#739184;font-size:12px}.sf-public-info-panel ul{display:grid;grid-template-columns:repeat(3,1fr);gap:9px;margin:20px 0 0;padding:0;list-style:none}.sf-public-info-panel li{display:flex;gap:9px;padding:13px 10px;border:1px solid #233d33;border-radius:9px;background:rgba(21,46,36,.52)}.sf-public-info-panel li i{color:#4fd18a;font-size:10px;font-style:normal}.sf-public-info-panel li strong,.sf-public-info-panel li small{display:block}.sf-public-info-panel li strong{color:#d9e9e1;font-size:11px}.sf-public-info-panel li small{margin-top:4px;color:#668477;font-size:9px;line-height:1.4}
.sf-public-live{min-height:280px}.sf-public-live .sf-sensor-grid{grid-template-columns:repeat(4,minmax(190px,1fr))}.sf-public-live .sf-sensor-card{display:flex;flex-direction:column;min-height:260px}.sf-public-live .sf-sensor-card>p{margin:auto 0 0;padding-top:12px;border-top:1px solid #264037;color:#668679;font-size:10px}.sf-public-live .sf-sensor-card time{float:right}.sf-metric-gauge{--gauge-color:#4dd38b;position:relative;display:grid;place-items:center;width:148px;height:148px;margin:18px auto 20px;border-radius:50%;background:conic-gradient(var(--gauge-color) 0 var(--gauge-value),#213a30 var(--gauge-value) 100%);filter:drop-shadow(0 8px 18px rgba(0,0,0,.18))}.sf-metric-gauge:before{content:"";position:absolute;inset:12px;border-radius:50%;background:radial-gradient(circle at 50% 35%,#17372a,#0d2119 72%);box-shadow:inset 0 0 0 1px rgba(115,180,148,.12)}.sf-metric-gauge:after{content:"";position:absolute;inset:5px;border-radius:50%;border:1px solid rgba(105,195,151,.12)}.sf-metric-gauge>div{position:relative;z-index:1;text-align:center}.sf-metric-gauge strong,.sf-metric-gauge span{display:block}.sf-metric-gauge strong{color:#f5fbf8;font-size:29px;line-height:1;letter-spacing:-.04em}.sf-metric-gauge span{margin-top:7px;color:#719184;font-size:10px}.sf-public-live .sf-sensor-card.is-warning .sf-metric-gauge{--gauge-color:#f5bd4f}.sf-public-live .sf-sensor-card.is-critical .sf-metric-gauge,.sf-public-live .sf-sensor-card.is-offline .sf-metric-gauge,.sf-public-live .sf-sensor-card.is-invalid .sf-metric-gauge{--gauge-color:#f06767}
@media(max-width:1100px){.sf-public-live .sf-sensor-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:900px){.sf-public-info-panel ul{grid-template-columns:1fr}.sf-public-hero h1{font-size:37px}.sf-public-user .sf-live-state{display:none}}
@media(max-width:760px){.sf-public-control-room .sf-control-header{height:auto;min-height:66px;gap:10px;padding-top:10px;padding-bottom:10px}.sf-public-user{gap:6px}.sf-user-chip>span:last-child{display:none}.sf-header-button{height:34px;padding:0 10px}.sf-public-hero{align-items:stretch;flex-direction:column;min-height:0;margin:0 -15px 14px;padding:48px 20px 32px}.sf-public-hero h1{font-size:32px}.sf-public-picker{width:100%}.sf-public-overview{display:block}.sf-public-info-panel{margin-bottom:14px;padding:20px}.sf-public-info-panel ul{grid-template-columns:1fr}.sf-public-empty{margin-bottom:14px}.sf-public-live .sf-sensor-grid{grid-template-columns:1fr}}

/* 첨부 구조도 기반 공개 모니터링 레이아웃 */
.sf-blueprint-layout{max-width:1720px;margin:0 auto;padding-top:18px}.sf-blueprint-content{min-width:0}.sf-blueprint-titlebar{display:flex;align-items:end;justify-content:space-between;gap:20px;margin-bottom:14px}.sf-blueprint-titlebar h1{margin:5px 0 0;color:#f0f8f4;font-size:26px}.sf-blueprint-titlebar .sf-public-picker{width:260px;padding:13px}.sf-blueprint-titlebar .sf-public-picker select{height:40px}
.sf-blueprint-top{display:grid;grid-template-columns:1.05fr 1fr .95fr;gap:12px;margin-bottom:12px}.sf-blueprint-panel{border:1px solid rgba(118,165,143,.18);border-radius:14px;background:linear-gradient(145deg,rgba(18,39,31,.98),rgba(11,25,20,.98));box-shadow:0 15px 42px rgba(0,0,0,.14)}.sf-blueprint-top>.sf-blueprint-panel{min-height:275px;padding:20px}.sf-panel-heading{display:grid;grid-template-columns:27px 1fr;align-items:center;column-gap:8px}.sf-panel-heading>span{grid-row:1/3;display:grid;place-items:center;width:27px;height:27px;border-radius:8px;background:#193e2e;color:#50d68c;font-size:12px}.sf-panel-heading h2{margin:0;color:#e8f3ed;font-size:14px}.sf-panel-heading small{color:#638276;font-size:9px}
.sf-cctv-visual{position:relative;display:flex;align-items:center;justify-content:center;flex-direction:column;height:195px;margin-top:16px;border-radius:11px;overflow:hidden;background:radial-gradient(circle at 42% 30%,rgba(56,135,91,.32),transparent 25%),linear-gradient(155deg,rgba(15,56,37,.76),rgba(5,20,14,.95)),repeating-linear-gradient(90deg,transparent 0 38px,rgba(104,181,144,.05) 39px 40px)}.sf-cctv-visual:before,.sf-cctv-visual:after{content:"";position:absolute;bottom:-30px;width:180px;height:135px;border:1px solid rgba(84,186,135,.12);border-radius:50%}.sf-cctv-visual:before{left:-20px;transform:rotate(20deg)}.sf-cctv-visual:after{right:-40px;transform:rotate(-25deg)}.sf-cctv-visual i{width:38px;height:38px;border:1px solid rgba(84,218,145,.55);border-radius:50%;background:rgba(22,62,43,.68)}.sf-cctv-visual i:after{content:"▶";display:grid;place-items:center;height:100%;padding-left:2px;color:#69e2a1;font-size:11px}.sf-cctv-visual>span{margin-top:9px;color:#73d9a0;font-size:9px;letter-spacing:.14em}.sf-cctv-visual p{margin:5px 0 0;color:#648477;font-size:9px}
.sf-crop-chart{position:relative;margin-top:12px}.sf-crop-score{display:flex;align-items:baseline;gap:8px}.sf-crop-score strong{color:#58db94;font-size:28px}.sf-crop-score span{color:#6f8e81;font-size:9px}.sf-crop-chart svg{display:block;width:100%;height:125px;margin-top:4px}.sf-crop-area{fill:url(#sfCropFill)}.sf-crop-line{fill:none;stroke:#4dd38b;stroke-width:3;vector-effect:non-scaling-stroke}.sf-crop-days{display:flex;justify-content:space-between;color:#57766a;font-size:8px}
.sf-integrated-body{display:flex;align-items:center;justify-content:center;gap:26px;margin-top:21px}.sf-integrated-panel .sf-status-ring{width:130px;height:130px}.sf-integrated-panel>p{margin:14px 0 0;text-align:center;color:#6c8b7d;font-size:10px}
.sf-blueprint-bottom{display:grid;grid-template-columns:minmax(0,1fr) 315px;gap:12px;align-items:stretch}.sf-blueprint-bottom>.sf-public-live{min-height:430px;padding:20px}.sf-blueprint-bottom .sf-public-live .sf-sensor-grid{grid-template-columns:repeat(4,minmax(150px,1fr));gap:10px}.sf-blueprint-bottom .sf-public-live .sf-sensor-card{min-height:205px;padding:14px}.sf-blueprint-bottom .sf-public-live .sf-sensor-card>p{font-size:8px}.sf-blueprint-bottom .sf-public-live .sf-sensor-card time{display:block;float:none;margin-top:3px}
.sf-semi-gauge{--gauge-color:#4dd38b;position:relative;width:150px;height:102px;margin:14px auto 12px}.sf-semi-gauge svg{display:block;width:150px;height:90px;overflow:visible}.sf-semi-gauge path{fill:none;stroke-width:11;stroke-linecap:round}.sf-semi-track{stroke:#243d33}.sf-semi-value{stroke:var(--gauge-color);filter:drop-shadow(0 0 5px rgba(77,211,139,.3))}.sf-semi-gauge>div{position:absolute;left:0;right:0;top:39px;text-align:center}.sf-semi-gauge strong,.sf-semi-gauge span{display:block}.sf-semi-gauge strong{color:#f2f9f5;font-size:23px;line-height:1}.sf-semi-gauge span{margin-top:5px;color:#718f82;font-size:9px}.sf-semi-gauge>small{position:absolute;bottom:0;color:#59786b;font-size:8px}.sf-gauge-min{left:5px}.sf-gauge-max{right:5px}.sf-sensor-card.is-warning .sf-semi-gauge{--gauge-color:#f5bd4f}.sf-sensor-card.is-critical .sf-semi-gauge,.sf-sensor-card.is-offline .sf-semi-gauge,.sf-sensor-card.is-invalid .sf-semi-gauge{--gauge-color:#f06767}
.sf-connection-panel{padding:20px}.sf-connection-list{display:grid;gap:7px;margin-top:17px}.sf-connection-list>p{color:#69887a;font-size:11px}.sf-connection-list>div{display:grid;grid-template-columns:31px 1fr auto;align-items:center;gap:9px;padding:9px;border:1px solid #213b31;border-radius:9px;background:rgba(17,43,32,.55)}.sf-connection-icon{display:grid;place-items:center;width:31px;height:31px;border-radius:8px;background:#38252a;color:#e86c76}.sf-connection-icon.is-connected{background:#183c2c;color:#54d98f}.sf-connection-list strong,.sf-connection-list small{display:block}.sf-connection-list strong{color:#cfe1d8;font-size:10px}.sf-connection-list small{margin-top:2px;color:#607f72;font-size:8px}.sf-connection-list em{color:#65c991;font-size:8px;font-style:normal}
@media(max-width:1250px){.sf-blueprint-top{grid-template-columns:1fr 1fr}.sf-integrated-panel{grid-column:1/-1}.sf-blueprint-bottom{grid-template-columns:1fr}.sf-connection-list{grid-template-columns:repeat(2,1fr)}}
@media(max-width:950px){.sf-blueprint-top{grid-template-columns:1fr}.sf-integrated-panel{grid-column:auto}.sf-blueprint-bottom .sf-public-live .sf-sensor-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:620px){.sf-blueprint-titlebar{align-items:stretch;flex-direction:column}.sf-blueprint-titlebar .sf-public-picker{width:100%}.sf-blueprint-bottom .sf-public-live .sf-sensor-grid,.sf-connection-list{grid-template-columns:1fr}.sf-blueprint-top>.sf-blueprint-panel{min-height:0}.sf-semi-gauge{transform:scale(.95)}}

/* 스마트팜 관리자 서브페이지 공통 배경과 표면 */
body:has(.sf-dashboard) .contents_wrap,
body:has(.sf-dashboard) .contents_wrap>section.sub{background:#08120f!important}
.sf-dashboard:not(.sf-public-control-room){width:100%;max-width:1540px;min-height:calc(100vh - 140px);margin:0 auto;padding:38px 30px 76px;color:#e8f3ed;background:#08120f}
.sf-dashboard:not(.sf-public-control-room) .sf-dashboard__head{margin-bottom:28px}
.sf-dashboard:not(.sf-public-control-room) .sf-dashboard__head h1{color:#f3faf6}
.sf-dashboard:not(.sf-public-control-room) .sf-dashboard__head p{color:#789688}
.sf-dashboard:not(.sf-public-control-room) .sf-back-link{border-color:#294239;color:#a9c1b6;background:#10231b}
.sf-dashboard:not(.sf-public-control-room) .sf-back-link:hover{border-color:#4a745f;color:#fff}
.sf-dashboard:not(.sf-public-control-room) .sf-message{border:1px solid #213b31;background:#10231b;color:#789688}
.sf-dashboard:not(.sf-public-control-room) .sf-summary article,
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item,
.sf-dashboard:not(.sf-public-control-room) .sf-export-form,
.sf-dashboard:not(.sf-public-control-room) .sf-device-row,
.sf-dashboard:not(.sf-public-control-room) .sf-maintenance-form,
.sf-dashboard:not(.sf-public-control-room) .sf-maintenance-history article{border-color:#254138;background:#10231b;color:#dceae3;box-shadow:none}
.sf-dashboard:not(.sf-public-control-room) input,
.sf-dashboard:not(.sf-public-control-room) select,
.sf-dashboard:not(.sf-public-control-room) textarea{border-color:#2b493d!important;background:#0c1e17!important;color:#dceae3!important}
.sf-dashboard:not(.sf-public-control-room) .sf-device-row span,
.sf-dashboard:not(.sf-public-control-room) .sf-device-row small,
.sf-dashboard:not(.sf-public-control-room) .sf-maintenance-history span,
.sf-dashboard:not(.sf-public-control-room) .sf-maintenance-history small,
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item__content p,
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item__content small{color:#708f81}
.sf-dashboard:not(.sf-public-control-room) .sf-device-row a{color:#55d991}

/* 공통 헤더와 관리자 대시보드 본문 사이의 호흡 */
.sf-control-room:not(.sf-public-control-room){padding-top:30px}
@media(max-width:760px){.sf-dashboard:not(.sf-public-control-room){padding:26px 15px 55px}.sf-control-room:not(.sf-public-control-room){padding-top:22px}}

/* 관리자 대시보드 센서 카드도 메인과 동일한 반원 게이지를 사용한다. */
.sf-control-room:not(.sf-public-control-room) .sf-sensor-card{display:flex;flex-direction:column;min-height:260px}
.sf-control-room:not(.sf-public-control-room) .sf-sensor-card .sf-semi-gauge{margin-top:14px;margin-bottom:14px}
.sf-control-room:not(.sf-public-control-room) .sf-sensor-card dl{margin-top:auto}

/* 경보 페이지 다크 테마 */
.sf-dashboard:not(.sf-public-control-room) .sf-alert-list .sf-empty{border-color:#2a493c;background:#10231b;color:#dceae3}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-list .sf-empty strong{color:#dceae3}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item{border-color:#29463a;border-left-color:#f5bd4f;background:linear-gradient(145deg,#12291f,#0e2019)}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item.is-critical{border-left-color:#f06767}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item__content>div>span:not(.sf-alert-severity){color:#8da99c}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item__content h2{color:#edf7f2}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-severity{border:1px solid rgba(245,189,79,.28);background:rgba(245,189,79,.1);color:#f5bd4f}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-item.is-critical .sf-alert-severity{border-color:rgba(240,103,103,.3);background:rgba(240,103,103,.1);color:#f58a8a}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-action{padding-left:18px;border-left:1px solid #294138}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-action input::placeholder{color:#547065}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-action button{background:#45c27b;color:#07150e;cursor:pointer}
.sf-dashboard:not(.sf-public-control-room) .sf-alert-action button:hover{background:#59d58e}
@media(max-width:760px){.sf-dashboard:not(.sf-public-control-room) .sf-alert-action{padding-top:16px;padding-left:0;border-top:1px solid #294138;border-left:0}}

/* 장비 점검이력 페이지 다크 테마 */
.sf-maintenance-page .sf-maintenance-form{background:linear-gradient(145deg,#12291f,#0e2019)}
.sf-maintenance-page .sf-maintenance-form label{color:#9bb5a9}
.sf-maintenance-page .sf-maintenance-form input::placeholder,
.sf-maintenance-page .sf-maintenance-form textarea::placeholder{color:#547065}
.sf-maintenance-page .sf-maintenance-form input:focus,
.sf-maintenance-page .sf-maintenance-form select:focus,
.sf-maintenance-page .sf-maintenance-form textarea:focus{border-color:#4bbd7e!important;outline:2px solid rgba(75,189,126,.12)}
.sf-maintenance-page .sf-maintenance-form button{background:#45c27b;color:#07150e;cursor:pointer}
.sf-maintenance-page .sf-maintenance-form button:hover{background:#59d58e}
.sf-maintenance-page .sf-maintenance-history h2{color:#edf7f2}
.sf-maintenance-page .sf-maintenance-history article{border-color:#29463a;background:linear-gradient(145deg,#12291f,#0e2019)}
.sf-maintenance-page .sf-maintenance-history article>div strong{color:#e4f1eb}
.sf-maintenance-page .sf-maintenance-history p{color:#a5bdb2;line-height:1.6}
.sf-maintenance-page .sf-maintenance-history small{color:#66877a}
.sf-maintenance-page .sf-maintenance-history .sf-empty{border-color:#2a493c;background:#10231b;color:#dceae3}
.sf-maintenance-page .sf-maintenance-history .sf-empty strong{color:#dceae3}
