Files
invyone/notes/gbpark/2026-05-20-numbering-admin-variants-v2/numbering-v2.css
T
DDD1542 6b17c1fadf
Build & Deploy to K8s / build-and-deploy (push) Failing after 8m6s
chore: commit remaining workspace updates
Include the outstanding numbering-rule admin page changes, TabBar interaction updates, V5 layout theme accent styling, and auto-generation option compatibility fix.

Add the local web-prototype skill assets, numbering-rule design variants, control IDE refactor note, and the table canonical cleanup plan/prompts used across phases B through F.

This commit captures the remaining workspace files after the canonical table cleanup commit so the branch can be pushed without leaving local dirty work behind.
2026-05-21 12:06:55 +09:00

642 lines
21 KiB
CSS

:root {
--bg: oklch(98% 0.004 255);
--bg-subtle: oklch(95% 0.008 255);
--surface: oklch(100% 0 0);
--surface-hover: oklch(96.5% 0.009 255);
--surface-strong: oklch(92% 0.012 255);
--text: oklch(18% 0.018 255);
--text-sec: oklch(44% 0.018 255);
--text-muted: oklch(62% 0.014 255);
--text-faint: oklch(78% 0.01 255);
--border: oklch(88% 0.008 255);
--border-strong: oklch(76% 0.018 255);
--primary: oklch(58% 0.17 258);
--primary-soft: color-mix(in oklch, var(--primary) 10%, transparent);
--cyan: oklch(67% 0.14 205);
--cyan-soft: color-mix(in oklch, var(--cyan) 13%, transparent);
--green: oklch(61% 0.16 155);
--green-soft: color-mix(in oklch, var(--green) 12%, transparent);
--amber: oklch(70% 0.15 78);
--amber-soft: color-mix(in oklch, var(--amber) 14%, transparent);
--red: oklch(58% 0.18 25);
--red-soft: color-mix(in oklch, var(--red) 11%, transparent);
--shadow-sm: 0 10px 26px color-mix(in oklch, var(--primary) 9%, transparent);
--shadow-md: 0 24px 72px color-mix(in oklch, var(--primary) 14%, transparent);
--font-sans: -apple-system, BlinkMacSystemFont, "Pretendard", "Apple SD Gothic Neo", "Malgun Gothic", "Segoe UI", system-ui, sans-serif;
--font-mono: "JetBrains Mono", "D2Coding", ui-monospace, SFMono-Regular, Menlo, monospace;
--radius-sm: 7px;
--radius-md: 10px;
--radius-lg: 14px;
--topbar-h: 58px;
}
html.dark {
--bg: oklch(11% 0.012 260);
--bg-subtle: oklch(15% 0.014 260);
--surface: oklch(18% 0.014 260);
--surface-hover: oklch(22% 0.015 260);
--surface-strong: oklch(25% 0.016 260);
--text: oklch(94% 0.004 260);
--text-sec: oklch(72% 0.01 260);
--text-muted: oklch(54% 0.011 260);
--text-faint: oklch(38% 0.012 260);
--border: oklch(29% 0.012 260);
--border-strong: oklch(42% 0.018 260);
--primary: oklch(73% 0.13 258);
--cyan: oklch(80% 0.13 185);
--green: oklch(76% 0.14 155);
--amber: oklch(82% 0.13 82);
--red: oklch(72% 0.16 25);
--shadow-sm: 0 0 28px color-mix(in oklch, var(--primary) 13%, transparent);
--shadow-md: 0 0 70px color-mix(in oklch, var(--primary) 18%, transparent);
}
* { box-sizing: border-box; }
html, body { margin: 0; min-height: 100%; }
body {
background: var(--bg);
color: var(--text);
font-family: var(--font-sans);
font-size: 13px;
line-height: 1.5;
-webkit-font-smoothing: antialiased;
text-rendering: optimizeLegibility;
}
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
a { color: inherit; text-decoration: none; }
h1, h2, h3, h4, p { margin: 0; }
h1, h2, h3 { letter-spacing: -0.02em; text-wrap: balance; }
p { text-wrap: pretty; }
svg { width: 14px; height: 14px; stroke: currentColor; fill: none; stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; }
.demo-shell {
min-height: 100vh;
display: grid;
grid-template-rows: var(--topbar-h) 1fr;
background:
radial-gradient(circle at 82% 10%, color-mix(in oklch, var(--primary) 10%, transparent), transparent 26rem),
radial-gradient(circle at 12% 88%, color-mix(in oklch, var(--cyan) 10%, transparent), transparent 28rem),
var(--bg);
}
.topbar {
display: flex;
align-items: center;
justify-content: space-between;
gap: 18px;
padding: 0 22px;
border-bottom: 1px solid var(--border);
background: color-mix(in oklch, var(--surface) 94%, transparent);
backdrop-filter: blur(14px);
position: sticky;
top: 0;
z-index: 20;
}
.brand {
display: flex;
align-items: center;
gap: 10px;
min-width: 0;
}
.brand-mark {
width: 30px;
height: 30px;
border-radius: 9px;
display: grid;
place-items: center;
color: white;
background: linear-gradient(135deg, var(--primary), var(--cyan));
font-family: var(--font-mono);
font-weight: 900;
box-shadow: var(--shadow-sm);
}
.brand h1 { font-size: 16px; font-weight: 800; }
.breadcrumb {
display: flex;
gap: 6px;
align-items: center;
margin-top: 1px;
color: var(--text-muted);
font-family: var(--font-mono);
font-size: 10px;
}
.breadcrumb b { color: var(--text-sec); }
.top-actions { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
.btn {
height: 30px;
border: 1px solid var(--border);
background: var(--surface);
border-radius: var(--radius-sm);
padding: 0 11px;
display: inline-flex;
align-items: center;
justify-content: center;
gap: 6px;
font-size: 12px;
font-weight: 750;
transition: background .14s, border-color .14s, color .14s, transform .05s;
white-space: nowrap;
}
.btn:hover { border-color: var(--border-strong); background: var(--surface-hover); }
.btn:active { transform: translateY(1px); }
.btn.primary { background: var(--primary); border-color: var(--primary); color: white; }
.btn.cyan { background: var(--cyan); border-color: var(--cyan); color: oklch(15% 0.012 240); }
.btn.ghost { background: transparent; border-color: transparent; color: var(--text-sec); }
.btn.ghost:hover { background: var(--surface-hover); color: var(--text); }
.btn.icon { width: 30px; padding: 0; }
.kbd, .chip, .status-chip {
display: inline-flex;
align-items: center;
gap: 5px;
min-height: 23px;
padding: 2px 7px;
border-radius: 6px;
border: 1px solid var(--border);
background: var(--bg-subtle);
color: var(--text-sec);
font-family: var(--font-mono);
font-size: 10px;
font-weight: 750;
}
.chip.primary { color: var(--primary); background: var(--primary-soft); border-color: color-mix(in oklch, var(--primary) 30%, var(--border)); }
.chip.green { color: var(--green); background: var(--green-soft); border-color: color-mix(in oklch, var(--green) 28%, var(--border)); }
.chip.amber { color: var(--amber); background: var(--amber-soft); border-color: color-mix(in oklch, var(--amber) 30%, var(--border)); }
.chip.red { color: var(--red); background: var(--red-soft); border-color: color-mix(in oklch, var(--red) 30%, var(--border)); }
.dot { width: 6px; height: 6px; border-radius: 999px; background: currentColor; flex: none; }
.mono { font-family: var(--font-mono); font-variant-numeric: tabular-nums; }
.viewport { min-height: 0; display: grid; overflow: hidden; }
.cascade { grid-template-columns: clamp(248px, 18vw, 310px) clamp(260px, 19vw, 330px) minmax(0, 1fr); }
.workbench { grid-template-columns: clamp(260px, 19vw, 320px) minmax(0, 1fr) clamp(310px, 24vw, 380px); }
.guard { grid-template-columns: clamp(260px, 18vw, 320px) minmax(0, 1fr); }
.col {
min-width: 0;
min-height: 0;
border-right: 1px solid var(--border);
background: color-mix(in oklch, var(--surface) 92%, transparent);
display: flex;
flex-direction: column;
overflow: hidden;
}
.col:last-child { border-right: 0; }
.panel-head {
padding: 15px 15px 11px;
border-bottom: 1px solid var(--border);
flex: none;
}
.step-label {
display: inline-flex;
align-items: center;
gap: 6px;
color: var(--text-muted);
font-family: var(--font-mono);
font-size: 9px;
font-weight: 900;
letter-spacing: .12em;
text-transform: uppercase;
}
.step-label b {
color: var(--primary);
background: var(--primary-soft);
border: 1px solid color-mix(in oklch, var(--primary) 30%, var(--border));
padding: 1px 5px;
border-radius: 4px;
}
.panel-head h2 { margin-top: 7px; font-size: 17px; font-weight: 850; }
.panel-head p { margin-top: 3px; color: var(--text-muted); font-size: 12px; }
.search {
padding: 10px 12px;
border-bottom: 1px solid var(--border);
position: relative;
flex: none;
}
.search input {
width: 100%;
height: 32px;
padding: 0 34px 0 12px;
border: 1px solid var(--border);
border-radius: 9px;
background: var(--bg-subtle);
outline: 0;
font-size: 12px;
}
.search input:focus {
border-color: var(--primary);
background: var(--surface);
box-shadow: 0 0 0 3px color-mix(in oklch, var(--primary) 14%, transparent);
}
.search .kbd { position: absolute; right: 18px; top: 15px; min-height: 22px; }
.scroll { min-height: 0; overflow: auto; padding: 10px; }
.scroll::-webkit-scrollbar, .main-scroll::-webkit-scrollbar { width: 8px; height: 8px; }
.scroll::-webkit-scrollbar-thumb, .main-scroll::-webkit-scrollbar-thumb { background: var(--border-strong); border-radius: 999px; }
.scope-card,
.nav-card,
.rule-row {
width: 100%;
border: 1px solid transparent;
background: transparent;
border-radius: var(--radius-md);
text-align: left;
padding: 11px;
display: grid;
gap: 7px;
transition: background .14s, border-color .14s, transform .14s;
}
.scope-card:hover, .nav-card:hover, .rule-row:hover { background: var(--surface-hover); border-color: var(--border); }
.scope-card.on, .nav-card.on, .rule-row.on {
background: var(--primary-soft);
border-color: color-mix(in oklch, var(--primary) 28%, var(--border));
}
.scope-top, .nav-top, .rule-top {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
}
.scope-name, .nav-name, .rule-name { font-weight: 850; font-size: 13px; letter-spacing: -0.01em; }
.scope-meta, .nav-meta, .rule-meta { color: var(--text-muted); font-size: 11px; }
.scope-code, .rule-pattern {
color: var(--text-sec);
font-family: var(--font-mono);
font-size: 11px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.mini-meter {
height: 5px;
border-radius: 999px;
background: var(--bg-subtle);
overflow: hidden;
}
.mini-meter span { display: block; height: 100%; background: linear-gradient(90deg, var(--primary), var(--cyan)); border-radius: inherit; }
.section-title {
padding: 12px 4px 6px;
color: var(--text-muted);
font-family: var(--font-mono);
font-size: 9px;
font-weight: 900;
letter-spacing: .14em;
text-transform: uppercase;
display: flex;
justify-content: space-between;
}
.main-scroll {
min-width: 0;
min-height: 0;
overflow: auto;
background: var(--bg);
}
.detail-head {
position: sticky;
top: 0;
z-index: 10;
padding: 16px 20px;
border-bottom: 1px solid var(--border);
background: color-mix(in oklch, var(--bg) 88%, transparent);
backdrop-filter: blur(16px);
display: flex;
justify-content: space-between;
gap: 16px;
align-items: flex-start;
}
.title-line { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
.title-line h2 { font-size: 22px; font-weight: 900; }
.detail-meta { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 7px; color: var(--text-muted); font-size: 12px; }
.detail-meta b { color: var(--text-sec); font-weight: 800; }
.content-pad { padding: 18px 20px 86px; display: grid; gap: 14px; }
.two-col { display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(260px, .75fr); gap: 14px; }
.three-col { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 12px; }
.card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: var(--radius-lg);
overflow: hidden;
box-shadow: 0 1px 0 color-mix(in oklch, var(--surface) 80%, transparent);
}
.card.pad { padding: 16px; }
.card-head {
min-height: 48px;
padding: 13px 15px;
border-bottom: 1px solid var(--border);
display: flex;
justify-content: space-between;
align-items: center;
gap: 12px;
}
.card-head h3 { font-size: 14px; font-weight: 850; }
.card-head p { margin-top: 2px; color: var(--text-muted); font-size: 11px; }
.code-hero {
position: relative;
min-height: 220px;
padding: 24px;
background:
linear-gradient(90deg, color-mix(in oklch, var(--primary) 9%, transparent), transparent 42%),
radial-gradient(circle at 85% 20%, color-mix(in oklch, var(--cyan) 12%, transparent), transparent 16rem),
var(--surface);
border: 1px solid var(--border);
border-radius: 18px;
overflow: hidden;
box-shadow: var(--shadow-md);
}
.code-hero::after {
content: "";
position: absolute;
inset: auto 24px 22px;
border-bottom: 1px dashed var(--border-strong);
}
.hero-kicker {
display: flex;
justify-content: space-between;
gap: 10px;
color: var(--text-muted);
font-family: var(--font-mono);
font-size: 10px;
font-weight: 850;
letter-spacing: .08em;
text-transform: uppercase;
}
.code-line {
margin-top: 26px;
display: flex;
align-items: baseline;
flex-wrap: wrap;
gap: 6px;
font-family: var(--font-mono);
font-size: clamp(34px, 5vw, 62px);
line-height: 1;
font-weight: 950;
letter-spacing: -0.055em;
}
.code-token {
padding: 4px 8px;
border-radius: 10px;
border: 1px solid transparent;
background: color-mix(in oklch, var(--surface) 74%, var(--bg-subtle));
}
.code-token.prefix { color: var(--text); }
.code-token.date { color: var(--cyan); }
.code-token.seq { color: var(--primary); box-shadow: inset 0 -3px 0 color-mix(in oklch, var(--primary) 24%, transparent); }
.code-token.scope { color: var(--green); }
.code-dash { color: var(--text-faint); }
.hero-foot {
position: relative;
z-index: 1;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
margin-top: 30px;
}
.hero-foot span { color: var(--text-muted); font-size: 11px; }
.hero-foot b { display: block; color: var(--text); margin-top: 2px; font-family: var(--font-mono); font-size: 12px; }
.composer { padding: 15px; display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.part {
min-width: 106px;
border: 1px solid var(--border);
border-radius: 12px;
background: var(--bg-subtle);
padding: 11px;
text-align: left;
}
.part:hover { border-color: var(--border-strong); background: var(--surface-hover); }
.part.on { border-color: var(--primary); background: var(--primary-soft); }
.part .type { color: var(--text-muted); font-family: var(--font-mono); font-size: 9px; font-weight: 900; letter-spacing: .1em; text-transform: uppercase; }
.part .value { display: block; margin-top: 5px; font-family: var(--font-mono); font-size: 16px; font-weight: 900; }
.joiner { color: var(--text-faint); font-family: var(--font-mono); font-weight: 900; }
.add-part {
border: 1px dashed color-mix(in oklch, var(--primary) 40%, var(--border));
background: transparent;
color: var(--primary);
border-radius: 12px;
min-height: 58px;
padding: 0 16px;
font-weight: 850;
}
.field-grid { padding: 15px; display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.field { display: grid; gap: 6px; color: var(--text-sec); font-size: 11px; font-weight: 750; }
.input, .field input, .field select, .field textarea {
width: 100%;
min-height: 32px;
border: 1px solid var(--border);
border-radius: 8px;
background: var(--bg-subtle);
padding: 0 10px;
outline: 0;
color: var(--text);
}
.field textarea { min-height: 74px; padding: 8px 10px; resize: vertical; }
.input:focus, .field input:focus, .field select:focus, .field textarea:focus {
border-color: var(--primary);
background: var(--surface);
box-shadow: 0 0 0 3px color-mix(in oklch, var(--primary) 12%, transparent);
}
.metric-card { padding: 14px; border-right: 1px solid var(--border); }
.metric-card:last-child { border-right: 0; }
.metric-card span { color: var(--text-muted); font-family: var(--font-mono); font-size: 9px; font-weight: 900; letter-spacing: .1em; text-transform: uppercase; }
.metric-card b { display: block; margin-top: 4px; font-size: 24px; font-family: var(--font-mono); }
.metric-card small { display: block; margin-top: 3px; color: var(--text-muted); font-size: 11px; }
.cp-panel { background: var(--surface); }
.cp-bar {
min-height: 54px;
border-bottom: 1px solid var(--border);
display: grid;
grid-template-columns: 104px 1fr;
}
.cp-kind, .cp-type {
display: flex;
align-items: center;
gap: 8px;
padding: 9px 11px;
}
.cp-kind { background: var(--bg-subtle); border-right: 1px solid var(--border); color: var(--text-sec); font-weight: 850; }
.cp-type strong { display: block; font-size: 12px; }
.cp-type span { display: block; color: var(--text-muted); font-size: 10px; }
.cp-icon {
width: 25px;
height: 25px;
border-radius: 7px;
display: grid;
place-items: center;
background: var(--primary-soft);
color: var(--primary);
border: 1px solid color-mix(in oklch, var(--primary) 24%, var(--border));
font-family: var(--font-mono);
font-weight: 900;
}
.cp-scroll { min-height: 0; overflow: auto; padding: 12px; display: grid; gap: 12px; }
.cp-section {
border-top: 1px solid var(--border);
padding-top: 12px;
}
.cp-section:first-child { border-top: 0; padding-top: 0; }
.cp-section-title {
margin-bottom: 8px;
color: var(--text-muted);
font-family: var(--font-mono);
font-size: 9px;
font-weight: 900;
letter-spacing: .14em;
text-transform: uppercase;
}
.cp-row {
display: grid;
grid-template-columns: 82px 1fr;
gap: 9px;
align-items: center;
min-height: 34px;
padding: 4px 0;
}
.cp-row label { color: var(--text-sec); font-size: 11px; font-weight: 750; }
.cp-help { color: var(--text-muted); font-size: 10px; margin-top: 4px; }
.segment {
display: inline-flex;
padding: 2px;
background: var(--bg-subtle);
border: 1px solid var(--border);
border-radius: 8px;
gap: 2px;
}
.segment button {
min-height: 25px;
border: 0;
background: transparent;
border-radius: 6px;
padding: 0 8px;
color: var(--text-sec);
font-size: 11px;
font-weight: 800;
}
.segment button.on { background: var(--surface); color: var(--primary); box-shadow: 0 1px 0 var(--border); }
.toggle {
width: 34px;
height: 19px;
padding: 2px;
border: 1px solid var(--border);
border-radius: 999px;
background: var(--bg-subtle);
position: relative;
}
.toggle::after {
content: "";
display: block;
width: 13px;
height: 13px;
border-radius: 50%;
background: var(--text-faint);
transition: transform .18s, background .18s;
}
.toggle.on { background: var(--primary-soft); border-color: color-mix(in oklch, var(--primary) 35%, var(--border)); }
.toggle.on::after { transform: translateX(14px); background: var(--primary); }
.validation-grid { display: grid; grid-template-columns: 1.15fr .85fr; gap: 14px; }
.risk-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; }
.risk-card {
padding: 14px;
border: 1px solid var(--border);
border-radius: var(--radius-lg);
background: var(--surface);
}
.risk-card strong { display: block; font-size: 18px; margin-top: 8px; font-family: var(--font-mono); }
.risk-card p { color: var(--text-muted); font-size: 11px; margin-top: 4px; }
.risk-card.good { border-color: color-mix(in oklch, var(--green) 35%, var(--border)); background: var(--green-soft); }
.risk-card.warn { border-color: color-mix(in oklch, var(--amber) 40%, var(--border)); background: var(--amber-soft); }
.risk-card.bad { border-color: color-mix(in oklch, var(--red) 35%, var(--border)); background: var(--red-soft); }
.audit-row, .test-row {
display: grid;
grid-template-columns: 130px 1fr auto;
gap: 12px;
align-items: center;
padding: 12px 15px;
border-bottom: 1px solid var(--border);
}
.audit-row:last-child, .test-row:last-child { border-bottom: 0; }
.audit-row .time, .test-row .case { color: var(--text-muted); font-family: var(--font-mono); font-size: 10px; }
.audit-row strong, .test-row strong { display: block; }
.audit-row p, .test-row p { color: var(--text-muted); font-size: 11px; margin-top: 2px; }
.savebar {
position: sticky;
bottom: 0;
z-index: 12;
min-height: 58px;
padding: 10px 20px;
border-top: 1px solid var(--border);
background: color-mix(in oklch, var(--surface) 94%, transparent);
backdrop-filter: blur(14px);
display: flex;
justify-content: space-between;
align-items: center;
gap: 14px;
}
.savebar .note { color: var(--text-sec); font-weight: 800; }
.savebar .note span { color: var(--amber); }
.gallery {
min-height: 100vh;
padding: 34px;
background:
radial-gradient(circle at 86% 8%, color-mix(in oklch, var(--primary) 12%, transparent), transparent 28rem),
var(--bg);
}
.gallery-inner { max-width: 1180px; margin: 0 auto; display: grid; gap: 22px; }
.gallery-hero {
display: grid;
grid-template-columns: 1fr auto;
gap: 18px;
align-items: end;
padding-bottom: 22px;
border-bottom: 1px solid var(--border);
}
.gallery-hero h1 { font-size: clamp(32px, 4vw, 52px); max-width: 14ch; }
.gallery-hero p { color: var(--text-sec); max-width: 58ch; margin-top: 10px; font-size: 15px; }
.gallery-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.gallery-card {
min-height: 330px;
display: flex;
flex-direction: column;
justify-content: space-between;
gap: 22px;
padding: 18px;
border: 1px solid var(--border);
border-radius: 18px;
background: var(--surface);
box-shadow: var(--shadow-sm);
}
.gallery-card h2 { font-size: 20px; }
.gallery-card p { color: var(--text-sec); margin-top: 8px; }
.preview-mini {
height: 150px;
border: 1px solid var(--border);
border-radius: 14px;
background:
linear-gradient(90deg, var(--primary-soft), transparent),
var(--bg-subtle);
padding: 12px;
display: grid;
grid-template-columns: .45fr 1fr;
gap: 10px;
}
.mini-side, .mini-main {
border-radius: 10px;
background: var(--surface);
border: 1px solid var(--border);
}
.mini-main { display: grid; align-content: center; justify-items: start; padding: 14px; gap: 8px; }
.mini-line { height: 7px; border-radius: 999px; background: var(--border); width: 80%; }
.mini-line.short { width: 48%; background: var(--primary); }
.gallery-card .btn { align-self: flex-start; }
@media (max-width: 1100px) {
.cascade, .workbench, .guard { grid-template-columns: 1fr; overflow: auto; }
.col { min-height: auto; border-right: 0; border-bottom: 1px solid var(--border); }
.col.scope, .col.nav { max-height: none; }
.two-col, .validation-grid, .gallery-grid { grid-template-columns: 1fr; }
.field-grid, .three-col, .hero-foot, .risk-grid { grid-template-columns: 1fr; }
.topbar, .detail-head, .gallery-hero { align-items: flex-start; flex-direction: column; height: auto; padding: 14px; }
.demo-shell { grid-template-rows: auto 1fr; }
}