:root { font-family: "Trebuchet MS", "Segoe UI", sans-serif; color: #f4efe3; background: radial-gradient(circle at top, rgba(177, 91, 29, 0.25), transparent 26%), radial-gradient(circle at 20% 20%, rgba(227, 188, 101, 0.12), transparent 18%), linear-gradient(180deg, #160f0b 0%, #0b0807 100%); line-height: 1.5; font-weight: 400; color-scheme: dark; font-synthesis: none; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; } button, input, textarea, select { font: inherit; } #root { min-height: 100vh; } .app-shell { width: min(1200px, calc(100% - 2rem)); margin: 0 auto; padding: 1.5rem 0 3rem; } .hero { display: flex; justify-content: space-between; gap: 1.5rem; align-items: end; padding: 1.75rem; border: 1px solid rgba(255, 231, 196, 0.12); background: linear-gradient(135deg, rgba(62, 34, 17, 0.92), rgba(24, 18, 15, 0.86)), rgba(18, 14, 12, 0.9); box-shadow: 0 24px 80px rgba(0, 0, 0, 0.42); } .eyebrow { margin: 0 0 0.85rem; text-transform: uppercase; letter-spacing: 0.18em; color: #f1ba73; font-size: 0.76rem; } .hero h1 { margin: 0; font-size: clamp(2.6rem, 6vw, 4.8rem); line-height: 0.92; } .lede { width: min(56ch, 100%); margin: 1rem 0 0; color: rgba(244, 239, 227, 0.78); } .hero-actions { display: flex; flex-direction: column; gap: 0.85rem; align-items: flex-end; } .status-chip { display: flex; gap: 0.65rem; align-items: center; padding: 0.75rem 1rem; border: 1px solid rgba(255, 231, 196, 0.12); background: rgba(255, 231, 196, 0.05); text-transform: uppercase; letter-spacing: 0.08em; font-size: 0.78rem; } .status-chip strong { color: #f7d59d; font-size: 0.95rem; } .alert-banner { display: flex; justify-content: space-between; gap: 1rem; align-items: center; margin-top: 1rem; padding: 1rem 1.2rem; border: 1px solid rgba(255, 176, 94, 0.3); background: linear-gradient(90deg, rgba(117, 43, 21, 0.92), rgba(48, 22, 18, 0.92)), rgba(48, 22, 18, 0.92); } .alert-banner-victory { background: linear-gradient(90deg, rgba(45, 93, 54, 0.92), rgba(26, 46, 29, 0.92)), rgba(26, 46, 29, 0.92); border-color: rgba(125, 219, 150, 0.28); } .alert-banner-defeat { background: linear-gradient(90deg, rgba(113, 33, 33, 0.92), rgba(48, 18, 18, 0.92)), rgba(48, 18, 18, 0.92); border-color: rgba(232, 123, 123, 0.3); } .alert-banner-level { background: linear-gradient(90deg, rgba(133, 87, 24, 0.92), rgba(59, 38, 14, 0.92)), rgba(59, 38, 14, 0.92); border-color: rgba(244, 205, 120, 0.32); } .alert-kicker { display: block; color: #ffbf78; text-transform: uppercase; letter-spacing: 0.12em; font-size: 0.74rem; } .alert-banner strong { display: block; margin-top: 0.25rem; font-size: 1.15rem; color: #fff4de; } .alert-banner p { margin: 0.35rem 0 0; color: rgba(244, 239, 227, 0.82); } .dashboard-grid { display: grid; grid-template-columns: repeat(12, minmax(0, 1fr)); gap: 1rem; margin-top: 1rem; } .panel { grid-column: span 4; padding: 1.2rem; border: 1px solid rgba(255, 231, 196, 0.1); background: rgba(25, 19, 16, 0.86); box-shadow: inset 0 1px 0 rgba(255, 231, 196, 0.03); } .panel-highlight { background: linear-gradient(180deg, rgba(101, 52, 28, 0.28), rgba(25, 19, 16, 0.92)), rgba(25, 19, 16, 0.9); } .panel-log { grid-column: span 12; } .panel-saves { grid-column: span 8; } .panel-town-hub { grid-column: span 8; } .panel-header { display: flex; justify-content: space-between; align-items: baseline; gap: 1rem; margin-bottom: 0.75rem; } .panel-header h2 { margin: 0; font-size: 1rem; color: #f8d79f; } .panel-header span { color: rgba(244, 239, 227, 0.58); font-size: 0.83rem; text-transform: uppercase; letter-spacing: 0.08em; } .stat-strip { display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 0.75rem; } .stat-strip div, .encounter-box, .combat-status { padding: 0.9rem; background: rgba(255, 245, 223, 0.04); border: 1px solid rgba(255, 231, 196, 0.08); } .stat-strip span, .encounter-label, .combat-status span, .room-meta span, .log-entry span { display: block; color: rgba(244, 239, 227, 0.56); font-size: 0.76rem; text-transform: uppercase; letter-spacing: 0.08em; } .stat-strip strong, .encounter-box strong, .combat-status strong { display: block; margin-top: 0.3rem; font-size: 1.45rem; color: #fff2d6; } .supporting-text { margin: 0.9rem 0 0; color: rgba(244, 239, 227, 0.76); } .town-summary-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; margin-top: 1rem; } .town-services { display: grid; gap: 0.75rem; margin-top: 1rem; } .recovery-panel { margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid rgba(255, 231, 196, 0.12); } .recovery-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; margin-top: 1rem; } .recovery-card { padding: 1rem; border: 1px solid rgba(255, 231, 196, 0.1); background: rgba(255, 245, 223, 0.04); } .recovery-card strong { display: block; margin-top: 0.25rem; color: #fff2d6; font-size: 1.05rem; } .town-ledger { margin-top: 1.25rem; padding-top: 1.25rem; border-top: 1px solid rgba(255, 231, 196, 0.12); } .town-ledger-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; margin-top: 1rem; } .town-ledger-card { padding: 1rem; border: 1px solid rgba(255, 231, 196, 0.1); background: rgba(255, 245, 223, 0.04); } .town-ledger-card h3 { margin: 0 0 0.75rem; color: #fff2d6; font-size: 1.05rem; } .town-service-card { display: flex; justify-content: space-between; gap: 1rem; align-items: center; padding: 1rem; border: 1px solid rgba(255, 231, 196, 0.1); background: rgba(255, 245, 223, 0.04); } .town-service-card strong { display: block; margin-top: 0.25rem; color: #fff2d6; font-size: 1.05rem; } .room-title { margin: 0 0 0.35rem; font-size: 1.5rem; color: #fff2d6; } .room-meta { display: flex; flex-wrap: wrap; gap: 0.9rem; margin-top: 0.95rem; } .button-row, .enemy-actions { display: flex; flex-wrap: wrap; gap: 0.65rem; margin-top: 1rem; } .treasure-row { display: flex; justify-content: space-between; gap: 1rem; align-items: center; padding: 0.75rem 0; border-top: 1px solid rgba(255, 231, 196, 0.08); } .treasure-row:first-of-type { border-top: 0; padding-top: 0; } .treasure-actions { display: flex; gap: 0.5rem; flex-wrap: wrap; } .button { border: 1px solid rgba(255, 217, 163, 0.24); background: rgba(255, 245, 223, 0.04); color: #f4efe3; padding: 0.72rem 1rem; cursor: pointer; transition: transform 140ms ease, background 140ms ease, border-color 140ms ease; } .button:hover:enabled { transform: translateY(-1px); background: rgba(255, 217, 163, 0.09); border-color: rgba(255, 217, 163, 0.35); } .button:disabled { opacity: 0.42; cursor: not-allowed; } .button-primary { background: linear-gradient(180deg, #c36b2d, #8d4617); border-color: rgba(255, 217, 163, 0.32); color: #fff4e1; } .button-primary:hover:enabled { background: linear-gradient(180deg, #d97833, #9f501b); } .encounter-box, .combat-status { margin-top: 1rem; } .combat-summary-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 0.75rem; margin-top: 1rem; } .combat-feed { display: grid; gap: 0.75rem; margin-top: 1rem; } .move-list, .mini-map, .enemy-list, .save-list { display: grid; gap: 0.75rem; } .mini-map, .enemy-list { margin-top: 1rem; } .move-card, .map-node, .enemy-card, .save-card { width: 100%; text-align: left; padding: 0.95rem; border: 1px solid rgba(255, 231, 196, 0.08); background: rgba(255, 245, 223, 0.04); } .move-card { cursor: pointer; transition: transform 140ms ease, background 140ms ease, border-color 140ms ease; } .move-card:hover:enabled { transform: translateY(-1px); background: rgba(255, 217, 163, 0.09); border-color: rgba(255, 217, 163, 0.35); } .move-card:disabled { opacity: 0.42; cursor: not-allowed; } .move-card span, .map-node span { display: block; color: rgba(244, 239, 227, 0.56); font-size: 0.74rem; text-transform: uppercase; letter-spacing: 0.08em; } .move-card strong, .map-node strong, .enemy-card strong { display: block; margin-top: 0.3rem; font-size: 1rem; color: #fff2d6; } .move-card em, .enemy-card span, .save-card span { display: block; margin-top: 0.3rem; font-style: normal; color: rgba(244, 239, 227, 0.7); } .save-card strong { display: block; margin-top: 0.3rem; font-size: 1rem; color: #fff2d6; } .save-actions { display: flex; gap: 0.5rem; margin-top: 1rem; flex-wrap: wrap; } .map-node-active { border-color: rgba(243, 186, 115, 0.55); background: rgba(243, 186, 115, 0.12); } .log-list { display: grid; gap: 0.75rem; max-height: 340px; overflow: auto; padding-right: 0.2rem; } .log-entry { padding: 0.9rem; border-left: 3px solid rgba(243, 186, 115, 0.7); background: rgba(255, 245, 223, 0.04); } .log-entry p { margin: 0.35rem 0 0; color: #f4efe3; } @media (max-width: 980px) { .panel, .panel-log { grid-column: span 12; } } @media (max-width: 720px) { .app-shell { width: min(100% - 1rem, 1200px); padding-top: 0.75rem; } .hero, .alert-banner { flex-direction: column; align-items: stretch; } .hero-actions { align-items: stretch; } .stat-strip { grid-template-columns: repeat(2, minmax(0, 1fr)); } .combat-summary-grid, .town-summary-grid { grid-template-columns: 1fr; } .town-service-card { flex-direction: column; align-items: stretch; } .recovery-grid, .town-ledger-grid { grid-template-columns: 1fr; } .treasure-row { flex-direction: column; align-items: stretch; } }