@import "https://fonts.googleapis.com/css2?family=Fraunces:opsz,wght@9..144,650;9..144,750&family=Nunito+Sans:wght@400;600;700;800&display=swap";.group-page{max-width:1100px;margin:0 auto;padding:1rem}.group-page__header{justify-content:space-between;align-items:center;gap:1rem;margin-top:.5rem;display:flex}.group-page__title{min-width:0}.group-page__title h1{margin:0}.group-page__repo-link{overflow-wrap:anywhere;max-width:100%;font-size:.85rem;display:inline-block}.group-page__refresh{flex:none}.group-page__content{grid-template-columns:minmax(180px,220px) minmax(0,1fr);gap:1rem;margin-top:1rem;display:grid}.group-page__authors,.group-page__main{min-width:0}.group-page__table{margin-top:1rem}.group-page__graph-controls{align-items:center;gap:.5rem;margin-bottom:.5rem;display:flex}.group-page__group-label{color:#6b7b8d;white-space:nowrap;font-size:.8rem}.group-page__group-buttons{border:1px solid #d8c7b2;border-radius:6px;display:flex;overflow:hidden}.group-page__group-btn{cursor:pointer;color:#4a5568;background:0 0;border:none;border-right:1px solid #d8c7b2;padding:.25rem .65rem;font-size:.8rem;line-height:1.4;transition:background .1s}.group-page__group-btn:last-child{border-right:none}.group-page__group-btn:hover{background:#f5ede3}.group-page__group-btn--active{color:#fff;background:#0f8b8d}.group-page__group-btn--active:hover{background:#0d7a7c}.meetings-panel{background:#fdf8f3;border:1px solid #d8c7b2;border-radius:8px;margin-top:1rem;padding:.75rem 1rem}.meetings-panel__header{justify-content:space-between;align-items:center;gap:.5rem;display:flex}.meetings-panel__title{color:#3d2b1f;margin:0;font-size:.95rem;font-weight:600}.meetings-panel__add-btn{color:#fff;cursor:pointer;background:#0f8b8d;border:none;border-radius:5px;flex:none;padding:.3rem .7rem;font-size:.8rem}.meetings-panel__add-btn:hover{background:#0d7a7c}.meetings-panel__empty{color:#8a7a6e;margin:.5rem 0 0;font-size:.85rem}.meetings-panel__list{flex-direction:column;gap:.4rem;margin:.5rem 0 0;padding:0;list-style:none;display:flex}.meetings-panel__item{background:#fff;border:1px solid #e8d9c8;border-radius:5px;flex-wrap:wrap;align-items:center;gap:.75rem;padding:.4rem .5rem;display:flex}.meetings-panel__date{color:#3d2b1f;white-space:nowrap;min-width:90px;font-size:.85rem;font-weight:600}.meetings-panel__attendees{color:#6b7b8d;flex-wrap:wrap;flex:1;gap:.3rem;font-size:.8rem;display:flex}.meetings-panel__chip{color:#0f8b8d;white-space:nowrap;background:#e8f4f4;border:1px solid #b3dede;border-radius:100px;padding:.1rem .5rem;font-size:.78rem}.meetings-panel__actions{flex:none;gap:.3rem;display:flex}.meetings-panel__btn{cursor:pointer;color:#4a5568;background:0 0;border:1px solid #d8c7b2;border-radius:4px;padding:.2rem .55rem;font-size:.78rem}.meetings-panel__btn:hover{background:#f5ede3}.meetings-panel__btn--danger{color:#c0392b;border-color:#e8bfbb}.meetings-panel__btn--danger:hover{background:#fdf0ef}.meetings-modal-backdrop{z-index:100;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.meetings-modal{background:#fff;border-radius:10px;flex-direction:column;gap:1rem;width:100%;max-width:420px;padding:1.5rem;display:flex;box-shadow:0 8px 32px #0000002e}.meetings-modal__title{color:#3d2b1f;margin:0;font-size:1.05rem}.meetings-modal__field{flex-direction:column;gap:.3rem;display:flex}.meetings-modal__label{color:#4a5568;font-size:.82rem;font-weight:600}.meetings-modal__input{border:1px solid #d8c7b2;border-radius:5px;padding:.4rem .6rem;font-size:.9rem}.meetings-modal__fieldset{border:1px solid #d8c7b2;border-radius:6px;margin:0;padding:.6rem .75rem}.meetings-modal__legend{color:#4a5568;padding:0 .25rem;font-size:.82rem;font-weight:600}.meetings-modal__no-students{color:#8a7a6e;margin:0;font-size:.82rem}.meetings-modal__student-list{flex-direction:column;gap:.3rem;margin:0;padding:0;list-style:none;display:flex}.meetings-modal__student-item{font-size:.85rem}.meetings-modal__checkbox-label{cursor:pointer;align-items:center;gap:.5rem;display:flex}.meetings-modal__github{color:#8a9ab2;font-size:.78rem}.meetings-modal__error{color:#c0392b;margin:0;font-size:.82rem}.meetings-modal__footer{justify-content:flex-end;gap:.5rem;display:flex}.meetings-modal__cancel{cursor:pointer;color:#4a5568;background:0 0;border:1px solid #d8c7b2;border-radius:5px;padding:.4rem .9rem;font-size:.85rem}.meetings-modal__cancel:hover{background:#f5ede3}.meetings-modal__save{color:#fff;cursor:pointer;background:#0f8b8d;border:none;border-radius:5px;padding:.4rem .9rem;font-size:.85rem}.meetings-modal__save:hover:not(:disabled){background:#0d7a7c}.meetings-modal__save:disabled{opacity:.6;cursor:default}@media (width<=760px){.group-page{padding:.75rem}.group-page__header{flex-direction:column;align-items:stretch}.group-page__refresh{width:100%;min-height:40px}.group-page__content{grid-template-columns:1fr}.group-page__authors{overflow-x:auto}}@media (width<=480px){.group-page{padding:.5rem}.group-page__title h1{font-size:1.6rem;line-height:1.15}}:root{color:#17324d;font-synthesis:none;text-rendering:optimizelegibility;--bg:#fff9ef;--surface:#fff;--surface-soft:#fff3dc;--surface-mint:#e9fbf5;--ink:#17324d;--muted:#6b7b8d;--border:#eadfcf;--border-strong:#d8c7b2;--primary:#0f8b8d;--primary-dark:#096b6d;--coral:#ff6b5f;--coral-dark:#d9453e;--sun:#ffc857;--green:#258b64;--red:#cf3f4b;--shadow:0 18px 45px #2a40521f;--shadow-soft:0 10px 24px #2a405214;--radius:8px;background:#fff9ef;font-family:Nunito Sans,Segoe UI,sans-serif}*{box-sizing:border-box}html,body,#root{min-height:100%}html{background:var(--bg)}body{background:radial-gradient(circle at 12% -8%,#ffc85757,#0000 29rem),radial-gradient(circle at 98% 4%,#0f8b8d2e,#0000 25rem),linear-gradient(#fffaf0 0%,#f7fbf6 100%);min-width:320px;min-height:100vh;margin:0}body:before{z-index:-1;pointer-events:none;content:"";background-image:linear-gradient(#17324d09 1px,#0000 1px),linear-gradient(90deg,#17324d09 1px,#0000 1px);background-size:32px 32px;position:fixed;inset:0;-webkit-mask-image:linear-gradient(#000000d9,#0000 78%);mask-image:linear-gradient(#000000d9,#0000 78%)}a{color:var(--primary-dark);text-underline-offset:3px;font-weight:700;text-decoration-color:#0f8b8d59}a:hover{color:var(--coral-dark);text-decoration-color:#ff6b5f8c}h1,h2,h3{color:var(--ink);letter-spacing:0;font-family:Fraunces,Georgia,serif}h1{font-size:clamp(2rem,5vw,3rem);line-height:1}h2{font-size:1.65rem}h3{font-size:1.15rem}button{border-radius:var(--radius);background:var(--primary);color:#fff;cursor:pointer;min-height:38px;font:inherit;border:1px solid #0000;padding:.55rem .95rem;font-weight:800;transition:transform .16s,box-shadow .16s,background .16s,border-color .16s}button:hover:not(:disabled){background:var(--primary-dark);box-shadow:var(--shadow-soft);transform:translateY(-1px)}button:disabled{cursor:not-allowed;opacity:.58}input{border:1px solid var(--border-strong);border-radius:var(--radius);min-height:40px;color:var(--ink);font:inherit;background:#fffdfa;outline:none;padding:.6rem .75rem;transition:border-color .16s,box-shadow .16s,background .16s}input:focus{border-color:var(--primary);background:#fff;box-shadow:0 0 0 4px #0f8b8d24}.page-shell{width:100%;margin:0 auto;padding:1rem}.page-shell--dashboard,.page-shell--batch{max-width:900px}.page-shell--settings{max-width:600px}.loading-state,.error-boundary{margin:0 auto;padding:2rem}.loading-state{text-align:center;max-width:900px}.error-boundary{max-width:700px}.login-page{place-items:center;min-height:100vh;padding:1rem;display:grid}.login-shell{width:min(100%,400px);margin:0;padding:2rem}.topbar,.section-heading,.card-header,.form-actions,.settings-actions,.pagination,.time-range,.legend,.student-form{align-items:center;display:flex}.topbar,.section-heading,.card-header{justify-content:space-between}.topbar{gap:1rem;margin-bottom:1rem}.topbar__actions,.section-actions,.form-actions,.settings-actions,.pagination,.student-form{gap:.5rem}.topbar__actions{flex-wrap:wrap;align-items:center;display:flex}.section-actions{flex-wrap:wrap;justify-content:flex-end;align-items:center;gap:.5rem;display:flex}.section-heading{gap:1rem;margin-bottom:1rem}.section-heading h2,.topbar h1,.batch-title,.settings-title,.login-title{margin:0}.batch-title,.settings-title{margin-top:1rem;margin-bottom:1rem}.grid{gap:1rem;display:grid}.grid--batches{grid-template-columns:repeat(auto-fill,minmax(250px,1fr))}.card,.panel,.login-shell{border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-soft);background:#ffffffdb}.card{padding:1rem}.card:hover{box-shadow:var(--shadow);border-color:#0f8b8d59}.card-link{font-size:1.1rem;display:inline-block}.muted{color:var(--muted)}.meta{color:var(--muted);font-size:.85rem}.small{font-size:.8rem}.danger-button,.ghost-button,.link-button,.sort-button{box-shadow:none;background:0 0}.danger-button{color:var(--red);padding-inline:.25rem}.danger-button:hover:not(:disabled){color:#a92c36;background:#fff0f0;border-color:#cf3f4b33}.ghost-button,.link-button,.sort-button{color:var(--primary-dark)}.ghost-button{border-color:var(--border);background:#fff}.link-button,.sort-button{border:0;min-height:0;padding:0}.link-button:hover:not(:disabled),.sort-button:hover:not(:disabled){box-shadow:none;color:var(--coral-dark);background:0 0;transform:none}.toast{z-index:20;border-radius:var(--radius);color:#fff;box-shadow:var(--shadow);background:#17324d;border:1px solid #0f8b8d38;padding:.75rem 1rem;position:fixed;bottom:16px;right:16px}.toast button{background:#ffffff1f;border-color:#ffffff47;margin-left:.75rem}.modal-backdrop{z-index:10;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);background:#17324d47;justify-content:center;align-items:center;padding:1rem;display:flex;position:fixed;inset:0}.modal{border:1px solid var(--border);border-radius:var(--radius);min-width:300px;box-shadow:var(--shadow);background:#fff;padding:2rem}.modal--wide{min-width:350px}.modal h3{margin-top:0}.modal input{margin-bottom:.75rem}.modal .form-actions{justify-content:flex-end;margin-top:.25rem}.form-field{margin-bottom:1rem}.form-field label{margin-bottom:.25rem;font-weight:800;display:block}.form-field input,.modal input,.student-form input{width:100%}.inline-note{color:var(--green);font-weight:800}.error-text{color:var(--red)}.back-link{color:var(--muted)}.student-panel{border-left:3px solid var(--sun);margin-top:.5rem;padding-left:1rem}.student-form{flex-wrap:wrap;margin-top:.5rem}.student-form input{flex:180px}.student-list{margin-top:.5rem;padding-left:1rem}.student-list li{margin-bottom:.25rem;font-size:.9rem}.repo-status{border-radius:var(--radius);margin-top:1rem;padding:.75rem;font-size:.9rem}.repo-status p{margin:.25rem 0 0;font-size:.85rem}.repo-status--stale{color:#815a05;background:#fff6cc;border:1px solid #f1c84b}.repo-status--error{color:#9e2632;background:#fff0f0;border:1px solid #ffb1b8}.repo-status--error a{color:#9e2632}.time-range{border:1px solid var(--border);border-radius:var(--radius);background:#ffffffb8;flex-wrap:wrap;gap:1rem;margin-top:1rem;padding:.75rem}.time-range label{color:var(--muted);align-items:center;gap:.5rem;font-weight:800;display:flex}.empty-state{color:var(--muted);margin:.75rem 0}.authors-panel{border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-soft);background:#ffffffc7;padding:.75rem}.authors-panel h3{margin:0 0 .5rem}.author-button{width:100%;color:var(--ink);cursor:pointer;text-align:left;background:0 0;border:1px solid #0000;margin-bottom:.25rem;padding:.5rem;display:block}.author-button:hover:not(:disabled),.author-button--active{background:var(--surface-mint);box-shadow:none;color:var(--ink);border-color:#0f8b8d2e;transform:none}.author-button--active{font-weight:800}.author-button--person{align-items:center;gap:.5rem;display:flex}.author-avatar{border-radius:50%;flex-shrink:0;width:24px;height:24px}.author-avatar--initial{background:var(--coral);color:#fff;justify-content:center;align-items:center;font-size:.75rem;font-weight:800;display:flex}.author-name{font-size:.9rem}.author-count{color:var(--muted);font-size:.8rem}.chart-panel,.table-panel{border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow-soft);background:#ffffffd1;padding:1rem}.chart-frame{width:100%;height:220px}.commit-tooltip{border:1px solid var(--border);min-width:150px;box-shadow:var(--shadow-soft);background:#fffffff5;border-radius:6px;padding:.55rem .65rem}.commit-tooltip__label{color:var(--text);margin-bottom:.4rem;font-size:.8rem;font-weight:700}.commit-tooltip__row{color:#526677;grid-template-columns:10px minmax(0,1fr) auto;align-items:center;gap:.35rem;font-size:.8rem;display:grid}.commit-tooltip__row+.commit-tooltip__row{margin-top:.25rem}.commit-tooltip__row span:nth-child(2){text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.commit-tooltip__swatch{border-radius:2px;width:10px;height:10px}.commit-tooltip__empty{color:var(--muted);font-size:.8rem}.legend{flex-wrap:wrap;gap:.5rem 1rem;margin-top:.25rem}.legend-item{color:#526677;align-items:center;gap:.35rem;font-size:.8rem;display:flex}.legend-swatch{border-radius:2px;width:10px;height:10px;display:inline-block}.table-scroll{-webkit-overflow-scrolling:touch;overflow-x:auto}.commit-table{border-collapse:collapse;width:100%;min-width:780px;font-size:.9rem}.commit-table thead tr{border-bottom:2px solid var(--border-strong);text-align:left}.commit-table tbody tr{border-bottom:1px solid var(--border)}.commit-table tbody tr:nth-child(2n){background:#fff8eb99}.commit-table th,.commit-table td{padding:.6rem .5rem}.commit-table code{font-family:SFMono-Regular,Consolas,monospace;font-size:.85rem}.table-date{color:var(--muted);font-size:.85rem}.lines-cell{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}.lines-add{color:var(--green)}.lines-del{color:var(--red)}.lines-sep{color:var(--muted);margin:0 .25rem}.pagination{justify-content:center;margin-top:1rem}.pagination span{color:var(--muted);padding:.25rem .5rem}@media (width<=760px){.topbar,.section-heading,.card-header,.student-form{flex-direction:column;align-items:stretch}.topbar__actions{align-items:stretch}.section-actions{flex-direction:column;align-items:stretch}.modal,.modal--wide{width:100%;min-width:0}}
