#root { min-height: 100vh; } .app-shell { display: grid; grid-template-columns: 236px minmax(0, 1fr); min-height: 100vh; } .side-rail { position: sticky; top: 0; display: flex; flex-direction: column; gap: 18px; height: 100vh; padding: 18px; border-right: 1px solid var(--line); background: rgba(23, 17, 13, 0.78); backdrop-filter: blur(18px); } .brand-button, .side-rail nav button, .ghost-button, .primary-button { display: inline-flex; align-items: center; justify-content: center; gap: 8px; min-height: 40px; border-radius: var(--radius); border: 1px solid var(--line); color: var(--ink); background: rgba(255, 255, 255, 0.04); } .brand-button { justify-content: flex-start; width: 100%; color: var(--brass); font-weight: 800; } .side-rail nav { display: grid; gap: 8px; } .side-rail nav button { justify-content: flex-start; width: 100%; } .session-chip { margin-top: auto; overflow: hidden; color: var(--ink-muted); font-size: 0.82rem; text-overflow: ellipsis; white-space: nowrap; } main { min-width: 0; padding: 28px; } .page-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 16px; } .span-2 { grid-column: span 2; } .span-3 { grid-column: 1 / -1; } .panel { border: 1px solid var(--line); border-radius: var(--radius); padding: 18px; background: rgba(38, 26, 18, 0.82); box-shadow: var(--shadow); } .hero-band { grid-column: 1 / -1; display: flex; align-items: end; justify-content: space-between; min-height: 270px; padding: 28px; border: 1px solid var(--line); border-radius: var(--radius); background: linear-gradient(120deg, rgba(32, 21, 14, 0.48), rgba(32, 21, 14, 0.92)), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='900' height='420' viewBox='0 0 900 420'%3E%3Crect width='900' height='420' fill='%2320150e'/%3E%3Cg fill='none' stroke='%23d5a84d' stroke-opacity='.28'%3E%3Cpath d='M68 326h764M82 286h736M116 120h668M134 84h632'/%3E%3Cpath d='M138 84v242M274 84v242M418 84v242M572 84v242M724 84v242'/%3E%3C/g%3E%3Cg fill='%23a94834' fill-opacity='.72'%3E%3Crect x='166' y='126' width='48' height='156'/%3E%3Crect x='304' y='102' width='34' height='184'/%3E%3Crect x='614' y='134' width='58' height='150'/%3E%3C/g%3E%3Cg fill='%232d6f63' fill-opacity='.72'%3E%3Ccircle cx='492' cy='194' r='48'/%3E%3Cpath d='M742 124l34 92h-68z'/%3E%3C/g%3E%3C/svg%3E") center / cover; } .hero-band p, .auth-hero p { margin: 0 0 8px; color: var(--brass); font-weight: 800; text-transform: uppercase; letter-spacing: 0; } h1, h2, h3, p { margin-top: 0; } h1 { margin-bottom: 8px; font-size: clamp(2.1rem, 6vw, 5rem); line-height: 0.95; } h2 { margin-bottom: 8px; } .primary-button { border-color: rgba(213, 168, 77, 0.62); background: linear-gradient(180deg, #d5a84d, #a94834); color: #17110d; font-weight: 800; } .ghost-button:hover, .side-rail nav button:hover, .brand-button:hover { border-color: rgba(213, 168, 77, 0.55); } .book-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); gap: 16px; } .book-card { display: grid; grid-template-columns: minmax(82px, 96px) minmax(0, 1fr); gap: 14px; min-height: 220px; min-width: 0; padding: 14px; border: 1px solid var(--line); border-radius: var(--radius); background: linear-gradient(180deg, rgba(49, 34, 24, 0.94), rgba(23, 17, 13, 0.94)); } .cover-button, .book-portrait { display: grid; place-items: center; width: 100%; min-width: 0; aspect-ratio: 2 / 3; min-height: 0; border: 1px solid rgba(213, 168, 77, 0.35); border-radius: 6px; background: linear-gradient(135deg, rgba(213, 168, 77, 0.2), rgba(45, 111, 99, 0.22)), var(--paper-soft); color: var(--brass); } .cover-button img, .book-portrait img { width: 100%; height: 100%; object-fit: cover; } .book-card h3 { margin-bottom: 5px; line-height: 1.1; overflow-wrap: anywhere; } .book-card-body { display: grid; align-content: start; min-width: 0; } .book-card p, .book-facts p, .section-heading p { color: var(--ink-muted); } .book-card-description { display: -webkit-box; overflow: hidden; -webkit-box-orient: vertical; -webkit-line-clamp: 3; } .book-card-meta, .book-card-actions, .section-heading, .reader-topbar { display: flex; align-items: center; gap: 10px; } .book-card-actions, .section-heading { justify-content: space-between; } .book-card-actions { flex-wrap: wrap; justify-content: flex-start; } .book-card-actions .ghost-button, .book-card-actions .primary-button { flex: 1 1 86px; min-width: 0; padding-inline: 10px; white-space: nowrap; } .format-pill { padding: 4px 7px; border-radius: 999px; color: #17110d; font-size: 0.72rem; font-weight: 900; background: var(--brass); } .format-pdf { background: var(--lacquer); color: var(--ink); } .continue-grid, .library-list, .job-list { display: grid; gap: 10px; } .continue-tile, .library-list button, .job-list div, .library-table > div { display: grid; gap: 5px; padding: 12px; border: 1px solid var(--line); border-radius: var(--radius); background: rgba(255, 255, 255, 0.035); color: var(--ink); text-align: left; } .library-table > div { grid-template-columns: minmax(0, 1fr) auto auto; align-items: center; } .meter { display: block; width: 100%; height: 8px; overflow: hidden; border-radius: 999px; background: rgba(255, 255, 255, 0.09); } .meter span { display: block; height: 100%; background: linear-gradient(90deg, var(--verdigris), var(--brass)); } .auth-surface { display: grid; grid-template-columns: minmax(0, 1.2fr) minmax(320px, 420px); gap: 24px; min-height: 100vh; padding: 28px; } .auth-hero { display: flex; flex-direction: column; justify-content: end; min-height: calc(100vh - 56px); padding: 28px; border-radius: var(--radius); background: linear-gradient(180deg, rgba(23, 17, 13, 0.12), rgba(23, 17, 13, 0.9)), url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='720' height='960' viewBox='0 0 720 960'%3E%3Crect width='720' height='960' fill='%23261a12'/%3E%3Cpath d='M80 190h560v590H80z' fill='none' stroke='%23d5a84d' stroke-opacity='.38' stroke-width='6'/%3E%3Ccircle cx='360' cy='426' r='112' fill='%232d6f63' fill-opacity='.64'/%3E%3Cpath d='M210 676h300M244 728h232M180 250h360' stroke='%23e8d2a6' stroke-opacity='.36' stroke-width='10'/%3E%3C/svg%3E") center / cover; } .auth-panel { align-self: center; } .stack-form, .admin-form { display: grid; gap: 12px; } label { display: grid; gap: 6px; color: var(--ink-muted); font-size: 0.9rem; } input { min-height: 42px; border: 1px solid var(--line); border-radius: var(--radius); padding: 0 12px; color: var(--ink); background: rgba(0, 0, 0, 0.22); } .full-width { width: 100%; margin-top: 12px; } .error-ribbon { margin: 10px 0; padding: 10px 12px; border: 1px solid rgba(169, 72, 52, 0.72); border-radius: var(--radius); color: #ffd8cf; background: rgba(169, 72, 52, 0.18); } .success-ribbon { margin: 10px 0; padding: 10px 12px; border: 1px solid rgba(45, 111, 99, 0.72); border-radius: var(--radius); color: #d8fff5; background: rgba(45, 111, 99, 0.18); } .initial-admin-box { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 10px; margin: 12px 0; padding: 12px; border: 1px solid rgba(213, 168, 77, 0.45); border-radius: var(--radius); background: rgba(213, 168, 77, 0.12); } .initial-admin-box div { display: grid; gap: 4px; min-width: 0; } .initial-admin-box code { width: max-content; max-width: 100%; overflow-wrap: anywhere; color: var(--brass); } .muted-copy, .initial-admin-box span, .initial-admin-box small { color: var(--ink-muted); } .retry-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 10px 0; color: var(--ink-muted); } .empty-state, .loading-state { display: grid; place-items: center; gap: 8px; min-height: 160px; color: var(--ink-muted); text-align: center; } .specimen-mark { display: grid; place-items: center; width: 42px; height: 42px; border: 1px solid var(--line); border-radius: 999px; color: var(--brass); } .spinner { width: 28px; height: 28px; border: 3px solid rgba(255, 255, 255, 0.13); border-top-color: var(--brass); border-radius: 999px; animation: spin 0.9s linear infinite; } .search-form { display: grid; grid-template-columns: auto minmax(0, 1fr) auto; gap: 10px; align-items: center; } .book-detail { display: grid; grid-template-columns: minmax(220px, 360px) minmax(0, 1fr); gap: 18px; } .book-portrait { min-height: 520px; } .lead { font-size: 1.15rem; } .profile-panel { display: grid; gap: 10px; justify-items: start; } .reader-page { display: grid; gap: 12px; min-height: 100vh; padding: 14px; background: #120e0b; } .reader-topbar { justify-content: space-between; padding: 10px; border: 1px solid var(--line); border-radius: var(--radius); background: rgba(38, 26, 18, 0.84); } .reader-topbar div { display: grid; justify-items: center; } .reader-topbar span { color: var(--ink-muted); font-size: 0.82rem; } .pdf-reader, .epub-reader { display: grid; place-items: center; gap: 10px; min-height: calc(100vh - 120px); } .pdf-reader canvas, .epub-reader iframe { max-width: min(100%, 980px); max-height: calc(100vh - 170px); border: 1px solid var(--line); border-radius: var(--radius); background: #f7f0df; } .epub-reader iframe { width: min(100%, 980px); height: calc(100vh - 170px); } .reader-fallback { display: flex; flex-wrap: wrap; align-items: center; justify-content: center; gap: 10px; padding: 12px; color: var(--ink-muted); } .reader-stepper { display: flex; align-items: center; gap: 12px; } @keyframes spin { to { transform: rotate(360deg); } } @media (max-width: 900px) { .app-shell, .auth-surface, .book-detail { grid-template-columns: 1fr; } .side-rail { position: fixed; inset: auto 0 0; z-index: 10; flex-direction: row; height: auto; padding: 8px; } .side-rail nav { grid-template-columns: repeat(4, 1fr); flex: 1; } .side-rail nav button span, .brand-button span, .session-chip { display: none; } main { padding: 16px 16px 86px; } .page-grid { grid-template-columns: 1fr; } .span-2, .span-3 { grid-column: 1; } .hero-band { min-height: 220px; align-items: start; flex-direction: column; } .auth-surface { padding: 16px; } .auth-hero { min-height: 360px; } .book-card { grid-template-columns: minmax(72px, 82px) minmax(0, 1fr); } .book-card-actions .ghost-button { display: none; } .library-table > div, .search-form { grid-template-columns: 1fr; } }