:root { color-scheme: light dark; --bg: Canvas; --fg: CanvasText; --panel: color-mix(in srgb, Canvas 92%, CanvasText 8%); --border: color-mix(in srgb, CanvasText 20%, Canvas 80%); --green: #2f8f4e; --red: #b33c3c; --yellow: #b58a00; --blue: #4b7bd0; } body { margin: 0; font-family: sans-serif; background: var(--bg); color: var(--fg); overflow: hidden; } .layout { display: grid; grid-template-columns: 290px 1fr; height: 100vh; overflow: hidden; } .sidebar, .content { padding: 1rem; min-height: 0; } .sidebar { border-right: 1px solid var(--border); background: var(--panel); overflow-y: auto; } .content { min-width: 0; overflow-y: auto; } .sidebar-actions, .create-form { display: flex; gap: 0.5rem; margin-bottom: 1rem; } .sidebar-actions { align-items: center; justify-content: space-between; } .sidebar-actions form { margin: 0; } .sidebar-link { text-decoration: none; color: inherit; padding: 0.4rem 0.6rem; border: 1px solid var(--border); } .sidebar-link.active { outline: 2px solid var(--blue); } .language-form { margin-bottom: 1rem; } .language-form label { display: flex; flex-direction: column; gap: 0.35rem; } .create-form input { flex: 1 1 auto; min-width: 0; } .create-form button { flex: 0 0 auto; } .create-form input, input, textarea, select, button { font: inherit; } .announcement-list { display: flex; flex-direction: column; gap: 0.5rem; } .announcement-entry { display: grid; grid-template-columns: 1fr auto; gap: 0.4rem; align-items: stretch; } .announcement-item { display: block; padding: 0.75rem; border: 1px solid var(--border); text-decoration: none; color: inherit; border-radius: 0.35rem; background: color-mix(in srgb, var(--panel) 94%, CanvasText 6%); } .announcement-item span, .announcement-item small { display: block; } .announcement-title-row { display: flex !important; align-items: center; justify-content: flex-start; gap: 0.35rem; } .status-primary-marker { flex: 0 0 auto; } .status-primary-marker-pinned { width: 0.8rem; height: 0.8rem; display: inline-block; background-color: currentColor; -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M8 3a1 1 0 0 0-1 1v2.2l2 2V11l-4 3v2h6v6l1-1 1-5h6v-2l-4-3V8.2l2-2V4a1 1 0 0 0-1-1H8Z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath d='M8 3a1 1 0 0 0-1 1v2.2l2 2V11l-4 3v2h6v6l1-1 1-5h6v-2l-4-3V8.2l2-2V4a1 1 0 0 0-1-1H8Z'/%3E%3C/svg%3E"); -webkit-mask-repeat: no-repeat; mask-repeat: no-repeat; -webkit-mask-position: center; mask-position: center; -webkit-mask-size: contain; mask-size: contain; } .status-primary-marker-pinned.status-published { color: var(--green); } .status-primary-marker-pinned.status-failed { color: var(--red); } .status-primary-marker-pinned.status-scheduled { color: var(--yellow); } .status-primary-marker-pinned.status-modified { color: var(--blue); } .announcement-title { flex: 1 1 auto; min-width: 0; } .announcement-meta { margin-top: 0.35rem; opacity: 0.8; } .announcement-item.active { outline: 2px solid var(--blue); } .announcement-item:not(.active) { opacity: 0.78; color: color-mix(in srgb, var(--fg) 82%, transparent 18%); } .announcement-item.disabled-nav { opacity: 0.6; pointer-events: none; } .announcement-order-controls { display: flex; flex-direction: column; gap: 0.3rem; } .announcement-order-controls form { margin: 0; } .announcement-order-controls button { width: 2rem; height: 2rem; padding: 0; } .status-symbol { font-size: 1rem; font-weight: 700; line-height: 1; } .status-symbol.status-published { color: var(--green); } .status-symbol.status-failed { color: var(--red); } .status-symbol.status-scheduled { color: var(--yellow); } .status-symbol.status-modified { color: var(--blue); } .status-symbol.status-symbol-incomplete { color: var(--red); } .editor-header { display: flex; justify-content: space-between; align-items: flex-start; gap: 0.75rem; flex-wrap: wrap; margin-bottom: 1rem; } .editor-header h1 { margin: 0 0 0.2rem; } .editor-header p { margin: 0; opacity: 0.8; } .editor-tabs { margin-bottom: 1rem; display: flex; flex-direction: column; } .editor-tab-list { display: flex; gap: 0.2rem; flex-wrap: wrap; margin-bottom: -1px; padding-left: 0.45rem; position: relative; z-index: 1; } .editor-tab-button { position: relative; padding: 0.5rem 0.9rem; border: 1px solid color-mix(in srgb, var(--border) 92%, CanvasText 8%); border-bottom: none; border-radius: 0.6rem 0.6rem 0 0; background: color-mix(in srgb, var(--panel) 88%, Canvas 12%); color: color-mix(in srgb, var(--fg) 82%, transparent 18%); transform: translateY(0.3rem); box-shadow: inset 0 -0.2rem 0 color-mix(in srgb, CanvasText 6%, transparent); cursor: pointer; } .editor-tab-button.active { background: var(--panel); color: var(--fg); transform: translateY(0); box-shadow: none; border-color: var(--border); z-index: 2; } .editor-tab-button.tab-missing { color: var(--red); } .editor-tab-panel[hidden] { display: none; } .editor-tab-panel { border: 1px solid var(--border); border-radius: 0 0.75rem 0.75rem 0.75rem; background: var(--panel); padding: 1rem; } .editor-tab-panel.tab-panel-disabled { opacity: 0.72; } .meta-panel { display: grid; grid-template-columns: minmax(240px, 2fr) minmax(220px, 1.1fr) minmax(180px, 1fr) minmax(220px, 1.1fr); gap: 0.75rem; align-items: start; } .meta-title-field { grid-column: 1; grid-row: 1; } .meta-global-link-preview { grid-column: 1; grid-row: 2; } .warning-text { grid-column: 1 / -1; margin: 0 0 0.25rem; color: var(--red); font-weight: 600; } .meta-panel label, .telegram-target-fields, .meta-stack { display: flex; flex-direction: column; gap: 0.35rem; min-width: 0; } .telegram-target-fields { grid-column: 2; grid-row: 1 / span 2; gap: 0.5rem; } .meta-stack { grid-column: 3; grid-row: 1 / span 2; align-self: stretch; justify-content: space-between; } .meta-schedule-field { grid-column: 4; grid-row: 1; } .meta-delete-service-field { grid-column: 4; grid-row: 2; align-self: start; } .meta-panel label.meta-checkbox { flex-direction: row; align-items: center; gap: 0.5rem; white-space: nowrap; } .meta-panel label.meta-checkbox input[type="checkbox"] { align-self: center; } .top-actions, .image-controls, .image-paste-controls, .format-toolbar { display: flex; gap: 0.35rem; flex-wrap: wrap; } .top-actions, .image-controls, .image-paste-controls { margin-top: 0.5rem; margin-bottom: 0.75rem; } .image-import-modal { position: fixed; inset: 0; display: grid; place-items: center; padding: 1rem; background: color-mix(in srgb, CanvasText 24%, transparent); z-index: 20; } .image-import-modal[hidden] { display: none; } .image-import-dialog { width: min(560px, 100%); display: flex; flex-direction: column; gap: 0.75rem; padding: 1rem; border: 1px solid var(--border); background: var(--panel); box-shadow: 0 18px 48px color-mix(in srgb, CanvasText 24%, transparent); } .image-import-header, .image-import-actions, .telegram-cell-editor, .telegram-cell-actions { display: flex; align-items: center; gap: 0.5rem; flex-wrap: wrap; } .image-import-header, .image-import-actions { justify-content: space-between; } .image-import-header h2, .image-import-help { margin: 0; } .image-import-dialog label { display: flex; flex-direction: column; gap: 0.35rem; } .top-actions { align-items: flex-start; } .top-actions button, .top-actions .button-link { padding: 0.3rem 0.55rem; line-height: 1.2; min-height: 0; white-space: pre-line; } .button-link { display: inline-flex; align-items: center; justify-content: center; border: 1px solid var(--border); color: inherit; text-decoration: none; background: ButtonFace; } .permission-disabled { background-image: linear-gradient( 45deg, transparent calc(50% - 1px), color-mix(in srgb, var(--red) 72%, transparent) calc(50% - 1px), color-mix(in srgb, var(--red) 72%, transparent) calc(50% + 1px), transparent calc(50% + 1px) ), linear-gradient( -45deg, transparent calc(50% - 1px), color-mix(in srgb, var(--red) 72%, transparent) calc(50% - 1px), color-mix(in srgb, var(--red) 72%, transparent) calc(50% + 1px), transparent calc(50% + 1px) ); background-repeat: no-repeat; background-size: 100% 100%; border-color: color-mix(in srgb, var(--red) 60%, var(--border) 40%); } textarea.permission-disabled, input.permission-disabled, select.permission-disabled, button.permission-disabled, .button-link.permission-disabled { background-origin: border-box; } .upload-label { align-self: center; font-size: 0.95rem; } .images-panel > h2 { margin: 0 0 1rem; } .status-box, .images-panel, .language-panel, .instructions-panel, .preview-panel, .pinning-panel { border: 1px solid var(--border); padding: 1rem; margin-bottom: 1rem; } .instruction-section + .instruction-section { margin-top: 1rem; } .language-panel.disabled { opacity: 0.85; } .language-panel.disabled .language-body { display: none; } .image-list { display: flex; flex-wrap: wrap; gap: 0.75rem; } .image-card { display: flex; flex-direction: column; width: 140px; border: 1px solid var(--border); padding: 0.5rem; background: var(--panel); } .image-card img { max-width: 100%; max-height: 140px; width: auto; height: auto; object-fit: contain; display: block; margin: 0 auto 0.5rem; } .move-controls { display: flex; gap: 0.5rem; margin: auto 0 0.5rem; } .move-controls button { flex: 1; } .image-card button { width: 100%; } .status-box { display: flex; flex-wrap: wrap; align-items: flex-end; gap: 0.75rem; font-family: ui-monospace, SFMono-Regular, Consolas, monospace; } .status-box-content { flex: 1 1 24rem; min-width: 0; white-space: pre-wrap; } .status-box > button { margin-left: auto; align-self: flex-end; flex: 0 0 auto; } .telegram-binding-panel h2, .telegram-binding-help { margin: 0 0 0.75rem; } .telegram-binding-body { overflow-x: auto; } .telegram-mapping-table { display: inline-table; width: max-content; border-collapse: collapse; table-layout: fixed; margin-bottom: 0.75rem; } .telegram-mapping-row { border-top: 1px solid color-mix(in srgb, var(--border) 85%, transparent); } .telegram-mapping-table th, .telegram-mapping-table td { padding: 0.55rem 0.65rem; text-align: left; vertical-align: middle; border-right: 1px solid color-mix(in srgb, var(--border) 85%, transparent); } .telegram-mapping-table th:last-child, .telegram-mapping-table td:last-child { border-right: none; } .telegram-mapping-label { white-space: nowrap; width: 1%; } .telegram-mapping-table thead th { font-weight: 700; border-bottom: 1px solid var(--border); } .telegram-mapping-col-link { width: 12.5rem; } .telegram-mapping-cell { min-width: 0; } .telegram-cell-editor, .telegram-cell-actions { min-width: 0; flex-wrap: nowrap; } .telegram-cell-editor input { flex: 1 1 auto; min-width: 0; } .telegram-cell-actions .button-link, .telegram-cell-actions button, .telegram-cell-editor button { white-space: nowrap; } .telegram-delete-button { margin-top: 0.25rem; } .pinning-controls { margin-bottom: 1rem; } .unpin-scheduler { display: flex; gap: 0.75rem; align-items: end; flex-wrap: wrap; } .unpin-scheduler label { display: flex; flex-direction: column; gap: 0.35rem; } .preview-panel { margin-bottom: 0; background: color-mix(in srgb, var(--panel) 96%, CanvasText 4%); } .editor-preview-layout { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 0.75rem; } .preview-content a { color: var(--blue); } .preview-content { white-space: pre-wrap; line-height: 1.45; } .preview-content pre { padding: 0.75rem; overflow-x: auto; border: 1px solid var(--border); background: color-mix(in srgb, Canvas 92%, CanvasText 8%); border-radius: 0.35rem; } .preview-content code { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; background: color-mix(in srgb, Canvas 88%, CanvasText 12%); border: 1px solid color-mix(in srgb, var(--border) 85%, CanvasText 15%); border-radius: 0.25rem; padding: 0.08rem 0.28rem; } .preview-content pre code { background: transparent; border: 0; border-radius: 0; padding: 0; } .preview-content tg-spoiler { color: color-mix(in srgb, var(--fg) 70%, var(--bg) 30%); background: color-mix(in srgb, var(--fg) 10%, var(--bg) 90%); border: 1px dashed color-mix(in srgb, var(--border) 65%, var(--fg) 35%); border-radius: 0.25rem; padding: 0.08rem 0.28rem; box-decoration-break: clone; -webkit-box-decoration-break: clone; } .preview-content blockquote { margin: 0.75rem 0; padding-left: 0.75rem; border-left: 3px solid var(--border); opacity: 0.9; } @media (max-width: 1200px) { .meta-panel { grid-template-columns: minmax(240px, 1fr) minmax(220px, 1fr); } .meta-title-field, .meta-global-link-preview, .telegram-target-fields, .meta-stack, .meta-schedule-field, .meta-delete-service-field { grid-column: auto; grid-row: auto; } } @media (max-width: 760px) { .meta-panel { grid-template-columns: 1fr; } .editor-preview-layout { grid-template-columns: 1fr; } } body.busy { cursor: progress; } .language-toolbar { display: flex; align-items: flex-start; gap: 1rem; margin-bottom: 0.75rem; } .language-heading { display: flex; flex-direction: column; gap: 0.35rem; } .language-title-toggle { display: inline-flex; align-items: center; gap: 0.55rem; width: fit-content; cursor: pointer; } .language-title-toggle h2 { margin: 0; } .language-subtoggle { margin-left: 1.9rem; } .checkbox-label { display: inline-flex; align-items: center; gap: 0.4rem; white-space: nowrap; } .secondary-button { padding: 0.35rem 0.7rem; } .editor-input-panel { display: flex; flex-direction: column; gap: 0.5rem; } .format-toolbar button { padding: 0.3rem 0.55rem; } textarea { width: 100%; min-height: 240px; resize: none; overflow-y: hidden; } .danger { border-color: var(--red); } .login-page { display: grid; place-items: center; min-height: 100vh; } .login-card { width: 320px; border: 1px solid var(--border); padding: 1rem; background: var(--panel); } .login-card form, .login-card label { display: flex; flex-direction: column; gap: 0.75rem; } .login-language-form { margin-bottom: 1rem; } .error { color: var(--red); } @media (max-width: 900px) { body { overflow: auto; } .layout { grid-template-columns: 1fr; height: auto; overflow: visible; } .sidebar, .content { overflow: visible; } .sidebar { border-right: 0; border-bottom: 1px solid var(--border); } }