Full-stack implementation: FastAPI backend with PAM auth, WebSocket stats/terminal, and vanilla JS frontend with tiling desktop shell. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
143 lines
2.8 KiB
CSS
143 lines
2.8 KiB
CSS
/* Atlus Shell — three-column layout */
|
|
* { margin: 0; padding: 0; box-sizing: border-box; }
|
|
|
|
html, body {
|
|
height: 100dvh;
|
|
overflow: hidden;
|
|
font-family: var(--font-ui);
|
|
background: var(--bg-stage);
|
|
color: var(--text-primary);
|
|
-webkit-font-smoothing: antialiased;
|
|
-webkit-text-size-adjust: 100%;
|
|
}
|
|
|
|
body {
|
|
display: flex;
|
|
flex-direction: row;
|
|
}
|
|
|
|
/* Utility */
|
|
.hidden { display: none !important; }
|
|
|
|
/* Scrollbar styling */
|
|
::-webkit-scrollbar {
|
|
width: 6px;
|
|
height: 6px;
|
|
}
|
|
::-webkit-scrollbar-track {
|
|
background: transparent;
|
|
}
|
|
::-webkit-scrollbar-thumb {
|
|
background: var(--border-component);
|
|
border-radius: 3px;
|
|
}
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: var(--text-muted);
|
|
}
|
|
|
|
/* System menu overlay */
|
|
.system-menu {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 1000;
|
|
background: rgba(0, 0, 0, 0.5);
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
.system-menu-content {
|
|
background: var(--bg-titlebar);
|
|
border: 1px solid var(--border-structural);
|
|
border-radius: var(--radius-lg);
|
|
padding: 8px;
|
|
min-width: 200px;
|
|
}
|
|
|
|
.system-menu-item {
|
|
display: block;
|
|
width: 100%;
|
|
padding: 12px 16px;
|
|
background: none;
|
|
border: none;
|
|
color: var(--text-primary);
|
|
font-family: var(--font-ui);
|
|
font-size: 14px;
|
|
text-align: left;
|
|
border-radius: var(--radius-sm);
|
|
cursor: pointer;
|
|
min-height: var(--tap-min);
|
|
display: flex;
|
|
align-items: center;
|
|
}
|
|
|
|
.system-menu-item:hover {
|
|
background: var(--accent-hover);
|
|
}
|
|
|
|
.system-menu-danger {
|
|
color: var(--status-red);
|
|
}
|
|
|
|
.system-menu-sep {
|
|
height: 1px;
|
|
background: var(--border-structural);
|
|
margin: 4px 8px;
|
|
}
|
|
|
|
.system-menu-about {
|
|
padding: 8px 16px;
|
|
color: var(--text-muted);
|
|
font-family: var(--font-mono);
|
|
font-size: 12px;
|
|
text-align: center;
|
|
}
|
|
|
|
/* Welcome screen */
|
|
.welcome-screen {
|
|
display: flex;
|
|
flex-direction: column;
|
|
align-items: center;
|
|
justify-content: center;
|
|
height: 100%;
|
|
gap: 16px;
|
|
}
|
|
|
|
.welcome-logo {
|
|
font-family: var(--font-mono);
|
|
font-size: 72px;
|
|
font-weight: 500;
|
|
color: var(--text-ghost);
|
|
}
|
|
|
|
.welcome-text {
|
|
font-size: 14px;
|
|
color: var(--text-muted);
|
|
}
|
|
|
|
/* Responsive — portrait/narrow */
|
|
@media (max-width: 768px) {
|
|
.dock {
|
|
position: fixed;
|
|
left: -var(--dock-width);
|
|
z-index: 100;
|
|
transition: transform var(--transition-base);
|
|
}
|
|
.dock.open {
|
|
transform: translateX(var(--dock-width));
|
|
}
|
|
|
|
.panel {
|
|
position: fixed;
|
|
right: calc(-1 * var(--panel-width));
|
|
z-index: 100;
|
|
transition: transform var(--transition-base);
|
|
}
|
|
.panel.open {
|
|
transform: translateX(calc(-1 * var(--panel-width)));
|
|
}
|
|
|
|
.stage {
|
|
width: 100%;
|
|
}
|
|
}
|