Files
koc-loop/app/globals.css
ABAPPLO 582c26e57e feat: 在账号资源库中展示导入的标签字段
KOC 资源导入模板新增「标签」列,导入后写入 accounts.tags 并在
账号资源库面板以 badge 形式展示,导出时也带回标签列以保证往返一致。

- lib/resource-import.ts: 新增 tags 字段与 HEADER 别名(标签/账号标签/人设标签),
  新增 normalizeTags/mergeTags 工具,按顿号规整与合并
- 修复 xlsx 解析器对自闭合空 cell (<c r="G6"/>) 的错位 bug,否则
  行内出现空 cell 会让后续 cell 的列引用读到错误 body(如老茄子行标签丢失)
- db/schema.ts + lib/mvp-db.ts: accounts 表新增 tags VARCHAR(500)
- app/api/resources-import/route.ts: SELECT/INSERT/UPDATE/预览全部带上 tags
- app/api/resources-export/route.ts: 导出表加「标签」列
- app/admin-app.tsx + app/globals.css: 资源卡片新增「账号标签」区,
  导入预览行展示标签
- public/KOC资源导入模板.xlsx: 模板补「标签(选填)」列与填写说明
- mysql/0005_account_tags.sql: 线上 MySQL 迁移
- tests/resource-import.test.mjs: 补 tags 解析/合并用例
2026-08-18 16:39:38 +08:00

4255 lines
68 KiB
CSS

@import "tailwindcss";
:root {
--font-geist-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif;
--font-geist-mono: "SFMono-Regular", Consolas, "Liberation Mono", monospace;
--ink: #172321;
--ink-soft: #32423f;
--nav: #13201e;
--nav-muted: #84938f;
--green: #1f8f69;
--green-deep: #187455;
--green-soft: #e9f4ef;
--canvas: #f4f5f2;
--panel: #ffffff;
--line: #e4e8e4;
--muted: #77827f;
--orange: #ec7d51;
--orange-soft: #fff0e8;
--blue: #477f91;
--blue-soft: #e8f2f5;
--shadow: 0 1px 2px rgb(18 31 28 / 0.03), 0 12px 34px rgb(18 31 28 / 0.045);
}
* {
box-sizing: border-box;
}
html,
body {
min-height: 100%;
}
.admin-access-denied {
display: grid;
min-height: 100vh;
place-items: center;
padding: 24px;
background: var(--cream);
}
.admin-access-denied section {
width: min(440px, 100%);
padding: 42px;
border: 1px solid var(--line);
border-radius: 22px;
background: white;
box-shadow: 0 22px 70px rgb(18 31 28 / 0.1);
text-align: center;
}
.admin-access-denied p {
color: var(--green);
font-size: 11px;
font-weight: 800;
letter-spacing: 0.16em;
}
.admin-access-denied h1 {
margin: 14px 0 8px;
color: var(--green-deep);
font-size: 24px;
}
.admin-access-denied span {
display: block;
color: #7f8a86;
font-size: 13px;
}
.admin-access-denied a {
display: inline-flex;
height: 40px;
align-items: center;
margin-top: 24px;
padding: 0 18px;
border-radius: 10px;
color: white;
background: var(--green);
font-size: 12px;
font-weight: 700;
text-decoration: none;
}
.login-page {
display: grid;
min-height: 100vh;
grid-template-columns: minmax(0, 1.25fr) minmax(380px, 0.75fr);
gap: 28px;
align-items: stretch;
padding: 42px;
background: #eef2ee;
}
.login-brand,
.login-card {
border-radius: 28px;
}
.login-brand {
display: flex;
min-height: 620px;
flex-direction: column;
justify-content: center;
padding: clamp(42px, 7vw, 96px);
color: white;
background: linear-gradient(135deg, #102d25, #1f6f55);
box-shadow: var(--shadow);
}
.login-logo {
display: grid;
width: 54px;
height: 54px;
place-items: center;
border-radius: 16px;
color: #15553f;
background: #a9e4cc;
font-size: 23px;
font-weight: 800;
}
.login-brand p {
margin: 28px 0 6px;
color: #67d4aa;
font-size: 12px;
font-weight: 800;
letter-spacing: 0.16em;
}
.login-brand h1 {
margin: 0;
font-size: clamp(42px, 6vw, 82px);
font-weight: 520;
letter-spacing: -0.06em;
}
.login-brand span {
margin-top: 20px;
color: rgb(255 255 255 / 0.64);
font-size: 15px;
}
.login-card {
display: flex;
width: 100%;
max-width: 520px;
flex-direction: column;
align-self: center;
justify-self: center;
padding: clamp(32px, 5vw, 58px);
border: 1px solid #dfe6e1;
background: white;
box-shadow: var(--shadow);
}
.login-card h2 {
margin: 6px 0 4px;
font-size: 32px;
letter-spacing: -0.04em;
}
.login-tip {
margin-bottom: 30px;
color: var(--muted);
font-size: 12px;
}
.login-card label,
.user-create-form label {
display: flex;
flex-direction: column;
gap: 8px;
margin-bottom: 16px;
}
.login-card label > span,
.user-create-form label > span {
color: #61706b;
font-size: 11px;
font-weight: 650;
}
.login-card input,
.user-create-form input,
.user-create-form select {
height: 48px;
padding: 0 14px;
border: 1px solid #dbe3de;
border-radius: 11px;
outline: none;
background: #fbfcfb;
}
.login-card input:focus,
.user-create-form input:focus,
.user-create-form select:focus {
border-color: #5fb28f;
box-shadow: 0 0 0 3px rgb(50 153 112 / 0.1);
}
.login-card .primary-button {
width: 100%;
height: 50px;
margin-top: 8px;
}
.login-error {
margin: -2px 0 10px;
color: #c45e3a;
font-size: 11px;
}
body {
margin: 0;
background: var(--canvas);
color: var(--ink);
font-family: var(--font-geist-sans), "PingFang SC", "Microsoft YaHei", Arial, sans-serif;
-webkit-font-smoothing: antialiased;
}
button,
input,
textarea,
select {
color: inherit;
font: inherit;
}
button {
cursor: pointer;
}
button:disabled {
cursor: not-allowed;
opacity: 0.55;
}
a {
color: inherit;
text-decoration: none;
}
.app-shell {
min-height: 100vh;
}
.task-type-picker {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin: 22px 0 6px;
}
.task-type-picker button {
display: flex;
min-height: 82px;
flex-direction: column;
align-items: flex-start;
justify-content: center;
gap: 7px;
padding: 16px;
border: 1px solid #dbe4df;
border-radius: 14px;
color: #53625d;
background: #fafcfb;
text-align: left;
}
.task-type-picker button.active {
border-color: #278b69;
color: #123f31;
background: #edf8f3;
box-shadow: 0 0 0 3px rgb(39 139 105 / 0.08);
}
.task-type-picker b {
font-size: 15px;
}
.task-type-picker span {
color: #87938f;
font-size: 11px;
line-height: 1.5;
}
.screenshot-task-fields textarea {
width: 100%;
min-height: 108px;
resize: vertical;
padding: 13px 14px;
border: 1px solid #d8e0dc;
border-radius: 12px;
outline: none;
font: inherit;
line-height: 1.65;
}
.screenshot-task-fields textarea:focus {
border-color: #63a88e;
box-shadow: 0 0 0 3px rgb(39 139 105 / 0.08);
}
.task-example-picker {
position: relative;
display: flex;
min-height: 82px;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 5px;
padding: 14px;
border: 1px dashed #bdccc5;
border-radius: 12px;
background: #fafcfb;
}
.task-example-picker.has-file {
border-style: solid;
border-color: #8ec3ae;
background: #f0f8f4;
}
.task-example-picker input {
position: absolute;
inset: 0;
width: 100%;
height: 100%;
opacity: 0;
cursor: pointer;
}
.task-example-picker strong {
max-width: 100%;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
.task-example-picker small {
color: #8c9994;
}
.screenshot-task-table .creator-screenshot-link {
white-space: nowrap;
}
.admin-result-gallery {
display: flex;
min-width: 150px;
align-items: center;
flex-wrap: wrap;
gap: 5px;
}
.admin-result-gallery a,
.admin-result-gallery button {
display: block;
width: 42px;
height: 42px;
padding: 0;
overflow: hidden;
border: 1px solid #dce5e0;
border-radius: 8px;
background: #f4f7f5;
cursor: zoom-in;
}
.admin-result-gallery img {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
}
.admin-result-gallery > span {
color: #74817c;
font-size: 8px;
white-space: nowrap;
}
@media (max-width: 760px) {
.task-type-picker {
grid-template-columns: 1fr;
}
}
.sidebar {
position: fixed;
inset: 0 auto 0 0;
z-index: 50;
display: flex;
width: 232px;
flex-direction: column;
padding: 26px 16px 18px;
color: white;
background:
radial-gradient(circle at 20% 2%, rgb(64 129 106 / 0.17), transparent 24%),
var(--nav);
}
.brand-lockup {
display: flex;
align-items: center;
gap: 12px;
min-height: 46px;
padding: 0 10px;
}
.brand-symbol {
display: grid;
width: 38px;
height: 38px;
place-items: center;
border: 1px solid rgb(255 255 255 / 0.14);
border-radius: 12px;
background: linear-gradient(145deg, #2a9a74, #136149);
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.22);
font-size: 16px;
font-weight: 750;
}
.brand-lockup > div:last-child {
display: flex;
flex-direction: column;
}
.brand-lockup strong {
font-size: 14px;
letter-spacing: 0.12em;
}
.brand-lockup > div:last-child span {
margin-top: 3px;
color: #8fa29e;
font-size: 11px;
}
.main-nav {
margin-top: 32px;
}
.nav-caption {
margin: 0 12px 10px;
color: #667a75;
font-size: 10px;
font-weight: 650;
letter-spacing: 0.12em;
}
.nav-caption.second {
margin-top: 26px;
}
.main-nav button {
position: relative;
display: flex;
width: 100%;
height: 44px;
align-items: center;
gap: 12px;
margin: 2px 0;
padding: 0 12px;
border: 0;
border-radius: 10px;
color: var(--nav-muted);
background: transparent;
font-size: 13px;
text-align: left;
transition: 150ms ease;
}
.main-nav button:hover {
color: white;
background: rgb(255 255 255 / 0.045);
}
.main-nav button.active {
color: white;
background: linear-gradient(90deg, rgb(44 139 105 / 0.28), rgb(44 139 105 / 0.12));
}
.main-nav button.active::before {
position: absolute;
left: 0;
width: 2px;
height: 20px;
border-radius: 2px;
background: #4bc091;
content: "";
}
.nav-mark {
display: grid;
width: 20px;
height: 20px;
place-items: center;
color: #95a8a3;
font-size: 15px;
}
.main-nav button.active .nav-mark {
color: #5ec49d;
}
.nav-badge {
display: grid;
min-width: 21px;
height: 21px;
margin-left: auto;
place-items: center;
border-radius: 10px;
color: #fff;
background: #df744c;
font-size: 10px;
font-weight: 700;
}
.sidebar-summary {
display: flex;
align-items: center;
gap: 10px;
margin-top: auto;
padding: 14px 12px;
border: 1px solid rgb(255 255 255 / 0.065);
border-radius: 12px;
background: rgb(255 255 255 / 0.035);
}
.sidebar-summary > div:last-child,
.sidebar-user > div:nth-child(2) {
display: flex;
min-width: 0;
flex: 1;
flex-direction: column;
}
.sidebar-summary strong,
.sidebar-user strong {
font-size: 11px;
font-weight: 600;
}
.sidebar-summary span,
.sidebar-user span {
margin-top: 3px;
color: #71837f;
font-size: 10px;
}
.pulse-dot {
width: 8px;
height: 8px;
flex: 0 0 auto;
border: 2px solid #173d31;
border-radius: 50%;
background: #48bd8f;
box-shadow: 0 0 0 3px rgb(72 189 143 / 0.12);
}
.sidebar-user {
display: flex;
align-items: center;
gap: 10px;
margin-top: 12px;
padding: 10px 8px 0;
border-top: 1px solid rgb(255 255 255 / 0.06);
border-right: 0;
border-bottom: 0;
border-left: 0;
width: 100%;
color: inherit;
background: transparent;
text-align: left;
}
.sidebar-user:hover {
background: rgb(255 255 255 / 0.035);
}
.chevron {
color: #62736f !important;
font-size: 16px !important;
}
.avatar {
display: grid;
width: 34px;
height: 34px;
flex: 0 0 auto;
place-items: center;
border-radius: 10px;
color: #24423a;
background: #d7ebe3;
font-size: 12px;
font-weight: 720;
}
.avatar.small {
width: 30px;
height: 30px;
border-radius: 9px;
font-size: 11px;
}
.avatar.large {
width: 44px;
height: 44px;
border-radius: 12px;
}
.avatar.xlarge {
width: 48px;
height: 48px;
border-radius: 15px;
font-size: 15px;
}
.avatar.coral { color: #6c382a; background: #f5d9cb; }
.avatar.cyan { color: #24505a; background: #d6e9ec; }
.avatar.violet { color: #51436a; background: #e4dcf0; }
.avatar.amber { color: #674a1f; background: #f0e1c3; }
.avatar.mint { color: #235646; background: #cfe8dd; }
.main-area {
min-height: 100vh;
margin-left: 232px;
}
.topbar {
position: sticky;
top: 0;
z-index: 30;
display: flex;
height: 70px;
align-items: center;
justify-content: space-between;
padding: 0 32px;
border-bottom: 1px solid #e5e8e5;
background: rgb(249 250 247 / 0.88);
backdrop-filter: blur(18px);
}
.breadcrumb {
display: flex;
align-items: center;
gap: 10px;
color: #9aa39f;
font-size: 12px;
}
.breadcrumb i {
color: #c0c7c3;
font-style: normal;
}
.breadcrumb strong {
color: var(--ink-soft);
font-weight: 580;
}
.top-actions {
display: flex;
align-items: center;
gap: 10px;
}
.sync-state {
display: flex;
align-items: center;
gap: 7px;
margin-right: 6px;
color: #76817e;
font-size: 11px;
}
.sync-state i {
width: 7px;
height: 7px;
border-radius: 50%;
background: #32a875;
}
.primary-button,
.ghost-button,
.full-ghost-button {
display: inline-flex;
min-height: 38px;
align-items: center;
justify-content: center;
gap: 7px;
border-radius: 9px;
font-size: 12px;
font-weight: 620;
}
.primary-button {
padding: 0 15px;
border: 1px solid var(--green-deep);
color: white;
background: var(--green);
box-shadow: inset 0 1px 0 rgb(255 255 255 / 0.18);
}
.primary-button:hover {
background: var(--green-deep);
}
.primary-button.soft {
border-color: #b8dacd;
color: var(--green-deep);
background: #eff8f4;
box-shadow: none;
}
.primary-button.light {
border-color: white;
color: var(--green-deep);
background: white;
}
.ghost-button {
padding: 0 14px;
border: 1px solid #dce2de;
color: #53615d;
background: #fff;
}
.ghost-button:hover {
border-color: #bec9c4;
}
.full-ghost-button {
width: 100%;
border: 1px solid #e2e7e4;
color: #52615d;
background: #fafbf9;
}
.text-button {
padding: 3px 0;
border: 0;
color: var(--green-deep);
background: transparent;
font-size: 11px;
font-weight: 650;
}
.content-frame {
width: min(100%, 1500px);
margin: 0 auto;
padding: 32px 32px 56px;
}
.page-heading {
display: flex;
align-items: flex-end;
justify-content: space-between;
margin-bottom: 26px;
}
.eyebrow {
margin: 0 0 8px;
color: var(--green);
font-size: 10px;
font-weight: 720;
letter-spacing: 0.13em;
text-transform: uppercase;
}
.page-heading h1 {
margin: 0;
font-size: clamp(26px, 3vw, 34px);
font-weight: 690;
letter-spacing: -0.045em;
}
.page-heading > div > p:last-child {
margin: 8px 0 0;
color: var(--muted);
font-size: 13px;
}
.date-chip {
display: flex;
align-items: center;
gap: 10px;
color: #7b8682;
font-size: 11px;
}
.date-chip strong {
color: var(--ink);
font-size: 12px;
}
.stat-grid {
display: grid;
grid-template-columns: repeat(4, minmax(0, 1fr));
gap: 14px;
}
.stat-card {
position: relative;
min-height: 148px;
padding: 20px 20px 17px;
overflow: hidden;
border: 1px solid var(--line);
border-radius: 15px;
background: white;
box-shadow: 0 1px 2px rgb(18 31 28 / 0.02);
}
.stat-icon {
position: absolute;
top: 17px;
right: 17px;
display: grid;
width: 33px;
height: 33px;
place-items: center;
border-radius: 10px;
}
.stat-icon span {
width: 11px;
height: 11px;
border: 2px solid currentColor;
border-radius: 3px 8px 3px 8px;
transform: rotate(12deg);
}
.stat-icon.ink { color: #364944; background: #eef1ef; }
.stat-icon.green { color: var(--green); background: var(--green-soft); }
.stat-icon.blue { color: var(--blue); background: var(--blue-soft); }
.stat-icon.orange { color: var(--orange); background: var(--orange-soft); }
.stat-card > p {
margin: 0;
color: #6f7a77;
font-size: 11px;
}
.stat-value {
display: flex;
align-items: baseline;
gap: 5px;
margin-top: 17px;
}
.stat-value strong {
font-size: 30px;
font-weight: 670;
letter-spacing: -0.055em;
}
.stat-value span {
color: #9aa39f;
font-size: 10px;
}
.stat-card small {
display: block;
margin-top: 10px;
color: #98a19e;
font-size: 10px;
}
.overview-grid {
display: grid;
grid-template-columns: minmax(0, 1.7fr) minmax(290px, 0.8fr);
gap: 14px;
margin-top: 14px;
}
.panel {
border: 1px solid var(--line);
border-radius: 16px;
background: white;
box-shadow: 0 1px 2px rgb(18 31 28 / 0.02);
}
.workflow-panel,
.task-mini-panel,
.table-panel {
padding: 21px;
}
.panel-heading {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: 20px;
margin-bottom: 19px;
}
.panel-heading h2,
.task-hero h2,
.resource-intro h2,
.batch-submit-card h2 {
margin: 0;
font-size: 15px;
font-weight: 670;
letter-spacing: -0.02em;
}
.panel-heading p {
margin: 5px 0 0;
color: #929c98;
font-size: 10px;
}
.workflow-track {
display: grid;
grid-template-columns: auto 1fr auto 1fr auto 1fr auto;
align-items: center;
padding: 9px 0 20px;
}
.workflow-track > i {
height: 1px;
margin: 0 10px;
background: #e1e7e3;
}
.workflow-step {
display: flex;
align-items: center;
gap: 9px;
min-width: 0;
}
.workflow-step > span {
display: grid;
width: 30px;
height: 30px;
flex: 0 0 auto;
place-items: center;
border: 1px solid #dbe2de;
border-radius: 9px;
color: #9aa49f;
background: #fafbf9;
font-size: 9px;
font-weight: 700;
}
.workflow-step.done > span,
.workflow-step.active > span {
border-color: #abd1c2;
color: white;
background: var(--green);
}
.workflow-step > div {
display: flex;
flex-direction: column;
white-space: nowrap;
}
.workflow-step strong {
font-size: 11px;
}
.workflow-step small {
margin-top: 4px;
color: #99a29f;
font-size: 9px;
}
.focus-callout {
display: grid;
grid-template-columns: auto 1fr auto;
gap: 17px;
align-items: center;
padding: 17px 18px;
border: 1px solid #dcebe5;
border-radius: 13px;
background:
radial-gradient(circle at 90% 10%, rgb(47 157 117 / 0.08), transparent 28%),
#f6faf8;
}
.callout-ring {
display: grid;
width: 58px;
height: 58px;
place-items: center;
border: 4px solid #d8ede5;
border-top-color: var(--green);
border-radius: 50%;
}
.callout-ring strong,
.callout-ring span {
grid-area: 1 / 1;
}
.callout-ring strong {
margin-top: -10px;
font-size: 17px;
}
.callout-ring span {
margin-top: 20px;
color: #81908b;
font-size: 8px;
}
.focus-callout h3 {
margin: 0 0 5px;
font-size: 12px;
}
.focus-callout p:last-child {
margin: 0;
color: #7c8985;
font-size: 9px;
line-height: 1.55;
}
.task-mini-list {
display: flex;
flex-direction: column;
gap: 16px;
}
.task-mini-list article {
padding-bottom: 15px;
border-bottom: 1px solid #edf0ed;
}
.task-mini-list article:last-child {
border-bottom: 0;
}
.task-mini-top {
display: flex;
align-items: center;
gap: 9px;
}
.task-mini-top > div:nth-child(2) {
display: flex;
min-width: 0;
flex: 1;
flex-direction: column;
}
.task-mini-top strong {
overflow: hidden;
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.task-mini-top span {
margin-top: 3px;
color: #929c98;
font-size: 9px;
}
.task-mini-top b {
color: var(--green);
font-size: 10px;
}
.progress {
height: 4px;
overflow: hidden;
border-radius: 4px;
background: #edf0ed;
}
.progress span {
display: block;
height: 100%;
border-radius: 4px;
background: var(--green);
}
.task-mini-list .progress {
margin: 12px 0 8px 43px;
}
.task-mini-meta {
display: flex;
justify-content: space-between;
margin-left: 43px;
color: #9aa39f;
font-size: 8px;
}
.task-mini-panel .full-ghost-button {
margin-top: 5px;
}
.table-panel {
margin-top: 14px;
}
.table-scroll {
width: 100%;
overflow-x: auto;
}
.data-table {
width: 100%;
border-collapse: collapse;
table-layout: fixed;
}
.data-table th {
height: 38px;
padding: 0 12px;
border-bottom: 1px solid #e8ece9;
color: #97a09d;
background: #fafbf9;
font-size: 9px;
font-weight: 630;
text-align: left;
}
.data-table th:first-child {
width: 28%;
border-radius: 8px 0 0 8px;
}
.data-table th:last-child {
border-radius: 0 8px 8px 0;
}
.data-table td {
height: 66px;
padding: 10px 12px;
border-bottom: 1px solid #eef1ef;
font-size: 10px;
vertical-align: middle;
}
.data-table tbody tr:last-child td {
border-bottom: 0;
}
.data-table tbody tr:hover td {
background: #fbfcfa;
}
.content-cell,
.account-cell {
display: flex;
min-width: 0;
align-items: center;
gap: 10px;
}
.content-cell > div,
.account-cell > div:last-child {
display: flex;
min-width: 0;
flex-direction: column;
}
.content-cell strong,
.account-cell strong {
overflow: hidden;
font-size: 10px;
font-weight: 630;
text-overflow: ellipsis;
white-space: nowrap;
}
.content-cell span:last-child,
.account-cell span {
overflow: hidden;
margin-top: 4px;
color: #98a19e;
font-size: 8px;
text-overflow: ellipsis;
white-space: nowrap;
}
.content-id {
display: grid;
min-width: 28px;
height: 28px;
place-items: center;
border-radius: 8px;
color: #61716c;
background: #eef2ef;
font-size: 8px;
font-weight: 700;
}
.plain-strong {
font-size: 10px;
font-weight: 610;
}
.muted {
color: #a0a8a5;
font-size: 9px;
}
.date-value {
color: #5f6d69;
font-size: 9px;
}
.status-pill,
.metric-ready,
.metric-waiting {
display: inline-flex;
min-width: 51px;
height: 23px;
align-items: center;
justify-content: center;
border-radius: 12px;
font-size: 8px;
font-weight: 650;
}
.status-pill.claimed {
color: #a15f36;
background: #fff1e7;
}
.status-pill.published,
.status-pill.collecting,
.status-pill.active {
color: #2e7286;
background: #e9f3f6;
}
.status-pill.complete {
color: #277a5d;
background: #e6f3ee;
}
.metric-ready {
color: #277a5d;
background: #e9f5f0;
}
.metric-waiting {
color: #927038;
background: #faf1df;
}
.stack {
display: flex;
flex-direction: column;
gap: 14px;
}
.stack > .table-panel {
margin-top: 0;
}
.task-hero {
display: flex;
min-height: 170px;
align-items: center;
justify-content: space-between;
padding: 28px 32px;
overflow: hidden;
border-radius: 17px;
color: white;
background:
radial-gradient(circle at 82% 30%, rgb(83 194 151 / 0.21), transparent 30%),
linear-gradient(125deg, #162a26, #205843);
}
.task-hero h2 {
font-size: 23px;
}
.task-hero > div > p:last-child {
max-width: 540px;
margin: 10px 0 0;
color: #a9c2b9;
font-size: 11px;
line-height: 1.7;
}
.task-hero .eyebrow {
color: #73d1ac;
}
.task-list {
display: flex;
flex-direction: column;
}
.task-row {
display: grid;
grid-template-columns: auto minmax(220px, 1fr) 110px 82px 70px auto;
gap: 16px;
align-items: center;
min-height: 82px;
border-bottom: 1px solid #edf0ee;
}
.task-row:last-child {
border-bottom: 0;
}
.task-row-main > div:first-child {
display: flex;
align-items: baseline;
gap: 10px;
}
.task-row-main h3 {
margin: 0;
font-size: 12px;
}
.task-row-main > div:first-child span,
.task-date span {
color: #929b98;
font-size: 9px;
}
.task-row-main > small {
display: block;
margin-top: 4px;
color: #9aa39f;
font-size: 8px;
}
.task-row-main .progress {
margin-top: 9px;
}
.task-number,
.task-date {
display: flex;
flex-direction: column;
}
.task-number strong {
font-size: 16px;
}
.task-number span,
.task-date strong {
margin-top: 3px;
color: #7e8a86;
font-size: 9px;
}
.round-arrow {
display: grid;
width: 30px;
height: 30px;
place-items: center;
border: 1px solid #e0e5e2;
border-radius: 50%;
color: #71807b;
background: white;
}
.task-share-actions {
display: flex;
align-items: center;
gap: 7px;
}
.share-link-button {
height: 31px;
padding: 0 10px;
border: 1px solid #cfe1d9;
border-radius: 8px;
color: var(--green-deep);
background: #f2f8f5;
font-size: 8px;
font-weight: 650;
white-space: nowrap;
}
.share-link-button:hover {
border-color: #a9cebf;
background: #eaf5f0;
}
.inline-summary {
display: flex;
min-height: 76px;
align-items: center;
gap: 24px;
padding: 15px 21px;
border: 1px solid var(--line);
border-radius: 14px;
background: white;
}
.inline-summary > div:not(.summary-note) {
display: flex;
align-items: baseline;
gap: 10px;
}
.inline-summary span {
color: #8b9692;
font-size: 10px;
}
.inline-summary strong {
font-size: 23px;
}
.inline-summary > i {
width: 1px;
height: 28px;
background: #e5e9e6;
}
.summary-note {
display: flex;
align-items: center;
gap: 8px;
margin-left: auto;
padding: 9px 12px;
border-radius: 9px;
background: #f3f8f5;
}
.filter-chips {
display: flex;
gap: 4px;
padding: 3px;
border-radius: 9px;
background: #f3f5f3;
}
.filter-chips button {
height: 27px;
padding: 0 11px;
border: 0;
border-radius: 7px;
color: #89938f;
background: transparent;
font-size: 9px;
}
.filter-chips button.active {
color: #34443f;
background: white;
box-shadow: 0 1px 3px rgb(18 31 28 / 0.08);
}
.section-intro {
display: flex;
min-height: 92px;
align-items: center;
justify-content: space-between;
gap: 30px;
padding: 18px 22px;
border: 1px solid var(--line);
border-radius: 15px;
background: white;
}
.section-intro h2 {
margin: 0;
font-size: 18px;
letter-spacing: -0.03em;
}
.section-intro > p {
max-width: 510px;
margin: 0;
color: #84908c;
font-size: 10px;
line-height: 1.7;
text-align: right;
}
.task-scope-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 13px;
}
.task-scope-card {
padding: 19px;
border: 1px solid var(--line);
border-radius: 16px;
background: white;
box-shadow: 0 1px 2px rgb(18 31 28 / 0.02);
transition: 160ms ease;
}
.task-scope-card:hover {
transform: translateY(-1px);
border-color: #cfdbd6;
box-shadow: var(--shadow);
}
.task-scope-head {
display: grid;
grid-template-columns: auto 1fr auto;
gap: 11px;
align-items: center;
}
.task-scope-head h3 {
margin: 0;
font-size: 13px;
}
.task-scope-head > div:nth-child(2) > span {
display: block;
margin-top: 4px;
color: #929c98;
font-size: 9px;
}
.task-source-line {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-top: 16px;
padding: 10px 11px;
border-radius: 9px;
background: #f5f7f5;
font-size: 8px;
}
.task-source-line > span {
color: #9aa39f;
}
.task-source-line a,
.task-source-line strong {
overflow: hidden;
color: #4d6b61;
font-weight: 620;
text-overflow: ellipsis;
white-space: nowrap;
}
.task-scope-metrics {
display: grid;
grid-template-columns: repeat(3, 1fr);
margin-top: 16px;
padding: 14px 0;
border-block: 1px solid #eef1ef;
}
.task-scope-metrics > div {
display: flex;
flex-direction: column;
border-right: 1px solid #eef1ef;
text-align: center;
}
.task-scope-metrics > div:last-child {
border-right: 0;
}
.task-scope-metrics span {
color: #99a29f;
font-size: 8px;
}
.task-scope-metrics strong {
margin-top: 5px;
font-size: 17px;
letter-spacing: -0.03em;
}
.task-scope-progress {
margin-top: 13px;
}
.task-scope-open {
display: flex;
width: 100%;
height: 37px;
align-items: center;
justify-content: space-between;
margin-top: 15px;
padding: 0 12px;
border: 1px solid #dce5e1;
border-radius: 9px;
color: #345d50;
background: #fbfcfb;
font-size: 9px;
font-weight: 650;
}
.task-scope-open:hover {
border-color: #bcd5ca;
background: #f2f8f5;
}
.task-scope-open b {
font-size: 14px;
font-weight: 500;
}
.task-detail-header {
display: grid;
grid-template-columns: auto auto 1fr auto;
gap: 13px;
align-items: center;
min-height: 92px;
padding: 17px 20px;
border: 1px solid var(--line);
border-radius: 15px;
background: white;
}
.detail-back {
height: 31px;
padding: 0 10px;
border: 1px solid #e0e6e2;
border-radius: 8px;
color: #697671;
background: white;
font-size: 8px;
}
.task-detail-header p {
margin: 0 0 4px;
color: var(--green);
font-size: 8px;
font-weight: 700;
letter-spacing: 0.08em;
}
.task-detail-header h2 {
margin: 0;
font-size: 16px;
}
.task-detail-header > div:nth-child(3) > span {
display: block;
margin-top: 4px;
color: #8e9995;
font-size: 9px;
}
.task-detail-header > a {
padding: 8px 10px;
border-radius: 8px;
color: var(--green-deep);
background: var(--green-soft);
font-size: 8px;
font-weight: 650;
}
.resource-intro {
display: grid;
grid-template-columns: auto 1fr auto;
gap: 24px;
align-items: center;
min-height: 126px;
padding: 22px 26px;
border-radius: 16px;
color: white;
background: linear-gradient(120deg, #172924, #254d40);
}
.resource-figure {
display: flex;
min-width: 115px;
flex-direction: column;
padding-right: 24px;
border-right: 1px solid rgb(255 255 255 / 0.14);
}
.resource-figure strong {
font-size: 34px;
letter-spacing: -0.05em;
}
.resource-figure span {
color: #94b1a7;
font-size: 9px;
}
.resource-intro > div:nth-child(2) p {
max-width: 580px;
margin: 8px 0 0;
color: #9db5ad;
font-size: 10px;
line-height: 1.6;
}
.resource-rule {
display: flex;
flex-direction: column;
padding: 13px 16px;
border: 1px solid rgb(255 255 255 / 0.1);
border-radius: 11px;
background: rgb(255 255 255 / 0.05);
}
.resource-rule span {
color: #8aa59c;
font-size: 8px;
}
.resource-rule strong {
margin-top: 5px;
font-size: 11px;
}
.resource-heading-actions {
display: flex;
align-items: center;
justify-content: flex-end;
flex-wrap: wrap;
gap: 8px;
}
.resource-heading-actions > a {
text-decoration: none;
}
.resource-heading-actions .filter-chips {
margin-left: 4px;
}
.resource-toolbar {
display: flex;
align-items: center;
flex-wrap: wrap;
gap: 9px;
margin: -3px 0 18px;
padding: 13px;
border: 1px solid #e9eeeb;
border-radius: 12px;
background: #f8faf8;
}
.resource-search {
display: flex;
flex-direction: row;
min-width: 230px;
flex: 1 1 280px;
align-items: center;
gap: 8px;
margin: 0;
height: 38px;
padding: 0 12px;
border: 1px solid #dfe6e2;
border-radius: 9px;
background: white;
}
.resource-search:focus-within,
.resource-filter-search:focus-within {
border-color: #74b79f;
box-shadow: 0 0 0 3px rgb(31 143 107 / 0.08);
}
.resource-search > span,
.resource-filter-search > span {
color: #83918c;
font-size: 17px;
font-weight: 400;
}
.resource-search input,
.resource-filter-search input {
width: 100%;
height: 100%;
padding: 0;
border: 0;
outline: 0;
background: transparent;
font-size: 10px;
}
.resource-filter-search {
display: flex;
flex: 0 1 180px;
align-items: center;
gap: 7px;
height: 38px;
padding: 0 11px;
border: 1px solid #dfe6e2;
border-radius: 9px;
background: white;
}
.resource-clear-button {
height: 38px;
padding: 0 6px;
border: 0;
color: var(--green-deep);
background: transparent;
font-size: 9px;
font-weight: 650;
}
.resource-clear-button:disabled {
color: #a5aeaa;
}
.resource-toolbar-summary {
display: flex;
align-items: center;
gap: 12px;
margin-left: auto;
color: #8c9894;
font-size: 9px;
white-space: nowrap;
}
.resource-toolbar-summary b {
color: var(--ink);
font-size: 11px;
}
.resource-import-modal {
width: min(780px, calc(100vw - 32px));
max-height: min(86vh, 820px);
overflow-y: auto;
}
.import-guide-strip {
display: grid;
grid-template-columns: auto auto 1fr auto auto 1fr auto auto;
align-items: center;
gap: 9px;
margin-bottom: 18px;
padding: 12px 14px;
border-radius: 11px;
color: #687773;
background: #f4f8f5;
}
.import-guide-strip > span {
display: grid;
width: 24px;
height: 24px;
place-items: center;
border-radius: 8px;
color: var(--green-deep);
background: #dff0e9;
font-size: 10px;
font-weight: 750;
}
.import-guide-strip p {
margin: 0;
font-size: 10px;
white-space: nowrap;
}
.import-guide-strip i {
height: 1px;
background: #d5e0db;
}
.resource-import-dropzone {
position: relative;
display: flex;
min-height: 116px;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 7px;
border: 1px dashed #9dc9b9;
border-radius: 13px;
color: var(--green-deep);
background: #f8fcfa;
cursor: pointer;
}
.resource-import-dropzone:hover {
border-color: var(--green);
background: #f2faf6;
}
.resource-import-dropzone input {
position: absolute;
width: 1px;
height: 1px;
opacity: 0;
pointer-events: none;
}
.resource-import-dropzone strong {
max-width: 88%;
overflow: hidden;
font-size: 13px;
text-overflow: ellipsis;
white-space: nowrap;
}
.resource-import-dropzone span {
color: #8a9893;
font-size: 9px;
}
.import-template-note {
display: flex;
align-items: center;
justify-content: space-between;
gap: 18px;
margin-top: 12px;
padding: 12px 14px;
border: 1px solid #edf0ee;
border-radius: 11px;
}
.import-template-note > div {
display: flex;
flex-direction: column;
gap: 4px;
}
.import-template-note strong {
font-size: 10px;
}
.import-template-note span {
color: #8b9692;
font-size: 9px;
}
.import-template-note a {
flex: 0 0 auto;
text-decoration: none;
}
.resource-import-preview {
margin-top: 14px;
}
.import-summary-grid {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 8px;
}
.import-summary-grid > div {
display: flex;
min-height: 58px;
align-items: center;
justify-content: space-between;
padding: 0 14px;
border: 1px solid #e7ece9;
border-radius: 10px;
background: #fafbf9;
}
.import-summary-grid span {
color: #87938f;
font-size: 9px;
}
.import-summary-grid strong {
font-size: 19px;
}
.import-summary-grid .create strong { color: var(--green); }
.import-summary-grid .update strong { color: #4c7890; }
.import-summary-grid .error strong { color: #c86548; }
.import-preview-table {
margin-top: 12px;
overflow: hidden;
border: 1px solid #e8ece9;
border-radius: 11px;
}
.import-preview-row {
display: grid;
grid-template-columns: 48px 1.4fr 1fr 1.15fr 1.15fr;
min-height: 50px;
align-items: center;
border-top: 1px solid #edf0ee;
font-size: 9px;
}
.import-preview-row.head {
min-height: 36px;
border-top: 0;
color: #8c9793;
background: #f6f8f6;
font-weight: 650;
}
.import-preview-row > span {
min-width: 0;
padding: 8px 10px;
overflow-wrap: anywhere;
}
.import-preview-row > span:not(:last-child) {
border-right: 1px solid #f0f2f1;
}
.import-preview-row strong,
.import-preview-row small {
display: block;
}
.import-preview-row small {
margin-top: 3px;
color: #9aa39f;
font-size: 8px;
}
.import-preview-row em {
display: block;
margin-top: 3px;
color: #4a5575;
background: #eef1f6;
border-radius: 4px;
padding: 2px 6px;
font-size: 8px;
font-style: normal;
font-weight: 580;
}
.import-result {
color: #557269;
font-weight: 650;
}
.import-result.create { color: var(--green); }
.import-result.update { color: #47778d; }
.import-result.error { color: #bd644b; font-weight: 520; }
.import-preview-more {
margin: 8px 0 0;
color: #919c98;
font-size: 9px;
text-align: right;
}
.form-error {
margin-top: 12px;
padding: 10px 12px;
border: 1px solid #f0d5cc;
border-radius: 9px;
color: #a95037;
background: #fff7f3;
font-size: 10px;
}
.resource-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.resource-card {
padding: 18px;
border: 1px solid #e5e9e6;
border-radius: 14px;
background: #fff;
transition: 150ms ease;
}
.resource-card:hover {
transform: translateY(-1px);
box-shadow: var(--shadow);
}
.resource-card-head {
display: flex;
align-items: center;
gap: 11px;
}
.resource-card-head > div:nth-child(2) {
display: flex;
min-width: 0;
flex: 1;
flex-direction: column;
}
.resource-card-head h3 {
margin: 0;
overflow: hidden;
font-size: 12px;
text-overflow: ellipsis;
white-space: nowrap;
}
.resource-card-head span {
margin-top: 4px;
color: #8c9894;
font-size: 9px;
}
.verified-dot {
display: grid;
width: 19px;
height: 19px;
place-items: center;
border-radius: 50%;
color: #fff !important;
background: var(--green);
font-size: 9px !important;
}
.resource-account-id {
display: flex;
min-width: 0;
align-items: center;
gap: 9px;
margin-top: 14px;
padding: 9px 10px;
border-radius: 8px;
color: #77847f;
background: #f5f7f5;
}
.resource-account-id span {
flex: 0 0 auto;
font-size: 8px;
}
.resource-account-id strong {
min-width: 0;
overflow: hidden;
color: #40534d;
font-family: var(--font-geist-mono), monospace;
font-size: 9px;
font-weight: 600;
text-overflow: ellipsis;
user-select: all;
white-space: nowrap;
}
.resource-metrics {
display: grid;
grid-template-columns: repeat(2, 1fr);
margin-top: 12px;
padding: 13px 0;
border-block: 1px solid #eef1ef;
}
.resource-metrics > div {
display: flex;
flex-direction: column;
border-right: 1px solid #eef1ef;
text-align: center;
}
.resource-metrics > div:last-child {
border-right: 0;
}
.resource-metrics span,
.resource-source > span {
color: #9ba4a1;
font-size: 8px;
}
.resource-metrics strong {
margin-top: 4px;
font-size: 13px;
}
.resource-source {
margin-top: 13px;
}
.resource-source > div {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin-top: 8px;
}
.resource-source b {
padding: 5px 7px;
border-radius: 6px;
color: #567068;
background: #eef4f1;
font-size: 8px;
font-weight: 580;
}
.resource-source b.partner-managed {
color: #8b603c;
background: #fff3e8;
}
.resource-tags {
margin-top: 13px;
}
.resource-tags > span {
color: #9ba4a1;
font-size: 8px;
}
.resource-tags > div {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin-top: 8px;
}
.resource-tags b {
padding: 5px 7px;
border-radius: 6px;
color: #4a5575;
background: #eef1f6;
font-size: 8px;
font-weight: 580;
}
.resource-card-foot {
display: flex;
justify-content: space-between;
margin-top: 14px;
color: #9aa39f;
font-size: 8px;
}
.resource-card-foot a {
color: var(--green);
font-weight: 650;
}
.resource-empty {
display: flex;
min-height: 240px;
align-items: center;
justify-content: center;
flex-direction: column;
gap: 7px;
color: #939e9a;
text-align: center;
}
.resource-empty strong {
color: #354640;
font-size: 13px;
}
.resource-empty span {
margin-bottom: 8px;
font-size: 9px;
}
.recovery-legend {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 10px;
}
.recovery-legend > div {
display: grid;
grid-template-columns: auto 1fr;
gap: 3px 9px;
align-items: center;
padding: 13px 16px;
border: 1px solid var(--line);
border-radius: 12px;
background: white;
}
.recovery-legend strong {
font-size: 10px;
}
.recovery-legend small {
grid-column: 2;
color: #97a09d;
font-size: 8px;
}
.legend-dot {
grid-row: 1 / span 2;
width: 9px;
height: 9px;
border-radius: 50%;
}
.legend-dot.auto { background: #43a97f; }
.legend-dot.upload { background: #52889a; }
.legend-dot.fallback { background: #e8875d; }
.recovery-table {
table-layout: auto;
}
.recovery-table th:first-child {
min-width: 280px;
}
.recovery-table th:nth-child(2) {
min-width: 96px;
}
.recovery-table th,
.recovery-table td {
white-space: nowrap;
}
.recovery-sort-button {
display: inline-flex;
min-width: 100%;
align-items: center;
justify-content: flex-start;
gap: 4px;
padding: 8px 0;
border: 0;
color: inherit;
background: transparent;
font: inherit;
cursor: pointer;
}
.recovery-sort-button b {
color: #aab2af;
font-size: 11px;
line-height: 1;
}
.recovery-sort-button:hover,
.recovery-sort-button.active {
color: #168565;
}
.recovery-sort-button.active b {
color: #168565;
}
.recovery-sort-button:focus-visible {
border-radius: 4px;
outline: 2px solid rgba(22, 133, 101, 0.3);
outline-offset: 2px;
}
.recovery-content {
max-width: 360px;
}
.recovery-content > div:last-child {
min-width: 0;
}
.recovery-content strong {
max-width: 310px;
overflow: hidden;
text-overflow: ellipsis;
}
.recovery-title-link {
display: inline-flex;
align-items: center;
max-width: 310px;
color: #168565;
text-decoration: none;
vertical-align: top;
cursor: pointer;
}
.recovery-title-link strong {
min-width: 0;
}
.recovery-title-link:hover strong {
color: #116d54;
text-decoration: underline;
text-underline-offset: 3px;
}
.recovery-title-link:focus-visible {
border-radius: 4px;
outline: 2px solid rgba(43, 152, 117, 0.35);
outline-offset: 3px;
}
.recovery-content span {
color: #8d9894;
}
.metric-cell,
.creator-metrics {
display: flex;
flex-direction: column;
}
.metric-cell strong,
.creator-metrics strong {
font-size: 11px;
}
.metric-cell span,
.creator-metrics span {
margin-top: 3px;
color: #99a29f;
font-size: 8px;
}
.metric-cell.total strong {
color: var(--green-deep);
}
.metric-cell.update-time strong {
font-size: 9px;
font-weight: 650;
}
.metric-cell.publish-time strong {
color: #56645f;
font-size: 9px;
font-weight: 650;
}
.collection-status-cell {
display: flex;
max-width: 190px;
flex-direction: column;
align-items: flex-start;
gap: 5px;
}
.collection-status-cell small {
max-width: 180px;
overflow: hidden;
color: #98a19e;
font-size: 8px;
text-overflow: ellipsis;
}
.collection-status {
display: inline-flex;
min-height: 24px;
align-items: center;
padding: 0 9px;
border-radius: 999px;
color: #72807a;
background: #f0f3f1;
font-size: 8px;
font-weight: 700;
}
.collection-status.success {
color: #237859;
background: #e9f7f0;
}
.collection-status.scheduled,
.collection-status.collecting {
color: #34778c;
background: #eaf4f7;
}
.collection-status.failed {
color: #b85e3a;
background: #fff0e9;
}
.creator-data-summary {
display: flex;
flex-direction: column;
gap: 3px;
color: #8b9692;
font-size: 8px;
}
.creator-data-summary b {
font-weight: 650;
}
.creator-screenshot-cell {
display: flex;
min-width: 104px;
flex-direction: column;
align-items: flex-start;
gap: 6px;
}
.creator-screenshot-link {
position: relative;
width: 72px;
height: 56px;
padding: 0;
overflow: hidden;
border: 1px solid #dce5e0;
border-radius: 8px;
color: var(--green-deep);
background: #f4f7f5;
font-size: 8px;
font-weight: 700;
text-decoration: none;
cursor: zoom-in;
}
.creator-screenshot-link:hover {
border-color: #9fc9b8;
}
.creator-screenshot-link img {
width: 100%;
height: 100%;
display: block;
object-fit: cover;
}
.creator-screenshot-link span {
position: absolute;
right: 4px;
bottom: 4px;
padding: 3px 5px;
border-radius: 5px;
color: white;
background: rgb(17 48 39 / 0.76);
font-size: 7px;
}
.admin-image-lightbox {
position: fixed;
z-index: 2000;
inset: 0;
display: grid;
place-items: center;
padding: 22px;
background: rgb(7 24 19 / 0.78);
}
.admin-image-lightbox-card {
width: min(980px, 100%);
max-height: calc(100vh - 44px);
display: flex;
overflow: hidden;
border: 1px solid rgb(255 255 255 / 0.18);
border-radius: 16px;
background: #f7faf8;
box-shadow: 0 28px 90px rgb(0 0 0 / 0.34);
flex-direction: column;
}
.admin-image-lightbox-heading {
display: flex;
min-height: 52px;
align-items: center;
justify-content: space-between;
gap: 18px;
padding: 10px 16px;
border-bottom: 1px solid #dce5e0;
}
.admin-image-lightbox-heading > div {
display: flex;
min-width: 0;
align-items: center;
gap: 10px;
}
.admin-image-lightbox-heading strong {
overflow: hidden;
color: var(--green-deep);
font-size: 10px;
text-overflow: ellipsis;
white-space: nowrap;
}
.admin-image-lightbox-heading span {
flex: 0 0 auto;
padding: 3px 7px;
border-radius: 999px;
color: #5f746b;
background: #e9f1ed;
font-size: 8px;
font-weight: 700;
}
.admin-image-lightbox-heading button {
flex: 0 0 auto;
height: 32px;
padding: 0 13px;
border: 1px solid #c7d8d0;
border-radius: 8px;
color: var(--green-deep);
background: white;
font-size: 8px;
font-weight: 700;
}
.admin-image-lightbox-stage {
position: relative;
min-height: 0;
display: grid;
flex: 1;
place-items: center;
overflow: hidden;
background: #14231e;
}
.admin-image-lightbox-stage > img {
width: 100%;
height: 100%;
min-height: 0;
max-height: calc(100vh - 108px);
display: block;
object-fit: contain;
}
.admin-image-lightbox-stage > button {
position: absolute;
z-index: 1;
top: 50%;
min-width: 58px;
height: 36px;
padding: 0 10px;
border: 1px solid rgb(255 255 255 / 0.42);
border-radius: 999px;
color: white;
background: rgb(8 31 24 / 0.78);
box-shadow: 0 6px 20px rgb(0 0 0 / 0.24);
font-size: 9px;
font-weight: 700;
transform: translateY(-50%);
transition: background 160ms ease, transform 160ms ease;
}
.admin-image-lightbox-stage > button:hover,
.admin-image-lightbox-stage > button:focus-visible {
background: rgb(23 112 83 / 0.94);
transform: translateY(-50%) scale(1.03);
}
.admin-image-lightbox-stage > button.previous {
left: 14px;
}
.admin-image-lightbox-stage > button.next {
right: 14px;
}
@media (max-width: 640px) {
.admin-image-lightbox-stage > button {
min-width: 52px;
height: 32px;
padding: 0 8px;
font-size: 8px;
}
.admin-image-lightbox-stage > button.previous {
left: 8px;
}
.admin-image-lightbox-stage > button.next {
right: 8px;
}
}
.creator-screenshot-pending,
.creator-ocr-failed {
color: #9aa39f;
font-size: 8px;
}
.creator-ocr-failed {
color: #b85e3a;
}
.collect-button {
height: 27px;
padding: 0 9px;
border: 1px dashed #a8c9bb;
border-radius: 7px;
color: var(--green-deep);
background: #f7fbf9;
font-size: 8px;
}
.upload-button {
display: inline-flex;
height: 28px;
align-items: center;
padding: 0 9px;
border: 1px solid #dce3df;
border-radius: 7px;
color: #66746f;
background: white;
cursor: pointer;
font-size: 8px;
}
.upload-button.uploaded {
border-color: #b8d8cb;
color: #277a5d;
background: #eff8f4;
}
.upload-button.retry-upload {
height: 24px;
padding-inline: 7px;
color: #8a5a44;
background: #fff8f4;
}
.retry-failed-button {
display: inline-flex;
height: 34px;
align-items: center;
gap: 7px;
padding: 0 12px;
border: 1px solid #efc7b4;
border-radius: 8px;
color: #a95735;
background: #fff8f4;
font-size: 9px;
font-weight: 700;
}
.recovery-panel-actions {
display: flex;
align-items: center;
gap: 9px;
}
.export-data-button {
display: inline-flex;
height: 34px;
align-items: center;
padding: 0 13px;
border: 1px solid #a9cdbc;
border-radius: 8px;
color: var(--green-deep);
background: #f2faf6;
font-size: 9px;
font-weight: 700;
}
.export-data-button:disabled {
color: #94a29c;
background: #f5f7f6;
cursor: wait;
}
.retry-failed-button b {
display: grid;
min-width: 18px;
height: 18px;
place-items: center;
padding: 0 5px;
border-radius: 999px;
color: white;
background: #df7b50;
font-size: 8px;
}
.retry-failed-button:disabled {
border-color: #e4e8e6;
color: #a7afac;
background: #f6f7f6;
}
.collection-schedule-panel {
padding: 22px 24px;
}
.collection-schedule-heading {
display: flex;
align-items: flex-end;
justify-content: space-between;
gap: 24px;
}
.collection-schedule-heading h2 {
margin-top: 5px;
font-size: 20px;
}
.collection-schedule-heading > div > span {
display: block;
margin-top: 7px;
color: #87938f;
font-size: 9px;
}
.schedule-save-area {
display: flex;
flex: 0 0 auto;
align-items: center;
gap: 12px;
}
.schedule-save-area .primary-button {
height: 38px;
}
.schedule-grid {
display: grid;
grid-template-columns: 190px 1fr;
gap: 14px;
margin-top: 20px;
}
.schedule-start {
display: flex;
flex-direction: column;
justify-content: center;
gap: 9px;
padding: 14px;
border: 1px solid var(--line);
border-radius: 12px;
background: #fbfcfb;
}
.schedule-start span {
color: #65716d;
font-size: 9px;
font-weight: 700;
}
.schedule-start input {
width: 100%;
height: 42px;
padding: 0 12px;
border: 1px solid #d7dfdb;
border-radius: 9px;
color: var(--ink);
background: white;
font: inherit;
font-size: 11px;
}
.schedule-days {
display: grid;
grid-template-columns: repeat(7, minmax(78px, 1fr));
border: 1px solid var(--line);
border-radius: 12px;
overflow: hidden;
}
.schedule-days button {
display: grid;
min-height: 104px;
place-items: center;
align-content: center;
gap: 7px;
border: 0;
border-right: 1px solid var(--line);
color: #596762;
background: white;
}
.schedule-days button:last-child {
border-right: 0;
}
.schedule-days button:hover {
background: #f7fbf9;
}
.schedule-days button.selected {
color: var(--green-deep);
background: #eef8f3;
}
.schedule-days button span {
font-size: 10px;
font-weight: 700;
}
.schedule-days button b {
display: grid;
width: 24px;
height: 24px;
place-items: center;
border: 1px solid #d4dfda;
border-radius: 7px;
color: white;
background: white;
font-size: 13px;
}
.schedule-days button.selected b {
border-color: var(--green);
background: var(--green);
}
.schedule-days button small {
color: #89948f;
font-size: 8px;
}
.schedule-mobile-hint {
display: none;
}
.schedule-updated {
margin-top: 10px;
color: #9aa39f;
font-size: 8px;
text-align: right;
}
.upload-button input {
display: none;
}
.partner-layout {
display: grid;
grid-template-columns: 310px minmax(0, 1fr);
gap: 20px;
align-items: start;
}
.partner-phone {
position: sticky;
top: 94px;
min-height: 620px;
padding: 16px 14px 12px;
overflow: hidden;
border: 7px solid #1c2926;
border-radius: 28px;
background: #f2f4f1;
box-shadow: 0 20px 50px rgb(18 31 28 / 0.15);
}
.phone-top {
display: flex;
align-items: center;
gap: 9px;
padding: 8px 5px 17px;
}
.phone-top > div:nth-child(2) {
display: flex;
min-width: 0;
flex: 1;
flex-direction: column;
}
.phone-top strong {
font-size: 11px;
}
.phone-top span {
margin-top: 3px;
color: #8c9693;
font-size: 8px;
}
.phone-top button {
border: 0;
color: #78837f;
background: transparent;
}
.partner-card {
padding: 22px 17px 17px;
border-radius: 18px;
color: white;
background:
radial-gradient(circle at 90% 5%, rgb(98 218 171 / 0.22), transparent 28%),
linear-gradient(145deg, #18352d, #1e654d);
}
.micro-label {
display: inline-flex;
padding: 5px 8px;
border-radius: 12px;
color: #8ce3bd;
background: rgb(255 255 255 / 0.09);
font-size: 8px;
font-weight: 650;
}
.partner-card h2 {
margin: 15px 0 5px;
font-size: 19px;
letter-spacing: -0.035em;
}
.partner-card > p {
margin: 0;
color: #a1c0b5;
font-size: 9px;
}
.partner-task-stats {
display: grid;
grid-template-columns: 1fr 1fr;
margin: 19px 0;
padding: 13px 0;
border-block: 1px solid rgb(255 255 255 / 0.1);
}
.partner-task-stats div {
display: flex;
flex-direction: column;
text-align: center;
}
.partner-task-stats div:first-child {
border-right: 1px solid rgb(255 255 255 / 0.1);
}
.partner-task-stats strong {
font-size: 20px;
}
.partner-task-stats span {
margin-top: 3px;
color: #94b7aa;
font-size: 8px;
}
.quantity-picker {
display: grid;
grid-template-columns: 42px 1fr 42px;
align-items: center;
padding: 8px;
border-radius: 13px;
background: rgb(255 255 255 / 0.08);
}
.quantity-picker button {
display: grid;
width: 37px;
height: 37px;
place-items: center;
border: 1px solid rgb(255 255 255 / 0.12);
border-radius: 10px;
color: white;
background: rgb(255 255 255 / 0.06);
}
.quantity-picker div {
display: flex;
flex-direction: column;
text-align: center;
}
.quantity-picker strong {
font-size: 19px;
}
.quantity-picker span {
color: #97b7ac;
font-size: 7px;
}
.partner-primary {
width: 100%;
height: 43px;
margin-top: 14px;
border: 0;
border-radius: 11px;
color: #14553e;
background: #f4fff9;
font-size: 11px;
font-weight: 700;
}
.partner-card > small {
display: block;
margin-top: 9px;
color: #86aa9c;
font-size: 7px;
text-align: center;
}
.partner-bottom-nav {
position: absolute;
right: 14px;
bottom: 10px;
left: 14px;
display: grid;
grid-template-columns: repeat(3, 1fr);
height: 46px;
align-items: center;
border-radius: 14px;
background: white;
box-shadow: 0 7px 20px rgb(18 31 28 / 0.08);
color: #9aa39f;
font-size: 8px;
text-align: center;
}
.partner-bottom-nav .active {
color: var(--green);
font-weight: 700;
}
.partner-console {
display: flex;
flex-direction: column;
gap: 14px;
}
.partner-settings,
.batch-submit-card,
.simple-flow {
padding: 21px;
border: 1px solid var(--line);
border-radius: 16px;
background: white;
}
.form-grid {
display: grid;
gap: 12px;
}
.form-grid.two {
grid-template-columns: 1fr 1fr;
}
label {
display: flex;
flex-direction: column;
gap: 7px;
margin-bottom: 14px;
}
label > span {
color: #66736f;
font-size: 10px;
font-weight: 620;
}
input,
textarea,
select {
width: 100%;
border: 1px solid #dce2de;
border-radius: 9px;
outline: none;
background: white;
font-size: 11px;
}
input,
select {
height: 40px;
padding: 0 11px;
}
textarea {
min-height: 110px;
padding: 11px;
resize: vertical;
line-height: 1.7;
}
input:focus,
textarea:focus,
select:focus {
border-color: #70ad95;
box-shadow: 0 0 0 3px rgb(31 143 105 / 0.08);
}
label small {
color: #9aa39f;
font-size: 8px;
}
.partner-settings .form-grid {
margin-top: 15px;
}
.partner-settings label {
margin-bottom: 0;
}
.batch-head {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 17px;
}
.batch-head > div {
display: flex;
align-items: center;
gap: 12px;
}
.batch-head p {
margin: 5px 0 0;
color: #909b97;
font-size: 9px;
}
.step-number {
display: grid;
width: 36px;
height: 36px;
place-items: center;
border-radius: 11px;
color: var(--green);
background: var(--green-soft);
font-size: 10px;
font-weight: 750;
}
.pending-count {
padding: 7px 10px;
border-radius: 13px;
color: #ad643d;
background: var(--orange-soft);
font-size: 9px;
font-weight: 650;
}
.batch-submit-card textarea {
min-height: 210px;
border-style: dashed;
background: #fbfcfa;
}
.batch-foot {
display: flex;
align-items: center;
justify-content: space-between;
gap: 16px;
margin-top: 12px;
}
.batch-foot > div {
display: flex;
align-items: center;
gap: 7px;
color: #8c9894;
font-size: 8px;
}
.batch-foot > div span {
display: grid;
width: 18px;
height: 18px;
place-items: center;
border-radius: 50%;
color: var(--green);
background: var(--green-soft);
}
.simple-flow {
display: grid;
grid-template-columns: 1fr auto 1fr auto 1fr;
align-items: center;
}
.simple-flow div {
display: grid;
grid-template-columns: auto 1fr;
gap: 2px 9px;
align-items: center;
}
.simple-flow div > span {
display: grid;
grid-row: 1 / span 2;
width: 27px;
height: 27px;
place-items: center;
border-radius: 9px;
color: var(--green);
background: var(--green-soft);
font-size: 9px;
font-weight: 700;
}
.simple-flow strong {
font-size: 10px;
}
.simple-flow small {
color: #99a29f;
font-size: 8px;
}
.simple-flow > i {
width: 42px;
height: 1px;
margin: 0 12px;
background: #dfe5e1;
}
.modal-backdrop {
position: fixed;
inset: 0;
z-index: 100;
display: grid;
place-items: center;
padding: 20px;
background: rgb(11 20 18 / 0.54);
backdrop-filter: blur(5px);
}
.modal-card {
width: min(620px, 100%);
max-height: calc(100vh - 40px);
padding: 24px;
overflow-y: auto;
border-radius: 17px;
background: white;
box-shadow: 0 24px 80px rgb(9 19 16 / 0.24);
}
.modal-card.compact {
width: min(480px, 100%);
}
.modal-heading {
display: flex;
align-items: flex-start;
justify-content: space-between;
margin-bottom: 20px;
}
.modal-heading h2 {
margin: 0;
font-size: 20px;
letter-spacing: -0.035em;
}
.modal-heading > button {
display: grid;
width: 30px;
height: 30px;
place-items: center;
border: 0;
border-radius: 50%;
color: #7c8783;
background: #f1f3f1;
font-size: 18px;
}
.source-url-row {
display: grid;
grid-template-columns: 1fr auto;
gap: 9px;
}
.source-read-button {
min-width: 92px;
}
.source-preview {
margin: 2px 0 17px;
padding: 14px;
border: 1px solid #cfe2da;
border-radius: 12px;
background: #f6faf8;
}
.source-preview-head,
.source-preview-head > div {
display: flex;
align-items: center;
}
.source-preview-head {
justify-content: space-between;
gap: 14px;
}
.source-preview-head > div {
min-width: 0;
gap: 9px;
}
.source-preview-head > div > div {
display: flex;
min-width: 0;
flex-direction: column;
}
.source-check {
display: grid;
width: 24px;
height: 24px;
flex: 0 0 auto;
place-items: center;
border-radius: 50%;
color: white;
background: var(--green);
font-size: 10px;
}
.source-preview-head strong {
overflow: hidden;
font-size: 11px;
text-overflow: ellipsis;
white-space: nowrap;
}
.source-preview-head small {
margin-top: 3px;
color: #85928d;
font-size: 8px;
}
.source-preview-head b {
color: var(--green-deep);
font-size: 15px;
white-space: nowrap;
}
.source-columns {
display: flex;
flex-wrap: wrap;
gap: 5px;
margin-top: 12px;
}
.source-columns span {
padding: 4px 6px;
border-radius: 5px;
color: #64746e;
background: white;
font-size: 7px;
}
.source-samples {
display: flex;
flex-direction: column;
gap: 6px;
margin-top: 11px;
padding-top: 10px;
border-top: 1px solid #dfeae5;
}
.source-samples > div {
display: grid;
grid-template-columns: 20px 1fr;
gap: 8px;
align-items: center;
}
.source-samples span {
display: grid;
width: 20px;
height: 20px;
place-items: center;
border-radius: 6px;
color: #6d7d77;
background: #e7f0ec;
font-size: 7px;
}
.source-samples strong {
overflow: hidden;
color: #52625c;
font-size: 8px;
font-weight: 560;
text-overflow: ellipsis;
white-space: nowrap;
}
.modal-actions {
display: flex;
justify-content: flex-end;
gap: 9px;
margin-top: 8px;
}
.context-strip {
display: flex;
flex-direction: column;
gap: 4px;
margin-bottom: 18px;
padding: 12px 14px;
border-radius: 10px;
background: #f4f7f5;
}
.context-strip strong {
font-size: 11px;
}
.context-strip span {
color: #87928e;
font-size: 9px;
}
.user-management-layout {
display: grid;
grid-template-columns: 1fr;
gap: 16px;
min-width: 0;
}
.user-create-panel,
.user-list-panel {
align-self: start;
min-width: 0;
padding: 22px;
}
.user-create-form {
display: grid;
gap: 12px;
align-items: end;
margin-top: 18px;
}
.user-create-form.with-role {
grid-template-columns: minmax(190px, 1.15fr) minmax(190px, 1fr) minmax(150px, 0.72fr) 132px;
}
.user-create-form.without-role {
grid-template-columns: minmax(190px, 1fr) minmax(190px, 1fr) 132px;
}
.user-create-form label {
min-width: 0;
margin-bottom: 0;
}
.user-create-form .primary-button {
width: 100%;
height: 40px;
min-height: 40px;
}
.user-management-message {
margin: 14px 0 0;
padding: 10px 12px;
border-radius: 9px;
color: #27634f;
background: #edf7f2;
font-size: 10px;
}
.user-table {
width: 100%;
max-width: 100%;
margin-top: 16px;
border: 1px solid var(--line);
border-radius: 12px;
overflow: hidden;
}
.user-table-head,
.user-table-row {
display: grid;
grid-template-columns: minmax(160px, 1.4fr) minmax(100px, 0.7fr) minmax(110px, 0.75fr) minmax(180px, auto);
gap: 12px;
align-items: center;
padding: 14px 16px;
}
.user-table-head {
color: #899490;
background: #f5f7f5;
font-size: 9px;
}
.user-table-row {
border-top: 1px solid var(--line);
font-size: 10px;
}
.user-table-row:hover {
background: #fbfcfa;
}
.user-table-row > span:not(.role-pill) {
color: #84908c;
}
.role-pill {
width: fit-content;
padding: 5px 8px;
border-radius: 999px;
color: #53625d;
background: #edf1ee;
font-size: 8px;
font-weight: 650;
}
.role-pill.super_admin {
color: #7d5a14;
background: #fff4d9;
}
.role-pill.admin {
color: #22614b;
background: #e5f5ed;
}
.user-row-actions {
display: flex;
align-items: center;
justify-content: flex-end;
gap: 8px;
}
.user-action-button {
min-height: 30px;
padding: 0 10px;
border: 1px solid #dce5e1;
border-radius: 8px;
color: var(--green-deep);
background: white;
font-size: 9px;
font-weight: 650;
}
.user-action-button:hover {
border-color: #a8cbbd;
background: #f4faf7;
}
.user-action-button.danger {
border-color: #efd7d3;
color: #a8473b;
}
.user-action-button.danger:hover {
border-color: #dfb5ae;
background: #fff7f5;
}
.danger-button {
display: inline-flex;
min-height: 38px;
align-items: center;
justify-content: center;
padding: 0 15px;
border: 1px solid #a83f34;
border-radius: 9px;
color: white;
background: #b94d41;
font-size: 11px;
font-weight: 650;
}
.danger-button:hover {
background: #9f3e34;
}
.danger-button:disabled {
cursor: wait;
opacity: 0.62;
}
.eyebrow.danger {
color: #b04b40;
}
.eyebrow.warning {
color: #b06d24;
}
.release-distribution-button {
min-height: 30px;
padding: 0 11px;
border: 1px solid #efd9bd;
border-radius: 8px;
color: #95601f;
background: #fffaf2;
font-size: 9px;
font-weight: 650;
white-space: nowrap;
}
.release-distribution-button:hover {
border-color: #dfbd91;
background: #fff5e5;
}
.release-distribution-summary {
display: grid;
gap: 6px;
padding: 13px 14px;
border: 1px solid var(--line);
border-radius: 10px;
background: #f8faf8;
}
.release-distribution-summary strong {
color: var(--ink);
font-size: 11px;
line-height: 1.5;
}
.release-distribution-summary span {
color: #7d8985;
font-size: 9px;
}
.release-distribution-warning {
margin: 0;
padding: 13px 14px;
border: 1px solid #f1dfc8;
border-radius: 10px;
color: #805e35;
background: #fffaf3;
font-size: 10px;
line-height: 1.65;
}
.release-confirm-button {
display: inline-flex;
min-height: 38px;
align-items: center;
justify-content: center;
padding: 0 15px;
border: 1px solid #a56a26;
border-radius: 9px;
color: white;
background: #b9792f;
font-size: 11px;
font-weight: 650;
}
.release-confirm-button:hover {
background: #9d6425;
}
.release-confirm-button:disabled {
cursor: wait;
opacity: 0.62;
}
.user-delete-warning {
margin: 0;
padding: 13px 14px;
border: 1px solid #f0dedb;
border-radius: 10px;
color: #7f5049;
background: #fff8f6;
font-size: 10px;
line-height: 1.65;
}
.toast {
position: fixed;
right: 24px;
bottom: 24px;
z-index: 120;
display: flex;
min-height: 46px;
align-items: center;
gap: 10px;
padding: 0 16px;
border: 1px solid #d4e7df;
border-radius: 12px;
color: #2b4a40;
background: rgb(255 255 255 / 0.96);
box-shadow: 0 16px 45px rgb(18 31 28 / 0.16);
font-size: 11px;
font-weight: 580;
backdrop-filter: blur(12px);
}
.toast span {
display: grid;
width: 21px;
height: 21px;
place-items: center;
border-radius: 50%;
color: white;
background: var(--green);
font-size: 10px;
}
.working-bar {
position: fixed;
top: 0;
right: 0;
left: 232px;
z-index: 200;
height: 2px;
background: linear-gradient(90deg, transparent, #38b483, transparent);
background-size: 40% 100%;
animation: working 1.2s infinite linear;
}
@keyframes working {
from { background-position: -50% 0; }
to { background-position: 150% 0; }
}
.loading-layout {
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 14px;
}
.loading-card,
.loading-table {
min-height: 148px;
border-radius: 15px;
background: linear-gradient(100deg, #e9ece9 20%, #f5f6f4 40%, #e9ece9 60%);
background-size: 220% 100%;
animation: shimmer 1.4s infinite linear;
}
.loading-table {
grid-column: 1 / -1;
min-height: 330px;
}
@keyframes shimmer {
to { background-position-x: -220%; }
}
.empty-state,
.table-empty {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
min-height: 380px;
color: #87928e;
text-align: center;
}
.table-empty.compact {
min-height: 150px;
font-size: 10px;
}
.empty-icon {
display: grid;
width: 44px;
height: 44px;
place-items: center;
border-radius: 50%;
color: #ac603e;
background: var(--orange-soft);
font-weight: 800;
}
.empty-state h3 {
margin: 15px 0 5px;
color: var(--ink);
}
.empty-state p {
margin: 0 0 18px;
font-size: 11px;
}
.menu-button,
.sidebar-scrim {
display: none;
}
@media (max-width: 1180px) {
.stat-grid {
grid-template-columns: repeat(2, 1fr);
}
.overview-grid {
grid-template-columns: 1fr;
}
.resource-grid {
grid-template-columns: repeat(2, 1fr);
}
.resource-toolbar-summary {
width: 100%;
justify-content: flex-end;
}
.task-scope-grid {
grid-template-columns: 1fr;
}
.workflow-track {
overflow-x: auto;
}
.schedule-grid {
grid-template-columns: 1fr;
}
.user-create-form.with-role,
.user-create-form.without-role {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.user-create-form .primary-button {
align-self: end;
}
}
@media (max-width: 900px) {
.login-page {
grid-template-columns: 1fr;
padding: 20px;
}
.login-brand {
min-height: 260px;
}
.user-management-layout {
grid-template-columns: 1fr;
}
.sidebar {
transform: translateX(-100%);
transition: transform 180ms ease;
}
.sidebar.open {
transform: translateX(0);
}
.sidebar-scrim {
position: fixed;
inset: 0;
z-index: 40;
display: block;
border: 0;
background: rgb(8 16 14 / 0.44);
}
.main-area {
margin-left: 0;
}
.menu-button {
display: grid;
width: 34px;
height: 34px;
margin-right: 10px;
place-items: center;
border: 1px solid #dce2de;
border-radius: 9px;
background: white;
}
.topbar {
justify-content: flex-start;
padding: 0 20px;
}
.top-actions {
margin-left: auto;
}
.sync-state,
.top-actions .ghost-button {
display: none;
}
.content-frame {
padding: 26px 20px 50px;
}
.partner-layout {
grid-template-columns: 1fr;
}
.partner-phone {
position: relative;
top: 0;
width: min(100%, 330px);
margin: 0 auto;
}
.resource-intro {
grid-template-columns: auto 1fr;
}
.resource-rule {
display: none;
}
.working-bar {
left: 0;
}
}
@media (max-width: 680px) {
.login-page {
padding: 12px;
}
.login-brand {
min-height: 210px;
padding: 30px;
}
.login-brand h1 {
font-size: 40px;
}
.login-card {
padding: 28px 22px;
}
.user-table {
overflow-x: auto;
}
.user-table-head,
.user-table-row {
min-width: 660px;
}
.user-create-panel,
.user-list-panel {
padding: 18px;
}
.user-create-form.with-role,
.user-create-form.without-role {
grid-template-columns: 1fr;
}
.topbar {
height: 62px;
}
.breadcrumb span,
.breadcrumb i {
display: none;
}
.top-actions .primary-button {
min-width: 38px;
padding: 0 10px;
font-size: 0;
}
.top-actions .primary-button span {
font-size: 16px;
}
.content-frame {
padding-inline: 14px;
}
.page-heading {
align-items: flex-start;
}
.date-chip {
display: none;
}
.stat-grid,
.resource-grid,
.recovery-legend {
grid-template-columns: 1fr;
}
.resource-toolbar {
align-items: stretch;
}
.resource-search,
.resource-filter-search {
width: 100%;
flex-basis: 100%;
}
.resource-clear-button {
padding-inline: 4px;
text-align: left;
}
.resource-toolbar-summary {
justify-content: space-between;
}
.resource-heading-actions {
width: 100%;
justify-content: flex-start;
}
.resource-heading-actions .filter-chips {
width: 100%;
margin: 4px 0 0;
overflow-x: auto;
}
.import-guide-strip {
grid-template-columns: auto 1fr;
}
.import-guide-strip i {
display: none;
}
.import-summary-grid {
grid-template-columns: repeat(2, 1fr);
}
.import-preview-table {
overflow-x: auto;
}
.import-preview-row {
min-width: 620px;
}
.collection-schedule-panel {
padding: 18px;
}
.collection-schedule-heading {
align-items: flex-start;
flex-direction: column;
}
.schedule-save-area {
width: 100%;
justify-content: space-between;
}
.schedule-save-area .primary-button {
min-width: 138px;
}
.schedule-days {
grid-template-columns: repeat(7, minmax(76px, 1fr));
overflow-x: auto;
}
.schedule-mobile-hint {
display: block;
margin-top: -4px;
color: #97a19d;
font-size: 8px;
text-align: center;
}
.stat-card {
min-height: 130px;
}
.focus-callout {
grid-template-columns: auto 1fr;
}
.focus-callout .primary-button {
grid-column: 1 / -1;
width: 100%;
}
.workflow-track {
display: flex;
gap: 16px;
}
.workflow-track > i {
width: 24px;
flex: 0 0 auto;
}
.task-row {
grid-template-columns: auto 1fr auto;
padding: 12px 0;
}
.task-number,
.task-date,
.task-row > .status-pill {
display: none;
}
.task-hero {
align-items: flex-start;
flex-direction: column;
gap: 22px;
}
.inline-summary {
align-items: flex-start;
flex-wrap: wrap;
}
.summary-note {
width: 100%;
margin-left: 0;
}
.resource-intro {
grid-template-columns: 1fr;
}
.section-intro {
align-items: flex-start;
flex-direction: column;
gap: 10px;
}
.section-intro > p {
text-align: left;
}
.task-detail-header {
grid-template-columns: auto 1fr auto;
}
.task-detail-header .detail-back {
grid-column: 1 / -1;
justify-self: start;
}
.source-url-row {
grid-template-columns: 1fr;
}
.source-read-button {
width: 100%;
}
.resource-figure {
border-right: 0;
}
.form-grid.two {
grid-template-columns: 1fr;
}
.batch-head,
.batch-foot {
align-items: flex-start;
flex-direction: column;
}
.batch-foot .primary-button {
width: 100%;
}
.simple-flow {
grid-template-columns: 1fr;
gap: 14px;
}
.simple-flow > i {
width: 1px;
height: 18px;
margin-left: 13px;
}
.modal-card {
padding: 20px 17px;
}
}
@media (prefers-reduced-motion: reduce) {
*,
*::before,
*::after {
scroll-behavior: auto !important;
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
}
}