/* Paper-white research-tool palette. */ :root { --bg: #ffffff; --panel: #ffffff; --panel-2: #f7f8fa; --panel-3: #eef1f5; --border: #dfe3e9; --border-strong: #c3cad4; --text: #14181f; --text-dim: #5f6b7a; --text-faint: #8b95a3; --accent: #1d5fd0; --accent-soft: #e8effc; --green: #1f7a45; --green-bg: #e2f3e9; --green-border: #a9d8bd; --red: #b3392f; --red-bg: #fbe9e7; --red-border: #eebbb5; --amber: #9a6a10; --amber-bg: #fdf2dc; --mono: 'SF Mono', ui-monospace, 'Cascadia Code', Menlo, Consolas, monospace; color-scheme: light; } * { box-sizing: border-box; } html, body { margin: 0; background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif; line-height: 1.55; font-size: 15px; -webkit-font-smoothing: antialiased; } h1, h2, h3 { line-height: 1.25; font-weight: 650; } button { font: inherit; color: var(--text); background: #fff; border: 1px solid var(--border-strong); border-radius: 6px; padding: 6px 12px; cursor: pointer; transition: background 0.12s, border-color 0.12s; } button:hover:not(:disabled) { background: var(--panel-2); border-color: var(--accent); } button:disabled { opacity: 0.4; cursor: not-allowed; } button.primary { background: var(--accent); color: #fff; border-color: var(--accent); font-weight: 600; } button.primary:hover:not(:disabled) { background: #1a54ba; border-color: #1a54ba; } input, textarea, select { font: inherit; color: var(--text); background: #fff; border: 1px solid var(--border-strong); border-radius: 6px; padding: 6px 9px; } input:focus, textarea:focus, select:focus { outline: 2px solid var(--accent-soft); border-color: var(--accent); } textarea { width: 100%; resize: vertical; } input[type='range'] { padding: 0; border: none; accent-color: var(--accent); } code, .mono { font-family: var(--mono); font-size: 0.86em; } .panel { background: var(--panel); border: 1px solid var(--border); border-radius: 10px; padding: 14px 16px; } .dim { color: var(--text-dim); } .small { font-size: 12.5px; } .badge { display: inline-block; padding: 0 8px; border-radius: 999px; font-size: 11.5px; border: 1px solid var(--border-strong); color: var(--text-dim); background: var(--panel-2); white-space: nowrap; } .badge.ok { color: var(--green); border-color: var(--green-border); background: var(--green-bg); } .badge.bad { color: var(--red); border-color: var(--red-border); background: var(--red-bg); } .badge.warn { color: var(--amber); border-color: #e6cd94; background: var(--amber-bg); } /* token classification */ .tok-green { background: var(--green-bg); box-shadow: inset 0 -2px 0 var(--green-border); border-radius: 2px; } .tok-red { background: var(--red-bg); box-shadow: inset 0 -2px 0 var(--red-border); border-radius: 2px; } .tok-neutral { background: var(--panel-3); border-radius: 2px; } .tok-skip { opacity: 0.5; text-decoration: underline dotted; } /** * Any box showing generated text. Fixed height rather than max-height so the * baseline and the watermarked output line up whatever their lengths are — * the two panels are meant to be read against each other. */ :root { --text-box-h: 268px; } .text-box { height: var(--text-box-h); overflow-y: auto; border: 1px solid var(--border); border-radius: 8px; background: var(--panel-2); padding: 10px 12px; margin: 0; white-space: pre-wrap; font-size: 14px; line-height: 1.9; } .text-box.plain { background: #fff; } /** Sentence-list variant: same footprint, but the children lay themselves out. */ .text-box.list { white-space: normal; line-height: 1.55; display: flex; flex-direction: column; gap: 5px; list-style: none; padding: 8px; } /* Keep rows at their natural size instead of squashing them to fit. */ .text-box.list > * { flex: 0 0 auto; } table.data { width: 100%; border-collapse: collapse; font-size: 13px; } table.data th, table.data td { text-align: left; padding: 5px 9px; border-bottom: 1px solid var(--border); } table.data th { color: var(--text-dim); font-weight: 550; background: var(--panel-2); } table.data tr.hl { background: var(--accent-soft); } /* caret hint for the seed input that invites the user to type */ @keyframes caret-pulse { 0%, 100% { box-shadow: 0 0 0 0 rgba(29, 95, 208, 0.35); } 50% { box-shadow: 0 0 0 5px rgba(29, 95, 208, 0); } } .awaiting-input { animation: caret-pulse 1.4s ease-in-out infinite; border-color: var(--accent) !important; }