Files
Apothecary/web/src/styles/global.css
T
josh a82045d1bd
Build and push image / build (push) Successful in 50s
UX overhaul: routing, accessibility, feedback, and polish
Add react-router-dom for URL-based navigation with browser
back/forward, deep links, and bookmarks. Replace window.confirm()
with styled ConfirmDialog. Add toast notifications and success
feedback on consume/audit/gone flows. Add escape-to-close and
focus trapping on modals. Add entrance animations for drawers,
modals, and toasts. Make grids responsive, add sortable inventory
headers, working CSV/JSON export, time-aware greeting, focus-visible
outlines, search clear button, and hover chevrons on inventory rows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-04 18:54:49 -04:00

159 lines
3.0 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* App chrome — ported from Apothecary - Inventory.html lines 1186 */
.app-shell {
min-height: 100vh;
display: grid;
grid-template-columns: 264px 1fr;
}
.sidebar {
border-right: 1px solid var(--line);
background: var(--bg-2);
padding: 28px 18px;
display: flex;
flex-direction: column;
gap: 4px;
position: sticky;
top: 0;
height: 100vh;
overflow: auto;
}
.brand {
display: flex;
align-items: center;
gap: 10px;
padding: 0 8px 28px;
}
.brand-mark {
width: 40px;
height: 40px;
border-radius: 50%;
border: 1px solid var(--ink);
display: flex;
align-items: center;
justify-content: center;
font-family: var(--serif);
font-size: 22px;
font-style: italic;
color: var(--ink);
}
.nav-link {
display: flex;
align-items: center;
gap: 10px;
padding: 10px 12px;
border-radius: var(--r-md);
color: var(--ink-2);
cursor: pointer;
font-size: 14px;
font-weight: 500;
border: none;
background: transparent;
text-align: left;
transition: background 100ms;
}
.nav-link:hover {
background: var(--bg-3);
color: var(--ink);
}
.nav-link.active {
background: var(--surface);
color: var(--ink);
box-shadow: var(--shadow-sm);
border: 1px solid var(--line);
}
.nav-section {
font-size: 11px;
text-transform: uppercase;
letter-spacing: 0.12em;
color: var(--ink-3);
padding: 16px 12px 6px;
font-weight: 500;
}
.nav-divider {
display: none;
}
.inv-row:hover {
background: var(--bg-2);
}
.inv-row .inv-row-chevron {
opacity: 0;
transition: opacity 100ms;
}
.inv-row:hover .inv-row-chevron {
opacity: 1;
}
@keyframes toast-in {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.4; }
}
@keyframes backdrop-in {
from { opacity: 0; }
to { opacity: 1; }
}
@keyframes modal-in {
from { opacity: 0; transform: scale(0.97) translateY(8px); }
to { opacity: 1; transform: scale(1) translateY(0); }
}
@keyframes drawer-in {
from { transform: translateX(100%); }
to { transform: translateX(0); }
}
@media (max-width: 1200px) {
.inv-row > :nth-child(4),
.inv-header > :nth-child(4) { display: none; } /* Shop */
.inv-row > :nth-child(8),
.inv-header > :nth-child(8) { display: none; } /* Last checked */
}
@media (max-width: 880px) {
.app-shell {
grid-template-columns: 1fr;
}
.sidebar {
position: fixed;
bottom: 0;
left: 0;
right: 0;
top: auto;
height: auto;
flex-direction: row;
padding: 8px 12px;
border-top: 1px solid var(--line);
border-right: none;
z-index: 30;
overflow-x: auto;
}
.brand,
.nav-section {
display: none;
}
.nav-link {
white-space: nowrap;
padding: 8px 12px;
flex-direction: column;
font-size: 10px;
gap: 2px;
align-items: center;
}
.nav-label {
display: none;
}
.nav-divider {
width: 1px;
height: 24px;
background: var(--line);
flex-shrink: 0;
align-self: center;
}
.main {
padding-bottom: 60px;
}
}