From 9572a35ad5794b0dd48362014a0a66dc9ad58323 Mon Sep 17 00:00:00 2001 From: iRedTea Date: Thu, 15 Oct 2026 22:10:46 +0300 Subject: [PATCH] =?UTF-8?q?feat:=20on=20a=20phone=20=D0=92=D0=B2=D0=B5?= =?UTF-8?q?=D1=80=D1=85,=20the=20path=20and=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=B8=D1=82=D1=8C=20share=20one=20line;=20the=20header?= =?UTF-8?q?=20is=20one=20line=20without=20the=20logo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- internal/server/web/static/app.css | 42 +++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/internal/server/web/static/app.css b/internal/server/web/static/app.css index 799e1a7..34537f3 100644 --- a/internal/server/web/static/app.css +++ b/internal/server/web/static/app.css @@ -225,6 +225,12 @@ input.sw:disabled { opacity: .45; cursor: not-allowed; } overflow-x: auto; white-space: nowrap; scrollbar-width: none; } header.topbar nav::-webkit-scrollbar { display: none; } header.topbar nav > * { margin-left: 0 !important; flex: none; } + /* One line: no logo, the links and the account on the right; they + scroll sideways when they do not fit. */ + header.topbar .brand { display: none; } + header.topbar nav { flex: 1 1 auto; min-width: 0; } + header.topbar nav > :first-child { margin-left: auto !important; } + header.topbar nav #status { flex: 0 1 auto; min-width: 0; max-width: 30vw; } .acct-add { flex-wrap: wrap; } .acct-add button { width: 100%; } .acct-keys li { flex-wrap: wrap; } @@ -522,7 +528,8 @@ table.fm .act { flex-wrap:nowrap; } table.fm .c-act { width:1%; } table.fm td, table.fm th { padding:7px 4px; } .ic { margin-right:4px; } - .fm-bar .fm-pathbox { flex:1 1 100%; order:-1; } + /* Вверх, the path and Обновить on one line: the path gives way. */ + .fm-bar .fm-pathbox { flex:1 1 0; min-width:0; } /* The selection's buttons on the line of the blue ones: those a little narrower, the count by the buttons only as a number. */ .fp-sel .fp-selinfo { font-size:12px; } @@ -778,6 +785,7 @@ p.mv-a { margin:0; font-size:13px; } /* The selection's buttons stay on the line of the blue ones while they fit: those a little more compact; the line breaks only when there is no room. */ .fpane.narrow .fm-bar { gap:5px; } +.fpane.narrow .fm-bar .fm-pathbox { flex:1 1 0; min-width:0; order:0; } .fpane.narrow .fm-bar .btn.ico { padding-left:8px; padding-right:8px; gap:4px; font-size:12.5px; } .fpane.narrow .fp-sel { gap:4px; } .fpane.narrow .fp-selinfo { margin-right:6px; } @@ -803,3 +811,35 @@ dialog.machinedlg { max-width:1000px; width:94vw; max-height:90vh; padding:0; ov dialog.machinedlg { width:100vw; max-width:none; height:100dvh; max-height:none; margin:0; border-radius:0; } .machinedlg .frag-area { max-height:calc(100dvh - 58px); } } + +/* Настройки › ИИ-ассистент. */ +.ai-form { display:grid; gap:10px; max-width:520px; } +.ai-form label { display:grid; gap:4px; font-size:13px; color:var(--muted); } + +/* The assistant: a round button, and the chat over the page's corner. */ +.ai-fab { position:fixed; right:18px; bottom:18px; z-index:40; width:52px; height:52px; padding:0; border-radius:50%; + display:inline-flex; align-items:center; justify-content:center; box-shadow:0 8px 24px rgba(0,0,0,.45); } +.ai-fab[hidden] { display:none; } +body.touch.term-active .ai-fab { bottom:104px; } +.ai-box { position:fixed; right:18px; bottom:82px; z-index:41; width:400px; max-width:calc(100vw - 24px); height:min(600px, calc(100vh - 120px)); + display:flex; flex-direction:column; background:var(--panel); border:1px solid var(--border); border-radius:12px; + box-shadow:0 18px 44px rgba(0,0,0,.55); overflow:hidden; } +.ai-box[hidden] { display:none; } +.ai-head { display:flex; align-items:center; gap:8px; padding:10px 12px; border-bottom:1px solid var(--border); } +.ai-head .ai-where { font-size:12px; } +.ai-list { flex:1; overflow:auto; padding:12px; display:flex; flex-direction:column; gap:10px; } +.ai-msg { max-width:92%; padding:8px 11px; border-radius:10px; font-size:14px; line-height:1.45; overflow-wrap:anywhere; } +.ai-msg.user { align-self:flex-end; background:#16324f; white-space:pre-wrap; } +.ai-msg.assistant { align-self:flex-start; background:#151a21; border:1px solid var(--border); } +.ai-msg.wait::after { content:'…'; color:var(--muted); } +.ai-code { margin:6px 0; } +.ai-code pre { margin:0; padding:8px; background:#0c0f13; border:1px solid var(--border); border-radius:7px; overflow:auto; font-size:12.5px; white-space:pre-wrap; } +.ai-code .ai-run { margin-top:6px; } +.ai-form-in { display:flex; gap:8px; padding:10px; border-top:1px solid var(--border); } +.ai-form-in textarea { flex:1; resize:none; font:inherit; font-size:14px; padding:8px 10px; color:var(--text); + background:#0c0f13; border:1px solid var(--border); border-radius:8px; } +.ai-form-in textarea:focus { outline:none; border-color:var(--accent); } +@media (max-width: 640px) { + .ai-box { right:8px; left:8px; width:auto; max-width:none; bottom:78px; height:calc(100dvh - 150px); } + body.touch.term-active .ai-box { bottom:164px; height:calc(100dvh - 236px); } +}