/* /Components/Layout/MainLayout.razor.rz.scp.css */
/* 오류 배너도 같은 문법으로: 상태 soft 배경 + 상태 잉크 상단 선 (장식 그림자 없음) */
#blazor-error-ui[b-9yfwzdhrvh] {
    color-scheme: light only;
    background: var(--status-critical-bg, #fae2e2);
    color: var(--status-critical-ink, #a32424);
    border-top: 2px solid var(--status-critical-ink, #a32424);
    bottom: 0;
    box-sizing: border-box;
    display: none;
    left: 0;
    padding: 0.6rem 2.5rem 0.7rem 1.25rem;
    position: fixed;
    width: 100%;
    z-index: 1000;
}

    /* 위험 띠 위의 링크까지 띠의 잉크를 쓴다 — 도면 파랑이 이 한 줄에만 끼어들면
       '파랑은 이동, 붉음은 실행' 대신 색이 둘 다 소리치는 줄이 된다. 색을 뺀 자리는
       밑줄이 링크임을 계속 말해 준다. */
    #blazor-error-ui .reload[b-9yfwzdhrvh] {
        color: inherit;
        text-decoration: underline;
    }

    #blazor-error-ui .dismiss[b-9yfwzdhrvh] {
        align-items: center;
        cursor: pointer;
        display: inline-flex;
        position: absolute;
        right: 0.85rem;
        top: 0.75rem;
    }
/* /Components/Layout/ReconnectModal.razor.rz.scp.css */
.components-reconnect-first-attempt-visible[b-mjhn3m3f9l],
.components-reconnect-repeated-attempt-visible[b-mjhn3m3f9l],
.components-reconnect-failed-visible[b-mjhn3m3f9l],
.components-pause-visible[b-mjhn3m3f9l],
.components-resume-failed-visible[b-mjhn3m3f9l],
.components-rejoining-animation[b-mjhn3m3f9l] {
    display: none;
}

#components-reconnect-modal.components-reconnect-show .components-reconnect-first-attempt-visible[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-show .components-rejoining-animation[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-paused .components-pause-visible[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-resume-failed .components-resume-failed-visible[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-retrying[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-retrying .components-reconnect-repeated-attempt-visible[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-retrying .components-rejoining-animation[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-failed[b-mjhn3m3f9l],
#components-reconnect-modal.components-reconnect-failed .components-reconnect-failed-visible[b-mjhn3m3f9l] {
    display: block;
}


#components-reconnect-modal[b-mjhn3m3f9l] {
    background-color: var(--paper);
    color: var(--ink);
    width: 20rem;
    margin: 20vh auto;
    padding: 2rem;
    border: 2px solid var(--ink);
    border-radius: 0;
    box-shadow: var(--shadow-dialog);
    opacity: 0;
    transition: display 0.5s allow-discrete, overlay 0.5s allow-discrete;
    animation: components-reconnect-modal-fadeOutOpacity-b-mjhn3m3f9l 0.5s both;
    &[open]

{
    animation: components-reconnect-modal-slideUp-b-mjhn3m3f9l 1.5s cubic-bezier(.05, .89, .25, 1.02) 0.3s, components-reconnect-modal-fadeInOpacity-b-mjhn3m3f9l 0.5s ease-in-out 0.3s;
    animation-fill-mode: both;
}

}

#components-reconnect-modal[b-mjhn3m3f9l]::backdrop {
    background-color: var(--veil);
    animation: components-reconnect-modal-fadeInOpacity-b-mjhn3m3f9l 0.5s ease-in-out;
    opacity: 1;
}

@keyframes components-reconnect-modal-slideUp-b-mjhn3m3f9l {
    0% {
        transform: translateY(30px) scale(0.95);
    }

    100% {
        transform: translateY(0);
    }
}

@keyframes components-reconnect-modal-fadeInOpacity-b-mjhn3m3f9l {
    0% {
        opacity: 0;
    }

    100% {
        opacity: 1;
    }
}

@keyframes components-reconnect-modal-fadeOutOpacity-b-mjhn3m3f9l {
    0% {
        opacity: 1;
    }

    100% {
        opacity: 0;
    }
}

.components-reconnect-container[b-mjhn3m3f9l] {
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1rem;
}

#components-reconnect-modal p[b-mjhn3m3f9l] {
    margin: 0;
    text-align: center;
}

#components-reconnect-modal button[b-mjhn3m3f9l] {
    border: 1.5px solid var(--line-medium);
    background-color: var(--paper);
    color: var(--ink);
    font: inherit;
    font-weight: 600;
    padding: 0.42rem 0.95rem;
    border-radius: 2px;
    cursor: pointer;
}

    #components-reconnect-modal button:hover[b-mjhn3m3f9l] {
        background-color: var(--ink);
        border-color: var(--ink);
        color: var(--paper);
    }

    #components-reconnect-modal button:active[b-mjhn3m3f9l] {
        background-color: var(--ink-pressed);
    }

/* 재연결 표시 — 직각 규칙대로 사각 잉크 윤곽선이 겹쳐 퍼진다.
   레이아웃 속성(top/left/width/height)이 아니라 transform/opacity만 움직여
   합성 단계에서만 그려지게 하고, 모션 축소 설정에서는 애니메이션이 멈춘 자리에
   이중 사각 검인이 그대로 남도록 기본 상태에 크기·위치를 고정해 둔다. */
.components-rejoining-animation[b-mjhn3m3f9l] {
    position: relative;
    width: 80px;
    height: 80px;
}

    .components-rejoining-animation div[b-mjhn3m3f9l] {
        position: absolute;
        inset: 0;
        border: 2px solid var(--ink);
        border-radius: 0;
        opacity: 1;
        animation: components-rejoining-animation-b-mjhn3m3f9l 1.5s cubic-bezier(0, 0.2, 0.8, 1) infinite;
    }

        /* 두 번째 사각은 안쪽으로 한 단 물려, 애니메이션이 꺼져도 이중 검인으로 읽힌다. */
        .components-rejoining-animation div:nth-child(2)[b-mjhn3m3f9l] {
            inset: 20px;
            animation-delay: -0.5s;
        }

@keyframes components-rejoining-animation-b-mjhn3m3f9l {
    0% {
        transform: scale(0.05);
        opacity: 0;
    }

    5% {
        transform: scale(0.05);
        opacity: 1;
    }

    100% {
        transform: scale(1);
        opacity: 0;
    }
}
/* /Components/Pages/Audit.razor.rz.scp.css */
/* 조회 조건 기입란 — 계정명·이벤트 유형이 잘리지 않는 폭. */
.filter-input[b-u9i7o8ixfh] {
    width: 14rem;
    max-width: 100%;
}
/* /Components/Pages/Batches.razor.rz.scp.css */
/* 다중 배포 — 페이지 전용 조판.
   전역 문법(선 위계·검인 스탬프·부품표 표·카드 표제줄)은 app.css가 정하고,
   여기서는 이 페이지에만 있는 것(단계 번호칸, 기입란 폭)만 다룬다. */

/* 단계 번호칸 — 순서가 곧 규칙인 흐름(업로드 → 검증 → 제출)에서만 쓴다 */
.step-no[b-5dslxuv0cd] {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 1.4rem;
    height: 1.4rem;
    margin-right: 0.5rem;
    background: var(--paper-2);
    border: 1.5px solid var(--line-medium);
    border-radius: 2px;
    font-size: 0.8rem;
    font-weight: 700;
    font-variant-numeric: tabular-nums;
    color: var(--ink-2);
}

.step-note[b-5dslxuv0cd] {
    color: var(--ink-2);
    font-size: 0.88rem;
    max-width: 78ch;
    margin: 0 0 0.9rem;
}

.step-actions[b-5dslxuv0cd] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 1rem;
}

.back-link[b-5dslxuv0cd] {
    margin: 0 0 0.9rem;
    font-size: 0.88rem;
}

.batch-id[b-5dslxuv0cd] {
    color: var(--ink-3);
    margin: 0 0 0.9rem;
}

/* ---------- 기입란 ---------- */

/* 라벨이 위에 얹힌 단일 기입란 (form-grid의 한 칸과 같은 문법) */
.field[b-5dslxuv0cd] {
    display: flex;
    flex-direction: column;
    gap: 0.2rem;
    margin: 0.8rem 0 0;
    font-family: var(--font-label);
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--ink-2);
}

    .field input[b-5dslxuv0cd],
    .field textarea[b-5dslxuv0cd] {
        font-family: var(--font-body);
        font-size: 0.9rem;
        font-weight: 400;
        letter-spacing: normal;
        color: var(--ink);
        width: 100%;
    }

/* 사유 한 줄은 시트 폭 전체로 늘어날 이유가 없다 (격자 밖 단독 기입란) */
.field-reason[b-5dslxuv0cd] {
    max-width: 36rem;
}

.field-hint[b-5dslxuv0cd] {
    font-family: var(--font-body);
    font-size: 0.8rem;
    font-weight: 400;
    letter-spacing: normal;
    color: var(--ink-3);
}

.file-row[b-5dslxuv0cd] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.5rem;
    font-family: var(--font-body);
    font-size: 0.85rem;
    font-weight: 400;
    letter-spacing: normal;
}

/* 파일 입력은 시각적으로 숨기되 포커스 가능하게 남긴다 — 창은 버튼(라벨) 클릭으로만 열린다 */
.file-pick[b-5dslxuv0cd] {
    position: relative;
    overflow: hidden;
}

    .file-pick[b-5dslxuv0cd]  input[type="file"] {
        position: absolute;
        width: 1px;
        height: 1px;
        opacity: 0;
        clip: rect(0 0 0 0);
        white-space: nowrap;
    }

.file-pick:focus-within[b-5dslxuv0cd] {
    outline: 2px solid var(--accent);
    outline-offset: 1px;
}

.csv-input[b-5dslxuv0cd] {
    font-family: var(--font-mono);
    font-size: 0.85rem;
    line-height: 1.45;
    resize: vertical;
}

/* ---------- 문제 목록 ---------- */

.problem-list[b-5dslxuv0cd] {
    margin: 0.25rem 0 0;
    padding-left: 1.1rem;
}

    .problem-list li[b-5dslxuv0cd] {
        margin: 0.1rem 0;
    }

/* 체크 칸은 내용이 아니라 표시다 — 폭을 고정하고 가운데로 */
.col-exclude[b-5dslxuv0cd] {
    width: 3.5rem;
    text-align: center;
}

/* 지시서 확정 줄(.modal-actions)은 app.css의 모달 계열로 올라갔다 — 모든 지시서가 같은 고정 확정 바를 쓴다. */
/* /Components/Pages/Concurrency.razor.rz.scp.css */
/* ---------- 동시 접속 추이 선그래프 ----------
   틀(테두리·격자·눈금 글자)은 app.css의 `.trend-chart`를 그대로 쓴다. 여기 있는 것은 이 장에만
   있는 선 셋뿐이다: 최대(주서 실선 + 옅은 면), 평균(잉크 파선), 상한(잉크 점선).

   눈금 글자(`tick-label`·`bar-label`)는 여기에 두지 않는다 - 그 글자들은 렌더 트리로 직접 만들어져
   CSS 격리 표식을 받지 않으므로, 규칙은 app.css의 전역 `.trend-chart` 블록에 있어야 한다. */

.concurrency-chart .line-peak[b-h640jt37jo] {
    fill: none;
    stroke: var(--accent);
    stroke-width: 1.5;
    stroke-linejoin: round;
    /* 관측이 한 칸뿐인 구간은 선이 아니라 점으로 보여야 한다. */
    stroke-linecap: round;
}

/* 면은 형태를 읽기 위한 것이지 값이 아니다 - 선보다 훨씬 옅게 둔다. */
.concurrency-chart .area-peak[b-h640jt37jo] {
    fill: var(--accent-soft);
    stroke: none;
}

.concurrency-chart .line-average[b-h640jt37jo] {
    fill: none;
    stroke: var(--ink-2);
    stroke-width: 1;
    stroke-dasharray: 4 3;
    stroke-linecap: round;
}

.concurrency-chart .line-cap[b-h640jt37jo] {
    stroke: var(--ink-3);
    stroke-width: 1;
    stroke-dasharray: 2 3;
}

/* 범례 조각. 색과 형태를 글자가 한 번 더 말하므로(app.css의 `.trend-legend`) 여기는 모양만 정한다. */
.trend-legend .swatch-peak[b-h640jt37jo] {
    height: 0;
    border-top: 2px solid var(--accent);
}

.trend-legend .swatch-average[b-h640jt37jo] {
    height: 0;
    border-top: 2px dashed var(--ink-2);
}

.trend-legend .swatch-cap[b-h640jt37jo] {
    height: 0;
    border-top: 2px dotted var(--ink-3);
}
/* /Components/Pages/Dashboard.razor.rz.scp.css */
/* ============================================================
   대시보드 인프라 계층 — 페이지 범위 스타일
   "승인 도면" 문법을 따른다: 채움이 아니라 선, 색이 아니라 라벨.
   사용률 막대는 계기 눈금이지 그래프가 아니다 — 값은 언제나 숫자로도 적힌다
   (색 단독으로 상태를 전달하지 않는다는 접근성 규칙).
   전역 app.css는 건드리지 않는다.
   ============================================================ */

/* 막대와 수치가 한 줄에 앉는다. 수치가 없으면 막대 자체를 그리지 않는다(마크업이 결정). */
.usage[b-8fin3xaq7y] {
    display: flex;
    align-items: center;
    gap: 0.5rem;
    min-width: 8.5rem;
}

.usage-track[b-8fin3xaq7y] {
    position: relative;
    flex: 1 1 auto;
    height: 0.7rem;
    min-width: 4.5rem;
    /* 도면의 빈 칸 — 옅은 채움 위에 1px 실선 테두리 */
    background: var(--paper-2);
    border: 1px solid var(--line-light);
}

.usage-fill[b-8fin3xaq7y] {
    height: 100%;
    /* 기본 잉크: 중립 회색 계열. 임계 상태는 아래에서 덮어쓴다. */
    background: var(--ink-3);
}

/* 임계 판정별 잉크 — 판정 자체는 서버(InfraThresholds)가 내리고, 여기서는 그 결과를 칠하기만 한다. */
.usage-ok .usage-fill[b-8fin3xaq7y] {
    background: var(--status-good-ink);
}

.usage-warning .usage-fill[b-8fin3xaq7y] {
    background: var(--status-warning-ink);
}

.usage-critical .usage-fill[b-8fin3xaq7y] {
    background: var(--status-critical-ink);
}

.usage-warning[b-8fin3xaq7y] {
    border-color: var(--status-warning-ink);
}

.usage-critical[b-8fin3xaq7y] {
    border-color: var(--status-critical-ink);
}

/* 미측정은 막대가 없다 — 이 규칙은 혹시 도달하더라도 채움을 그리지 않게 하는 이중 방어다. */
.usage-unknown .usage-fill[b-8fin3xaq7y] {
    background: transparent;
}

.usage-value[b-8fin3xaq7y] {
    flex: 0 0 auto;
    font-family: var(--font-label);
    font-variant-numeric: tabular-nums;
    font-size: 0.85rem;
    color: var(--ink-2);
}

/* 추이 표의 행 머리글은 왼쪽 정렬 — 부품표의 항목명과 같은 자리 */
.table th[scope="row"][b-8fin3xaq7y] {
    text-align: left;
    font-weight: 600;
}
/* /Components/Pages/Desktops.razor.rz.scp.css */
/* 데스크톱 지급/회수 — 페이지 전용 조판.
   전역 문법(선 위계·검인 스탬프·부품표 표·표제줄·행 작업 칸·격자 한 줄 기입란)은 app.css가 정한다.
   여기서는 검색 칸과 지시서 안의 확인 줄만 다룬다. */

/* ---------- 검색 ---------- */

.desk-query[b-4bbmr8fokz] {
    min-width: 16rem;
}

/* ---------- 작업 지시서 안 ---------- */

/* 예외를 확인받는 줄 — 체크박스와 글이 한 줄에 앉는다(기입란 라벨 문법과 구분) */
.confirm-line[b-4bbmr8fokz] {
    display: flex;
    align-items: flex-start;
    gap: 0.5rem;
    margin: 0.7rem 0 0;
    font-family: var(--font-body);
    font-size: 0.9rem;
    line-height: 1.5;
}

    .confirm-line input[type="checkbox"][b-4bbmr8fokz] {
        margin-top: 0.2rem;
        accent-color: var(--accent);
    }
/* /Components/Pages/Home.razor.rz.scp.css */
/* 운영 상태 — 페이지 전용 조판.
   전역 문법(선 위계·검인 스탬프·계기 띠)은 app.css가 정하고, 여기서는 판정 한 줄과
   접히는 절만 다룬다. 깊이는 그림자가 아니라 선 굵기로 준다(그림자 한 면 규칙). */

/* ---------- 판정 한 줄 ---------- */

/* 시트 안의 또 다른 카드가 아니라, 위아래를 선으로 끊은 한 단(段)이다. */
.verdict[b-77xjqhmcnd] {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    gap: 0.9rem;
    margin: 0 0 0.5rem;
    padding: 1rem 0 1.2rem;
    border-top: 2px solid var(--line-heavy);
    border-bottom: 1.5px solid var(--line-medium);
}

/* 등급 스탬프. 색이 아니라 글자가 등급을 말하므로 크기만 한 단 올린다. */
.verdict-stamp[b-77xjqhmcnd] {
    flex: 0 0 auto;
    padding: 0.18rem 0.7rem;
    font-size: 0.92rem;
}

/* 사람 말 한 문장 — 읽는 글이므로 본문 서체이고 행 길이를 묶는다. */
.verdict-line[b-77xjqhmcnd] {
    flex: 1 1 24rem;
    max-width: 74ch;
    margin: 0;
    font-size: 1.05rem;
    line-height: 1.5;
}

.verdict-actions[b-77xjqhmcnd] {
    display: flex;
    flex: 0 0 auto;
    flex-wrap: wrap;
    gap: 0.5rem;
}

/* 머리 문장 밖의 나머지 근거. 목록 마커는 쓰지 않는다 — 각 줄이 이미 스탬프로 시작한다. */
.verdict-more[b-77xjqhmcnd] {
    margin: 0 0 1.2rem;
    padding: 0;
    list-style: none;
}

    .verdict-more li[b-77xjqhmcnd] {
        display: flex;
        align-items: baseline;
        gap: 0.6rem;
        max-width: 78ch;
        padding: 0.45rem 0;
        border-bottom: 1px solid var(--line-hair);
    }

        .verdict-more li:last-child[b-77xjqhmcnd] {
            border-bottom: none;
        }

/* 두 번째 질문("줄 수 있나")에 답하는 한 줄 — 계기 띠와 같은 문법. */
.verdict-supply[b-77xjqhmcnd] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.7rem;
    margin: 0 0 1.6rem;
    padding: 0.5rem 0.85rem;
    border: 1.5px solid var(--line-medium);
    background: var(--paper-2);
    font-family: var(--font-label);
    font-size: 0.88rem;
    font-variant-numeric: tabular-nums;
}

/* ---------- 접히는 절 ---------- */

/* 표제 스트립이 곧 여닫이다. 카드로 감싸지 않는다(카드 안 카드 금지). */
.fold[b-77xjqhmcnd] {
    margin: 2rem 0 0;
}

    .fold > summary[b-77xjqhmcnd] {
        display: flex;
        align-items: baseline;
        gap: 0.5rem;
        padding: 0 0 0.4rem;
        border-bottom: 1px solid var(--line-light);
        list-style: none;
        cursor: pointer;
        font-family: var(--font-label);
        font-size: 1rem;
        font-weight: 700;
        letter-spacing: 0.02em;
        color: var(--ink);
    }

        .fold > summary[b-77xjqhmcnd]::-webkit-details-marker {
            display: none;
        }

        /* 마커는 도면 기호처럼 직접 그린다 — 브라우저 기본 삼각형을 쓰지 않는다. */
        .fold > summary[b-77xjqhmcnd]::before {
            content: "▸" / "";
            font-size: 0.8rem;
            color: var(--ink-2);
        }

        .fold > summary:hover[b-77xjqhmcnd] {
            background: var(--row-hover);
        }

        .fold > summary:focus-visible[b-77xjqhmcnd] {
            outline: none;
            border-color: var(--accent);
            box-shadow: var(--focus-ring);
        }

    .fold[open] > summary[b-77xjqhmcnd]::before {
        content: "▾" / "";
    }

    .fold > *:not(summary)[b-77xjqhmcnd] {
        margin-top: 0.7rem;
    }
/* /Components/Pages/Ipam.razor.rz.scp.css */
/* IP 주소 관리 — 페이지 전용 조판.
   전역 문법(선 위계·검인 스탬프·부품표 표·표제줄·행 작업 칸·표 부기)은 app.css가 정하고,
   여기서는 인라인 기입 칸만 다룬다. */

.inline-field[b-g6ar72uopc] {
    display: inline-flex;
    align-items: center;
}

/* 지시서 확정 줄(.modal-actions)은 app.css의 모달 계열로 올라갔다 — 모든 지시서가 같은 고정 확정 바를 쓴다. */
/* /Components/Pages/Login.razor.rz.scp.css */
/* 로그인 도면: 좁은 시트 한 장. 기입란 두 칸과 결재란 하나. */

.login-brand[b-bvk5inqnho] {
    font-family: var(--font-label);
    letter-spacing: 0.06em;
}

.login-error[b-bvk5inqnho] {
    margin: 0 0 1rem;
}

.login-form[b-bvk5inqnho] {
    display: flex;
    flex-direction: column;
    gap: 0.8rem;
    margin: 1.2rem 0 0.8rem;
}

.login-field[b-bvk5inqnho] {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    font-family: var(--font-label);
    font-size: 0.8rem;
    font-weight: 600;
    letter-spacing: 0.02em;
    color: var(--ink-2);
}

.login-submit[b-bvk5inqnho] {
    align-self: flex-start;
    padding: 0.45rem 1.6rem;
}

.login-hint[b-bvk5inqnho] {
    color: var(--ink-3);
    font-size: 0.82rem;
    margin: 0.4rem 0 0;
}

/* 구분선: 도면의 절취선처럼 가운데 글자를 물고 지나간다 */
.login-divider[b-bvk5inqnho] {
    display: flex;
    align-items: center;
    gap: 0.7rem;
    margin: 1.6rem 0 1rem;
    color: var(--ink-3);
    font-family: var(--font-label);
    font-size: 0.78rem;
    letter-spacing: 0.08em;
}

    .login-divider[b-bvk5inqnho]::before,
    .login-divider[b-bvk5inqnho]::after {
        content: "";
        flex: 1;
        border-top: 1px solid var(--line-hair);
    }

.login-sso[b-bvk5inqnho] {
    display: inline-flex;
}
/* /Components/Pages/OperationDetail.razor.rz.scp.css */
/* 승인 코멘트 기입란 — 한 줄 사유가 잘리지 않는 폭. */
.approve-comment[b-9kz0xiu4uh] {
    width: 20rem;
    max-width: 100%;
}
/* /Components/Pages/Operations.razor.rz.scp.css */
/* 오류 코드 기입란 — 대표적인 코드(vm.identity_mismatch)가 잘리지 않는 폭. */
.filter-error[b-agjms032w8] {
    width: 14rem;
}
/* /Components/Pages/PoolDetail.razor.rz.scp.css */
/* 풀 상세 페이지 전용 배치. 색·선·타이포는 app.css의 도면 문법을 그대로 쓴다. */

/* 목록으로 돌아가는 줄 — 제목 위에 한 칸. */
.page-back[b-28pfp58pef] {
    margin: 0 0 0.4rem;
    font-size: 0.9rem;
}

/* 표제줄이 h1을 담을 때도 h2와 같은 리듬을 쓴다(선이 두 번 그어지지 않게). */
.card-head h1[b-28pfp58pef] {
    display: flex;
    align-items: center;
    margin: 0;
    padding: 0;
    border: 0;
}

.pool-meta[b-28pfp58pef] {
    margin: 0.4rem 0 0.2rem;
    font-size: 0.88rem;
    color: var(--ink-2);
}

.pool-policy[b-28pfp58pef] {
    margin: 0 0 0.7rem;
    font-size: 0.85rem;
}

/* 최소 가용 대수 기준선 — 배포 정책 줄 위에 한 줄. 미달 배지가 붙을 자리를 가로로 띄운다. */
.pool-availability[b-28pfp58pef] {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 0.4rem;
    margin: 0.2rem 0 0.3rem;
    font-size: 0.88rem;
}

/* 머신 검색 기입란 — 이름·계정이 잘리지 않는 폭. */
.machine-query[b-28pfp58pef] {
    width: 20rem;
    max-width: 100%;
}

/* 정렬 가능한 열 머리글 — 글자는 머리글 그대로 두고 누를 수 있다는 것만 알린다. */
.table-sort[b-28pfp58pef] {
    display: inline-flex;
    align-items: center;
    gap: 0.25rem;
    padding: 0;
    border: 0;
    background: none;
    font: inherit;
    color: inherit;
    cursor: pointer;
}

    .table-sort:hover[b-28pfp58pef] {
        text-decoration: underline;
    }

/* 다른 화면이 가리켜 온 행. 색이 아니라 왼쪽 선으로 짚는다. */
.row-highlight td:first-child[b-28pfp58pef] {
    box-shadow: inset 3px 0 0 0 var(--ink);
}

/* 쪽 이동 — 표 아래 한 줄. 가운데 글이 몇 쪽 중 몇 쪽인지를 말한다. */
.pager[b-28pfp58pef] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.6rem;
    margin: 0.75rem 0 1.5rem;
}

/* 선택 열 — 폭은 체크박스 하나만큼. 표의 첫 칸이 글자가 아니라 손잡이라는 것만 보이면 된다. */
.cell-select[b-28pfp58pef] {
    width: 1.75rem;
    text-align: center;
}
/* /Components/Pages/Pools.razor.rz.scp.css */
/* 풀 목록 페이지 전용 배치. 색·선·타이포는 app.css의 도면 문법을 그대로 쓴다 —
   여기서는 '어디에 놓이는가'만 정한다. */

/* ---------- 회수대기·후보·완료 절 = 시트 위의 부품표 섹션 (카드 안 카드 금지) ---------- */

.pool[b-d4au727xw5] {
    margin: 0 0 2.4rem;
}

    .pool:last-of-type[b-d4au727xw5] {
        margin-bottom: 0;
    }

/* 표제 스트립: 절 이름이 한 줄에 앉는다 */
.pool-head[b-d4au727xw5] {
    display: flex;
    flex-wrap: wrap;
    align-items: baseline;
    justify-content: space-between;
    gap: 0.4rem 1.2rem;
    /* 제목 위 여백 > 아래 여백 */
    margin: 2rem 0 0.55rem;
    padding-bottom: 0.4rem;
    border-bottom: 1.5px solid var(--line-medium);
}

    /* 스트립 자체가 밑줄을 지므로 h2의 기본 밑줄·여백은 거둔다 */
    .pool-head h2[b-d4au727xw5] {
        flex: 1 1 18rem;
        min-width: 0;
        margin: 0;
        padding: 0;
        border-bottom: 0;
    }

/* 합계 줄은 본문 행과 같은 표 안에 있지만 읽는 층이 다르다 — 위에 선을 하나 더 긋는다. */
tfoot td[b-d4au727xw5] {
    border-top: 1.5px solid var(--line-medium);
    font-weight: 600;
}
/* /Components/Pages/Settings.razor.rz.scp.css */
/* 운영 설정 — 페이지 전용 조판.
   전역 문법(선 위계·검인 스탬프·부품표 표·지시서 모달)은 app.css가 정한다.
   여기서는 '한 칸 안에 이름·키·설명이 층으로 쌓이는' 첫 열의 위계만 다룬다. */

/* 항목 이름: 이 행이 무엇에 대한 것인지 */
.setting-name[b-ta4jk0j64h] {
    font-weight: 600;
}

/* 구성 키: 운영자가 설정 파일·환경변수에서 찾을 때 쓰는 실제 문자열 — 번역하지 않는다 */
.setting-key[b-ta4jk0j64h] {
    font-size: 0.8rem;
    color: var(--ink-2);
    margin-top: 0.1rem;
    word-break: break-all;
}

/* 설명·부기: 읽지 않아도 되지만, 읽으면 왜 이 값인지 알 수 있는 줄 */
.setting-help[b-ta4jk0j64h] {
    font-size: 0.82rem;
    color: var(--ink-2);
    margin-top: 0.25rem;
    max-width: 62ch;
}

/* 행 작업 칸과 표 부기는 app.css의 시스템 규칙을 쓴다. */
/* /Components/Pages/UserDetail.razor.rz.scp.css */
/* 목록으로 돌아가는 줄 — 제목 위에 한 칸. */
.page-back[b-5y44sbptr6] {
    margin: 0 0 0.4rem;
    font-size: 0.9rem;
}

/* 표제줄이 h1을 담을 때도 h2와 같은 리듬을 쓴다(선이 두 번 그어지지 않게). */
.card-head h1[b-5y44sbptr6] {
    display: flex;
    align-items: center;
    margin: 0;
    padding: 0;
    border: 0;
}

/* 접속 이력 절 — 데스크톱 표와 같은 폭을 유지하되 한 단 아래로 물러나 보이게 한다. */
.user-history[b-5y44sbptr6] {
    margin: 1rem 0 1.75rem;
}

/* 정밀도 고지는 표 바로 위에 붙여 둔다 — 숫자를 읽기 전에 읽히도록. */
.history-note[b-5y44sbptr6] {
    margin: 0 0 0.5rem;
}

.history-actions[b-5y44sbptr6] {
    margin: 0.5rem 0 0;
    display: flex;
    gap: 0.5rem;
    flex-wrap: wrap;
}
/* /Components/Pages/Users.razor.rz.scp.css */
/* 계정 검색 기입란 — 도메인\계정 형태가 잘리지 않는 폭. */
.user-query[b-d3vpm7qpoc] {
    width: 20rem;
    max-width: 100%;
}

/* 쪽 이동 — 표 아래 한 줄. 가운데 글이 '몇 쪽 중 몇 쪽'을 말한다. */
.pager[b-d3vpm7qpoc] {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 0.6rem;
    margin: 0.75rem 0 1.5rem;
}
/* /Components/Shared/PoolActions/MachineBatchModal.razor.rz.scp.css */
/* 일괄 작업 지시서. 미리보기와 제출이 한 시트 안에서 순서대로 놓인다. */

/* 판정 요약 한 줄 — 표 위에서 숫자를 먼저 말한다. */
.step-note[b-2h8puanp6q] {
    color: var(--ink-2);
    font-size: 0.88rem;
    max-width: 78ch;
    margin: 0.9rem 0;
}

/* 미리보기 버튼 줄. 제출은 시트 아래 modal-actions에 따로 있다. */
.step-actions[b-2h8puanp6q] {
    display: flex;
    flex-wrap: wrap;
    gap: 0.5rem;
    margin-top: 1rem;
}

.problem-list[b-2h8puanp6q] {
    margin: 0.25rem 0 0;
    padding-left: 1.1rem;
}

    .problem-list li[b-2h8puanp6q] {
        margin: 0.1rem 0;
    }

.field-reason[b-2h8puanp6q] {
    max-width: 36rem;
}
