/* ============================================================ 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.04em; 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; } }