/* CI CRM на NAS (0.1.76): страницы в духе Forgejo — светлая и тёмная тема, телефон. */
:root{--bg:#f6f7f9;--box:#fff;--head:#f3f4f6;--line:#d8dce3;--soft:#eceef2;--text:#1f2328;--muted:#656d76;
--accent:#c2410c;--link:#0b62c4;--ok:#1a7f37;--bad:#cf222e;--run:#9a6700;--add:#e6ffec;--addn:#ccffd8;--del:#ffebe9;--deln:#ffd7d5;
--hunk:#ddf4ff;--code:#f6f8fa;--chip:#eef1f5;--shadow:0 1px 0 rgba(31,35,40,.04)}
@media (prefers-color-scheme:dark){:root{--bg:#101318;--box:#161b22;--head:#1c2129;--line:#30363d;--soft:#21262d;--text:#e6edf3;
--muted:#8d96a0;--accent:#fb8c4a;--link:#58a6ff;--ok:#3fb950;--bad:#f85149;--run:#d29922;--add:#12261e;--addn:#1d4428;--del:#25171c;
--deln:#542426;--hunk:#121d2f;--code:#0d1117;--chip:#21262d;--shadow:none}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--text);font:14px/1.5 -apple-system,"Segoe UI",system-ui,Roboto,"Noto Sans",sans-serif}
a{color:var(--link);text-decoration:none}a:hover{text-decoration:underline}
code,pre,.sha,.ln,.source,.diff{font-family:ui-monospace,SFMono-Regular,"SF Mono",Menlo,Consolas,"Liberation Mono",monospace}
.wrap{max-width:1280px;margin:0 auto;padding:0 16px}
.i{width:16px;height:16px;flex:none;vertical-align:-3px}
.muted{color:var(--muted)}
h2{font-size:18px;margin:0}

/* шапка */
.top{background:var(--box);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:5}
.top>.wrap:first-child{display:flex;align-items:center;gap:16px;min-height:56px;flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;color:var(--text);font-size:18px;margin-right:auto}
.brand:hover{text-decoration:none}
.logo{display:inline-grid;place-items:center;width:32px;height:32px;border-radius:8px;background:var(--accent);color:#fff;
font-size:11px;font-weight:700;letter-spacing:.5px}
.repo b{font-weight:600}
.mirror{font-size:12px;color:var(--muted);border:1px solid var(--line);border-radius:999px;padding:2px 10px;white-space:nowrap}
.mirror.success::before,.mirror.failure::before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px;background:var(--ok)}
.mirror.failure::before{background:var(--bad)}
.out button{font:inherit;font-size:13px;background:none;border:1px solid var(--line);color:var(--text);border-radius:6px;padding:4px 10px;cursor:pointer}
.tabs{display:flex;gap:4px;overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{display:flex;align-items:center;gap:8px;padding:8px 12px 10px;color:var(--text);border-bottom:2px solid transparent;white-space:nowrap}
.tab:hover{text-decoration:none;border-bottom-color:var(--line)}
.tab.on{border-bottom-color:var(--accent);font-weight:600}
.tab .i{color:var(--muted)}
main.wrap{padding-top:20px;padding-bottom:48px}

/* блоки */
.box{background:var(--box);border:1px solid var(--line);border-radius:8px;margin-bottom:16px;overflow:hidden;box-shadow:var(--shadow)}
.boxhead{display:flex;align-items:center;gap:8px;padding:10px 14px;background:var(--head);border-bottom:1px solid var(--line);flex-wrap:wrap}
.boxhead .btn{margin-left:auto}.boxhead .btn+.btn{margin-left:0}
details>summary.boxhead{cursor:pointer;list-style:none}
details>summary::-webkit-details-marker{display:none}
details:not([open])>summary.boxhead{border-bottom:0}
.empty{padding:32px;text-align:center;color:var(--muted);background:var(--box);border:1px dashed var(--line);border-radius:8px}
.toolbar{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:14px}
.btn{display:inline-flex;align-items:center;gap:6px;font:inherit;font-size:13px;font-weight:500;color:var(--text);background:var(--box);
border:1px solid var(--line);border-radius:6px;padding:5px 12px;cursor:pointer;white-space:nowrap}
.btn:hover{background:var(--soft);text-decoration:none}
.btn.small{padding:2px 8px;font-size:12px}
.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff;justify-content:center}
.btn[disabled]{opacity:.6;cursor:progress}
.picker{display:flex;align-items:center;gap:6px;border:1px solid var(--line);border-radius:6px;padding:0 4px 0 10px;background:var(--box)}
.picker select{font:inherit;font-weight:600;border:0;background:transparent;color:var(--text);padding:5px 4px;max-width:220px}
.crumbs{font-size:16px}.crumbs b{font-weight:600}
.clone{display:flex;margin-left:auto;border:1px solid var(--line);border-radius:6px;overflow:hidden;background:var(--box)}
.clone input{font:12px ui-monospace,monospace;border:0;background:transparent;color:var(--text);padding:5px 10px;width:300px;min-width:0}
.clone button{border:0;border-left:1px solid var(--line);background:var(--head);color:var(--text);padding:0 10px;cursor:pointer}
.clone button.done{color:var(--ok)}
.clone .proto{display:flex;align-items:center;padding:0 10px;font-size:12px;font-weight:600;color:#fff;background:var(--accent)}
.more{position:relative}
.more>summary{list-style:none;padding:5px 8px}
.more>summary::-webkit-details-marker{display:none}
.more .menu{position:absolute;right:0;top:calc(100% + 4px);z-index:20;min-width:220px;background:var(--box);border:1px solid var(--line);
border-radius:8px;box-shadow:0 8px 24px rgba(0,0,0,.14);padding:6px 0;display:flex;flex-direction:column}
.more .menu a{display:flex;align-items:center;gap:10px;padding:8px 14px;color:var(--text);white-space:nowrap}
.more .menu a:hover{background:var(--soft);text-decoration:none}
.more .menu .i{color:var(--muted)}
.stats{margin-bottom:14px}
.stats .counts{display:flex;justify-content:space-around;flex-wrap:wrap;gap:6px 18px;padding:9px 14px}
.stats .counts a,.stats .counts span{display:inline-flex;align-items:center;gap:6px;color:var(--text)}
.stats .counts .i{color:var(--muted)}
.langbar{display:block;width:100%;height:8px}
.langs{display:flex;flex-wrap:wrap;gap:4px 16px;padding:8px 14px;font-size:12px;color:var(--muted);border-top:1px solid var(--soft)}
.langs span{display:inline-flex;align-items:center;gap:6px}.langs b{color:var(--text);font-weight:600}
.swatch{width:9px;height:9px}
.sha{font-size:12px;color:var(--muted);background:var(--chip);border-radius:6px;padding:1px 6px}
a.sha:hover{color:var(--link);text-decoration:none}
code{font-size:12px;background:var(--chip);border-radius:6px;padding:1px 6px}

/* значки итога */
.st{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:600;border-radius:999px;padding:2px 9px 2px 6px;
border:1px solid currentColor;white-space:nowrap}
.success{color:var(--ok)}.failure,.interrupted{color:var(--bad)}.running{color:var(--run)}.queued,.cancelled{color:var(--muted)}
.dot{display:inline-flex}
.running .i,.st.running .i{animation:spin 2s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}

/* списки */
table{border-collapse:collapse;width:100%}
.list td,.files td{padding:9px 14px;border-top:1px solid var(--soft);vertical-align:middle}
.list tr:first-child td,.files tr:first-child td{border-top:0}
.list tr:hover td,.files tr:hover td{background:var(--head)}
.list .msg{color:var(--text);font-weight:600}
.list .stat{width:1%;white-space:nowrap}
.right{text-align:right;white-space:nowrap}
.ver{font-weight:600;white-space:nowrap}
.files .name{width:30%;white-space:nowrap}
.files .name a{color:var(--text);display:inline-flex;gap:8px;align-items:center}
.files .name .i{color:var(--muted)}.files .name .i.dir{color:var(--link)}
.files .last a{color:var(--muted)}
.files .age{text-align:right;color:var(--muted);white-space:nowrap;width:1%}
.lastcommit{display:flex;align-items:center;gap:10px;padding:10px 14px;background:var(--head);border-bottom:1px solid var(--line);flex-wrap:wrap}
.lastcommit .who{font-weight:600}
.lastcommit a:not(.sha){color:var(--text)}
.lastcommit time{margin-left:auto;color:var(--muted)}
.chips{display:flex;gap:6px;flex-wrap:wrap;margin-left:auto}
.chip{font-size:13px;padding:3px 12px;border-radius:999px;background:var(--chip);color:var(--text)}
.chip.on{background:var(--accent);color:#fff}
.chip:hover{text-decoration:none}
.chips .sep{width:1px;background:var(--line);margin:2px 4px}
.pager{display:flex;gap:8px;justify-content:center}

/* файл и README */
.source td{padding:0;vertical-align:top}
.source pre,.diff pre{margin:0;padding:0 12px;white-space:pre-wrap;word-break:break-word;font-size:12px;line-height:20px}
.ln{width:1%;min-width:48px;padding:0 10px!important;text-align:right;color:var(--muted);font-size:12px;line-height:20px;user-select:none;
border-right:1px solid var(--soft)}
.ln a{color:inherit}
.source tr:target{background:var(--hunk)}
.image{padding:16px;text-align:center;background:var(--code)}.image img{max-width:100%}
.md{padding:16px 24px;overflow-wrap:break-word}
.md h1,.md h2,.md h3{border-bottom:1px solid var(--soft);padding-bottom:.3em;margin:1.2em 0 .6em}
.md h1{font-size:24px}.md h2{font-size:20px}.md h3{font-size:16px;border:0}
.md>:first-child{margin-top:0}
.md pre.code{background:var(--code);border:1px solid var(--soft);border-radius:6px;padding:12px;overflow:auto;font-size:12px}
.md pre code{background:none;padding:0}
.md table.md{width:auto;margin:12px 0}.md table.md td,.md table.md th{border:1px solid var(--line);padding:6px 12px}
.md table.md th{background:var(--head)}
.md blockquote{margin:0;padding:0 14px;color:var(--muted);border-left:4px solid var(--line)}
.md hr{border:0;border-top:1px solid var(--line)}

/* коммит и изменения */
.commit{padding:16px}
.commit h2{font-size:20px;margin-bottom:8px}
.commit .body{white-space:pre-wrap;margin:0 0 12px;font-size:13px;color:var(--muted)}
.meta{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;color:var(--muted);font-size:13px}
.commit .meta .sha{font-size:11px}
.runs{list-style:none;padding:12px 0 0;margin:12px 0 0;border-top:1px solid var(--soft);display:flex;flex-direction:column;gap:6px}
.diffstat{margin:4px 0 12px}
.add{color:var(--ok)}.del{color:var(--bad)}
.diff td{padding:0;vertical-align:top}
.diff tr.add td{background:var(--add)}.diff tr.add .ln{background:var(--addn)}
.diff tr.del td{background:var(--del)}.diff tr.del .ln{background:var(--deln)}
.diff tr.hunk td{background:var(--hunk);color:var(--muted)}
.diff tr.add pre,.diff tr.del pre{color:var(--text)}
.filelist{font:12px ui-monospace,monospace}

/* выпуски */
.release .boxhead b{font-size:16px}
.release .notes{padding:6px 16px 10px}
.release .notes ul{margin:6px 0;padding-left:20px}
.release .notes li{margin:4px 0}

/* прогон */
.runhead{padding:16px}
.runhead .title{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.runhead .title h2{margin-right:auto}
.step{background:var(--box);border:1px solid var(--line);border-radius:8px;margin-bottom:6px;overflow:hidden}
.step>summary{display:flex;align-items:center;gap:10px;padding:9px 14px;cursor:pointer;list-style:none}
.step>summary::-webkit-details-marker{display:none}
.step>summary::before{content:"";width:6px;height:6px;border-right:1.5px solid var(--muted);border-bottom:1.5px solid var(--muted);
transform:rotate(-45deg);margin-right:2px;transition:transform .15s}
.step[open]>summary::before{transform:rotate(45deg)}
.step>summary span:first-of-type{font-weight:600;color:var(--text)}
.step>summary .muted{margin-left:auto;font-size:12px}
.log{margin:0;padding:10px 14px;background:var(--code);border-top:1px solid var(--soft);font-size:12px;line-height:18px;
white-space:pre-wrap;word-break:break-word;max-height:70vh;overflow:auto}
.log:empty{display:none}
.log.preface{border:1px solid var(--line);border-radius:8px;margin-bottom:10px}
.gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:12px;padding:12px}
.gallery a{display:flex;flex-direction:column;gap:4px;color:var(--muted);font-size:12px;word-break:break-all}
.gallery img{width:100%;aspect-ratio:4/3;object-fit:cover;object-position:top;border:1px solid var(--line);border-radius:6px;background:#fff}

/* пользователь (0.1.77) */
[data-role="reader"] .admin-only{display:none}
.av{display:inline-grid;place-items:center;width:28px;height:28px;border-radius:50%;color:#fff;font-size:11px;font-weight:700;
letter-spacing:.3px;flex:none;user-select:none}
.av.big{width:72px;height:72px;font-size:24px}
.av.c0{background:#c2410c}.av.c1{background:#0b62c4}.av.c2{background:#1a7f37}.av.c3{background:#8250df}
.av.c4{background:#bf3989}.av.c5{background:#9a6700}.av.c6{background:#0e7490}.av.c7{background:#57606a}
.me{display:inline-flex;align-items:center;gap:8px;color:var(--text);font-weight:500}
.me:hover{text-decoration:none}.me:hover .name{text-decoration:underline}
.role{display:inline-block;font-size:12px;font-weight:600;border-radius:999px;padding:1px 9px;background:var(--chip);color:var(--muted)}
.role.admin{background:var(--accent);color:#fff}
.profile{padding:20px}
.profile .who{display:flex;align-items:center;gap:18px;flex-wrap:wrap}
.profile .who>div{flex:1;min-width:200px}
.profile .meta{margin-top:8px}
.columns{display:grid;grid-template-columns:1fr 1fr;gap:0 16px}
.form .fields{display:flex;flex-direction:column;gap:12px;padding:14px}
.form .fields.row{flex-direction:row;flex-wrap:wrap;align-items:flex-end}
.form .fields.row label{flex:1;min-width:180px}
.form .fields p{margin:0}
.form label{display:flex;flex-direction:column;gap:5px;font-weight:600;font-size:13px}
.form input,.form select,.loginbox input[type=email]{font:inherit;font-weight:400;padding:7px 10px;border:1px solid var(--line);border-radius:6px;
background:var(--bg);color:var(--text)}
.form input:focus,.form select:focus,.loginbox input:focus{outline:2px solid var(--accent);outline-offset:-1px}
.form .btn{align-self:flex-start}
.clone.wide{margin-left:0;width:100%}.clone.wide input{flex:1;width:auto}
.btn.danger{color:var(--bad);border-color:var(--bad)}
.result:empty{display:none}
.result{font-size:13px;border-radius:6px;padding:8px 10px;background:var(--add);color:var(--text);user-select:all}
.result.error{background:var(--del);color:var(--bad);user-select:text}
.result.code{margin:0 0 14px}
.form .result.code{margin:0 14px 14px}
.users td.actions{text-align:right}
.users td.actions .btn{margin:2px}
.small{font-size:12px}

/* вход */
body.login{display:grid;place-items:center;min-height:100vh;padding:16px}
.loginbox{width:100%;max-width:360px;padding:24px;display:flex;flex-direction:column;gap:14px}
.loginbox .brand{margin:0}
.loginbox h1{font-size:20px;margin:0}
.loginbox label{display:flex;flex-direction:column;gap:6px;font-weight:600}
.loginbox input[type=password]{font:inherit;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--text)}
.loginbox input:focus{outline:2px solid var(--accent);outline-offset:-1px}
.loginbox p{margin:0;font-size:12px}
.error{color:var(--bad);background:var(--del);border-radius:6px;padding:8px 10px}

/* телефон */
@media (max-width:720px){
 .me .name{display:none}
 .columns{grid-template-columns:1fr}
 .users td.actions{text-align:left}
 .users tr{display:grid;grid-template-columns:auto 1fr;gap:4px}
 .repo{font-size:16px}.mirror{order:3;width:100%;text-align:center}
 .files .last,.files .age{display:none}.files .name{width:auto}
 .clone{flex:1;margin-left:0}.clone input{flex:1;width:auto}
 .stats .counts{justify-content:flex-start}
 .list td{padding:9px 10px}.ver{display:none}
 .list .st{border:0;padding:0}.list .st .label{display:none}.list .st .i{width:20px;height:20px}
 .list td.stat{padding-right:0}
 .chips{margin-left:0}
 .md{padding:12px}
 .lastcommit time{margin-left:0}
}
