PlotDirector/PlotLine/wwwroot/css/word-companion.css

1133 lines
22 KiB
CSS

:root {
--companion-ink: #2d241d;
--companion-muted: #7b7168;
--companion-paper: #f8f1e6;
--companion-panel: #fffaf2;
--companion-line: #e1d3bf;
--companion-accent: #6f4b2d;
--companion-accent-dark: #4a321f;
--companion-gold: #b68a46;
--companion-soft: #f3eadc;
--companion-soft-strong: #ead9c1;
}
* {
box-sizing: border-box;
}
[hidden] {
display: none !important;
}
body {
margin: 0;
min-width: 280px;
color: var(--companion-ink);
background: var(--companion-paper);
font-family: "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
}
.word-companion-login-body {
min-width: 280px;
}
.word-companion-login-shell {
display: grid;
align-content: start;
gap: 12px;
width: 100%;
max-width: 420px;
padding: 14px 12px;
}
.word-companion-login-header {
display: grid;
gap: 2px;
border-bottom: 1px solid var(--companion-line);
padding-bottom: 9px;
}
.word-companion-login-header h1 {
margin: 0;
color: var(--companion-accent-dark);
font-size: 1.22rem;
line-height: 1.1;
}
.word-companion-login-header p {
margin: 0;
color: var(--companion-muted);
font-size: 0.82rem;
font-weight: 800;
text-transform: uppercase;
}
.word-companion-login-card,
.word-companion-login-alert {
border: 1px solid var(--companion-line);
border-radius: 10px;
background: var(--companion-panel);
box-shadow: 0 2px 8px rgba(74, 50, 31, 0.08);
}
.word-companion-login-card {
padding: 14px;
}
.word-companion-login-alert {
padding: 10px;
color: var(--companion-accent-dark);
font-size: 0.86rem;
}
.word-companion-login-form {
display: grid;
gap: 10px;
}
.word-companion-login-form div {
display: grid;
gap: 4px;
}
.word-companion-login-form label {
color: var(--companion-muted);
font-size: 0.74rem;
font-weight: 800;
text-transform: uppercase;
}
.word-companion-login-form input[type="email"],
.word-companion-login-form input[type="password"],
.word-companion-login-form input:not([type]) {
width: 100%;
min-height: 34px;
border: 1px solid var(--companion-line);
border-radius: 6px;
padding: 7px 8px;
background: #fffdf8;
color: var(--companion-ink);
font: inherit;
}
.word-companion-login-form span {
color: #8f3528;
font-size: 0.76rem;
}
.word-companion-login-check {
display: flex !important;
align-items: center;
gap: 7px;
color: var(--companion-ink) !important;
font-size: 0.84rem !important;
font-weight: 600 !important;
text-transform: none !important;
}
.word-companion-login-check input {
width: 16px;
height: 16px;
margin: 0;
accent-color: var(--companion-accent);
}
.word-companion-login-form button {
min-height: 36px;
border: 1px solid var(--companion-accent);
border-radius: 8px;
background: linear-gradient(180deg, #7b5432 0%, var(--companion-accent-dark) 100%);
color: #fff9ef;
font: inherit;
font-size: 0.9rem;
font-weight: 800;
}
.word-companion-login-links {
display: grid;
gap: 6px;
border-top: 1px solid var(--companion-line);
padding-top: 9px;
}
.word-companion-login-links a {
color: var(--companion-accent-dark);
font-size: 0.84rem;
font-weight: 700;
text-decoration: none;
}
.word-companion-login-validation:empty {
display: none;
}
.word-companion-shell {
display: grid;
align-content: start;
gap: 9px;
width: 100%;
max-width: 420px;
padding: 10px 11px;
}
.word-companion-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 10px;
border-bottom: 1px solid var(--companion-line);
padding-bottom: 7px;
}
.word-companion-eyebrow {
margin: 0;
color: var(--companion-accent-dark);
font-size: 0.72rem;
font-weight: 800;
letter-spacing: 0.08em;
text-transform: uppercase;
}
.word-companion-header h1 {
margin: 0;
font-size: 1.12rem;
line-height: 1.1;
color: var(--companion-accent-dark);
}
.word-companion-status,
.word-companion-user,
.word-companion-message,
.word-companion-footer {
margin: 0;
color: var(--companion-muted);
font-size: 0.82rem;
}
.word-companion-status {
color: var(--companion-accent-dark);
font-weight: 700;
}
.word-companion-sign-in {
display: inline-flex;
align-items: center;
justify-content: center;
width: fit-content;
border: 1px solid var(--companion-accent);
border-radius: 6px;
padding: 6px 10px;
background: var(--companion-accent);
color: #ffffff;
font-size: 0.88rem;
font-weight: 700;
text-decoration: none;
}
.word-companion-signed-out {
display: grid;
gap: 12px;
border: 1px solid var(--companion-line);
border-radius: 10px;
padding: 16px;
background: var(--companion-panel);
box-shadow: 0 2px 8px rgba(74, 50, 31, 0.08);
}
.word-companion-signed-out p {
margin: 0;
color: var(--companion-ink);
font-size: 0.94rem;
line-height: 1.35;
}
.word-companion-signed-out ul {
display: grid;
gap: 5px;
margin: 0;
padding-left: 18px;
color: var(--companion-muted);
font-size: 0.88rem;
}
.word-companion-sign-in-primary {
width: 100%;
min-height: 36px;
border-radius: 8px;
font-size: 0.9rem;
}
.word-companion-tabs {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(0, 1fr));
gap: 3px;
border: 1px solid var(--companion-line);
border-radius: 9px;
padding: 3px;
background: #fff7eb;
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.75);
}
.word-companion-tabs button {
min-width: 0;
height: 28px;
min-height: 28px;
border: 1px solid transparent;
border-radius: 7px;
background: transparent;
color: var(--companion-muted);
font: inherit;
font-size: 0.68rem;
font-weight: 700;
line-height: 1;
padding: 0 4px;
white-space: nowrap;
}
.word-companion-tabs button.is-active {
border-color: rgba(111, 75, 45, 0.3);
background: var(--companion-soft-strong);
color: var(--companion-accent-dark);
font-weight: 900;
box-shadow: none;
}
.word-companion-tab-panel {
display: grid;
align-content: start;
gap: 8px;
}
.word-companion-section {
display: grid;
gap: 7px;
border: 1px solid var(--companion-line);
border-radius: 8px;
padding: 9px;
background: var(--companion-panel);
box-shadow: 0 1px 2px rgba(74, 50, 31, 0.05);
}
.word-companion-section span,
.word-companion-section label,
.word-companion-summary span {
color: var(--companion-muted);
font-size: 0.76rem;
font-weight: 800;
text-transform: uppercase;
}
.word-companion-section label {
display: block;
}
.word-companion-section select,
.word-companion-section input[type="text"] {
width: 100%;
min-height: 34px;
border: 1px solid var(--companion-line);
border-radius: 6px;
padding: 6px 8px;
background: #fffdf8;
color: var(--companion-ink);
font: inherit;
}
.word-companion-connection {
grid-template-columns: 1fr;
gap: 9px;
}
.word-companion-linked-card {
gap: 4px;
padding: 8px 9px;
}
.word-companion-linked-card div {
display: grid;
gap: 2px;
}
.word-companion-linked-card strong {
color: var(--companion-accent-dark);
font-size: 0.94rem;
line-height: 1.2;
}
.word-companion-linked-card p {
margin: 0;
color: #2f6b45;
font-size: 0.8rem;
font-weight: 800;
}
.word-companion-first-run {
gap: 10px;
}
.word-companion-inline-create {
display: grid;
gap: 5px;
}
.word-companion-inline-create > div {
display: grid;
grid-template-columns: 1fr auto;
gap: 6px;
}
.word-companion-inline-create button {
min-height: 34px;
border: 1px solid var(--companion-accent);
border-radius: 6px;
padding: 6px 9px;
background: var(--companion-accent);
color: #fff9ef;
font: inherit;
font-size: 0.8rem;
font-weight: 800;
}
.word-companion-inline-create button:disabled {
border-color: var(--companion-line);
background: var(--companion-soft);
color: var(--companion-muted);
}
.word-companion-import-summary {
display: grid;
gap: 7px;
border-top: 1px solid var(--companion-line);
padding-top: 9px;
}
.word-companion-import-summary dl {
display: grid;
grid-template-columns: 1fr auto;
gap: 5px 10px;
margin: 0;
}
.word-companion-import-summary dt {
color: var(--companion-muted);
font-size: 0.76rem;
font-weight: 800;
text-transform: uppercase;
}
.word-companion-import-summary dd {
margin: 0;
color: var(--companion-ink);
font-weight: 800;
text-align: right;
}
.word-companion-character-discovery {
display: grid;
gap: 8px;
border-top: 1px solid var(--companion-line);
padding-top: 9px;
}
.word-companion-character-candidates {
display: grid;
align-content: start;
gap: 7px;
grid-auto-rows: max-content;
max-height: min(260px, 42vh);
overflow-y: auto;
overflow-x: hidden;
padding-right: 2px;
}
.word-companion-section .word-companion-character-candidate {
display: flex;
align-items: flex-start;
gap: 9px;
min-height: 42px;
border: 1px solid rgba(111, 75, 45, 0.18);
border-radius: 6px;
padding: 7px 8px;
background: #fffdf8;
}
.word-companion-character-candidate input {
flex: 0 0 auto;
width: 16px;
height: 16px;
margin: 2px 0 0;
accent-color: var(--companion-accent);
}
.word-companion-section .word-companion-character-candidate-text {
display: grid;
gap: 2px;
min-width: 0;
color: var(--companion-ink);
font-size: inherit;
font-weight: inherit;
overflow-wrap: anywhere;
text-transform: none;
}
.word-companion-section .word-companion-character-candidate strong {
color: var(--companion-ink);
font-size: 0.92rem;
line-height: 1.2;
text-transform: none;
}
.word-companion-section .word-companion-character-candidate em {
color: var(--companion-muted);
font-size: 0.76rem;
font-style: normal;
font-weight: 700;
line-height: 1.25;
text-transform: none;
}
.word-companion-connection .word-companion-message {
grid-column: auto;
}
.word-companion-section select:disabled {
background: var(--companion-soft);
color: var(--companion-muted);
}
.word-companion-section-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: 7px;
}
.word-companion-header-actions {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
gap: 5px;
}
.word-companion-section-header button {
min-height: 28px;
border: 1px solid var(--companion-accent);
border-radius: 6px;
padding: 4px 7px;
background: var(--companion-accent);
color: #fff9ef;
font: inherit;
font-size: 0.74rem;
font-weight: 700;
}
.word-companion-actions button:disabled,
.word-companion-section-header button:disabled {
border-color: var(--companion-line);
background: var(--companion-soft);
color: var(--companion-muted);
}
.word-companion-actions {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 7px;
}
.word-companion-actions button {
min-height: 31px;
border: 1px solid var(--companion-accent);
border-radius: 6px;
padding: 6px 8px;
background: #fffdf8;
color: var(--companion-accent-dark);
font: inherit;
font-size: 0.8rem;
font-weight: 800;
}
.word-companion-actions .word-companion-primary-action {
background: linear-gradient(180deg, #7b5432 0%, var(--companion-accent-dark) 100%);
color: #fff9ef;
}
.word-companion-link-groups .word-companion-section-header button,
.word-companion-structure-preview .word-companion-section-header button {
min-height: 27px;
padding: 4px 7px;
font-size: 0.72rem;
}
.word-companion-actions button:disabled {
border-color: var(--companion-line);
background: var(--companion-soft);
color: var(--companion-muted);
}
.word-companion-current-scene > button {
min-height: 34px;
border: 1px solid var(--companion-line);
border-radius: 6px;
padding: 6px 8px;
background: #ffffff;
color: var(--companion-accent-dark);
font: inherit;
font-size: 0.84rem;
font-weight: 800;
}
.word-companion-current-scene > button:disabled {
background: var(--companion-soft);
color: var(--companion-muted);
}
.word-companion-current-scene > .word-companion-danger-action {
border-color: #fecaca;
color: #b91c1c;
}
.word-companion-current-scene > .word-companion-danger-action:hover:not(:disabled) {
border-color: #ef4444;
background: #fef2f2;
}
.word-companion-maintenance .word-companion-danger-action {
border-color: #fecaca;
color: #b91c1c;
}
.word-companion-maintenance .word-companion-danger-action:hover:not(:disabled) {
border-color: #ef4444;
background: #fef2f2;
}
.word-companion-message:empty {
display: none;
}
.word-companion-section strong {
min-width: 0;
font-size: 0.96rem;
overflow-wrap: anywhere;
}
.word-companion-scene-card,
.word-companion-structure-grid,
.word-companion-metrics {
display: grid;
gap: 8px;
}
.word-companion-scene-card {
border: 1px solid rgba(111, 75, 45, 0.2);
border-radius: 8px;
padding: 10px;
background: var(--companion-soft);
}
.word-companion-scene-summary {
gap: 8px;
}
.word-companion-title-row strong {
color: var(--companion-accent-dark);
font-size: 1rem;
line-height: 1.25;
}
.word-companion-badges {
display: flex;
flex-wrap: wrap;
gap: 6px;
}
.word-companion-badge {
display: inline-flex;
align-items: center;
gap: 4px;
width: fit-content;
min-height: 24px;
border: 1px solid rgba(111, 75, 45, 0.24);
border-radius: 999px;
padding: 3px 8px;
background: #fffaf2;
color: var(--companion-accent-dark) !important;
font-size: 0.74rem !important;
font-weight: 800 !important;
text-transform: none !important;
}
.word-companion-badge strong {
color: var(--companion-accent-dark);
font-size: inherit;
}
.word-companion-link-context {
margin: -2px 0 2px;
border: 1px solid rgba(111, 75, 45, 0.16);
border-radius: 6px;
padding: 7px 8px;
background: var(--companion-soft);
color: var(--companion-accent-dark);
font-size: 0.82rem;
font-weight: 700;
}
.word-companion-scene-card div,
.word-companion-sync-meta div,
.word-companion-structure-grid div,
.word-companion-diagnostics-grid div,
.word-companion-metrics div {
display: grid;
gap: 2px;
}
.word-companion-metrics {
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 7px;
}
.word-companion-metrics div {
border: 1px solid rgba(111, 75, 45, 0.16);
border-radius: 6px;
padding: 7px;
background: #fffdf8;
}
.word-companion-metrics strong {
color: var(--companion-accent-dark);
font-size: 0.91rem;
}
.word-companion-sync-meta {
display: grid;
gap: 8px;
grid-template-columns: 1fr 1fr;
}
.word-companion-diagnostics-grid {
display: grid;
gap: 8px;
grid-template-columns: 1fr 1fr;
}
.word-companion-diagnostics-grid strong {
font-size: 0.88rem;
}
.word-companion-resolve-diagnostics,
.word-companion-scene-details,
.word-companion-link-groups {
display: grid;
gap: 7px;
}
.word-companion-resolve-diagnostics div,
.word-companion-scene-details div,
.word-companion-link-groups div {
display: grid;
gap: 3px;
}
.word-companion-review-group {
display: grid;
gap: 7px;
border: 1px solid rgba(111, 75, 45, 0.16);
border-radius: 7px;
padding: 8px;
background: #fffdf8;
}
.word-companion-review-group summary {
cursor: pointer;
color: var(--companion-accent-dark);
font-size: 0.9rem;
font-weight: 800;
}
.word-companion-review-group:not([open]) > :not(summary) {
display: none !important;
}
.word-companion-review-group label {
margin-top: 6px;
}
.word-companion-resolve-diagnostics {
padding-top: 4px;
grid-template-columns: repeat(2, minmax(0, 1fr));
gap: 5px 7px;
}
.word-companion-resolve-diagnostics div {
min-width: 0;
border-bottom: 1px solid rgba(225, 211, 191, 0.6);
padding-bottom: 4px;
}
.word-companion-resolve-diagnostics strong {
color: var(--companion-ink);
font-size: 0.8rem;
line-height: 1.25;
}
.word-companion-resolve-diagnostics span {
font-size: 0.68rem;
letter-spacing: 0.01em;
}
.word-companion-progress-sync {
display: grid;
gap: 8px;
border-top: 1px solid var(--companion-line);
padding-top: 8px;
}
.word-companion-progress-grid {
display: grid;
gap: 8px;
}
.word-companion-progress-grid div {
display: grid;
gap: 3px;
}
.word-companion-progress-grid strong {
font-size: 0.88rem;
}
.word-companion-brief {
display: grid;
gap: 5px;
}
.word-companion-brief p {
margin: 0;
border: 1px solid var(--companion-line);
border-radius: 6px;
padding: 9px;
background: var(--companion-soft);
color: var(--companion-ink);
font-size: 0.9rem;
line-height: 1.35;
white-space: pre-wrap;
}
.word-companion-check-list {
display: grid;
gap: 0.75rem;
}
.word-companion-check-item {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: 0.75rem;
min-height: 42px;
border: 1px solid rgba(111, 75, 45, 0.18);
border-radius: 6px;
padding: 0.75rem;
background: #fffdf8;
color: var(--companion-ink);
font-size: 0.9rem;
}
.word-companion-check-item input {
width: 16px;
height: 16px;
margin: 0;
accent-color: var(--companion-accent);
}
.word-companion-check-item span {
color: var(--companion-ink);
font-size: 0.9rem;
font-weight: 600;
text-transform: none;
}
.word-companion-check-item:has(input:disabled) {
background: var(--companion-soft);
color: var(--companion-muted);
}
.word-companion-create-link {
border-color: rgba(182, 138, 70, 0.45);
background: #fff8ec;
}
.word-companion-advanced {
border: 0;
border-top: 1px solid var(--companion-line);
border-radius: 0;
padding: 7px 0 0;
background: transparent;
box-shadow: none;
}
.word-companion-maintenance-actions {
grid-template-columns: 1fr;
}
.word-companion-structure-preview {
border-color: rgba(182, 138, 70, 0.35);
}
.word-companion-preview-groups,
.word-companion-preview-group,
.word-companion-preview-item {
display: grid;
gap: 6px;
}
.word-companion-preview-group {
border-top: 1px solid var(--companion-line);
padding-top: 7px;
}
.word-companion-preview-group:first-child {
border-top: 0;
padding-top: 0;
}
.word-companion-preview-item {
border: 1px solid rgba(111, 75, 45, 0.16);
border-radius: 6px;
padding: 7px;
background: #fffdf8;
}
.word-companion-preview-item span,
.word-companion-preview-matches li {
color: var(--companion-ink);
font-size: 0.86rem;
font-weight: 500;
text-transform: none;
}
.word-companion-preview-matches {
display: grid;
gap: 3px;
}
.word-companion-preview-matches ul {
display: grid;
gap: 3px;
margin: 0;
padding-left: 18px;
}
.word-companion-apply-summary ul {
display: grid;
gap: 4px;
margin: 0;
padding-left: 18px;
}
.word-companion-apply-summary li {
color: var(--companion-ink);
font-size: 0.9rem;
}
.word-companion-dialog {
width: min(360px, calc(100vw - 24px));
border: 1px solid var(--companion-line);
border-radius: 8px;
padding: 12px;
background: var(--companion-panel);
color: var(--companion-ink);
font-family: "Segoe UI", system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
}
.word-companion-dialog::backdrop {
background: rgba(30, 37, 43, 0.28);
}
.word-companion-dialog form {
display: grid;
gap: 8px;
}
.word-companion-dialog strong {
min-width: 0;
overflow-wrap: anywhere;
}
.word-companion-dialog-copy {
margin: 0;
color: var(--companion-muted);
font-size: 0.9rem;
}
.word-companion-dialog-actions {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 8px;
}
.word-companion-dialog input[type="search"] {
width: 100%;
min-height: 36px;
border: 1px solid var(--companion-line);
border-radius: 6px;
padding: 6px 8px;
background: #fffdf8;
color: var(--companion-ink);
font: inherit;
}
.word-companion-dialog button {
min-height: 32px;
border: 1px solid var(--companion-accent);
border-radius: 6px;
padding: 5px 9px;
background: var(--companion-accent);
color: #fff9ef;
font: inherit;
font-size: 0.82rem;
font-weight: 700;
}
.word-companion-dialog button:disabled {
border-color: var(--companion-line);
background: var(--companion-soft);
color: var(--companion-muted);
}
.word-companion-scene-options {
display: grid;
gap: 5px;
max-height: 220px;
overflow-y: auto;
}
.word-companion-scene-option {
display: grid;
grid-template-columns: auto 1fr;
align-items: center;
gap: 7px;
min-height: 32px;
border: 1px solid rgba(111, 75, 45, 0.18);
border-radius: 6px;
padding: 5px 7px;
background: #fffdf8;
color: var(--companion-ink);
font-size: 0.9rem;
}
.word-companion-scene-option input {
width: 16px;
height: 16px;
margin: 0;
accent-color: var(--companion-accent);
}
.word-companion-empty-list {
margin: 0;
color: var(--companion-muted);
font-size: 0.88rem;
}
.word-companion-outline {
display: grid;
gap: 7px;
padding-top: 4px;
}
.word-companion-outline p {
margin: 0;
color: var(--companion-muted);
font-size: 0.9rem;
}
.word-companion-outline-chapter {
display: grid;
gap: 4px;
}
.word-companion-outline-chapter ul {
display: grid;
gap: 3px;
margin: 0;
padding-left: 18px;
}
.word-companion-outline-chapter li {
color: var(--companion-ink);
font-size: 0.9rem;
}
.word-companion-summary {
display: grid;
gap: 8px;
border: 1px solid rgba(111, 75, 45, 0.18);
border-radius: 8px;
padding: 12px;
background: var(--companion-soft);
}
.word-companion-summary div {
display: grid;
gap: 2px;
}
.word-companion-summary strong {
min-width: 0;
font-size: 0.92rem;
overflow-wrap: anywhere;
}
.word-companion-collapsible {
gap: 8px;
background: #fff8ec;
}
.word-companion-collapsible:not([open]) > :not(summary) {
display: none !important;
}
.word-companion-collapsible summary {
cursor: pointer;
color: var(--companion-ink);
font-size: 0.92rem;
font-weight: 800;
list-style-position: outside;
}
.word-companion-collapsible[open] summary {
padding-bottom: 6px;
border-bottom: 1px solid var(--companion-line);
}
.word-companion-collapsible .word-companion-section-header {
padding-top: 4px;
}
.word-companion-footer {
border-top: 1px solid var(--companion-line);
padding-top: 7px;
font-size: 0.76rem;
}
@media (min-width: 390px) {
.word-companion-connection {
grid-template-columns: 1fr 1fr;
}
}
@media (max-width: 340px) {
.word-companion-tabs {
grid-template-columns: repeat(2, minmax(0, 1fr));
}
.word-companion-metrics,
.word-companion-resolve-diagnostics {
grid-template-columns: 1fr;
}
.word-companion-actions {
grid-template-columns: 1fr;
}
}