: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}