/* Cassandra — log panel, log page layout, calendar widget, chat sidebar. */ /* --- Log panel -------------------------------------------------------- */ .log-content { font-family: var(--font-sans); padding: 28px clamp(20px, 4vw, 56px) 32px; font-size: 15.5px; line-height: 1.72; color: var(--text); max-width: 76ch; margin: 0 auto; max-height: calc(100vh - 240px); overflow-y: auto; } .log-content p { margin: 0 0 1.1em; } .log-content h1, .log-content h2, .log-content h3, .log-content h4 { font-family: var(--font-mono); color: var(--accent); text-transform: uppercase; letter-spacing: 0.08em; font-size: 12px; margin-top: 1.8em; margin-bottom: 0.5em; font-weight: 700; } .log-content h1:first-child, .log-content h2:first-child, .log-content h3:first-child { margin-top: 0; } /* TL;DR callout — model is instructed to put it first, so style the first * heading + paragraph block as a callout. */ .log-content h3:first-of-type { font-size: 11px; color: var(--accent); border-left: 3px solid var(--accent); padding-left: 10px; margin-bottom: 0; } .log-content h3:first-of-type + p { font-size: 16.5px; line-height: 1.6; color: var(--text); border-left: 3px solid var(--accent); padding: 4px 14px 12px; margin: 0 0 1.8em; background: color-mix(in srgb, var(--accent) 5%, transparent); font-weight: 500; } .log-content strong { color: var(--text); font-weight: 700; } .log-content em { color: var(--muted); font-style: italic; } .log-content ul, .log-content ol { padding-left: 1.4em; margin: 0 0 1.1em; } .log-content li { margin-bottom: 0.4em; } .log-content hr { border: 0; border-top: 1px solid var(--border); margin: 1.6em 0; } /* --- Log page (calendar + log + chat sidebar) ------------------------- */ .log-page__body { display: grid; grid-template-columns: 220px 1fr 320px; gap: 1px; background: var(--border); } @media (max-width: 1100px) { .log-page__body { grid-template-columns: 1fr; } } .log-page__cal, .log-page__content, .log-page__chat { background: var(--surface); } .log-page__cal { padding: 10px; } .log-page__content { min-height: 60vh; } .log-page__chat { padding: 8px; min-height: 60vh; display: flex; flex-direction: column; } .log-page__chat--locked { opacity: 0.92; } .chat-locked { flex: 1; display: flex; flex-direction: column; justify-content: center; align-items: center; text-align: center; gap: 16px; padding: 24px 18px; color: var(--muted); font-size: 13px; line-height: 1.55; border: 1px dashed var(--border); border-radius: 4px; margin: 8px 4px; } .chat-locked p { margin: 0; max-width: 280px; } .chat-locked strong { color: var(--text); display: block; margin-bottom: 6px; } /* --- Calendar widget --------------------------------------------------- */ .cal__nav { display: flex; justify-content: space-between; align-items: center; margin-bottom: 8px; font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; } .cal__title { color: var(--accent); font-weight: 700; } .cal__btn { background: transparent; color: var(--muted); border: 1px solid var(--border); padding: 2px 8px; cursor: pointer; font-family: inherit; font-size: 13px; } .cal__btn:hover { color: var(--accent); border-color: var(--accent); } .cal__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 1px; background: var(--border); border: 1px solid var(--border); } .cal__h { text-align: center; font-size: 9px; color: var(--dim); background: var(--surface-2); padding: 3px 0; text-transform: uppercase; } .cal__d { background: var(--surface); border: 0; color: var(--muted); font-family: inherit; font-size: 11px; padding: 6px 0; text-align: center; cursor: not-allowed; } .cal__d--empty { background: var(--bg); cursor: default; } .cal__d--has-log { color: var(--text); cursor: pointer; position: relative; } .cal__d--has-log::after { content: ""; position: absolute; bottom: 3px; left: 50%; transform: translateX(-50%); width: 3px; height: 3px; border-radius: 50%; background: var(--accent); } .cal__d--has-log:hover { background: color-mix(in srgb, var(--accent) 10%, transparent); } .cal__d--today { color: var(--warning); } .cal__d--selected { background: var(--accent); color: var(--bg); font-weight: 700; } .cal__d--selected::after { background: var(--bg); } /* --- Chat sidebar ----------------------------------------------------- */ .chat-header { border-bottom: 1px solid var(--border); padding: 6px 4px 8px; margin-bottom: 6px; display: flex; flex-direction: column; } .chat-title { color: var(--accent); font-weight: 700; text-transform: uppercase; letter-spacing: 0.1em; font-size: 11px; } .chat-title::before { content: "▸ "; } .chat-hint { color: var(--dim); font-size: 10px; margin-top: 2px; } .chat-thread { flex: 1 1 auto; overflow-y: auto; padding: 4px 2px; display: flex; flex-direction: column; gap: 8px; min-height: 0; } .chat-msg { font-family: var(--font-sans); font-size: 13.5px; padding: 9px 11px; border: 1px solid var(--border); line-height: 1.6; word-wrap: break-word; } .chat-msg--system { color: var(--muted); font-size: 12px; background: transparent; border-style: dashed; font-family: var(--font-mono); } .chat-msg--user { background: var(--user-bubble-bg); border-color: var(--accent); color: var(--text); align-self: flex-end; max-width: 92%; white-space: pre-wrap; } .chat-msg--user::before { content: "you › "; font-family: var(--font-mono); color: var(--accent); opacity: 0.7; font-size: 10px; } .chat-msg--assistant { background: var(--surface-2); color: var(--text); } .chat-msg--assistant::before { content: "cassandra › "; font-family: var(--font-mono); color: var(--accent); opacity: 0.7; font-size: 10px; } .chat-msg--pending { color: var(--dim); font-style: italic; } .chat-msg--error { color: var(--negative); border-color: var(--negative); } .chat-msg p { margin: 0.4em 0; } .chat-msg p:first-child { margin-top: 0; } .chat-msg p:last-child { margin-bottom: 0; } .chat-msg h2, .chat-msg h3, .chat-msg h4 { font-family: var(--font-mono); color: var(--accent); font-size: 11px; margin: 0.8em 0 0.3em; text-transform: uppercase; letter-spacing: 0.06em; } .chat-msg strong { color: var(--text); font-weight: 700; } .chat-msg em { color: var(--muted); font-style: italic; } .chat-form { border-top: 1px solid var(--border); padding-top: 6px; display: flex; gap: 6px; align-items: flex-end; } .chat-form textarea { flex: 1; background: var(--bg); border: 1px solid var(--border); color: var(--text); font-family: inherit; font-size: 12px; padding: 6px 8px; resize: vertical; min-height: 36px; outline: none; } .chat-form textarea:focus { border-color: var(--accent); } .chat-form button { background: transparent; border: 1px solid var(--accent); color: var(--accent); font-family: inherit; font-size: 11px; padding: 6px 12px; text-transform: uppercase; letter-spacing: 0.08em; cursor: pointer; } .chat-form button:hover:not(:disabled) { background: var(--accent); color: var(--bg); } .chat-form button:disabled { opacity: 0.4; cursor: not-allowed; } /* --- Mobile (≤480px) -------------------------------------------------- */ @media (max-width: 480px) { /* Trim horizontal padding so the markdown column uses the screen width. The existing 1100px rule already capped the column at 76ch; we just shave the surrounding gutter. */ .log-content { padding: 0 4px; font-size: 13.5px; } .log-content h2 { font-size: 16px; } .log-content h3 { font-size: 14px; } /* Chat bubbles edge-to-edge so the conversation reads like a mobile messenger thread. */ .chat-msg { max-width: 100%; padding: 8px 10px; font-size: 13px; } .chat-msg--user { margin-right: 0; } .chat-msg--assistant { margin-left: 0; } /* Chat input row stacks: textarea full-width, button below. */ .chat-form { flex-direction: column; gap: 6px; padding: 8px; } .chat-form textarea { width: 100%; min-height: 56px; font-size: 14px; /* avoids iOS Safari zoom-on-focus */ } .chat-form button { width: 100%; padding: 10px; font-size: 12px; } .chat-header { padding: 8px 10px; } .chat-title { font-size: 12px; } .chat-hint { font-size: 10px; } }