:root{--bg: #ffffff;--surface: #fbfbfa;--surface-2: #f4f4f2;--border: #ececeb;--border-strong: #e0e0dd;--text: #32302c;--text-muted: #7a7873;--text-faint: #a5a39d;--accent: #d97706;--accent-2: #f59e0b;--accent-soft: #fef3c7;--accent-text: #b45309;--ok-bg: #e9f7ef;--ok-text: #1f7a45;--err-bg: #fdeceb;--err-text: #c0392b;--heat-0: #f1f1ef;--shadow-sm: 0 1px 2px rgba(15, 15, 15, .06);--shadow-md: 0 4px 16px rgba(15, 15, 15, .1);--shadow-lg: 0 12px 40px rgba(15, 15, 15, .16);--radius: 10px;--radius-sm: 7px;--radius-lg: 16px;--font: -apple-system, BlinkMacSystemFont, "Segoe UI", "Pretendard", "Apple SD Gothic Neo", "Malgun Gothic", system-ui, sans-serif;--mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, monospace}@media(prefers-color-scheme:dark){:root{--bg: #1a1a19;--surface: #232322;--surface-2: #2c2c2a;--border: #33322f;--border-strong: #403f3b;--text: #ededeb;--text-muted: #a3a19c;--text-faint: #6f6d68;--accent: #f59e0b;--accent-2: #fbbf24;--accent-soft: #3a2c10;--accent-text: #fbbf24;--ok-bg: #16311f;--ok-text: #6fd499;--err-bg: #3a1f1d;--err-text: #f0897d;--heat-0: #2c2c2a;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .3);--shadow-md: 0 4px 16px rgba(0, 0, 0, .4);--shadow-lg: 0 12px 40px rgba(0, 0, 0, .55)}}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font);background:var(--bg);color:var(--text);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}h1,h2,h3{margin:0;font-weight:650;letter-spacing:-.01em}a{color:var(--accent-text);text-decoration:none}button{font-family:inherit}code{font-family:var(--mono)}.shell{max-width:1000px;margin:0 auto;padding:0 20px 64px}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:14px 0;margin-bottom:8px;background:color-mix(in srgb,var(--bg) 88%,transparent);-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px);border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:9px;font-weight:750;font-size:18px;letter-spacing:-.02em}.brand .logo{border-radius:7px;box-shadow:var(--shadow-sm);display:block}.who{display:flex;align-items:center;gap:10px;min-width:0}.who .name{color:var(--text-muted);font-size:14px;max-width:40vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.badge-admin{font-size:11px;padding:1px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent-text);font-weight:600}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:22px;overflow-x:auto;scrollbar-width:none}.tabs::-webkit-scrollbar{display:none}.tab{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;padding:11px 14px;font-size:15px;color:var(--text-muted);cursor:pointer;border-bottom:2px solid transparent;white-space:nowrap;transition:color .15s}.tab:hover{color:var(--text)}.tab.active{color:var(--text);font-weight:650;border-bottom-color:var(--accent)}.btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;display:inline-flex;align-items:center;justify-content:center;gap:6px;padding:8px 14px;font-size:14px;border-radius:var(--radius-sm);border:1px solid var(--border-strong);background:var(--surface);color:var(--text);cursor:pointer;transition:background .14s,border-color .14s,transform .06s;-webkit-user-select:none;user-select:none}.btn:hover{background:var(--surface-2)}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff;font-weight:600}.btn-primary:hover{background:color-mix(in srgb,var(--accent) 88%,#000)}.btn-icon{width:34px;height:34px;padding:0;font-size:17px;line-height:1}.btn-sm{padding:5px 10px;font-size:13px}.segmented{display:inline-flex;padding:3px;gap:2px;background:var(--surface-2);border-radius:9px;border:1px solid var(--border)}.segmented button{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;padding:6px 16px;font-size:14px;border-radius:6px;color:var(--text-muted);cursor:pointer;transition:all .14s}.segmented button.on{background:var(--bg);color:var(--text);font-weight:600;box-shadow:var(--shadow-sm)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:16px}.grid{display:grid;gap:12px}.grid-stats{grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}.grid-projects{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}.stat .k{font-size:12px;color:var(--text-muted);margin-bottom:6px}.stat .v{font-size:27px;font-weight:750;letter-spacing:-.02em}.stat .v.sm{font-size:18px}.periodnav{display:flex;align-items:center;justify-content:center;gap:12px;margin:18px 0 8px}.periodnav .label{min-width:190px;text-align:center;font-size:16px;font-weight:650}.periodnav .sub{display:block;font-size:12px;color:var(--text-faint);font-weight:400}.section-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:26px 0 12px}.section-head h3{font-size:14px;color:var(--text-muted);font-weight:600}.bars{display:flex;flex-direction:column;gap:7px}.bar-row{display:flex;align-items:center;gap:10px}.bar-row .rk{width:92px;font-size:12px;color:var(--text-muted);text-align:right;flex-shrink:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.bar-track{flex:1;background:var(--surface-2);border-radius:5px;overflow:hidden;height:20px}.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--accent-2));border-radius:5px;min-width:3px;transition:width .35s cubic-bezier(.2,.7,.2,1)}.bar-row .rv{width:34px;font-size:12px;text-align:right;color:var(--text);font-variant-numeric:tabular-nums;flex-shrink:0}.commits{display:flex;flex-direction:column}.commit-row{display:grid;grid-template-columns:auto auto 1fr auto auto;align-items:center;gap:10px;padding:10px 8px;border-bottom:1px solid var(--border);cursor:pointer;border-radius:6px;transition:background .12s}.commit-row:hover{background:var(--surface)}.commit-row .sha{font-size:12px;color:var(--accent-text)}.commit-row .title{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.commit-row .repo{font-size:12px;color:var(--text-faint);max-width:130px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.commit-row .when{font-size:12px;color:var(--text-faint);white-space:nowrap;font-variant-numeric:tabular-nums}.badge{font-size:11px;padding:1px 7px;border-radius:999px;background:var(--accent-soft);color:var(--accent-text);white-space:nowrap;font-weight:550}.type-feat{background:#e6f4ec;color:#1f7a45}.type-fix{background:#fdecea;color:#c0392b}.type-refactor{background:#dbeafe;color:#1d4ed8}.type-docs{background:#cffafe;color:#0e7490}.type-chore{background:#f0f0ee;color:#6f6d68}.type-meeting{background:#ede9fe;color:#6d28d9}@media(prefers-color-scheme:dark){.type-feat{background:#16311f;color:#6fd499}.type-fix{background:#3a1f1d;color:#f0897d}.type-refactor{background:#17293f;color:#93c5fd}.type-docs{background:#0c2f36;color:#67e8f9}.type-chore{background:#2c2c2a;color:#a3a19c}.type-meeting{background:#2a1e42;color:#c4b5fd}}.badge-pick{display:inline-flex;flex-wrap:wrap;gap:6px}.badge-pick .badge{cursor:pointer;border:1px solid transparent;opacity:.45;font-size:12px;padding:4px 11px;transition:opacity .12s,box-shadow .12s}.badge-pick .badge:hover{opacity:.8}.badge-pick .badge.on{opacity:1;box-shadow:inset 0 0 0 1.5px currentColor}.calendar{display:grid;grid-template-columns:repeat(7,1fr);gap:6px}.cal-dow{text-align:center;font-size:12px;color:var(--text-faint);padding-bottom:4px}.cal-cell{aspect-ratio:1 / 1;border-radius:8px;border:1px solid var(--border);background:var(--heat-0);padding:6px;display:flex;flex-direction:column;cursor:pointer;position:relative;transition:transform .08s,box-shadow .12s;min-height:46px}.cal-cell:hover{box-shadow:var(--shadow-sm);transform:translateY(-1px)}.cal-cell.muted{opacity:.4}.cal-cell.today{outline:2px solid var(--accent);outline-offset:-1px}.cal-cell.selected{box-shadow:0 0 0 2px var(--accent) inset}.cal-cell .d{font-size:12px;color:var(--text-muted);font-variant-numeric:tabular-nums}.cal-cell .c{margin-top:auto;font-size:15px;font-weight:700;color:#fff;align-self:flex-end;line-height:1}.cal-cell .cell-foot{margin-top:auto;display:flex;flex-wrap:wrap;gap:4px;align-items:flex-end;justify-content:flex-end}.cal-cell .pill-c,.cal-cell .pill-ev{font-size:10px;font-weight:700;line-height:1;padding:2px 5px;border-radius:999px;white-space:nowrap}.cal-cell .pill-c{background:#00000047;color:#fff}.cal-cell .pill-ev{background:var(--accent);color:#1a1206}.collapse-toggle{display:inline-flex;align-items:center;gap:7px;background:none;border:none;padding:0;cursor:pointer;color:inherit}.collapse-toggle .chev{color:var(--text-muted);font-size:12px;transition:transform .15s;display:inline-block}.collapse-toggle .chev.open{transform:rotate(90deg)}.legend{display:flex;gap:14px;margin:12px 2px 0;font-size:12px;color:var(--text-muted)}.legend .lg{display:inline-flex;align-items:center;gap:6px}.legend .sw{width:11px;height:11px;border-radius:3px;display:inline-block}.legend .sw.commit{background:var(--accent)}.legend .sw.event{background:var(--accent);border-radius:999px}.legend .sw.holiday{background:#e5484d}.cal-cell.holiday .d{color:#e5484d;font-weight:700}.cal-cell .hol{margin-top:2px;font-size:10px;line-height:1.15;color:#e5484d;overflow:hidden;text-overflow:ellipsis;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;word-break:keep-all}.empty{text-align:center;color:var(--text-muted);padding:40px 16px;border:1px dashed var(--border-strong);border-radius:var(--radius);background:var(--surface)}.empty .big{font-size:30px;margin-bottom:8px}.banner{margin:12px 0 0;padding:10px 14px;border-radius:var(--radius-sm);font-size:14px;background:var(--surface-2);color:var(--text);border:1px solid var(--border)}.banner.ok{background:var(--ok-bg);color:var(--ok-text);border-color:transparent}.banner.err{background:var(--err-bg);color:var(--err-text);border-color:transparent}.input{width:100%;padding:9px 12px;font-size:14px;border:1px solid var(--border-strong);border-radius:var(--radius-sm);background:var(--bg);color:var(--text)}.input:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-soft)}.checkline{display:flex;align-items:center;gap:9px;cursor:pointer}.checkline input{width:16px;height:16px;accent-color:var(--accent)}.list-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:11px 6px;border-bottom:1px solid var(--border)}.overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:60;background:#0f0f0f6b;display:flex;align-items:center;justify-content:center;padding:20px;animation:fade .15s ease}@keyframes fade{0%{opacity:0}}.modal{width:100%;max-width:520px;background:var(--bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);border:1px solid var(--border);overflow:hidden;animation:pop .16s cubic-bezier(.2,.7,.2,1)}@keyframes pop{0%{transform:scale(.96);opacity:.6}}.modal-head{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--border)}.modal-body{padding:18px}.modal-msg{font-family:var(--mono);font-size:13px;line-height:1.55;white-space:pre-wrap;word-break:break-word;background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-sm);padding:12px 14px;max-height:40vh;overflow:auto}.kv{display:flex;gap:8px;font-size:13px;padding:5px 0}.kv .kk{color:var(--text-faint);width:78px;flex-shrink:0}.close-x{-webkit-appearance:none;-moz-appearance:none;appearance:none;border:none;background:none;font-size:22px;line-height:1;color:var(--text-faint);cursor:pointer;padding:2px 6px}.muted{color:var(--text-muted)}.faint{color:var(--text-faint)}.spin{color:var(--text-muted);padding:24px 0;text-align:center}.progress{display:flex;align-items:center;gap:10px;margin:12px 0 0;padding:11px 14px;border-radius:var(--radius-sm);background:var(--accent-soft);color:var(--accent-text);border:1px solid transparent;font-size:14px;font-weight:500}.progress .track{position:relative;flex:1;height:6px;border-radius:999px;background:color-mix(in srgb,var(--accent) 22%,transparent);overflow:hidden}.progress .track:before{content:"";position:absolute;left:-40%;top:0;height:100%;width:40%;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--accent-2));animation:indeterminate 1.05s ease-in-out infinite}.progress .spinner{width:15px;height:15px;border-radius:50%;border:2px solid color-mix(in srgb,var(--accent) 30%,transparent);border-top-color:var(--accent);animation:spin .7s linear infinite;flex:none}@keyframes indeterminate{0%{left:-40%}to{left:100%}}@keyframes spin{to{transform:rotate(360deg)}}.login{min-height:100vh;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;text-align:center;padding:24px}.login .logo-lg{border-radius:18px;margin-bottom:14px;box-shadow:var(--shadow-md);display:block}.btn-google{margin-top:20px;padding:11px 22px;font-size:15px}.landing{max-width:920px;margin:0 auto;padding:0 20px 64px}.landing-nav{display:flex;align-items:center;justify-content:space-between;padding:16px 0}.landing-nav .brand .logo{border-radius:7px;box-shadow:var(--shadow-sm);display:block}.landing-hero{display:flex;flex-direction:column;align-items:center;text-align:center;gap:8px;padding:48px 0 40px}.landing-hero .logo-lg{border-radius:20px;box-shadow:var(--shadow-md);display:block;margin-bottom:10px}.landing-hero h1{font-size:34px;letter-spacing:-.03em}.landing-hero .tagline{font-size:17px;color:var(--text);margin:0}.landing-hero .lead{max-width:540px;margin:6px 0 4px;line-height:1.6}.landing-features{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:14px;margin-top:8px}.feature-card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:20px 18px}.feature-card .ficon{font-size:24px;margin-bottom:10px}.feature-card h3{font-size:16px;margin-bottom:6px}.feature-card p{margin:0;font-size:14px;line-height:1.55}.landing-data{margin-top:40px}.landing-data h2{font-size:18px;margin-bottom:10px}.landing-data ul{padding-left:20px;margin:0 0 12px}.landing-data li{margin-bottom:8px;line-height:1.6}.landing-foot{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:10px;margin-top:48px;padding-top:20px;border-top:1px solid var(--border);font-size:13px}.landing-foot nav{display:flex;gap:16px}.legal{max-width:760px;margin:0 auto;padding:0 20px 80px}.legal-body h1{font-size:28px;margin:24px 0 4px}.legal-body h2{font-size:17px;margin:30px 0 8px}.legal-body p,.legal-body li{color:var(--text);line-height:1.7}.legal-body ul{padding-left:20px}.legal-body li{margin-bottom:6px}.legal-foot{margin-top:44px;padding-top:20px;border-top:1px solid var(--border);font-size:13px}@media(max-width:640px){.shell{padding:0 14px 80px}.stat .v{font-size:22px}.commit-row{grid-template-columns:auto 1fr auto;gap:8px}.commit-row .sha,.commit-row .repo{display:none}.periodnav .label{min-width:150px;font-size:15px}.calendar{gap:4px}.cal-cell{padding:3px;min-height:56px;border-radius:6px}.cal-cell .c{font-size:12px}.cal-cell .pill-c,.cal-cell .pill-ev{font-size:9px;padding:1px 4px}.cal-cell .pill-c .pl,.cal-cell .pill-ev .pl{display:none}.cal-cell .hol{font-size:9px;-webkit-line-clamp:1}.who .name{display:none}.overlay{align-items:flex-end;padding:0}.modal{max-width:100%;border-radius:18px 18px 0 0;animation:sheet .2s cubic-bezier(.2,.7,.2,1)}@keyframes sheet{0%{transform:translateY(100%)}}}.repo-meta{display:flex;align-items:center;gap:8px;flex-shrink:0}.repo-progress{width:72px;height:6px;border-radius:999px;background:var(--border-strong);overflow:hidden}.repo-progress .bar{display:block;height:100%;border-radius:999px;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width .2s ease}.pct-input{width:52px;padding:3px 6px;font-size:12px;text-align:right;-moz-appearance:textfield}.pct-input::-webkit-outer-spin-button,.pct-input::-webkit-inner-spin-button{-webkit-appearance:none;margin:0}.repo-meta .pct-unit{font-size:12px;margin-left:-4px}.repo-meta .branch{font-size:12px;min-width:44px;text-align:right}.chk-inline{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted, #7a7873);white-space:nowrap;cursor:pointer}.proj-summary{display:flex;gap:14px;align-items:stretch;margin-top:14px;flex-wrap:wrap}.donut{display:flex;align-items:center;justify-content:center;padding:8px 16px;flex-shrink:0}.donut .ring-bg{stroke:var(--border-strong)}.donut .ring-fg{stroke:var(--accent);transition:stroke-dasharray .35s ease}.donut .ring-num{fill:var(--text, #32302c);font-size:24px;font-weight:700;text-anchor:middle;dominant-baseline:middle}.donut .ring-cap{fill:var(--muted, #7a7873);font-size:10px;text-anchor:middle}.proj-summary .grid-stats{min-width:240px}.pbar-list{display:flex;flex-direction:column;gap:2px;margin-top:8px}.pbar-row{display:flex;align-items:center;gap:10px;padding:7px 4px;border-bottom:1px solid var(--border)}.pbar-name{flex:0 0 34%;max-width:34%;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pbar-track{flex:1;height:10px;border-radius:999px;background:var(--border-strong);overflow:hidden}.pbar-fill{display:block;height:100%;border-radius:999px;transition:width .25s ease}.pbar-fill.bucket-hi{background:linear-gradient(90deg,#16a34a,#22c55e)}.pbar-fill.bucket-mid{background:linear-gradient(90deg,var(--accent),var(--accent-2))}.pbar-fill.bucket-lo{background:linear-gradient(90deg,#dc2626,#f87171)}.pbar-fill.bucket-none{background:transparent}@media(max-width:640px){.pbar-name{flex-basis:42%;max-width:42%}}
