:root{--purple:#302448;--teal:#307884;--pale:#f8f9fa;--border:#dfe3e6;--muted:#68717a;--orange:#fff1df;--orange-border:#df8d32;--gap:#53616d;--danger:#9f3b32}
*{box-sizing:border-box}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
body{margin:0;font-family:Arial,"Malgun Gothic",sans-serif;color:#212529;line-height:1.45}
header{position:sticky;top:0;z-index:10;display:flex;justify-content:space-between;align-items:center;padding:15px 28px;color:#fff;background:var(--purple)}
header strong{font-size:18px}
.subtitle{margin-left:12px;font-size:13px;color:#d8d3e2}
nav{display:flex;gap:22px}
nav a{color:#d8d3e2;text-decoration:none;font-size:14px}
nav .active{padding-bottom:3px;border-bottom:2px solid #fff;color:#fff;font-weight:bold}
main{margin:auto;padding:28px}
.hero{margin-bottom:16px}
.hero h1{margin:0;color:var(--purple);font-size:25px}
.hero p{margin:5px 0;color:#4c555d}
.search,.filter{display:flex;align-items:end;gap:8px;margin-top:12px}
.search input{width:min(600px,70vw);font-size:16px}
input,select,button{padding:8px;border:1px solid var(--border);font:inherit;background:#fff}
button{cursor:pointer;border-color:var(--purple);background:var(--purple);color:#fff}
.filter label{display:grid;gap:4px;color:var(--purple);font-size:13px;font-weight:bold}
/* 개-1835: 조회줄이 좁은 폭에서 화면 밖으로 밀리지 않게 — 줄을 바꾸고 칸은 줄어들 수 있게 */
.filter{flex-wrap:wrap}
.filter label{min-width:0;max-width:100%}
.filter select,.filter input{min-width:0;max-width:100%}
.panel{margin:16px 0;padding:18px;border:1px solid var(--border)}
.empty{padding:42px;color:var(--muted)}
.panel-title{display:flex;align-items:baseline;justify-content:space-between;gap:16px;margin-bottom:10px}
.panel-title h2{margin:0;color:var(--purple);font-size:17px}
.panel-title span{color:var(--muted);font-size:12px}
.notice{margin:14px 0;padding:10px 12px;border-left:4px solid var(--teal);background:#eff7f6;font-size:13px}
.notice-danger{border-left-color:var(--danger);background:#fdebea;color:#7a241d}
.table-wrap{max-height:70vh;overflow:auto}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{padding:8px 10px;border-bottom:1px solid #eceff1;text-align:left;vertical-align:top}
thead th{position:sticky;top:0;z-index:2;border-top:1px solid var(--border);border-bottom:1px solid var(--border);background:var(--pale);color:var(--purple)}
tr:hover td{background:#fafafa}
.number{text-align:right;white-space:nowrap}
.clickable{cursor:pointer}
.clickable.selected td{background:#f0edf6}
.more{display:inline-block;margin-top:12px;color:var(--purple);font-size:13px}
.sharebar{display:inline-block;width:100px;height:8px;margin-right:5px;overflow:hidden;background:#e7eaed;vertical-align:middle}
.sharebar i{display:block;height:100%;background:var(--teal)}
.product-pivot table{min-width:1000px}
.product-pivot th:first-child{position:sticky;left:0;z-index:3;min-width:300px;background:#fff}
.product-pivot thead th:first-child{background:var(--pale)}
.product-pivot small{display:block;margin-top:3px;color:var(--muted);font-weight:normal}
.product-pivot .month{text-align:right;white-space:nowrap}
.zero{color:#a8afb5}
.uncollected{color:var(--danger);font-size:12px}
.event-cell{background:var(--orange)!important}
.event{display:block;width:max-content;margin:3px 0 0 auto;padding:1px 4px;border:1px solid var(--orange-border);color:#a15d0b;font-size:10px;line-height:1.2}
.disclosure{display:block;padding:0;border:0;background:transparent;color:var(--purple);font-size:13px;font-weight:bold;text-align:left}
.product-pivot details{margin-top:4px;color:#59636d;font-weight:normal}
.product-pivot details summary{cursor:pointer;font-size:12px}
.product-pivot details ul{max-width:650px;margin:6px 0;padding-left:18px;font-size:12px}
.matrix table{min-width:1360px}
.matrix thead th:not(:first-child){min-width:140px}
.matrix tbody th{position:sticky;left:0;z-index:3;background:#fff;color:var(--purple)}
.matrix-cell{display:block;min-width:110px;padding:6px;text-decoration:none;font-size:12px;text-align:center;line-height:1.3}
.matrix-cell.supplied{color:#056b76;background:#e5f3f3}
.matrix-cell.partial{color:#6d491c;background:#fff0d6}
.matrix-cell.gap{color:#33414c;background:#ecf0f2}
.matrix-cell.unobserved{color:#8c342c;background:#fdebea}
.matrix-cell.none{color:#9aa2a9;background:#fafafa}
.matrix-cell.d2{filter:brightness(.95)}
.matrix-cell.d3{filter:brightness(.89)}
.mixed{display:inline-block;padding:1px 3px;border:1px solid #a36a17;color:#80500c;font-size:10px;font-weight:normal}
footer{padding:14px 28px;border-top:1px solid var(--border);background:var(--pale);color:var(--muted);font-size:12px}
@media(max-width:850px){header{padding:12px 16px}
.subtitle{display:none}
main{padding:18px}
.search,.filter{align-items:stretch;flex-direction:column}
.search input{width:100%}
.panel-title{align-items:start;flex-direction:column}
}

.outside{color:#80500c;font-size:12px;font-weight:bold}
.coverage-notice{margin:14px 0;padding:12px 14px;border:1px solid #d39e00;border-left:4px solid #d39e00;background:#fff3cd;color:#5c4300;font-size:13px}

/* WEB-004 · WEB-003 목업의 색·여백·클래스명을 재사용 */
.sales-dashboard .filter{display:flex;align-items:flex-end;gap:22px;flex-wrap:wrap;padding:16px 18px;border:1px solid var(--border);margin:16px 0}
.sales-dashboard .filter .fld{display:flex;flex-direction:column;gap:6px}
.sales-dashboard .filter .fld>label:first-child{font-size:12px;color:var(--muted);font-weight:normal}
.sales-dashboard .filter .opts{display:flex;gap:14px;align-items:center}
.sales-dashboard .filter .opts label{display:flex;align-items:center;gap:5px;font-size:13px;color:#212529;font-weight:normal}
.sales-dashboard .filter .disabled{color:var(--muted)!important}
.sales-dashboard .hint{font-size:12px;color:var(--muted)}
.sales-day-hidden{display:none!important}
.kpi-band{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin:16px 0}
.kpi{padding:18px;border:1px solid var(--border);background:#fff}
.kpi .label{font-size:13px;color:var(--muted)}
.kpi .val{font-size:24px;color:var(--purple);font-weight:bold;margin:6px 0 4px}
.kpi .val .up,.kpi .val.up,.up{color:var(--teal)}
.kpi .val .dn,.kpi .val.dn,.dn{color:var(--danger)}
.kpi .foot{font-size:12px;color:var(--muted)}
.fcst-launch{display:flex;align-items:center;gap:10px}
.badge{font-size:12px;color:var(--danger);border:1px solid var(--danger);border-radius:3px;padding:2px 8px}
.sales-table{max-height:none}
.sales-table table{min-width:920px}
.sales-table .sales-code{display:block;margin-top:2px;color:var(--muted);font-size:10px}
.sales-table tr.sum td{background:var(--pale);font-weight:bold}
.sales-table tr.dim{opacity:.75}
.noinput{color:var(--danger);font-size:12px}
.modal-back{display:none;position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:200;align-items:flex-start;justify-content:center;padding:40px 16px}
.modal-back.open{display:flex}
.modal{background:#fff;width:900px;max-width:100%;max-height:80vh;display:flex;flex-direction:column;border:1px solid var(--border)}
.modal-head{display:flex;align-items:center;justify-content:space-between;padding:15px 18px;border-bottom:1px solid var(--border)}
.modal-head h2{font-size:17px;color:var(--purple);margin:0}
.modal-head .close{background:none;border:none;color:var(--muted);font-size:22px;line-height:1;cursor:pointer;padding:0 4px}
.modal-filter{display:flex;gap:18px;padding:14px 18px;border-bottom:1px solid var(--border);flex-wrap:wrap}
.modal-filter .fld{display:flex;flex-direction:column;gap:5px}
.modal-filter .fld label{font-size:12px;color:var(--muted)}
.modal-filter .required{color:var(--danger)}
.modal-body{overflow-y:auto;padding:0 18px}
.fcst-inp{text-align:right;width:140px}
.modal-foot{display:flex;align-items:center;justify-content:space-between;padding:14px 18px;border-top:1px solid var(--border)}
.modal-foot .count{font-size:13px;color:var(--muted)}
.modal-foot .btns{display:flex;gap:10px}
.web086-tabs{display:flex;gap:6px;max-width:100%;margin:12px 0;padding:3px 2px 9px;overflow-x:auto;overflow-y:hidden;scrollbar-gutter:stable;white-space:nowrap}
.web086-tabs button{flex:0 0 auto;white-space:nowrap;border:1px solid var(--purple);border-radius:999px;background:#fff;color:var(--purple);box-shadow:none}
.web086-tabs button.active,.web086-tabs button[aria-selected=true]{background:var(--purple);color:#fff;box-shadow:0 2px 7px #30244840}
.todo-table{min-width:760px}.todo-table th:nth-child(1){width:38%}.todo-table th:nth-child(2){width:18%}.todo-table th:nth-child(3){width:14%}.todo-table th:nth-child(4){width:12%}.todo-table th:nth-child(5){width:18%}.todo-task strong{display:block}.todo-task small{display:block;margin-top:5px;color:var(--muted)}.todo-origin{display:inline-flex;align-items:center;border-radius:999px;padding:3px 9px;font-size:12px;font-weight:700;white-space:nowrap}.todo-origin-meeting{border:1px solid #93c5fd;background:#eff6ff;color:#1d4ed8}.todo-origin-legacy{border:1px solid #d1d5db;background:#f8fafc;color:#475569}.todo-complete{text-align:center}.todo-complete form{display:inline-block;margin:2px}
button.ghost{background:#fff;color:var(--purple)}

@media(max-width:850px){.sales-dashboard .filter{flex-direction:column;align-items:stretch}
.kpi-band{grid-template-columns:1fr 1fr}
.modal-back{padding:16px 8px}
.modal-body{padding:0 10px}
}

.manual-match{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.manual-match input{min-width:0;width:110px}
.manual-match input[name=item_name]{flex:1 1 150px}
@media(max-width:640px){.manual-panel .table-wrap{max-height:none}
.manual-candidate-table{table-layout:fixed;width:100%}
.manual-candidate-table th:nth-child(1),.manual-candidate-table td:nth-child(1){width:29%}
.manual-candidate-table th:nth-child(2),.manual-candidate-table td:nth-child(2){width:13%}
.manual-candidate-table th:nth-child(3),.manual-candidate-table td:nth-child(3){width:34%}
.manual-candidate-table th:nth-child(4),.manual-candidate-table td:nth-child(4){width:24%}
.manual-candidate-table th,.manual-candidate-table td{padding:6px}
.manual-candidate-table td{overflow-wrap:anywhere;word-break:break-word}
.manual-match input{width:100%}
.manual-match button,.manual-hide-btn{width:100%;padding:0 4px;white-space:nowrap}
}
/* 개-2188 검수(회차 0) 지적 — 좁은 화면(400px)에서 신제품 표 「관리」 칸(숨기기 단추)이 안 보였다.
   까닭 둘: 1) .table-wrap의 70vh 안쪽 스크롤에 가려 화면 전체 캡처에도 안 보였다(위 규칙으로 이
   표만 안쪽 스크롤을 풀어 바깥 페이지 스크롤로 보이게 함). 2) 표가 auto 배치라 칸 너비를 셀
   안쪽 내용(코드 짝짓기 입력 두 칸)의 「최대 너비」 기준으로 잡아, flex-wrap만으로는 안 줄어들고
   표 전체가 400px을 넘어갔다(auto 배치는 줄바꿈을 고려하지 않고 한 줄 기준 너비로 칸을 잡기
   때문) — 이 표만 좁은 화면에서 table-layout:fixed 로 네 칸 비율을 못박아 표 너비를 뷰포트
   안으로 강제하고, 안쪽 입력·단추는 100% 로 그 칸에 맞춘다. */
@media(max-width:640px){.sales-monthly-table{max-height:none}
.sales-monthly-table:not(.sales-all-columns) table{min-width:0}
.sales-monthly-table:not(.sales-all-columns) .sales-extra{display:none}
.sales-monthly-table.sales-all-columns{overflow-x:auto}
.sales-monthly-table.sales-all-columns table{min-width:920px}
.sales-monthly-table.sales-all-columns td:first-child,.sales-monthly-table.sales-all-columns th:first-child{position:sticky;left:0;z-index:3;background:#fff}
.sales-monthly-table.sales-all-columns thead th:first-child{background:var(--pale)}
.sales-columns-toggle{display:block;margin:0 0 10px}
.inbound-item-fields{position:relative}
.inbound-suggestions{position:absolute;z-index:20;left:0;right:0;top:100%;display:grid;max-height:220px;overflow:auto;background:#fff;border:1px solid var(--border)}
.inbound-suggestion{border:0;border-bottom:1px solid var(--border);color:#212529;text-align:left;background:#fff}
.inbound-suggestion:hover{background:var(--pale)}
}

/* WEB-011 · 시황·신제품 제안 업로드 통로 */
.intake-page{margin:auto}
.intake-actions{display:flex;align-items:center;gap:14px;margin:16px 0}
.intake-actions span{font-size:13px;color:var(--muted)}
.intake-primary{display:inline-block;padding:9px 14px;background:var(--purple);color:#fff;text-decoration:none}
.intake-filter{flex-wrap:wrap}
.intake-filter input{min-width:130px}
.filter-reset{color:var(--purple);font-size:13px}
.intake-form{display:grid;gap:18px;padding:20px;border:1px solid var(--border)}
.intake-form>label,.intake-grid>label{display:grid;gap:6px;color:var(--purple);font-size:14px;font-weight:bold}
.intake-form label span{color:var(--muted);font-size:12px;font-weight:normal}
.intake-form b{color:var(--danger);font-size:12px}
.intake-form textarea{width:100%;resize:vertical}
.intake-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}
.intake-form-bottom{display:flex;justify-content:space-between;align-items:center;gap:12px}
.intake-alert{padding:10px 12px;border-left:4px solid var(--danger);background:#fdebea;color:#6d2520}
.intake-status{display:inline-block;padding:2px 7px;border-radius:3px;font-size:12px;font-weight:bold}
.status-접수{color:#174d55;background:#e5f3f3}
.status-정리중{color:#80500c;background:#fff0d6}
.status-정리완료{color:#3a4e3f;background:#edf5ee}
.intake-breadcrumb{margin-bottom:12px;font-size:13px}
.intake-breadcrumb a{color:var(--purple)}
.intake-detail h1{margin:0;color:var(--purple);font-size:20px}
.intake-meta{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;padding:14px 0;border-top:1px solid var(--border);border-bottom:1px solid var(--border)}
.intake-meta div{min-width:0}
.intake-meta dt{font-size:12px;color:var(--muted)}
.intake-meta dd{margin:3px 0 0;overflow-wrap:anywhere}
.intake-detail h2{margin:22px 0 8px;color:var(--purple);font-size:16px}
.intake-raw{margin:0;padding:14px;overflow:auto;white-space:pre-wrap;overflow-wrap:anywhere;background:#f8f9fa;border:1px solid var(--border);font:13px/1.55 Arial,"Malgun Gothic",sans-serif}
.intake-none{color:var(--muted);font-size:13px}
.intake-files{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}
.intake-file{display:grid;gap:8px;padding:12px;border:1px solid var(--border);min-width:0}
.intake-file strong,.intake-file small{display:block;overflow-wrap:anywhere}
.intake-file small{margin-top:3px;color:var(--muted);font-size:11px}
.intake-file>a{color:var(--purple);font-size:13px;font-weight:bold}
.intake-preview{width:100%;max-height:320px;object-fit:contain;background:#f8f9fa}
.intake-pdf{width:100%;height:320px;border:1px solid var(--border)}
.intake-no-preview{padding:18px;background:#f8f9fa;color:var(--muted);font-size:12px}
.intake-status-form{display:flex;align-items:end;gap:8px;margin-top:22px}
.intake-status-form label{display:grid;gap:4px;color:var(--purple);font-size:13px;font-weight:bold}

@media(max-width:850px){header{align-items:flex-start;gap:10px;flex-direction:column}
nav{width:100%;gap:14px;overflow-x:auto;white-space:nowrap;padding-bottom:2px}
.intake-actions{align-items:stretch;flex-direction:column}
.intake-primary{text-align:center}
.intake-grid{grid-template-columns:1fr}
.intake-files{grid-template-columns:1fr}
.intake-meta{grid-template-columns:1fr 1fr}
.intake-form{padding:16px}
.intake-status-form{align-items:stretch;flex-direction:column}
.intake-status-form button{min-height:42px}
}

/* WEB-014 · 의견 수렴용 갭 매트릭스 */
.web014-matrix table{min-width:2750px}
.web014-matrix thead th{white-space:normal;text-align:center}
.web014-matrix .gap-band{position:sticky;top:0;z-index:4;font-size:13px}
.web014-matrix .gap-customer{position:sticky;top:34px;z-index:4;min-width:160px}
.web014-matrix .gap-customer a,.web014-matrix .gap-term a,.web014-matrix .gap-amount a{color:inherit;text-decoration:none}
.web014-matrix .gap-customer small{display:block;margin-top:3px;color:var(--muted);font-size:10px;font-weight:normal}
.web014-matrix .band-A{background:#edf5ee}
.web014-matrix .band-B{background:#fff0d6}
.web014-matrix .band-C{background:#f2f4f5}
.web014-matrix .gap-customer.band-B{font-weight:bold;color:#664510}
.web014-matrix .gap-term{position:sticky;left:0;z-index:3;min-width:265px;text-align:left}
.web014-matrix .gap-term.selected,.web014-matrix .gap-customer.selected{box-shadow:inset 0 -3px 0 var(--purple)}
.web014-matrix .gap-amount{min-width:160px;padding:0;text-align:right}
.web014-matrix .gap-amount a{display:block;min-height:58px;padding:8px 10px}
.web014-matrix .gap-amount small{display:block;margin-top:4px;color:#69757d;font-size:10px;text-align:left}
.web014-matrix .gap-amount.d1 a{background:#eef5f4}
.web014-matrix .gap-amount.d2 a{background:#cae3df}
.web014-matrix .gap-amount.d3 a{background:#95c7c0;font-weight:bold}
.gap-list td a{color:var(--purple);text-decoration:none}
.gap-list .unlinked{color:var(--muted);font-size:12px}

/* WEB-015 · 영업 미팅기록과 일일업무일지 */
.meeting-page{margin:auto}
.meeting-layout{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:18px}
.sales-card{align-self:start;padding:18px;border:1px solid var(--border);background:var(--pale);font-size:13px}
.sales-card strong{color:var(--purple);font-size:17px}
.sales-card ol{margin:10px 0;padding-left:22px}
.sales-card li{margin:4px 0;overflow-wrap:anywhere}
.meeting-page h2{font-size:16px;color:var(--purple);margin-top:20px}
.meeting-page button,.meeting-page input,.meeting-page select{min-height:44px}
@media(max-width:850px){.meeting-layout{grid-template-columns:1fr}
.sales-card{order:-1}
.meeting-page .intake-form{padding:16px}
.meeting-page .kpi-band{grid-template-columns:1fr 1fr}
.meeting-page .filter{gap:12px}
}

.paste-image-hint{color:#174d55!important;font-size:12px!important}
.paste-attachments{display:grid;gap:8px}
.paste-attachment-count{font-size:13px;color:var(--purple)}
.paste-attachment-list{display:flex;flex-wrap:wrap;gap:10px}
.paste-attachment{position:relative;display:grid;grid-template-columns:80px;gap:5px;width:104px;min-width:0;padding:8px;border:1px solid var(--border);background:#fff;font-size:11px}
.paste-attachment img,.paste-file-icon{display:block;width:80px;height:60px;object-fit:cover;background:var(--pale)}
.paste-file-icon{display:grid;place-items:center;color:var(--muted)}
.paste-attachment>span:last-of-type{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.paste-attachment-remove{position:absolute;right:3px;top:3px;min-height:24px!important;width:24px;padding:0;border-radius:999px;line-height:1;background:#fff;color:var(--danger);border-color:var(--danger)}
.paste-image-notice{margin:0;padding:8px 10px;border-left:4px solid var(--danger);background:#fdebea;color:#6d2520;font-size:12px}
@media(max-width:375px){.paste-attachment-list{gap:8px}
.paste-attachment{width:96px;grid-template-columns:72px}
.paste-attachment img,.paste-file-icon{width:72px;height:54px}
}

.upper-nav{gap:18px}
.upper-nav .nav-upper{font-weight:bold}
.section-tabs{display:flex;gap:18px;padding:9px 28px;border-bottom:1px solid var(--border);background:#fff}
.section-tabs a{color:var(--muted);text-decoration:none;font-size:14px}
.section-tabs a.active{color:var(--purple);font-weight:bold;border-bottom:2px solid var(--purple);padding-bottom:4px}
@media(max-width:850px){.upper-nav{width:100%;gap:14px;overflow-x:auto;white-space:nowrap;padding-bottom:2px}
.section-tabs{padding:9px 16px;overflow-x:auto;white-space:nowrap}
.section-tabs a{flex:none}
}

.status-auth{max-width:520px;margin:48px auto}
.status-auth h1{color:var(--purple)}
.status-frame{padding:0;overflow:hidden}
.status-frame iframe{display:block;width:100%;height:calc(100vh - 210px);min-height:680px;border:0}
.collect-none td{background:#fdebea}
.collect-metro0 td{background:#fff0d6}
.collect-metro-thin td{background:#fffbe5}
.collect-ok td{background:#edf5ee}
.collect-gray td{background:#f2f4f5}
.vendor-money-mobile{display:none}
@media(max-width:850px){.vendor-money-desktop{display:none}
.vendor-money-mobile{display:inline}
}

.weekly-page{}
.weekly-preview{display:block;max-width:100%;margin:12px 0;border:1px solid var(--border)}

/* WEB-021 · 수입견적 */
.import-page{}
.import-required{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;padding:16px;border:1px solid #d8d3e2;background:#faf9fc}
.import-required label,.import-details label{display:grid;gap:5px;color:var(--purple);font-size:13px;font-weight:bold}
.import-required b{color:var(--danger);font-size:11px}
.import-required input,.import-required select,.import-details input,.import-details select{min-width:0;width:100%;min-height:42px}
.inline{display:flex;gap:4px}
.inline input{min-width:0}
.inline select{width:auto;min-width:66px}
.import-calc{display:grid;grid-template-columns:160px 1fr;gap:4px 16px;margin:16px 0;padding:16px;border:1px solid #307884;background:#eff7f6}
.import-calc strong{grid-row:span 2;color:#174d55;font-size:15px}
.import-calc b{font-size:24px;color:#174d55}
.import-calc span{color:#4c555d;font-size:13px}
.import-calc i{font-style:normal;font-weight:bold}
.import-form details{border:1px solid var(--border);padding:12px 16px}
.import-form summary{cursor:pointer;color:var(--purple);font-weight:bold}
.import-details{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;margin-top:14px}
.import-details fieldset{display:grid;gap:10px;margin:0;padding:12px;border:1px solid var(--border)}
.import-details legend{color:var(--purple);font-size:13px;font-weight:bold}
.import-details textarea{width:100%;resize:vertical}
.import-details small{color:var(--muted);font-size:11px;font-weight:normal}
.import-details .check{display:flex;align-items:center;gap:7px}
.import-details .check input{width:auto;min-height:auto}
.import-table small{display:block;color:var(--muted);font-size:10px}
.import-update{display:grid;grid-template-columns:repeat(5,minmax(0,1fr)) auto;gap:8px;align-items:end;margin-top:16px}
.import-update h2{grid-column:1/-1;margin:0;color:var(--purple);font-size:16px}
.import-update input{min-width:0}
.import-kpi{grid-template-columns:repeat(4,1fr)}

@media(max-width:850px){.import-required{grid-template-columns:1fr}
.import-details{grid-template-columns:1fr}
.import-calc{grid-template-columns:1fr}
.import-calc strong{grid-row:auto}
.import-update{grid-template-columns:1fr}
.import-update button{min-height:42px}
.import-kpi{grid-template-columns:1fr 1fr}
.import-table{min-width:960px}
}

.profit-badges{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:16px 0}
.profit-badge{background:#fff;border:1px solid var(--border);border-left:5px solid var(--purple);padding:16px}
.profit-badge strong{display:block;color:var(--purple);font-size:13px;margin-bottom:6px}
.profit-badge span{display:block;font-size:20px;font-weight:bold;line-height:1.4}
.profit-badge small{display:block;margin-top:6px;color:var(--muted)}
.profit-money-mobile{display:none}
.profit-table table{min-width:1320px}
.profit-dashboard .panel-title .intake-primary{white-space:nowrap}
@media(max-width:850px){.profit-badges{grid-template-columns:1fr}
}


/* ════════════════════════════════════════════════════════════════
   디자인 v2 — A안 「정돈」 오버레이 · 2026-08-17 클부장
   기존 규칙은 전부 유지하고 이 블록이 뒤에서 겹쳐 입힌다.
   색은 현행 보라(#302448)·청록(#307884) 그대로 · 마감만 올린다.
   ════════════════════════════════════════════════════════════════ */
:root{--pale:#f5f3f9;--border:#e3e1ea;--muted:#6d6880;--danger:#b23a30;--page:#f4f4f8;--r:11px;--card-shadow:0 1px 4px #2b224408}

body{font-family:"Pretendard","Segoe UI","Malgun Gothic",Arial,sans-serif;background:var(--page);color:#26212e}

/* 헤더 — 상단 브랜드 라인 + 둥근 메뉴 */
header{padding:14px 26px}

header::before{content:"";position:absolute;left:0;right:0;top:0;height:3px;background:linear-gradient(90deg,#307884,#8f7bc0)}

header{position:sticky}

nav a,.upper-nav a{padding:7px 12px;border-radius:9px}

nav a:hover,.upper-nav a:hover{background:#ffffff14;color:#fff}

nav .active,.upper-nav .nav-upper.active{padding-bottom:7px;border-bottom:0;background:#ffffff22;color:#fff}

.section-tabs{gap:22px}

.section-tabs a{padding:11px 2px;border-bottom:2.5px solid transparent}

.section-tabs a.active{border-bottom:2.5px solid var(--teal);padding-bottom:9px}

/* 본문 · 패널 */
.hero h1{letter-spacing:-.3px}

.panel,.sales-card,.intake-form,.intake-file,.import-form details,.import-required,.import-calc,.import-details fieldset,.profit-badge,.auth-menu-group{border-radius:var(--r)}

.panel{background:#fff;box-shadow:var(--card-shadow)}

.notice,.coverage-notice,.intake-alert,.paste-image-notice,.auth-note{border-radius:9px}

/* 입력 · 버튼 */
input,select,button,textarea{border-radius:8px}

button{box-shadow:0 2px 6px #30244833;font-weight:700}

button:hover{filter:brightness(1.12)}

button.ghost,.filter-reset{box-shadow:none}

.intake-primary{border-radius:8px}

input:focus,select:focus,textarea:focus{outline:2px solid var(--teal);outline-offset:0;border-color:var(--teal)}

/* 표 — 줄무늬 · 호버 · 둥근 래퍼 */
.table-wrap{border:1px solid var(--border);border-radius:9px}


/* 26호: wide tables stay intact; on a phone the edge shadows and guidance
   make the available horizontal scroll explicit without changing columns. */
.table-wrap{max-height:70vh;overflow:auto}

.scroll-hint{display:none}

@media(max-width:640px){.table-wrap{background:linear-gradient(90deg,#fff 30%,rgba(255,255,255,0)) left/34px 100% no-repeat,linear-gradient(90deg,rgba(255,255,255,0),#fff 70%) right/34px 100% no-repeat,radial-gradient(farthest-side at 0 50%,rgba(0,0,0,.16),transparent) left/14px 100% no-repeat,radial-gradient(farthest-side at 100% 50%,rgba(0,0,0,.16),transparent) right/14px 100% no-repeat;background-attachment:local,local,scroll,scroll}
.scroll-hint{display:block;margin:0 0 6px;font-size:12px;color:var(--muted);text-align:center;user-select:none}
select,input[type=text],input[type=search]{max-width:100%}
.kpi .val{max-width:100%;overflow:hidden}
.profit-money-desktop{display:none}
.profit-money-mobile{display:inline}
}

thead th{background:var(--pale);color:#4a3f63;border-top:0}

tbody tr:nth-child(even) td{background:#faf9fc}

tr:hover td{background:#f3f0f9}

td,th{padding:9px 12px}

.sharebar,.sharebar i{border-radius:99px}

/* KPI 카드 — 왼쪽 컬러바 */
.kpi{position:relative;border-radius:var(--r);box-shadow:var(--card-shadow);overflow:hidden}

.kpi::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:linear-gradient(#307884,#302448)}

.kpi .val{letter-spacing:-.5px;font-variant-numeric:tabular-nums}

/* 상태 칩 · 모달 · 신고 버튼 */
.intake-status,.badge,.event,.mixed{border-radius:999px}

.modal{border-radius:13px;overflow:hidden}

.feedback-trigger{font-weight:700}

footer{background:#fff}

/* ── 로그인·비밀번호 화면 — 화려판 (이사님 지시 08-17) ─────────────
   auth 셸(main>.auth-card)에만 적용된다. :has 미지원 구형 브라우저는
   기본 카드로 표시될 뿐 기능엔 지장이 없다. */
body:has(> main > .auth-card){display:flex;flex-direction:column;min-height:100vh;background:linear-gradient(135deg,#191129,#302448 52%,#173a42)}

body:has(> main > .auth-card)::before,body:has(> main > .auth-card)::after{content:"";position:fixed;border-radius:50%;filter:blur(10px);opacity:.5;pointer-events:none;animation:authfloat 14s ease-in-out infinite alternate}

body:has(> main > .auth-card)::before{width:520px;height:520px;left:-140px;top:-160px;background:radial-gradient(circle,#6b53a8 0%,transparent 70%)}

body:has(> main > .auth-card)::after{width:460px;height:460px;right:-120px;bottom:-140px;background:radial-gradient(circle,#307884 0%,transparent 70%);animation-delay:-7s}

@keyframes authfloat{from{transform:translateY(-14px)}
to{transform:translateY(18px)}
}

body:has(> main > .auth-card) main{flex:1;display:grid;place-items:center;width:100%;padding:24px}

main > .auth-card{position:relative;z-index:1;width:min(430px,92vw);max-width:430px;margin:0;padding:40px 36px 32px;background:linear-gradient(180deg,#fffffffa,#f7f5fcf5);border:1px solid #ffffff2e;border-radius:20px;box-shadow:0 24px 70px #00000059,0 2px 0 #ffffff30 inset;backdrop-filter:blur(7px)}

main > .auth-card::before{content:"G";display:block;width:56px;height:56px;margin:0 auto 12px;border-radius:16px;background:linear-gradient(135deg,#302448,#307884);color:#fff;font-size:26px;font-weight:800;line-height:56px;text-align:center;box-shadow:0 8px 22px #30244866}

main > .auth-card h1{margin:0 0 4px;text-align:center;color:#302448;font-size:21px;letter-spacing:-.3px}

main > .auth-card h1::after{content:"골든에프앤디 · 학교급식 업무 시스템";display:block;margin-top:5px;color:#8a83a0;font-size:12.5px;font-weight:400;letter-spacing:0}

main > .auth-card form{margin-top:18px}

main > .auth-card label{display:grid;gap:6px;margin:13px 0;color:#4a3f63;font-size:13px;font-weight:700}

main > .auth-card input,main > .auth-card select{padding:12px 14px;border:1px solid #ddd8e8;border-radius:11px;background:#fff;font-size:15px}

main > .auth-card input:focus{outline:2px solid #307884;border-color:#307884;box-shadow:0 0 0 4px #3078841f}

main > .auth-card button{width:100%;margin-top:16px;padding:13px;border-radius:11px;background:linear-gradient(135deg,#302448,#45336b);font-size:15px;font-weight:800;letter-spacing:.4px;box-shadow:0 10px 24px #3024484d}

main > .auth-card button:hover{filter:brightness(1.18)}

main > .auth-card .auth-note{margin:12px 0 0;border-radius:10px}

body:has(> main > .auth-card) footer{background:transparent;border:0;color:#b9b2ccbb;text-align:center;font-size:11.5px}

/* 49호: 수입재고 이력 열과 일일업무일지 2칸 작성 화면 */
.inventory-history.is-collapsed{display:none}
.inventory-manage-detail{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;margin:0 0 14px}
.inventory-manage-detail div{padding:9px;border:1px solid var(--border);border-radius:8px;background:var(--pale)}
.inventory-manage-detail dt{font-size:12px;color:var(--muted)}
.inventory-manage-detail dd{margin:4px 0 0;font-weight:700}
.daily-meta-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:14px}
.daily-work-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.daily-work-cell{border:1px solid var(--border);border-radius:8px;overflow:hidden}
.daily-work-cell>span{display:block;padding:9px 12px;background:var(--purple);color:#fff;font-weight:700}
.daily-yesterday>span{background:#5b6b7a}
.daily-work-cell small{font-weight:400;opacity:.86}
.daily-work-cell textarea{width:100%;border:0;border-radius:0;min-height:190px;resize:vertical}
.daily-note{display:block;margin-top:14px}
.daily-note input{width:100%}
@media(max-width:700px){.daily-meta-grid,.daily-work-grid,.inventory-manage-detail{grid-template-columns:1fr}}

@media(max-width:375px){main > .auth-card{padding:28px 20px 24px}
}

/* 52호: 단가표·행사 시뮬레이션 발표 화면 */
.p52-page{max-width:none}.p52-table-wrap{max-height:72vh}.p52-table{min-width:1780px;border-collapse:separate;border-spacing:0;font-size:12px}.p52-table th{position:sticky;top:0;z-index:1;white-space:nowrap;background:#302448;color:#fff}.p52-table td{white-space:nowrap;text-align:right;padding:8px 9px;border-bottom:1px solid #ddd}.p52-table td:nth-child(2),.p52-table td:nth-child(7),.p52-table td:nth-child(20){text-align:left}.p52-name a{font-weight:800;color:#302448;text-decoration:underline}.p52-factual{background:#fff}.p52-input{background:#fff5bd}.p52-auto{background:#dff0c9}.p52-computed{background:#eee}.p52-secret{background:#f4f4f4;color:#888;font-size:11px}.p52-negative{color:#c62828!important;font-weight:800}.p52-cards{display:grid;grid-template-columns:repeat(5,minmax(130px,1fr));gap:12px;margin:15px 0}.p52-card{padding:16px;border:1px solid var(--border);border-radius:10px;background:#fff;box-shadow:0 1px 5px #00000012}.p52-card small{display:block;color:var(--muted);margin-bottom:7px}.p52-card b{font-size:18px}.p52-controls{display:flex;gap:12px;align-items:end;flex-wrap:wrap}.p52-controls label{display:grid;gap:5px;font-size:13px;font-weight:700}.p52-controls input{min-height:34px}.p52-chips{display:flex;gap:6px;flex-wrap:wrap}.p52-chips label{display:block;padding:7px 10px;border:1px solid #b8c5a4;border-radius:16px;background:#eef7e5;cursor:pointer}.p52-best td{background:#dff0c9!important;font-weight:800}.p52-sim .panel{margin-top:14px}@media(max-width:800px){.p52-cards{grid-template-columns:repeat(2,minmax(0,1fr))}.p52-controls{align-items:stretch}.p52-controls>*{width:100%}}

/* 135호: 현황판 일일업무일지의 일자·작성자 구분과 원문 개행 보존 */
.board-daily-day{margin:18px 0 26px;padding-top:4px;border-top:3px solid var(--purple)}
.board-daily-day>h3{margin:10px 0 12px}
.board-daily-person{margin:12px 0;padding:14px;border:1px solid var(--border);border-radius:8px;background:#fff}
.board-daily-person>h4{margin:0 0 10px;font-size:18px}
.board-daily-entry+.board-daily-entry{border-top:1px solid var(--border);margin-top:12px;padding-top:12px}
.board-daily-meta{margin:0 0 8px;color:var(--muted)}
.board-daily-columns{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.board-daily-columns h5{margin:0 0 6px}
.board-daily-text{white-space:pre-wrap;overflow-wrap:anywhere;line-height:1.6}
@media(max-width:700px){.board-daily-columns{grid-template-columns:1fr}}
.precedent-body{white-space:pre-wrap;overflow-wrap:anywhere}
/* 개-1032: /sales 「핵심 지표」 카드(web086-kpis)가 5열 고정(minmax(150px,1fr)×5=750px+)이라
   휴대폰 폭(약 400px)에서 화면 전체가 가로로 넘친다. 2열로 접어 넘침을 없앤다. */
@media(max-width:640px){.sales-profit-v6 .web086-kpis{grid-template-columns:1fr 1fr}}

/* ════════════════════════════════════════════════════════════════
   재입힘 0921 — 우선순위 목업 표준(파랑 #2f6df6·큰 radius·부드러운 그림자)을
   세 화면(수입재고 /import/inventory · TO DO /todo · 일일업무일지 /daily)의
   전용 클래스에만 입힌다. 기존 규칙은 그대로 두고 이 블록이 뒤에서 덮는다.
   기능·값·주소는 손대지 않는다. 다른 화면 클래스는 건드리지 않는다.
   ════════════════════════════════════════════════════════════════ */
:root{--gp-blue:#2f6df6;--gp-blue-weak:#eaf1ff;--gp-line:#e6eaf1;--gp-shadow:0 8px 24px rgba(21,42,84,.06);--gp-radius:16px}

/* 수입재고 — 이력 요약 칸 */
.inventory-manage-detail{gap:10px}
.inventory-manage-detail div{border:1px solid var(--gp-line);border-radius:12px;background:#fbfcff;box-shadow:var(--gp-card-shadow,var(--gp-shadow))}
.inventory-manage-detail dt{color:var(--gp-blue);font-weight:700}
.inventory-history{border-radius:12px;overflow:hidden}

/* 수입재고 — 필수 입력·계산·상세 카드 */
.import-required,.import-calc,.import-details fieldset,.import-form details{border-radius:var(--gp-radius);box-shadow:var(--gp-shadow);border-color:var(--gp-line)}
.import-calc{border-color:#cfe1ff;background:var(--gp-blue-weak)}
.import-calc strong,.import-calc b{color:#1d4ed8}
.import-update button,.import-required button{border-radius:10px}

/* TO DO — 개인 업무 표(도착/전달) */
.todo-table{border-radius:12px;overflow:hidden}
.todo-origin{border-radius:999px}
.todo-complete form button,.todo-table button{border-radius:10px;box-shadow:0 3px 10px rgba(47,109,246,.14)}

/* 일일업무일지 — 오늘/전일 표 */
.daily-table td.daily-result span,.daily-table td.daily-status span{display:inline-flex;align-items:center;border-radius:999px;padding:3px 9px;font-size:11px;font-weight:700}
.daily-table .st-wait{background:#fff6e7;color:#a46a00}
.daily-table .st-run{background:var(--gp-blue-weak);color:#2454d1}
.daily-table .st-done{background:#eaf9f3;color:#1f8a63}
.daily-table .st-cancel{background:#fff0ef;color:#c94743}
.daily-table-wrap{border-radius:12px}
.daily-edit-link{border-radius:999px;box-shadow:0 3px 10px rgba(48,36,72,.18)}
.daily-date-filter button{border-radius:10px}

@media(max-width:640px){
  .inventory-manage-detail{grid-template-columns:1fr}
  .todo-table{font-size:12px}
}

/* ════════════════════════════════════════════════════════════════
   개-1055 (0921) — 「짜임까지」 우선순위 페이지 표준으로 다시 입힌다.
   대상 세 화면만: /import/inventory · /todo · /daily.
   ★범위 묶기 = 세 화면의 본문만 `<div class="gp3">` 로 감싼다.
     그 밖의 화면에는 .gp3 가 없으므로 아래 규칙이 하나도 걸리지 않는다.
     위쪽 머리줄·메뉴·바닥글은 <main> 밖이라 `body:has(.gp3)`(및 JS 대체
     `body.gp3-page`)로만 덮는다 — 다른 주소에서는 원래 보라 머리줄 그대로다.
   ★지킨 것 = 기능·숫자·주소. 바꾼 것 = 짜임·여백·색·글자 크기·칸 이름.
   ★되돌리는 길 = 이 블록(아래 「개-1055 끝」까지)을 지우고 세 .py 의
     gp3_* 조각을 되돌리면 옛 화면으로 돌아온다.
   ════════════════════════════════════════════════════════════════ */
/* 색 값은 우선순위 표준 그대로 쓰되, 「글자로 쓰이는 회색·파랑·초록·주황」만
   실제로 재서(브라우저 계산색 기준 WCAG 대비) 4.5:1 위로 어둡게 내렸다.
   표준의 --muted(#6f7c93)는 흰 바탕에서 4.22:1 이라 본문 글자에는 모자랐다.
   잰 값은 `_impeccable_잰값.json` 에 있다. 테두리·아이콘 색은 그대로다. */
.gp3{--bg:#f5f7fb;--panel:#fff;--line:#e6eaf1;--text:#14213d;--muted:#5c6880;
  --blue:#2f6df6;--blue-ink:#2454d1;--blue-weak:#eaf1ff;--red:#ef5350;--red-ink:#b83430;--red-weak:#fff0ef;
  --orange:#f6a623;--orange-ink:#8a5a00;--orange-weak:#fff6e7;--green:#27ae7d;--green-ink:#1b7256;--green-weak:#eaf9f3;
  --purple2:#8a56e8;--shadow:0 8px 24px rgba(21,42,84,.06);--radius:16px;
  color:var(--text);min-width:0}
.gp3 *{box-sizing:border-box}
.gp3 a{color:inherit;text-decoration:none}
.gp3 button,.gp3 input,.gp3 select,.gp3 textarea{font:inherit}
.gp3 button{cursor:pointer}
.gp3 select,.gp3 input,.gp3 textarea{border:1px solid #dfe5ef;border-radius:9px;padding:9px 10px;color:#32405a;background:#fff}
.gp3 select:focus,.gp3 input:focus,.gp3 textarea:focus{outline:2px solid #dce8ff;border-color:#8fb2ff}

/* 위쪽 머리줄·메뉴·바닥글 — 세 화면에서만 */
body:has(.gp3),body.gp3-page{background:#f5f7fb}
body:has(.gp3) header,body.gp3-page header{background:#fff;color:#14213d;border-bottom:1px solid #e6eaf1;box-shadow:0 1px 3px rgba(21,42,84,.05);padding:12px 24px}
body:has(.gp3) header::before,body.gp3-page header::before{background:linear-gradient(90deg,#2f6df6,#8a56e8)}
body:has(.gp3) header strong,body.gp3-page header strong{color:#14213d;letter-spacing:-.2px}
body:has(.gp3) .auth-user,body.gp3-page .auth-user{color:#5c6880;font-size:13px}
body:has(.gp3) .logout-form button,body.gp3-page .logout-form button{border:1px solid #e6eaf1;background:#f7f9fc;color:#53617a;border-radius:9px;padding:6px 11px}
body:has(.gp3) .upper-nav .nav-upper,body.gp3-page .upper-nav .nav-upper{color:#5c6880;font-weight:600;padding:7px 11px;border-radius:9px}
body:has(.gp3) .upper-nav .nav-upper.active,body.gp3-page .upper-nav .nav-upper.active{background:#eaf1ff;color:#2454d1;font-weight:800}
body:has(.gp3) .section-tabs,body.gp3-page .section-tabs{background:#fff;border-bottom:1px solid #e6eaf1;padding:6px 24px;gap:6px}
body:has(.gp3) .section-tabs a,body.gp3-page .section-tabs a{color:#5c6880;padding:8px 12px;border-radius:9px;border-bottom:0!important}
body:has(.gp3) .section-tabs a.active,body.gp3-page .section-tabs a.active{background:#eaf1ff;color:#2454d1;font-weight:700;border-bottom:0!important;padding-bottom:8px}
body:has(.gp3) footer,body.gp3-page footer{background:#fff;border-top:1px solid #e6eaf1;color:#5c6880}
body:has(.gp3):not(.page-wide) main,body.gp3-page:not(.page-wide) main{max-width:1180px;padding:0 20px 28px}
body.page-wide:has(.gp3) main,body.page-wide.gp3-page main{padding:0 20px 28px}

/* 제목 줄 + 회색 한 줄 설명 */
.gp3 .gp3-hero{display:flex;justify-content:space-between;align-items:end;gap:16px;padding:18px 4px 14px}
.gp3 .gp3-hero h1{margin:0 0 6px;font-size:24px;color:var(--text);letter-spacing:-.4px}
.gp3 .gp3-hero p{margin:0;color:var(--muted);font-size:14px}
.gp3 .gp3-today{color:#5a6780;font-size:14px;white-space:nowrap}

/* 아이콘 붙은 요약 칸 */
.gp3 .gp3-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:14px}
.gp3 .gp3-stat{background:#fff;border:1px solid var(--line);border-radius:var(--radius);padding:18px;display:flex;gap:13px;align-items:center;box-shadow:var(--shadow)}
.gp3 .gp3-stat-icon{width:42px;height:42px;border-radius:14px;display:grid;place-items:center;font-size:20px;flex:0 0 auto}
.gp3 .gp3-stat:nth-child(1) .gp3-stat-icon{background:var(--blue-weak);color:var(--blue)}
.gp3 .gp3-stat:nth-child(2) .gp3-stat-icon{background:var(--red-weak);color:var(--red)}
.gp3 .gp3-stat:nth-child(3) .gp3-stat-icon{background:var(--orange-weak);color:#a46a00}
.gp3 .gp3-stat:nth-child(4) .gp3-stat-icon{background:#f3edff;color:var(--purple2)}
.gp3 .gp3-stat-label{color:var(--muted);font-size:13px}
.gp3 .gp3-stat-value{font-size:25px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums;letter-spacing:-.5px}
.gp3 .gp3-stat-foot{color:var(--muted);font-size:11px;margin-top:2px}

/* 판(패널)과 그 머리 */
.gp3 .gp3-panel{background:var(--panel);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;min-width:0;margin:0 0 14px}
.gp3 .gp3-panel-head{padding:16px 16px 10px;display:flex;align-items:start;justify-content:space-between;gap:12px;border-bottom:1px solid var(--line);flex-wrap:wrap}
.gp3 .gp3-panel-head h2{margin:0 0 10px;font-size:20px;color:var(--text);letter-spacing:-.3px}
.gp3 .gp3-panel-head p{margin:0 0 10px;color:var(--muted);font-size:13px}
.gp3 .gp3-head-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.gp3 .gp3-tabs{display:flex;gap:6px;flex-wrap:wrap}
.gp3 .gp3-tab{border:0;background:transparent;color:#5c6880;padding:8px 12px;border-radius:9px;display:inline-flex;align-items:center;min-height:36px;font-size:14px}
.gp3 .gp3-tab.active{background:var(--blue-weak);color:var(--blue-ink);font-weight:700}

/* 버튼 */
.gp3 .gp3-btn,.gp3 .gp3-btn2{border:0;border-radius:10px;padding:10px 15px;font-weight:700;display:inline-flex;align-items:center;justify-content:center;min-height:36px;font-size:13px;white-space:nowrap}
.gp3 .gp3-btn{background:var(--blue);color:#fff}
.gp3 .gp3-btn2{background:#eef2f8;color:#3d4a62}
.gp3 .gp3-btn:hover{background:#2560e0}
.gp3 .gp3-btn2:hover{background:#e3e9f3}

/* 걸러 보기·검색 줄 */
.gp3 .gp3-filter{display:flex;gap:8px;flex-wrap:wrap;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line);margin:0;background:#fff}
.gp3 .gp3-filter label{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font-size:13px;font-weight:600}
.gp3 .gp3-filter select{min-width:130px}
.gp3 .gp3-filter input[type=search],.gp3 .gp3-filter input[name=q]{flex:2;min-width:180px}
.gp3 .gp3-filter-count{color:var(--muted);font-size:12px;margin-left:auto}

/* 표 */
.gp3 .gp3-table-wrap{overflow:auto;max-width:100%;max-height:70vh;border:0;border-radius:0}
.gp3 table.gp3-table{width:100%;border-collapse:collapse;font-size:13px;background:#fff}
.gp3 table.gp3-table th{position:sticky;top:0;z-index:2;background:#f8faff;color:#5c6880;text-align:left;padding:11px 10px;border-bottom:1px solid var(--line);white-space:nowrap;font-weight:700}
.gp3 table.gp3-table td{padding:10px;border-bottom:1px solid #eef1f6;vertical-align:top}
.gp3 table.gp3-table tbody tr:hover{background:#fafcff}
.gp3 table.gp3-table td small{display:block;margin-top:4px;color:var(--muted);font-size:11px}
.gp3 table.gp3-table .num,.gp3 table.gp3-table .gp3-num{text-align:right;font-variant-numeric:tabular-nums}
.gp3 .gp3-title-cell{font-weight:700}
.gp3 .gp3-title-cell a{color:var(--text)}
.gp3 .gp3-title-cell a:hover{color:var(--blue)}

/* 색 칩(알약 배지) — 상태·중요·긴급·위험/경고/안전 */
.gp3 .gp3-chip{display:inline-flex;align-items:center;border-radius:999px;padding:4px 9px;font-size:11px;font-weight:800;white-space:nowrap;border:1px solid transparent}
.gp3 .gp3-chip.neutral{background:#f4f6f9;border-color:#e4e9f1;color:#5c6880}
.gp3 .gp3-chip.blue{background:var(--blue-weak);border-color:#cfe1ff;color:var(--blue-ink)}
.gp3 .gp3-chip.green{background:var(--green-weak);border-color:#caefdf;color:var(--green-ink)}
.gp3 .gp3-chip.orange{background:var(--orange-weak);border-color:#ffe0a7;color:var(--orange-ink)}
.gp3 .gp3-chip.red{background:var(--red-weak);border-color:#ffd0cd;color:var(--red-ink)}
.gp3 .gp3-chip.dark{background:#17233a;border-color:#17233a;color:#fff}
.gp3 .gp3-chip.violet{background:#f3edff;border-color:#e0d2ff;color:#5a32b8}

/* 빈 상태 */
.gp3 .gp3-empty{padding:48px 20px;text-align:center;color:var(--muted)}
.gp3 .gp3-empty strong{display:block;color:#45526a;font-size:17px;margin-bottom:6px}
.gp3 .gp3-empty p{margin:0 0 14px;font-size:13px}
.gp3 tr.gp3-empty-row td{padding:0}
.gp3 .gp3-hint{margin:12px 16px 0;padding:11px 13px;border:1px solid #cfe1ff;background:#f2f7ff;border-radius:11px;color:#3d557d;font-size:13px}
.gp3 .gp3-hint strong{color:#245cc8}
.gp3 .gp3-hint.muted{background:#f8f9fc;border-color:var(--line);color:var(--muted)}
.gp3 .gp3-hint.warn{background:var(--orange-weak);border-color:#ffe0a7;color:#8a5a00}
.gp3 .gp3-hint.danger{background:var(--red-weak);border-color:#ffd0cd;color:#b3413d}
.gp3 .gp3-panel-foot{padding:11px 16px;color:var(--muted);font-size:12px;border-top:1px solid var(--line);background:#fbfcff}

/* 화면이 이미 쓰던 공용 조각을 판 안에서 표준 톤으로 */
.gp3 .notice{margin:10px 0;padding:10px 13px;border-left:3px solid var(--blue);background:#f2f7ff;border-radius:11px;color:#3d557d;font-size:13px}
.gp3 .gp3-panel .notice{margin:10px 16px}
.gp3 .intake-alert{margin:10px 0;padding:11px 13px;border-left:3px solid var(--red);background:var(--red-weak);border-radius:11px;color:#b3413d;font-size:13px}
.gp3 details.notice summary{cursor:pointer}
.gp3 details.notice ul{margin:8px 0 0;padding-left:18px}
.gp3 details.notice li{padding:4px 0}
.gp3 .todo-undo-form{display:inline;margin-left:8px}
.gp3 .todo-undo-form button{border:1px solid var(--line);background:#fff;color:#53617a;border-radius:999px;padding:3px 11px;font-size:11px;font-weight:700}
.gp3 .todo-undo-form button:hover{background:var(--blue-weak);border-color:#cfe1ff;color:var(--blue-ink)}
/* 업무 흐름 카드 띠 — 표 위에 얇게 깔린다(본의 「우선순위 정하기」 안내 줄 자리) */
.gp3 .gp3-flowstrip{padding:12px 16px;background:#fbfcff;border-bottom:1px solid var(--line);display:flex;flex-direction:column;gap:8px}
.gp3 .gp3-flowstrip .todo-flow-empty{color:var(--muted);font-size:12px}

/* ── 수입재고(/import/inventory) ── 표 짜임·계산·주소는 그대로 두고 옷만 표준으로 */
.gp3 .inventory-405{font-size:12px}
.gp3 .inventory-405 .gp3-panel-head{background:#fff;border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:14px;padding:16px;align-items:center}
.gp3 .inventory-405 .gp3-panel-head h2{margin:0 0 10px}
.gp3 .inventory-405 .toolbar-container,.gp3 .inventory-405 .info-card,.gp3 .inventory-405 .table-container{border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);margin-bottom:14px}
.gp3 .inventory-405 .toolbar-container{padding:12px 16px;gap:10px;flex-wrap:wrap}
/* 400px 에서 도구 줄이 4px 넘쳐 화면 전체가 가로로 밀렸다(실측) — 줄바꿈을 허용해 없앴다 */
.gp3 .inventory-405 .tab-group{flex-wrap:wrap;max-width:100%;min-width:0}
.gp3 .inventory-405 .inventory-search-box{max-width:100%;flex-wrap:wrap;min-width:0}
.gp3 .inventory-405 .inventory-search-input{max-width:100%;min-width:0}
.gp3 .inventory-405 .inventory-freshness-alert code{overflow-wrap:anywhere}
@media(max-width:520px){.gp3 .inventory-405 .inventory-search-input{width:100%}}
.gp3 .inventory-405 .info-card{border-left:4px solid var(--blue);padding:14px 16px;color:#46536b;line-height:1.6}
.gp3 .inventory-405 .inventory-1054-note{border:1px solid #cfe1ff;border-left:4px solid var(--blue);background:#f7faff;color:#3d557d}
.gp3 .inventory-405 .inventory-search-box{background:#fff;border:1px solid #cfe1ff;border-radius:10px;padding:5px 11px;box-shadow:none}
.gp3 .inventory-405 .inventory-search-box:focus-within{border-color:#8fb2ff;outline:2px solid #dce8ff}
.gp3 .inventory-405 .inventory-search-input{font-size:13px;width:250px}
.gp3 .inventory-405 .inventory-search-count{background:var(--blue-weak);color:var(--blue-ink);border-radius:999px;padding:3px 9px;font-size:11px}
.gp3 .inventory-405 .inventory-search-clear,.gp3 .inventory-405 .inventory-hscroll button{border:1px solid var(--line);border-radius:8px;background:#f7f9fc;color:#53617a}
.gp3 .inventory-405 .tab-btn,.gp3 .inventory-405 .inventory-row-save{border:1px solid var(--line);border-radius:10px;background:#eef2f8;color:#3d4a62;font-weight:700;min-height:32px}
.gp3 .inventory-405 .tab-btn.active,.gp3 .inventory-405 .save-primary{background:var(--blue);border-color:var(--blue);color:#fff}
.gp3 .inventory-405 .main-table thead th{background:#f8faff;color:#5c6880;border-color:var(--line);padding:9px 8px;font-weight:700}
.gp3 .inventory-405 .main-table th,.gp3 .inventory-405 .main-table td{border-color:#eef1f6}
.gp3 .inventory-405 .main-table tbody tr.inventory-main-row:hover{background:#fafcff}
.gp3 .inventory-405 .th-sales-group{background:var(--blue-weak)!important;color:#2454d1;border-bottom:2px solid var(--blue)!important}
.gp3 .inventory-405 .th-month-group{background:var(--green-weak)!important;color:#1f8a63;border-bottom:2px solid var(--green)!important}
.gp3 .inventory-405 .td-sales-val{background:#f8faff;color:var(--blue-ink)}
.gp3 .inventory-405 .badge{border-radius:999px;padding:3px 9px;font-size:10px;font-weight:800}
.gp3 .inventory-405 .badge-shortage-detail,.gp3 .inventory-405 .badge-shortage-simple{background:var(--red-weak);color:var(--red-ink);border-color:#ffd0cd}
.gp3 .inventory-405 .badge-safety-warning{background:var(--orange-weak);color:var(--orange-ink);border-color:#ffe0a7}
.gp3 .inventory-405 .badge-safe{background:var(--green-weak);color:var(--green-ink);border-color:#caefdf}
.gp3 .inventory-405 .btn-code-toggle{background:var(--blue-weak);border-color:#cfe1ff;color:var(--blue-ink);border-radius:8px;padding:4px 8px}
.gp3 .inventory-405 .group-row{background:#fbfcff;color:#53617a}
.gp3 .inventory-405 .group-sum-row{background:#eef2f8;color:#2c3853}
.gp3 .inventory-405 .group-sum-row td{border-top:2px solid #cbd5e6;border-bottom:2px solid #cbd5e6}
.gp3 .inventory-405 .row-shortage{background:#fffaf9}
.gp3 .inventory-405 .val-balance.danger{color:#c93c38;background:var(--red-weak);border-color:#ffd0cd}
.gp3 .inventory-405 .val-balance.warning{color:#a46a00;background:var(--orange-weak)}
.gp3 .inventory-405 .inventory-search-empty{background:#fff;border:1px dashed #c3cede;border-radius:var(--radius);padding:48px 20px}
.gp3 .inventory-405 .inventory-search-empty h4{font-size:17px;color:#45526a}
.gp3 .inventory-405 .inventory-search-reset{background:var(--blue);border:0;border-radius:10px;padding:10px 15px;font-weight:700;color:#fff}
.gp3 .inventory-405 .inventory-safety-settings input{border-radius:9px;border:1px solid #dfe5ef}
.gp3 .inventory-405 .inventory-safety-settings button{border:0;border-radius:10px;padding:9px 14px;background:var(--blue);color:#fff;font-weight:700;min-height:36px}
.gp3 .inventory-405 .inventory-freshness-alert{border-radius:11px}

/* ── 일일업무일지(/daily) ── */
.gp3 .daily-table{min-width:1180px}
.gp3 .daily-table th{background:#f8faff;color:#5c6880;border-bottom:1px solid var(--line)}
.gp3 .daily-table td{border-bottom:1px solid #eef1f6}
.gp3 .daily-table .daily-author a{color:var(--blue-ink);font-weight:700}
.gp3 .daily-edit-link{background:var(--blue);border-radius:999px;padding:3px 10px;box-shadow:none;font-size:11px}
.gp3 .daily-table .carry-mark{display:inline-block;margin-right:5px;border-radius:999px;padding:2px 7px;background:#f3edff;color:#5a32b8;font-size:10px;font-weight:800}
.gp3 .daily-table .hint{color:var(--muted)}
.gp3 .daily-date-filter label{color:var(--muted)}

/* ── TO DO(/todo) ── */
.gp3 .todo-table td small .todo-origin{border-radius:999px;padding:2px 8px;font-size:10px;font-weight:800;background:#f3edff;color:#5a32b8}
.gp3 .todo-table td small .todo-origin-legacy{background:#eef2f8;color:#53617a}
.gp3 .todo-complete{white-space:nowrap}
.gp3 .todo-complete form{display:inline;margin:0}
.gp3 .todo-complete button,.gp3 .todo-complete a{display:inline-flex;align-items:center;min-height:32px;border:1px solid var(--line);background:#f7f9fc;color:#3d4a62;border-radius:9px;padding:6px 10px;font-size:12px;font-weight:700;box-shadow:none;margin:2px 3px 2px 0}
.gp3 .todo-complete button:hover{background:var(--blue-weak);border-color:#cfe1ff;color:var(--blue-ink)}
.gp3 .todo-complete select{padding:6px 8px;font-size:12px}
.gp3 .todo-work-order-details summary{cursor:pointer;font-weight:700}
.gp3 .todo-work-order-body{margin-top:6px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:#fbfcff;white-space:pre-wrap;font-weight:400}
.gp3 .todo-flow-card{border:1px solid var(--line);border-radius:12px;background:#fff;box-shadow:none;margin:0}
.gp3 .gp3-table-wrap .gp3-empty-row:hover{background:transparent}

@media(max-width:1180px){.gp3 .gp3-stats{grid-template-columns:repeat(2,1fr)}}
@media(max-width:820px){
  body:has(.gp3):not(.page-wide) main,body.gp3-page:not(.page-wide) main{padding:0 12px 20px}
  body.page-wide:has(.gp3) main,body.page-wide.gp3-page main{padding:0 12px 20px}
  .gp3 .gp3-hero{align-items:start;flex-direction:column;gap:6px;padding:14px 2px 12px}
  .gp3 .gp3-hero h1{font-size:20px}
  .gp3 .gp3-panel-head{flex-wrap:wrap;gap:10px}
}
@media(max-width:520px){
  .gp3 .gp3-stats{grid-template-columns:1fr 1fr;gap:10px}
  .gp3 .gp3-stat{padding:12px;gap:9px}
  .gp3 .gp3-stat-icon{width:34px;height:34px;border-radius:11px;font-size:16px}
  .gp3 .gp3-stat-value{font-size:20px}
  .gp3 table.gp3-table{font-size:12px}
  .gp3 .gp3-filter select,.gp3 .gp3-filter input[type=search]{min-width:calc(50% - 5px);flex:1}
}
/* ───────── 개-1055 끝 ───────── */

/* ════════════════════════════════════════════════════════════════
   개-1084 (0922) — 세 화면의 **아래 표·목록 전부**도 우선순위 페이지(본)
   표 결로 맞춘다. 개-1055 는 위쪽(머리줄·요약 칸·탭·검색 줄)만 바꿨고
   아래 표는 옛 모양이었다 — 이사님: 「밑에 포맷은 그대로인데?」
   ★범위 = 개-1055 와 똑같이 `.gp3` 안에서만 걸린다(세 화면 밖은 안 바뀐다).
   ★지킨 것 = 칸·숫자·입력·산식·펼침·저장·주소·동작·글자 전부 그대로.
   ★바꾼 것 = 줄 사이 선·바탕·여백·글자 크기·알약 모양뿐.
   ★본의 표 결(실측 `..\우선순위페이지_원래디자인입히기_0920\shots\py_tasks.html`):
     머리 #f8faff · 회색 글자 · 세로 칸막이 없음 · 줄 사이 #eef1f6 한 줄 ·
     줄은 흰 바탕 + 옅은 호버 · 상태는 알약 칩 · 숫자는 오른쪽·자릿수 정렬.
   ★되돌리는 길 = 이 블록(아래 「개-1084 끝」까지)을 지우면 개-1055 판이다.
   ════════════════════════════════════════════════════════════════ */

/* ── ① 공용: 옛 전역 표 규칙(줄무늬 #faf9fc · 보라 호버 #f3f0f9)을 세 화면에서만 끈다 ── */
.gp3 table.gp3-table tbody tr td,.gp3 table.gp3-table tbody tr th{background:#fff}
.gp3 table.gp3-table tbody tr:hover td{background:#fafcff}
.gp3 table.gp3-table tbody tr.gp3-empty-row:hover td{background:#fff}
.gp3 table.gp3-table thead th{color:#66748d}
/* 표를 감싼 자리도 흰 카드 안이다(본은 표가 언제나 흰 카드 위에 놓인다) */
.gp3 .gp3-table-wrap{background:#fff}
/* 숫자 칸 — 오른쪽 맞춤·자릿수 정렬 */
.gp3 table.gp3-table td.gp3-num,.gp3 table.gp3-table th.gp3-num{text-align:right;font-variant-numeric:tabular-nums}

/* ── ② 일일업무일지(/daily) 아래 표 ── 세로 칸막이 없이, 사람 묶음만 또렷하게 */
/* 한 사람 안의 줄 = 더 옅은 선. 사람이 바뀌는 자리 = 본의 --line 한 줄.
   부서·작성자·특이사항 칸은 rowspan 이라 그 칸의 아래선이 곧 묶음 경계선이 된다. */
.gp3 .daily-table td{border-bottom:1px solid #f1f4f9;padding:10px}
.gp3 .daily-table td[rowspan]{border-bottom:1px solid #e6eaf1;border-right:1px solid #f1f4f9}
.gp3 .daily-table td.daily-note-cell{border-right:0;border-left:1px solid #f1f4f9}
.gp3 .daily-table td.daily-dept{color:#5c6880;font-weight:600}
/* 색은 잰 값으로 고른다 — #66748d 는 흰 바탕에서 4.72:1(4.5 위).
   처음 쓴 #8a95a8 은 3.02:1 로 모자라 물렀다(실측). */
.gp3 .daily-table td.daily-no{color:#66748d;font-weight:600}
.gp3 .daily-table thead tr:first-child th{font-size:13px;font-weight:700}
.gp3 .daily-table thead tr:last-child th{background:#fbfcff;font-size:12px;font-weight:700;color:#66748d}
/* 「수정」 알약: `.gp3 a{color:inherit}` 가 `.daily-edit-link{color:#fff}` 를 눌러
   파랑 글자·파랑 알약(대비 1.06:1)이 되어 글자가 안 보였다 — 표지를 더해 흰 글자로 되돌린다
   (흰 글자 on #2f6df6 = 4.53:1, 실측). */
.gp3 .daily-table .daily-author a.daily-edit-link,.gp3 a.daily-edit-link{color:#fff}
/* 결과·상태 알약을 본의 칩 크기로(글자는 그대로 남긴다 — 색만으로 뜻을 나르지 않는다) */
.gp3 .daily-table td.daily-result span,.gp3 .daily-table td.daily-status span{padding:4px 10px;font-size:11px;font-weight:800;line-height:1;border:1px solid transparent}
.gp3 .daily-table .st-wait{border-color:#ffe0a7}
.gp3 .daily-table .st-run{border-color:#cfe1ff}
.gp3 .daily-table .st-done{border-color:#caefdf}
.gp3 .daily-table .st-cancel{border-color:#ffd0cd}
.gp3 .daily-table .carry-mark{border:1px solid #e0d2ff;line-height:1}

/* ── ③ TO DO(/todo) 아래 표와 목록 ── */
/* 표 위 안내 판(완료 되돌리기·주인 없는 일·인수인계 받음)을 본의 흰 카드로.
   ※ app.py 의 `.gf824-standard .notice`(같은 무게 · 더 뒤에 실림)를 넘으려면
     이름표만으로는 안 되고 홀태(p/div/details)를 함께 적어야 한다 — 실측으로 확인했다. */
.gp3 details.notice,.gp3 p.notice,.gp3 div.notice{background:#fff;border:1px solid var(--line);border-left:3px solid var(--blue);border-radius:14px;box-shadow:var(--shadow);padding:12px 15px;color:#46536b;font-size:13px}
.gp3 .gp3-panel p.notice,.gp3 .gp3-panel div.notice,.gp3 .gp3-panel details.notice{margin:12px 16px}
.gp3 details.notice summary{color:#3d4a62;font-weight:700}
.gp3 div.intake-alert,.gp3 p.intake-alert{border:1px solid #ffd0cd;border-left:3px solid var(--red);border-radius:14px;box-shadow:var(--shadow);padding:12px 15px}
/* 구분 뱃지(견적 등) — 네모에서 알약으로.
   ※ `.gf824-standard .badge`(app.py · 같은 무게 · 더 뒤)가 둥글기 4px·11.5px 로 눌렀다 —
     이름표 셋으로 무게를 올려 넘긴다(실측: 4px → 999px). */
.gp3 .todo-table .todo-kind-badge,.gp3 span.todo-kind-badge{display:inline-flex;align-items:center;margin-right:5px;padding:3px 9px;border:1px solid #cfe1ff;border-radius:999px;background:var(--blue-weak);color:var(--blue-ink);font-size:10px;font-weight:800;line-height:1;vertical-align:middle}
/* 업무 제목 칸 — 제목 / 거래처·담당 / 출처 세 켜를 본의 위계로 */
.gp3 .todo-table td.todo-task{padding:12px 10px}
.gp3 .todo-table td.todo-task>a strong,.gp3 .todo-table td.todo-task>strong{font-size:13px;line-height:1.4}
.gp3 .todo-table td small{color:#66748d}
.gp3 .todo-table td small .todo-origin{border:1px solid #e0d2ff;line-height:1}
.gp3 .todo-table td small .todo-origin-legacy{border-color:#e4e9f1}
/* 처리 단추 — 본의 보조 단추 결(알약 아님 · 둥근 네모) */
.gp3 .todo-complete button,.gp3 .todo-complete a{border-radius:10px;font-weight:700}
.gp3 .todo-complete button:focus-visible,.gp3 .todo-complete a:focus-visible{outline:2px solid #8fb2ff;outline-offset:1px}
/* 업무 흐름 카드 띠 — 본의 카드 결 */
.gp3 .todo-flow-card{border:1px solid var(--line);border-radius:13px;background:#fff}
.gp3 .todo-flow-head{font-weight:700;color:#14213d}
/* 400px 에서 제목이 길면 오른쪽 상태 알약이 눌려 글자가 한 자씩 세로로 쌓였다(실측 그림).
   제목이 줄을 접게 하고 알약은 줄지 않게 못 박는다. */
.gp3 .todo-flow-head{flex-wrap:wrap;align-items:flex-start;row-gap:6px}
.gp3 .todo-flow-head>span:first-child{flex:1 1 auto;min-width:0}
.gp3 .status-badge{flex:0 0 auto;display:inline-flex;align-items:center;border-radius:999px;padding:3px 9px;font-size:11px;font-weight:800;line-height:1;white-space:nowrap}
/* 표 밑 꼬리글 */
.gp3 .gp3-panel-foot{color:#66748d}

/* ── ④ 수입재고(/import/inventory) — 개-1055 가 여기서 정한 값 가운데 고칠 것만 ── */
/* 「월말」 값의 경고색 #a46a00 은 #fff6e7 바탕에서 4.22:1 로 모자랐다(실측) →
   #8a5a00 = 5.53:1 로 내린다. 값·자리·뜻은 그대로다. */
.gp3 .inventory-405 .val-balance.warning{color:#8a5a00;background:var(--orange-weak)}
/* 「부족」 월말 값도 같은 잣대로: #c93c38 → 4.53:1 은 겨우 넘으니 #b83430(5.31:1) 로 */
.gp3 .inventory-405 .val-balance.danger{color:#b83430;background:var(--red-weak);border-color:#ffd0cd}
/* 품목 코드 단추 — 본의 알약 칩 모양(개-1055 는 8px 네모였다) · 표 글자 크기에 맞춘다 */
.gp3 .inventory-405 .btn-code-toggle{border-radius:999px;padding:4px 10px;font-size:12px}
/* 입고 칸(input)은 회사 공용 폼 잣대(app.py)가 34px 로 잡는다 — 손대지 않고,
   옆의 「출고」·「월말」 값을 같은 높이로 세워 세 줄이 가로로 맞게 한다. */
.gp3 .inventory-405 .io-readonly,.gp3 .inventory-405 .val-balance{display:inline-flex;align-items:center;justify-content:flex-end;min-height:26px}

/* ── ⑤ 400px(휴대폰) — 넓은 표는 제 칸 안에서만 가로로 민다 ── */
@media(max-width:520px){
  .gp3 .daily-table td{padding:9px 8px}
  .gp3 .todo-table td.todo-task{padding:10px 8px}
  .gp3 details.notice,.gp3 .notice{padding:11px 12px;border-radius:12px}
}
/* ───────── 개-1084 끝 ───────── */

/* ════════ 개-1100 (0922) — 수입재고 「신제품 추가」 판을 새 화면 표준으로 ════════
   ★지킨 것 = 입력 칸(품목명·규격·수입처·예상 입고 시기)·필수 표시·짝짓기 폼·코드 짝짓기
     동작·주소(/import/inventory/manual, /import/inventory/manual/match)·저장 값 전부 그대로다.
   ★바꾼 것 = 이름표를 칸 위로, 흰 카드·표준 표 옷, 「이카운트 등록 전」을 알약으로 분리했다.
   ★되돌리는 길 = 이 표시부터 「개-1100 끝」까지 지우면 개-1097 판 모양으로 돌아온다
     (web_import.py 쪽 gp3-field·gp3-chip·gp3-table 클래스 추가도 함께 되돌려야 한다). */
.gp3 .gp3-manual-panel .gp3-panel-head h2{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.gp3 .gp3-manual-add{display:flex;flex-wrap:wrap;gap:12px 14px;align-items:end;padding:14px 16px;border-bottom:1px solid var(--line);background:#fbfcff}
.gp3 .gp3-manual-add .gp3-field{display:flex;flex-direction:column;gap:4px;flex:1 1 170px;min-width:150px}
.gp3 .gp3-manual-add .gp3-field-label{font-size:12px;font-weight:700;color:#3d4a62}
.gp3 .gp3-manual-add .gp3-field-required{color:var(--red-ink);font-size:11px;font-weight:800;margin-left:2px}
.gp3 .gp3-manual-add .gp3-field input{width:100%}
.gp3 .gp3-manual-add-btn{flex:0 0 auto}
.gp3 .gp3-manual-panel .table-wrap{border:0}
.gp3 .gp3-manual-match{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.gp3 .gp3-manual-match input{min-width:0}
.gp3 .gp3-manual-match input[name=item_code]{width:120px}
.gp3 .gp3-manual-match input[name=item_name]{flex:1 1 180px}
@media(max-width:520px){
  .gp3 .gp3-manual-add{padding:12px}
  .gp3 .gp3-manual-add .gp3-field{flex:1 1 100%}
  .gp3 .gp3-manual-add-btn{flex:1 1 100%}
  .gp3 .gp3-manual-match input[name=item_code]{width:100%}
}
/* 개-1100 끝 */

/* ════════ 개-1140 (0922) — 일일업무일지 목록을 시안 B 「부서 한 줄 + 펼침」으로 ════════
   이사님이 고르신 시안: 디자인_과감한시안_0922/일일업무일지_시안B.html
   ★지킨 것 = 날짜 조회·오늘 것 쓰기·엑셀로 받기·부서/작성자/No/전일·금일 내용·결과/상태/
     특이사항·건의·수정 링크·이월 표시·전일 기록 없음 안내 — 값과 주소는 하나도 안 바꿨다.
   ★바뀐 것 = 30줄 표를 부서 3줄 <details> 로 접고, 누르면 그 부서 사람 블록이 펼쳐진다.
   ★범위 = /daily 목록(daily_list_page)만이다. /daily/{id} 상세·board(상급자 보고)의
     daily_table_html 은 그대로 옛 표 모양이다 — gp3d- 클래스를 안 쓰니 안 걸린다.
   ★되돌리는 길 = web_workorder.py 의 daily_list_page 에서 daily_dept_list_html 호출을
     daily_table_html 호출로 되돌리고, 이 블록(아래 「개-1140 끝」까지)을 지우면 된다.
   ════════════════════════════════════════════════════════════════ */
.gp3 .gp3d-list{display:flex;flex-direction:column;gap:0}
.gp3 details.gp3d-dept{border-bottom:1px solid var(--line)}
.gp3 details.gp3d-dept:last-child{border-bottom:0}
.gp3 details.gp3d-dept summary{list-style:none;cursor:pointer;padding:14px 16px;display:grid;grid-template-columns:120px minmax(0,1fr) auto;gap:14px;align-items:center}
.gp3 details.gp3d-dept summary::-webkit-details-marker{display:none}
.gp3 details.gp3d-dept summary:hover{background:#fafcff}
.gp3 details.gp3d-dept summary:focus-visible{outline:2px solid #8fb2ff;outline-offset:-2px}
.gp3 details.gp3d-dept[open] summary{background:#f7faff;box-shadow:inset 3px 0 0 var(--blue)}
.gp3 .gp3d-name{font-size:16px;font-weight:800;color:var(--text);display:inline-flex;align-items:center;gap:6px}
.gp3 .gp3d-arrow{color:var(--muted);font-size:11px;display:inline-block;transition:transform .15s}
.gp3 details.gp3d-dept[open] .gp3d-arrow{transform:rotate(180deg)}
.gp3 .gp3d-who{display:flex;gap:6px;flex-wrap:wrap;min-width:0}
.gp3 .gp3d-who a{background:#f4f7fc;border:1px solid var(--line);border-radius:999px;padding:3px 10px;font-size:11.5px;color:var(--blue-ink);font-weight:700}
.gp3 .gp3d-who a:hover{background:var(--blue-weak)}
.gp3 .gp3d-cnt{display:flex;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.gp3 .gp3d-body{padding:2px 16px 16px;background:#fbfcff;border-top:1px solid #eef1f6}
.gp3 .gp3d-pblock{background:#fff;border:1px solid var(--line);border-radius:12px;padding:13px 15px;margin-top:12px}
.gp3 .gp3d-ph{display:flex;align-items:center;gap:10px;justify-content:space-between;margin-bottom:9px;flex-wrap:wrap}
.gp3 .gp3d-who2{font-size:14px;font-weight:800;display:flex;align-items:center;gap:8px}
.gp3 .gp3d-who2 a{color:var(--blue-ink)}
.gp3 .gp3d-colhead{display:grid;grid-template-columns:26px minmax(0,1fr) minmax(0,1fr);gap:10px;font-size:11px;font-weight:800;color:#5c6880;padding-bottom:6px;border-bottom:1px solid var(--line)}
.gp3 .gp3d-pairs{display:flex;flex-direction:column}
.gp3 .gp3d-pair{display:grid;grid-template-columns:26px minmax(0,1fr) minmax(0,1fr);gap:10px;padding:9px 0;border-top:1px solid #f1f4f9}
.gp3 .gp3d-pair:first-child{border-top:0}
.gp3 .gp3d-pair .no{color:var(--muted);font-size:11.5px;font-weight:800;text-align:right;padding-top:2px;font-variant-numeric:tabular-nums}
.gp3 .gp3d-pair .cell{min-width:0}
.gp3 .gp3d-pair .txt{white-space:pre-wrap;word-break:keep-all;overflow-wrap:anywhere;font-size:12.5px;line-height:1.5}
.gp3 .gp3d-pair .txt.hint{color:#9aa6bd}
.gp3 .gp3d-pair .tag{margin-top:4px}
.gp3 .gp3d-pair .tag span{padding:3px 9px;font-size:11px}
.gp3 .gp3d-pair .tag .muted{padding:0;background:none;border:0;color:var(--muted);font-size:11.5px}
.gp3 .gp3d-carry{background:#f3edff;color:#5a32b8;border-radius:5px;padding:1px 6px;font-size:10.5px;font-weight:800}
.gp3 .gp3d-note{margin-top:10px;border-top:1px solid #f1f4f9;padding-top:8px;font-size:12px;color:var(--muted)}
.gp3 .gp3d-note b{color:var(--text)}
@media(max-width:760px){
  .gp3 details.gp3d-dept summary{grid-template-columns:1fr;gap:8px}
  .gp3 .gp3d-cnt{justify-content:flex-start}
  .gp3 .gp3d-pair{grid-template-columns:20px minmax(0,1fr)}
  .gp3 .gp3d-pair .cell.today{grid-column:2}
  .gp3 .gp3d-colhead{display:none}
}
/* 개-1140 끝 */
/* ───────── 개-1100 끝 ───────── */
/* 공통부품 운영 브리지 시작 — 개-2941 · 이름표 g- 로만 걸린다(클래스를 안 붙인 화면은 그대로) */
/* 출처: C:\gfnd\_작업\웹공통시안_스티치_0929\공통부품 tokens.css·components.css(카드 4 · 표 7 · 딱지 8 · 단추 9 · 입력 10 · 알림 13 · 로그인 14 · 탭 16 · 사용자 17).
   변수는 모두 --g- 로 바꿨다. 바깥 글꼴·왼쪽 메뉴(g-side)·늘면 빨강 증감색(g-diff)은 넣지 않았다(길.md 2절). 되돌리기: 이 시작~끝 덩어리를 지운다. */
:root{--g-c-bg:#f5f7fb;--g-c-surface:#ffffff;--g-c-primary:#2f6df6;--g-c-text:#14213d;--g-c-muted:#6f7c93;--g-c-good:#27ae7d;--g-c-good-bg:rgba(39, 174, 125, 0.10);--g-c-warn:#f6a623;--g-c-warn-text:#d98207;--g-c-warn-bg:rgba(246, 166, 35, 0.12);--g-c-danger:#ef5350;--g-c-danger-bg:rgba(239, 83, 80, 0.12);--g-c-neutral-bg:rgba(111, 124, 147, 0.12);--g-c-line-faint:rgba(111, 124, 147, 0.12);--g-c-line:rgba(111, 124, 147, 0.18);--g-c-line-strong:rgba(111, 124, 147, 0.25);--g-c-primary-soft:rgba(47, 109, 246, 0.08);--g-c-focus-ring:rgba(47, 109, 246, 0.15);--g-c-danger-ring:rgba(239, 83, 80, 0.15);--g-c-hover:#f8fafd;--g-font:"Pretendard","Segoe UI","Malgun Gothic","맑은 고딕","Apple SD Gothic Neo","Noto Sans KR",Arial,sans-serif;--g-font-code:"D2Coding", Consolas, "Courier New", monospace;--g-fs-title:24px;--g-fs-section:18px;--g-fs-body:14px;--g-fs-label:13px;--g-fs-small:12px;--g-fs-big:28px;--g-fw-regular:400;--g-fw-medium:500;--g-fw-semibold:600;--g-fw-bold:700;--g-r-card:16px;--g-r-control:8px;--g-r-badge:6px;--g-shadow-card:0 2px 12px rgba(20, 33, 61, 0.04);--g-ring-focus:0 0 0 3px var(--g-c-focus-ring);--g-sp-1:4px;--g-sp-2:8px;--g-sp-3:12px;--g-sp-4:16px;--g-sp-5:20px;--g-sp-6:24px;--g-sp-8:32px;--g-page-pad:24px;--g-card-gap:20px;--g-card-pad:20px;--g-h-control:40px;--g-h-control-sm:32px;--g-h-th:40px;--g-h-row:44px;--g-h-row-sm:36px;--g-h-badge:24px;}
.g-card {
  min-width: 0;
  background: var(--g-c-surface);
  border-radius: var(--g-r-card);
  box-shadow: var(--g-shadow-card);
  padding: var(--g-card-pad);
}
.g-card--flush { padding: 0; overflow: hidden; }
.g-card__head {
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  justify-content: space-between;
  gap: var(--g-sp-3);
  min-height: var(--g-h-control-sm);
  margin-bottom: var(--g-sp-4);
}
.g-card--flush > .g-card__head { padding: var(--g-card-pad) var(--g-card-pad) 0; }
.g-card__title-wrap { display: flex; align-items: center; gap: var(--g-sp-2); min-width: 0; }
.g-card__title-wrap > * { flex: none; }
.g-card__title {
  font-size: var(--g-fs-section);
  font-weight: var(--g-fw-semibold);
  line-height: 1.4;
  white-space: nowrap;
}
.g-card__title-wrap > .g-card__title,
.g-card__title-wrap > .g-card__meta { flex: 0 1 auto; min-width: 0; overflow: hidden; text-overflow: ellipsis; }
.g-card__meta {
  font-size: var(--g-fs-label);
  color: var(--g-c-muted);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.g-card__body--pad { padding: 0 var(--g-card-pad) var(--g-card-pad); }
.g-card__foot {
  padding: var(--g-sp-3) var(--g-card-pad);
  border-top: 1px solid var(--g-c-line-faint);
}
.g-toolbar { flex: none; display: flex; align-items: center; gap: var(--g-sp-2); margin-left: auto; }
.g-table-wrap { overflow-x: auto; }
.g-table {
  width: 100%;
  border-collapse: separate;
  border-spacing: 0;
  font-size: var(--g-fs-body);
}
.g-table th {
  height: var(--g-h-th);
  padding: 0 var(--g-sp-3);
  background: var(--g-c-bg);
  color: var(--g-c-muted);
  font-size: var(--g-fs-label);
  font-weight: var(--g-fw-semibold);
  text-align: left;
  white-space: nowrap;
  border-bottom: 1px solid var(--g-c-line);
}
.g-table td {
  height: var(--g-h-row);
  padding: 0 var(--g-sp-3);
  white-space: nowrap;
  vertical-align: middle;
  border-bottom: 1px solid var(--g-c-line-faint);
}
.g-table th:first-child, .g-table td:first-child { padding-left: var(--g-card-pad); }
.g-table th:last-child,  .g-table td:last-child  { padding-right: var(--g-card-pad); }
.g-table tbody tr:hover td { background: var(--g-c-hover); }
.g-table tbody tr:last-child td { border-bottom: 0; }
.g-table .is-num { text-align: right; }
.g-table .is-center { text-align: center; }
.g-table .is-muted { color: var(--g-c-muted); }
.g-table tfoot td {
  background: var(--g-c-bg);
  font-weight: var(--g-fw-bold);
  border-top: 1px solid var(--g-c-line-strong);
  border-bottom: 0;
}
.g-table tbody tr.is-selected td { background: var(--g-c-primary-soft); }
.g-table tbody tr.is-selected td:first-child { box-shadow: inset 3px 0 0 var(--g-c-primary); }
.g-table tbody tr.is-link { cursor: pointer; }
.g-table--compact td { height: var(--g-h-row-sm); }
.g-sort {
  all: unset;
  display: inline-flex;
  align-items: center;
  gap: 4px;
  cursor: pointer;
  white-space: nowrap;
}
.g-sort::after { content: "↕"; font-size: 11px; opacity: 0.55; }
.g-sort:hover { color: var(--g-c-text); }
.g-sort:focus-visible { border-radius: 4px; box-shadow: var(--g-ring-focus); }
th[aria-sort="ascending"]  .g-sort,
th[aria-sort="descending"] .g-sort { color: var(--g-c-text); }
th[aria-sort="ascending"]  .g-sort::after { content: "▲"; font-size: 9px; opacity: 1; color: var(--g-c-primary); }
th[aria-sort="descending"] .g-sort::after { content: "▼"; font-size: 9px; opacity: 1; color: var(--g-c-primary); }
.g-table tr.g-table__empty td { height: auto; padding: 0; }
.g-table tr.g-table__empty:hover td { background: transparent; }
.g-empty {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: var(--g-sp-1);
  min-height: 160px;
  padding: var(--g-sp-6);
  color: var(--g-c-muted);
  text-align: center;
  white-space: normal;
}
.g-empty__title { font-size: var(--g-fs-body); font-weight: var(--g-fw-semibold); color: var(--g-c-text); }
.g-empty__desc { font-size: var(--g-fs-label); }
.g-badge {
  display: inline-flex;
  align-items: center;
  height: var(--g-h-badge);
  padding: 0 var(--g-sp-2);
  border-radius: var(--g-r-badge);
  font-size: var(--g-fs-small);
  font-weight: var(--g-fw-semibold);
  line-height: 1;
  white-space: nowrap;
  vertical-align: middle;
}
.g-badge--good    { color: var(--g-c-good);      background: var(--g-c-good-bg); }
.g-badge--warn    { color: var(--g-c-warn-text); background: var(--g-c-warn-bg); }
.g-badge--danger  { color: var(--g-c-danger);    background: var(--g-c-danger-bg); }
.g-badge--neutral { color: var(--g-c-muted);     background: var(--g-c-neutral-bg); }
.g-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 6px;
  height: var(--g-h-control);
  padding: 0 var(--g-sp-4);
  border: 1px solid transparent;
  border-radius: var(--g-r-control);
  background: var(--g-c-surface);
  font-size: var(--g-fs-body);
  font-weight: var(--g-fw-semibold);
  line-height: 1;
  white-space: nowrap;
  cursor: pointer;
  text-decoration: none;
  transition: box-shadow 0.12s, background-color 0.12s;
}
.g-btn:hover { text-decoration: none; }
.g-btn:focus-visible { outline: none; box-shadow: var(--g-ring-focus); }
.g-btn:disabled, .g-btn.is-disabled { opacity: 0.45; cursor: not-allowed; }
.g-btn--primary { background: var(--g-c-primary); color: var(--g-c-surface); }
.g-btn--primary:hover:not(:disabled) { box-shadow: inset 0 0 0 99px rgba(20, 33, 61, 0.10); }
.g-btn--primary:focus-visible { box-shadow: var(--g-ring-focus); }
.g-btn--secondary { background: var(--g-c-surface); color: var(--g-c-text); border-color: var(--g-c-line-strong); }
.g-btn--secondary:hover:not(:disabled) { background: var(--g-c-hover); }
.g-btn--danger { background: var(--g-c-danger); color: var(--g-c-surface); }
.g-btn--danger:hover:not(:disabled) { box-shadow: inset 0 0 0 99px rgba(20, 33, 61, 0.10); }
.g-btn--danger:focus-visible { box-shadow: 0 0 0 3px var(--g-c-danger-ring); }
.g-btn--sm { height: var(--g-h-control-sm); padding: 0 var(--g-sp-3); font-size: var(--g-fs-label); }
.g-btn--block { width: 100%; }
.g-field { display: flex; flex-direction: column; gap: 6px; min-width: 0; }
.g-label {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  font-size: var(--g-fs-label);
  font-weight: var(--g-fw-medium);
  color: var(--g-c-muted);
  white-space: nowrap;
}
.g-label--req::after {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--g-c-danger);
}
.g-input, .g-select, .g-textarea {
  width: 100%;
  height: var(--g-h-control);
  padding: 0 var(--g-sp-3);
  border: 1px solid var(--g-c-line-strong);
  border-radius: var(--g-r-control);
  background: var(--g-c-surface);
  color: var(--g-c-text);
  font-size: var(--g-fs-body);
  outline: none;
  transition: border-color 0.12s, box-shadow 0.12s;
}
.g-input::placeholder, .g-textarea::placeholder { color: var(--g-c-muted); opacity: 0.8; }
.g-input:focus, .g-select:focus, .g-textarea:focus,
.g-input.is-focus, .g-select.is-focus, .g-textarea.is-focus {
  border-color: var(--g-c-primary);
  box-shadow: var(--g-ring-focus);
}
.g-input:disabled, .g-select:disabled, .g-textarea:disabled,
.g-input[readonly] {
  background: var(--g-c-bg);
  color: var(--g-c-muted);
}
.g-input:disabled, .g-select:disabled, .g-textarea:disabled { cursor: not-allowed; }
.g-input--num { text-align: right; }
.g-input--date { width: 150px; }
.g-input--sm, .g-select--sm { height: var(--g-h-control-sm); font-size: var(--g-fs-label); }
.g-select {
  appearance: none;
  -webkit-appearance: none;
  padding-right: 36px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%236f7c93' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 12px center;
  text-overflow: ellipsis;
  white-space: nowrap;
  cursor: pointer;
}
.g-select--w { width: 160px; }
.g-textarea {
  height: auto;
  min-height: 96px;
  padding: 10px var(--g-sp-3);
  line-height: 1.6;
  resize: vertical;
}
.g-field.is-error .g-input,
.g-field.is-error .g-select,
.g-field.is-error .g-textarea { border-color: var(--g-c-danger); }
.g-field.is-error .g-input:focus,
.g-field.is-error .g-select:focus,
.g-field.is-error .g-textarea:focus { box-shadow: 0 0 0 3px var(--g-c-danger-ring); }
.g-field__msg { font-size: var(--g-fs-small); color: var(--g-c-danger); }
.g-field__help { font-size: var(--g-fs-small); color: var(--g-c-muted); }
.g-affix { position: relative; }
.g-affix > .g-input { padding-right: 48px; }
.g-affix > span {
  position: absolute;
  right: var(--g-sp-3);
  top: 50%;
  transform: translateY(-50%);
  font-size: var(--g-fs-label);
  color: var(--g-c-muted);
  pointer-events: none;
}
.g-check {
  display: inline-flex;
  align-items: center;
  gap: var(--g-sp-2);
  font-size: var(--g-fs-body);
  white-space: nowrap;
  cursor: pointer;
}
.g-check input { width: 16px; height: 16px; margin: 0; accent-color: var(--g-c-primary); }
.g-checks { display: flex; flex-wrap: wrap; align-items: center; gap: var(--g-sp-2) var(--g-sp-5); min-height: var(--g-h-control); }
.g-form { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--g-card-gap) var(--g-sp-6); }
.g-form--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
.g-form__full { grid-column: 1 / -1; }
.g-form-actions {
  display: flex;
  align-items: center;
  justify-content: flex-end;
  gap: var(--g-sp-2);
}
.g-form-actions__left { margin-right: auto; font-size: var(--g-fs-label); color: var(--g-c-muted); }
.g-alert {
  display: flex;
  align-items: flex-start;
  gap: var(--g-sp-3);
  padding: 12px var(--g-sp-4);
  border-radius: var(--g-r-control);
  border: 1px solid transparent;
  font-size: var(--g-fs-body);
}
.g-alert__mark {
  flex: none;
  display: grid;
  place-items: center;
  width: 20px;
  height: 20px;
  margin-top: 1px;
  border-radius: 50%;
  color: var(--g-c-surface);
  font-size: var(--g-fs-small);
  font-weight: var(--g-fw-bold);
  line-height: 1;
}
.g-alert__text { min-width: 0; flex: 1; }
.g-alert__title { font-weight: var(--g-fw-semibold); }
.g-alert__action { flex: none; margin-left: auto; font-size: var(--g-fs-label); font-weight: var(--g-fw-semibold); white-space: nowrap; line-height: 22px; }
.g-alert--info   { background: var(--g-c-primary-soft); border-color: var(--g-c-focus-ring); }
.g-alert--info   .g-alert__mark { background: var(--g-c-primary); }
.g-alert--warn   { background: var(--g-c-warn-bg); border-color: var(--g-c-warn-bg); }
.g-alert--warn   .g-alert__mark { background: var(--g-c-warn); }
.g-alert--warn   .g-alert__title { color: var(--g-c-warn-text); }
.g-alert--danger { background: var(--g-c-danger-bg); border-color: var(--g-c-danger-bg); }
.g-alert--danger .g-alert__mark { background: var(--g-c-danger); }
.g-alert--danger .g-alert__title { color: var(--g-c-danger); }
.g-login {
  display: grid;
  place-items: center;
  min-height: 100vh;
  padding: var(--g-page-pad);
  background: var(--g-c-bg);
}
.g-login__card {
  width: 400px;
  max-width: 100%;
  padding: var(--g-sp-8);
  background: var(--g-c-surface);
  border-radius: var(--g-r-card);
  box-shadow: var(--g-shadow-card);
}
.g-login__logo {
  display: grid;
  place-items: center;
  width: 160px;
  height: 48px;
  margin: 0 auto var(--g-sp-6);
  border: 1px dashed var(--g-c-line-strong);
  border-radius: var(--g-r-control);
  color: var(--g-c-muted);
  font-size: var(--g-fs-small);
}
.g-login__title { text-align: center; font-size: var(--g-fs-section); font-weight: var(--g-fw-semibold); }
.g-login__desc { margin-top: var(--g-sp-1); text-align: center; font-size: var(--g-fs-label); color: var(--g-c-muted); }
.g-login__form { display: flex; flex-direction: column; gap: var(--g-sp-4); margin-top: var(--g-sp-6); }
.g-login__row { display: flex; align-items: center; justify-content: space-between; font-size: var(--g-fs-label); }
.g-login__foot { margin-top: var(--g-sp-5); text-align: center; font-size: var(--g-fs-small); color: var(--g-c-muted); }
.g-tabs {
  min-width: 0;
  display: flex;
  overflow-x: auto;
  padding: 0 var(--g-sp-3);
  background: var(--g-c-surface);
  border-radius: var(--g-r-card);
  box-shadow: var(--g-shadow-card);
  scrollbar-width: thin;
}
.g-tabs__item {
  position: relative;
  flex: none;
  display: inline-flex;
  align-items: center;
  height: 48px;
  padding: 0 var(--g-sp-4);
  color: var(--g-c-muted);
  font-size: var(--g-fs-body);
  font-weight: var(--g-fw-medium);
  white-space: nowrap;
}
.g-tabs__item:hover { color: var(--g-c-text); text-decoration: none; }
.g-tabs__item.is-active { color: var(--g-c-primary); font-weight: var(--g-fw-bold); }
.g-tabs__item.is-active::after {
  content: "";
  position: absolute;
  left: var(--g-sp-3); right: var(--g-sp-3); bottom: 0;
  height: 3px;
  border-radius: 3px 3px 0 0;
  background: var(--g-c-primary);
}
.g-tabs__item:focus-visible { outline: none; box-shadow: inset var(--g-ring-focus); }
.g-user { min-width: 0; display: flex; align-items: center; gap: var(--g-sp-2); }
.g-user__mark {
  flex: none;
  display: grid;
  place-items: center;
  width: 32px; height: 32px;
  border-radius: 50%;
  background: var(--g-c-primary-soft);
  color: var(--g-c-primary);
  font-size: var(--g-fs-label);
  font-weight: var(--g-fw-bold);
}
.g-user__text { min-width: 0; line-height: 1.3; white-space: nowrap; }
.g-user__name { display: block; overflow: hidden; text-overflow: ellipsis; font-size: var(--g-fs-label); font-weight: var(--g-fw-semibold); }
.g-user__team { display: block; overflow: hidden; text-overflow: ellipsis; font-size: var(--g-fs-small); color: var(--g-c-muted); }
.g-user__out { flex: none; }
.g-user--top { padding-right: var(--g-sp-3); margin-right: var(--g-sp-1); border-right: 1px solid var(--g-c-line); }
/* 글 대비 4.5:1 을 맞추려고 더한 글자색 셋 — 새 색이 아니라 운영 styles.css 에 이미 있는 값(gp3 머리 #5c6880·#2454d1 · auth-note #c62828) */
:root{--g-c-muted-strong:#5c6880;--g-c-primary-strong:#2454d1;--g-c-danger-text:#c62828}
/* ---- 공통 틀(page()) — body.g-shell 에만 걸린다: 흰 머리 · 회색 묶음 글 · 고른 묶음은 옅은 파랑 · 탭은 파란 밑줄 ---- */
body.g-shell header{position:sticky;top:0;z-index:10;display:flex;flex-wrap:wrap;align-items:center;gap:8px 20px;padding:10px 24px;color:var(--g-c-text);background:var(--g-c-surface);border-bottom:1px solid var(--g-c-line);box-shadow:var(--g-shadow-card);font-family:var(--g-font)}
body.g-shell header::before{content:none;display:none}
body.g-shell .auth-head{display:contents}
body.g-shell .g-shell__brand{order:0;flex:none;display:inline-flex;align-items:center;gap:var(--g-sp-2);color:var(--g-c-text);font-size:17px;font-weight:var(--g-fw-bold);letter-spacing:-.2px;white-space:nowrap}
body.g-shell .g-shell__brand::before{content:"G";display:grid;place-items:center;width:28px;height:28px;border-radius:var(--g-r-control);background:var(--g-c-primary);color:var(--g-c-surface);font-size:15px;font-weight:var(--g-fw-bold)}
body.g-shell .upper-nav{order:1;flex:1 1 auto;display:flex;align-items:center;flex-wrap:wrap;gap:2px;min-width:0}
body.g-shell .upper-nav .nav-upper{padding:8px 12px;border-radius:var(--g-r-control);border-bottom:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold);text-decoration:none;white-space:nowrap;background:transparent}
body.g-shell .upper-nav .nav-upper:hover{background:var(--g-c-hover);color:var(--g-c-text);text-decoration:none}
body.g-shell .upper-nav .nav-upper.active{padding-bottom:8px;border-bottom:0;background:var(--g-c-primary-soft);color:var(--g-c-primary-strong);font-weight:var(--g-fw-bold)}
body.g-shell .upper-nav .nav-upper:focus-visible,body.g-shell .section-tabs a:focus-visible{outline:none;box-shadow:var(--g-ring-focus)}
body.g-shell .auth-user{order:2;margin-left:auto;display:inline-flex;align-items:center;gap:var(--g-sp-2);font-size:var(--g-fs-label);color:var(--g-c-text);white-space:nowrap}
body.g-shell .auth-user .g-user__name{font-weight:var(--g-fw-semibold)}
body.g-shell .auth-user .logout-form{margin:0}
body.g-shell .auth-user .logout-form button{height:var(--g-h-control-sm);padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background:var(--g-c-surface);color:var(--g-c-text);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);cursor:pointer;box-shadow:none}
body.g-shell .auth-user .logout-form button:hover{background:var(--g-c-hover)}
body.g-shell .section-tabs{display:flex;gap:2px;padding:0 24px;background:var(--g-c-surface);border-bottom:1px solid var(--g-c-line);font-family:var(--g-font)}
body.g-shell .section-tabs a{position:relative;flex:none;display:inline-flex;align-items:center;height:44px;padding:0 var(--g-sp-3);border-radius:0;border-bottom:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-body);font-weight:var(--g-fw-medium);text-decoration:none;white-space:nowrap;background:transparent}
body.g-shell .section-tabs a:hover{color:var(--g-c-text);background:transparent}
body.g-shell .section-tabs a.active{padding-bottom:0;border-bottom:0;color:var(--g-c-primary-strong);font-weight:var(--g-fw-bold);background:transparent}
body.g-shell .section-tabs a.active::after{content:"";position:absolute;left:var(--g-sp-2);right:var(--g-sp-2);bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--g-c-primary)}
@media(max-width:850px){
body.g-shell header{flex-direction:row;align-items:center;padding:10px 16px;gap:8px 12px}
/* 고침1 — 좁은 폭에서도 위 묶음을 가로 밀림 뒤에 숨기지 않는다: 줄을 바꿔 모든 묶음(새 SCM 포함)이 첫 화면에 보이게 */
body.g-shell .upper-nav{order:3;flex:1 0 100%;flex-wrap:wrap;overflow:visible;gap:2px 0;padding-bottom:0}
body.g-shell .upper-nav .nav-upper{padding:7px 10px}
body.g-shell .section-tabs{padding:0 16px;overflow-x:auto;white-space:nowrap;scrollbar-width:thin}
}
/* 휴대폰 폭은 위 메뉴가 서너 줄이라 머리를 붙박지 않는다(붙박으면 본문 자리를 늘 먹음) */
@media(max-width:640px){body.g-shell header{position:static}}
@media(max-width:375px){body.g-shell .auth-user{width:auto;margin-left:auto}}

/* ---- 로그인 껍데기(web_auth.html_page) — body.g-login-page 에만 걸린다: 옅은 바탕 · 흰 카드 · 로고 · 파란 주 단추 ---- */
html body.g-login-page{display:flex;flex-direction:column;min-height:100vh;margin:0;background:var(--g-c-bg);color:var(--g-c-text);font-family:var(--g-font)}
html body.g-login-page::before,html body.g-login-page::after{content:none;display:none;animation:none}
html body.g-login-page main{flex:1;display:grid;grid-template-columns:minmax(0,1fr);place-items:center;width:100%;max-width:none;margin:0;padding:var(--g-page-pad);box-sizing:border-box}
body.g-login-page main > .auth-card.g-login__card{position:relative;justify-self:center;box-sizing:border-box;width:min(400px,100%);max-width:100%;margin:0;padding:var(--g-sp-8);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card);backdrop-filter:none;font-family:var(--g-font)}
body.g-login-page main > .auth-card.g-login__card::before,body.g-login-page main > .auth-card.g-login__card::after{content:none;display:none}
body.g-login-page .g-login__logo{display:block;width:auto;max-width:100%;height:40px;margin:0 auto var(--g-sp-5);border:0;border-radius:0}
body.g-login-page main > .auth-card.g-login__card h1{margin:0;text-align:center;color:var(--g-c-text);font-size:var(--g-fs-section);font-weight:var(--g-fw-bold);letter-spacing:-.2px}
body.g-login-page main > .auth-card.g-login__card h1::after{margin-top:var(--g-sp-1);color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-regular);letter-spacing:0}
body.g-login-page main > .auth-card.g-login__card > p{margin:var(--g-sp-1) 0 0;text-align:center;color:var(--g-c-muted-strong);font-size:var(--g-fs-label)}
body.g-login-page main > .auth-card.g-login__card form{display:flex;flex-direction:column;gap:var(--g-sp-4);margin-top:var(--g-sp-6)}
body.g-login-page main > .auth-card.g-login__card label{display:flex;flex-direction:column;gap:6px;margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-login-page main > .auth-card.g-login__card input:not([type=checkbox]):not([type=hidden]),body.g-login-page main > .auth-card.g-login__card select{width:100%;height:var(--g-h-control);min-height:var(--g-h-control);padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background:var(--g-c-surface);color:var(--g-c-text);font-size:var(--g-fs-body);box-shadow:none;outline:none}
body.g-login-page main > .auth-card.g-login__card input:not([type=checkbox]):focus,body.g-login-page main > .auth-card.g-login__card select:focus{border-color:var(--g-c-primary);box-shadow:var(--g-ring-focus)}
body.g-login-page main > .auth-card.g-login__card label:has(> input[type=checkbox]){flex-direction:row;align-items:center;gap:var(--g-sp-2);color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-regular);cursor:pointer}
body.g-login-page main > .auth-card.g-login__card input[type=checkbox]{width:16px;height:16px;min-height:0;margin:0;padding:0;accent-color:var(--g-c-primary)}
body.g-login-page main > .auth-card.g-login__card button{width:100%;height:var(--g-h-control);margin-top:var(--g-sp-1);padding:0 var(--g-sp-4);border:0;border-radius:var(--g-r-control);background:var(--g-c-primary);color:var(--g-c-surface);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold);box-shadow:none;cursor:pointer}
body.g-login-page main > .auth-card.g-login__card button:hover{box-shadow:inset 0 0 0 99px rgba(20,33,61,.10)}
body.g-login-page main > .auth-card.g-login__card button:focus-visible{outline:none;box-shadow:var(--g-ring-focus)}
body.g-login-page main > .auth-card.g-login__card p:last-child{margin-top:var(--g-sp-5);text-align:center}
body.g-login-page main > .auth-card.g-login__card a{color:var(--g-c-primary);font-weight:var(--g-fw-medium);text-decoration:underline}
body.g-login-page main > .auth-card.g-login__card .auth-note{margin:var(--g-sp-4) 0 0;padding:12px var(--g-sp-4);border:1px solid var(--g-c-danger-bg);border-radius:var(--g-r-control);background:var(--g-c-danger-bg);color:var(--g-c-danger-text);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);text-align:left}
html body.g-login-page footer{margin:0;padding:var(--g-sp-4) var(--g-sp-4) var(--g-sp-6);background:transparent;border:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-small);text-align:center}
@media(max-width:480px){body.g-login-page main > .auth-card.g-login__card{padding:var(--g-sp-6) var(--g-sp-5)}html body.g-login-page main{padding:var(--g-sp-4)}}
/* 개-3288: 장고가 그리는 /sensory(webapp_django 템플릿)도 body.g-b2 로 이 블록을 읽는다 — 관능 규칙을 고치면 장고 화면도 바뀐다. */
/* ==== 둘째 묶음(개-2980) — 제품검색·갭·관능·제품관리 본문 ====
   page() 가 이 네 갈래(product·gap·sensory·purchase-lookup)에만 body 에 g-b2 를 단다.
   옛 화면 규칙(hero·panel·notice · gf726 · gf824 · 700 공통 입력칸 input:not(…)×4)이 이 화면들에 겹쳐 실려 있어,
   본문 부품은 모두 「body.g-b2:not(#g2980) main」 아래로 묶어 그 규칙들을 넘는다(:not(#…) 는 아이디 무게 하나를 더할 뿐 아무것도 거르지 않는다).
   증감·비율 색(.up·.dn 등)과 100% 밑 빨강은 여기서 다시 칠하지 않는다 — 운영 규칙 그대로. 되돌리기: 이 시작~끝 덩어리와 화면 파일의 g- 이름표를 뺀다. */
body.g-b2{background:var(--g-c-bg)}
body.g-b2:not(#g2980) main{background:transparent;color:var(--g-c-text);font-family:var(--g-font)}
body.g-b2:not(#g2980) main .gf824-standard{background:transparent}
/* 쪽 머리 */
body.g-b2:not(#g2980) main .g-page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:12px 16px;margin:0 0 20px;padding:0;background:transparent;border:0;border-radius:0;box-shadow:none}
body.g-b2:not(#g2980) main .g-page-head__text{min-width:0}
body.g-b2:not(#g2980) main .g-page-head__title{margin:0;color:var(--g-c-text);font-size:var(--g-fs-title);font-weight:var(--g-fw-bold);line-height:1.3;letter-spacing:-.3px}
body.g-b2:not(#g2980) main .g-page-head__desc{margin:var(--g-sp-1) 0 0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);line-height:1.5}
body.g-b2:not(#g2980) main .g-page-head__actions{display:flex;flex-direction:row;flex-wrap:wrap;align-items:center;gap:var(--g-sp-2);margin:0}
body.g-b2:not(#g2980) main .g-page-head__actions>*{margin:0}
body.g-b2:not(#g2980) main .g-crumb{margin:0 0 var(--g-sp-2);font-size:var(--g-fs-label);color:var(--g-c-muted-strong)}
body.g-b2:not(#g2980) main .g-crumb a{color:var(--g-c-primary-strong);font-weight:var(--g-fw-medium);text-decoration:none}
body.g-b2:not(#g2980) main .g-crumb a:hover{text-decoration:underline}
/* 카드 */
body.g-b2:not(#g2980) main .g-card{min-width:0;max-width:none;margin:0 0 var(--g-card-gap);padding:var(--g-card-pad);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card);color:var(--g-c-text)}
body.g-b2:not(#g2980) main .g-card--flush{padding:0;overflow:hidden}
body.g-b2:not(#g2980) main .g-card__head{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:4px var(--g-sp-3);min-height:var(--g-h-control-sm);margin:0 0 var(--g-sp-4);padding:0;flex-direction:row}
body.g-b2:not(#g2980) main .g-card--flush>.g-card__head{padding:var(--g-card-pad) var(--g-card-pad) 0}
body.g-b2:not(#g2980) main .g-card__title{margin:0;color:var(--g-c-text);font-size:var(--g-fs-section);font-weight:var(--g-fw-semibold);line-height:1.4;letter-spacing:-.2px}
body.g-b2:not(#g2980) main .g-card__meta{color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-regular)}
body.g-b2:not(#g2980) main .g-card__foot{padding:var(--g-sp-3) var(--g-card-pad);border-top:1px solid var(--g-c-line-faint)}
body.g-b2:not(#g2980) main .g-card__tools{display:flex;flex-wrap:wrap;align-items:center;gap:var(--g-sp-2);padding:0 var(--g-card-pad) var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-card--flush>.scroll-hint{margin:0 var(--g-card-pad) var(--g-sp-2)}
body.g-b2:not(#g2980) main .g-card .g-card{box-shadow:none;border:1px solid var(--g-c-line)}
/* 걸러보기 카드 */
body.g-b2:not(#g2980) main .g-filter{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--g-sp-3) var(--g-sp-4);margin:0 0 var(--g-card-gap);padding:var(--g-card-pad);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card);flex-direction:row}
body.g-b2:not(#g2980) main .g-filter__field{display:flex;flex-direction:column;gap:6px;min-width:0;margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b2:not(#g2980) main .g-filter__field--grow{flex:1 1 260px}
body.g-b2:not(#g2980) main .g-filter__actions{flex:none;display:flex;flex-wrap:wrap;align-items:center;gap:var(--g-sp-2);margin-left:auto}
body.g-b2:not(#g2980) main .g-filter__actions--bottom{align-self:flex-end}
body.g-b2:not(#g2980) main .g-filter__field--check{flex-direction:row;align-items:center;align-self:flex-end;min-height:var(--g-h-control);gap:var(--g-sp-2);color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-regular);cursor:pointer}
/* 입력칸 · 고르개 · 글상자 */
body.g-b2:not(#g2980) main .g-input,body.g-b2:not(#g2980) main .g-select,body.g-b2:not(#g2980) main .g-textarea{box-sizing:border-box;width:100%;min-width:0;max-width:none;height:var(--g-h-control);margin:0;padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background-color:var(--g-c-surface);color:var(--g-c-text);font:inherit;font-size:var(--g-fs-body);box-shadow:none;outline:none}
body.g-b2:not(#g2980) main .g-select{appearance:none;-webkit-appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%235c6880' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center;cursor:pointer}
body.g-b2:not(#g2980) main .g-select--w{width:180px}
body.g-b2:not(#g2980) main .g-textarea{height:auto;min-height:96px;padding:10px var(--g-sp-3);line-height:1.6;resize:vertical}
body.g-b2:not(#g2980) main .g-input::placeholder,body.g-b2:not(#g2980) main .g-textarea::placeholder{color:var(--g-c-muted-strong);opacity:.85}
body.g-b2:not(#g2980) main .g-input:focus,body.g-b2:not(#g2980) main .g-select:focus,body.g-b2:not(#g2980) main .g-textarea:focus{border-color:var(--g-c-primary);box-shadow:var(--g-ring-focus)}
body.g-b2:not(#g2980) main .g-input[readonly]{background-color:var(--g-c-bg);color:var(--g-c-muted-strong)}
body.g-b2:not(#g2980) main .g-input--sm,body.g-b2:not(#g2980) main .g-select--sm{height:var(--g-h-control-sm);font-size:var(--g-fs-label)}
body.g-b2:not(#g2980) main .g-field__help{display:block;margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-small);font-weight:var(--g-fw-regular)}
body.g-b2:not(#g2980) main .g-check-input{width:16px;height:16px;margin:0;accent-color:var(--g-c-primary)}
/* 단추 */
body.g-b2:not(#g2980) main .g-btn{box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--g-h-control);margin:0;padding:0 var(--g-sp-4);border:1px solid transparent;border-radius:var(--g-r-control);font:inherit;font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold);line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;box-shadow:none;filter:none;transition:box-shadow .12s,background-color .12s}
body.g-b2:not(#g2980) main .g-btn:focus-visible{outline:none;box-shadow:var(--g-ring-focus)}
body.g-b2:not(#g2980) main .g-btn--primary{background:var(--g-c-primary);border-color:var(--g-c-primary);color:var(--g-c-surface)}
body.g-b2:not(#g2980) main .g-btn--primary:hover{background:var(--g-c-primary);box-shadow:inset 0 0 0 99px rgba(20,33,61,.10)}
body.g-b2:not(#g2980) main .g-btn--secondary{background:var(--g-c-surface);border-color:var(--g-c-line-strong);color:var(--g-c-text)}
body.g-b2:not(#g2980) main .g-btn--secondary:hover{background:var(--g-c-hover)}
body.g-b2:not(#g2980) main .g-btn--sm{height:var(--g-h-control-sm);padding:0 var(--g-sp-3);font-size:var(--g-fs-label)}
body.g-b2:not(#g2980) main .g-btn.is-active{background:var(--g-c-primary-soft);border-color:var(--g-c-focus-ring);color:var(--g-c-primary-strong)}
body.g-b2:not(#g2980) main .g-link{color:var(--g-c-primary-strong);font-weight:var(--g-fw-medium);text-decoration:none}
body.g-b2:not(#g2980) main .g-link:hover{text-decoration:underline}
/* 알림 띠 — 표 i·! 는 글이 아니라 그림(::before)이라 화면 글이 늘지 않는다 */
body.g-b2:not(#g2980) main .g-alert{display:flex;align-items:flex-start;gap:var(--g-sp-3);margin:0 0 var(--g-card-gap);padding:12px var(--g-sp-4);border:1px solid transparent;border-radius:var(--g-r-control);color:var(--g-c-text);font-size:var(--g-fs-body);line-height:1.6;box-shadow:none}
body.g-b2:not(#g2980) main .g-alert__mark{flex:none;display:grid;place-items:center;width:20px;height:20px;margin-top:2px;border-radius:50%;color:var(--g-c-surface);font-size:var(--g-fs-small);font-weight:var(--g-fw-bold);line-height:1}
body.g-b2:not(#g2980) main .g-alert__text{flex:1;min-width:0}
body.g-b2:not(#g2980) main .g-alert--info{background:var(--g-c-primary-soft);border-color:var(--g-c-focus-ring)}
body.g-b2:not(#g2980) main .g-alert--info .g-alert__mark{background:var(--g-c-primary)}
body.g-b2:not(#g2980) main .g-alert--info .g-alert__mark:empty::before{content:"i"}
body.g-b2:not(#g2980) main .g-alert--info strong{color:var(--g-c-primary-strong)}
body.g-b2:not(#g2980) main .g-alert--warn{background:var(--g-c-warn-bg);border-color:var(--g-c-warn-bg)}
body.g-b2:not(#g2980) main .g-alert--warn .g-alert__mark{background:var(--g-c-warn);color:var(--g-c-text)}
body.g-b2:not(#g2980) main .g-alert--warn .g-alert__mark:empty::before{content:"!"}
body.g-b2:not(#g2980) main .g-alert--warn strong{color:#8a4b00}
body.g-b2:not(#g2980) main .g-alert--danger{background:var(--g-c-danger-bg);border-color:var(--g-c-danger-bg)}
body.g-b2:not(#g2980) main .g-alert--danger .g-alert__mark{background:var(--g-c-danger)}
body.g-b2:not(#g2980) main .g-alert--danger .g-alert__mark:empty::before{content:"!"}
body.g-b2:not(#g2980) main .g-alert--danger strong{color:var(--g-c-danger-text)}
body.g-b2:not(#g2980) main .g-alert details summary{color:var(--g-c-primary-strong);cursor:pointer}
/* 아침 점검 띠(web_collection 이 그리는 p.notice-danger · 제품검색 쪽 맨 위) — 파일은 안 고치고 모양만 */
body.g-b2:not(#g2980) main>p.notice.notice-danger{display:flex;flex-wrap:wrap;align-items:center;gap:4px var(--g-sp-2);margin:0 0 var(--g-card-gap);padding:12px var(--g-sp-4);border:1px solid var(--g-c-danger-bg);border-radius:var(--g-r-control);background:var(--g-c-danger-bg);color:var(--g-c-text);font-size:var(--g-fs-body);box-shadow:none}
body.g-b2:not(#g2980) main>p.notice.notice-danger::before{content:"!";display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--g-c-danger);color:var(--g-c-surface);font-size:var(--g-fs-small);font-weight:var(--g-fw-bold)}
body.g-b2:not(#g2980) main>p.notice.notice-danger strong{color:var(--g-c-danger-text)}
body.g-b2:not(#g2980) main>p.notice.notice-danger a{margin-left:auto;color:var(--g-c-primary-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);text-decoration:none}
/* 표 */
body.g-b2:not(#g2980) main .g-table-wrap{margin:0;border:0;border-radius:0;box-shadow:none;background:transparent}
body.g-b2:not(#g2980) main .g-card:not(.g-card--flush) .g-table-wrap{border:1px solid var(--g-c-line);border-radius:var(--g-r-control)}
body.g-b2:not(#g2980) main .g-table{width:100%;border-collapse:separate;border-spacing:0;color:var(--g-c-text);font-size:var(--g-fs-body)}
body.g-b2:not(#g2980) main .g-table th{height:var(--g-h-th);padding:0 var(--g-sp-3);border-top:0;border-bottom:1px solid var(--g-c-line);background:var(--g-c-bg);color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);text-align:left;white-space:nowrap;vertical-align:middle}
body.g-b2:not(#g2980) main .g-table thead th{position:sticky;top:0;z-index:1}
body.g-b2:not(#g2980) main .g-table td{height:var(--g-h-row);padding:8px var(--g-sp-3);border-bottom:1px solid var(--g-c-line-faint);vertical-align:middle;background:transparent}
body.g-b2:not(#g2980) main .g-table th:first-child,body.g-b2:not(#g2980) main .g-table td:first-child{padding-left:var(--g-card-pad)}
body.g-b2:not(#g2980) main .g-table th:last-child,body.g-b2:not(#g2980) main .g-table td:last-child{padding-right:var(--g-card-pad)}
body.g-b2:not(#g2980) main .g-table tbody tr:hover td,body.g-b2:not(#g2980) main .g-table tbody tr:hover th{background:var(--g-c-hover)}
body.g-b2:not(#g2980) main .g-table tbody tr:last-child td,body.g-b2:not(#g2980) main .g-table tbody tr:last-child th{border-bottom:0}
body.g-b2:not(#g2980) main .g-table .is-num{text-align:right;font-variant-numeric:tabular-nums}
body.g-b2:not(#g2980) main .g-table tbody tr.is-selected td{background:var(--g-c-primary-soft)}
body.g-b2:not(#g2980) main .g-table tbody tr.is-selected td:first-child{box-shadow:inset 3px 0 0 var(--g-c-primary)}
body.g-b2:not(#g2980) main .g-table tbody tr.is-link{cursor:pointer}
body.g-b2:not(#g2980) main .g-table td a{color:var(--g-c-primary-strong)}
body.g-b2:not(#g2980) main .g-table td small,body.g-b2:not(#g2980) main .g-table th small{color:var(--g-c-muted-strong)}
body.g-b2:not(#g2980) main .g-table tr.g-table__empty td{height:auto;padding:0}
body.g-b2:not(#g2980) main .g-table tr.g-table__empty:hover td{background:transparent}
body.g-b2:not(#g2980) main .g-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--g-sp-1);min-height:140px;padding:var(--g-sp-6);color:var(--g-c-muted-strong);text-align:center;white-space:normal}
body.g-b2:not(#g2980) main .g-empty__title{color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold)}
/* 줄 머리(tbody th)가 있는 피벗·대조표 — 제품명 칸은 줄을 바꾼다 */
body.g-b2:not(#g2980) main .g-table--pivot tbody th{height:auto;padding:10px var(--g-sp-3) 10px var(--g-card-pad);border-bottom:1px solid var(--g-c-line-faint);background:var(--g-c-surface);color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-medium);white-space:normal;vertical-align:top;position:static}
body.g-b2:not(#g2980) main .g-table--pivot td{vertical-align:top}
body.g-b2:not(#g2980) main .g-table--pivot tbody th .disclosure{display:inline-flex;align-items:center;gap:4px;height:var(--g-h-control-sm);margin:0 0 6px;padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background:var(--g-c-surface);color:var(--g-c-text);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);box-shadow:none}
body.g-b2:not(#g2980) main .g-table--pivot tbody th .disclosure:hover{background:var(--g-c-hover)}
body.g-b2:not(#g2980) main .g-table--pivot tbody th small{display:block;margin-top:2px;font-size:var(--g-fs-small);font-weight:var(--g-fw-regular)}
/* 빈·안내 상태 */
body.g-b2:not(#g2980) main .g-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--g-sp-2);min-height:200px;padding:var(--g-sp-8) var(--g-sp-6);color:var(--g-c-muted-strong);text-align:center}
body.g-b2:not(#g2980) main .g-state__title{color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold)}
body.g-b2:not(#g2980) main .g-state__desc{color:var(--g-c-muted-strong);font-size:var(--g-fs-label)}
/* 숫자 카드(관능 대기·진행·완료) */
body.g-b2:not(#g2980) main .g-stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--g-card-gap);margin:0 0 var(--g-card-gap)}
body.g-b2:not(#g2980) main .g-stat{display:flex;flex-direction:column;gap:var(--g-sp-2);min-width:0;margin:0;padding:var(--g-card-pad);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card)}
body.g-b2:not(#g2980) main .g-stat::before{content:none;display:none}
body.g-b2:not(#g2980) main .g-stat__label{margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b2:not(#g2980) main .g-stat__value{margin:0;color:var(--g-c-text);font-size:var(--g-fs-big);font-weight:var(--g-fw-bold);line-height:1.2;font-variant-numeric:tabular-nums}
/* 쪽 번호 */
body.g-b2:not(#g2980) main .g-pager{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--g-sp-1);margin:var(--g-sp-4) 0}
body.g-b2:not(#g2980) main .g-pager a{display:inline-flex;align-items:center;justify-content:center;min-width:var(--g-h-control-sm);height:var(--g-h-control-sm);padding:0 var(--g-sp-2);border:0;border-radius:var(--g-r-control);background:transparent;color:var(--g-c-text);font-size:var(--g-fs-label);text-decoration:none;box-shadow:none}
body.g-b2:not(#g2980) main .g-pager a:hover{background:var(--g-c-surface)}
body.g-b2:not(#g2980) main .g-pager a.active{background:var(--g-c-primary);color:var(--g-c-surface);font-weight:var(--g-fw-semibold)}
/* 쪽 안 갈래 탭(제품조회 수입·국내 · 목록·상세) */
body.g-b2:not(#g2980) main .g-tabs{display:flex;gap:2px;margin:0 0 var(--g-card-gap);padding:0 var(--g-sp-3);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card);overflow-x:auto}
body.g-b2:not(#g2980) main .g-tabs .g-tabs__item{position:relative;display:inline-flex;align-items:center;height:48px;margin:0;padding:0 var(--g-sp-4);border:0;border-radius:0;background:transparent;color:var(--g-c-muted-strong);font-size:var(--g-fs-body);font-weight:var(--g-fw-medium);text-decoration:none;white-space:nowrap}
body.g-b2:not(#g2980) main .g-tabs .g-tabs__item:hover{color:var(--g-c-text)}
body.g-b2:not(#g2980) main .g-tabs .g-tabs__item.active,body.g-b2:not(#g2980) main .g-tabs .g-tabs__item.is-active{background:transparent;color:var(--g-c-primary-strong);font-weight:var(--g-fw-bold)}
body.g-b2:not(#g2980) main .g-tabs .g-tabs__item.active::after,body.g-b2:not(#g2980) main .g-tabs .g-tabs__item.is-active::after{content:"";position:absolute;left:var(--g-sp-3);right:var(--g-sp-3);bottom:0;height:3px;border-radius:3px 3px 0 0;background:var(--g-c-primary)}
/* 갭 분석 — 보기 갈래 단추 사이 「·」 는 단추 간격이 대신한다(글은 남고 안 보이기만) · 학기 고르개는 기간 글이 길어 넓게 · 카드 안 각주 */
body.g-b2:not(#g2980) main .g-sep{display:none}
body.g-b2:not(#g2980) main .g-page-head__actions{margin:0}
body.g-b2:not(#g2980) main .g-filter--period .g-select{width:320px}
body.g-b2:not(#g2980) main .g-card__note{margin:var(--g-sp-3) 0 0;padding:0;border:0;border-radius:0;background:transparent;color:var(--g-c-muted-strong);font-size:var(--g-fs-small);box-shadow:none}
body.g-b2:not(#g2980) main .g-card .web014-matrix{border:1px solid var(--g-c-line);border-radius:var(--g-r-control)}
/* 관능평가 — 카드 안 걸러보기 줄 · 입력 카드(칸에 이름표를 하나하나 안 붙이고 카드 안에서만 같은 모양) · 아래 단추 줄 */
body.g-b2:not(#g2980) main .g-card .g-filter--in-card{margin:0;border-radius:0;box-shadow:none;border-bottom:1px solid var(--g-c-line-faint)}
body.g-b2:not(#g2980) main .g-input--date{width:160px}
body.g-b2:not(#g2980) main .g-table--compact td{height:var(--g-h-row-sm);padding-top:4px;padding-bottom:4px}
body.g-b2:not(#g2980) main .g-card--inner{margin:0;box-shadow:none;border:1px solid var(--g-c-line)}
body.g-b2:not(#g2980) main .g-card--inner>.g-btn{margin-top:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-card--inner>.g-table-wrap{margin-top:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-card--inner .g-table .g-input--sm{min-width:120px}
body.g-b2:not(#g2980) main .g-card--inner .g-table .g-select--sm{min-width:88px}
body.g-b2:not(#g2980) main .g-form-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:var(--g-sp-2);margin:0}
body.g-b2:not(#g2980) main .g-form-actions--start{justify-content:flex-start;margin:0 0 var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-form-actions form{display:inline-flex;margin:0}
body.g-b2:not(#g2980) main .g-btn--danger-text{color:var(--g-c-danger-text)}
body.g-b2:not(#g2980) main .g-sensory-note{margin:0}
body.g-b2:not(#g2980) main .g-sensory-sum p{margin:var(--g-sp-2) 0 0;color:var(--g-c-text);line-height:1.6}
body.g-b2:not(#g2980) main .g-sensory-sum .g-card__title{margin-bottom:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-card>.g-card__title{margin-bottom:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-state .g-form-actions{justify-content:center;margin-top:var(--g-sp-2)}
body.g-b2:not(#g2980) main .g-state__action{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--g-sp-2);margin-top:var(--g-sp-2)}
body.g-b2:not(#g2980) main .g-form-card{display:grid;gap:var(--g-sp-4) var(--g-sp-6);grid-template-columns:repeat(2,minmax(0,1fr))}
body.g-b2:not(#g2980) main .g-form-card>*{grid-column:1/-1}
body.g-b2:not(#g2980) main .g-form-card>label{grid-column:auto}
body.g-b2:not(#g2980) main .g-form-card label{display:flex;flex-direction:column;gap:6px;margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b2:not(#g2980) main .g-form-card b{display:inline-block;margin-left:var(--g-sp-1);color:var(--g-c-danger-text);font-size:var(--g-fs-small);font-weight:var(--g-fw-semibold)}
body.g-b2:not(#g2980) main .g-form-card input:not([type=checkbox]):not([type=radio]):not([type=file]):not([type=hidden]):not(.g-input--sm),body.g-b2:not(#g2980) main .g-form-card select:not(.g-select--sm),body.g-b2:not(#g2980) main .g-form-card textarea{box-sizing:border-box;width:100%;max-width:none;height:var(--g-h-control);padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background-color:var(--g-c-surface);color:var(--g-c-text);font:inherit;font-size:var(--g-fs-body);box-shadow:none}
body.g-b2:not(#g2980) main .g-form-card textarea{height:auto;min-height:88px;padding:10px var(--g-sp-3);line-height:1.6}
body.g-b2:not(#g2980) main .g-form-card input:focus,body.g-b2:not(#g2980) main .g-form-card select:focus,body.g-b2:not(#g2980) main .g-form-card textarea:focus{outline:none;border-color:var(--g-c-primary);box-shadow:var(--g-ring-focus)}
body.g-b2:not(#g2980) main .g-form-card input[readonly]{background-color:var(--g-c-bg);color:var(--g-c-muted-strong)}
body.g-b2:not(#g2980) main .g-form-card fieldset{margin:0;padding:var(--g-sp-3) var(--g-sp-4) var(--g-sp-4);border:1px solid var(--g-c-line);border-radius:var(--g-r-control);display:grid;gap:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-form-card legend{padding:0 var(--g-sp-1);color:var(--g-c-text);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold)}
body.g-b2:not(#g2980) main .g-form-card details{padding:var(--g-sp-3) var(--g-sp-4);border:1px solid var(--g-c-line);border-radius:var(--g-r-control);display:grid;gap:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-form-card details>summary{color:var(--g-c-primary-strong);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold);cursor:pointer}
body.g-b2:not(#g2980) main .g-form-card .paste-attachments{display:grid;gap:var(--g-sp-2);padding:var(--g-sp-3) var(--g-sp-4);border:1px dashed var(--g-c-line-strong);border-radius:var(--g-r-control);background:var(--g-c-bg)}
body.g-b2:not(#g2980) main .g-form-card .paste-attachments p{margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-small)}
/* 제품조회(수입·국내) — 옛 틀 판(700·709·715호 색 판)을 비우고 같은 부품으로 */
body.g-b2:not(#g2980) main .g-lookup{padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;color:var(--g-c-text)}
body.g-b2:not(#g2980) main .g-seg{display:flex;flex-wrap:wrap;gap:var(--g-sp-2);margin:0 0 var(--g-sp-4)}
body.g-b2:not(#g2980) main .g-seg .g-btn.active{background:var(--g-c-primary-soft);border-color:var(--g-c-focus-ring);color:var(--g-c-primary-strong)}
body.g-b2:not(#g2980) main .g-filter--grid{flex-direction:column;align-items:stretch}
body.g-b2:not(#g2980) main .g-filter--grid .search-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--g-sp-3) var(--g-sp-4)}
body.g-b2:not(#g2980) main .g-filter--grid .quick-dates{display:flex;flex-wrap:wrap;align-items:center;gap:var(--g-sp-2);margin:0}
body.g-b2:not(#g2980) main .g-filter--grid .search-actions{display:flex;gap:var(--g-sp-2);margin-left:auto}
body.g-b2:not(#g2980) main .g-summary{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--g-sp-3);margin:0 0 var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-summary>strong{color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold)}
body.g-b2:not(#g2980) main .g-summary__size{display:flex;align-items:center;gap:var(--g-sp-2);color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b2:not(#g2980) main .g-summary__size .g-select{width:96px}
body.g-b2:not(#g2980) main .g-filter--row{display:grid;align-items:center;gap:var(--g-sp-2) var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-filter--row label{margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);white-space:nowrap}
body.g-b2:not(#g2980) main .g-table--spec th{width:150px;height:auto;padding:10px var(--g-sp-3);border-bottom:1px solid var(--g-c-line-faint);background:var(--g-c-bg);white-space:nowrap;position:static}
body.g-b2:not(#g2980) main .g-table--spec td{height:auto;padding:10px var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-card .g-table--spec th:first-child{padding-left:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-lookup .pl-group.g-card{margin:0 0 var(--g-sp-3);border:0}
body.g-b2:not(#g2980) main .g-lookup .pl-group>summary{background:var(--g-c-surface);border-bottom:1px solid var(--g-c-line-faint)}
body.g-b2:not(#g2980) main .g-lookup .pl-history{padding:var(--g-sp-3) 0 0}
body.g-b2:not(#g2980) main .g-lookup .pl-history-title{padding:0 var(--g-card-pad);color:var(--g-c-text);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold)}
body.g-b2:not(#g2980) main .g-lookup .pl-summary{margin:0 0 var(--g-sp-3);color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold)}
body.g-b2:not(#g2980) main .g-lookup .pl-summary small{color:var(--g-c-muted-strong);font-weight:var(--g-fw-regular)}
body.g-b2:not(#g2980) main .g-lookup .g-alert__action{margin-left:auto;color:var(--g-c-primary-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);text-decoration:none;white-space:nowrap}
body.g-b2:not(#g2980) main .g-lookup .g-alert__action:hover{text-decoration:underline}
body.g-b2:not(#g2980) main .g-lookup .pl-switch{flex-wrap:wrap;align-items:center}
body.g-b2:not(#g2980) main .g-lookup .pl-switch>.g-alert__text{flex:1 1 160px}
/* 다듬기 1 — 카드인 표 감싸개는 흰 바탕 · 입력 카드 이름표는 「이름 필수」 한 줄 · 카드 안 고르개도 같은 화살표 · 조회 표는 13px */
body.g-b2:not(#g2980) main .g-table-wrap.g-card{background:var(--g-c-surface)}
body.g-b2:not(#g2980) main .g-form-card>label{display:block}
body.g-b2:not(#g2980) main .g-form-card>label>input,body.g-b2:not(#g2980) main .g-form-card>label>select,body.g-b2:not(#g2980) main .g-form-card>label>textarea{display:block;margin-top:6px}
body.g-b2:not(#g2980) main .g-form-card select:not(.g-select--sm){appearance:none;-webkit-appearance:none;padding-right:36px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='8' viewBox='0 0 12 8'%3E%3Cpath d='M1 1.5l5 5 5-5' fill='none' stroke='%235c6880' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 12px center}
body.g-b2:not(#g2980) main .g-lookup .g-table{font-size:var(--g-fs-label)}
body.g-b2:not(#g2980) main .g-lookup .g-table td{white-space:normal}
@media(max-width:640px){
body.g-b2:not(#g2980) main .g-page-head__title{font-size:20px}
body.g-b2:not(#g2980) main .g-filter{padding:var(--g-sp-4)}
body.g-b2:not(#g2980) main .g-filter__field,body.g-b2:not(#g2980) main .g-filter__field--grow{flex:1 1 100%}
body.g-b2:not(#g2980) main .g-filter__actions{margin-left:0}
body.g-b2:not(#g2980) main .g-select--w,body.g-b2:not(#g2980) main .g-filter--period .g-select{width:100%}
body.g-b2:not(#g2980) main .g-card{padding:var(--g-sp-4)}
body.g-b2:not(#g2980) main .g-card--flush{padding:0}
body.g-b2:not(#g2980) main .g-card--flush>.g-card__head{padding:var(--g-sp-4) var(--g-sp-4) 0}
body.g-b2:not(#g2980) main .g-card__tools,body.g-b2:not(#g2980) main .g-card__foot{padding-left:var(--g-sp-4);padding-right:var(--g-sp-4)}
body.g-b2:not(#g2980) main .g-table th:first-child,body.g-b2:not(#g2980) main .g-table td:first-child,body.g-b2:not(#g2980) main .g-table--pivot tbody th{padding-left:var(--g-sp-4)}
body.g-b2:not(#g2980) main .g-stats{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--g-sp-3)}
body.g-b2:not(#g2980) main .g-stat{padding:var(--g-sp-4)}
body.g-b2:not(#g2980) main .g-form-card{grid-template-columns:minmax(0,1fr)}
body.g-b2:not(#g2980) main .g-filter--grid .search-grid,body.g-b2:not(#g2980) main .g-filter--row{grid-template-columns:minmax(0,1fr)}
body.g-b2:not(#g2980) main .g-filter--grid .search-actions{margin-left:0}
body.g-b2:not(#g2980) main .g-input--date{width:100%}
}
/* ==== 둘째 묶음 끝 ==== */
/* ==== 셋째 묶음(개-3287) — 매출·단가표·영업활동·미팅·거래처·클레임·제품문서 본문 ====
   page() 가 묶음 3 화면(active 와 주소 첫 마디가 sales·pricebook·activity·meeting·vendor·claims·product-docs)에만 body 에 g-b3 를 달고,
   본문 옛 이름표 옆에 g- 이름표를 덧붙인다(app.py G3_CLASS_MAP · web_sales.py G3_SALES_CLASS_MAP). 고르개는 모두 「body.g-b3:not(#g3287) main」 아래 —
   :not(#…) 는 아이디 무게 하나를 더할 뿐 아무것도 거르지 않는다(옛 hero·panel·gf824·700 입력칸·화면 안 <style> 을 넘으려고).
   색 이름표(.up·.dn·.sp-pos·.sp-neg·.gd-·.sp-owner-·.p52-negative·.mtg-)는 여기서 다시 칠하지 않고, 그 이름표가 앉는 칸·값에도 글자색을 주지 않는다
   — 정-629 늘면 초록·줄면 빨강 · 정-651 이익률 100% 밑 빨강 그대로. 개-3281 의 「이카운트 수집 시각」 줄(p.collection-time)엔 이름표를 안 붙인다.
   되돌리기: 이 시작~끝 덩어리와 app.py 의 G3_ 셋·page() 두 줄을 뺀다. */
body.g-b3{background:var(--g-c-bg)}
body.g-b3:not(#g3287) main{background:transparent;color:var(--g-c-text);font-family:var(--g-font)}
body.g-b3:not(#g3287) main .gf824-standard,body.g-b3:not(#g3287) main .intake-page,body.g-b3:not(#g3287) main .meeting-page,body.g-b3:not(#g3287) main .sales-dashboard{background:transparent;border:0;box-shadow:none}
/* 쪽 머리 — 옛 보라 띠(hero)를 바탕 위 큰 제목으로 */
body.g-b3:not(#g3287) main .g-page-head{display:block;margin:0 0 var(--g-card-gap);padding:0;background:transparent;border:0;border-radius:0;box-shadow:none;color:var(--g-c-text);min-height:0}
body.g-b3:not(#g3287) main .g-page-head::before,body.g-b3:not(#g3287) main .g-page-head::after{content:none;display:none}
body.g-b3:not(#g3287) main .g-page-head h1{margin:0;color:var(--g-c-text);font-size:var(--g-fs-title);font-weight:var(--g-fw-bold);line-height:1.3;letter-spacing:-.3px}
body.g-b3:not(#g3287) main .g-page-head h1::before,body.g-b3:not(#g3287) main .g-page-head h1::after{content:none;display:none}
body.g-b3:not(#g3287) main .g-page-head p{margin:var(--g-sp-1) 0 0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);line-height:1.6}
body.g-b3:not(#g3287) main .g-page-head p b{color:var(--g-c-text)}
body.g-b3:not(#g3287) main .g-page-head p a:not(.g-btn){color:var(--g-c-primary-strong);font-weight:var(--g-fw-medium)}
body.g-b3:not(#g3287) main .g-page-head p:has(.g-btn){display:flex;flex-wrap:wrap;align-items:center;gap:var(--g-sp-2);margin-top:var(--g-sp-3)}
body.g-b3:not(#g3287) main .intake-page>h1,body.g-b3:not(#g3287) main .g-card>h1{margin:0 0 var(--g-sp-3);color:var(--g-c-text);font-size:var(--g-fs-title);font-weight:var(--g-fw-bold);line-height:1.3;letter-spacing:-.3px}
body.g-b3:not(#g3287) main .intake-page>h1+p,body.g-b3:not(#g3287) main .g-card>h1+p{margin:0 0 var(--g-sp-4);color:var(--g-c-muted-strong);font-size:var(--g-fs-label)}
body.g-b3:not(#g3287) main .g-crumb{margin:0 0 var(--g-sp-2);color:var(--g-c-muted-strong);font-size:var(--g-fs-label)}
body.g-b3:not(#g3287) main .g-crumb a{color:var(--g-c-primary-strong);font-weight:var(--g-fw-medium);text-decoration:none}
body.g-b3:not(#g3287) main .g-crumb a:hover{text-decoration:underline}
/* 카드 */
body.g-b3:not(#g3287) main .g-card{box-sizing:border-box;min-width:0;max-width:none;margin:0 0 var(--g-card-gap);padding:var(--g-card-pad);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card);color:var(--g-c-text)}
body.g-b3:not(#g3287) main .g-card::before,body.g-b3:not(#g3287) main .g-card::after{content:none;display:none}
body.g-b3:not(#g3287) main .g-card h2{margin:0 0 var(--g-sp-3);color:var(--g-c-text);font-size:var(--g-fs-section);font-weight:var(--g-fw-semibold);line-height:1.4;letter-spacing:-.2px}
body.g-b3:not(#g3287) main .g-card .g-card{box-shadow:none;border:1px solid var(--g-c-line)}
body.g-b3:not(#g3287) main details.g-card>summary{color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold);cursor:pointer}
body.g-b3:not(#g3287) main details.g-card[open]>summary{margin-bottom:var(--g-sp-3)}
body.g-b3:not(#g3287) main .g-card__head{display:flex;flex-wrap:wrap;align-items:baseline;justify-content:space-between;gap:4px var(--g-sp-3);margin:0 0 var(--g-sp-4);padding:0;background:transparent;border:0}
body.g-b3:not(#g3287) main .g-card__head h2{margin:0}
/* 공통부품 .g-card__meta 는 한 줄 자르기(…)라 글이 숨는다 — 이 묶음에선 줄을 바꿔 다 보인다 */
body.g-b3:not(#g3287) main .g-card__meta{min-width:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-regular);white-space:normal;overflow:visible;text-overflow:clip}
body.g-b3:not(#g3287) main p.g-card__meta{margin:var(--g-sp-3) 0 0}
body.g-b3:not(#g3287) main .g-card__meta b{color:var(--g-c-text)}
/* 숫자 카드 — 값 글자색은 색 이름표(.up·.dn)가 없을 때만 준다 */
body.g-b3:not(#g3287) main .g-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--g-sp-4);margin:0 0 var(--g-card-gap);padding:0;background:transparent;border:0;box-shadow:none}
body.g-b3:not(#g3287) main .g-stats--5{grid-template-columns:repeat(5,minmax(150px,1fr))}
body.g-b3:not(#g3287) main .g-card .g-stats{margin:0}
body.g-b3:not(#g3287) main .g-card .g-stats:not(:last-child){margin-bottom:var(--g-card-gap)}
body.g-b3:not(#g3287) main .g-card>*+h2{margin-top:var(--g-sp-6)}
body.g-b3:not(#g3287) main .g-stat{box-sizing:border-box;display:flex;flex-direction:column;justify-content:flex-start;gap:6px;min-width:0;margin:0;padding:var(--g-card-pad);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card);text-align:left}
body.g-b3:not(#g3287) main .g-stat::before,body.g-b3:not(#g3287) main .g-stat::after{content:none;display:none}
body.g-b3:not(#g3287) main .g-card .g-stat{box-shadow:none;border:1px solid var(--g-c-line);border-radius:12px}
body.g-b3:not(#g3287) main .g-stat.web086-forecast{border-color:var(--g-c-primary);box-shadow:inset 0 0 0 1px var(--g-c-primary);cursor:pointer}
body.g-b3:not(#g3287) main .g-stat.web086-forecast:focus-visible{outline:none;box-shadow:inset 0 0 0 1px var(--g-c-primary),var(--g-ring-focus)}
body.g-b3:not(#g3287) main .g-stat__label{margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b3:not(#g3287) main .g-stat__value{margin:0;font-size:var(--g-fs-big);font-weight:var(--g-fw-bold);line-height:1.2;font-variant-numeric:tabular-nums;letter-spacing:-.3px}
body.g-b3:not(#g3287) main .g-stat__value:not(.up):not(.dn){color:var(--g-c-text)}
body.g-b3:not(#g3287) main .g-stat__foot{margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-small)}
/* 걸러보기 줄 */
body.g-b3:not(#g3287) main .g-filter{box-sizing:border-box;display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--g-sp-3) var(--g-sp-4);margin:0 0 var(--g-card-gap);padding:var(--g-card-pad);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card)}
body.g-b3:not(#g3287) main .g-card .g-filter{margin:0 0 var(--g-sp-4);padding:0;background:transparent;border-radius:0;box-shadow:none}
body.g-b3:not(#g3287) main .g-filter label,body.g-b3:not(#g3287) main .g-filter__field{display:flex;flex-direction:column;gap:6px;min-width:0;margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b3:not(#g3287) main .g-filter__field>div{display:flex;flex-wrap:wrap;align-items:center;gap:var(--g-sp-2);color:var(--g-c-muted-strong)}
/* 입력칸 — 걸러보기 줄 · 입력 카드 안만 */
body.g-b3:not(#g3287) main .g-filter input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]),body.g-b3:not(#g3287) main .g-filter select,body.g-b3:not(#g3287) main .g-formbox input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]),body.g-b3:not(#g3287) main .g-formbox select,body.g-b3:not(#g3287) main .g-formbox textarea,body.g-b3:not(#g3287) main .g-card>form:not(.g-filter) input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]),body.g-b3:not(#g3287) main .g-card>form:not(.g-filter) select{box-sizing:border-box;min-width:0;height:var(--g-h-control);min-height:var(--g-h-control);margin:0;padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background-color:var(--g-c-surface);color:var(--g-c-text);font:inherit;font-size:var(--g-fs-body);box-shadow:none;outline:none}
body.g-b3:not(#g3287) main .g-formbox textarea{height:auto;min-height:96px;padding:10px var(--g-sp-3);line-height:1.6}
body.g-b3:not(#g3287) main .g-filter input:focus,body.g-b3:not(#g3287) main .g-filter select:focus,body.g-b3:not(#g3287) main .g-formbox input:focus,body.g-b3:not(#g3287) main .g-formbox select:focus,body.g-b3:not(#g3287) main .g-formbox textarea:focus,body.g-b3:not(#g3287) main .g-card>form input:focus,body.g-b3:not(#g3287) main .g-card>form select:focus{border-color:var(--g-c-primary);box-shadow:var(--g-ring-focus)}
body.g-b3:not(#g3287) main .g-formbox input[readonly]{background-color:var(--g-c-bg);color:var(--g-c-muted-strong)}
body.g-b3:not(#g3287) main .g-table-wrap td input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]),body.g-b3:not(#g3287) main .g-table-wrap td select{height:var(--g-h-control-sm);min-height:var(--g-h-control-sm);font-size:var(--g-fs-label)}
/* 입력 카드(미팅·클레임·제품문서·견적 입력) — 칸 짜임은 그대로, 껍데기와 이름표·칸 모양만 */
body.g-b3:not(#g3287) main .g-formbox{box-sizing:border-box;margin:0 0 var(--g-card-gap);padding:var(--g-card-pad);background:var(--g-c-surface);border:0;border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card);color:var(--g-c-text)}
body.g-b3:not(#g3287) main .g-formbox label{color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b3:not(#g3287) main .g-formbox label>b{margin-left:var(--g-sp-1);color:var(--g-c-danger-text);font-size:var(--g-fs-small);font-weight:var(--g-fw-semibold)}
body.g-b3:not(#g3287) main .g-formbox label>span,body.g-b3:not(#g3287) main .g-formbox p:not(.g-note):not(.g-hint){color:var(--g-c-muted-strong);font-size:var(--g-fs-small);font-weight:var(--g-fw-regular)}
body.g-b3:not(#g3287) main .g-formbox h2{margin:var(--g-sp-4) 0 var(--g-sp-2);color:var(--g-c-text);font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold)}
body.g-b3:not(#g3287) main .g-drop{padding:var(--g-sp-3) var(--g-sp-4);border:1px dashed var(--g-c-line-strong);border-radius:var(--g-r-control);background:var(--g-c-bg)}
/* 단추 — 주 단추는 파랑 · 걸러보기·입력 카드·카드 안 폼의 맨 단추(제출)도 같은 주 단추 · type=button 은 보조 */
body.g-b3:not(#g3287) main .g-btn,body.g-b3:not(#g3287) main .g-filter button:not([type=button]):not(.g-btn),body.g-b3:not(#g3287) main .g-formbox>button:not([type=button]),body.g-b3:not(#g3287) main .g-formbox .intake-form-bottom>button,body.g-b3:not(#g3287) main .g-card>form>button:not([type=button]),body.g-b3:not(#g3287) main .g-card>form a.g-link~button,body.g-b3:not(#g3287) main .g-formbox>button[type=button],body.g-b3:not(#g3287) main .g-card>form>a:not(.g-btn):not(.g-link){box-sizing:border-box;display:inline-flex;align-items:center;justify-content:center;gap:6px;height:var(--g-h-control);margin:0;padding:0 var(--g-sp-4);border:1px solid transparent;border-radius:var(--g-r-control);font:inherit;font-size:var(--g-fs-body);font-weight:var(--g-fw-semibold);line-height:1;white-space:nowrap;text-decoration:none;cursor:pointer;box-shadow:none;filter:none;transition:box-shadow .12s,background-color .12s}
body.g-b3:not(#g3287) main .g-btn--primary,body.g-b3:not(#g3287) main .g-filter button:not([type=button]):not(.g-btn),body.g-b3:not(#g3287) main .g-formbox>button:not([type=button]),body.g-b3:not(#g3287) main .g-formbox .intake-form-bottom>button,body.g-b3:not(#g3287) main .g-card>form>button:not([type=button]){background:var(--g-c-primary);border-color:var(--g-c-primary);color:var(--g-c-surface)}
body.g-b3:not(#g3287) main .g-btn--primary:hover,body.g-b3:not(#g3287) main .g-filter button:not([type=button]):not(.g-btn):hover,body.g-b3:not(#g3287) main .g-formbox>button:not([type=button]):hover,body.g-b3:not(#g3287) main .g-card>form>button:not([type=button]):hover{background:var(--g-c-primary);box-shadow:inset 0 0 0 99px rgba(20,33,61,.10)}
body.g-b3:not(#g3287) main .g-btn--secondary,body.g-b3:not(#g3287) main .g-formbox>button[type=button],body.g-b3:not(#g3287) main .g-card>form>a:not(.g-btn):not(.g-link){background:var(--g-c-surface);border-color:var(--g-c-line-strong);color:var(--g-c-text)}
body.g-b3:not(#g3287) main .g-btn--secondary:hover,body.g-b3:not(#g3287) main .g-formbox>button[type=button]:hover{background:var(--g-c-hover)}
/* 엑셀 받기 단추 — 옛 글자색 흰(!important)이 남으므로 초록 바탕을 지킨다 */
body.g-b3:not(#g3287) main .g-btn--xlsx{margin-left:auto;background:#1f7a4d;border-color:#1f7a4d}
body.g-b3:not(#g3287) main .g-btn--xlsx:hover{box-shadow:inset 0 0 0 99px rgba(20,33,61,.10)}
body.g-b3:not(#g3287) main .price-more-bar>button{box-sizing:border-box;height:var(--g-h-control-sm);padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background:var(--g-c-surface);color:var(--g-c-text);font:inherit;font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);box-shadow:none;cursor:pointer}
body.g-b3:not(#g3287) main .g-btn--sm{height:var(--g-h-control-sm);padding:0 var(--g-sp-3);font-size:var(--g-fs-label)}
body.g-b3:not(#g3287) main .g-btn:focus-visible,body.g-b3:not(#g3287) main .g-filter button:focus-visible,body.g-b3:not(#g3287) main .g-formbox button:focus-visible{outline:none;box-shadow:var(--g-ring-focus)}
body.g-b3:not(#g3287) main .g-link{color:var(--g-c-primary-strong);font-weight:var(--g-fw-medium);text-decoration:none;background:transparent;border:0;padding:0}
body.g-b3:not(#g3287) main .g-link:hover{text-decoration:underline}
body.g-b3:not(#g3287) main .g-filter .g-link{align-self:center}
/* 갈래 단추 묶음(표·그래프 · 빠른선택) */
body.g-b3:not(#g3287) main .g-seg{display:inline-flex;flex-wrap:wrap;gap:2px;margin:0 0 var(--g-sp-3);padding:3px;background:var(--g-c-bg);border:1px solid var(--g-c-line);border-radius:var(--g-r-control)}
body.g-b3:not(#g3287) main .g-seg--quick{margin:0}
body.g-b3:not(#g3287) main .g-seg>button{height:30px;padding:0 var(--g-sp-3);border:0;border-radius:6px;background:transparent;color:var(--g-c-muted-strong);font:inherit;font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);cursor:pointer;box-shadow:none}
body.g-b3:not(#g3287) main .g-seg>button:hover{background:var(--g-c-surface);color:var(--g-c-text)}
body.g-b3:not(#g3287) main .g-seg>button.active{background:var(--g-c-surface);color:var(--g-c-primary-strong);box-shadow:0 1px 3px rgba(20,33,61,.12)}
body.g-b3:not(#g3287) main .g-seg>button:focus-visible{outline:none;box-shadow:var(--g-ring-focus)}
/* 알림 글 — 옅은 파랑 바탕 한 줄 */
body.g-b3:not(#g3287) main .g-note{box-sizing:border-box;display:block;margin:0 0 var(--g-card-gap);padding:10px var(--g-sp-4);border:1px solid var(--g-c-focus-ring);border-radius:var(--g-r-control);background:var(--g-c-primary-soft);color:var(--g-c-text);font-size:var(--g-fs-label);font-weight:var(--g-fw-regular);line-height:1.6;box-shadow:none}
body.g-b3:not(#g3287) main .g-card .g-note,body.g-b3:not(#g3287) main .g-formbox .g-note{margin:var(--g-sp-3) 0}
body.g-b3:not(#g3287) main .g-note b,body.g-b3:not(#g3287) main .g-note strong{color:var(--g-c-primary-strong)}
body.g-b3:not(#g3287) main .g-hint{color:var(--g-c-muted-strong);font-size:var(--g-fs-small)}
/* 표 — 머리는 옅은 회색 · 칸 사이 가는 줄 · 숫자는 자리 맞춤. 칸·값 글자색은 주지 않는다(색 이름표가 이긴다) */
body.g-b3:not(#g3287) main .g-table-wrap{box-sizing:border-box;max-width:100%;margin:0;overflow-x:auto;background:var(--g-c-surface);border:1px solid var(--g-c-line);border-radius:12px;box-shadow:none}
body.g-b3:not(#g3287) main .g-table-wrap>table{border-collapse:separate;border-spacing:0;color:var(--g-c-text);font-size:13px;background:transparent;box-shadow:none;border:0;border-radius:0}
body.g-b3:not(#g3287) main .g-table-wrap>table th{padding:10px var(--g-sp-3);background:var(--g-c-bg);color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-semibold);border:0;border-bottom:1px solid var(--g-c-line);white-space:nowrap;vertical-align:middle}
body.g-b3:not(#g3287) main .g-table-wrap>table td{padding:9px var(--g-sp-3);border:0;border-bottom:1px solid var(--g-c-line-faint);vertical-align:middle}
body.g-b3:not(#g3287) main .g-table-wrap>table tbody tr:last-child td{border-bottom:0}
body.g-b3:not(#g3287) main .g-table-wrap>table tbody tr:nth-child(even){background:transparent}
body.g-b3:not(#g3287) main .g-table-wrap>table tbody tr:hover{background:var(--g-c-hover)}
body.g-b3:not(#g3287) main .g-table-wrap>table .number{text-align:right;font-variant-numeric:tabular-nums}
body.g-b3:not(#g3287) main .g-table--num td{font-variant-numeric:tabular-nums}
body.g-b3:not(#g3287) main .g-table-wrap>table td a:not(.g-btn){color:var(--g-c-primary-strong)}
body.g-b3:not(#g3287) main .g-table-wrap>table td small{color:var(--g-c-muted-strong)}
/* 매출 표 — 묶음 머리줄 · 합계 줄 · 펼침 이름 */
body.g-b3:not(#g3287) main .g-table--num .sp-group th{background:var(--g-c-primary-soft);color:var(--g-c-primary-strong);text-align:center;border-bottom:1px solid var(--g-c-focus-ring)}
body.g-b3:not(#g3287) main .g-table--num .sp-name{color:var(--g-c-primary-strong)}
body.g-b3:not(#g3287) main .g-table--num .sp-sum td{border-top:1px solid var(--g-c-line-strong)}
body.g-b3:not(#g3287) main .g-card>.g-seg+.g-table-wrap,body.g-b3:not(#g3287) main .g-card__head+.g-seg{margin-top:0}
body.g-b3:not(#g3287) main .g-card .sp-toggle{margin:var(--g-sp-3) 0 0}
/* 이름표 없는 폼(견적서 산출 · 단가인상 조회·저장) — 칸 사이만 띄운다 */
body.g-b3:not(#g3287) main .g-card>form[method=get]:not(.g-filter),body.g-b3:not(#g3287) main .intake-page>form:not([class]){display:flex;flex-wrap:wrap;align-items:center;gap:var(--g-sp-2) var(--g-sp-3);margin:0 0 var(--g-sp-4)}
body.g-b3:not(#g3287) main .intake-page>form:not([class]){padding:var(--g-card-pad);background:var(--g-c-surface);border-radius:var(--g-r-card);box-shadow:var(--g-shadow-card)}
body.g-b3:not(#g3287) main .intake-page>form:not([class])>table{flex:1 0 100%}
body.g-b3:not(#g3287) main .g-card>form>label,body.g-b3:not(#g3287) main .intake-page>form:not([class])>label{display:inline-flex;align-items:center;gap:6px;margin:0 var(--g-sp-3) var(--g-sp-2) 0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label);font-weight:var(--g-fw-medium)}
body.g-b3:not(#g3287) main .intake-page>form:not([class]) input:not([type=checkbox]):not([type=radio]):not([type=hidden]){box-sizing:border-box;height:var(--g-h-control);padding:0 var(--g-sp-3);border:1px solid var(--g-c-line-strong);border-radius:var(--g-r-control);background-color:var(--g-c-surface);color:var(--g-c-text);font:inherit;font-size:var(--g-fs-body)}
body.g-b3:not(#g3287) main .g-card>form>.g-table-wrap+button,body.g-b3:not(#g3287) main .g-card>form>.g-table-wrap{margin-top:var(--g-sp-3)}
/* 빈 상태 */
body.g-b3:not(#g3287) main .g-state{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:var(--g-sp-2);min-height:180px;padding:var(--g-sp-8) var(--g-sp-6);text-align:center}
body.g-b3:not(#g3287) main .g-state h2{margin:0;font-size:var(--g-fs-section)}
body.g-b3:not(#g3287) main .g-state p{margin:0;color:var(--g-c-muted-strong);font-size:var(--g-fs-label)}
@media(max-width:1199px){body.g-b3:not(#g3287) main .g-stats--5{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:640px){
body.g-b3:not(#g3287) main .g-page-head h1,body.g-b3:not(#g3287) main .intake-page>h1{font-size:20px}
body.g-b3:not(#g3287) main .g-card,body.g-b3:not(#g3287) main .g-filter,body.g-b3:not(#g3287) main .g-formbox,body.g-b3:not(#g3287) main .g-stat{padding:var(--g-sp-4)}
body.g-b3:not(#g3287) main .g-stats,body.g-b3:not(#g3287) main .g-stats--5{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--g-sp-3)}
body.g-b3:not(#g3287) main .g-btn--xlsx{margin-left:0}
body.g-b3:not(#g3287) main .g-filter{flex-direction:column;align-items:stretch}
body.g-b3:not(#g3287) main .g-filter>button,body.g-b3:not(#g3287) main .g-filter>.g-btn{align-self:flex-start}
}
/* 개-3373 — 새 모양 배포 뒤 흠 셋(모양만 · 값·색 그대로)
   ① 폰 폭 숫자 카드: 28px 큰 숫자가 두 칸 카드(약 124px)에 안 들어가 줄이 접히고 옛 .kpi .val{overflow:hidden} 에 끝이 잘렸다 → 폰 폭에선 글자를 줄이고 줄바꿈을 막는다
   ② 매출 표 「전년 매출」 칸: 칸 안 작은 글(작년 n월 전체 …)이 .g-card__meta 의 white-space:normal 을 물려받아 두 줄로 접혔다 → 표 칸 안에서는 한 줄
   ③ 단가표 품목명 칸: 옛 .p52-table td 가 오른쪽 정렬 → 글자 칸이라 왼쪽 */
body.g-b3:not(#g3287) main .g-table-wrap>table td .g-card__meta{white-space:nowrap}
body.g-b3:not(#g3287) main .g-table-wrap>table.p52-table td.p52-name{text-align:left}
@media(max-width:640px){
body.g-b3:not(#g3287) main .g-stat__value{font-size:clamp(14px,4vw,20px);white-space:nowrap;overflow:visible}
}
/* ==== 셋째 묶음 끝 ==== */
/* 공통부품 운영 브리지 끝 */
