:root{--green:#173b31;--green2:#21463b;--mint:#e9f2ee;--line:#dde5e1;--text:#1f2925;--muted:#6d7772;--bg:#f5f7f6;--white:#fff;--danger:#b43a43;--shadow:0 18px 55px rgba(23,59,49,.12)}
*{box-sizing:border-box}body.portal-body{margin:0;background:var(--bg);color:var(--text);font-family:Pretendard,"Noto Sans KR",Arial,sans-serif}.portal-shell{min-height:100vh}.portal-header{height:72px;background:#fff;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;padding:0 34px;position:sticky;top:0;z-index:20}.portal-logo{display:flex;align-items:center;gap:12px;text-decoration:none;color:var(--green);font-weight:900}.portal-logo img{height:34px}.portal-nav{display:flex;align-items:center;gap:10px}.portal-btn,.portal-nav a{border:1px solid var(--line);background:#fff;color:var(--text);border-radius:12px;padding:11px 16px;text-decoration:none;font-size:14px;font-weight:700;cursor:pointer;white-space:nowrap}.portal-btn.primary,.portal-nav a.primary{background:var(--green);color:#fff;border-color:var(--green)}.portal-layout{display:grid;grid-template-columns:250px minmax(0,1fr);min-height:calc(100vh - 72px);transition:grid-template-columns .18s ease}.portal-sidebar{background:#fff;border-right:1px solid var(--line);padding:24px 18px;transition:padding .18s ease}.portal-profile{padding:18px;background:var(--mint);border-radius:18px;margin-bottom:22px}.portal-profile b{display:block;font-size:17px;margin-bottom:6px}.portal-profile span{font-size:12px;color:var(--muted)}.portal-menu{display:grid;gap:7px}.portal-menu button,.portal-menu a{width:100%;text-align:left;border:0;background:transparent;border-radius:12px;padding:13px 14px;color:#44504b;font-weight:700;text-decoration:none;cursor:pointer}.portal-menu button.active,.portal-menu a.active,.portal-menu button:hover,.portal-menu a:hover{background:var(--green);color:#fff}.portal-main{padding:30px 34px 70px;min-width:0}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:20px;margin-bottom:24px}.page-head h1{margin:0 0 7px;font-size:28px}.page-head p{margin:0;color:var(--muted);font-size:14px}.status-pill{display:inline-flex;align-items:center;gap:7px;padding:9px 12px;border-radius:999px;background:#fff7df;color:#7a5b08;font-size:12px;font-weight:800}.status-pill i{width:8px;height:8px;border-radius:50%;background:#e6ad16}.metric-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:22px}.metric-card{background:#fff;border:1px solid var(--line);border-radius:18px;padding:20px}.metric-card span{font-size:12px;color:var(--muted)}.metric-card b{display:block;margin-top:9px;font-size:27px}.panel{background:#fff;border:1px solid var(--line);border-radius:20px;padding:24px;box-shadow:0 2px 8px rgba(20,45,36,.03);margin-bottom:18px}.panel-head{display:flex;align-items:center;justify-content:space-between;gap:15px;margin-bottom:18px}.panel-head h2{margin:0;font-size:19px}.panel-head small{color:var(--muted)}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}.field{display:grid;gap:8px}.field.full{grid-column:1/-1}.field label{font-size:13px;font-weight:800}.field input,.field select,.field textarea{width:100%;border:1px solid #cfd9d4;border-radius:12px;background:#fff;padding:13px 14px;font:inherit;outline:none}.field textarea{min-height:110px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(23,59,49,.08)}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:20px}.stepper{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-bottom:24px}.step{background:#fff;border:1px solid var(--line);border-radius:16px;padding:16px;display:flex;gap:12px;align-items:center}.step .num{width:30px;height:30px;border-radius:50%;display:grid;place-items:center;background:#e8eeeb;color:var(--green);font-weight:900}.step.active{border-color:var(--green);box-shadow:0 0 0 2px rgba(23,59,49,.06)}.step.active .num{background:var(--green);color:#fff}.step b{display:block;font-size:13px}.step span{display:block;font-size:11px;color:var(--muted);margin-top:3px}.upload-zone{border:1.5px dashed #aebdb6;background:#f8fbfa;border-radius:16px;min-height:145px;display:grid;place-items:center;text-align:center;padding:24px;cursor:pointer}.upload-zone b{display:block;margin-bottom:6px}.upload-zone span{font-size:12px;color:var(--muted)}.preview-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px;margin-top:12px}.preview-item{aspect-ratio:4/3;border-radius:12px;background:#e8eeeb;overflow:hidden;position:relative}.preview-item img{width:100%;height:100%;object-fit:cover}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th,.data-table td{padding:14px 12px;border-bottom:1px solid #edf1ef;text-align:left;vertical-align:middle}.data-table th{color:var(--muted);font-size:12px;background:#fafcfa}.badge{display:inline-flex;padding:6px 9px;border-radius:999px;font-size:11px;font-weight:800;background:#eef4f1;color:var(--green)}.badge.wait{background:#fff4dd;color:#95680a}.badge.reject{background:#fdebed;color:#a92f3b}.thumb{width:70px;height:50px;border-radius:9px;object-fit:cover}.row-actions{display:flex;gap:6px}.row-actions button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 9px;cursor:pointer;white-space:nowrap}.empty-state{text-align:center;padding:48px 20px;color:var(--muted)}.auth-page{min-height:100vh;display:grid;grid-template-columns:1.05fr .95fr;background:#fff}.auth-visual{background:linear-gradient(145deg,#15382f,#2a5d4d);color:#fff;padding:54px;display:flex;flex-direction:column;justify-content:space-between}.auth-visual img{width:150px;filter:brightness(0) invert(1)}.auth-copy h1{font-size:42px;line-height:1.2;margin:0 0 18px}.auth-copy p{line-height:1.8;color:rgba(255,255,255,.75)}.auth-flow{display:grid;gap:10px}.auth-flow div{border:1px solid rgba(255,255,255,.16);background:rgba(255,255,255,.07);border-radius:14px;padding:14px 16px;font-size:13px}.auth-panel{display:grid;place-items:center;padding:40px}.auth-card{width:min(470px,100%)}.auth-card h2{font-size:30px;margin:0 0 9px}.auth-card>p{color:var(--muted);margin:0 0 26px}.auth-tabs{display:flex;background:#edf2ef;border-radius:12px;padding:4px;margin-bottom:22px}.auth-tabs button{flex:1;border:0;background:transparent;padding:11px;border-radius:9px;font-weight:800;cursor:pointer}.auth-tabs button.active{background:#fff;box-shadow:0 3px 10px rgba(22,50,40,.08)}.auth-form{display:grid;gap:14px}.helper{font-size:12px;color:var(--muted);line-height:1.6}.check-line{display:flex;gap:8px;align-items:flex-start;font-size:12px;color:#555}.wide{width:100%}.admin-banner{background:linear-gradient(90deg,#18231f,#2b443b);color:#fff;border-radius:18px;padding:20px 22px;display:flex;justify-content:space-between;align-items:center;margin-bottom:18px}.admin-banner b{font-size:18px}.admin-banner span{display:block;margin-top:5px;color:rgba(255,255,255,.68);font-size:12px}.mode-switch{position:fixed;right:22px;bottom:22px;z-index:40;border:0;border-radius:999px;padding:14px 18px;background:#101815;color:#fff;font-weight:800;box-shadow:var(--shadow);cursor:pointer}.toast-ui{position:fixed;left:50%;bottom:28px;transform:translateX(-50%) translateY(20px);background:#14251f;color:#fff;padding:12px 18px;border-radius:12px;opacity:0;pointer-events:none;transition:.2s;z-index:1100}.toast-ui.show{opacity:1;transform:translateX(-50%) translateY(0)}.section-view{display:none}.section-view.active{display:block}.mobile-only{display:none}.sidebar-toggle-btn{display:none;position:fixed;top:90px;left:0;z-index:15;width:22px;height:44px;border:1px solid var(--line);border-left:0;border-radius:0 10px 10px 0;background:#fff;color:#44504b;cursor:pointer;font-size:15px;font-weight:900;align-items:center;justify-content:center;padding:0}.portal-layout.sales-sidebar-mode{grid-template-columns:0 minmax(0,1fr)}.portal-layout.sales-sidebar-mode .portal-sidebar{overflow:hidden;padding:0;border-right:0}.portal-layout.sales-sidebar-mode .sidebar-toggle-btn{display:flex}.portal-layout.sales-sidebar-mode.sidebar-expanded{grid-template-columns:250px minmax(0,1fr)}.portal-layout.sales-sidebar-mode.sidebar-expanded .portal-sidebar{overflow:visible;padding:24px 18px;border-right:1px solid var(--line)}
/* v2.5.41(2026-08-23) UX 도면 F11/F7 -- 최근 방문 메뉴 고정 + 대시보드 숫자 클릭 이동 */
.portal-menu-recent{margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.portal-menu-recent-label{font-size:11px;font-weight:800;color:var(--muted);text-transform:uppercase;letter-spacing:.04em;padding:4px 14px 6px}
.metric-card.clickable{cursor:pointer;transition:box-shadow .15s ease,transform .15s ease}
.metric-card.clickable:focus-visible{outline:2px solid var(--green);outline-offset:2px}
.metric-card.clickable span{display:flex;align-items:center;gap:6px}
.metric-card.clickable span::after{content:"›";margin-left:auto;color:#b7c1bc;font-weight:900}
tr.clickable{cursor:pointer}
/* v2.5.41(2026-08-23) UX 도면 F9 -- 업체 대시보드 "이번 주 성과" */
.insights-compare{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:12px;margin-bottom:16px}
.insights-stat{background:var(--bg);border-radius:12px;padding:14px}
.insights-stat span{display:block;font-size:12px;color:var(--muted);margin-bottom:6px}
.insights-stat b{font-size:22px}
.insights-delta{font-size:12px;font-weight:800;margin-left:6px}
.insights-delta.up{color:#1f7a4d}
.insights-delta.down{color:#c8353e}
.insights-hints{display:grid;gap:8px}
.insights-hint{display:flex;gap:8px;align-items:flex-start;padding:12px 14px;background:#fff7df;border-radius:10px;font-size:13px;color:#7a5b08;line-height:1.5}
@media(max-width:900px){.portal-layout{grid-template-columns:1fr}.portal-sidebar{display:none}.portal-main{padding:22px 16px 60px}.metric-grid{grid-template-columns:repeat(2,1fr)}.form-grid{grid-template-columns:1fr}.preview-grid{grid-template-columns:repeat(2,1fr)}.auth-page{grid-template-columns:1fr}.auth-visual{display:none}.portal-header{padding:0 16px}.portal-nav a:not(.primary){display:none}.stepper{grid-template-columns:1fr}.data-table{min-width:760px}.table-wrap{overflow:auto}.mobile-only{display:block}}

/* 분리된 로그인·회원가입 페이지 */
.auth-page-label{display:inline-flex;padding:6px 10px;border-radius:999px;background:#eef7f1;color:#16834a;font-size:12px;font-weight:800;margin-bottom:12px}.auth-option-row{display:flex;justify-content:space-between;align-items:center;gap:12px}.text-button{border:0;background:none;color:#65716b;font-size:12px;cursor:pointer}.auth-separator{display:flex;align-items:center;gap:10px;margin:22px 0 14px;color:#8a948f;font-size:12px}.auth-separator:before,.auth-separator:after{content:"";height:1px;background:#e5e9e7;flex:1}.link-button{display:flex;align-items:center;justify-content:center;text-decoration:none;box-sizing:border-box}.portal-btn.outline{background:#fff;border:1px solid #cfd8d3;color:#26332d}.auth-flow .active{border-color:#55d388;background:rgba(85,211,136,.13)}
.auth-logo-box{position:relative;left:auto;top:auto;width:156px;height:60px;display:flex;align-items:center;justify-content:center;padding:8px 12px;border-radius:8px;background:#fff;box-shadow:0 4px 14px rgba(0,0,0,.12)}.auth-logo-box img{max-width:100%;max-height:100%;object-fit:contain;filter:none!important}.best-summary{display:flex;justify-content:space-between;gap:12px;padding:14px 16px;margin-bottom:16px;border-radius:12px;background:#eaf4ef}.best-selector,.admin-best-selector{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.best-choice{display:flex;align-items:center;gap:9px;padding:12px;border:1px solid #d9e2dd;border-radius:10px;background:#fff}.best-choice:has(input:checked){border-color:var(--green);background:var(--mint)}.best-price{margin-top:16px;text-align:right;font-size:14px}.best-price b{font-size:20px;color:#184c3d}.admin-best-box{display:grid;gap:16px}.admin-best-box h3{margin:0;font-size:16px}.admin-best-note{color:var(--muted);font-size:12px}.admin-best-table{margin-top:4px}@media(max-width:768px){.check-line{min-height:44px;align-items:center}.text-button{min-height:44px;display:inline-flex;align-items:center}.check-line input[type=checkbox]{width:18px;height:18px;accent-color:var(--green);flex:0 0 auto}.terms-link{min-height:44px;display:inline-flex;align-items:center}.auth-page{display:block}.auth-visual{min-height:38vh;padding:24px}.auth-logo-box{left:auto;top:auto}.auth-panel{padding:24px 16px}.portal-layout{display:block}.portal-sidebar{display:block;position:sticky;top:0;width:100%;height:auto;z-index:20}.portal-menu{display:flex;overflow-x:auto}.portal-menu button{flex:0 0 auto}.portal-main{padding:20px 14px}.metric-grid{grid-template-columns:repeat(2,1fr)}.best-selector,.admin-best-selector{grid-template-columns:1fr}.portal-header{padding:0 14px}.portal-logo span{display:none}}

/* 관리자 고객 채팅 */
.portal-menu [data-view="chatMonitorView"],.portal-menu [data-view="supportView"],.portal-menu [data-view="customerChatView"],.portal-menu [data-view="companySupportView"]{display:flex;align-items:center;justify-content:space-between;gap:8px}.portal-chat-count{display:inline-grid;place-items:center;min-width:19px;height:19px;padding:0 5px;border-radius:999px;background:#bb1730;color:#fff;font-size:9px;font-weight:900}.portal-chat-count[hidden]{display:none}
.admin-chat-layout{display:grid;grid-template-columns:300px minmax(0,1fr);min-height:640px;overflow:hidden;border:1px solid var(--line);border-radius:20px;background:#fff;box-shadow:0 2px 8px rgba(20,45,36,.03)}.admin-chat-list{overflow-y:auto;padding:12px;border-right:1px solid var(--line);background:#f7f9f8}.admin-chat-list-empty,.admin-chat-empty{display:grid;place-items:center;min-height:180px;padding:25px;text-align:center;color:var(--muted);font-size:12px;line-height:1.7}.admin-chat-list-item{width:100%;display:grid;grid-template-columns:44px minmax(0,1fr) auto;gap:10px;align-items:center;margin-bottom:8px;padding:12px;border:1px solid #e1e8e4;border-radius:13px;background:#fff;text-align:left;cursor:pointer}.admin-chat-list-item.active{border-color:var(--green);box-shadow:0 0 0 2px rgba(23,59,49,.07)}.admin-chat-avatar{width:44px;height:44px;display:grid;place-items:center;border-radius:50%;background:var(--green);color:#fff;font-size:11px;font-weight:900}.admin-chat-list-copy{min-width:0}.admin-chat-list-copy b,.admin-chat-list-copy span{display:block;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}.admin-chat-list-copy b{font-size:13px}.admin-chat-list-copy span{margin-top:4px;color:var(--muted);font-size:10px}.admin-chat-list-meta{text-align:right;color:#9aa39e;font-size:8px}.admin-chat-unread{display:grid;place-items:center;min-width:20px;height:20px;margin-top:5px;padding:0 5px;border-radius:999px;background:#bb1730;color:#fff;font-size:9px;font-weight:900}.admin-chat-room{min-width:0;display:grid;grid-template-rows:66px minmax(0,1fr) auto auto;background:#edf1ef}.admin-chat-head{display:flex;align-items:center;padding:0 18px;border-bottom:1px solid var(--line);background:#fff}.admin-chat-head h2{margin:0;font-size:17px}.admin-chat-head span{display:block;margin-top:4px;color:var(--muted);font-size:10px}.admin-chat-messages{min-height:0;overflow-y:auto;padding:20px}.admin-chat-message{display:flex;margin-bottom:12px}.admin-chat-message.admin{justify-content:flex-end}.admin-chat-bubble{max-width:min(74%,520px);padding:10px 12px;border-radius:14px 14px 14px 4px;background:#fff;font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word;box-shadow:0 3px 10px rgba(18,45,37,.05)}.admin-chat-message.admin .admin-chat-bubble{border-radius:14px 14px 4px 14px;background:var(--green);color:#fff}.admin-chat-bubble time{display:block;margin-top:5px;color:#9aa29e;font-size:8px;text-align:right}.admin-chat-message.admin .admin-chat-bubble time{color:rgba(255,255,255,.64)}.admin-chat-bubble img{width:min(280px,100%);max-height:280px;margin-bottom:6px;border-radius:9px;object-fit:cover}.admin-chat-context{margin:2px auto 14px;max-width:560px;padding:12px;border:1px solid #dce4df;border-radius:13px;background:#fff}.admin-chat-context-label{margin-bottom:8px;color:#bb1730;font-size:9px;font-weight:900}.admin-chat-context-card{display:grid;grid-template-columns:76px 1fr;gap:10px;align-items:center}.admin-chat-context-card img{width:76px;height:58px;border-radius:8px;object-fit:cover}.admin-chat-context-card b{display:block;font-size:12px;line-height:1.4}.admin-chat-context-card span{display:block;margin-top:4px;color:var(--muted);font-size:9px}.admin-chat-image-preview{padding:8px 14px;border-top:1px solid var(--line);background:#fff}.admin-chat-image-preview img{width:66px;height:54px;border-radius:8px;object-fit:cover}.admin-chat-image-preview button{margin-left:8px;border:0;background:transparent;color:#bb1730;font-weight:900}.admin-chat-compose{display:grid;grid-template-columns:42px minmax(0,1fr) 64px;gap:8px;padding:11px 14px;border-top:1px solid var(--line);background:#fff}.admin-chat-compose>input{min-width:0;height:44px;padding:0 13px;border:1px solid #cfdbd5;border-radius:10px;outline:none}.admin-chat-compose>input:focus{border-color:var(--green)}.admin-chat-compose>button{border:0;border-radius:10px;background:var(--green);color:#fff;font-weight:900}.admin-chat-compose>button:disabled,.admin-chat-compose>input:disabled{opacity:.5}.admin-chat-attach{width:42px;height:44px;display:grid;place-items:center;border:1px solid #cfdbd5;border-radius:10px;background:#fff;color:var(--green);font-size:24px;cursor:pointer}
.admin-chat-layout.single-chat{grid-template-columns:minmax(0,1fr)}.monitor-chat .admin-chat-room{grid-template-rows:66px minmax(0,1fr) auto}.admin-monitor-note{padding:12px 16px;border-top:1px solid var(--line);background:#fff;color:#8a3b45;font-size:11px;font-weight:800;text-align:center}.support-role-badge{display:inline-flex!important;width:max-content;margin:0 0 4px!important;padding:3px 6px;border-radius:999px;background:#e8f2ed;color:var(--green)!important;font-size:8px!important;font-weight:900}.support-role-badge.company{background:#fff0f1;color:#a72f3a!important}.admin-chat-sender{display:block;margin-bottom:4px;color:#75817b;font-size:8px;font-weight:900}.admin-chat-message.admin .admin-chat-sender{color:rgba(255,255,255,.72)}
@media(max-width:768px){.admin-chat-layout{grid-template-columns:1fr;min-height:760px}.admin-chat-list{max-height:230px;border-right:0;border-bottom:1px solid var(--line)}.admin-chat-room{min-height:520px}.admin-chat-messages{padding:14px}.admin-chat-bubble{max-width:84%}body:has(#customerChatView.active) .portal-header,body:has(#companySupportView.active) .portal-header,body:has(#chatMonitorView.active) .portal-header,body:has(#supportView.active) .portal-header{height:104px;padding-top:42px}body:has(#customerChatView.active) .portal-sidebar,body:has(#companySupportView.active) .portal-sidebar,body:has(#chatMonitorView.active) .portal-sidebar,body:has(#supportView.active) .portal-sidebar{top:104px}}

.support-end-button{border:0;border-radius:9px;background:#c8353e;color:#fff;font-weight:850;padding:10px 15px}.support-end-button:disabled{opacity:.45;cursor:default}.admin-chat-system{align-self:center;margin:10px auto;padding:8px 14px;border-radius:999px;background:#e8eeeb;color:#69756f;font-size:12px;font-weight:750;text-align:center}

/* 업체 로고 등록 */
.company-basic-head{align-items:flex-start}.company-logo-register{display:grid;grid-template-columns:72px auto;grid-template-rows:auto auto;column-gap:12px;align-items:center}.company-logo-preview{grid-row:1/3;width:72px;height:72px;display:grid;place-items:center;overflow:hidden;border:1px solid #d5dfda;border-radius:50%;background:#f3f7f5;color:#6f7b75;font-size:12px;font-weight:900}.company-logo-preview img{width:100%;height:100%;display:block;object-fit:cover}.company-logo-upload{align-self:end;display:inline-flex;align-items:center;justify-content:center;min-height:35px;padding:0 12px;border:1px solid var(--green);border-radius:10px;background:#fff;color:var(--green);font-size:12px;font-weight:900;cursor:pointer}.company-logo-register small{align-self:start;margin-top:5px;font-size:10px;color:var(--muted)}
@media(max-width:768px){.company-basic-head{gap:10px}.company-logo-register{grid-template-columns:58px auto}.company-logo-preview{width:58px;height:58px}.company-logo-upload{min-height:32px;padding:0 9px}}


/* 프리미엄 회원·패킷·협력업체 시스템 */
.note-cell{min-width:280px;max-width:420px;white-space:normal;line-height:1.55;color:#56645d}.inline-admin-form{display:grid;grid-template-columns:minmax(220px,1fr) 160px auto;gap:10px;margin-bottom:18px}.inline-admin-form input{height:44px;padding:0 12px;border:1px solid var(--line);border-radius:10px}.setting-row,.history-row{display:flex;align-items:center;gap:14px;padding:14px 4px;border-bottom:1px solid var(--line)}.setting-row>div,.history-row>div{min-width:0;flex:1}.setting-row b,.setting-row small,.history-row b,.history-row span{display:block}.setting-row small,.history-row span{margin-top:4px;color:var(--muted);font-size:12px}.history-row time{width:175px;color:#718078;font-size:12px}.history-row em{font-style:normal;font-weight:800;color:var(--green)}.premium-progress-card{padding:18px;border-radius:16px;background:#eef6f2;margin-bottom:18px}.premium-progress-card>div:first-child{display:flex;justify-content:space-between;gap:10px}.progress-track{height:12px;margin-top:12px;overflow:hidden;border-radius:999px;background:#d9e7e0}.progress-track i{display:block;height:100%;border-radius:inherit;background:var(--green)}.portal-modal{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px;background:rgba(13,31,25,.48)}.portal-modal[hidden]{display:none}.portal-modal-card{box-sizing:border-box;position:relative;width:min(760px,100%);max-height:90vh;overflow:auto;padding:28px;border-radius:22px;background:#fff;display:flex;flex-direction:column}
/* 2026-08-22: 닫기(x) 버튼이 카드 자체(overflow:auto)의 자식이라
   position:absolute로는 스크롤할 때 콘텐츠와 함께 밀려 사라졌다.
   카드를 세로 flex로 바꾸고 버튼을 sticky+오른쪽 정렬해서, 스크롤
   중에도 카드 상단에 계속 붙어있게 한다(HTML은 그대로, 이 두 규칙만
   수정 -- .modal-x를 쓰는 모든 모달에 공통 적용됨). */
.modal-x{position:sticky;top:0;align-self:flex-end;flex-shrink:0;box-sizing:border-box;width:36px;height:36px;min-width:36px;min-height:36px;max-width:36px;max-height:36px;padding:0;display:grid;place-items:center;border:2px solid #000;border-radius:50%;background:#000;color:#fff;font-size:20px;line-height:1;cursor:pointer;margin:-2px -4px 0 0;z-index:2;appearance:none;-webkit-appearance:none}.modal-x:hover{background:#2a2a2a}
#portfolioManageView .data-table th:nth-child(7),#portfolioManageView .data-table td:nth-child(7){text-align:center}.ops-alert{padding:13px 15px;margin-top:10px;border-radius:12px;background:#f1f6f3;color:#43534b;font-weight:700}
@media(max-width:768px){.inline-admin-form{grid-template-columns:1fr}.history-row{align-items:flex-start;flex-wrap:wrap}.history-row time{width:100%}.portal-modal-card{padding:22px 16px}.note-cell{min-width:220px}}


/* 회원관리 유형·등급 시각 구분 */
.member-type-badge,.member-grade-badge{display:inline-flex;align-items:center;justify-content:center;min-width:72px;padding:7px 11px;border:1px solid transparent;border-radius:999px;font-size:11px;font-weight:900;line-height:1;white-space:nowrap}
.member-type-badge.type-일반회원{background:#eef4fb;border-color:#d4e2f2;color:#386489}
.member-type-badge.type-업체회원{background:#e9f4ee;border-color:#cfe3d8;color:#1f654a}
.member-type-badge.type-관리자{background:#f1edf9;border-color:#ded4ef;color:#62478d}
.member-grade-badge.grade-없음{background:#f1f3f2;border-color:#dfe4e1;color:#6d7772}
.member-grade-badge.grade-일반{background:#fff4dd;border-color:#f1ddb2;color:#94660a}
.member-grade-badge.grade-프리미엄1{background:#fdecef;border-color:#f3ccd3;color:#b22f46}
.member-grade-badge.grade-프리미엄2{background:#e5f4f1;border-color:#c5e3dc;color:#15705f}
.member-grade-badge.grade-최고관리자{background:#e9e5f6;border-color:#d2c8eb;color:#503681}
.member-grade-badge.grade-운영관리자{background:#e9f0fb;border-color:#cedcf3;color:#355f9a}

/* 관리자 메뉴 1·2차 구조 및 검색·필터 */
.portal-menu{display:grid;gap:7px}.admin-menu-group{display:grid;gap:4px}.admin-menu-parent{display:flex!important;align-items:center;justify-content:space-between}.admin-menu-parent i{font-style:normal;font-size:15px;transition:transform .18s ease}.admin-menu-group.open>.admin-menu-parent{background:#edf5f1;color:var(--green)}.admin-menu-group.open>.admin-menu-parent i{transform:rotate(180deg)}.admin-menu-children{display:none;padding:2px 0 5px 11px;border-left:2px solid #e2ebe6;margin-left:12px}.admin-menu-group.open>.admin-menu-children{display:grid;gap:3px}.portal-menu .admin-menu-children button{padding:10px 12px;font-size:13px;border-radius:9px;font-weight:700}.portal-menu .admin-menu-children button.active{background:#e7f1ec;color:var(--green);box-shadow:inset 3px 0 0 var(--green)}.portal-menu .admin-menu-parent.active{background:#edf5f1;color:var(--green)}
.admin-filter-bar{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin:-8px 0 20px;padding:14px 16px;background:#fff;border:1px solid var(--line);border-radius:16px;box-shadow:0 2px 8px rgba(20,45,36,.025)}.admin-filter-field{display:grid;gap:6px;min-width:150px;flex:1 1 150px}.admin-filter-field span{font-size:11px;font-weight:800;color:#66736d}.admin-filter-field input,.admin-filter-field select{width:100%;height:40px;border:1px solid #cfd9d4;border-radius:10px;background:#fff;padding:0 11px;font:inherit;font-size:13px;outline:none}.admin-filter-field input:focus,.admin-filter-field select:focus{border-color:var(--green);box-shadow:0 0 0 3px rgba(23,59,49,.07)}.admin-filter-reset{height:40px;padding:0 14px;border:1px solid var(--line);border-radius:10px;background:#f4f7f5;color:#405048;font-weight:800;cursor:pointer}.admin-filter-reset:hover{background:#e9efec}.admin-filter-empty{padding:35px!important;text-align:center!important;color:var(--muted)}
.sales-demo-bars{height:260px;display:flex;align-items:flex-end;justify-content:space-around;gap:18px;padding:22px 20px 0;border-top:1px solid var(--line);margin-top:18px}.sales-demo-bars span{position:relative;display:flex;align-items:flex-end;justify-content:center;width:54px;height:var(--value);min-height:42px;background:linear-gradient(180deg,#2a6553,#173b31);border-radius:10px 10px 4px 4px;color:#fff;font-size:12px;font-weight:800;padding-bottom:10px}.sales-demo-bars span:before{content:attr(style);display:none}
@media(max-width:768px){.portal-sidebar{position:relative;top:auto}.portal-menu{display:grid;overflow:visible}.portal-menu button{flex:none}.admin-menu-children{padding-left:7px;margin-left:8px}.admin-filter-bar{display:grid;grid-template-columns:1fr 1fr;gap:8px;padding:12px}.admin-filter-field{min-width:0}.admin-filter-reset{width:100%}.sales-demo-bars{gap:8px;overflow-x:auto;justify-content:flex-start}.sales-demo-bars span{flex:0 0 42px}}

/* v2.0.3 optional field hint */
.optional-label{margin-left:4px;color:#9aa39f;font-size:10px;font-weight:600;letter-spacing:-.2px;vertical-align:1px}


/* v2.1.1 portfolio Kakao location search */
.portfolio-location-search{display:grid;grid-template-columns:minmax(0,1fr) 92px;gap:8px}.portfolio-location-search .portal-btn{height:44px}.portfolio-location-help{display:block;margin-top:7px;color:#7b8580;font-size:11px}.portfolio-location-results{margin-top:8px;border:1px solid #dce5e0;border-radius:12px;background:#fff;overflow:hidden}.portfolio-location-result{width:100%;display:grid;gap:3px;padding:12px 14px;border:0;border-bottom:1px solid #edf1ef;background:#fff;text-align:left;cursor:pointer}.portfolio-location-result:last-child{border-bottom:0}.portfolio-location-result:hover{background:#f4f8f6}.portfolio-location-result b{font-size:13px;color:#17231f}.portfolio-location-result span{font-size:11px;color:#68736e}.portfolio-location-result em{font-style:normal;font-size:10px;color:#2b725c}.portfolio-location-empty{padding:16px;color:#78827d;font-size:12px;text-align:center}@media(max-width:720px){.portfolio-location-search{grid-template-columns:1fr 78px}}

/* v2.1.5 company email availability check */
.email-check-row{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:8px;
}
.email-check-btn{
  border:0;
  border-radius:12px;
  padding:0 16px;
  background:var(--green);
  color:#fff;
  font-size:12px;
  font-weight:800;
  cursor:pointer;
}
.email-check-btn:disabled{opacity:.55;cursor:default}
.email-check-status{
  min-height:18px;
  font-size:11px;
  font-weight:700;
  color:var(--muted);
}
.email-check-status.success{color:#16834b}
.email-check-status.error{color:#c8353e}
.email-check-status.info{color:#6d7772}


/* ===== V2.1.8 PORTFOLIO SPACE EDITOR ===== */

.portfolio-space-guide{
    margin-bottom:16px;
    padding:12px 14px;
    border-radius:10px;
    background:#f7f8fa;
    font-size:13px;
    line-height:1.6;
    color:#667085;
}

.portfolio-image-total{
    display:flex;
    align-items:center;
    justify-content:space-between;
    margin-bottom:16px;
    font-size:14px;
}

.portfolio-image-total b{
    font-size:14px;
}

#portfolioSpaceList{
    display:flex;
    flex-direction:column;
    gap:14px;
}

.portfolio-space-card{
    padding:16px;
    border:1px solid #e5e7eb;
    border-radius:12px;
    background:#fff;
}

.portfolio-space-head{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
    margin-bottom:12px;
}

.portfolio-space-title{
    font-size:16px;
    font-weight:700;
}

.portfolio-space-actions{
    display:flex;
    gap:6px;
}

.portfolio-space-description{
    width:100%;
    min-height:72px;
    resize:vertical;
    margin-bottom:12px;
}

.portfolio-space-upload{
    margin-bottom:12px;
}

.portfolio-space-preview{
    display:grid;
    grid-template-columns:repeat(5,minmax(0,1fr));
    gap:8px;
}

.portfolio-space-preview-item{
    position:relative;
    overflow:hidden;
    aspect-ratio:4/3;
    border-radius:8px;
    background:#f2f4f7;
}

.portfolio-space-preview-item img{
    width:100%;
    height:100%;
    object-fit:cover;
    display:block;
}

.portfolio-space-empty{
    padding:18px;
    border:1px dashed #d0d5dd;
    border-radius:10px;
    text-align:center;
    font-size:13px;
    color:#98a2b3;
}

.portfolio-space-add-wrap{
    margin-top:14px;
}

.portfolio-space-add-btn{
    width:100%;
}

@media (max-width:768px){
    .portfolio-space-card{
        padding:14px;
    }

    .portfolio-space-preview{
        grid-template-columns:repeat(3,minmax(0,1fr));
    }

    .portfolio-space-head{
        align-items:flex-start;
    }
}

/* ===== V2.1.8 PORTFOLIO FORM LAYOUT FIX ===== */

/* 포트폴리오 기본정보만 간격/높이 통일 */
#portfolioAddView .form-grid{
    column-gap:14px;
    row-gap:12px;
}

#portfolioAddView .field{
    gap:5px;
}

#portfolioAddView .field input,
#portfolioAddView .field select{
    height:44px;
    min-height:44px;
    padding:0 14px;
}

#portfolioAddView .field textarea{
    min-height:110px;
    padding:12px 14px;
}

#portfolioAddView .field small{
    margin-top:0;
    line-height:1.3;
}

/* 타입 하단 빈 안내영역 제거 */
#portfolioAddView #portfolioApartmentTypeHelp{
    display:none;
}

/* 단지 검색 영역 */
#portfolioAddView .portfolio-location-search{
    gap:8px;
}

#portfolioAddView .portfolio-location-search input{
    height:44px;
}

#portfolioAddView .portfolio-location-search .portal-btn{
    height:44px;
    padding-top:0;
    padding-bottom:0;
}

/* 제목/상세설명 위쪽 간격도 동일하게 */
#portfolioAddView .field.full{
    width:100%;
}

/* 모바일에서도 동일한 입력 높이 유지 */
@media(max-width:900px){
    #portfolioAddView .form-grid{
        row-gap:12px;
    }

    #portfolioAddView .field input,
    #portfolioAddView .field select{
        height:44px;
        min-height:44px;
    }
}

/* ===== V2.1.8 COMPLEX SEARCH STATUS ===== */

#portfolioAddView .portfolio-location-result{
    display:flex;
    align-items:center;
    justify-content:space-between;
    gap:12px;
}

#portfolioAddView .portfolio-location-result-main{
    min-width:0;
    display:flex;
    flex-direction:column;
    gap:4px;
    text-align:left;
}

#portfolioAddView .portfolio-location-result-main b{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}

#portfolioAddView .portfolio-location-result-main span{
    overflow:hidden;
    text-overflow:ellipsis;
    white-space:nowrap;
}

/* 등록 단지 */
#portfolioAddView .portfolio-location-result em.registered{
    flex:0 0 auto;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-width:74px;
    height:28px;
    padding:0 10px;
    border-radius:14px;
    background:#16834b;
    color:#fff;
    font-size:12px;
    font-weight:700;
    font-style:normal;
    line-height:1;
}

/* 미등록 단지 */
#portfolioAddView .portfolio-location-result em.unregistered{
    flex:0 0 auto;
    display:inline-flex;
    align-items:center;
    justify-content:center;
    min-width:74px;
    height:28px;
    padding:0 10px;
    border-radius:14px;
    background:#d9363e;
    color:#fff;
    font-size:12px;
    font-weight:700;
    font-style:normal;
    line-height:1;
}

/* 상태에 따른 결과 버튼 배경 */
#portfolioAddView .portfolio-location-result.is-registered{
    border-left:3px solid #16834b;
}

#portfolioAddView .portfolio-location-result.is-unregistered{
    border-left:3px solid #d9363e;
}

@media(max-width:600px){
    #portfolioAddView .portfolio-location-result{
        gap:8px;
    }

    #portfolioAddView .portfolio-location-result em.registered,
    #portfolioAddView .portfolio-location-result em.unregistered{
        min-width:68px;
        height:26px;
        padding:0 8px;
        font-size:11px;
    }
}

/* ===== V2.1.8 미등록 단지 요청 모달 ===== */

.portfolio-complex-request-modal{
    position:fixed;
    inset:0;
    z-index:99999;
    display:flex;
    align-items:center;
    justify-content:center;
    padding:20px;
}

.portfolio-complex-request-backdrop{
    position:absolute;
    inset:0;
    background:rgba(0,0,0,.48);
}

.portfolio-complex-request-dialog{
    position:relative;
    z-index:1;
    width:min(420px,100%);
    padding:28px 24px 22px;
    border-radius:18px;
    background:#fff;
    box-shadow:0 18px 50px rgba(0,0,0,.22);
}

.portfolio-complex-request-close{
    position:absolute;
    top:10px;
    right:12px;
    width:34px;
    height:34px;
    padding:0;
    border:0;
    border-radius:50%;
    background:transparent;
    color:#66736d;
    font-size:25px;
    line-height:34px;
    cursor:pointer;
}


.portfolio-complex-request-content{
    text-align:center;
}

.portfolio-complex-request-content h3{
    margin:4px 32px 14px;
    color:#17231f;
    font-size:19px;
    font-weight:800;
    line-height:1.4;
}

.portfolio-complex-request-content p{
    margin:0;
    color:#56635d;
    font-size:13px;
    line-height:1.7;
}

.portfolio-complex-request-content .request-notice{
    margin-top:12px;
    padding:12px;
    border-radius:10px;
    background:#f6f8f7;
    color:#69756f;
    font-size:12px;
}

.portfolio-complex-request-actions{
    display:grid;
    grid-template-columns:1fr 1.4fr;
    gap:8px;
    margin-top:20px;
}

.portfolio-complex-request-actions .portal-btn{
    min-height:44px;
}

@media(max-width:600px){
    .portfolio-complex-request-modal{
        padding:16px;
    }

    .portfolio-complex-request-dialog{
        padding:26px 18px 18px;
        border-radius:16px;
    }

    .portfolio-complex-request-content h3{
        font-size:17px;
    }

    .portfolio-complex-request-actions{
        grid-template-columns:1fr 1fr;
    }
}



/* ZIPTERIOR v2.2.0 - complex create modal */
.complex-address-search-row{
  display:grid;
  grid-template-columns:minmax(0,1fr) auto;
  gap:8px;
  align-items:stretch;
}

.complex-address-search-row .portal-btn{
  min-width:96px;
  white-space:nowrap;
  display:inline-flex;
  align-items:center;
  justify-content:center;
  padding-left:16px;
  padding-right:16px;
}

.complex-type-sticky-head{
  position:sticky;
  top:-1px;
  z-index:20;
  background:#fff;
  padding-top:10px;
  padding-bottom:10px;
  border-bottom:1px solid #edf1ef;
}

#complexCreateAddType{
  white-space:nowrap;
  flex:0 0 auto;
}

@media(max-width:768px){
  .complex-address-search-row{
    grid-template-columns:minmax(0,1fr) 88px;
  }

  .complex-address-search-row .portal-btn{
    min-width:88px;
    padding-left:10px;
    padding-right:10px;
  }

  .complex-type-sticky-head{
    gap:10px;
  }
}


/* ZIPTERIOR v2.2.0.2 - type add button only sticky */
.complex-type-sticky-head{
  position:static !important;
  top:auto !important;
  z-index:auto !important;
  padding-top:0 !important;
  padding-bottom:0 !important;
  border-bottom:0 !important;
}

.complex-type-section{
  position:relative;
}

.complex-type-sticky-action{
  position:sticky;
  top:10px;
  z-index:35;
  height:0;
  display:flex;
  justify-content:flex-end;
  pointer-events:none;
}

.complex-type-sticky-action #complexCreateAddType{
  pointer-events:auto;
  transform:translateY(-58px);
  white-space:nowrap;
  background:#fff;
  box-shadow:0 3px 12px rgba(20,45,36,.10);
}


/* ZIPTERIOR v2.2.0.3 - type add button final sticky alignment */
.complex-type-sticky-action{
  position:sticky !important;
  top:12px !important;
  z-index:40 !important;
  height:44px !important;
  margin:-62px 0 18px 0 !important;
  padding:0 !important;
  display:flex !important;
  align-items:center !important;
  justify-content:flex-end !important;
  pointer-events:none !important;
}

.complex-type-sticky-action #complexCreateAddType{
  pointer-events:auto !important;
  transform:none !important;
  height:44px !important;
  min-height:44px !important;
  padding:0 18px !important;
  display:inline-flex !important;
  align-items:center !important;
  justify-content:center !important;
  line-height:1 !important;
  white-space:nowrap !important;
  border-radius:12px !important;
  background:#fff !important;
  box-shadow:0 4px 14px rgba(20,45,36,.12) !important;
}


/* ZIPTERIOR v2.2.0.4 - sticky type button active color */
.complex-type-sticky-action.is-stuck #complexCreateAddType{
  background:#fbe9e9 !important;
  border-color:#e8b7b7 !important;
  color:#9f3030 !important;
  box-shadow:0 4px 14px rgba(159,48,48,.14) !important;
}

/* v2.3.0 관리자 네이버 연동 상태와 기존 알림 API의 미확인 건수를 표시한다. */
.admin-notification-bell{position:relative;width:42px;height:42px;display:grid;place-items:center;border:1px solid var(--line);border-radius:50%;background:#fff;cursor:pointer;font-size:19px}.admin-notification-bell:hover{background:var(--mint)}.admin-notification-bell b{position:absolute;top:-5px;right:-5px;min-width:20px;height:20px;padding:0 5px;display:grid;place-items:center;border:2px solid #fff;border-radius:999px;background:#d92f42;color:#fff;font-size:10px;line-height:1}.admin-notification-list{display:grid;gap:10px}.admin-notification-item{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px;border:1px solid var(--line);border-radius:14px;background:#fff}.admin-notification-item.unread{border-color:#efbcc3;background:#fff8f9}.admin-notification-item b{font-size:14px}.admin-notification-item p{margin:6px 0;color:#4f5d57;font-size:13px;line-height:1.6}.admin-notification-item time{color:var(--muted);font-size:11px}.naver-lookup-status{margin-top:10px;padding:10px 12px;display:flex;align-items:center;justify-content:space-between;gap:10px;border:1px solid #d7e1dc;border-radius:10px;background:#f8fbf9;color:#52615a;font-size:12px}.naver-lookup-status[data-state="loading"]{border-color:#e9d49d;background:#fff9e9;color:#765b17}.naver-lookup-status[data-state="success"]{border-color:#bcdccd;background:#eef9f3;color:#176144}.naver-lookup-status[data-state="warning"]{border-color:#e9c77b;background:#fff8e8;color:#805b0e}.naver-lookup-status[data-state="error"]{border-color:#efbcc3;background:#fff3f4;color:#a52b3b}.naver-lookup-status .portal-btn{padding:7px 10px;border-radius:8px;font-size:11px}

/* v2.3.2 separates map-logo navigation from the role-center home action. */
.portal-brand{display:flex;align-items:center;gap:14px}.portal-logo-mark{display:flex;align-items:center;padding:5px;border-radius:8px;text-decoration:none}.portal-logo-mark:hover,.portal-logo-mark:focus-visible{background:var(--mint);outline:0}.portal-logo-mark img{height:34px;display:block}.portal-center-home{padding:7px 0;border:0;background:transparent;color:var(--green);font:inherit;font-weight:900;cursor:pointer}.portal-center-home:hover,.portal-center-home:focus-visible{text-decoration:underline;text-underline-offset:5px;outline:0}

/* Server analytics UI shared by administrator and company dashboards. */
.analytics-period-label{color:var(--muted);font-size:12px}.analytics-filter{display:flex;align-items:flex-end;gap:10px;flex-wrap:wrap;margin-bottom:20px;padding:16px;border:1px solid var(--line);border-radius:16px;background:#fff}.analytics-filter label{display:grid;gap:6px}.analytics-filter label span{color:var(--muted);font-size:11px;font-weight:800}.analytics-filter input,.analytics-filter select{height:42px;padding:0 12px;border:1px solid #cfd9d4;border-radius:10px;background:#fff}.analytics-presets{display:flex;gap:5px}.analytics-presets button{height:42px;padding:0 11px;border:1px solid var(--line);border-radius:10px;background:#f7faf8;cursor:pointer}.analytics-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:20px}.analytics-metric{min-height:118px;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff}.analytics-metric span{color:var(--muted);font-size:12px}.analytics-metric b{display:block;margin-top:10px;font-size:24px}.analytics-metric small{display:block;margin-top:6px;color:#718078;font-size:11px}.analytics-grid{display:grid;grid-template-columns:minmax(0,2fr) minmax(220px,1fr) minmax(220px,1fr);gap:14px}.analytics-wide{min-width:0}.analytics-series{display:grid;gap:10px}.analytics-series-row{display:grid;grid-template-columns:82px minmax(100px,1fr) 64px minmax(150px,.7fr);gap:10px;align-items:center;font-size:11px}.analytics-series-track{height:12px;overflow:hidden;border-radius:999px;background:#e9efec}.analytics-series-track i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--green),#58a386)}.analytics-series-row b{text-align:right}.analytics-series-row small{color:var(--muted)}.analytics-rank-list{display:grid;gap:8px;margin:0;padding:0;list-style:none}.analytics-rank-list li{display:grid;grid-template-columns:24px minmax(0,1fr) auto;gap:8px;align-items:center;padding:8px 0;border-bottom:1px solid #edf1ef;font-size:12px}.analytics-rank-list li i{width:22px;height:22px;display:grid;place-items:center;border-radius:50%;background:var(--mint);font-style:normal;font-size:10px}.analytics-target-link{color:var(--green);font-weight:800;text-decoration:none}.analytics-target-link:hover{text-decoration:underline}.analytics-content-table small,.analytics-view .data-table td small{display:block;margin-top:4px;color:var(--muted)}.analytics-environment-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.analytics-environment-grid .panel h2{margin:0 0 14px;font-size:16px}.analytics-empty{padding:24px;color:var(--muted);text-align:center}.analytics-error{padding:18px;border-radius:12px;background:#fff1f2;color:#a52b3b}.analytics-privacy-note{margin:4px 0 0;color:var(--muted);font-size:11px;text-align:right}

@media(max-width:1100px){.analytics-metrics{grid-template-columns:repeat(2,1fr)}.analytics-grid{grid-template-columns:1fr 1fr}.analytics-wide{grid-column:1/-1}.analytics-series-row{grid-template-columns:72px minmax(90px,1fr) 54px}.analytics-series-row small{grid-column:2/-1}.analytics-environment-grid{grid-template-columns:1fr 1fr}}
@media(max-width:768px){.portal-brand{gap:8px}.portal-logo-mark img{height:29px}.portal-center-home{font-size:13px}.analytics-filter{align-items:stretch}.analytics-filter label{flex:1 1 130px}.analytics-filter input,.analytics-filter select{width:100%}.analytics-presets{width:100%;overflow-x:auto}.analytics-metrics,.analytics-grid,.analytics-environment-grid{grid-template-columns:1fr}.analytics-wide{grid-column:auto}.analytics-series-row{grid-template-columns:62px minmax(72px,1fr) 50px;gap:7px}.analytics-series-row small{grid-column:1/-1;padding-left:69px}.analytics-view .data-table{min-width:620px}}
@media(max-width:768px){.admin-notification-item,.naver-lookup-status{align-items:flex-start;flex-direction:column}.admin-notification-item .portal-btn,.naver-lookup-status .portal-btn{width:100%}}

.complex-image-section{margin-top:24px;padding:18px;border:1px solid var(--line);border-radius:16px;background:#f9fbfa}.complex-image-section .panel-head{margin-bottom:14px}.complex-image-section .portal-btn{cursor:pointer}.complex-image-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}.complex-image-card{position:relative;min-width:0;overflow:hidden;border:1px solid #dbe3df;border-radius:12px;background:#fff}.complex-image-card>img{display:block;width:100%;aspect-ratio:4/3;object-fit:cover;background:#eef2f0}.complex-image-card>label,.complex-image-badge{display:flex;align-items:center;gap:6px;padding:9px 10px;color:#31423a;font-size:12px;font-weight:800}.complex-image-card>button{position:absolute;top:7px;right:7px;padding:5px 8px;border:0;border-radius:7px;background:rgba(17,31,25,.75);color:#fff;cursor:pointer}.complex-image-card .row-actions{padding:0 10px 10px}.complex-image-empty{grid-column:1/-1;margin:0;padding:22px;text-align:center;color:var(--muted);font-size:13px}.complex-detail-head{padding-right:42px}.confirm-modal{z-index:1100}#complexAssignModal{z-index:1100}#portfolioCompareModal{z-index:1100}.confirm-modal .portal-modal-card{width:min(460px,100%);overflow:visible}.confirm-modal p{margin:12px 0 22px;color:#506059;font-size:14px;line-height:1.7}.confirm-modal .form-actions{margin-top:0}
@media(max-width:768px){.complex-detail-head{align-items:flex-start;flex-direction:column;padding-right:36px}.complex-detail-head .portal-btn{width:100%}.complex-image-section{padding:14px}.complex-image-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.complex-image-card .row-actions{display:grid}.confirm-modal .portal-modal-card{padding:24px 18px}}

/* v2.4.0 일괄등록 전용 구성: 기존 관리 표·폼 규칙을 유지하며 업로드와
   백그라운드 진행 상태만 독립적으로 표현한다. */
.bulk-import-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}
.bulk-import-card{margin:0}.bulk-import-card form{display:grid;gap:14px}.bulk-import-card form>p{margin:0;color:var(--muted);font-size:13px;line-height:1.65}.bulk-import-card form>.portal-btn{justify-self:start}
.bulk-import-drop{min-height:132px;display:grid;place-items:center;align-content:center;gap:7px;padding:22px;border:1px dashed #9db2a8;border-radius:14px;background:#f7faf8;text-align:center;cursor:pointer;transition:border-color .16s ease,background .16s ease}.bulk-import-drop:hover,.bulk-import-drop:focus-within{border-color:var(--green);background:var(--mint)}.bulk-import-drop b{color:var(--green);font-size:16px}.bulk-import-drop span{color:var(--muted);font-size:12px}.bulk-import-drop input{width:min(420px,100%);margin-top:8px;color:#405048;font-size:12px}
.bulk-import-options{display:flex;align-items:end;gap:14px;flex-wrap:wrap}.bulk-import-options>label:not(.bulk-check){display:grid;gap:6px}.bulk-import-options label>span{color:#536159;font-size:12px;font-weight:800}.bulk-import-options select{height:42px;padding:0 38px 0 12px;border:1px solid #cfd9d4;border-radius:10px;background:#fff}.bulk-check{min-height:42px;display:flex;align-items:center;gap:8px}.bulk-check input{width:17px;height:17px;accent-color:var(--green)}
#bulkImportActive{margin-top:18px}.bulk-progress{height:10px;overflow:hidden;border-radius:999px;background:#e7eeea}.bulk-progress span{display:block;width:0;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--green),#5a9b82);transition:width .2s ease}.bulk-summary{display:grid;grid-template-columns:repeat(5,minmax(110px,1fr));gap:10px;margin-top:16px}.bulk-summary>div{padding:13px;border:1px solid var(--line);border-radius:12px;background:#fafcfb}.bulk-summary span{display:block;color:var(--muted);font-size:11px}.bulk-summary b{display:block;margin-top:5px;color:#1e2b25;font-size:15px}.bulk-failed{color:#c8353e;font-weight:800}.bulk-empty{padding:32px!important;color:var(--muted);text-align:center}
@media(max-width:1050px){.bulk-import-grid{grid-template-columns:1fr}.bulk-summary{grid-template-columns:repeat(3,1fr)}}
@media(max-width:768px){.bulk-import-card form>.portal-btn{width:100%}.bulk-import-drop{min-height:116px;padding:18px 12px}.bulk-import-options{align-items:stretch;flex-direction:column}.bulk-import-options>label{width:100%}.bulk-import-options select{width:100%}.bulk-summary{grid-template-columns:repeat(2,1fr)}#bulkImportActive .form-actions{display:grid}#bulkImportActive .form-actions .portal-btn{width:100%}}
#portfolioCompareBody{display:grid;gap:14px;margin-top:6px}.portfolio-compare-space{border:1px solid var(--line);border-radius:14px;padding:14px;background:#fafcfb;display:grid;gap:10px}.portfolio-compare-space-head{display:flex;justify-content:space-between;align-items:center}.portfolio-compare-space-head span{color:var(--muted);font-size:12px}.portfolio-compare-images{display:flex;gap:8px;flex-wrap:wrap}.portfolio-compare-images img{width:72px;height:72px;object-fit:cover;border-radius:8px}.portfolio-compare-space-desc{width:100%;border:1px solid #cfd9d4;border-radius:12px;background:#fff;padding:13px 14px;font:inherit;resize:vertical;min-height:90px}.portfolio-compare-save-status{margin-left:10px;font-size:12px;font-weight:700}
.pc-tabs{display:flex;gap:8px;margin-bottom:16px;border-bottom:1px solid var(--line)}.pc-tab{border:0;background:transparent;padding:10px 4px;margin-bottom:-1px;border-bottom:2px solid transparent;font-weight:800;color:var(--muted);cursor:pointer}.pc-tab.active{color:var(--green);border-bottom-color:var(--green)}
.pc-preview{display:grid;gap:14px}.pc-hero{width:100%;max-height:320px;object-fit:cover;border-radius:16px}.pc-title{margin:0;font-size:22px}.pc-meta{margin:0;color:var(--muted);font-size:13px}.pc-summary,.pc-description{margin:0;line-height:1.7;font-size:14px;white-space:normal}.pc-space-preview{border-top:1px solid var(--line);padding-top:14px}.pc-space-preview h3{margin:0 0 10px;font-size:15px}.pc-image-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:8px;margin-bottom:10px}.pc-image-grid img{width:100%;aspect-ratio:4/3;object-fit:cover;border-radius:10px}.pc-empty{color:var(--muted);font-size:13px}
.pc-image-item{position:relative;width:72px;height:72px;cursor:grab;user-select:none;touch-action:none}.pc-image-item img{width:100%;height:100%;object-fit:cover;border-radius:8px;pointer-events:none}.pc-image-item.dragging{opacity:.4;box-shadow:0 6px 16px rgba(0,0,0,.25)}.pc-image-delete{position:absolute;top:-6px;right:-6px;width:20px;height:20px;border-radius:50%;border:0;background:#c62828;color:#fff;font-size:13px;line-height:1;cursor:pointer}.pc-image-add{display:inline-block;font-size:12px;padding:8px 12px;cursor:pointer}
.pc-drag-handle{display:inline-flex;align-items:center;justify-content:center;width:28px;height:22px;border-radius:6px;color:var(--muted);font-size:13px;letter-spacing:-2px;cursor:grab;user-select:none;touch-action:none;margin-right:2px}.pc-drag-handle:hover{background:#eef4f1;color:var(--green)}.portfolio-compare-space.dragging{opacity:.45;box-shadow:0 6px 16px rgba(0,0,0,.2)}
#bulkImportResults .data-table td,#bulkImportResults .data-table th{padding:16px 14px;vertical-align:middle}#bulkImportResults .data-table td:first-child{line-height:1.5;font-weight:600}.badge{white-space:nowrap}
.bulk-record-actions{display:flex;flex-direction:column;gap:7px}.bulk-record-btn{display:inline-flex;align-items:center;justify-content:center;width:120px;height:34px;padding:0 10px;border-radius:9px;border:1px solid var(--line);background:#fff;color:var(--text);font-size:12.5px;font-weight:700;text-decoration:none;cursor:pointer;white-space:nowrap;box-sizing:border-box;transition:opacity .15s ease}.bulk-record-btn:hover{opacity:.8}.bulk-record-btn.primary{background:var(--green);color:#fff;border-color:var(--green)}
/* v2.5.0 원문 재현 테스트 (additive, 기존 화면 영향 없음) */
.cb-doc{display:flex;flex-direction:column;gap:16px;margin-top:14px}
.cb-block{margin:0}
.cb-image img{width:100%;border-radius:10px;display:block}
.cb-caption{font-size:11px;color:#9aa39d;margin-top:6px;line-height:1.6}
.cb-heading{font-size:17px;font-weight:800;margin:10px 0 0;color:var(--green2)}
.cb-callout{background:#f2f2f2;border-radius:10px;padding:14px 15px}
.cb-callout-title{font-size:14px;font-weight:800;margin:0 0 6px;color:var(--green2)}
.cb-callout-body{font-size:13px;line-height:1.7;color:#444;white-space:pre-line}
.cb-hr{border:none;border-top:1px dashed var(--line);margin:8px 0}
.cb-dots{text-align:center;letter-spacing:5px;font-weight:700;color:#aab1ac;margin:12px 0;font-size:13px}
.cb-link{text-align:center}
.cb-link-btn{display:inline-flex;align-items:center;gap:8px;min-height:38px;padding:8px 16px;border:1px solid #d9dcda;border-radius:999px;text-decoration:none;color:#25282b;font-weight:700;font-size:13px;background:#fff}
.cb-link-btn svg{flex:0 0 auto;display:block}
.cb-text{margin:0;font-size:13px;line-height:1.75;color:#333;white-space:pre-line}
.complex-assign-list{display:grid;gap:8px;margin-top:14px;max-height:360px;overflow-y:auto}
.complex-assign-item{display:block;width:100%;text-align:left;border:1px solid var(--line);background:#fff;border-radius:12px;padding:12px 14px;cursor:pointer}
.complex-assign-item small{color:var(--muted)}
.bulk-action-bar{display:flex;align-items:center;justify-content:space-between;gap:14px;background:var(--mint);border:1px solid var(--green);border-radius:14px;padding:12px 16px;margin-bottom:14px;font-size:13px;font-weight:700}
.bulk-action-bar[hidden]{display:none}
/* 2026-08-23: "타입 지정" 검색폼(#complexAssignForm, .form-grid)에서
   겪은 것과 같은 문제(hidden 속성이 클래스의 display 지정에 밀려
   안 먹힘)를 전수 확인해 추가로 찾은 것 -- .field는 display:grid를
   지정하는데 방어 규칙이 없어서 hidden이 항상 무시되고 있었다
   (예: company-dashboard.html #usageOtherField). */
.field[hidden]{display:none}
.bulk-action-bar .row-actions button{background:#fff}
.bulk-check-wrap{display:flex;align-items:center;gap:7px;min-height:42px}
.info-tip{position:relative;display:inline-flex;align-items:center;cursor:help;color:#8a918d}
.info-tip-bubble{position:absolute;left:50%;bottom:calc(100% + 9px);transform:translateX(-50%);width:250px;background:#1f2925;color:#fff;font-size:12.5px;font-weight:500;line-height:1.65;padding:11px 13px;border-radius:10px;text-align:left;white-space:normal;opacity:0;visibility:hidden;pointer-events:none;z-index:80;box-shadow:0 10px 26px rgba(16,24,20,.22)}
.info-tip-bubble::after{content:'';position:absolute;top:100%;left:50%;transform:translateX(-50%);border:6px solid transparent;border-top-color:#1f2925}
.info-tip:hover .info-tip-bubble,.info-tip:focus .info-tip-bubble,.info-tip:focus-visible .info-tip-bubble{opacity:1;visibility:visible}

/* v2.5.1: 포트폴리오 하단 표시 설정(운영 설정 화면) 안내 이미지 업로드 줄 */
.pds-notice-image-row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.pds-notice-image-preview{width:96px;height:72px;border-radius:12px;background:#f3f7f5;border:1px solid #d5dfda;display:grid;place-items:center;overflow:hidden;color:#8a918d;font-size:11px;flex-shrink:0}
.pds-notice-image-preview img{width:100%;height:100%;object-fit:cover;display:block}
.pds-notice-image-upload{min-height:72px;padding:10px 14px;flex:1;min-width:180px}

/* v2.5.1: 시군구로 단지 자동수집 -- 시/도별 시군구 체크박스 트리 */
.cri-sido-tree{max-height:360px;overflow-y:auto;border:1px solid #e2e7e4;border-radius:12px;padding:6px;margin-bottom:14px}
.cri-sido-group{border-bottom:1px solid #edf1ef}
.cri-sido-group:last-child{border-bottom:0}
.cri-sido-head{display:flex;align-items:center;gap:8px;padding:10px 8px;cursor:pointer;font-weight:800;font-size:13px}
.cri-sido-list{display:flex;flex-wrap:wrap;gap:4px 14px;padding:2px 8px 12px 30px}
.cri-sigungu-item{display:inline-flex;align-items:center;gap:5px;font-size:12.5px;padding:3px 0;white-space:nowrap}
.cri-job-detail-list{display:grid;gap:6px;max-height:280px;overflow-y:auto;margin:0 0 14px}
.cri-job-detail-item{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 12px;border:1px solid #e2e7e4;border-radius:10px;font-size:13px}
.cri-job-detail-item button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px;font-size:12px;cursor:pointer}
.cri-pagination{display:flex;align-items:center;justify-content:center;gap:14px;padding:16px 0 4px;font-size:13px;color:var(--muted)}
.cri-pagination button{border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 14px;cursor:pointer;font-weight:700;color:var(--text)}
.cri-pagination button:disabled{opacity:.4;cursor:not-allowed}
.cri-sigungu-item.cri-status-done{color:#16a34a;font-weight:800}
.cri-sigungu-item.cri-status-issue{color:#f97316;font-weight:800}
/* 2026-09-10: 수집 중(파랑) / 시도했지만 완료 이력 없음(회색 점선) */
.cri-sigungu-item.cri-status-running{color:#2563eb;font-weight:800}
/* 2026-09-10: 시에 종속된 구는 상위 시와 한 덩어리로 묶어 보여준다 */
.cri-city-block{display:inline-flex;align-items:center;gap:2px;margin:2px 4px;padding:1px 5px;border:1px dashed #d8dee6;border-radius:8px;vertical-align:middle}
.cri-kid-list{display:inline-flex;flex-wrap:wrap;align-items:center;gap:0}
.cri-sigungu-item.cri-sigungu-kid{font-size:11px;opacity:.9}
/* 2026-09-10: 구를 거느린 시 표시 -- 구가 빠진 게 아니라 포함된 것 */
.cri-kid-note{margin-left:4px;font-size:10px;font-weight:600;color:#94a3b8;border:1px solid #dde3ea;border-radius:6px;padding:0 4px}
.cri-sigungu-item.cri-sigungu-kid::before{content:"\2514 ";color:#b6bec9;margin-left:2px}
.cri-sigungu-item.cri-status-cancelled{color:#94a3b8;font-weight:700;text-decoration:underline dotted}
.cri-sigungu-item[data-tip],.pc-bottom-cta[data-tip]{position:relative;cursor:help}
.cri-job-detail-item .cri-dong-btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:6px 10px;font-size:12px;cursor:pointer}
.cri-dong-table{width:100%;border-collapse:collapse;font-size:12.5px}
.cri-dong-table th,.cri-dong-table td{padding:8px 10px;border-bottom:1px solid #edf1ef;text-align:left}
.cri-dong-table th{color:var(--muted);font-size:11px;background:#fafcfa;position:sticky;top:0}
.cri-dong-table tr.cri-dong-failed td{color:#a92f3b}
.cri-dong-table tr.cri-dong-zero td{color:var(--muted)}
/* 2026-08-22: 서버 페이지네이션 UI(포트폴리오 관리/단지 기본정보 공용).
   "다음" 버튼 대신 1,2,3... 번호를 직접 클릭해 원하는 페이지로
   바로 이동할 수 있게 해달라는 요청 반영. */
.pf-pagination{display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:14px 4px 2px;font-size:13px;color:var(--muted);flex-wrap:wrap}
.pf-page-buttons{display:flex;gap:6px;flex-wrap:wrap}
.pf-page-btn{border:1px solid var(--line);background:#fff;border-radius:8px;padding:7px 12px;cursor:pointer;font-weight:700;color:var(--text);min-width:34px}
.pf-page-btn:disabled{cursor:default}
.pf-page-btn.active{background:var(--green);color:#fff;border-color:var(--green)}
.pf-page-btn.pf-page-nav{color:var(--muted);font-weight:600}

/* 2026-09-05: 집팔고360H 디자인지침 2-1/2-2(공통) -- 이모지 아이콘을
   Lucide 기반 SVG 스프라이트(assets/icons.svg)로 교체. 기본은 텍스트
   흐름 안에서 글자 크기에 맞춰 자동으로 커지는 인라인 아이콘(1em)이고,
   색은 currentColor라 주변 글자색을 그대로 따라간다 -- 필요하면 각
   위치에서 .icon에 width/height/color를 오버라이드하면 된다. */
.icon{width:1em;height:1em;display:inline-block;vertical-align:-0.125em;flex-shrink:0}

/* ============================================================
   터치 기기에서 hover 잔상 방지 — 2026-09-10 모바일 세션
   ------------------------------------------------------------
   손가락에는 커서가 없는데 :hover 규칙이 그대로 살아 있으면,
   탭한 뒤 배경색이 남아 버튼이 계속 눌린 것처럼 보인다.
   마우스가 있는 기기(hover: hover)에서만 적용되게 감싼다 —
   데스크톱 동작은 그대로이고 터치 기기에서만 효과가 빠진다.
   ※ .is-active 같은 선택 상태는 옮기지 않았다(터치에서도 필요).
   ============================================================ */
@media (hover: hover) {
  .metric-card.clickable:hover{ box-shadow:0 6px 16px rgba(20,45,36,.10);transform:translateY(-1px) }
  tr.clickable:hover td{ background:#f6faf8 }
  .portfolio-complex-request-close:hover{ background:#f2f5f3; }
  .cb-link-btn:hover{ border-color:var(--green2);color:var(--green2) }
  .complex-assign-item:hover{ border-color:var(--green);background:var(--mint) }
  .bulk-action-bar .row-actions button:hover{ border-color:var(--green);color:var(--green) }
  .info-tip:hover{ color:var(--green) }
  .cri-sido-head:hover{ background:#f8fbfa }
  .cri-sigungu-item[data-tip]:hover::after, .pc-bottom-cta[data-tip]:hover::after{ content:attr(data-tip);position:absolute;left:0;top:100%;margin-top:6px;background:#1b2b25;color:#fff;padding:8px 12px;border-radius:8px;font-size:11px;font-weight:400;line-height:1.6;white-space:pre-line;z-index:60;box-shadow:0 8px 20px rgba(0,0,0,.22);width:max-content;max-width:280px }
  .pc-bottom-cta[data-tip]:hover::after{ left:50%;transform:translateX(-50%) }
}


/* ===== zt-mobile-hit-2026-09-11 — 모바일 터치타겟(히트영역만) =====================================
   375px 실측. 상자를 키우지 않고 히트영역만 넓힌다 — 로고는 정본 크기를 지켜야 하고
   푸터 링크는 문장 안 인라인이라 늘리면 줄 흐름이 흔들린다.
   인접 요소까지 중심 거리를 재서 가로챌 위험이 없는 것만 넣었다.
   ⚠️ @media 밖(=PC)은 건드리지 않는다. PC 는 집테리어 총괄 소관이다.
   ========================================================================= */
@media (max-width: 768px) {
  /* 헤더 로고 링크 93.5x34 → 히트 93.5x44. 최근접 조작 요소 253px 이라 여유가 크다. */
  .portal-logo { position: relative; }
  .portal-logo::after {
    content: ""; position: absolute;
    left: 0; right: 0; top: 50%;
    height: 44px; transform: translateY(-50%);
  }
  /* partner-intro 푸터 '로그인하기' 55.2x17 → 히트 55.2x44. 최근접 138px. */
  .intro-footer-note a { position: relative; }
  .intro-footer-note a::after {
    content: ""; position: absolute;
    left: 0; right: 0; top: 50%;
    height: 44px; transform: translateY(-50%);
  }
}

/* 집테관리-105 10-28: 관리자 고객센터 채팅 틀 높이 고정(넓은 화면 · 높이는 열 때 portal.js ztFitSupport 가 창에 맞춤 · 아래는 그 전 기본값) —
   틀 안 줄을 틀 높이에 맞춰 대화칸만 굴러가게(입력칸 늘 보임 · 열면 맨 아래 최근) · 「업체 정보 보기」 단추 */
@media(min-width:769px){#supportView .admin-chat-layout{height:calc(100vh - 350px);min-height:380px;grid-template-rows:minmax(0,1fr)}
#supportView .admin-chat-layout>.admin-chat-list,#supportView .admin-chat-layout>.admin-chat-room{min-height:0}}
.support-company-button{margin-left:auto;margin-right:8px;padding:7px 12px;border:1px solid var(--green,#173b31);border-radius:9px;background:#fff;color:var(--green,#173b31);font:inherit;font-size:12px;font-weight:700;cursor:pointer}
.support-company-button:hover{background:#eef4f1}
.support-company-button+.support-end-button{margin-left:0}
