- Merge SW / Home Menu Stories into SW / Header (sidebar: Home Menu; others verification-tagged) - Home On: logo hover ring and header top/bottom #5F4B0F lines while the menu is open - Measured More in SWHeader; home menu narrow widths use a More (...) section with a grouped text menu instead of horizontal scroll, placed right after the last visible section - Action tiles no longer stay on after a click; 최근파일 stays Active only while its list is open - More dropdown and recent files list never open together; list top joins the accent line - Recent files preview falls back left / over the list at narrow widths (390px) - Update Storybook, browser tests, docs, AI guides and QA evidence
471 lines
21 KiB
CSS
471 lines
21 KiB
CSS
/* @hm-design/sw — Home menu (Figma rj6wpsfk24lOWvWiVRAANP 26:10591 "헤더/꾸러미 ver2/home on", tiles 26:11355 …).
|
||
Scoped to .hm-sw-home-menu; reads the shared SW tokens of .hm-sw-header / .hm-sw-theme (font, text outline,
|
||
focus). New values are Figma values (Plugin API, 2026-10-19), never global selectors. */
|
||
|
||
.hm-sw-home-menu {
|
||
/* Section surface (Frame 2409–2412; Frame 2408 has slightly different stops): bottom → top + edge shade. */
|
||
--hm-sw-home-menu-section-background:
|
||
linear-gradient(0deg, #16120a 0%, rgba(22, 18, 10, 0) 54.458%, #16120a 100%),
|
||
linear-gradient(0deg, #18150e 28.102%, #262015 41.084%, #332b1c 58.06%, #38301f 81.027%, #18150e 100%);
|
||
--hm-sw-home-menu-section-border-color: #081813;
|
||
--hm-sw-home-menu-section-inner-border-color: #20190e;
|
||
/* Tile group g_* : fill bottom → top, 1px stroke top → bottom, drop shadow 0 2 r4 60%. */
|
||
--hm-sw-home-menu-group-background: linear-gradient(0deg, #19160e 2%, #38301f 43.678%, #463c29 67.668%, #2f281a 100%);
|
||
--hm-sw-home-menu-group-border: linear-gradient(180deg, #886d35 0%, #423625 8.846%, #f3dba8 26.169%, #0e0b06 83.792%, #574b30 100%);
|
||
--hm-sw-home-menu-group-shadow: 0 2px 4px rgba(0, 0, 0, 0.6);
|
||
/* Tile divider 1 x 44 (same gradient as the group stroke) with -1 0 r2 black shadow. */
|
||
--hm-sw-home-menu-divider: var(--hm-sw-home-menu-group-border);
|
||
--hm-sw-home-menu-divider-shadow: -1px 0 2px #000;
|
||
/* Tile states: Variant2 / Variant3 stroke (INSIDE 1px, top → bottom), icon and label color. */
|
||
--hm-sw-home-menu-item-hover-border: linear-gradient(180deg, #da6813 8.5%, #ffbb89 37.9%, #e5690d 71.9%, #ae3607 92.8%);
|
||
--hm-sw-home-menu-item-color: var(--hm-sw-header-text-color);
|
||
--hm-sw-home-menu-item-accent-color: #ff5c00;
|
||
--hm-sw-home-menu-icon-color: #b6b4af;
|
||
/* Title badge (tit_* Union, 9-slice of the Figma SVG) */
|
||
--hm-sw-home-menu-title-color: #000;
|
||
/* Bottom accent: 26:10591 per-section strip (top → bottom) / 662:67267 2px outline (bottom → top). */
|
||
--hm-sw-home-menu-accent-strip: linear-gradient(180deg, #5f4b0f -6.4%, #ff5100 96.8%);
|
||
--hm-sw-home-menu-accent-outline: linear-gradient(0deg, #ff5100 0%, #5f4b0f 76.7%);
|
||
--hm-sw-home-menu-accent-outline-width: 2px;
|
||
--hm-sw-home-menu-accent-outline-height: 30px;
|
||
/* More dropdown (not in Figma): a text menu in the SW brown dropdown family (header/menu/레이어 26:10940, rows
|
||
header/dropdown/brown/row 26:10687): surface, border, radius, shadow, 30px rows, row hover; group title in the
|
||
최근파일 path color, groups split by the layer footer divider. */
|
||
--hm-sw-home-menu-more-background: var(--hm-sw-header-layer-menu-background);
|
||
--hm-sw-home-menu-more-border-color: var(--hm-sw-header-layer-menu-border-color);
|
||
--hm-sw-home-menu-more-radius: var(--hm-sw-header-layer-menu-radius);
|
||
--hm-sw-home-menu-more-shadow: var(--hm-sw-header-layer-menu-shadow);
|
||
--hm-sw-home-menu-more-offset: 2px;
|
||
--hm-sw-home-menu-more-min-width: 180px;
|
||
--hm-sw-home-menu-more-divider-color: var(--hm-sw-header-layer-footer-border-color);
|
||
--hm-sw-home-menu-more-title-color: var(--hm-sw-recent-files-path-color);
|
||
--hm-sw-home-menu-more-row-height: 30px;
|
||
--hm-sw-home-menu-more-row-hover-background: var(--hm-sw-header-layer-row-hover-background);
|
||
--hm-sw-home-menu-more-row-hover-color: var(--hm-sw-header-layer-row-hover-color);
|
||
|
||
/* Optional sub panel (Figma 최근파일 662:67331 / 파일출력 2뎁스 662:67471). */
|
||
--hm-sw-recent-files-width: 354px;
|
||
--hm-sw-recent-files-max-height: 750px;
|
||
--hm-sw-recent-files-background: #27241d;
|
||
--hm-sw-recent-files-border-color: #da6813;
|
||
--hm-sw-recent-files-path-color: #d4cbbd;
|
||
--hm-sw-recent-files-row-hover-background: var(--hm-sw-header-layer-row-hover-background);
|
||
--hm-sw-recent-files-row-hover-color: var(--hm-sw-header-layer-row-hover-color);
|
||
--hm-sw-recent-files-preview-width: 310px;
|
||
--hm-sw-recent-files-preview-background: #62533d;
|
||
|
||
position: relative;
|
||
isolation: isolate;
|
||
width: max-content;
|
||
max-width: 100%;
|
||
}
|
||
.hm-sw-home-menu__sections {
|
||
display: flex;
|
||
align-items: flex-start;
|
||
max-width: 100%;
|
||
/* 2px of the accent strip shows left, right and under the sections (menu 1305 x 77 in Figma). */
|
||
padding: 0 2px 2px;
|
||
/* Not in Figma (1920px only): narrower hosts get the measured More section instead of a scroller (SWHomeMenu).
|
||
The clip only keeps the badge shadow and the strip inside the menu, as before; nothing is cut off. */
|
||
overflow: hidden;
|
||
}
|
||
/* Measurement pass (one synchronous read, removed before paint) and overflow: the menu takes all the room of its host
|
||
(clamped by max-width), so with More it still covers the whole area SWHeader gives it, as the full menu does. */
|
||
.hm-sw-home-menu:is([data-measuring], [data-overflow]) { width: 100000px; }
|
||
/* More fills the rest of the row with the section surface (the menu background stays as it is); only its badge and
|
||
⋯ tile sit right after the last shown section (2026-10-19 user correction: start, not end). */
|
||
.hm-sw-home-menu__section.hm-sw-home-menu__more { flex: 1 0 auto; align-items: flex-start; }
|
||
|
||
/* Natural tile widths (SWHomeMenu measure copy): laid out, invisible, zero-size clip (no scroll area, no hit area). */
|
||
.hm-sw-home-menu__measure {
|
||
position: absolute;
|
||
top: 0;
|
||
left: 0;
|
||
width: 0;
|
||
height: 0;
|
||
overflow: hidden;
|
||
visibility: hidden;
|
||
pointer-events: none;
|
||
}
|
||
.hm-sw-home-menu__measure-row { display: flex; align-items: flex-start; width: max-content; }
|
||
|
||
/* More (not in Figma): the section + tile parts above with a ⋯ icon. Its dropdown sits under the ⋯ tile, left edges aligned
|
||
(left set from the DOM): a text menu of the moved sections (title + rows). Above the sub panel; laid out while
|
||
closed so it is positioned before it shows. */
|
||
.hm-sw-home-menu__more-panel {
|
||
position: absolute;
|
||
z-index: 2;
|
||
top: calc(100% + var(--hm-sw-home-menu-more-offset));
|
||
display: flex;
|
||
flex-direction: column;
|
||
min-width: var(--hm-sw-home-menu-more-min-width);
|
||
max-width: calc(100vw - 16px);
|
||
padding: 4px 0;
|
||
border: 1px solid var(--hm-sw-home-menu-more-border-color);
|
||
border-radius: var(--hm-sw-home-menu-more-radius);
|
||
background: var(--hm-sw-home-menu-more-background);
|
||
box-shadow: var(--hm-sw-home-menu-more-shadow);
|
||
color: var(--hm-sw-home-menu-item-color);
|
||
}
|
||
.hm-sw-home-menu__more-panel:not([data-open]) { visibility: hidden; pointer-events: none; }
|
||
.hm-sw-home-menu__text-group { display: flex; flex-direction: column; padding: 4px 0; }
|
||
.hm-sw-home-menu__text-group + .hm-sw-home-menu__text-group { border-top: 1px solid var(--hm-sw-home-menu-more-divider-color); }
|
||
.hm-sw-home-menu__text-title {
|
||
padding: 4px 12px;
|
||
overflow: clip;
|
||
overflow-clip-margin: var(--hm-sw-header-text-outline-room);
|
||
color: var(--hm-sw-home-menu-more-title-color);
|
||
font-size: var(--hm-sw-header-label-size);
|
||
font-weight: 700;
|
||
line-height: 16px;
|
||
letter-spacing: 0.04em;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
text-shadow: var(--hm-sw-header-label-outline);
|
||
}
|
||
.hm-sw-home-menu__text-list { display: flex; flex-direction: column; }
|
||
/* Row = header/dropdown/brown/row: 30px, 12px in, 14px 700 with the menu text outline. */
|
||
.hm-sw-home-menu__text-item {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 12px;
|
||
height: var(--hm-sw-home-menu-more-row-height);
|
||
padding: 0 12px;
|
||
color: var(--hm-sw-home-menu-item-color);
|
||
font-size: var(--hm-sw-header-font-size);
|
||
font-weight: 700;
|
||
line-height: 16px;
|
||
letter-spacing: 0.04em;
|
||
white-space: nowrap;
|
||
text-align: left;
|
||
}
|
||
.hm-sw-home-menu__text-label {
|
||
flex: 1 1 auto;
|
||
min-width: 0;
|
||
overflow: clip;
|
||
overflow-clip-margin: var(--hm-sw-header-text-outline-room);
|
||
text-overflow: ellipsis;
|
||
text-shadow: var(--hm-sw-header-text-outline);
|
||
}
|
||
/* Indicator column: › for a row that opens a sub panel (최근파일); ✓ only for an opt-in toggle row (toggle: true). */
|
||
.hm-sw-home-menu__text-item::after { content: ""; flex: 0 0 14px; width: 14px; text-align: center; }
|
||
.hm-sw-home-menu__text-item[aria-pressed="true"]::after { content: "✓"; }
|
||
.hm-sw-home-menu__text-item[aria-expanded]::after { content: "›"; }
|
||
/* Hover = pressed = Active (the tiles' Variant2 = Variant3, the brown rows' hover = selected): brown row, orange
|
||
text. Action rows keep nothing after the click; only the 최근파일 row stays Active while its list is open. */
|
||
.hm-sw-home-menu__text-item:is(:hover, :active, [data-active="true"]):not(:disabled) {
|
||
background: var(--hm-sw-home-menu-more-row-hover-background);
|
||
color: var(--hm-sw-home-menu-more-row-hover-color);
|
||
}
|
||
/* Accent joint (narrow widths, 2026-10-19): where the sub panel reaches past the menu, the outline's bottom band runs
|
||
on over the panel's top edge — same 2px, same gradient slice (the outline gradient sized to its box, bottom), so
|
||
the menu's bottom line and the list's side borders meet without a gap. Left / width from the measured positions. */
|
||
.hm-sw-home-menu__joint {
|
||
position: absolute;
|
||
z-index: 1;
|
||
top: calc(100% - var(--hm-sw-home-menu-accent-outline-width));
|
||
height: var(--hm-sw-home-menu-accent-outline-width);
|
||
background: var(--hm-sw-home-menu-accent-outline) left bottom / 100% var(--hm-sw-home-menu-accent-outline-height) no-repeat;
|
||
pointer-events: none;
|
||
}
|
||
/* Sub panel under the menu, at its tile (position set from the DOM). */
|
||
.hm-sw-home-menu__panel { position: absolute; z-index: 1; top: 100%; }
|
||
|
||
.hm-sw-home-menu__section {
|
||
position: relative;
|
||
display: flex;
|
||
flex: 0 0 auto;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
height: 75px;
|
||
/* Figma: content 5px from the top and 10px from the sides, the 1px stroke included. */
|
||
padding: 4px 9px 0;
|
||
border: 1px solid var(--hm-sw-home-menu-section-border-color);
|
||
border-radius: 0 0 3px 3px;
|
||
background: var(--hm-sw-home-menu-section-background);
|
||
}
|
||
/* Frame 2412 (last): 261px, 11px left. Frame 2408 keeps 340px with its group centered. */
|
||
.hm-sw-home-menu__section:last-child { padding-left: 10px; }
|
||
/* Inner 1px #20190E (Rectangle 6977 / border, inset 1px). */
|
||
.hm-sw-home-menu__section::before {
|
||
content: "";
|
||
position: absolute;
|
||
inset: 0;
|
||
border: 1px solid var(--hm-sw-home-menu-section-inner-border-color);
|
||
border-radius: 0 0 2px 2px;
|
||
pointer-events: none;
|
||
}
|
||
/* 26:10591 Rectangle 6991–6995: 30px strip from y 47 behind the section, 2px visible under it. */
|
||
.hm-sw-home-menu[data-accent="sections"] .hm-sw-home-menu__section::after {
|
||
content: "";
|
||
position: absolute;
|
||
z-index: -1;
|
||
top: 46px;
|
||
right: -2px;
|
||
bottom: -3px;
|
||
left: -2px;
|
||
border-radius: 0 0 3px 3px;
|
||
background: var(--hm-sw-home-menu-accent-strip);
|
||
pointer-events: none;
|
||
}
|
||
.hm-sw-home-menu[data-accent="sections"] .hm-sw-home-menu__section:first-child::after { left: -3px; }
|
||
.hm-sw-home-menu[data-accent="sections"] .hm-sw-home-menu__section:last-child::after { right: -3px; }
|
||
/* 662:67267 Rectangle 6991: 1305 x 30 from y 47, 2px INSIDE gradient stroke. */
|
||
.hm-sw-home-menu[data-accent="outline"]::after {
|
||
content: "";
|
||
position: absolute;
|
||
z-index: -1;
|
||
top: 47px;
|
||
right: 0;
|
||
left: 0;
|
||
height: var(--hm-sw-home-menu-accent-outline-height);
|
||
padding: var(--hm-sw-home-menu-accent-outline-width);
|
||
border-radius: 0 0 3px 3px;
|
||
background: var(--hm-sw-home-menu-accent-outline);
|
||
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
||
-webkit-mask-composite: xor;
|
||
mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
|
||
pointer-events: none;
|
||
}
|
||
|
||
/* tit_* : text + 23px each side; the Figma Union SVG (132 x 27 incl. its -2 r4 shadow) is 9-sliced. */
|
||
.hm-sw-home-menu__title {
|
||
position: relative;
|
||
z-index: 1;
|
||
display: flex;
|
||
flex: 0 0 auto;
|
||
align-items: center;
|
||
justify-content: center;
|
||
height: 19px;
|
||
margin-bottom: -1px;
|
||
padding: 1px 23px 0;
|
||
color: var(--hm-sw-home-menu-title-color);
|
||
font-size: var(--hm-sw-header-label-size);
|
||
font-weight: 400;
|
||
line-height: 14px;
|
||
letter-spacing: 0.02em;
|
||
white-space: nowrap;
|
||
}
|
||
.hm-sw-home-menu__title::before {
|
||
content: "";
|
||
position: absolute;
|
||
z-index: -1;
|
||
inset: -6px -4px -2px;
|
||
border-style: solid;
|
||
border-width: 0 30px;
|
||
border-image: var(--hm-sw-home-menu-title-art) 0 30 fill / 0 30px / 0 stretch;
|
||
pointer-events: none;
|
||
}
|
||
|
||
.hm-sw-home-menu__group {
|
||
position: relative;
|
||
display: flex;
|
||
flex: 0 0 auto;
|
||
height: 46px;
|
||
border-radius: 3px;
|
||
background: var(--hm-sw-home-menu-group-background);
|
||
box-shadow: var(--hm-sw-home-menu-group-shadow);
|
||
}
|
||
/* INSIDE stroke drawn over the edge: tiles keep their full 80 x 46 like Figma. */
|
||
.hm-sw-home-menu__group::before {
|
||
content: "";
|
||
position: absolute;
|
||
inset: 0;
|
||
padding: 1px;
|
||
border-radius: inherit;
|
||
background: var(--hm-sw-home-menu-group-border);
|
||
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
||
-webkit-mask-composite: xor;
|
||
mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
|
||
pointer-events: none;
|
||
}
|
||
|
||
.hm-sw-home-menu__item {
|
||
position: relative;
|
||
flex: 0 0 80px;
|
||
width: 80px;
|
||
height: 46px;
|
||
color: var(--hm-sw-home-menu-item-color);
|
||
}
|
||
.hm-sw-home-menu__item:first-child { border-radius: 3px 0 0 3px; }
|
||
.hm-sw-home-menu__item:last-child { border-radius: 0 3px 3px 0; }
|
||
.hm-sw-home-menu__item:only-child { border-radius: 3px; }
|
||
/* Divider at the right edge of every tile but the last. */
|
||
.hm-sw-home-menu__item:not(:last-child)::before {
|
||
content: "";
|
||
position: absolute;
|
||
z-index: 2;
|
||
top: 1px;
|
||
right: -1px;
|
||
width: 1px;
|
||
height: 44px;
|
||
background: var(--hm-sw-home-menu-divider);
|
||
box-shadow: var(--hm-sw-home-menu-divider-shadow);
|
||
pointer-events: none;
|
||
}
|
||
/* Variant2 / Variant3 stroke. */
|
||
.hm-sw-home-menu__item::after {
|
||
content: "";
|
||
position: absolute;
|
||
z-index: 3;
|
||
inset: 0;
|
||
padding: 1px;
|
||
border-radius: inherit;
|
||
background: var(--hm-sw-home-menu-item-hover-border);
|
||
-webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0);
|
||
-webkit-mask-composite: xor;
|
||
mask: linear-gradient(#000 0 0) content-box exclude, linear-gradient(#000 0 0);
|
||
opacity: 0;
|
||
pointer-events: none;
|
||
}
|
||
|
||
/* 18 x 18 icon slot at (31, 6); larger art is centered on it and may overflow (Figma assets carry shadows). */
|
||
.hm-sw-home-menu__icon {
|
||
position: absolute;
|
||
top: 6px;
|
||
left: 31px;
|
||
display: grid;
|
||
place-items: center;
|
||
width: 18px;
|
||
height: 18px;
|
||
color: var(--hm-sw-home-menu-icon-color);
|
||
}
|
||
.hm-sw-home-menu__icon > * { flex: none; max-width: none; }
|
||
.hm-sw-home-menu__icon > :is(svg, img) { display: block; }
|
||
.hm-sw-home-menu__icon--hover { visibility: hidden; }
|
||
|
||
.hm-sw-home-menu__label {
|
||
position: absolute;
|
||
top: 25px;
|
||
left: 50%;
|
||
max-width: 76px;
|
||
height: 16px;
|
||
padding: 0 var(--hm-sw-header-text-outline-room);
|
||
overflow: hidden;
|
||
transform: translateX(-50%);
|
||
font-size: var(--hm-sw-header-font-size);
|
||
font-weight: 700;
|
||
line-height: 16px;
|
||
letter-spacing: 0.04em;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
text-shadow: var(--hm-sw-header-text-outline);
|
||
}
|
||
|
||
/* Variant2 (hover) = Variant3 (pressed while held; stays only as Active of a panel tile / More): orange stroke,
|
||
#FF5C00 icon and label, art 1px up-left. Action tiles keep nothing after the click (2026-10-19). */
|
||
.hm-sw-home-menu__item:is(:hover:not(:disabled), :active:not(:disabled), [data-active="true"])::after { opacity: 1; }
|
||
.hm-sw-home-menu__item:is(:hover:not(:disabled), :active:not(:disabled), [data-active="true"]) {
|
||
--hm-sw-home-menu-icon-color: var(--hm-sw-home-menu-item-accent-color);
|
||
color: var(--hm-sw-home-menu-item-accent-color);
|
||
}
|
||
.hm-sw-home-menu__item:is(:hover:not(:disabled), :active:not(:disabled), [data-active="true"]) .hm-sw-home-menu__icon { transform: translate(-1px, -1px); }
|
||
.hm-sw-home-menu__item:is(:hover:not(:disabled), :active:not(:disabled), [data-active="true"]) .hm-sw-home-menu__label { top: 24px; }
|
||
.hm-sw-home-menu__item[data-has-hover-icon]:is(:hover:not(:disabled), :active:not(:disabled), [data-active="true"]) .hm-sw-home-menu__icon:not(.hm-sw-home-menu__icon--hover) { visibility: hidden; }
|
||
.hm-sw-home-menu__item[data-has-hover-icon]:is(:hover:not(:disabled), :active:not(:disabled), [data-active="true"]) .hm-sw-home-menu__icon--hover { visibility: visible; }
|
||
|
||
/* SWRecentFiles — Figma 최근파일 662:67331 (354 x 750: rows 50px) + 2-depth preview 662:67471 (310 x 270). */
|
||
.hm-sw-recent-files { position: relative; width: var(--hm-sw-recent-files-width); }
|
||
/* Frame stroke: 1px #DA6813 left / right / bottom over the list edge (joins the menu's outline accent). */
|
||
.hm-sw-recent-files::after {
|
||
content: "";
|
||
position: absolute;
|
||
z-index: 2;
|
||
inset: 0;
|
||
border: 1px solid var(--hm-sw-recent-files-border-color);
|
||
border-top: 0;
|
||
border-radius: 0 0 3px 3px;
|
||
pointer-events: none;
|
||
}
|
||
.hm-sw-recent-files__list {
|
||
box-sizing: content-box; /* max-height = rows (15 x 50 = Figma 750) */
|
||
max-height: var(--hm-sw-recent-files-max-height);
|
||
overflow-x: hidden;
|
||
overflow-y: auto;
|
||
overscroll-behavior: contain;
|
||
scrollbar-width: thin;
|
||
border: 1px solid var(--hm-sw-recent-files-background);
|
||
border-radius: 0 0 4px 4px;
|
||
background: var(--hm-sw-recent-files-background);
|
||
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.25), inset 0 4px 8px rgba(0, 0, 0, 0.4);
|
||
}
|
||
.hm-sw-recent-files__row {
|
||
display: flex;
|
||
align-items: center;
|
||
gap: 8px;
|
||
width: 100%;
|
||
height: 50px;
|
||
padding: 1px 8px;
|
||
text-align: left;
|
||
}
|
||
/* Rows without a badge keep the text column at 45px (Figma px 45). */
|
||
.hm-sw-recent-files__row:not(:has(> .hm-sw-recent-files__badge)) { padding-left: 45px; }
|
||
.hm-sw-recent-files__badge { display: grid; flex: 0 0 29px; place-items: center; width: 29px; height: 28px; }
|
||
.hm-sw-recent-files__badge > :is(svg, img) { display: block; max-width: none; }
|
||
.hm-sw-recent-files__text { display: flex; flex-direction: column; gap: 2px; min-width: 0; max-width: 301px; }
|
||
.hm-sw-recent-files__name,
|
||
.hm-sw-recent-files__path {
|
||
display: block;
|
||
overflow: hidden;
|
||
overflow-clip-margin: var(--hm-sw-header-text-outline-room);
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
letter-spacing: 0.04em;
|
||
}
|
||
.hm-sw-recent-files__name { color: var(--hm-sw-header-text-color); font-size: var(--hm-sw-header-font-size); font-weight: 700; line-height: 16px; text-shadow: var(--hm-sw-header-text-outline); }
|
||
.hm-sw-recent-files__path { color: var(--hm-sw-recent-files-path-color); font-size: var(--hm-sw-header-label-size); line-height: 14px; opacity: 0.6; text-shadow: var(--hm-sw-header-label-outline); }
|
||
.hm-sw-recent-files__row:is(:hover, [data-hovered="true"]):not(:disabled) { background: var(--hm-sw-recent-files-row-hover-background); }
|
||
.hm-sw-recent-files__row:is(:hover, [data-hovered="true"]):not(:disabled) .hm-sw-recent-files__name { color: var(--hm-sw-recent-files-row-hover-color); }
|
||
.hm-sw-recent-files__empty { padding: 16px 45px; color: var(--hm-sw-recent-files-path-color); font-size: var(--hm-sw-header-label-size); opacity: 0.6; }
|
||
/* 2-depth preview beside the row (1px gap), top aligned 1px under the row top. */
|
||
.hm-sw-recent-files__preview {
|
||
position: absolute;
|
||
z-index: 3;
|
||
left: calc(100% + 1px);
|
||
display: flex;
|
||
flex-direction: column;
|
||
align-items: center;
|
||
gap: 4px;
|
||
width: var(--hm-sw-recent-files-preview-width);
|
||
padding: 3px 0 0; /* + 1px border = Figma py 4; 270px total with the 243px body */
|
||
border: 1px solid var(--hm-sw-recent-files-preview-background);
|
||
border-left: 0;
|
||
border-radius: 0 3px 4px 0;
|
||
background: var(--hm-sw-recent-files-preview-background);
|
||
box-shadow: inset 2px 0 2.5px rgba(0, 0, 0, 0.5);
|
||
filter: drop-shadow(0 2px 1px rgba(0, 0, 0, 0.5));
|
||
pointer-events: none;
|
||
}
|
||
/* No room on the right (narrow widths): the same preview mirrored on the left of the list. */
|
||
.hm-sw-recent-files__preview[data-side="left"] {
|
||
right: calc(100% + 1px);
|
||
left: auto;
|
||
border-right: 0;
|
||
border-left: 1px solid var(--hm-sw-recent-files-preview-background);
|
||
border-radius: 3px 0 0 4px;
|
||
box-shadow: inset -2px 0 2.5px rgba(0, 0, 0, 0.5);
|
||
}
|
||
.hm-sw-recent-files__preview[data-side="left"] .hm-sw-recent-files__preview-body { border-radius: 0 0 0 4px; }
|
||
/* No room on either side (e.g. 390px): the same preview over the list, right under the row (above it when the
|
||
viewport has no room below). Not in Figma (2026-10-19 사용자 확정). */
|
||
.hm-sw-recent-files__preview:is([data-side="below"], [data-side="above"]) {
|
||
left: 1px;
|
||
border-left: 1px solid var(--hm-sw-recent-files-preview-background);
|
||
border-radius: 4px;
|
||
box-shadow: none;
|
||
}
|
||
.hm-sw-recent-files__preview[data-side="above"] { transform: translateY(-100%); }
|
||
.hm-sw-recent-files__preview:is([data-side="below"], [data-side="above"]) .hm-sw-recent-files__preview-body { border-radius: 0 0 4px 4px; }
|
||
.hm-sw-recent-files__preview-title {
|
||
width: 294px;
|
||
overflow: hidden;
|
||
white-space: nowrap;
|
||
text-overflow: ellipsis;
|
||
color: var(--hm-sw-recent-files-row-hover-color);
|
||
font-size: var(--hm-sw-header-font-size);
|
||
line-height: 18px;
|
||
letter-spacing: 0.02em;
|
||
}
|
||
.hm-sw-recent-files__preview-body { position: relative; width: 100%; height: 243px; overflow: hidden; border-radius: 0 0 4px 0; }
|
||
.hm-sw-recent-files__preview-body > :is(img, svg, canvas) { display: block; width: 100%; height: 100%; object-fit: cover; }
|