style: sidebar cards use outlined tile aesthetic with gap, rounded corners, and fade gradient
This commit is contained in:
@@ -255,6 +255,16 @@ def test_css_sidebar_list():
|
|||||||
assert "overflow-x: hidden" in block
|
assert "overflow-x: hidden" in block
|
||||||
|
|
||||||
|
|
||||||
|
def test_css_sidebar_list_padding():
|
||||||
|
""".sidebar-list must have padding and flex column layout with gap for card breathing room."""
|
||||||
|
css = read_css()
|
||||||
|
block = _extract_rule_block(css, ".sidebar-list {")
|
||||||
|
assert "padding: 8px" in block
|
||||||
|
assert "display: flex" in block
|
||||||
|
assert "flex-direction: column" in block
|
||||||
|
assert "gap: 6px" in block
|
||||||
|
|
||||||
|
|
||||||
def test_css_sidebar_collapse_btn():
|
def test_css_sidebar_collapse_btn():
|
||||||
""".sidebar-collapse-btn must be a minimal button styled for the chevron."""
|
""".sidebar-collapse-btn must be a minimal button styled for the chevron."""
|
||||||
css = read_css()
|
css = read_css()
|
||||||
@@ -313,34 +323,45 @@ def test_css_sidebar_item_exists():
|
|||||||
|
|
||||||
|
|
||||||
def test_css_sidebar_item_dimensions_and_layout():
|
def test_css_sidebar_item_dimensions_and_layout():
|
||||||
""".sidebar-item must be 120px tall, flex column, overflow hidden, position relative."""
|
""".sidebar-item must be 120px tall, flex column, outlined card with transition."""
|
||||||
css = read_css()
|
css = read_css()
|
||||||
block = _extract_rule_block(css, ".sidebar-item {")
|
block = _extract_rule_block(css, ".sidebar-item {")
|
||||||
assert "height: 120px" in block
|
assert "height: 120px" in block
|
||||||
assert "background: var(--bg-secondary)" in block
|
assert "background: var(--bg-secondary)" in block
|
||||||
assert "border-bottom: 1px solid var(--border-subtle)" in block
|
assert "border: 1px solid var(--border)" in block
|
||||||
|
assert "border-radius: 4px" in block
|
||||||
assert "cursor: pointer" in block
|
assert "cursor: pointer" in block
|
||||||
assert "overflow: hidden" in block
|
assert "overflow: hidden" in block
|
||||||
assert "display: flex" in block
|
assert "display: flex" in block
|
||||||
assert "flex-direction: column" in block
|
assert "flex-direction: column" in block
|
||||||
assert "position: relative" in block
|
assert "position: relative" in block
|
||||||
|
assert "transition:" in block
|
||||||
|
|
||||||
|
|
||||||
|
def test_css_sidebar_item_border_radius():
|
||||||
|
""".sidebar-item must have border-radius: 4px matching the dashboard tile aesthetic."""
|
||||||
|
css = read_css()
|
||||||
|
block = _extract_rule_block(css, ".sidebar-item {")
|
||||||
|
assert "border-radius: 4px" in block
|
||||||
|
|
||||||
|
|
||||||
def test_css_sidebar_item_hover():
|
def test_css_sidebar_item_hover():
|
||||||
""".sidebar-item:hover must use --bg-surface background."""
|
""".sidebar-item:hover must use accent border-color (not background change)."""
|
||||||
css = read_css()
|
css = read_css()
|
||||||
assert ".sidebar-item:hover" in css
|
assert ".sidebar-item:hover" in css
|
||||||
block = _extract_rule_block(css, ".sidebar-item:hover {")
|
assert ".sidebar-item:focus-visible" in css
|
||||||
assert "background: var(--bg-surface)" in block
|
block = _extract_rule_block(css, ".sidebar-item:hover")
|
||||||
|
assert "border-color: var(--accent)" in block
|
||||||
|
|
||||||
|
|
||||||
def test_css_sidebar_item_active():
|
def test_css_sidebar_item_active():
|
||||||
""".sidebar-item--active must have --bg-surface background and 3px accent left border."""
|
""".sidebar-item--active must have --bg-surface background and accent full border with 3px left."""
|
||||||
css = read_css()
|
css = read_css()
|
||||||
assert ".sidebar-item--active" in css
|
assert ".sidebar-item--active" in css
|
||||||
block = _extract_rule_block(css, ".sidebar-item--active {")
|
block = _extract_rule_block(css, ".sidebar-item--active {")
|
||||||
assert "background: var(--bg-surface)" in block
|
assert "background: var(--bg-surface)" in block
|
||||||
assert "border-left: 3px solid var(--accent)" in block
|
assert "border-color: var(--accent)" in block
|
||||||
|
assert "border-left-width: 3px" in block
|
||||||
|
|
||||||
|
|
||||||
def test_css_sidebar_item_header():
|
def test_css_sidebar_item_header():
|
||||||
|
|||||||
+28
-4
@@ -416,6 +416,10 @@ body {
|
|||||||
flex: 1;
|
flex: 1;
|
||||||
overflow-y: auto;
|
overflow-y: auto;
|
||||||
overflow-x: hidden;
|
overflow-x: hidden;
|
||||||
|
padding: 8px;
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
gap: 6px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-collapse-btn {
|
.sidebar-collapse-btn {
|
||||||
@@ -457,21 +461,25 @@ body {
|
|||||||
.sidebar-item {
|
.sidebar-item {
|
||||||
height: 120px;
|
height: 120px;
|
||||||
background: var(--bg-secondary);
|
background: var(--bg-secondary);
|
||||||
border-bottom: 1px solid var(--border-subtle);
|
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
display: flex;
|
display: flex;
|
||||||
flex-direction: column;
|
flex-direction: column;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
border: 1px solid var(--border);
|
||||||
|
border-radius: 4px;
|
||||||
|
transition: border-color var(--t-fast), box-shadow var(--t-fast);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-item:hover {
|
.sidebar-item:hover,
|
||||||
background: var(--bg-surface);
|
.sidebar-item:focus-visible {
|
||||||
|
border-color: var(--accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-item--active {
|
.sidebar-item--active {
|
||||||
background: var(--bg-surface);
|
background: var(--bg-surface);
|
||||||
border-left: 3px solid var(--accent);
|
border-color: var(--accent);
|
||||||
|
border-left-width: 3px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.sidebar-item-header {
|
.sidebar-item-header {
|
||||||
@@ -502,6 +510,22 @@ body {
|
|||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.sidebar-item-body::before {
|
||||||
|
content: "";
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: 0;
|
||||||
|
height: 32px;
|
||||||
|
background: linear-gradient(to bottom, transparent, var(--bg-secondary));
|
||||||
|
pointer-events: none;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sidebar-item--active .sidebar-item-body::before {
|
||||||
|
background: linear-gradient(to bottom, transparent, var(--bg-surface));
|
||||||
|
}
|
||||||
|
|
||||||
.sidebar-item-body pre {
|
.sidebar-item-body pre {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
bottom: 0;
|
bottom: 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user