/
hamster75
/
Life
Обзор
Документация
Войти
/
hamster75
/
Life
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
6
CI/CD
Аналитика
Безопасность
master
css/learn.css
663 строки
16 KB
Dmitry Smirnov
polishing
27 май 2026, 13:36
27 май 2026, 13:36
164976c
Код
Авторство
О чём код?
/* ── Logic Gates Tutorial Modal ── */ #logic-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; z-index: 700; opacity: 0; pointer-events: none; transition: opacity 0.2s; } #logic-overlay.visible { opacity: 1; pointer-events: all; } #logic-modal { background: var(--bg-panel); border: 1px solid var(--border-panel); border-radius: 10px; width: 660px; max-width: calc(100vw - 32px); max-height: calc(100vh - 32px); display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 24px 64px rgba(0, 0, 0, 0.6); } #logic-header { display: flex; align-items: center; justify-content: space-between; padding: 14px 20px 12px; border-bottom: 1px solid var(--border-panel); flex-shrink: 0; } #logic-header-title { font-size: var(--fs-lg); font-weight: 600; letter-spacing: 0.04em; color: var(--text-hi); font-family: monospace; } #logic-close { background: none; border: none; color: var(--text-dim); font-size: var(--fs-2xl); cursor: pointer; line-height: 1; padding: 0 4px; transition: color 0.15s; } #logic-close:hover { color: var(--text-hi); } #logic-progress { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 0 8px; flex-shrink: 0; border-bottom: 1px solid var(--border-panel); } .logic-dot { width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--border-panel); background: transparent; cursor: pointer; padding: 0; transition: background 0.2s, border-color 0.2s, transform 0.15s; } .logic-dot:hover { transform: scale(1.25); border-color: var(--accent); } .logic-dot.done { background: color-mix(in srgb, var(--accent) 35%, transparent); border-color: var(--accent); } .logic-dot.active { background: var(--accent); border-color: var(--accent); transform: scale(1.2); } #logic-canvas-wrap { flex-shrink: 0; background: #070f1c; line-height: 0; border-bottom: 1px solid var(--border-panel); } [data-theme="light"] #logic-canvas-wrap { background: #dce4ee; } #logic-canvas { display: block; width: 100%; height: auto; touch-action: none; } #logic-sim-bar { display: flex; align-items: center; gap: 10px; padding: 8px 20px; border-bottom: 1px solid var(--border-panel); flex-shrink: 0; } #logic-sim-bar button { background: var(--bg-btn); border: 1px solid var(--border-hi); color: var(--text-soft); font-family: monospace; font-size: var(--fs-lg); padding: 4px 12px; border-radius: 4px; cursor: pointer; transition: color 0.15s, background 0.15s; } #logic-sim-bar button:hover { color: var(--accent); background: var(--bg-card); } #logic-gen-label { font-size: var(--fs-base); color: var(--text-dim); font-family: monospace; margin-left: 4px; flex: 1; } #logic-gen { color: var(--accent); } #logic-to-field { margin-left: auto; border-color: color-mix(in srgb, var(--accent) 50%, var(--border-hi)) !important; color: var(--accent) !important; } #logic-to-field:hover { background: color-mix(in srgb, var(--accent) 10%, var(--bg-btn)) !important; color: var(--text-hi) !important; } #logic-text { padding: 14px 20px 10px; overflow-y: auto; flex: 1 1 auto; min-height: 0; } #logic-scene-title { font-size: var(--fs-lg); font-weight: 700; color: var(--text-hi); font-family: monospace; margin-bottom: 4px; } #logic-scene-lead { font-size: var(--fs-base); color: var(--accent); font-family: monospace; margin: 0 0 8px; letter-spacing: 0.02em; } #logic-scene-body { font-size: var(--fs-md); color: var(--text-soft); line-height: 1.7; } #logic-scene-body strong { color: var(--text-hi); } #logic-scene-body em { color: var(--text-mid); font-style: normal; font-weight: 600; } #logic-nav { display: flex; align-items: center; justify-content: space-between; padding: 10px 20px 14px; border-top: 1px solid var(--border-panel); flex-shrink: 0; } #logic-nav button { background: var(--bg-btn); border: 1px solid var(--border-hi); color: var(--text-soft); font-family: monospace; font-size: var(--fs-md); padding: 6px 18px; border-radius: 4px; cursor: pointer; transition: color 0.15s, background 0.15s; } #logic-nav button:hover:not(:disabled) { color: var(--accent); background: var(--bg-card); } #logic-nav button:disabled { opacity: 0.3; cursor: default; } #logic-scene-counter { font-size: var(--fs-base); color: var(--text-dim); font-family: monospace; } #palette-actions #btn-logic { border: 1px solid color-mix(in srgb, #a060d0 40%, var(--border)); color: color-mix(in srgb, #a060d0 80%, var(--text-soft)); } #palette-actions #btn-logic:hover { color: #b080e0; } /* ── Gates modal ─────────────────────────────────────────────────────────────── */ #gates-overlay { position: fixed; inset: 0; background: rgba(0, 0, 0, 0.7); display: flex; align-items: center; justify-content: center; z-index: 700; opacity: 0; pointer-events: none; transition: opacity 0.2s; } #gates-overlay.visible { opacity: 1; pointer-events: all; } #gates-modal { background: var(--bg-panel); border: 1px solid var(--border-panel); border-radius: 10px; width: 660px; max-width: calc(100vw - 32px); max-height: calc(100vh - 32px); display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 24px 64px rgba(0, 0, 0, 0.6); } #gates-header { display: flex; align-items: center; justify-content: space-between; padding: 14px 20px 12px; border-bottom: 1px solid var(--border-panel); flex-shrink: 0; } #gates-header-title { font-size: var(--fs-lg); font-weight: 600; letter-spacing: 0.04em; color: var(--text-hi); font-family: monospace; } #gates-close { background: none; border: none; color: var(--text-dim); font-size: var(--fs-2xl); cursor: pointer; line-height: 1; padding: 0 4px; transition: color 0.15s; } #gates-close:hover { color: var(--text-hi); } #gates-progress { display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 0 8px; flex-shrink: 0; border-bottom: 1px solid var(--border-panel); } .gates-dot { width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--border-panel); background: transparent; cursor: pointer; padding: 0; transition: background 0.2s, border-color 0.2s, transform 0.15s; } .gates-dot:hover { transform: scale(1.25); border-color: var(--accent); } .gates-dot.done { background: color-mix(in srgb, var(--accent) 35%, transparent); border-color: var(--accent); } .gates-dot.active { background: var(--accent); border-color: var(--accent); transform: scale(1.2); } #gates-canvas-wrap { flex-shrink: 0; background: #070f1c; line-height: 0; border-bottom: 1px solid var(--border-panel); } [data-theme="light"] #gates-canvas-wrap { background: #dce4ee; } #gates-canvas { display: block; width: 100%; height: auto; touch-action: none; } #gates-input-bar { display: flex; align-items: center; gap: 8px; padding: 6px 20px; border-bottom: 1px solid var(--border-panel); flex-shrink: 0; } .gates-input-label { font-family: monospace; font-size: var(--fs-base); color: var(--text-dim); margin-right: 2px; } .gates-input-btn { background: var(--bg-btn); border: 1px solid var(--border-hi); color: var(--text-soft); font-family: monospace; font-size: var(--fs-md); padding: 3px 14px; border-radius: 4px; cursor: pointer; transition: color 0.15s, background 0.15s, border-color 0.15s; min-width: 52px; } .gates-input-btn:hover { color: var(--text-hi); background: var(--bg-card); } .gates-input-btn.input-on { border-color: var(--accent); color: var(--accent); background: color-mix(in srgb, var(--accent) 10%, var(--bg-btn)); } #gates-sim-bar { display: flex; align-items: center; gap: 10px; padding: 8px 20px; border-bottom: 1px solid var(--border-panel); flex-shrink: 0; } #gates-sim-bar button { background: var(--bg-btn); border: 1px solid var(--border-hi); color: var(--text-soft); font-family: monospace; font-size: var(--fs-lg); padding: 4px 12px; border-radius: 4px; cursor: pointer; transition: color 0.15s, background 0.15s; } #gates-sim-bar button:hover { color: var(--accent); background: var(--bg-card); } #gates-gen-label { font-size: var(--fs-base); color: var(--text-dim); font-family: monospace; margin-left: 4px; } #gates-gen { color: var(--accent); } #logic-zoom-hint, #gates-zoom-hint { font-size: var(--fs-sm); color: var(--text-dim); font-family: monospace; opacity: 0.6; flex: 1; } #gates-to-field { margin-left: auto; border-color: color-mix(in srgb, var(--accent) 50%, var(--border-hi)) !important; color: var(--accent) !important; } #gates-to-field:hover { background: color-mix(in srgb, var(--accent) 10%, var(--bg-btn)) !important; color: var(--text-hi) !important; } #gates-text { padding: 14px 20px 10px; overflow-y: auto; flex: 1 1 auto; min-height: 0; } #gates-scene-title { font-size: var(--fs-lg); font-weight: 700; color: var(--text-hi); font-family: monospace; margin-bottom: 4px; } #gates-scene-lead { font-size: var(--fs-base); color: var(--accent); font-family: monospace; margin: 0 0 8px; letter-spacing: 0.02em; } #gates-scene-body { font-size: var(--fs-md); color: var(--text-soft); line-height: 1.7; } #gates-scene-body strong { color: var(--text-hi); } #gates-scene-body em { color: var(--text-mid); font-style: normal; font-weight: 600; } #gates-nav { display: flex; align-items: center; justify-content: space-between; padding: 10px 20px 14px; border-top: 1px solid var(--border-panel); flex-shrink: 0; } #gates-nav button { background: var(--bg-btn); border: 1px solid var(--border-hi); color: var(--text-soft); font-family: monospace; font-size: var(--fs-md); padding: 6px 18px; border-radius: 4px; cursor: pointer; transition: color 0.15s, background 0.15s; } #gates-nav button:hover:not(:disabled) { color: var(--accent); background: var(--bg-card); } #gates-nav button:disabled { opacity: 0.3; cursor: default; } #gates-scene-counter { font-size: var(--fs-base); color: var(--text-dim); font-family: monospace; } .gates-truth-table { margin-top: 10px; border-collapse: collapse; font-family: monospace; font-size: var(--fs-base); } .gates-truth-table th, .gates-truth-table td { border: 1px solid var(--border-panel); padding: 3px 10px; text-align: center; } .gates-truth-table th { color: var(--text-hi); background: var(--bg-card); } .gates-truth-table td { color: var(--text-soft); } .gates-truth-table td.gt-active { color: var(--accent); font-weight: 700; background: color-mix(in srgb, var(--accent) 10%, transparent); } #palette-actions #btn-gates { border: 1px solid color-mix(in srgb, #30a060 40%, var(--border)); color: color-mix(in srgb, #30a060 80%, var(--text-soft)); } #palette-actions #btn-gates:hover { color: #50d080; } /* ═══════════════════════════════════════════════════════════════════════════ LearnUI — единое окно «Изучение» с вкладками ═══════════════════════════════════════════════════════════════════════════ */ #learn-overlay { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.55); z-index: 1000; } #learn-overlay.visible { display: block; } #learn-modal { position: absolute; left: 50%; top: 50%; transform: translate(-50%, -50%); background: var(--bg-panel); border: 1px solid var(--border-panel); border-radius: 8px; width: 720px; max-width: calc(100vw - 32px); height: calc(100vh - 48px); max-height: 820px; display: flex; flex-direction: column; overflow: hidden; box-shadow: 0 8px 40px rgba(0,0,0,.5); } .learn-resize { position: absolute; z-index: 10; } .learn-resize.e { right: -3px; top: 8px; bottom: 8px; width: 6px; cursor: ew-resize; } .learn-resize.w { left: -3px; top: 8px; bottom: 8px; width: 6px; cursor: ew-resize; } .learn-resize.s { bottom: -3px; left: 8px; right: 8px; height: 6px; cursor: ns-resize; } .learn-resize.n { top: -3px; left: 8px; right: 8px; height: 6px; cursor: ns-resize; } .learn-resize.se { right: -3px; bottom: -3px; width: 12px; height: 12px; cursor: se-resize; } .learn-resize.sw { left: -3px; bottom: -3px; width: 12px; height: 12px; cursor: sw-resize; } .learn-resize.ne { right: -3px; top: -3px; width: 12px; height: 12px; cursor: ne-resize; } .learn-resize.nw { left: -3px; top: -3px; width: 12px; height: 12px; cursor: nw-resize; } #learn-header { display: flex; align-items: center; justify-content: space-between; padding: 12px 16px; border-bottom: 1px solid var(--border-panel); flex-shrink: 0; } #learn-title { font-size: var(--fs-xl); font-weight: 600; color: var(--text-hi); } #learn-close { background: none; border: none; color: var(--text-dim); font-size: var(--fs-3xl); line-height: 1; cursor: pointer; padding: 0 4px; transition: color 0.15s; } #learn-close:hover { color: var(--text-hi); } #learn-tabs { display: flex; gap: 2px; padding: 8px 12px 0; border-bottom: 1px solid var(--border-panel); flex-shrink: 0; flex-wrap: wrap; } .learn-tab-btn { background: none; border: 1px solid transparent; border-bottom: none; border-radius: 6px 6px 0 0; color: var(--text-soft); font-size: var(--fs-md); padding: 6px 16px; cursor: pointer; transition: color 0.15s, background 0.15s; margin-bottom: -1px; } .learn-tab-btn:hover { color: var(--text-hi); background: var(--bg-card); } .learn-tab-btn.active { color: var(--accent); border-color: var(--border-panel); border-bottom-color: var(--bg-panel); background: var(--bg-panel); } #learn-content { flex: 1; overflow: hidden; position: relative; } .learn-panel { display: none; position: absolute; inset: 0; overflow: hidden; } .learn-panel.active { display: flex; flex-direction: column; } /* ── Adopted sub-UI overlays ────────────────────────────────────────────── Each sub-UI's overlay is moved into .learn-panel; these rules make it fill the panel instead of covering the viewport. */ .learn-adopted { position: static !important; display: flex !important; flex-direction: column !important; flex: 1 !important; background: none !important; opacity: 1 !important; pointer-events: all !important; inset: unset !important; z-index: unset !important; align-items: unset !important; justify-content: unset !important; width: 100% !important; height: 100% !important; } /* Reset each sub-UI's inner modal so it fills the panel naturally */ .learn-adopted > div { position: static !important; width: 100% !important; max-width: none !important; height: 100% !important; max-height: none !important; border-radius: 0 !important; border: none !important; box-shadow: none !important; margin: 0 !important; flex: 1; } #palette-actions #btn-learn { border: 1px solid color-mix(in srgb, var(--accent) 40%, var(--border)); color: color-mix(in srgb, var(--accent) 80%, var(--text-soft)); } #palette-actions #btn-learn:hover { color: var(--accent); }