Files
image-prompt-studio/app/globals.css
2026-04-25 11:26:33 +08:00

927 lines
15 KiB
CSS

:root {
color-scheme: light;
font-family:
-apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text",
"Segoe UI", sans-serif;
--bg: #f5f5f7;
--bg-accent: #eef2f7;
--surface: #ffffff;
--surface-muted: #f7f8fb;
--surface-strong: #eef3fb;
--line-soft: rgba(15, 23, 42, 0.08);
--line-strong: rgba(15, 23, 42, 0.12);
--ink-0: #101114;
--ink-1: #30343b;
--ink-2: #69707d;
--accent: #0071e3;
--accent-soft: rgba(0, 113, 227, 0.1);
--success: #2eb872;
--danger: #d92d20;
--shadow-lg: 0 24px 56px rgba(15, 23, 42, 0.07);
--shadow-sm: 0 12px 28px rgba(15, 23, 42, 0.05);
background:
radial-gradient(
circle at top left,
rgba(0, 113, 227, 0.08),
transparent 25%
),
radial-gradient(
circle at top right,
rgba(255, 55, 95, 0.08),
transparent 24%
),
linear-gradient(180deg, #fafbfc 0%, #f4f5f7 100%);
}
* {
box-sizing: border-box;
}
html,
body {
min-height: 100%;
}
body {
margin: 0;
color: var(--ink-0);
background: transparent;
}
a {
color: inherit;
text-decoration: none;
}
button,
input,
textarea,
select {
font: inherit;
}
button {
cursor: pointer;
}
input,
textarea,
select {
width: 100%;
border-radius: 20px;
border: 1px solid var(--line-soft);
background: #fff;
color: var(--ink-0);
padding: 0.95rem 1rem;
outline: none;
transition:
border-color 140ms ease,
box-shadow 140ms ease,
transform 140ms ease;
}
input:focus,
textarea:focus,
select:focus {
border-color: rgba(0, 113, 227, 0.22);
box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.08);
}
textarea {
resize: vertical;
min-height: 240px;
}
.eyebrow,
.section-kicker,
.sidebar-label {
margin: 0;
color: var(--ink-2);
font-size: 0.78rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.login-page {
min-height: 100vh;
display: grid;
place-items: center;
padding: 32px 16px;
}
.login-panel,
.card,
.page-hero,
.dashboard-sidebar {
border-radius: 30px;
border: 1px solid var(--line-soft);
background: rgba(255, 255, 255, 0.92);
box-shadow: var(--shadow-lg);
}
.login-panel {
width: min(100%, 560px);
padding: 28px;
}
.login-form {
display: grid;
gap: 18px;
}
.login-copy h1 {
margin: 6px 0 10px;
font-size: clamp(2rem, 5vw, 3.2rem);
line-height: 0.96;
letter-spacing: -0.04em;
}
.login-copy p:last-child {
margin: 0;
color: var(--ink-2);
line-height: 1.6;
}
.field {
display: grid;
gap: 10px;
}
.field span {
color: var(--ink-1);
font-size: 0.95rem;
font-weight: 600;
}
.dashboard-shell {
width: min(1480px, calc(100% - 32px));
margin: 0 auto;
padding: 22px 0 40px;
display: grid;
grid-template-columns: 300px minmax(0, 1fr);
gap: 22px;
}
.dashboard-sidebar {
position: sticky;
top: 22px;
height: fit-content;
padding: 22px;
display: grid;
gap: 18px;
}
.brand-lockup {
display: flex;
align-items: center;
gap: 14px;
}
.brand-mark {
width: 18px;
height: 18px;
border-radius: 50%;
background: linear-gradient(135deg, #0a84ff 0%, #5ac8fa 46%, #ff375f 100%);
box-shadow: 0 10px 18px rgba(10, 132, 255, 0.18);
}
.brand-lockup h1,
.page-hero h2,
.section-heading h3 {
margin: 4px 0 0;
letter-spacing: -0.03em;
}
.brand-lockup h1 {
font-size: 1.16rem;
}
.sidebar-card {
padding: 18px;
border-radius: 24px;
background: var(--surface-muted);
border: 1px solid var(--line-soft);
}
.sidebar-card strong {
display: block;
margin-top: 8px;
}
.sidebar-copy {
margin: 10px 0 0;
color: var(--ink-2);
line-height: 1.55;
}
.sidebar-nav {
display: grid;
gap: 10px;
}
.sidebar-link {
display: grid;
gap: 4px;
padding: 14px 16px;
border-radius: 20px;
border: 1px solid transparent;
color: var(--ink-1);
background: transparent;
transition:
transform 140ms ease,
border-color 140ms ease,
background 140ms ease;
}
.sidebar-link:hover,
.sidebar-link-active {
background: var(--surface-muted);
border-color: var(--line-soft);
transform: translateY(-1px);
}
.sidebar-link strong {
font-size: 0.98rem;
}
.sidebar-link span {
color: var(--ink-2);
font-size: 0.88rem;
}
.sidebar-actions {
margin-top: 6px;
}
.dashboard-main {
display: grid;
gap: 22px;
}
.page-hero {
overflow: hidden;
display: grid;
grid-template-columns: minmax(0, 1.2fr) minmax(220px, 0.8fr);
gap: 20px;
padding: 26px;
}
.page-hero h2 {
font-size: clamp(2rem, 4vw, 3.2rem);
line-height: 0.96;
max-width: 12ch;
}
.hero-copy,
.block-copy {
margin: 12px 0 0;
color: var(--ink-1);
line-height: 1.65;
}
.hero-orbs {
position: relative;
min-height: 220px;
}
.hero-orb {
position: absolute;
border-radius: 50%;
}
.hero-orb-blue {
left: 16px;
top: 20px;
width: 160px;
height: 160px;
background: radial-gradient(
circle,
rgba(90, 200, 250, 0.9),
rgba(0, 113, 227, 0.06) 72%
);
}
.hero-orb-pink {
right: 18px;
bottom: 10px;
width: 180px;
height: 180px;
background: radial-gradient(
circle,
rgba(255, 55, 95, 0.38),
rgba(255, 55, 95, 0) 72%
);
}
.hero-orb-silver {
left: 78px;
top: 70px;
width: 158px;
height: 158px;
background: radial-gradient(
circle at 30% 30%,
rgba(255, 255, 255, 1),
rgba(220, 225, 232, 0.7) 56%,
rgba(255, 255, 255, 0.15) 100%
);
}
.page-content,
.studio-grid,
.admin-grid,
.history-grid,
.history-overview-grid,
.history-gallery-list {
display: grid;
gap: 22px;
}
.studio-grid {
grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.8fr);
}
.admin-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.history-overview-grid {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.card {
padding: 24px;
content-visibility: auto;
}
.composer-card {
display: grid;
gap: 18px;
}
.result-card,
.user-table-card {
grid-column: 1 / -1;
}
.section-heading {
display: flex;
justify-content: space-between;
gap: 16px;
align-items: flex-start;
margin-bottom: 18px;
}
.section-heading h3 {
font-size: 1.46rem;
}
.composer-card .section-heading {
margin-bottom: 0;
}
.subtle-pill,
.meta-pills span {
display: inline-flex;
align-items: center;
min-height: 34px;
padding: 0.45rem 0.85rem;
border-radius: 999px;
background: var(--accent-soft);
border: 1px solid rgba(0, 113, 227, 0.12);
color: #0b5cab;
font-size: 0.92rem;
}
.composer-meta,
.composer-actions {
display: flex;
justify-content: space-between;
gap: 14px;
align-items: center;
}
.composer-meta {
margin-top: 14px;
color: var(--ink-2);
}
.quick-prompt-list,
.meta-pills,
.form-grid {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.quick-prompt-list {
margin-top: 18px;
}
.form-grid {
display: grid;
grid-template-columns: repeat(2, minmax(0, 1fr));
margin-bottom: 14px;
}
.composer-actions {
margin-top: 20px;
}
.pwa-panel {
display: grid;
gap: 16px;
padding: 18px;
border-radius: 24px;
border: 1px solid rgba(0, 113, 227, 0.12);
background:
linear-gradient(180deg, rgba(255, 255, 255, 0.94) 0%, #f6f9fe 100%),
radial-gradient(circle at top right, rgba(90, 200, 250, 0.18), transparent 40%);
}
.pwa-panel h4 {
margin: 4px 0 0;
font-size: 1.16rem;
letter-spacing: -0.02em;
}
.pwa-panel .block-copy {
margin-top: 10px;
}
.pwa-status-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.pwa-status-card {
padding: 14px 16px;
border-radius: 20px;
border: 1px solid var(--line-soft);
background: rgba(255, 255, 255, 0.8);
}
.pwa-status-card span {
display: block;
color: var(--ink-2);
font-size: 0.8rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.pwa-status-card strong {
display: block;
margin-top: 8px;
color: var(--ink-0);
line-height: 1.45;
}
.pwa-actions {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.primary-button,
.ghost-button,
.ghost-chip {
min-height: 44px;
border-radius: 999px;
transition:
transform 140ms ease,
opacity 140ms ease,
background 140ms ease;
}
.primary-button {
border: none;
padding: 0.88rem 1.3rem;
background: linear-gradient(180deg, #1482f0 0%, #0071e3 100%);
color: #fff;
box-shadow: 0 14px 30px rgba(0, 113, 227, 0.2);
font-weight: 700;
}
.ghost-button,
.ghost-chip {
border: 1px solid var(--line-soft);
background: var(--surface-muted);
color: var(--ink-1);
}
.ghost-button {
padding: 0.82rem 1.1rem;
}
.ghost-chip {
padding: 0.8rem 1rem;
text-align: left;
}
.primary-button:hover,
.ghost-button:hover,
.ghost-chip:hover {
transform: translateY(-1px);
}
.primary-button:disabled,
.ghost-button:disabled {
opacity: 0.5;
cursor: not-allowed;
transform: none;
}
.muted {
color: var(--ink-2);
}
.progress-track {
margin-top: 18px;
height: 10px;
border-radius: 999px;
background: #e8ecf3;
overflow: hidden;
}
.progress-fill {
height: 100%;
border-radius: inherit;
background: linear-gradient(90deg, #5ac8fa 0%, #0071e3 100%);
transition: width 180ms linear;
}
.processing-list {
list-style: none;
margin: 20px 0 0;
padding: 0;
display: grid;
gap: 12px;
}
.processing-item {
display: flex;
align-items: center;
gap: 12px;
color: var(--ink-2);
}
.processing-item-done,
.processing-item-active {
color: var(--ink-1);
}
.step-dot {
width: 12px;
height: 12px;
border-radius: 50%;
border: 1px solid #c7d0dd;
background: #fff;
}
.processing-item-done .step-dot {
background: var(--success);
border-color: transparent;
}
.processing-item-active .step-dot {
background: var(--accent);
border-color: transparent;
box-shadow: 0 0 0 6px rgba(0, 113, 227, 0.1);
}
.image-frame {
overflow: hidden;
border-radius: 24px;
background: linear-gradient(180deg, #eff3f8 0%, #f7f9fb 100%);
}
.image-frame img {
display: block;
width: 100%;
height: auto;
aspect-ratio: 1 / 1;
object-fit: cover;
}
.result-stack {
display: grid;
gap: 16px;
}
.result-copy {
padding: 16px 18px;
border-radius: 22px;
background: var(--surface-muted);
border: 1px solid var(--line-soft);
}
.result-caption {
color: var(--ink-2);
font-size: 0.88rem;
}
.result-copy p {
margin: 8px 0 0;
color: var(--ink-1);
line-height: 1.65;
white-space: pre-wrap;
}
.result-placeholder {
min-height: 460px;
display: grid;
place-items: center;
text-align: center;
}
.placeholder-orb {
width: 160px;
height: 160px;
border-radius: 32px;
background:
radial-gradient(
circle at 30% 30%,
rgba(90, 200, 250, 0.95),
rgba(0, 113, 227, 0.06) 72%
),
linear-gradient(180deg, #ffffff 0%, #eef2f7 100%);
}
.result-placeholder h4 {
margin: 18px 0 10px;
font-size: 1.12rem;
}
.result-placeholder p {
margin: 0;
color: var(--ink-2);
max-width: 34ch;
line-height: 1.6;
}
.history-overview-card-muted {
background: linear-gradient(180deg, #fbfcfe 0%, #f6f8fb 100%);
}
.history-stat-grid {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 12px;
}
.history-stat-card,
.history-meta-list div {
padding: 16px;
border-radius: 22px;
border: 1px solid var(--line-soft);
background: var(--surface-muted);
}
.history-stat-card span,
.history-meta-list span {
display: block;
color: var(--ink-2);
font-size: 0.82rem;
font-weight: 700;
letter-spacing: 0.04em;
text-transform: uppercase;
}
.history-stat-card strong,
.history-meta-list strong {
display: block;
margin-top: 8px;
font-size: 1.08rem;
color: var(--ink-0);
line-height: 1.35;
}
.history-info-pills {
margin-top: 20px;
}
.history-empty-card {
min-height: 480px;
display: grid;
place-items: center;
text-align: center;
}
.history-empty-card h4 {
margin: 18px 0 10px;
font-size: 1.18rem;
}
.history-empty-card p {
margin: 0;
max-width: 34ch;
color: var(--ink-2);
line-height: 1.65;
}
.history-gallery-list {
grid-template-columns: repeat(auto-fit, minmax(320px, 1fr));
}
.history-card {
padding: 18px;
display: grid;
gap: 16px;
}
.history-card-media {
overflow: hidden;
border-radius: 24px;
aspect-ratio: 1 / 1;
background: linear-gradient(180deg, #eff3f8 0%, #f7f9fb 100%);
}
.history-card-media img {
display: block;
width: 100%;
height: 100%;
object-fit: cover;
}
.history-card-header {
display: flex;
justify-content: space-between;
gap: 14px;
align-items: flex-start;
}
.history-card-header h4 {
margin: 0;
font-size: 1.04rem;
line-height: 1.35;
word-break: break-word;
}
.history-card-header p {
margin: 8px 0 0;
}
.history-owner-pill {
white-space: nowrap;
}
.history-meta-pills {
gap: 8px;
}
.history-meta-list {
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
gap: 10px;
}
.history-disclosure {
padding: 16px 18px;
border-radius: 22px;
border: 1px solid var(--line-soft);
background: var(--surface-muted);
}
.history-disclosure summary {
cursor: pointer;
color: var(--ink-1);
font-weight: 700;
list-style: none;
}
.history-disclosure summary::-webkit-details-marker {
display: none;
}
.history-disclosure p {
margin: 12px 0 0;
color: var(--ink-1);
line-height: 1.68;
white-space: pre-wrap;
}
.history-actions {
display: flex;
gap: 12px;
}
.history-actions a {
flex: 1;
display: inline-flex;
align-items: center;
justify-content: center;
text-align: center;
}
.history-download-button {
display: inline-flex;
align-items: center;
}
.success-banner,
.error-banner {
padding: 14px 16px;
border-radius: 20px;
border: 1px solid var(--line-soft);
}
.success-banner {
background: rgba(46, 184, 114, 0.09);
color: #0c7b44;
}
.error-banner {
background: rgba(217, 45, 32, 0.08);
color: var(--danger);
}
.user-table {
display: grid;
gap: 12px;
}
.user-table-head,
.user-table-row {
display: grid;
grid-template-columns: 1.2fr 0.9fr 0.9fr 0.8fr 0.8fr 1fr 0.7fr;
gap: 12px;
align-items: center;
}
.user-table-head {
padding: 0 8px;
color: var(--ink-2);
font-size: 0.86rem;
}
.user-table-row {
padding: 12px;
border-radius: 22px;
background: var(--surface-muted);
border: 1px solid var(--line-soft);
}
.user-cell-name {
display: grid;
}
.user-cell-name strong {
font-size: 0.98rem;
}
.user-cell-name small {
color: var(--ink-2);
}
@media (max-width: 1180px) {
.dashboard-shell,
.studio-grid,
.admin-grid,
.history-overview-grid,
.page-hero {
grid-template-columns: 1fr;
}
.dashboard-sidebar {
position: static;
}
.page-hero h2 {
max-width: none;
}
}
@media (max-width: 880px) {
.dashboard-shell {
width: min(100% - 20px, 100%);
}
.section-heading,
.composer-meta,
.composer-actions,
.history-card-header,
.history-actions {
flex-direction: column;
align-items: flex-start;
}
.form-grid,
.pwa-status-grid,
.history-stat-grid,
.history-meta-list,
.user-table-head,
.user-table-row {
grid-template-columns: 1fr;
}
.user-table-head {
display: none;
}
.history-actions a {
width: 100%;
}
}