diff --git a/static/hub.css b/static/hub.css index 00b2c8f..08c4c80 100644 --- a/static/hub.css +++ b/static/hub.css @@ -28,11 +28,13 @@ a { color: #9ec1ff; text-decoration: none; } .topbar nav a.active { color: #fff; } .brand { font-weight: 700; } .main { padding: 16px; max-width: 1200px; margin: 0 auto; } +/* 总览/工作台:带鱼屏两侧留边,内容区限宽居中 */ body.page-desk .main, body.page-dashboard .main { - max-width: none; + max-width: 1680px; width: 100%; - padding: 12px 16px 20px; + margin: 0 auto; + padding: 12px clamp(16px, 3vw, 48px) 20px; } .page-head { display: flex; align-items: center; gap: 12px; } .muted { color: var(--muted); font-size: 0.9rem; } @@ -139,16 +141,88 @@ button, .btn { .card .status-off { color: var(--bad); } .card table { width: 100%; font-size: 0.8rem; border-collapse: collapse; } .card td, .card th { border-bottom: 1px solid var(--line); padding: 4px 2px; text-align: left; } -.desk { display: grid; grid-template-columns: 200px 1fr; gap: 12px; min-height: calc(100vh - 70px); max-width: none; } +.desk { + display: grid; + grid-template-columns: 220px minmax(0, 1fr); + gap: 12px; + min-height: calc(100vh - 70px); + max-width: none; + transition: grid-template-columns 0.18s ease; +} +.desk.is-side-collapsed { + grid-template-columns: 48px minmax(0, 1fr); +} .desk-side { background: var(--panel); border: 1px solid var(--line); border-radius: 12px; padding: 10px; + min-width: 0; + overflow: hidden; +} +.desk-side-head { + display: flex; + align-items: center; + justify-content: space-between; + gap: 6px; + margin-bottom: 8px; +} +.desk-side-title { + margin: 0; + font-size: 1rem; + white-space: nowrap; +} +.desk-side-toggle { + flex: 0 0 auto; + margin-top: 0; + width: 28px; + height: 28px; + padding: 0; + border-radius: 8px; + border: 1px solid var(--line); + background: #12161f; + color: var(--text); + font-size: 1.1rem; + line-height: 1; + cursor: pointer; +} +.desk-side-toggle:hover { border-color: var(--accent); } +.desk-side-toggle--bar { + display: none; +} +.desk.is-side-collapsed .desk-side-title, +.desk.is-side-collapsed .desk-list-name, +.desk.is-side-collapsed .desk-list-empty { + display: none; +} +.desk.is-side-collapsed .desk-side { + padding: 8px 6px; +} +.desk.is-side-collapsed .desk-side-head { + justify-content: center; + margin-bottom: 0; +} +.desk.is-side-collapsed .desk-side-toggle { + transform: rotate(180deg); +} +.desk.is-side-collapsed .desk-list { + display: none; +} +.desk.is-side-collapsed .desk-side-toggle--bar { + display: inline-flex; + align-items: center; + justify-content: center; } .desk-list { list-style: none; padding: 0; margin: 0; } .desk-list li { margin: 6px 0; } -.desk-list li.active a { color: #fff; font-weight: 600; } +.desk-list li a { + display: block; + padding: 6px 8px; + border-radius: 8px; + color: var(--muted); +} +.desk-list li a:hover { background: rgba(108, 92, 231, 0.12); color: #fff; } +.desk-list li.active a { color: #fff; font-weight: 600; background: rgba(108, 92, 231, 0.22); } .desk-main { display: flex; flex-direction: column; min-height: calc(100vh - 70px); min-width: 0; } .desk-toolbar { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; @@ -170,5 +244,17 @@ input.readonly { cursor: default; } @media (max-width: 800px) { - .desk { grid-template-columns: 1fr; } + .desk, + .desk.is-side-collapsed { + grid-template-columns: 1fr; + } + .desk-side-toggle--bar { display: none !important; } +} +@media (min-width: 2000px) { + body.page-desk .main, + body.page-dashboard .main { + max-width: 1760px; + padding-left: clamp(32px, 6vw, 96px); + padding-right: clamp(32px, 6vw, 96px); + } } diff --git a/templates/desk.html b/templates/desk.html index 485c63e..8158a60 100644 --- a/templates/desk.html +++ b/templates/desk.html @@ -1,31 +1,63 @@ {% extends "base.html" %} {% block title %}工作台 · 期权中控{% endblock %} {% block body %} -
-