:root{--bg0: #eef4ea;--bg1: #dfe9d6;--ink: #152418;--muted: #4d6352;--line: rgba(21, 36, 24, .12);--panel: rgba(255, 255, 255, .78);--panel-solid: #f7fbf4;--accent: #1f6b3a;--accent-deep: #14512b;--danger: #9b3b32;--warn: #8a6a1d;--ok: #1f6b3a;--shadow: 0 18px 50px rgba(21, 36, 24, .08);--radius: 18px;--font-display: "Fraunces", Georgia, serif;--font-body: "Source Sans 3", system-ui, sans-serif}*{box-sizing:border-box}html,body,#root{min-height:100%}body{margin:0;color:var(--ink);font-family:var(--font-body);background:radial-gradient(1200px 600px at 10% -10%,#cfe3c0 0%,transparent 55%),radial-gradient(900px 500px at 100% 0%,#b7d4c4 0%,transparent 50%),linear-gradient(165deg,var(--bg0),var(--bg1))}button,input,select,textarea{font:inherit}a{color:var(--accent-deep)}.app-shell{max-width:1180px;margin:0 auto;padding:28px 20px 64px}.brand-hero{display:grid;gap:10px;margin-bottom:28px;animation:rise .7s ease both}.brand-hero .eyebrow{margin:0;letter-spacing:.14em;text-transform:uppercase;font-size:12px;font-weight:700;color:var(--accent)}.brand-hero h1{margin:0;font-family:var(--font-display);font-size:clamp(2.4rem,5vw,3.6rem);font-weight:650;letter-spacing:-.03em;line-height:1.05}.brand-hero p{margin:0;max-width:42rem;color:var(--muted);font-size:1.05rem}.topbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;justify-content:space-between;margin-bottom:18px}.nav-tabs{display:flex;flex-wrap:wrap;gap:8px}.nav-tabs button{border:1px solid var(--line);background:transparent;color:var(--ink);border-radius:999px;padding:8px 14px;cursor:pointer}.nav-tabs button.active{background:var(--accent);border-color:var(--accent);color:#fff}.user-chip{font-size:.92rem;color:var(--muted)}.panel{background:var(--panel);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px;animation:rise .55s ease both}.panel+.panel{margin-top:16px}.panel h2{margin:0 0 8px;font-family:var(--font-display);font-size:1.55rem}.hint{color:var(--muted);font-size:.95rem;margin:0 0 12px}.toolbar{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}button.primary,button.secondary,button.danger{display:inline-flex;align-items:center;gap:8px;border-radius:12px;padding:10px 14px;border:1px solid transparent;cursor:pointer}button.primary{background:var(--accent);color:#fff}button.primary:hover{background:var(--accent-deep)}button.secondary{background:#fff;border-color:var(--line);color:var(--ink)}button.danger{background:#f7e8e6;color:var(--danger);border-color:#9b3b3240}button:disabled{opacity:.55;cursor:not-allowed}.grid-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin:14px 0 4px}.stat{background:var(--panel-solid);border:1px solid var(--line);border-radius:14px;padding:14px}.stat strong{display:block;font-size:1.35rem;margin-top:4px}.stat span{color:var(--muted);font-size:.85rem}.timeline{display:grid;gap:12px;margin-top:12px}.point-card{border:1px solid var(--line);border-radius:14px;padding:14px;background:#ffffffb3;transition:transform .2s ease,box-shadow .2s ease}.point-card:hover{transform:translateY(-2px);box-shadow:0 10px 28px #15241814}.point-card header{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}.status{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase}.status.ok{color:var(--ok)}.status.fail{color:var(--danger)}.status.run{color:var(--warn)}.meta{display:flex;flex-wrap:wrap;gap:10px;font-size:.9rem;color:var(--muted);margin-top:8px}code.sha{display:block;margin-top:8px;font-size:11px;word-break:break-all;color:var(--muted)}.notice{display:flex;gap:8px;align-items:flex-start;padding:12px 14px;border-radius:12px;margin:10px 0;background:#eef6ea;border:1px solid rgba(31,107,58,.18)}.notice.error{background:#f8ecea;border-color:#9b3b3233;color:var(--danger)}.dropzone{border:2px dashed rgba(31,107,58,.35);border-radius:16px;padding:28px;text-align:center;background:#ffffff8c;cursor:pointer}.dropzone.drag{border-color:var(--accent);background:#1f6b3a14}.form-grid{display:grid;gap:12px;max-width:520px}.form-grid label{display:grid;gap:6px;font-weight:600;font-size:.92rem}.form-grid input,.form-grid select{border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:#fff}.login-gate{min-height:70vh;display:grid;place-items:center}.login-gate .panel{max-width:460px;width:100%}.spin{animation:spin .9s linear infinite}@keyframes rise{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}@keyframes spin{to{transform:rotate(360deg)}}@media(max-width:720px){.app-shell{padding:18px 14px 48px}.brand-hero h1{font-size:2.2rem}}
