Render single value instead of tags when multiple is false Update inline-row CSS selectors to use direct child combinator
1483 lines
26 KiB
CSS
1483 lines
26 KiB
CSS
:root {
|
|
color-scheme: light;
|
|
--pokemon-yellow: #ffcb05;
|
|
--pokemon-yellow-soft: #ffe46b;
|
|
--pokemon-blue: #2a75bb;
|
|
--pokemon-blue-deep: #003a70;
|
|
--pokemon-red: #ee1515;
|
|
--pokemon-red-deep: #cc0000;
|
|
--pokeball-black: #202124;
|
|
--pokeball-white: #f7f8fb;
|
|
--bg: #f2f5fa;
|
|
--bg-alt: #eaf1fb;
|
|
--surface: #ffffff;
|
|
--surface-raised: #ffffff;
|
|
--surface-soft: #f8fafd;
|
|
--ink: #151923;
|
|
--ink-soft: #354052;
|
|
--muted: #687487;
|
|
--line: #d8deea;
|
|
--line-strong: #1f2a3b;
|
|
--focus: #0b63ce;
|
|
--success: #2eb872;
|
|
--warning: #ffb800;
|
|
--danger: #df2f2f;
|
|
--radius-card: 8px;
|
|
--radius-control: 8px;
|
|
--radius-small: 6px;
|
|
--shadow-control: 0 3px 0 var(--line-strong);
|
|
--shadow-soft: 0 8px 22px rgba(23, 35, 54, 0.09);
|
|
--shadow-raised: 0 14px 32px rgba(23, 35, 54, 0.13);
|
|
--container: 1240px;
|
|
--font-sans:
|
|
Inter, ui-sans-serif, -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Microsoft YaHei",
|
|
sans-serif;
|
|
--font-display: "Arial Rounded MT Bold", "Nunito", "Avenir Next Rounded", var(--font-sans);
|
|
|
|
color: var(--ink);
|
|
background: var(--bg);
|
|
font-family: var(--font-sans);
|
|
font-synthesis: none;
|
|
text-rendering: optimizeLegibility;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
html {
|
|
scroll-behavior: smooth;
|
|
scrollbar-gutter: stable;
|
|
}
|
|
|
|
@supports not (scrollbar-gutter: stable) {
|
|
html {
|
|
overflow-y: scroll;
|
|
}
|
|
}
|
|
|
|
body {
|
|
min-width: 320px;
|
|
margin: 0;
|
|
color: var(--ink);
|
|
background:
|
|
linear-gradient(90deg, rgba(42, 117, 187, 0.08) 1px, transparent 1px) 0 0 / 32px 32px,
|
|
linear-gradient(rgba(42, 117, 187, 0.08) 1px, transparent 1px) 0 0 / 32px 32px,
|
|
linear-gradient(180deg, var(--bg) 0%, var(--bg-alt) 100%);
|
|
}
|
|
|
|
a {
|
|
color: inherit;
|
|
text-decoration: none;
|
|
}
|
|
|
|
button,
|
|
input,
|
|
select,
|
|
textarea {
|
|
font: inherit;
|
|
}
|
|
|
|
button {
|
|
border: 0;
|
|
}
|
|
|
|
img,
|
|
svg {
|
|
display: block;
|
|
max-width: 100%;
|
|
}
|
|
|
|
:focus-visible {
|
|
outline: 3px solid var(--focus);
|
|
outline-offset: 3px;
|
|
}
|
|
|
|
.app-shell {
|
|
min-height: 100vh;
|
|
}
|
|
|
|
.container {
|
|
width: min(100%, var(--container));
|
|
margin: 0 auto;
|
|
padding: 0 24px;
|
|
}
|
|
|
|
.site-header {
|
|
position: sticky;
|
|
top: 0;
|
|
z-index: 50;
|
|
border-bottom: 1px solid rgba(31, 42, 59, 0.12);
|
|
background: color-mix(in srgb, var(--surface) 88%, transparent);
|
|
backdrop-filter: blur(18px);
|
|
}
|
|
|
|
.top-nav {
|
|
min-height: 70px;
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
gap: 22px;
|
|
}
|
|
|
|
.brand-lockup {
|
|
min-width: 216px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
}
|
|
|
|
.pokemon-word {
|
|
display: inline-block;
|
|
color: var(--pokemon-yellow);
|
|
font-family: var(--font-display);
|
|
font-size: 28px;
|
|
font-weight: 900;
|
|
line-height: 0.9;
|
|
-webkit-text-stroke: 2px var(--pokemon-blue-deep);
|
|
text-shadow: 2px 3px 0 var(--pokemon-blue);
|
|
}
|
|
|
|
.brand-subtitle {
|
|
display: block;
|
|
margin-top: 2px;
|
|
color: var(--muted);
|
|
font-size: 12px;
|
|
font-weight: 800;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.nav-links {
|
|
display: flex;
|
|
justify-content: center;
|
|
gap: 4px;
|
|
overflow-x: auto;
|
|
}
|
|
|
|
.nav-links a {
|
|
min-height: 38px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
padding: 8px 10px;
|
|
border-radius: var(--radius-control);
|
|
color: var(--ink-soft);
|
|
font-size: 14px;
|
|
font-weight: 850;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.nav-links a:hover {
|
|
background: rgba(255, 203, 5, 0.24);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.nav-links a.router-link-active {
|
|
background: var(--pokemon-blue);
|
|
color: #ffffff;
|
|
}
|
|
|
|
.auth-actions {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: flex-end;
|
|
gap: 8px;
|
|
}
|
|
|
|
.auth-user {
|
|
max-width: 180px;
|
|
overflow: hidden;
|
|
color: var(--ink-soft);
|
|
font-size: 14px;
|
|
font-weight: 850;
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.page {
|
|
position: relative;
|
|
--page-padding-x: 24px;
|
|
width: min(100%, var(--container));
|
|
margin: 0 auto;
|
|
padding: 30px var(--page-padding-x) 58px;
|
|
}
|
|
|
|
.page-stack {
|
|
position: relative;
|
|
display: grid;
|
|
gap: 18px;
|
|
}
|
|
|
|
.page-header {
|
|
display: flex;
|
|
align-items: end;
|
|
justify-content: space-between;
|
|
gap: 16px;
|
|
}
|
|
|
|
.page-header__copy {
|
|
display: grid;
|
|
gap: 8px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.page-header__actions {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
gap: 8px;
|
|
}
|
|
|
|
.page-kicker {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 8px;
|
|
width: fit-content;
|
|
color: var(--pokemon-blue);
|
|
font-size: 13px;
|
|
font-weight: 900;
|
|
text-transform: uppercase;
|
|
}
|
|
|
|
.page-kicker::before {
|
|
content: "";
|
|
width: 18px;
|
|
height: 18px;
|
|
border: 3px solid var(--line-strong);
|
|
border-radius: 50%;
|
|
background:
|
|
linear-gradient(to bottom, var(--pokemon-red) 0 44%, var(--line-strong) 44% 56%, var(--surface) 56% 100%);
|
|
}
|
|
|
|
.page-title {
|
|
margin: 0;
|
|
color: var(--ink);
|
|
font-family: var(--font-display);
|
|
font-size: 42px;
|
|
font-weight: 950;
|
|
line-height: 1.08;
|
|
}
|
|
|
|
.page-subtitle {
|
|
margin: 0;
|
|
color: var(--ink-soft);
|
|
}
|
|
|
|
.pokeball-mark {
|
|
position: relative;
|
|
width: var(--ball-size, 34px);
|
|
height: var(--ball-size, 34px);
|
|
display: inline-block;
|
|
flex: 0 0 auto;
|
|
border: calc(var(--ball-size, 34px) * 0.07) solid var(--pokeball-black);
|
|
border-radius: 50%;
|
|
background:
|
|
linear-gradient(
|
|
to bottom,
|
|
var(--pokemon-red) 0 45%,
|
|
var(--pokeball-black) 45% 55%,
|
|
var(--pokeball-white) 55% 100%
|
|
);
|
|
box-shadow: inset 0 4px 0 rgba(255, 255, 255, 0.45), 0 3px 0 rgba(0, 0, 0, 0.18);
|
|
}
|
|
|
|
.pokeball-mark::after {
|
|
content: "";
|
|
position: absolute;
|
|
inset: 50% auto auto 50%;
|
|
width: calc(var(--ball-size, 34px) * 0.34);
|
|
height: calc(var(--ball-size, 34px) * 0.34);
|
|
transform: translate(-50%, -50%);
|
|
border: calc(var(--ball-size, 34px) * 0.055) solid var(--pokeball-black);
|
|
border-radius: 50%;
|
|
background: var(--pokeball-white);
|
|
box-shadow: inset 0 0 0 calc(var(--ball-size, 34px) * 0.055) #dfe5ef;
|
|
}
|
|
|
|
.ui-button,
|
|
.primary-button,
|
|
.link-button,
|
|
.plain-button,
|
|
.row-actions button,
|
|
.inline-row > button,
|
|
.appearance-row__delete {
|
|
--btn-bg: var(--surface);
|
|
--btn-fg: var(--ink);
|
|
--btn-border: var(--line-strong);
|
|
min-height: 42px;
|
|
width: fit-content;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 8px;
|
|
padding: 9px 13px;
|
|
border: 2px solid var(--btn-border);
|
|
border-radius: var(--radius-control);
|
|
background: var(--btn-bg);
|
|
color: var(--btn-fg);
|
|
box-shadow: var(--shadow-control);
|
|
font-weight: 900;
|
|
line-height: 1.1;
|
|
cursor: pointer;
|
|
transition:
|
|
transform 0.14s ease,
|
|
box-shadow 0.14s ease,
|
|
background 0.14s ease,
|
|
border-color 0.14s ease;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.ui-button:hover,
|
|
.primary-button:hover,
|
|
.link-button:hover,
|
|
.plain-button:hover,
|
|
.row-actions button:hover,
|
|
.inline-row > button:hover,
|
|
.appearance-row__delete:hover {
|
|
transform: translateY(-2px);
|
|
box-shadow: 0 5px 0 var(--line-strong);
|
|
}
|
|
|
|
.ui-button:active,
|
|
.primary-button:active,
|
|
.link-button:active,
|
|
.plain-button:active,
|
|
.row-actions button:active,
|
|
.inline-row > button:active,
|
|
.appearance-row__delete:active {
|
|
transform: translateY(2px);
|
|
box-shadow: 0 1px 0 var(--line-strong);
|
|
}
|
|
|
|
.ui-button--primary,
|
|
.primary-button {
|
|
--btn-bg: var(--pokemon-yellow);
|
|
--btn-fg: #172036;
|
|
}
|
|
|
|
.ui-button--blue,
|
|
.link-button {
|
|
--btn-bg: var(--pokemon-blue);
|
|
--btn-fg: #ffffff;
|
|
}
|
|
|
|
.ui-button--red {
|
|
--btn-bg: var(--pokemon-red);
|
|
--btn-fg: #ffffff;
|
|
}
|
|
|
|
.ui-button--ghost,
|
|
.plain-button,
|
|
.row-actions button,
|
|
.inline-row > button,
|
|
.appearance-row__delete {
|
|
--btn-bg: var(--surface);
|
|
--btn-border: var(--line);
|
|
box-shadow: none;
|
|
}
|
|
|
|
.ui-button--small {
|
|
min-height: 36px;
|
|
padding: 7px 10px;
|
|
font-size: 14px;
|
|
box-shadow: 0 2px 0 var(--line-strong);
|
|
}
|
|
|
|
button:disabled,
|
|
.ui-button:disabled,
|
|
.primary-button:disabled,
|
|
.link-button:disabled,
|
|
.plain-button:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.54;
|
|
transform: none;
|
|
box-shadow: 0 2px 0 var(--line);
|
|
}
|
|
|
|
.filter-panel,
|
|
.toolbar {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
|
|
gap: 14px;
|
|
padding: 16px;
|
|
border: 2px solid var(--line-strong);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface);
|
|
box-shadow: var(--shadow-control);
|
|
}
|
|
|
|
.field {
|
|
display: grid;
|
|
gap: 7px;
|
|
align-content: start;
|
|
}
|
|
|
|
.field label,
|
|
.field-label {
|
|
color: var(--ink-soft);
|
|
font-size: 14px;
|
|
font-weight: 850;
|
|
}
|
|
|
|
.field input,
|
|
.field select,
|
|
.tags-select__search {
|
|
width: 100%;
|
|
min-height: 44px;
|
|
padding: 10px 12px;
|
|
border: 2px solid var(--line);
|
|
border-radius: var(--radius-control);
|
|
background: var(--surface);
|
|
color: var(--ink);
|
|
transition:
|
|
border-color 0.14s ease,
|
|
box-shadow 0.14s ease;
|
|
}
|
|
|
|
.field input:focus,
|
|
.field select:focus,
|
|
.tags-select__search:focus {
|
|
border-color: var(--pokemon-blue);
|
|
box-shadow: 0 0 0 4px rgba(42, 117, 187, 0.16);
|
|
outline: none;
|
|
}
|
|
|
|
.tags-select {
|
|
position: relative;
|
|
width: 100%;
|
|
min-width: 0;
|
|
}
|
|
|
|
.tags-select__trigger {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
width: 100%;
|
|
min-height: 44px;
|
|
padding: 7px 10px;
|
|
border: 2px solid var(--line);
|
|
border-radius: var(--radius-control);
|
|
background: var(--surface);
|
|
color: var(--ink);
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.tags-select__trigger.open {
|
|
border-color: var(--pokemon-blue);
|
|
box-shadow: 0 0 0 4px rgba(42, 117, 187, 0.16);
|
|
}
|
|
|
|
.tags-select__selected {
|
|
display: flex;
|
|
flex: 1 1 auto;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.tags-select--single .tags-select__trigger {
|
|
padding: 10px 12px;
|
|
}
|
|
|
|
.tags-select--single .tags-select__selected {
|
|
align-items: center;
|
|
}
|
|
|
|
.tags-select__single-value {
|
|
display: block;
|
|
min-width: 0;
|
|
overflow: hidden;
|
|
color: var(--ink);
|
|
text-overflow: ellipsis;
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.tags-select__tag {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
gap: 6px;
|
|
min-height: 28px;
|
|
padding: 4px 8px;
|
|
border: 1px solid rgba(42, 117, 187, 0.28);
|
|
border-radius: 999px;
|
|
background: rgba(42, 117, 187, 0.1);
|
|
color: var(--pokemon-blue-deep);
|
|
font-size: 13px;
|
|
font-weight: 850;
|
|
}
|
|
|
|
.tags-select__remove {
|
|
min-width: 18px;
|
|
min-height: 18px;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
border-radius: 999px;
|
|
color: var(--ink-soft);
|
|
cursor: pointer;
|
|
}
|
|
|
|
.tags-select__remove:hover {
|
|
background: rgba(42, 117, 187, 0.14);
|
|
}
|
|
|
|
.tags-select__placeholder {
|
|
color: var(--muted);
|
|
}
|
|
|
|
.tags-select__arrow {
|
|
flex: 0 0 auto;
|
|
color: var(--muted);
|
|
font-size: 18px;
|
|
line-height: 1;
|
|
}
|
|
|
|
.tags-select__dropdown {
|
|
position: absolute;
|
|
top: calc(100% + 6px);
|
|
left: 0;
|
|
z-index: 40;
|
|
display: grid;
|
|
gap: 8px;
|
|
width: 100%;
|
|
min-width: 240px;
|
|
padding: 8px;
|
|
border: 2px solid var(--line-strong);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface);
|
|
box-shadow: var(--shadow-raised);
|
|
}
|
|
|
|
.tags-select__options {
|
|
display: grid;
|
|
max-height: 240px;
|
|
overflow: auto;
|
|
}
|
|
|
|
.tags-select__option {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 8px;
|
|
width: 100%;
|
|
min-height: 40px;
|
|
padding: 8px 10px;
|
|
border: 0;
|
|
border-radius: var(--radius-small);
|
|
background: transparent;
|
|
color: var(--ink);
|
|
text-align: left;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.tags-select__option:hover,
|
|
.tags-select__option.active,
|
|
.tags-select__option.selected {
|
|
background: rgba(255, 203, 5, 0.22);
|
|
color: var(--pokemon-blue-deep);
|
|
}
|
|
|
|
.tags-select__option.active {
|
|
box-shadow: inset 0 0 0 2px rgba(42, 117, 187, 0.2);
|
|
}
|
|
|
|
.tags-select__option.selected {
|
|
font-weight: 850;
|
|
}
|
|
|
|
.tags-select__create {
|
|
border-top: 1px solid var(--line);
|
|
border-radius: 0;
|
|
color: var(--pokemon-blue);
|
|
font-weight: 850;
|
|
}
|
|
|
|
.tags-select__option:disabled {
|
|
cursor: not-allowed;
|
|
opacity: 0.45;
|
|
}
|
|
|
|
.tags-select__state {
|
|
flex: 0 0 auto;
|
|
color: var(--pokemon-blue);
|
|
font-size: 12px;
|
|
font-weight: 850;
|
|
}
|
|
|
|
.tags-select__empty {
|
|
margin: 0;
|
|
padding: 8px 10px;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
}
|
|
|
|
.segmented {
|
|
display: inline-flex;
|
|
flex-wrap: wrap;
|
|
width: fit-content;
|
|
gap: 4px;
|
|
padding: 4px;
|
|
border: 2px solid var(--line);
|
|
border-radius: var(--radius-control);
|
|
background: var(--surface-soft);
|
|
}
|
|
|
|
.segmented button {
|
|
min-width: 52px;
|
|
min-height: 34px;
|
|
padding: 6px 10px;
|
|
border-radius: var(--radius-small);
|
|
background: transparent;
|
|
color: var(--ink-soft);
|
|
font-weight: 850;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.segmented button.active {
|
|
background: var(--pokemon-blue);
|
|
color: #ffffff;
|
|
}
|
|
|
|
.tabs {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 8px;
|
|
}
|
|
|
|
.tabs > button {
|
|
min-height: 42px;
|
|
padding: 9px 13px;
|
|
border: 2px solid var(--line);
|
|
border-radius: var(--radius-control);
|
|
background: var(--surface);
|
|
color: var(--ink-soft);
|
|
font-weight: 900;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.tabs > button.active {
|
|
border-color: var(--line-strong);
|
|
background: var(--pokemon-yellow);
|
|
color: #172036;
|
|
box-shadow: 0 2px 0 var(--line-strong);
|
|
}
|
|
|
|
.tabs--component {
|
|
display: grid;
|
|
gap: 14px;
|
|
}
|
|
|
|
.tab-list {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
border-bottom: 2px solid var(--line);
|
|
}
|
|
|
|
.tab-button {
|
|
min-height: 42px;
|
|
padding: 9px 13px;
|
|
border-bottom: 3px solid transparent;
|
|
border-radius: var(--radius-control) var(--radius-control) 0 0;
|
|
background: transparent;
|
|
color: var(--ink-soft);
|
|
font-weight: 900;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.tab-button[aria-selected="true"] {
|
|
border-color: var(--pokemon-yellow);
|
|
background: var(--surface);
|
|
color: var(--pokemon-blue-deep);
|
|
}
|
|
|
|
.skeleton {
|
|
display: grid;
|
|
gap: 10px;
|
|
}
|
|
|
|
.skeleton-line,
|
|
.skeleton-box {
|
|
display: block;
|
|
background: linear-gradient(90deg, var(--line), var(--surface), var(--line));
|
|
background-size: 200% 100%;
|
|
animation: shimmer 1.4s linear infinite;
|
|
}
|
|
|
|
.skeleton-line {
|
|
height: 14px;
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.skeleton-box {
|
|
height: 128px;
|
|
border-radius: var(--radius-card);
|
|
}
|
|
|
|
.tab-list--skeleton {
|
|
padding-bottom: 0;
|
|
}
|
|
|
|
.skeleton-tab {
|
|
border-radius: var(--radius-control) var(--radius-control) 0 0;
|
|
}
|
|
|
|
.filter-panel--skeleton {
|
|
pointer-events: none;
|
|
}
|
|
|
|
.entity-card--skeleton {
|
|
pointer-events: none;
|
|
}
|
|
|
|
.skeleton-entity-mark {
|
|
border-radius: var(--radius-control);
|
|
box-shadow: 0 3px 0 var(--line);
|
|
}
|
|
|
|
.skeleton-chip-row {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
}
|
|
|
|
.skeleton-chip {
|
|
height: 28px;
|
|
}
|
|
|
|
.page-header--skeleton {
|
|
pointer-events: none;
|
|
}
|
|
|
|
.skeleton-detail-section {
|
|
pointer-events: none;
|
|
}
|
|
|
|
.skeleton-detail-section .detail-section__body {
|
|
gap: 14px;
|
|
}
|
|
|
|
.skeleton-row-list li {
|
|
min-height: 43px;
|
|
}
|
|
|
|
.skeleton-appearance-row {
|
|
display: grid;
|
|
grid-template-columns: max-content minmax(0, 1fr);
|
|
gap: 12px;
|
|
}
|
|
|
|
.skeleton-summary {
|
|
display: grid;
|
|
gap: 6px;
|
|
width: 100%;
|
|
}
|
|
|
|
.skeleton-summary div {
|
|
display: grid;
|
|
grid-template-columns: 72px minmax(0, 1fr);
|
|
gap: 8px;
|
|
}
|
|
|
|
.skeleton-form-stack {
|
|
display: grid;
|
|
gap: 14px;
|
|
}
|
|
|
|
.skeleton-auth-state {
|
|
display: grid;
|
|
gap: 12px;
|
|
}
|
|
|
|
@keyframes shimmer {
|
|
to {
|
|
background-position: -200% 0;
|
|
}
|
|
}
|
|
|
|
.entity-grid,
|
|
.grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
|
|
gap: 16px;
|
|
}
|
|
|
|
.entity-card {
|
|
min-height: 164px;
|
|
display: grid;
|
|
grid-template-columns: auto minmax(0, 1fr);
|
|
gap: 12px;
|
|
padding: 16px;
|
|
border: 2px solid var(--line-strong);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface);
|
|
box-shadow: var(--shadow-control);
|
|
color: var(--ink);
|
|
}
|
|
|
|
.entity-card--link {
|
|
transition:
|
|
transform 0.16s ease,
|
|
box-shadow 0.16s ease,
|
|
border-color 0.16s ease;
|
|
}
|
|
|
|
.entity-card--link:hover {
|
|
transform: translateY(-2px);
|
|
border-color: var(--pokemon-blue);
|
|
box-shadow: 0 5px 0 var(--line-strong);
|
|
}
|
|
|
|
.entity-card__mark {
|
|
width: 42px;
|
|
height: 42px;
|
|
display: inline-grid;
|
|
place-items: center;
|
|
border: 2px solid var(--line-strong);
|
|
border-radius: var(--radius-control);
|
|
background: var(--pokemon-yellow);
|
|
box-shadow: 0 3px 0 var(--line-strong);
|
|
color: #172036;
|
|
font-family: var(--font-display);
|
|
font-weight: 950;
|
|
}
|
|
|
|
.entity-card__content {
|
|
display: grid;
|
|
align-content: start;
|
|
gap: 10px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.entity-card__title {
|
|
color: var(--ink);
|
|
font-family: var(--font-display);
|
|
font-size: 21px;
|
|
font-weight: 950;
|
|
line-height: 1.12;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.entity-card__subtitle,
|
|
.meta-line {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.edit-meta {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
font-size: 13px;
|
|
font-weight: 750;
|
|
}
|
|
|
|
.config-flag {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
min-height: 24px;
|
|
margin-left: 8px;
|
|
padding: 3px 7px;
|
|
border: 1px solid rgba(42, 117, 187, 0.24);
|
|
border-radius: var(--radius-small);
|
|
background: var(--surface-soft);
|
|
color: var(--pokemon-blue-deep);
|
|
font-size: 12px;
|
|
font-weight: 850;
|
|
}
|
|
|
|
.chips {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 6px;
|
|
}
|
|
|
|
.chip {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
min-height: 28px;
|
|
padding: 4px 8px;
|
|
border: 1px solid rgba(42, 117, 187, 0.28);
|
|
border-radius: 999px;
|
|
background: rgba(42, 117, 187, 0.1);
|
|
color: var(--pokemon-blue-deep);
|
|
font-size: 13px;
|
|
font-weight: 800;
|
|
}
|
|
|
|
.detail-grid {
|
|
display: grid;
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
gap: 16px;
|
|
}
|
|
|
|
.detail-section {
|
|
display: grid;
|
|
gap: 12px;
|
|
padding: 18px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface);
|
|
box-shadow: var(--shadow-soft);
|
|
}
|
|
|
|
.detail-section__header,
|
|
.detail-section > h2 {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
}
|
|
|
|
.detail-section h2 {
|
|
margin: 0;
|
|
color: var(--ink);
|
|
font-family: var(--font-display);
|
|
font-size: 21px;
|
|
font-weight: 950;
|
|
line-height: 1.12;
|
|
}
|
|
|
|
.section-subtitle {
|
|
margin: 0;
|
|
color: var(--ink-soft);
|
|
font-size: 16px;
|
|
font-weight: 900;
|
|
}
|
|
|
|
.detail-section__body {
|
|
display: grid;
|
|
gap: 12px;
|
|
}
|
|
|
|
.detail-section a:not(.ui-button) {
|
|
color: var(--pokemon-blue-deep);
|
|
font-weight: 850;
|
|
}
|
|
|
|
.row-list {
|
|
display: grid;
|
|
gap: 0;
|
|
margin: 0;
|
|
padding: 0;
|
|
list-style: none;
|
|
}
|
|
|
|
.row-list li {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 12px;
|
|
padding: 11px 0;
|
|
border-bottom: 1px solid var(--line);
|
|
}
|
|
|
|
.row-list li:last-child {
|
|
border-bottom: 0;
|
|
}
|
|
|
|
.skill-drop-summary li {
|
|
align-items: flex-start;
|
|
}
|
|
|
|
.skill-drop-summary .chips {
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.appearance-list li {
|
|
display: grid;
|
|
grid-template-columns: max-content minmax(0, 1fr);
|
|
align-items: start;
|
|
justify-content: stretch;
|
|
}
|
|
|
|
.appearance-name {
|
|
white-space: nowrap;
|
|
}
|
|
|
|
.appearance-summary {
|
|
display: grid;
|
|
gap: 4px;
|
|
width: 100%;
|
|
margin: 0;
|
|
color: var(--muted);
|
|
text-align: left;
|
|
}
|
|
|
|
.appearance-summary div {
|
|
display: grid;
|
|
grid-template-columns: 72px minmax(0, 1fr);
|
|
gap: 8px;
|
|
}
|
|
|
|
.appearance-summary dt,
|
|
.appearance-summary dd {
|
|
margin: 0;
|
|
}
|
|
|
|
.appearance-summary dt {
|
|
color: var(--ink-soft);
|
|
font-weight: 850;
|
|
}
|
|
|
|
.status-message {
|
|
position: absolute;
|
|
right: 0;
|
|
left: 0;
|
|
z-index: 80;
|
|
display: flex;
|
|
align-items: start;
|
|
gap: 10px;
|
|
width: auto;
|
|
margin: 0;
|
|
padding: 14px;
|
|
border: 1px solid var(--status-line, var(--line));
|
|
border-left: 6px solid var(--status-accent, var(--pokemon-blue));
|
|
border-radius: var(--radius-card);
|
|
background: var(--status-bg, var(--surface));
|
|
box-shadow: var(--shadow-raised);
|
|
color: var(--ink-soft);
|
|
font-weight: 800;
|
|
pointer-events: none;
|
|
opacity: 1;
|
|
transform: translateY(0);
|
|
visibility: visible;
|
|
transition:
|
|
opacity 0.18s ease,
|
|
transform 0.18s ease,
|
|
visibility 0.18s ease;
|
|
}
|
|
|
|
.page > .status-message {
|
|
right: var(--page-padding-x);
|
|
left: var(--page-padding-x);
|
|
}
|
|
|
|
.status-message--hidden {
|
|
opacity: 0;
|
|
transform: translateY(-6px);
|
|
visibility: hidden;
|
|
}
|
|
|
|
.status-message::before {
|
|
content: "";
|
|
width: 12px;
|
|
height: 12px;
|
|
flex: 0 0 auto;
|
|
margin-top: 6px;
|
|
border-radius: 50%;
|
|
background: var(--status-accent, var(--pokemon-blue));
|
|
}
|
|
|
|
.status-message--success {
|
|
--status-accent: var(--success);
|
|
--status-line: color-mix(in srgb, var(--success) 38%, var(--line));
|
|
--status-bg: color-mix(in srgb, var(--success) 10%, var(--surface));
|
|
}
|
|
|
|
.status-message--warning {
|
|
--status-accent: var(--warning);
|
|
--status-line: color-mix(in srgb, var(--warning) 42%, var(--line));
|
|
--status-bg: color-mix(in srgb, var(--warning) 12%, var(--surface));
|
|
}
|
|
|
|
.status-message--danger {
|
|
--status-accent: var(--danger);
|
|
--status-line: color-mix(in srgb, var(--danger) 38%, var(--line));
|
|
--status-bg: color-mix(in srgb, var(--danger) 10%, var(--surface));
|
|
}
|
|
|
|
.status {
|
|
margin: 0;
|
|
padding: 14px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface);
|
|
color: var(--muted);
|
|
}
|
|
|
|
.auth-page {
|
|
display: grid;
|
|
justify-items: center;
|
|
padding: 24px 0;
|
|
}
|
|
|
|
.auth-panel {
|
|
position: relative;
|
|
width: min(480px, 100%);
|
|
display: grid;
|
|
gap: 18px;
|
|
padding: 22px;
|
|
border: 2px solid var(--line-strong);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface);
|
|
box-shadow: var(--shadow-control);
|
|
}
|
|
|
|
.auth-panel .page-header {
|
|
display: block;
|
|
}
|
|
|
|
.auth-panel .page-title {
|
|
font-size: 34px;
|
|
}
|
|
|
|
.auth-form {
|
|
position: relative;
|
|
display: grid;
|
|
gap: 14px;
|
|
}
|
|
|
|
.auth-switch {
|
|
margin: 0;
|
|
color: var(--muted);
|
|
}
|
|
|
|
.auth-switch a {
|
|
color: var(--pokemon-blue-deep);
|
|
font-weight: 900;
|
|
}
|
|
|
|
.auth-message {
|
|
margin: 0;
|
|
padding: 10px 12px;
|
|
border: 1px solid color-mix(in srgb, var(--success) 38%, var(--line));
|
|
border-radius: var(--radius-card);
|
|
background: color-mix(in srgb, var(--success) 10%, var(--surface));
|
|
color: var(--ink-soft);
|
|
font-weight: 800;
|
|
}
|
|
|
|
.auth-message.error {
|
|
border-color: color-mix(in srgb, var(--danger) 38%, var(--line));
|
|
background: color-mix(in srgb, var(--danger) 10%, var(--surface));
|
|
}
|
|
|
|
.admin-layout {
|
|
display: grid;
|
|
grid-template-columns: minmax(320px, 420px) minmax(0, 1fr);
|
|
gap: 16px;
|
|
align-items: start;
|
|
}
|
|
|
|
.form-actions,
|
|
.row-actions,
|
|
.check-row,
|
|
.inline-row,
|
|
.appearance-row {
|
|
display: flex;
|
|
gap: 8px;
|
|
}
|
|
|
|
.form-actions,
|
|
.check-row {
|
|
flex-wrap: wrap;
|
|
align-items: center;
|
|
}
|
|
|
|
.row-actions {
|
|
flex: 0 0 auto;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
}
|
|
|
|
.row-actions button,
|
|
.inline-row > button,
|
|
.appearance-row__delete {
|
|
min-height: 34px;
|
|
padding: 6px 10px;
|
|
font-size: 14px;
|
|
}
|
|
|
|
.inline-row {
|
|
align-items: center;
|
|
}
|
|
|
|
.inline-row > .tags-select {
|
|
flex: 1 1 180px;
|
|
min-width: 0;
|
|
}
|
|
|
|
.inline-row > select {
|
|
flex: 1;
|
|
}
|
|
|
|
.inline-row > input {
|
|
width: 90px;
|
|
}
|
|
|
|
.skill-drop-list {
|
|
display: grid;
|
|
gap: 10px;
|
|
}
|
|
|
|
.skill-drop-row {
|
|
display: grid;
|
|
gap: 8px;
|
|
padding: 12px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface-soft);
|
|
}
|
|
|
|
.skill-drop-row label {
|
|
margin: 0;
|
|
}
|
|
|
|
.check-row label {
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 7px;
|
|
min-height: 36px;
|
|
color: var(--ink-soft);
|
|
font-weight: 850;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.check-row input {
|
|
width: 18px;
|
|
height: 18px;
|
|
accent-color: var(--pokemon-blue);
|
|
}
|
|
|
|
.appearance-row {
|
|
display: grid;
|
|
grid-template-columns: 1fr;
|
|
gap: 12px;
|
|
padding: 12px;
|
|
border: 1px solid var(--line);
|
|
border-radius: var(--radius-card);
|
|
background: var(--surface-soft);
|
|
}
|
|
|
|
.appearance-row__rarity input {
|
|
min-width: 64px;
|
|
}
|
|
|
|
.appearance-row__main {
|
|
display: grid;
|
|
grid-template-columns: minmax(260px, 1.2fr) minmax(240px, 1fr) minmax(180px, 0.9fr) 82px max-content;
|
|
gap: 12px;
|
|
align-items: start;
|
|
}
|
|
|
|
.appearance-row__pokemon,
|
|
.appearance-row__maps,
|
|
.appearance-row__rarity,
|
|
.appearance-row__main .switch-group {
|
|
min-width: 0;
|
|
width: 100%;
|
|
}
|
|
|
|
.appearance-row__rarity input {
|
|
width: 100%;
|
|
}
|
|
|
|
.appearance-row__delete {
|
|
align-self: end;
|
|
justify-self: end;
|
|
min-height: 32px;
|
|
padding: 5px 9px;
|
|
font-size: 13px;
|
|
}
|
|
|
|
.appearance-row .tags-select,
|
|
.appearance-row .tags-select__trigger {
|
|
width: 100%;
|
|
}
|
|
|
|
.switch-group {
|
|
min-width: 0;
|
|
min-inline-size: 0;
|
|
display: grid;
|
|
gap: 7px;
|
|
margin: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
}
|
|
|
|
.switch-group legend {
|
|
padding: 0;
|
|
color: var(--ink-soft);
|
|
font-size: 14px;
|
|
font-weight: 850;
|
|
}
|
|
|
|
.switch-group__options {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
gap: 8px 12px;
|
|
align-items: center;
|
|
}
|
|
|
|
.switch-control {
|
|
position: relative;
|
|
display: inline-flex;
|
|
align-items: center;
|
|
gap: 9px;
|
|
min-height: 44px;
|
|
color: var(--ink-soft);
|
|
font-weight: 850;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
}
|
|
|
|
.switch-control--stacked {
|
|
min-width: 62px;
|
|
align-items: center;
|
|
flex-direction: column;
|
|
gap: 6px;
|
|
}
|
|
|
|
.switch-control__label {
|
|
color: var(--ink-soft);
|
|
font-size: 13px;
|
|
line-height: 1.2;
|
|
text-align: center;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
.switch-control input {
|
|
position: absolute;
|
|
inline-size: 1px;
|
|
block-size: 1px;
|
|
min-width: 0;
|
|
margin: 0;
|
|
opacity: 0;
|
|
}
|
|
|
|
.switch-track {
|
|
position: relative;
|
|
width: 48px;
|
|
height: 28px;
|
|
flex: 0 0 auto;
|
|
border: 2px solid var(--line-strong);
|
|
border-radius: 999px;
|
|
background: var(--line);
|
|
transition: background 0.16s ease;
|
|
}
|
|
|
|
.switch-track::after {
|
|
content: "";
|
|
position: absolute;
|
|
top: 2px;
|
|
left: 2px;
|
|
width: 20px;
|
|
height: 20px;
|
|
border-radius: 50%;
|
|
background: var(--surface);
|
|
box-shadow: 0 2px 0 rgba(0, 0, 0, 0.2);
|
|
transition: transform 0.16s ease;
|
|
}
|
|
|
|
.switch-control input:focus-visible + .switch-track {
|
|
box-shadow: 0 0 0 4px rgba(42, 117, 187, 0.16);
|
|
}
|
|
|
|
.switch-control input:checked + .switch-track {
|
|
background: var(--pokemon-blue);
|
|
}
|
|
|
|
.switch-control input:checked + .switch-track::after {
|
|
transform: translateX(20px);
|
|
}
|
|
|
|
@media (max-width: 900px) {
|
|
.top-nav {
|
|
grid-template-columns: 1fr;
|
|
gap: 12px;
|
|
padding-top: 14px;
|
|
padding-bottom: 14px;
|
|
}
|
|
|
|
.brand-lockup,
|
|
.auth-actions,
|
|
.nav-links {
|
|
justify-content: flex-start;
|
|
min-width: 0;
|
|
}
|
|
|
|
.nav-links {
|
|
width: 100%;
|
|
}
|
|
|
|
.auth-actions {
|
|
flex-wrap: wrap;
|
|
}
|
|
|
|
.page-header {
|
|
align-items: start;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.page-header__actions {
|
|
justify-content: flex-start;
|
|
}
|
|
|
|
.detail-grid,
|
|
.admin-layout {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.appearance-row__main {
|
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
}
|
|
}
|
|
|
|
@media (max-width: 640px) {
|
|
.container,
|
|
.page {
|
|
--page-padding-x: 16px;
|
|
padding-right: var(--page-padding-x);
|
|
padding-left: var(--page-padding-x);
|
|
}
|
|
|
|
.page {
|
|
padding-top: 22px;
|
|
padding-bottom: 44px;
|
|
}
|
|
|
|
.page-title {
|
|
font-size: 32px;
|
|
}
|
|
|
|
.pokemon-word {
|
|
font-size: 25px;
|
|
}
|
|
|
|
.filter-panel,
|
|
.toolbar,
|
|
.entity-grid,
|
|
.grid {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.entity-card {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.appearance-list li {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
|
|
.appearance-summary div {
|
|
grid-template-columns: 68px minmax(0, 1fr);
|
|
}
|
|
|
|
.inline-row {
|
|
align-items: stretch;
|
|
flex-direction: column;
|
|
}
|
|
|
|
.inline-row > input,
|
|
.inline-row > .tags-select {
|
|
width: 100%;
|
|
}
|
|
|
|
.appearance-row__main {
|
|
grid-template-columns: 1fr;
|
|
}
|
|
}
|