/* ============================================================ page-auto-import-bem.css — Turn B: BEM 元件層 group: monitor · accent: --momo-warm-caramel ============================================================ */ /* ---------- Page head ---------- */ .ai-head { display: flex; align-items: flex-start; gap: var(--momo-space-4); flex-wrap: wrap; margin-bottom: var(--momo-space-5); padding-bottom: var(--momo-space-4); border-bottom: 1px solid var(--momo-border-light); } .ai-head__icon { display: inline-flex; align-items: center; justify-content: center; width: 44px; height: 44px; border-radius: var(--momo-radius-sm); background: var(--momo-warm-caramel-soft); color: var(--momo-warm-caramel-deep); font-size: var(--momo-text-xl); flex-shrink: 0; } .ai-head__main { flex: 1 1 480px; min-width: 0; } .ai-head__title { margin: 0 0 var(--momo-space-1) 0; font-family: var(--momo-font-heading); font-weight: var(--momo-font-bold); font-size: var(--momo-text-2xl); color: var(--momo-ink-primary); letter-spacing: 0; } .ai-head__subtitle { display: flex; align-items: center; gap: var(--momo-space-2); margin: 0; font-size: var(--momo-text-sm); color: var(--momo-ink-tertiary); } .ai-head__subtitle strong { color: var(--momo-ink-secondary); font-weight: var(--momo-font-semibold); } /* ---------- Section card ---------- */ .ai-card { background: var(--momo-surface-0); border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-md); box-shadow: var(--momo-shadow-soft); margin-bottom: var(--momo-space-5); overflow: hidden; } .ai-card__head { display: flex; align-items: center; justify-content: space-between; padding: var(--momo-space-4) var(--momo-space-5); border-bottom: 1px solid var(--momo-border-light); background: var(--momo-surface-2); } .ai-card__title { margin: 0; font-family: var(--momo-font-heading); font-weight: var(--momo-font-semibold); font-size: var(--momo-text-base); color: var(--momo-ink-primary); display: inline-flex; align-items: center; gap: var(--momo-space-2); } .ai-card__title i { color: var(--momo-warm-caramel-deep); } .ai-card__body { padding: var(--momo-space-5); } /* ---------- Notice ---------- */ .ai-notice { display: flex; align-items: flex-start; gap: var(--momo-space-2); padding: var(--momo-space-3) var(--momo-space-4); background: var(--momo-surface-2); border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-sm); font-size: var(--momo-text-sm); color: var(--momo-ink-secondary); margin-bottom: var(--momo-space-4); } .ai-notice--info { background: var(--momo-warm-caramel-soft); border-color: var(--momo-warm-caramel); color: var(--momo-ink-primary); } .ai-notice__icon { color: var(--momo-warm-caramel-deep); flex-shrink: 0; margin-top: 0.15em; } .ai-notice__title { font-weight: var(--momo-font-semibold); color: var(--momo-warm-caramel-deep); margin: 0 0 var(--momo-space-1) 0; } .ai-notice__body { margin: 0; } .ai-notice__body code { background: var(--momo-surface-0); border: 1px solid var(--momo-border-light); padding: 0.1em 0.4em; border-radius: var(--momo-radius-xs); font-family: var(--momo-font-mono); font-size: 0.92em; color: var(--momo-warm-mahogany); } /* ---------- Form grid ---------- */ .ai-form-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: var(--momo-space-3); margin-bottom: var(--momo-space-4); } .ai-field__label { display: block; font-weight: var(--momo-font-semibold); color: var(--momo-ink-secondary); font-size: var(--momo-text-sm); margin-bottom: var(--momo-space-2); } .ai-field__hint { display: block; margin-top: var(--momo-space-1); font-size: var(--momo-text-xs); color: var(--momo-ink-tertiary); } .ai-field__input { width: 100%; border: 1px solid var(--momo-border); border-radius: var(--momo-radius-sm); padding: var(--momo-space-2) var(--momo-space-3); font-size: var(--momo-text-sm); background: var(--momo-surface-0); color: var(--momo-ink-primary); transition: border-color 0.16s ease, box-shadow 0.16s ease; } .ai-field__input:focus { outline: none; border-color: var(--momo-warm-caramel); box-shadow: 0 0 0 3px var(--momo-warm-caramel-soft); } /* ---------- Action toolbar ---------- */ .ai-toolbar { display: flex; flex-wrap: wrap; gap: var(--momo-space-2); } /* ---------- Upload row ---------- */ .ai-uploadrow { display: grid; grid-template-columns: 1fr auto; gap: var(--momo-space-3); align-items: end; } @media (max-width: 720px) { .ai-uploadrow { grid-template-columns: 1fr; } } @media (max-width: 768px) { .ai-head { flex-wrap: nowrap; align-items: flex-start; gap: var(--momo-space-3); margin-bottom: var(--momo-space-4); padding-bottom: var(--momo-space-4); } .ai-head__icon { width: 36px; height: 36px; font-size: var(--momo-text-title); } .ai-head__main { flex: 1 1 auto; } .ai-head__title { margin-bottom: var(--momo-space-2); font-size: var(--momo-text-headline); line-height: 1.2; } .ai-head__subtitle { display: block; font-size: var(--momo-text-body-sm); line-height: 1.55; } .ai-head__subtitle i { margin-right: var(--momo-space-1); } .ai-card__head { padding: var(--momo-space-4); } .ai-card__body { padding: var(--momo-space-4); } .ai-notice { padding: var(--momo-space-3); } .ai-notice, .ai-notice__body, .ai-notice code { overflow-wrap: anywhere; } .ai-toolbar { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); } .ai-toolbar .btn { width: 100%; min-height: 44px; padding-right: var(--momo-space-3); padding-left: var(--momo-space-3); } } @media (max-width: 360px) { .ai-toolbar { grid-template-columns: 1fr; } } /* ---------- Job table ---------- */ .ai-jobtable { width: 100%; font-size: var(--momo-text-sm); } .ai-jobtable th { background: var(--momo-surface-2); color: var(--momo-ink-secondary); font-weight: var(--momo-font-semibold); font-size: var(--momo-text-xs); text-transform: uppercase; letter-spacing: 0; padding: var(--momo-space-3); border-bottom: 1px solid var(--momo-border); white-space: nowrap; } .ai-jobtable td { vertical-align: middle; padding: var(--momo-space-3); border-bottom: 1px solid var(--momo-border-light); color: var(--momo-ink-primary); } .ai-jobtable tr:hover td { background: var(--momo-surface-1); } .ai-jobtable tr:last-child td { border-bottom: none; } .ai-jobtable__id { font-family: var(--momo-font-mono); font-weight: var(--momo-font-bold); color: var(--momo-ink-secondary); } .ai-jobtable__file { display: inline-flex; align-items: center; gap: var(--momo-space-2); min-width: 0; font-family: var(--momo-font-mono); color: var(--momo-ink-primary); overflow-wrap: anywhere; } .ai-jobtable__file i { color: var(--momo-warm-olive); } .ai-jobtable__error { white-space: normal; max-width: 260px; word-break: break-word; font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); color: var(--momo-warm-honey-deep); } .ai-jobtable__time { font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); color: var(--momo-ink-tertiary); } .ai-jobtable__count { font-family: var(--momo-font-mono); font-weight: var(--momo-font-semibold); } /* ---------- Status pill ---------- */ .ai-status { display: inline-flex; align-items: center; gap: var(--momo-space-1); padding: 0.22em 0.7em; border-radius: var(--momo-radius-pill); font-size: var(--momo-text-xs); font-weight: var(--momo-font-semibold); border: 1px solid transparent; } .ai-status--pending { background: var(--momo-warm-honey-soft); color: var(--momo-warm-honey-deep); border-color: var(--momo-warm-honey-soft); } .ai-status--downloading { background: var(--momo-warm-caramel-soft); color: var(--momo-warm-caramel-deep); border-color: var(--momo-warm-caramel-soft); } .ai-status--importing { background: var(--momo-warm-mahogany-soft); color: var(--momo-warm-mahogany); border-color: var(--momo-warm-mahogany-soft); } .ai-status--completed { background: var(--momo-warm-olive-soft); color: var(--momo-warm-olive-deep); border-color: var(--momo-warm-olive-soft); } .ai-status--failed { background: rgba(193,77,77,0.15); color: #8a3a3a; border-color: rgba(193,77,77,0.4); } /* ---------- Progress ---------- */ .ai-progress { width: 100%; height: 6px; border-radius: var(--momo-radius-pill); background: var(--momo-surface-2); overflow: hidden; margin-bottom: var(--momo-space-1); } .ai-progress__bar { height: 100%; background: var(--momo-warm-caramel); transition: width 0.3s ease; } .ai-progress__label { font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); color: var(--momo-ink-tertiary); } /* ---------- Count chips ---------- */ .ai-count { display: inline-flex; align-items: center; padding: 0.2em 0.55em; border-radius: var(--momo-radius-pill); font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); font-weight: var(--momo-font-semibold); } .ai-count--ok { background: var(--momo-warm-olive); color: var(--momo-on-accent, #fff8ef); } .ai-count--total { background: var(--momo-surface-2); color: var(--momo-ink-secondary); border: 1px solid var(--momo-border); } /* ---------- Empty state ---------- */ .ai-empty { text-align: center; padding: var(--momo-space-12) var(--momo-space-4); color: var(--momo-ink-tertiary); } .ai-empty__icon { font-size: 2.5rem; margin-bottom: var(--momo-space-3); opacity: 0.4; color: var(--momo-warm-caramel); } .ai-empty__text { margin: 0; font-size: var(--momo-text-base); font-weight: var(--momo-font-medium); } /* ---------- Loading ---------- */ .ai-loading { text-align: center; padding: var(--momo-space-8) var(--momo-space-4); } .ai-loading__spinner { width: 32px; height: 32px; border-width: 3px; color: var(--momo-warm-caramel); } .ai-loading__text { margin-top: var(--momo-space-2); color: var(--momo-ink-tertiary); font-size: var(--momo-text-sm); } @media (max-width: 768px) { .auto-import-page .container { max-width: 100%; padding-right: var(--momo-space-3); padding-left: var(--momo-space-3); } .ai-card__head { align-items: flex-start; flex-direction: column; gap: var(--momo-space-3); } .ai-card__head .btn { width: 100%; min-height: 42px; } #jobsTableContainer .table-responsive { overflow: visible; } .ai-jobtable, .ai-jobtable thead, .ai-jobtable tbody, .ai-jobtable tr, .ai-jobtable td { display: block; width: 100%; } .ai-jobtable thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0, 0, 0, 0); white-space: nowrap; } .ai-jobtable tbody { display: grid; gap: var(--momo-space-3); } .ai-jobtable tr { display: grid; gap: var(--momo-space-2); padding: var(--momo-space-3); background: var(--momo-surface-0); border: 1px solid var(--momo-border-light); border-radius: var(--momo-radius-md); box-shadow: var(--momo-shadow-soft); } .ai-jobtable tr:hover td { background: transparent; } .ai-jobtable td { display: grid; grid-template-columns: 86px minmax(0, 1fr); gap: var(--momo-space-2); align-items: start; padding: 0; border-bottom: 0; white-space: normal; overflow-wrap: anywhere; text-align: left !important; } .ai-jobtable td::before { content: ""; color: var(--momo-ink-tertiary); font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); font-weight: var(--momo-font-semibold); line-height: 1.45; } .ai-jobtable td:nth-child(1)::before { content: "ID"; } .ai-jobtable td:nth-child(2)::before { content: "檔案"; } .ai-jobtable td:nth-child(3)::before { content: "狀態"; } .ai-jobtable td:nth-child(4)::before { content: "進度"; } .ai-jobtable td:nth-child(5)::before { content: "成功/總"; } .ai-jobtable td:nth-child(6)::before { content: "開始"; } .ai-jobtable td:nth-child(7)::before { content: "完成"; } .ai-jobtable td:nth-child(8)::before { content: "錯誤"; } .ai-jobtable td:nth-child(9)::before { content: "操作"; } .ai-jobtable__file { align-items: flex-start; line-height: 1.45; } .ai-jobtable__error { max-width: none; } .ai-progress { min-width: 0; } } /* ---------- V10.776 automation cockpit ---------- */ .ai-head__actions { display: flex; align-items: center; gap: var(--momo-space-2); margin-left: auto; } .ai-icon-button, .ai-row-action { display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px; padding: 0; border: 1px solid var(--momo-border); border-radius: var(--momo-radius-sm); background: var(--momo-surface-0); color: var(--momo-ink-secondary); } .ai-icon-button:hover, .ai-icon-button:focus-visible, .ai-row-action:hover, .ai-row-action:focus-visible { border-color: #2f6f8f; color: #205771; outline: 2px solid rgba(47, 111, 143, 0.2); outline-offset: 1px; } .ai-cockpit { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: var(--momo-space-5); border-top: 1px solid var(--momo-border); border-bottom: 1px solid var(--momo-border); background: var(--momo-surface-0); } .ai-metric { display: flex; min-width: 0; min-height: 118px; flex-direction: column; justify-content: center; padding: var(--momo-space-4) var(--momo-space-5); border-right: 1px solid var(--momo-border-light); } .ai-metric:last-child { border-right: 0; } .ai-metric__label, .ai-section__eyebrow { color: var(--momo-ink-tertiary); font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); font-weight: var(--momo-font-semibold); letter-spacing: 0; text-transform: uppercase; } .ai-metric__value { margin: var(--momo-space-2) 0 var(--momo-space-1); color: var(--momo-ink-primary); font-family: var(--momo-font-heading); font-size: var(--momo-text-xl); font-weight: var(--momo-font-bold); line-height: 1.25; overflow-wrap: anywhere; } .ai-metric__value--compact { font-size: var(--momo-text-base); } .ai-metric__value[data-state="ready"] { color: #287a55; } .ai-metric__value[data-state="blocked"] { color: #a33e4a; } .ai-metric__meta { color: var(--momo-ink-tertiary); font-size: var(--momo-text-xs); overflow-wrap: anywhere; } .ai-inline-status { display: flex; align-items: center; gap: var(--momo-space-2); margin: 0 0 var(--momo-space-5); padding: var(--momo-space-3) var(--momo-space-4); border-left: 3px solid #2f6f8f; background: rgba(47, 111, 143, 0.08); color: #205771; font-size: var(--momo-text-sm); } .ai-inline-status[hidden] { display: none; } .ai-inline-status--success { border-color: #287a55; background: rgba(40, 122, 85, 0.09); color: #1f6245; } .ai-inline-status--warning { border-color: #a06b15; background: rgba(160, 107, 21, 0.09); color: #76500f; } .ai-inline-status--danger { border-color: #a33e4a; background: rgba(163, 62, 74, 0.09); color: #7b2f38; } .ai-section { padding: var(--momo-space-5) 0; border-top: 1px solid var(--momo-border-light); } .ai-section__head { display: flex; align-items: center; justify-content: space-between; gap: var(--momo-space-3); margin-bottom: var(--momo-space-4); } .ai-section__title { margin: var(--momo-space-1) 0 0; color: var(--momo-ink-primary); font-family: var(--momo-font-heading); font-size: var(--momo-text-lg); font-weight: var(--momo-font-semibold); letter-spacing: 0; } .ai-mode-badge { display: inline-flex; align-items: center; gap: var(--momo-space-1); padding: var(--momo-space-1) var(--momo-space-2); border: 1px solid rgba(40, 122, 85, 0.35); border-radius: var(--momo-radius-sm); background: rgba(40, 122, 85, 0.08); color: #1f6245; font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); font-weight: var(--momo-font-semibold); } .ai-source-list { border-top: 1px solid var(--momo-border-light); } .ai-source-row { display: grid; grid-template-columns: 14px minmax(0, 1fr) auto; gap: var(--momo-space-3); align-items: center; min-height: 52px; padding: var(--momo-space-3) 0; border-bottom: 1px solid var(--momo-border-light); } .ai-source-row--loading { display: block; color: var(--momo-ink-tertiary); font-size: var(--momo-text-sm); } .ai-source-row__indicator { width: 9px; height: 9px; border-radius: 50%; background: var(--momo-border-strong); } .ai-source-row__indicator--ready { background: #287a55; } .ai-source-row__indicator--degraded { background: #a06b15; } .ai-source-row__indicator--disabled { background: #8a9198; } .ai-source-row__name { min-width: 0; color: var(--momo-ink-primary); font-size: var(--momo-text-sm); font-weight: var(--momo-font-semibold); overflow-wrap: anywhere; } .ai-source-row__state { color: var(--momo-ink-tertiary); font-family: var(--momo-font-mono); font-size: var(--momo-text-xs); } .ai-disclosure { margin-top: var(--momo-space-4); border-bottom: 1px solid var(--momo-border-light); } .ai-disclosure summary { display: flex; align-items: center; gap: var(--momo-space-2); padding: var(--momo-space-3) 0; color: var(--momo-ink-secondary); cursor: pointer; font-size: var(--momo-text-sm); font-weight: var(--momo-font-semibold); list-style: none; } .ai-disclosure summary::-webkit-details-marker { display: none; } .ai-disclosure summary::after { margin-left: auto; color: var(--momo-ink-tertiary); content: "+"; } .ai-disclosure[open] summary::after { content: "−"; } .ai-disclosure__body { padding: var(--momo-space-3) 0 var(--momo-space-5); } .ai-count-separator { margin: 0 var(--momo-space-1); color: var(--momo-ink-tertiary); } .ai-row-action { width: 28px; height: 28px; margin-left: var(--momo-space-2); color: #a33e4a; } @media (max-width: 900px) { .ai-cockpit { grid-template-columns: repeat(2, minmax(0, 1fr)); } .ai-metric:nth-child(2) { border-right: 0; } .ai-metric:nth-child(-n + 2) { border-bottom: 1px solid var(--momo-border-light); } } @media (max-width: 768px) { .ai-head { flex-wrap: wrap; } .ai-head__main { flex-basis: calc(100% - 52px); } .ai-head__actions { width: 100%; margin-left: 0; } .ai-head__actions .btn { flex: 1; min-height: 44px; } .ai-cockpit { grid-template-columns: 1fr; } .ai-metric, .ai-metric:nth-child(2) { min-height: 96px; border-right: 0; border-bottom: 1px solid var(--momo-border-light); } .ai-metric:last-child { border-bottom: 0; } .ai-section__head { align-items: flex-start; } .ai-mode-badge { max-width: 48%; text-align: right; } .ai-source-row { grid-template-columns: 14px minmax(0, 1fr) minmax(80px, auto); } .ai-jobtable td:nth-child(1)::before { content: "檔案"; } .ai-jobtable td:nth-child(2)::before { content: "狀態"; } .ai-jobtable td:nth-child(3)::before { content: "進度"; } .ai-jobtable td:nth-child(4)::before { content: "筆數"; } .ai-jobtable td:nth-child(5)::before { content: "完成"; } .ai-jobtable td:nth-child(6)::before { content: "驗證"; } } @media (max-width: 380px) { .ai-source-row { grid-template-columns: 14px minmax(0, 1fr); } .ai-source-row__state { grid-column: 2; } }