Vydané zdroje
Stáhnout zdroje ZIP
CH-J Tools
Procházejte adresáře a soubory konkrétního vydání aplikace.
CH-J / Server Manager
872 souborů
core-20261030T220507Z-61e4558d889f
Přidáno: · Sestaveno:
1
/* chj.disks — follows the CH-J plugin look (System Monitor / Users). The application theme is dark; the light2
palette is defined with the same tokens and is used when the document carries data-theme="light". */3
:root {4
color-scheme: dark;5
--bg: #07111f; --panel: rgba(16,32,51,.82); --panel-solid: #0d1b2d; --input: #0b1929; --line: rgba(151,176,205,.18);6
--text: #ecf5ff; --muted: #8ea5bf; --blue: #42a5ff; --green: #43d6a0; --warn: #f2c463; --danger: #ff8f8f;7
--fs-ext4: #4f8fe0; --fs-ext: #6b9fd9; --fs-xfs: #d9c35a; --fs-btrfs: #ee8a4a; --fs-fat: #3fc96a; --fs-ntfs: #3fd6b0;8
--fs-swap: #c96a5c; --fs-lvm: #c49a6c; --fs-luks: #8a7fc4; --fs-zfs: #5fb3c9; --fs-raid: #b05fc9; --fs-free: #5b6676; --fs-unknown: #2a2f37; --fs-none: #7c8796;9
}10
:root[data-theme="light"] {11
color-scheme: light;12
--bg: #f3f6fa; --panel: #ffffff; --panel-solid: #ffffff; --input: #f7f9fc; --line: rgba(30,50,80,.16);13
--text: #102033; --muted: #4f6278; --blue: #1f6fd1; --green: #138a5e; --warn: #9a6a00; --danger: #b42318;14
--fs-free: #c5ccd6; --fs-unknown: #3b4250; --fs-none: #9aa5b3;15
}16
* { box-sizing: border-box; }17
[hidden] { display: none !important; }18
body { margin: 0; min-width: 720px; min-height: 500px; color: var(--text); background: radial-gradient(circle at 75% 0, rgba(45,130,220,.16), transparent 35%), var(--bg); font-family: Inter, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; font-size: 13px; }19
.app-header { display: flex; justify-content: space-between; align-items: center; padding: 22px 28px; border-bottom: 1px solid var(--line); background: rgba(5,14,25,.6); }20
h1 { margin: 5px 0 2px; font-size: 24px; } .app-header p { margin: 0; color: var(--muted); font-size: 11px; }21
.eyebrow { color: var(--blue); font-size: 10px; font-weight: 800; letter-spacing: .17em; }22
main { padding: 20px 28px 30px; display: grid; gap: 14px; }23
h2 { margin: 0; font-size: 15px; } h3 { margin: 0; font-size: 14px; } h4 { margin: 8px 0 4px; font-size: 12px; color: var(--muted); }24
.toolbar { display: flex; align-items: end; gap: 10px; flex-wrap: wrap; }25
.toolbar label { display: grid; gap: 6px; min-width: 260px; color: var(--muted); font-size: 11px; }26
.spacer { flex: 1; }27
select, input, .button { border: 1px solid var(--line); border-radius: 9px; color: var(--text); background: var(--input); padding: 8px 11px; font: inherit; }28
.button { cursor: pointer; } .button.small { padding: 5px 9px; font-size: 12px; }29
.button.primary { background: linear-gradient(135deg, #267dd1, #3867e8); border-color: #458cea; color: #fff; }30
.button.danger { background: linear-gradient(135deg, #c0392b, #d9534f); border-color: #e06666; color: #fff; }31
.button.ghost { background: transparent; } .button:disabled, .mini:disabled { opacity: .42; cursor: not-allowed; }32
.button:focus-visible, select:focus-visible, input:focus-visible, .segment:focus-visible, [role=option]:focus-visible, .context-menu button:focus-visible { outline: 2px solid var(--blue); outline-offset: 2px; }33
.mini { border: 1px solid var(--line); border-radius: 7px; color: var(--text); background: var(--input); padding: 3px 7px; font: inherit; font-size: 11px; cursor: pointer; margin-right: 4px; }34
.mini.danger { border-color: rgba(255,114,114,.4); color: var(--danger); }35
.status { min-height: 18px; margin: 0; color: var(--muted); font-size: 12px; }36
.status.error { color: var(--danger); } .status.warn { color: var(--warn); } .status.busy::before { content: ""; display: inline-block; width: 10px; height: 10px; margin-right: 7px; border: 2px solid var(--blue); border-right-color: transparent; border-radius: 50%; animation: spin .8s linear infinite; vertical-align: -1px; }37
@keyframes spin { to { transform: rotate(360deg); } }38
.panel { border: 1px solid var(--line); border-radius: 14px; background: var(--panel); padding: 16px 18px; min-width: 0; }39
.notice strong { font-size: 14px; } .notice p { color: var(--muted); }40
.pill { display: inline-block; border-radius: 999px; padding: 2px 8px; font-size: 10px; font-style: normal; background: rgba(142,165,191,.14); color: var(--muted); margin-right: 4px; }41
.pill.ok { color: #72e5b9; background: rgba(67,214,160,.12); } .pill.warn { color: var(--warn); background: rgba(242,196,99,.13); } .pill.danger { color: var(--danger); background: rgba(255,110,110,.12); }42
.hint { margin: 6px 0 0; color: var(--muted); font-size: 11px; line-height: 1.5; } .hint.warn { color: var(--warn); }43
.error { margin: 6px 0 0; color: var(--danger); font-size: 12px; }44
.suggestions { display: grid; gap: 8px; }45
.suggestion { display: flex; justify-content: space-between; align-items: center; gap: 16px; padding: 12px 16px; border-radius: 12px; border: 1px solid var(--line); background: var(--panel); }46
.suggestion.ok { border-left: 4px solid var(--green); } .suggestion.blocked { border-left: 4px solid var(--warn); }47
.suggestion strong { font-size: 13px; }48
.workspace { display: grid; grid-template-columns: 240px minmax(0, 1fr); gap: 14px; align-items: start; }49
.disk-list ul { list-style: none; margin: 10px 0 0; padding: 0; display: grid; gap: 6px; }50
.disk-list li { display: grid; gap: 2px; padding: 9px 10px; border: 1px solid var(--line); border-radius: 10px; cursor: pointer; }51
.disk-list li.active { border-color: var(--blue); background: rgba(66,165,255,.1); }52
.disk-list li span, .disk-list li small { color: var(--muted); font-size: 11px; } .disk-list .badges { margin-top: 3px; }53
.disk-main { display: grid; gap: 14px; min-width: 0; }54
.disk-title { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; }55
.facts { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 6px 16px; margin: 12px 0 0; }56
.facts div { display: grid; gap: 2px; padding-top: 6px; border-top: 1px solid var(--line); }57
.facts dt { color: var(--muted); font-size: 10px; } .facts dd { margin: 0; font-size: 12px; overflow-wrap: anywhere; }58
.facts.two { grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); }59
.inline-actions { display: flex; flex-wrap: wrap; gap: 8px; align-items: center; margin-top: 12px; }60
/* Disk map: widths are proportional to the real sizes; tiny areas keep a minimum width to stay clickable. */61
.disk-map { position: relative; display: flex; height: 72px; gap: 2px; padding: 3px; border-radius: 10px; background: rgba(0,0,0,.25); user-select: none; }62
.disk-map.mini { height: 30px; margin: 3px 0 8px; }63
.segment { position: relative; flex-basis: 0; min-width: 8px; overflow: hidden; border-radius: 6px; border: 2px solid var(--seg); background: color-mix(in srgb, var(--seg) 16%, var(--panel-solid)); cursor: pointer; }64
.segment .used { position: absolute; inset: 0 auto 0 0; background: color-mix(in srgb, var(--seg) 48%, transparent); }65
.segment .seg-text { position: absolute; inset: 4px 6px; display: grid; align-content: center; gap: 1px; font-size: 11px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }66
.segment .seg-text small { color: var(--muted); font-size: 10px; overflow: hidden; text-overflow: ellipsis; }67
.segment.selected { box-shadow: 0 0 0 2px var(--text) inset, 0 0 0 1px var(--seg); }68
.segment.created { border-style: dashed; }69
.segment.fs-free { border-style: dashed; background: repeating-linear-gradient(135deg, transparent 0 6px, rgba(255,255,255,.04) 6px 12px); }70
.grip { position: absolute; top: 0; right: 0; bottom: 0; width: 10px; cursor: ew-resize; background: linear-gradient(90deg, transparent, var(--text)); opacity: .55; }71
.drag-ghost { position: absolute; top: 3px; bottom: 3px; border: 2px dashed var(--text); border-radius: 6px; display: grid; place-items: center; font-size: 11px; background: rgba(66,165,255,.12); pointer-events: none; }72
.fs-ext4 { --seg: var(--fs-ext4); } .fs-ext { --seg: var(--fs-ext); } .fs-xfs { --seg: var(--fs-xfs); } .fs-btrfs { --seg: var(--fs-btrfs); } .fs-fat { --seg: var(--fs-fat); }73
.fs-ntfs { --seg: var(--fs-ntfs); } .fs-swap { --seg: var(--fs-swap); } .fs-lvm { --seg: var(--fs-lvm); } .fs-luks { --seg: var(--fs-luks); } .fs-zfs { --seg: var(--fs-zfs); }74
.fs-raid { --seg: var(--fs-raid); } .fs-free { --seg: var(--fs-free); } .fs-unknown { --seg: var(--fs-unknown); } .fs-none { --seg: var(--fs-none); }75
.legend { display: flex; flex-wrap: wrap; gap: 6px 14px; margin: 10px 0 0; padding: 0; list-style: none; font-size: 11px; color: var(--muted); }76
.legend b, .swatch { display: inline-block; width: 10px; height: 10px; margin-right: 6px; border-radius: 2px; vertical-align: -1px; background: var(--seg); }77
.table-wrap { overflow: auto; }78
table { width: 100%; border-collapse: collapse; font-size: 12px; }79
th, td { padding: 7px 8px; text-align: left; border-bottom: 1px solid var(--line); vertical-align: top; }80
th { color: var(--muted); font-weight: 600; font-size: 11px; white-space: nowrap; }81
tbody tr { cursor: default; } tbody tr:hover { background: rgba(66,165,255,.06); } tbody tr.selected { background: rgba(66,165,255,.14); }82
tr.layer td { color: var(--muted); } tr.vg td { background: rgba(255,255,255,.03); }83
.tree { color: var(--muted); } .actions-cell { white-space: nowrap; }84
.queue ol, .job-steps { margin: 10px 0 0; padding-left: 20px; display: grid; gap: 4px; }85
.dialog-head { display: flex; justify-content: space-between; align-items: center; gap: 12px; }86
.job-state { margin: 8px 0; font-weight: 600; } .job-state.succeeded { color: var(--green); } .job-state.failed, .job-state.unknown { color: var(--danger); } .job-state.pending-reboot { color: var(--warn); }87
.progress { height: 6px; border-radius: 6px; background: rgba(255,255,255,.07); overflow: hidden; }88
.progress i { display: block; height: 100%; width: 0; background: var(--blue); }89
.progress.indeterminate i { width: 30%; animation: slide 1.4s ease-in-out infinite; }90
.progress.succeeded i { width: 100%; background: var(--green); } .progress.failed i, .progress.unknown i { width: 100%; background: var(--danger); } .progress.pending-reboot i { width: 100%; background: var(--warn); }91
@keyframes slide { 0% { transform: translateX(-100%); } 100% { transform: translateX(340%); } }92
.job-steps li.done { color: var(--green); } .job-steps li.failed { color: var(--danger); } .job-steps li.stopped { color: var(--warn); } .job-steps li.running { color: var(--blue); }93
.log { max-height: 280px; overflow: auto; padding: 10px; border-radius: 8px; background: rgba(0,0,0,.3); font-size: 11px; white-space: pre-wrap; }94
.security { border-left: 3px solid var(--green); } .security strong { font-size: 12px; } .security p { margin: 5px 0 0; color: var(--muted); font-size: 11px; line-height: 1.5; }95
.context-menu { position: fixed; z-index: 50; min-width: 240px; max-width: 360px; padding: 6px; border: 1px solid var(--line); border-radius: 10px; background: var(--panel-solid); box-shadow: 0 18px 40px rgba(0,0,0,.4); display: grid; }96
.context-menu button { display: grid; gap: 2px; text-align: left; border: 0; border-radius: 6px; padding: 7px 10px; background: transparent; color: var(--text); font: inherit; cursor: pointer; }97
.context-menu button:hover:not([disabled]) { background: rgba(66,165,255,.14); }98
.context-menu button[disabled] { color: var(--muted); cursor: not-allowed; } .context-menu small { font-size: 10px; color: var(--muted); }99
dialog { width: min(820px, calc(100vw - 40px)); max-height: calc(100vh - 40px); overflow: auto; border: 1px solid var(--line); border-radius: 14px; background: var(--panel-solid); color: var(--text); padding: 20px 22px; }100
dialog::backdrop { background: rgba(2,8,16,.7); }101
dialog form, .dialog-body, .form-body { display: grid; gap: 10px; }102
dialog label { display: grid; gap: 5px; color: var(--muted); font-size: 12px; }103
dialog label.check { display: flex; align-items: center; gap: 8px; color: var(--text); }104
dialog input[type=checkbox], dialog input[type=radio] { width: auto; }105
dialog input[type=range] { width: 100%; padding: 0; }106
.unit-input { display: flex; gap: 6px; } .unit-input input { flex: 1; }107
.actions { display: flex; justify-content: flex-end; gap: 8px; }108
.step-list { margin: 0; padding-left: 22px; display: grid; gap: 4px; font-size: 12px; }109
.step-list li.destructive { color: var(--warn); } .step-list li.verify, .step-list li.backup, .step-list li.check { color: var(--muted); }110
.warnings { margin: 0; padding-left: 18px; display: grid; gap: 6px; color: var(--warn); font-size: 12px; }111
@media (max-width: 980px) { .workspace { grid-template-columns: 1fr; } }113
/* Right-to-left languages (ar, fa, ur): terminals, editors, code, paths and logs stay left-to-right. */114
[dir="rtl"] .xterm, [dir="rtl"] .monaco-editor, [dir="rtl"] pre, [dir="rtl"] code, [dir="rtl"] textarea, [dir="rtl"] input:not([type="checkbox"]):not([type="radio"]) { direction: ltr; unicode-bidi: isolate; }SHA-256
80704da83ada883939781a850f1447b917c0495f2123cbb8a941b6b9df784881CH-J Proprietary Software License 1.14 · Zdroje jsou zveřejněny pod CH-J Proprietary Software License 1.14. Jejich dostupnost nemění licenční podmínky ani neposkytuje další oprávnění.
SHA-256 archivu
77380d4805485ffa4027fbe7858b5836f197a4aa9d52358a43e2d12d018744df