Download web/static/app.css from GGUFGuy/hyperdex-trainer: direct link, hf CLI and curl.
- Browser
- Download file 16.9 kB
-
https://huggingface.co/GGUFGuy/hyperdex-trainer/resolve/main/web/static/app.css
- Command line
-
hf download hf://GGUFGuy/hyperdex-trainer/web/static/app.css
-
curl -L -o app.css https://huggingface.co/GGUFGuy/hyperdex-trainer/resolve/main/web/static/app.css
16.9 kB
| :root{ | |
| --bg:#080b0f; --bg-2:#0d1117; --panel:#11161d; --panel-2:#161d26; | |
| --line:#1e2733; --line-2:#2a3441; | |
| --fg:#e7edf5; --fg-2:#9aa8ba; --fg-3:#64748b; | |
| --accent:#2ee6a8; --accent-2:#19b884; --accent-dim:#2ee6a81a; | |
| --blue:#5aa9ff; --violet:#a78bfa; --amber:#fbbf24; --red:#fb7185; | |
| --r:14px; --r-sm:9px; | |
| --mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace; | |
| --sans:-apple-system,BlinkMacSystemFont,"Inter","Segoe UI",Roboto,sans-serif; | |
| } | |
| *{box-sizing:border-box} | |
| html,body{margin:0;padding:0} | |
| body{background:var(--bg);color:var(--fg);font-family:var(--sans); | |
| font-size:15px;line-height:1.6;-webkit-font-smoothing:antialiased; | |
| min-height:100vh;display:flex;flex-direction:column} | |
| a{color:inherit;text-decoration:none} | |
| h1,h2,h3,h4{margin:0;line-height:1.2;letter-spacing:-.022em;font-weight:650} | |
| ::selection{background:var(--accent);color:#04140e} | |
| /* ---------- layout ---------- */ | |
| .wrap{width:100%;max-width:1140px;margin:0 auto;padding:0 24px} | |
| main{flex:1;padding:36px 0 72px} | |
| .grid{display:grid;gap:16px} | |
| .g2{grid-template-columns:repeat(2,1fr)} | |
| .g3{grid-template-columns:repeat(3,1fr)} | |
| .g4{grid-template-columns:repeat(4,1fr)} | |
| @media(max-width:880px){.g2,.g3,.g4{grid-template-columns:1fr}} | |
| /* ---------- nav ---------- */ | |
| nav{position:sticky;top:0;z-index:50;background:rgba(8,11,15,.82); | |
| backdrop-filter:blur(14px);border-bottom:1px solid var(--line)} | |
| nav .wrap{display:flex;align-items:center;gap:8px;height:60px} | |
| .brand{display:flex;align-items:center;gap:9px;font-weight:700;font-size:16.5px; | |
| letter-spacing:-.03em;margin-right:14px} | |
| .brand .dot{width:9px;height:9px;border-radius:50%;background:var(--accent); | |
| box-shadow:0 0 12px var(--accent)} | |
| .navlinks{display:flex;gap:2px;flex:1} | |
| .navlinks a{padding:7px 13px;border-radius:8px;color:var(--fg-2);font-size:14px; | |
| font-weight:500;transition:.15s} | |
| .navlinks a:hover{color:var(--fg);background:var(--panel)} | |
| .navlinks a.on{color:var(--accent);background:var(--accent-dim)} | |
| .avatar{width:30px;height:30px;border-radius:50%;border:1px solid var(--line-2); | |
| object-fit:cover;background:var(--panel-2)} | |
| .usermenu{display:flex;align-items:center;gap:9px;padding:4px 11px 4px 4px; | |
| border:1px solid var(--line);border-radius:99px;font-size:13.5px;font-weight:500} | |
| .usermenu:hover{border-color:var(--line-2);background:var(--panel)} | |
| @media(max-width:760px){.navlinks a{padding:7px 9px;font-size:13px} | |
| .usermenu span{display:none}} | |
| /* ---------- buttons ---------- */ | |
| .btn{display:inline-flex;align-items:center;justify-content:center;gap:8px; | |
| padding:10px 18px;border-radius:var(--r-sm);border:1px solid var(--line-2); | |
| background:var(--panel);color:var(--fg);font:inherit;font-size:14px; | |
| font-weight:560;cursor:pointer;transition:.15s;white-space:nowrap} | |
| .btn:hover{background:var(--panel-2);border-color:#374151} | |
| .btn:disabled{opacity:.4;cursor:not-allowed} | |
| .btn.primary{background:var(--accent);border-color:var(--accent);color:#04140e} | |
| .btn.primary:hover{background:#48f0b8;border-color:#48f0b8} | |
| .btn.ghost{background:transparent;border-color:transparent;color:var(--fg-2)} | |
| .btn.ghost:hover{color:var(--fg);background:var(--panel)} | |
| .btn.danger{border-color:#4c1d24;color:var(--red);background:transparent} | |
| .btn.danger:hover{background:#2a1015} | |
| .btn.lg{padding:13px 26px;font-size:15px} | |
| .btn.sm{padding:6px 12px;font-size:13px} | |
| /* ---------- cards ---------- */ | |
| .card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r); | |
| padding:20px} | |
| .card.pad-lg{padding:26px} | |
| .card h3{font-size:16px;margin-bottom:3px} | |
| .sub{color:var(--fg-2);font-size:13.5px} | |
| .muted{color:var(--fg-3)} | |
| .mono{font-family:var(--mono);font-variant-numeric:tabular-nums} | |
| .eyebrow{font-size:11px;text-transform:uppercase;letter-spacing:.11em; | |
| color:var(--fg-3);font-weight:650} | |
| .sect-h{display:flex;align-items:baseline;justify-content:space-between; | |
| gap:12px;margin:0 0 14px} | |
| .sect-h h2{font-size:19px} | |
| /* ---------- chips ---------- */ | |
| .chip{display:inline-flex;align-items:center;gap:6px;font-size:11.5px; | |
| font-weight:650;padding:3px 10px;border-radius:99px;letter-spacing:.02em; | |
| color:var(--c);background:color-mix(in srgb,var(--c) 13%,transparent); | |
| border:1px solid color-mix(in srgb,var(--c) 30%,transparent);white-space:nowrap} | |
| .chip i{width:5px;height:5px;border-radius:50%;background:var(--c);flex:none} | |
| .chip.queued{--c:var(--violet)} .chip.running{--c:var(--accent)} | |
| .chip.done{--c:var(--blue)} .chip.failed{--c:var(--red)} | |
| .chip.cancelled{--c:#64748b} | |
| .chip.running i{animation:pulse 1.4s ease-in-out infinite} | |
| @keyframes pulse{0%,100%{opacity:1}50%{opacity:.25}} | |
| /* ---------- progress ---------- */ | |
| .bar{height:6px;border-radius:99px;background:var(--line);overflow:hidden} | |
| .bar>i{display:block;height:100%;border-radius:99px; | |
| background:linear-gradient(90deg,var(--accent-2),var(--accent)); | |
| transition:width .5s ease} | |
| .bar.thin{height:4px} | |
| /* ---------- stat tiles ---------- */ | |
| .stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--r); | |
| padding:16px 18px} | |
| .stat b{display:block;font-size:25px;font-weight:680;letter-spacing:-.03em; | |
| font-variant-numeric:tabular-nums;line-height:1.15} | |
| .stat span{font-size:11px;text-transform:uppercase;letter-spacing:.1em; | |
| color:var(--fg-3);font-weight:650} | |
| .stat small{display:block;color:var(--fg-3);font-size:12px;margin-top:2px} | |
| /* ---------- run rows ---------- */ | |
| .runs{display:flex;flex-direction:column;gap:9px} | |
| .run{display:block;background:var(--panel);border:1px solid var(--line); | |
| border-radius:var(--r);padding:15px 18px;transition:.15s} | |
| .run:hover{border-color:var(--line-2);background:var(--panel-2)} | |
| .run-top{display:flex;align-items:center;gap:11px;margin-bottom:4px} | |
| .run-top h4{font-size:15px;font-weight:620;flex:1;min-width:0; | |
| overflow:hidden;text-overflow:ellipsis;white-space:nowrap} | |
| .run-meta{display:flex;gap:14px;flex-wrap:wrap;font-size:12.5px;color:var(--fg-3); | |
| font-variant-numeric:tabular-nums} | |
| .run-meta b{color:var(--fg-2);font-weight:600} | |
| .run .bar{margin-top:11px} | |
| /* ---------- forms ---------- */ | |
| label.fl{display:block;font-size:12.5px;font-weight:620;color:var(--fg-2); | |
| margin-bottom:7px} | |
| input[type=text],input[type=number],textarea,select{width:100%;padding:11px 14px; | |
| background:var(--bg-2);border:1px solid var(--line-2);border-radius:var(--r-sm); | |
| color:var(--fg);font:inherit;font-size:14.5px;transition:.15s} | |
| input:focus,textarea:focus,select:focus{outline:none;border-color:var(--accent); | |
| box-shadow:0 0 0 3px var(--accent-dim)} | |
| input::placeholder,textarea::placeholder{color:#4b5563} | |
| textarea{resize:vertical;font-family:var(--mono);font-size:13.5px;line-height:1.65} | |
| .hint{font-size:12.5px;color:var(--fg-3);margin-top:7px} | |
| input[type=range]{-webkit-appearance:none;appearance:none;width:100%;height:6px; | |
| background:var(--line);border-radius:99px;padding:0;border:none;outline:none} | |
| input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;width:20px;height:20px; | |
| border-radius:50%;background:var(--accent);cursor:grab;border:3px solid var(--bg); | |
| box-shadow:0 0 0 1px var(--accent)} | |
| input[type=range]::-moz-range-thumb{width:20px;height:20px;border-radius:50%; | |
| background:var(--accent);cursor:grab;border:3px solid var(--bg);box-shadow:0 0 0 1px var(--accent)} | |
| /* ---------- pick cards ---------- */ | |
| .picks{display:grid;grid-template-columns:repeat(4,1fr);gap:11px} | |
| @media(max-width:820px){.picks{grid-template-columns:repeat(2,1fr)}} | |
| .pick{background:var(--bg-2);border:1.5px solid var(--line-2);border-radius:var(--r); | |
| padding:16px;cursor:pointer;transition:.15s;text-align:left;color:inherit; | |
| font:inherit;display:block} | |
| .pick:hover{border-color:#3b4b5e;background:var(--panel-2)} | |
| .pick.on{border-color:var(--accent);background:var(--accent-dim); | |
| box-shadow:0 0 0 3px var(--accent-dim)} | |
| .pick b{display:block;font-size:15.5px;font-weight:660;letter-spacing:-.02em} | |
| .pick .p-n{font-family:var(--mono);font-size:12.5px;color:var(--accent); | |
| margin:4px 0 8px;font-variant-numeric:tabular-nums} | |
| .pick .p-d{font-size:12px;color:var(--fg-3);line-height:1.55} | |
| /* ---------- steps ---------- */ | |
| .steps{display:flex;gap:0;margin-bottom:28px;border-bottom:1px solid var(--line)} | |
| .stp{flex:1;padding:0 0 13px;border-bottom:2px solid transparent; | |
| margin-bottom:-1px;color:var(--fg-3);transition:.2s} | |
| .stp.on{color:var(--accent);border-bottom-color:var(--accent)} | |
| .stp.ok{color:var(--fg-2);border-bottom-color:var(--line-2)} | |
| .stp .n{font-family:var(--mono);font-size:11px;letter-spacing:.1em; | |
| text-transform:uppercase;font-weight:700} | |
| .stp .t{font-size:14px;font-weight:600;margin-top:2px} | |
| @media(max-width:700px){.stp .t{font-size:12px}} | |
| .panelstep{display:none} .panelstep.on{display:block;animation:fade .25s ease} | |
| @keyframes fade{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}} | |
| /* ---------- chart ---------- */ | |
| .chart{width:100%;height:280px;display:block} | |
| .chart .gl{stroke:var(--line);stroke-width:1} | |
| .chart .ax{fill:var(--fg-3);font-size:10.5px;font-family:var(--mono)} | |
| .chart .ln{fill:none;stroke:var(--accent);stroke-width:2; | |
| stroke-linejoin:round;stroke-linecap:round} | |
| .chart .ar{fill:url(#lg)} | |
| /* ---------- logs ---------- */ | |
| .logs{background:#05080b;border:1px solid var(--line);border-radius:var(--r-sm); | |
| padding:14px 16px;font-family:var(--mono);font-size:12.2px;line-height:1.75; | |
| max-height:340px;overflow:auto;color:#9fb3c8;white-space:pre-wrap;word-break:break-word} | |
| .logs .t{color:#3f5063;margin-right:9px} | |
| /* ---------- table ---------- */ | |
| table{width:100%;border-collapse:collapse;font-size:13.5px} | |
| th{text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.09em; | |
| color:var(--fg-3);font-weight:650;padding:0 14px 10px;border-bottom:1px solid var(--line)} | |
| td{padding:13px 14px;border-bottom:1px solid var(--line); | |
| font-variant-numeric:tabular-nums} | |
| tbody tr:hover{background:var(--panel)} | |
| tbody tr:last-child td{border-bottom:none} | |
| /* ---------- landing ---------- */ | |
| .hero{padding:76px 0 56px;text-align:center;position:relative;overflow:hidden} | |
| .hero::before{content:"";position:absolute;inset:-45% 15% auto;height:420px; | |
| background:radial-gradient(ellipse at center,rgba(46,230,168,.13),transparent 65%); | |
| pointer-events:none} | |
| .hero h1{font-size:clamp(35px,6.4vw,60px);font-weight:720;letter-spacing:-.045em; | |
| position:relative;line-height:1.05} | |
| .hero h1 em{font-style:normal; | |
| background:linear-gradient(100deg,var(--accent),var(--blue)); | |
| -webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent} | |
| .hero p{font-size:clamp(15.5px,2.2vw,19px);color:var(--fg-2);max-width:640px; | |
| margin:20px auto 0;position:relative} | |
| .hero .cta{display:flex;gap:12px;justify-content:center;margin-top:34px; | |
| position:relative;flex-wrap:wrap} | |
| .tag{display:inline-flex;align-items:center;gap:8px;padding:5px 14px; | |
| border:1px solid var(--line-2);border-radius:99px;font-size:12.5px; | |
| color:var(--fg-2);margin-bottom:24px;position:relative;background:var(--panel)} | |
| .tag b{color:var(--accent);font-weight:640} | |
| .step-n{width:26px;height:26px;border-radius:8px;background:var(--accent-dim); | |
| color:var(--accent);display:grid;place-items:center;font-family:var(--mono); | |
| font-size:12px;font-weight:700;margin-bottom:11px} | |
| /* ---------- misc ---------- */ | |
| .empty{padding:52px 24px;text-align:center;color:var(--fg-3); | |
| border:1px dashed var(--line-2);border-radius:var(--r);font-size:14px} | |
| .toast{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(80px); | |
| background:var(--panel-2);border:1px solid var(--line-2);border-radius:var(--r-sm); | |
| padding:13px 20px;font-size:14px;z-index:200;opacity:0;transition:.28s; | |
| box-shadow:0 12px 40px rgba(0,0,0,.55);max-width:min(560px,90vw)} | |
| .toast.on{opacity:1;transform:translateX(-50%)} | |
| .toast.err{border-color:#4c1d24;color:#ffc4cc} | |
| .toast.ok{border-color:var(--accent-2)} | |
| .gpu{background:var(--panel);border:1px solid var(--line);border-radius:var(--r); | |
| padding:15px 17px} | |
| .gpu.busy{border-color:color-mix(in srgb,var(--accent) 34%,var(--line))} | |
| .gpu-h{display:flex;justify-content:space-between;align-items:baseline; | |
| font-size:13.5px;font-weight:640;margin-bottom:9px} | |
| .gpu-h span{font-family:var(--mono);font-size:11px;color:var(--fg-3)} | |
| footer{border-top:1px solid var(--line);padding:26px 0;color:var(--fg-3); | |
| font-size:13px} | |
| footer .wrap{display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap} | |
| footer a{color:var(--fg-2)} footer a:hover{color:var(--accent)} | |
| .kv{display:flex;justify-content:space-between;gap:14px;padding:9px 0; | |
| border-bottom:1px solid var(--line);font-size:13.5px} | |
| .kv:last-child{border-bottom:none} | |
| .kv span{color:var(--fg-3)} .kv b{font-weight:600;font-variant-numeric:tabular-nums} | |
| /* ========================================================================= | |
| Mobile / touch | |
| ========================================================================= */ | |
| html{-webkit-text-size-adjust:100%} | |
| body{overflow-x:hidden} | |
| .tscroll{overflow-x:auto;-webkit-overflow-scrolling:touch} | |
| .logs{-webkit-overflow-scrolling:touch} | |
| img,svg{max-width:100%} | |
| /* Stat tiles stay two-up rather than becoming a tall stack. */ | |
| @media(max-width:880px){ | |
| .g4{grid-template-columns:repeat(2,1fr)} | |
| .g3{grid-template-columns:repeat(2,1fr)} | |
| .stats{grid-template-columns:repeat(2,1fr)} | |
| } | |
| @media(max-width:760px){ | |
| .wrap{padding:0 16px} | |
| main{padding:26px 0 56px} | |
| /* Two-row nav: brand + account on top, scrollable links underneath. */ | |
| nav .wrap{height:auto;flex-wrap:wrap;padding-top:10px;padding-bottom:8px; | |
| row-gap:6px} | |
| .brand{margin-right:auto;font-size:16px} | |
| .navlinks{order:3;flex-basis:100%;overflow-x:auto; | |
| -webkit-overflow-scrolling:touch;scrollbar-width:none;gap:3px; | |
| padding-bottom:2px} | |
| .navlinks::-webkit-scrollbar{display:none} | |
| .navlinks a{padding:7px 12px;font-size:13.5px;flex:none;white-space:nowrap} | |
| /* "Sign in with Hugging Face" is too wide for a phone header. */ | |
| .signin-long{display:none} | |
| nav .btn.primary{padding:9px 14px;min-height:36px} | |
| .hero{padding:44px 0 38px} | |
| .hero .cta{flex-direction:column;align-items:stretch} | |
| .hero .cta .btn{width:100%} | |
| .btn{padding:11px 17px;min-height:42px} | |
| .btn.sm{padding:8px 13px;min-height:36px} | |
| .btn.lg{padding:14px 22px;min-height:48px} | |
| .card{padding:17px} .card.pad-lg{padding:19px} | |
| .stat{padding:14px 15px} | |
| .stat b{font-size:21px} | |
| .sect-h{flex-direction:column;align-items:flex-start;gap:8px} | |
| .sect-h h1,.sect-h h2{font-size:18px} | |
| /* Wizard: four steps still fit by shrinking the labels. */ | |
| .steps{margin-bottom:22px} | |
| .stp{padding-bottom:11px} | |
| .stp .n{font-size:9.5px;letter-spacing:.06em} | |
| .stp .t{font-size:12px} | |
| .chart{height:210px} | |
| .run{padding:14px 15px} | |
| .run-meta{gap:10px;font-size:12px} | |
| .kv{font-size:13px;gap:10px} | |
| input[type=text],input[type=number],textarea,select{font-size:16px} /* no iOS zoom */ | |
| input[type=range]{height:8px} | |
| input[type=range]::-webkit-slider-thumb{width:24px;height:24px} | |
| input[type=range]::-moz-range-thumb{width:24px;height:24px} | |
| .logs{font-size:11.6px;max-height:260px} | |
| th,td{padding-left:10px;padding-right:10px} | |
| .toast{left:16px;right:16px;transform:translateY(80px);max-width:none} | |
| .toast.on{transform:none} | |
| } | |
| @media(max-width:520px){ | |
| .picks{grid-template-columns:1fr} | |
| .g3{grid-template-columns:1fr} | |
| .pick{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;padding:14px} | |
| .pick b{flex:none} | |
| .pick .p-n{margin:0} | |
| .pick .p-d{flex-basis:100%;margin-top:4px} | |
| .hero h1{letter-spacing:-.035em} | |
| footer .wrap{flex-direction:column;gap:8px;font-size:12.5px} | |
| } | |
| @media(max-width:359px){ | |
| .g4,.stats{grid-template-columns:1fr} | |
| .stat b{font-size:24px} | |
| } | |
| @media(hover:none){ | |
| .run:active{background:var(--panel-2)} | |
| .pick:active{border-color:var(--accent)} | |
| } | |
| /* Long labels that collapse on narrow screens */ | |
| .signin-short{display:none} | |
| @media(max-width:760px){ .signin-short{display:inline} } | |
| /* Empty-state text inside the loss chart needs to survive the viewBox scale */ | |
| .chart .ph{fill:var(--fg-3);font-size:15px;font-family:var(--sans)} | |
| /* Playground output — prompt dimmed, continuation bright */ | |
| .pgout{background:#05080b;border:1px solid var(--line);border-radius:var(--r-sm); | |
| padding:14px 16px;font-family:var(--mono);font-size:13px;line-height:1.8; | |
| white-space:pre-wrap;word-break:break-word;max-height:340px;overflow:auto; | |
| -webkit-overflow-scrolling:touch} | |
| .pgout .pgp{color:var(--fg-3)} | |
| .pgout .pgc{color:#bfe9d8} | |
| @media(max-width:760px){ .pgout{font-size:12.4px;padding:12px 13px} } | |
| /* Shown only when the app is running inside the Space iframe */ | |
| .frame-note{display:none} | |
| .framed .frame-note{display:block;position:relative;margin:16px auto 0; | |
| max-width:460px;font-size:12.5px;color:var(--fg-3);text-align:center} | |
| /* Token-budget shortcuts under the slider */ | |
| .quickpick{display:flex;gap:7px;margin-top:14px;flex-wrap:wrap} | |
| .quickpick .btn{flex:1;min-width:64px} | |