@use 'variables' as *; @use 'code-block'; @font-face { font-family: 'Comic Neue'; font-style: normal; font-weight: 400; font-display: swap; src: url('/fonts/ComicNeue-Bold.ttf') format('truetype'); } @font-face { font-family: 'ZCOOL KuaiLe'; font-style: normal; font-weight: 400; font-display: swap; src: url('/fonts/ZCOOLKuaiLe-Regular.ttf') format('truetype'); } @font-face { font-family: 'Zen Maru Gothic'; font-style: normal; font-weight: 400; font-display: swap; src: url('/fonts/ZenMaruGothic-Regular.ttf') format('truetype'); } @font-face { font-family: 'Zen Maru Gothic'; font-style: normal; font-weight: 700; font-display: swap; src: url('/fonts/ZenMaruGothic-Bold.ttf') format('truetype'); } @font-face { font-family: 'Gaegu'; font-style: normal; font-weight: 400; font-display: swap; src: url('/fonts/Gaegu-Regular.ttf') format('truetype'); } @font-face { font-family: 'Gaegu'; font-style: normal; font-weight: 700; font-display: swap; src: url('/fonts/Gaegu-Bold.ttf') format('truetype'); } *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } button, input, select, textarea { font-family: inherit; } :root { --vh: 1vh; } // Fix mobile viewport height (address bar) @supports (height: 100dvh) { :root { --vh: 1dvh; } } // Theme transition (applied programmatically on toggle, not on load) html.theme-transitioning, html.theme-transitioning *, html.theme-transitioning *::before, html.theme-transitioning *::after { transition: background-color 0.3s ease, color 0.3s ease, border-color 0.3s ease, box-shadow 0.3s ease, fill 0.3s ease, stroke 0.3s ease !important; } html, body { position: fixed; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden; } #app { height: 100%; width: 100%; overflow: hidden; } body { font-family: $font-ui; background-color: $bg-primary; color: $text-primary; font-size: 14px; line-height: 1.6; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } // Chat input route CSS is code-split; keep the footer color stable before the // component-scoped chunk arrives so entering chat does not flash the page bg. .chat-input-area, .chat-input-area .input-wrapper { background-color: $bg-card; } .settings-check { display: inline-flex; align-items: center; justify-content: center; width: 16px; min-width: 16px; height: 16px; color: transparent; font-size: 13px; line-height: 16px; } .settings-check.active { color: $accent-primary; } .hermes-desktop-pet-window, .hermes-desktop-pet-window body, .hermes-desktop-pet-window #app { background: transparent !important; background-color: transparent !important; } // Teleported overlays must remain clickable above Electron drag regions. .hermes-desktop-shell { .n-drawer, .n-drawer *, .n-modal, .n-modal *, .n-dialog, .n-dialog *, .n-popover, .n-popover *, .n-dropdown, .n-dropdown *, .n-select-menu, .n-select-menu *, .n-base-select-menu, .n-base-select-menu *, .n-message-container, .n-message-container *, .n-notification-container, .n-notification-container *, .drawer-overlay, .drawer-panel, .drawer-panel * { -webkit-app-region: no-drag; } } code, pre, .mono { font-family: $font-code; } a { color: $accent-primary; text-decoration: none; &:hover { color: $accent-hover; } } ::-webkit-scrollbar { width: 6px; height: 6px; background: transparent; } ::-webkit-scrollbar-track, ::-webkit-scrollbar-track-piece { background: transparent; } ::-webkit-scrollbar-thumb { background: $border-color; border-radius: 3px; &:hover { background: $text-muted; } } ::-webkit-scrollbar-corner { background: transparent; } * { scrollbar-width: thin; scrollbar-color: $border-color transparent; } ::selection { background: rgba(var(--accent-primary-rgb), 0.3); } // Shared page header .page-header { display: flex; align-items: center; justify-content: space-between; gap: 12px; min-height: 64px; padding: 14px 20px; border-bottom: 1px solid $border-color; flex-shrink: 0; } .header-title { margin: 0; font-size: 16px; font-weight: 600; line-height: 1.4; color: $text-primary; } .page-header > .header-actions { display: flex; align-items: center; justify-content: flex-end; gap: 8px; } // Responsive utility classes for inline width replacement .input-sm { width: 90px; } .input-md { width: 200px; } .input-lg { width: 300px; } // Mobile drawer backdrop .mobile-backdrop { display: none; position: fixed; inset: 0; background: rgba(0, 0, 0, 0.4); z-index: 999; } // Hamburger button (mobile only) .hamburger-btn { display: none; position: fixed; top: calc(10px + env(safe-area-inset-top, 0px)); left: 12px; z-index: 99; width: 36px; height: 36px; border: none; background: $bg-card; border-radius: $radius-sm; cursor: pointer; align-items: center; justify-content: center; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); } // Mobile responsive @media (max-width: $breakpoint-mobile) { .mobile-backdrop { display: block; } .hamburger-btn { display: flex; } .page-header { padding: calc(16px + env(safe-area-inset-top, 0px)) 12px 16px 52px !important; } .input-sm, .input-md, .input-lg { width: 100%; } } // Prevent iOS Safari auto-zoom on input focus by ensuring font-size is at least 16px @media (max-width: 768px) { input, textarea, select, .n-input, .n-input__input-element, .n-input__textarea-el, .n-input__textarea-element { font-size: 16px !important; } }