322 lines
12 KiB
CSS
322 lines
12 KiB
CSS
/* Initial Storybook manager mapping from ui_viz. Manager-only; not runtime theme tokens. */
|
|
:root {
|
|
--font-family-base: 'Noto Sans KR', 'Malgun Gothic', sans-serif;
|
|
--hm-green-default: #123328;
|
|
--hm-green-light-1: #205241;
|
|
--hm-green-light-2: #266651;
|
|
--hm-green-light-3: #249473;
|
|
--hm-fg-on-green-secondary: #BDDFD4;
|
|
--color-fg-on-green-primary: #FFFFFF;
|
|
--color-action-primary: #123328;
|
|
--color-action-accent-on-green: #FFC600;
|
|
--color-bg-content: #F5F0E5;
|
|
--color-bg-surface: #FFFFFF;
|
|
--effect-text-border-color: rgba(0, 0, 0, .3);
|
|
--overlay-black-20: rgba(0, 0, 0, .2);
|
|
--overlay-black-30: rgba(0, 0, 0, .3);
|
|
}
|
|
/* Storybook 10.6 manager only. Source: docs/patterns/dashboard-composition.md §6.
|
|
The 18px join / inset geometry follows the current LNB specimen, not a new token. */
|
|
@font-face {
|
|
font-family: 'Hanmac Manager Noto Sans KR';
|
|
src: url('/fonts/NotoSansKR-variable.ttf') format('truetype');
|
|
font-weight: 100 900;
|
|
font-display: swap;
|
|
}
|
|
/* Manager-only alias of the bundled Noto Sans KR asset, followed by the
|
|
Foundation fallback chain (typography.css) instead of a bare sans-serif. */
|
|
:root {
|
|
--hm-manager-font: 'Hanmac Manager Noto Sans KR', var(--font-family-base);
|
|
}
|
|
|
|
/* The Storybook layout panel, outside the sidebar landmark, has a separate
|
|
border. Removing only the landmark's border leaves a one-device-pixel seam. */
|
|
#root div:has(> div > #storybook-sidebar-region) {
|
|
border-right: 0;
|
|
}
|
|
|
|
#storybook-sidebar-region {
|
|
--hm-manager-join: 18px;
|
|
color: var(--color-fg-on-green-primary);
|
|
background: linear-gradient(90deg,
|
|
var(--hm-green-default) 0%, var(--hm-green-light-1) 30%,
|
|
var(--hm-green-light-2) 50%, var(--hm-green-light-3) 90%,
|
|
var(--hm-green-light-2) 100%);
|
|
border-right: 0;
|
|
font-family: var(--hm-manager-font);
|
|
}
|
|
#storybook-sidebar-region [data-radix-scroll-area-content] > div {
|
|
padding: 28px 0 28px 20px;
|
|
}
|
|
/* Keep the native draggable scrollbar in the unused left gutter. The selected
|
|
item must reach the content edge without a scroll thumb crossing its curves.
|
|
Radix supplies left/right inline, so only those two positions need priority. */
|
|
#storybook-sidebar-region > [scrollbarsize] > [data-orientation='vertical'] {
|
|
left: 4px !important;
|
|
right: auto !important;
|
|
width: 6px;
|
|
padding: 0;
|
|
}
|
|
#storybook-sidebar-region > [scrollbarsize] > [data-orientation='vertical'] > div {
|
|
background: var(--hm-fg-on-green-secondary);
|
|
}
|
|
#storybook-sidebar-region .sidebar-header {
|
|
margin: 0 20px 24px 0;
|
|
padding: 0;
|
|
color: var(--color-fg-on-green-primary);
|
|
}
|
|
#storybook-sidebar-region .sidebar-header > div a {
|
|
color: var(--color-fg-on-green-primary);
|
|
font: 700 20px/30px var(--hm-manager-font);
|
|
white-space: normal;
|
|
/* §6 Text Border: brand title keeps the original 1px (no shadow). */
|
|
-webkit-text-stroke: 1px var(--effect-text-border-color);
|
|
paint-order: stroke fill;
|
|
}
|
|
#storybook-sidebar-region .sidebar-header button {
|
|
color: inherit;
|
|
}
|
|
#storybook-sidebar-region [role='search'] {
|
|
margin-right: 20px;
|
|
margin-bottom: 24px;
|
|
}
|
|
#storybook-sidebar-region .search-field {
|
|
min-height: 44px;
|
|
border: 1px solid var(--hm-fg-on-green-secondary);
|
|
border-radius: 4px;
|
|
background: var(--color-bg-surface);
|
|
color: var(--color-action-primary);
|
|
}
|
|
#storybook-explorer-searchfield {
|
|
color: var(--color-action-primary);
|
|
font-family: inherit;
|
|
font-size: 14px;
|
|
}
|
|
#storybook-sidebar-region [role='search'] > button {
|
|
color: var(--color-fg-on-green-primary);
|
|
background: transparent;
|
|
border-color: var(--hm-fg-on-green-secondary);
|
|
min-width: 32px;
|
|
height: 44px;
|
|
}
|
|
#storybook-sidebar-region [role='search'] > button:hover {
|
|
background: rgba(0, 0, 0, .10);
|
|
}
|
|
/* Storybook's named creation action only; search/filter remain available. */
|
|
#storybook-sidebar-region button[aria-label='Create a new story'] { display: none; }
|
|
|
|
#storybook-explorer-tree .sidebar-subheading {
|
|
position: relative;
|
|
margin: 0;
|
|
padding: 0 20px 0 0;
|
|
min-height: 56px;
|
|
color: var(--hm-fg-on-green-secondary);
|
|
}
|
|
#storybook-explorer-tree .sidebar-subheading[data-hm-section]:not([data-hm-section='0']) {
|
|
margin-top: 40px;
|
|
}
|
|
#storybook-explorer-tree .sidebar-subheading[data-hm-section]:not([data-hm-section='0'])::before {
|
|
content: '';
|
|
position: absolute;
|
|
top: -20px;
|
|
left: 0;
|
|
right: 20px;
|
|
height: 2px;
|
|
background: linear-gradient(var(--overlay-black-30) 0 50%, rgba(255,255,255,.4) 50% 100%);
|
|
mask-image: linear-gradient(90deg, transparent, #000 20%, #000 80%, transparent);
|
|
}
|
|
#storybook-explorer-tree .sidebar-subheading > button {
|
|
min-height: 56px;
|
|
color: inherit;
|
|
font: 700 16px/28px var(--hm-manager-font);
|
|
letter-spacing: 0;
|
|
text-transform: none;
|
|
}
|
|
#storybook-explorer-tree .sidebar-item {
|
|
position: relative;
|
|
margin: 0;
|
|
padding: 0;
|
|
min-height: 56px;
|
|
overflow: visible;
|
|
border: 0;
|
|
border-radius: 0;
|
|
background: transparent;
|
|
color: var(--color-fg-on-green-primary);
|
|
}
|
|
/* Manager-only expanded 2-depth branch face: Black 8%, independent of HM LNB CSS.
|
|
The separate Black 20% mapping remains reserved for the selected item's inset depth. */
|
|
#storybook-explorer-tree .sidebar-item[data-hm-group='true'] {
|
|
background: rgba(0, 0, 0, .08);
|
|
box-shadow: inset 1px 0 var(--hm-green-light-2);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-hm-group-start='true'] {
|
|
border-radius: 8px 0 0 0;
|
|
box-shadow: inset 1px 1px var(--hm-green-light-2);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-hm-group-end='true'] {
|
|
border-radius: 0 0 0 8px;
|
|
padding-bottom: 8px;
|
|
box-shadow: inset 1px -1px var(--hm-green-light-2);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item > :is(a[id], button[id]:not([data-testid])) {
|
|
position: relative;
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 12px;
|
|
min-height: 56px;
|
|
height: auto;
|
|
width: 100%;
|
|
margin: 0;
|
|
padding: 14px 32px 14px 18px;
|
|
border: 0;
|
|
border-radius: 4px 0 0 4px;
|
|
background: transparent;
|
|
color: inherit;
|
|
font: 700 18px/28px var(--hm-manager-font);
|
|
text-align: left;
|
|
text-decoration: none;
|
|
white-space: normal;
|
|
overflow: visible;
|
|
text-overflow: clip;
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-hm-depth='2'] > :is(a[id], button[id]:not([data-testid])) {
|
|
margin-left: 32px;
|
|
width: calc(100% - 32px);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-hm-depth='3'] > :is(a[id], button[id]:not([data-testid])),
|
|
#storybook-explorer-tree .sidebar-item[data-hm-depth='4'] > :is(a[id], button[id]:not([data-testid])) {
|
|
margin-left: 44px;
|
|
width: calc(100% - 44px);
|
|
}
|
|
#storybook-explorer-tree .hm-manager-label {
|
|
min-width: 0;
|
|
white-space: normal;
|
|
word-break: keep-all;
|
|
overflow-wrap: anywhere;
|
|
overflow: visible;
|
|
text-overflow: clip;
|
|
}
|
|
/* D-093 D-014 (§6 Text Border): non-selected labels, including hover and the
|
|
yellow current parent, use the specimen's 1.5px border plus lower shadow.
|
|
Thickness and offset are REVIEW VALUEs. Selected labels carry no effect. */
|
|
#storybook-explorer-tree .sidebar-item[data-selected='false'] .hm-manager-label {
|
|
-webkit-text-stroke: 1.5px var(--effect-text-border-color);
|
|
paint-order: stroke fill;
|
|
text-shadow: 1px 2px 1px var(--effect-text-border-color);
|
|
}
|
|
/* The group chevron carries the same lower shadow (specimen .ref-sidebar-chevron). */
|
|
#storybook-explorer-tree .sidebar-item[data-selected='false'] > button[id]:not([data-testid]) > div:first-child > div > svg {
|
|
filter: drop-shadow(1px 2px 1px var(--effect-text-border-color));
|
|
}
|
|
#storybook-explorer-tree .sidebar-item > :is(a[id], button[id]:not([data-testid])) > div:first-child {
|
|
position: static;
|
|
flex: 0 0 auto;
|
|
margin: 0;
|
|
gap: 8px;
|
|
}
|
|
/* Storybook 10.6.1: the leading wrapper has a direct svg[type] for every
|
|
menu type (group/component/story/docs), plus a nested untyped chevron
|
|
only on expandable rows. Remove type glyphs at every depth. */
|
|
#storybook-explorer-tree .sidebar-item > :is(a[id], button[id]:not([data-testid])) > div:first-child > svg[type] {
|
|
display: none;
|
|
}
|
|
/* Leaves have no chevron. Remove the now-empty wrapper as a flex item so
|
|
neither its width nor the row's flex gap reserves an icon slot.
|
|
The existing depth margins and row padding still supply hierarchy indent. */
|
|
#storybook-explorer-tree .sidebar-item > :is(a[id], button[id]:not([data-testid])) > div:first-child:has(> svg[type]):not(:has(> div > svg)) {
|
|
display: none;
|
|
}
|
|
/* First-depth leaves still sit inside their root label after losing the icon
|
|
slot. Deeper rows retain their existing 32px / 44px depth margins. */
|
|
#storybook-explorer-tree .sidebar-item[data-hm-depth='1'] > :is(a[id], button[id]:not([data-testid])):has(> div:first-child > svg[type]):not(:has(> div:first-child > div > svg)) {
|
|
padding-left: 32px;
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-hm-current-parent='true'],
|
|
#storybook-explorer-tree .sidebar-subheading[data-hm-current-parent='true'] {
|
|
color: var(--color-action-accent-on-green);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='false'] > :is(a[id], button[id]:not([data-testid])):hover {
|
|
background: rgba(0, 0, 0, .10);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true'] > a[id] {
|
|
z-index: 1;
|
|
background: var(--color-bg-content);
|
|
color: var(--color-action-primary);
|
|
border-radius: 8px 0 0 8px;
|
|
}
|
|
/* Keep the keyboard skip link without reserving a 1px flex column.
|
|
That column exposed the green branch background at the selected item's end. */
|
|
#storybook-explorer-tree .sidebar-item > a[href='#storybook-preview-wrapper'] {
|
|
position: absolute;
|
|
right: 0;
|
|
z-index: 4;
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true'] > a[id]::before {
|
|
content: '';
|
|
position: absolute;
|
|
inset: 0;
|
|
border-radius: inherit;
|
|
pointer-events: none;
|
|
box-shadow: inset 6px 0 8px -5px var(--overlay-black-30),
|
|
inset 0 3px 5px -3px var(--overlay-black-20),
|
|
inset 0 -2px 4px -3px var(--overlay-black-20);
|
|
mask-image: linear-gradient(90deg, #000 75%, transparent 100%);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true']::before,
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true']::after {
|
|
content: '';
|
|
position: absolute;
|
|
right: 0;
|
|
width: var(--hm-manager-join);
|
|
height: var(--hm-manager-join);
|
|
z-index: 2;
|
|
pointer-events: none;
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true']::before {
|
|
bottom: 100%;
|
|
background: radial-gradient(circle at top left, transparent calc(var(--hm-manager-join) - .5px), var(--color-bg-content) var(--hm-manager-join));
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true']::after {
|
|
top: 100%;
|
|
background: radial-gradient(circle at bottom left, transparent calc(var(--hm-manager-join) - .5px), var(--color-bg-content) var(--hm-manager-join));
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true'][data-hm-group-end='true']::after {
|
|
top: calc(100% - 8px);
|
|
}
|
|
/* Auxiliary status/create actions are separate from selected row geometry.
|
|
Hide only these controls; the Story link and native group toggles stay intact. */
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true'] > :is([data-testid='tree-change-status-button'], [data-testid='context-menu']) {
|
|
display: none;
|
|
}
|
|
#storybook-explorer-tree [data-testid='context-menu'] {
|
|
color: inherit;
|
|
right: 4px;
|
|
}
|
|
/* Storybook gives utility buttons an opaque background and a 5px halo.
|
|
Keep their native behavior, with the same transparent / black-10% LNB states. */
|
|
#storybook-explorer-tree :is([data-testid='context-menu'], .sidebar-subheading-action) {
|
|
background: transparent;
|
|
box-shadow: none;
|
|
}
|
|
#storybook-explorer-tree :is([data-testid='context-menu'], .sidebar-subheading-action):is(:hover, [aria-expanded='true']) {
|
|
background: rgba(0, 0, 0, .10);
|
|
box-shadow: none;
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true'] > [data-testid='context-menu'] {
|
|
z-index: 3;
|
|
color: var(--color-action-primary);
|
|
}
|
|
#storybook-explorer-tree .sidebar-item[data-selected='true'] > [data-testid='context-menu'] svg {
|
|
color: var(--color-action-primary);
|
|
}
|
|
/* Keep the manager preview frame flush without consuming iframe width. */
|
|
main:has(#storybook-preview-wrapper) {
|
|
border-left: 0;
|
|
}
|
|
|
|
@media (prefers-reduced-motion: reduce) {
|
|
#storybook-sidebar-region * { scroll-behavior: auto; }
|
|
}
|
|
|
|
|