:root { --paper: #f4efe6; --ink: #23201b; --muted: #776f63; --line: #ddd4c4; --accent: #b4532a; --hl: #f2d9a8; --done: #a39a8c; --card: #fbf8f2; color-scheme: light; } @media (prefers-color-scheme: dark) { :root { --paper: #1b1a17; --ink: #ece6da; --muted: #9b9385; --line: #34312b; --accent: #e0855a; --hl: #4a3b22; --done: #6f685d; --card: #24221e; color-scheme: dark; } } * { box-sizing: border-box; } html, body { margin: 0; background: var(--paper); color: var(--ink); } body { font: 17px/1.5 system-ui, -apple-system, "Segoe UI", Roboto, sans-serif; min-height: 100dvh; display: flex; flex-direction: column; padding-bottom: env(safe-area-inset-bottom); } .hidden { display: none !important; } .top { display: flex; align-items: center; justify-content: space-between; padding: calc(10px + env(safe-area-inset-top)) 16px 8px; position: sticky; top: 0; background: var(--paper); z-index: 5; } .top h1 { font: 600 20px/1 Georgia, "Iowan Old Style", serif; margin: 0; letter-spacing: .01em; } .top-actions { display: flex; gap: 6px; } button { font: inherit; color: inherit; cursor: pointer; border-radius: 999px; } .ghost { background: transparent; border: 1px solid var(--line); padding: 7px 14px; font-size: 15px; } .primary { background: var(--accent); color: #fff; border: 0; padding: 10px 22px; font-weight: 600; } .primary:disabled { opacity: .5; } .danger { color: #b3261e; border-color: #e3b8b4; } .model-bar { margin: 0 16px 8px; font-size: 13px; color: var(--muted); } .model-bar.ready { display: none; } .progress { height: 3px; background: var(--line); border-radius: 2px; margin-top: 5px; overflow: hidden; } .progress > div { height: 100%; width: 0; background: var(--accent); transition: width .2s; } main { flex: 1; padding: 0 16px; } #view-edit { display: flex; flex-direction: column; gap: 10px; height: 100%; } textarea { width: 100%; min-height: 42dvh; resize: vertical; font: 17px/1.55 Georgia, "Iowan Old Style", serif; background: var(--card); color: var(--ink); border: 1px solid var(--line); border-radius: 14px; padding: 14px; } textarea:focus { outline: 2px solid var(--accent); outline-offset: -1px; } .edit-tools { display: flex; gap: 8px; margin-top: -2px; } .edit-actions { display: grid; grid-template-columns: 1fr 1.6fr; gap: 10px; } .edit-actions button { min-height: 48px; } .ghost.small { font-size: 13px; padding: 5px 12px; } .privacy, .note { font-size: 13px; color: var(--muted); margin: 0; } .reader { font: 19px/1.65 Georgia, "Iowan Old Style", serif; max-width: 680px; margin: 0 auto; padding: 4px 0 230px; } .reader p { margin: 0 0 1em; } .reader .c { border-radius: 4px; transition: background .2s, color .2s; cursor: pointer; } .reader .c.played { color: var(--done); } .reader .c.now { background: var(--hl); color: var(--ink); box-decoration-break: clone; -webkit-box-decoration-break: clone; padding: 1px 0; } .player { position: fixed; left: 0; right: 0; bottom: 0; z-index: 10; background: color-mix(in srgb, var(--paper) 92%, transparent); backdrop-filter: blur(8px); border-top: 1px solid var(--line); padding: 10px 16px calc(14px + env(safe-area-inset-bottom)); } .status { font-size: 13px; color: var(--muted); text-align: center; min-height: 1.3em; margin-bottom: 6px; } .controls { display: flex; justify-content: center; align-items: center; gap: 22px; } .round { width: 48px; height: 48px; border: 1px solid var(--line); background: var(--card); font-size: 18px; display: grid; place-items: center; padding: 0; } .round.big { width: 64px; height: 64px; background: var(--accent); color: #fff; border: 0; font-size: 24px; } dialog { border: 0; border-radius: 18px; padding: 0; background: var(--card); color: var(--ink); width: min(420px, 92vw); } dialog::backdrop { background: rgb(0 0 0 / .35); } .settings { display: flex; flex-direction: column; gap: 14px; padding: 20px; } .settings h2 { margin: 0; font: 600 19px Georgia, serif; } .settings label { display: flex; flex-direction: column; gap: 6px; font-size: 14px; color: var(--muted); } .settings select, .settings input[type=range] { font: inherit; color: var(--ink); } .settings select { padding: 9px; border-radius: 10px; border: 1px solid var(--line); background: var(--paper); } .dialog-actions { display: flex; justify-content: flex-end; } .pill { font-size: 12px; padding: 4px 10px; border-radius: 999px; border: 1px solid var(--line); color: var(--muted); align-self: center; white-space: nowrap; } .pill:empty { display: none; } .pill.ok { color: #2f6b3a; border-color: #b9d6bd; background: #eaf4ea; } .pill.off { color: #fff; border-color: transparent; background: #3d5a80; } @media (prefers-color-scheme: dark) { .pill.ok { color: #9fd3a7; border-color: #2f4a33; background: #1d2a1f; } } .ready { border: 1px solid var(--line); border-radius: 14px; padding: 12px 14px; background: var(--card); } .ready-title { font-weight: 600; font-size: 15px; margin-bottom: 6px; } .ready-list { list-style: none; padding: 0; margin: 0 0 8px; display: flex; flex-wrap: wrap; gap: 6px 14px; font-size: 14px; color: var(--muted); } .ready-list li::before { content: '○ '; } .ready-list li.yes { color: var(--ink); } .ready-list li.yes::before { content: '✓ '; color: #2f8a45; font-weight: 700; } .ready-list li.busy::before { content: '… '; } .title-input { font: 600 17px/1.3 Georgia, "Iowan Old Style", serif; color: var(--ink); background: var(--card); border: 1px solid var(--line); border-radius: 12px; padding: 10px 14px; width: 100%; } .title-input:focus { outline: 2px solid var(--accent); outline-offset: -1px; } .export { max-width: 680px; margin: 4px auto 18px; padding: 14px 16px; border-radius: 16px; background: var(--card); border: 1px solid var(--line); display: flex; flex-direction: column; gap: 10px; } .export-head { display: flex; flex-direction: column; gap: 2px; } .export-head strong { font: 600 17px/1.3 Georgia, "Iowan Old Style", serif; } .ex-meta { font-size: 13px; color: var(--muted); } .progress.big { height: 6px; border-radius: 3px; margin: 0; } .export-actions { display: flex; gap: 8px; flex-wrap: wrap; } .export-actions .primary, .export-actions .ghost { flex: 1 1 auto; min-height: 44px; } .export.done { border-color: #b9d6bd; }