:root{--bg1:#f7f3ee;--bg2:#e9eef0;--ink:#1d2a2e;--muted:#6f7f84;--line:#e6e8ec;--accent:#518b99;--teach:#b9c9ce;--exam:#8fb0b8;--free:#e6e2db;--break:#d9e3d6;--sw:#e9dcc7;--radius:8px;--radius-lg:12px;--shadow:0 1px 2px #1018280f;--shadow-hover:0 6px 18px #10182829;--font-display:"Fraunces",Georgia,serif;--font-body:"Inter",-apple-system,"Segoe UI",sans-serif;--ease:cubic-bezier(.2,.7,.2,1);--t-reveal:1.4s;--t-highlight:1.2s;--surface:#fffdfa;--surface-soft:#f2ede4;--surface-strong:#1d2a2e;--line-soft:#efe9e0;--accent-soft:#518b991f;--accent-strong:#3d6b76;--flag:#a9765a;--flag-soft:#a9765a24;--amber:#a98b3f;--amber-soft:#a98b3f24;--good:#5c7a63;--good-soft:#5c7a6324;--radius-sm:6px;--radius-xl:16px;--radius-pill:999px;--t-fast:.6s;--t-base:.6s;--touch:44px;--scrim:#1d2a2e80;--scrim-soft:#1d2a2e47;--tint:#1d2a2e0f;--ring:#518b9938;--border-radius:var(--radius-lg);--shadow-sm:var(--shadow);--shadow-md:var(--shadow-hover);--transition-speed:var(--t-base);--ease-out-cubic:var(--ease);--animation-speed-fast:.6s;--animation-speed-normal:.8s;--animation-speed-slow:1s}.home-container{font-family:var(--font-body);padding:1.25rem}.class-status-card{margin-bottom:1.5rem;padding:.75rem}.card-label{background-color:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);color:var(--muted);font-size:.75rem;font-weight:500;left:16px;padding:.25rem .75rem;position:absolute;top:-10px}.class-content{padding-top:1.25rem}.section-label{font-size:.75rem;font-weight:500;margin-bottom:.75rem}.program-header{align-items:center;margin-bottom:1.5rem;padding:0 .5rem}.program-icon-container{align-items:center;background-color:var(--ink);border-radius:var(--radius-lg);color:var(--surface);display:flex;flex-shrink:0;font-family:var(--font-display);font-size:1rem;font-weight:500;height:50px;justify-content:center;margin-right:1rem;position:relative;width:50px}.program-code{letter-spacing:.05em}.semester-badge{font-size:.7rem;font-weight:700;height:20px;width:20px}.program-details{flex:1 1}.program-name{color:var(--ink);font-family:var(--font-display);font-size:1.25rem;font-weight:500;margin:0 0 .25rem}.section-label{color:var(--muted);font-size:.85rem}.semester-progress{margin-bottom:1.5rem;padding:0 .5rem}.progress-header{margin-bottom:1rem}.progress-label,.progress-percentage{font-size:.85rem}.progress-bar-wrapper{position:relative}.progress-track{margin-bottom:1.5rem}.milestones{justify-content:space-between;margin-top:-1.5rem}.milestone{width:60px}.milestone-dot{height:12px;margin-bottom:8px;width:12px}.milestone-label{font-size:.75rem;text-align:center}.cr-info{margin:0 .5rem;padding:.75rem .5rem}.cr-avatar{background-color:var(--line);border-radius:50%;margin-right:.75rem;overflow:hidden}.cr-label{font-size:.7rem}.cr-name{font-size:.9rem}.navigation-section{margin-bottom:1.5rem}.navigation-section .section-label{color:var(--muted);font-size:.85rem;margin-bottom:.75rem;margin-left:.5rem}.navigation-tiles{grid-gap:.75rem;gap:.75rem;grid-template-columns:1fr}.nav-tile{align-items:center;padding:1.25rem}.nav-tile:hover{box-shadow:var(--shadow-hover);transform:translateY(-2px)}.tile-icon{border-radius:var(--radius-lg);color:var(--accent);height:48px;margin-right:1rem;width:48px}.tile-icon svg{height:22px;width:22px}.tile-content h2{font-size:1.1rem;margin:0 0 .25rem}.tile-content p{font-size:.85rem}.creator-credit{color:var(--muted);font-family:monospace;font-size:.75rem;margin-top:auto;padding:.75rem 0;text-align:center}.semester-timeline-section{margin-bottom:2rem;padding:1.5rem 1rem}.semester-timeline-section .section-label{color:var(--ink);font-size:.9rem;font-weight:500;margin-bottom:1.25rem;margin-left:.5rem}.timeline-container{padding-left:2rem}.timeline-line{left:10px}.timeline-event{margin-bottom:1.5rem;padding-bottom:.5rem;transition:background-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease)}.timeline-event:last-child{margin-bottom:0}.timeline-dot{background-color:var(--line);border:2px solid var(--surface);height:16px;left:-2rem;top:.25rem;transition:background-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease);width:16px;z-index:1}.timeline-event.past .timeline-dot{background-color:var(--ink)}.timeline-event.today .timeline-dot{background-color:var(--ink);box-shadow:var(--ring);transform:scale(1.2)}.timeline-content{padding-left:.5rem}.timeline-date{font-size:.8rem;margin-bottom:.2rem}.timeline-title{font-size:.95rem}.timeline-event.past .timeline-title{color:var(--ink)}.timeline-event.today .timeline-title{color:var(--ink);font-weight:600}@media (min-width:600px){.navigation-tiles{grid-template-columns:repeat(2,1fr)}}@media (max-width:480px){.home-container{gap:20px;padding:16px 12px}.class-status-card{border-radius:12px;margin-bottom:16px;padding:16px}.program-header{gap:12px;margin-bottom:20px}.program-icon-container{height:44px;width:44px}.program-name{font-size:18px}.section-label{font-size:14px}.navigation-tiles{gap:12px}.nav-tile{padding:14px}.tile-icon{height:36px;margin-right:12px;width:36px}.tile-content h2{font-size:16px}.tile-content p{font-size:12px}}@media (max-width:360px){.home-container{padding:12px 8px}.program-name{font-size:16px}.section-label{font-size:12px}.nav-tile{padding:12px}.tile-icon{height:32px;width:32px}}.visually-hidden-submit{clip:rect(0,0,0,0);border:0;height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;white-space:nowrap;width:1px}body{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:radial-gradient(120% 90% at 50% 110%,var(--bg2) 0,var(--bg1) 60%);background-attachment:fixed;color:var(--ink);font-family:var(--font-body);margin:0}code{font-family:source-code-pro,Menlo,Monaco,Consolas,Courier New,monospace}.App{margin:0 auto;max-width:100%;overflow-x:hidden;padding-bottom:20px}.App-header{align-items:center;background-color:var(--surface);box-shadow:var(--shadow-sm);color:var(--ink);display:flex;justify-content:space-between;padding:.75rem 1rem;position:sticky;top:0;width:100%;z-index:10}.App-header h1{font-family:var(--font-display);font-size:1.5rem;font-weight:500;margin:0}.app-title{cursor:default;margin-left:0;overflow:hidden;text-align:center;text-overflow:ellipsis;white-space:nowrap}.login-button{background-color:var(--accent);border:none;border-radius:var(--radius);color:var(--surface);cursor:pointer;font-size:.9rem;margin-left:auto;min-height:var(--touch);padding:.5rem 1rem;transition:background-color var(--t-fast) var(--ease);white-space:nowrap}.login-button:hover{background-color:var(--accent-strong)}button{background-color:var(--accent);border:none;border-radius:var(--radius);color:var(--surface);cursor:pointer;font-family:var(--font-body);font-size:.9rem;min-height:var(--touch);padding:.5rem 1rem;transition:background-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease)}button:hover{background-color:var(--accent-strong)}main{max-width:100%;overflow-x:hidden;padding:1rem;width:100%}.deliverables-list{display:flex;flex-direction:column;gap:.75rem;width:100%}.empty-deliverables{color:var(--muted);padding:32px 16px;text-align:center}.empty-deliverables p{font-size:.9rem;margin-top:8px}@media (min-width:768px){.App{max-width:800px}}.deliverables-actions,.deliverables-container{max-width:100%;width:100%}@media (max-width:480px){.App-header h1{font-size:1.3rem}.app-header-content{justify-content:space-between}main{padding:.75rem}}.session-error{background-color:var(--surface);border:1px solid var(--line);border-radius:var(--border-radius);box-shadow:var(--shadow-sm);margin:2rem auto;max-width:500px;padding:2rem;text-align:center}.session-error h3{color:var(--amber);font-size:1.2rem;margin-bottom:1rem}.session-error p{color:var(--ink);font-size:.95rem;margin-bottom:1.5rem}.session-error button{background-color:var(--accent);border:none;border-radius:var(--radius);color:var(--surface);cursor:pointer;font-size:.9rem;margin-top:.5rem;min-height:var(--touch);padding:.75rem 1.5rem;transition:background-color var(--t-fast) var(--ease)}.loading{color:var(--muted);font-size:1.1rem;padding:2rem;text-align:center}.signed-out{color:#6b6f76;color:var(--ink-soft,#6b6f76);margin:22vh auto 0;max-width:24rem;text-align:center}.signed-out h3{color:#1c1d1f;color:var(--ink,#1c1d1f);font-family:var(--font-display);font-weight:590;margin:0 0 .35rem}.signed-out p{margin:0 0 1.25rem}.modal-backdrop{padding:10px;z-index:100}.modal-content{border-radius:var(--border-radius);box-shadow:var(--shadow-md);max-width:520px;overflow-x:hidden}.modal-content h2{font-size:1.3rem}.form-group{margin-bottom:16px;width:100%}label{color:var(--ink);display:block;font-size:.9rem;font-weight:500;margin-bottom:8px}.form-input,.form-select,.form-textarea{background-color:var(--surface);color:var(--ink);font-size:.95rem;max-width:100%}.form-input:focus,.form-select:focus,.form-textarea:focus{border-color:var(--accent);box-shadow:var(--ring);outline:none}.deliverable-form .form-group,.deliverable-form .form-row{margin-bottom:16px;width:100%}.deliverable-form .form-row{grid-gap:16px;display:grid;gap:16px;grid-template-columns:1fr 1fr}.deliverable-form label{color:var(--ink);display:block;font-size:.9rem;font-weight:500;margin-bottom:8px}.deliverable-form .form-input,.deliverable-form .form-select,.deliverable-form .form-textarea{background-color:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink);font-size:.95rem;max-width:100%;padding:10px 12px;width:100%}.deliverable-form .form-input:focus,.deliverable-form .form-select:focus,.deliverable-form .form-textarea:focus{border-color:var(--accent);box-shadow:var(--ring);outline:none}.deliverable-form .form-textarea{min-height:120px;resize:vertical}.file-upload{border:1px dashed var(--line);border-radius:var(--radius-sm);padding:16px;text-align:center;transition:all .6s ease;width:100%}.file-upload-label{color:var(--muted);display:flex;flex-direction:column}.file-input{height:0;opacity:0;position:absolute;width:0}.file-info{font-size:.85rem;margin-top:12px;word-break:break-word}.file-info .uploading{color:var(--accent);font-weight:500;padding-left:20px;position:relative}.file-info .uploading:before{animation:spin 1s linear infinite;border:2px solid var(--accent);border-radius:50%;border-top:2px solid #0000;content:"";height:12px;left:0;margin-top:-6px;position:absolute;top:50%;width:12px}.loading-select{width:100%}.error-message{background-color:var(--amber-soft);border-radius:var(--radius-sm);color:var(--amber);padding:12px;word-break:break-word}.form-actions{width:100%}.btn-primary,.btn-secondary{font-size:.9rem}.success-message{background-color:var(--good-soft);color:var(--good)}.success-message,.warning-message{border-radius:var(--radius-sm);font-size:.9rem;margin-top:16px;padding:12px}.warning-message{background-color:var(--amber-soft);color:var(--amber)}.view-deliverable-modal{max-width:520px;width:100%}.view-deliverable-header{margin-bottom:24px}.view-deliverable-header h2{margin-bottom:8px}.deliverable-meta-tags{display:flex;flex-wrap:wrap;gap:12px}.attachment-tag,.submitter-tag{align-items:center;background-color:var(--surface-soft);border-radius:var(--radius-pill);color:var(--muted);display:inline-flex;font-size:.8rem;gap:6px;padding:4px 8px}.detail-grid,.view-deliverable-details{margin-bottom:24px}.detail-grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(auto-fill,minmax(200px,1fr))}.detail-item{display:flex;flex-direction:column}.detail-label{font-size:.85rem;margin-bottom:4px}.detail-value{font-weight:500}.view-deliverable-attachments h3,.view-deliverable-description h3{border-bottom:1px solid var(--surface-soft);font-size:1.1rem;margin-bottom:12px;padding-bottom:8px}.view-deliverable-description{margin-bottom:24px}.attachments-list{list-style:none;padding:0}.attachment-item{align-items:center;display:flex;gap:8px;margin-bottom:8px}.attachment-icon{color:var(--muted)}.attachment-link{color:var(--accent);text-decoration:none}.modal-actions{display:flex;gap:12px;justify-content:flex-end}.debug-info{font-size:.8rem;margin-top:10px}.debug-info details{margin-top:5px}.debug-info summary{color:var(--muted);cursor:pointer}.debug-info pre{background-color:var(--surface-soft);border-radius:var(--radius-sm);font-family:monospace;font-size:.7rem;line-height:1.3;margin-top:5px;overflow-x:auto;padding:10px;white-space:pre-wrap}.checkbox-container{align-items:center;display:flex;margin-bottom:16px}.checkbox-label{align-items:center;cursor:pointer;display:flex;-webkit-user-select:none;user-select:none}.checkbox-input{accent-color:var(--accent);cursor:pointer;height:20px;margin-right:8px;width:20px}.checkbox-text{font-size:.95rem}.recurrence-options{background-color:var(--accent-soft);border-left:3px solid var(--accent);border-radius:var(--radius-sm);margin-bottom:16px;padding:10px}.radio-label{align-items:center;cursor:pointer;display:flex;margin-bottom:8px}.radio-label input[type=radio]{accent-color:var(--accent);cursor:pointer;margin-right:8px}.radio-text{font-size:.95rem}.mobile-modal-backdrop{align-items:flex-end;background-color:var(--scrim);bottom:0;display:flex;justify-content:center;left:0;opacity:1;position:fixed;right:0;top:0;transition:opacity var(--animation-speed-normal) var(--ease-out-cubic);z-index:1000}.mobile-modal-backdrop.closing{opacity:0}.mobile-modal-container{animation:slide-up var(--animation-speed-normal) var(--ease-out-cubic) forwards;background-color:var(--surface);border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);display:flex;flex-direction:column;max-height:90vh;overflow:hidden;transform:translateY(0);transition:transform var(--animation-speed-normal) var(--ease-out-cubic);width:100%}@keyframes slide-up{0%{transform:translateY(100%)}to{transform:translateY(0)}}.mobile-modal-container.closing{transform:translateY(100%)}.mobile-modal-container.full-height{height:90vh}.mobile-modal-header{align-items:center;background-color:var(--surface);border-bottom:1px solid var(--surface-soft);display:flex;justify-content:space-between;padding:16px}.mobile-modal-back-button{align-items:center;background:none;border:none;color:var(--ink);cursor:pointer;display:flex;justify-content:center;margin:-10px;min-height:var(--touch);min-width:var(--touch);padding:10px}.mobile-modal-title{color:var(--ink);flex:1 1;font-family:var(--font-display);font-size:1.2rem;font-weight:500;margin:0;text-align:center}.mobile-modal-spacer{width:24px}.mobile-modal-content{-webkit-overflow-scrolling:touch;flex:1 1;overflow-y:auto;padding:16px}.mobile-modal-footer{background-color:var(--surface);border-top:1px solid var(--surface-soft);display:flex;justify-content:space-between;padding:16px}.mobile-modal-footer button{flex:1 1;margin:0 8px}.mobile-modal-footer button:first-child{margin-left:0}.mobile-modal-footer button:last-child{margin-right:0}.modal-backdrop{align-items:center;animation:fade-in var(--animation-speed-normal) var(--ease-out-cubic) forwards;background-color:var(--scrim);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:1000}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal-content{animation:scale-in var(--animation-speed-normal) var(--ease-out-cubic) forwards;background-color:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-hover);max-height:90vh;max-width:90%;overflow-y:auto;padding:24px;transform-origin:center center;width:100%}@keyframes scale-in{0%{opacity:0;transform:scale(.95)}to{opacity:1;transform:scale(1)}}.form-modal{max-width:520px;width:100%}.modal-content h2{color:var(--ink);font-family:var(--font-display);font-size:1.5rem;font-weight:500;margin-bottom:24px;margin-top:0}.form-group,.form-row{margin-bottom:20px}.form-row{display:flex;gap:16px}.form-row .form-group{flex:1 1;margin-bottom:0}.form-group label{color:var(--ink);display:block;font-weight:500;margin-bottom:8px}.form-input,.form-select,.form-textarea{border:1px solid var(--line);border-radius:var(--radius-sm);font-size:1rem;padding:10px 12px;width:100%}.form-textarea{min-height:100px;resize:vertical}.form-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:24px}.btn-primary{background-color:var(--accent);border:none;border-radius:var(--radius-sm);color:var(--surface);cursor:pointer;font-weight:500;min-height:var(--touch);padding:10px 16px;transition:background-color var(--t-fast) var(--ease)}.btn-primary:hover{background-color:var(--accent-strong)}.btn-secondary{background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;font-weight:500;min-height:var(--touch);padding:10px 16px;transition:background-color var(--t-fast) var(--ease)}.error-message{font-size:.9rem;margin-top:16px}.file-upload{margin-top:8px}.file-upload-label{align-items:center;background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;display:inline-flex;font-size:.9rem;gap:8px;padding:8px 12px}.file-input{display:none}.file-info{color:var(--muted);font-size:.9rem;margin-top:8px}.uploading{color:var(--accent)}.loading-select{background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);font-size:.9rem;padding:10px 12px}.bottom-sheet-backdrop{align-items:flex-end;background-color:var(--tint);bottom:0;display:flex;justify-content:center;left:0;opacity:0;pointer-events:none;position:fixed;right:0;top:0;transition:background-color var(--animation-speed-slow) var(--ease-out-cubic);z-index:1000}.bottom-sheet-backdrop.visible{background-color:var(--scrim);opacity:1;pointer-events:auto}.bottom-sheet{background-color:var(--surface);border-top-left-radius:var(--radius-lg);border-top-right-radius:var(--radius-lg);box-shadow:var(--shadow);display:flex;flex-direction:column;max-height:70vh;max-width:500px;overflow:hidden;transform:translateY(100%);transition:transform var(--animation-speed-slow) var(--ease-out-cubic);width:100%}.bottom-sheet.visible{transform:translateY(0)}.bottom-sheet-header{align-items:center;background-color:var(--surface);border-bottom:1px solid var(--surface-soft);display:flex;justify-content:space-between;padding:16px;position:relative}.bottom-sheet-title{color:var(--ink);flex:1 1;font-family:var(--font-display);font-size:1.05rem;font-weight:500;text-align:center}.bottom-sheet-cancel,.bottom-sheet-done{background:#0000;border:none;color:var(--muted);cursor:pointer;font-size:.9rem;padding:4px 8px}.bottom-sheet-done{color:var(--ink);font-weight:500}.bottom-sheet-content{-webkit-overflow-scrolling:touch;flex:1 1;overflow-y:auto;padding:8px 0}.option-list{display:flex;flex-direction:column;width:100%}.option-item{align-items:center;background:#0000;border:none;border-bottom:1px solid var(--surface-soft);color:var(--ink);cursor:pointer;display:flex;font-size:1rem;justify-content:space-between;min-height:var(--touch);padding:16px;text-align:left;transition:background-color var(--t-fast) var(--ease)}.option-item:last-child{border-bottom:none}.option-item.selected{font-weight:500}.check-icon{align-items:center;color:var(--accent);display:inline-flex;margin-left:8px}.deliverable-card{background-color:var(--surface);border:1px solid var(--surface-soft);border-radius:var(--radius-lg);box-shadow:var(--shadow);margin-bottom:16px;max-width:800px;overflow:hidden;width:100%}.deliverable-card-header{align-items:center;border-bottom:1px solid #0000;cursor:pointer;display:flex;justify-content:space-between;padding:14px 16px;width:100%}.deliverable-card.expanded .deliverable-card-header{border-bottom-color:var(--surface-soft)}.deliverable-icon-title{align-items:center;display:flex;flex:1 1;gap:10px;min-width:0;overflow:hidden}.type-icon{align-items:center;color:var(--muted);display:flex;flex-shrink:0}.deliverable-title{color:var(--ink);flex-shrink:1;font-size:.95rem;font-weight:500;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.deliverable-meta{color:var(--muted);flex-shrink:0;gap:12px}.attachment-icon,.deliverable-meta,.submitter-icon{align-items:center;display:flex}.deadline-date{font-size:.8rem}.expand-button{align-items:center;background:none;border:none;color:var(--muted);cursor:pointer;display:flex;justify-content:center;margin:-10px;min-height:var(--touch);min-width:var(--touch);padding:10px}.deliverable-card-content{word-wrap:break-word;color:var(--ink);font-size:.9rem;overflow-wrap:break-word;padding:16px;word-break:break-word}.detail-row{display:flex;flex-wrap:wrap;margin-bottom:8px}.detail-label{color:var(--muted);flex-shrink:0;font-weight:500;width:100px}.detail-value{flex:1 1;min-width:0;overflow-wrap:break-word}.detail-description{word-wrap:break-word;border-top:1px solid var(--surface-soft);line-height:1.5;margin-top:16px;overflow-wrap:break-word;padding-top:12px}.detail-description h3{color:var(--ink);font-size:1.1rem;font-weight:500;margin-bottom:12px}.detail-description p{margin-bottom:12px}.detail-description ul{list-style-type:disc;margin-bottom:16px;margin-left:20px}.detail-description li{margin-bottom:8px;padding-left:4px}.detail-attachments{border-top:1px solid var(--surface-soft);margin-top:16px;padding-top:12px}.detail-attachments h4{color:var(--muted);font-size:.9rem;margin-bottom:8px}.detail-attachments ul{list-style:none;padding:0}.detail-attachments li{align-items:center;display:flex;gap:6px;margin-bottom:6px}.detail-attachments a,.detail-attachments li{word-wrap:break-word;overflow-wrap:break-word;word-break:break-word}.detail-attachments a{color:var(--accent);text-decoration:none}.small-icon{color:var(--muted);flex-shrink:0}.admin-actions{border-top:none;display:flex;flex-wrap:wrap;gap:8px;margin-top:0;padding-top:0}.delete-button,.edit-button{border-radius:var(--radius-sm);cursor:pointer;font-size:.8rem;min-height:var(--touch);padding:6px 12px;transition:background-color var(--t-fast) var(--ease)}.date-group{margin-bottom:24px;width:100%}.date-header{border-bottom:1px solid var(--line);font-size:.9rem;font-weight:500;margin-bottom:12px;padding-bottom:6px}.date-header,.date-header.past{color:var(--muted)}.deliverables-section{margin-bottom:32px;width:100%}.section-title{color:var(--ink);font-family:var(--font-display);font-size:1.2rem;font-weight:500;margin-bottom:16px}.past-section .section-title{color:var(--muted)}.no-deliverables-message{color:var(--muted);font-size:.9rem;padding:16px;text-align:center}.deliverables-actions{display:flex;justify-content:space-between;margin-bottom:16px;width:100%}.filter-toggle-btn{background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);font-size:.85rem;min-height:var(--touch);padding:8px 16px;transition:background-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease);width:100%}.filter-toggle-btn.active{background-color:var(--accent-soft);border-color:var(--accent-soft);color:var(--accent)}.add-deliverable-btn{background-color:var(--accent);border:none;border-radius:var(--radius-sm);color:var(--surface);font-size:.85rem;min-height:var(--touch);padding:8px 16px;transition:background-color var(--t-fast) var(--ease)}.add-deliverable-btn:hover{background-color:var(--accent-strong)}@media (max-width:480px){.deliverable-meta{gap:8px}.deadline-date{font-size:.75rem}.detail-label{width:80px}.detail-label,.detail-value{font-size:.85rem}.creator-tag-small{font-size:.7rem;padding:1px 6px}.deliverable-icon-title{flex-wrap:wrap;gap:6px}}.deliverable-actions{align-items:center;border-top:1px solid var(--surface-soft);display:flex;justify-content:space-between;margin-top:16px;max-width:800px;padding-top:16px;width:100%}@media (max-width:480px){.delete-button,.edit-button,.share-button,.view-button{align-items:center;background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink);display:flex;font-size:.75rem;gap:6px;padding:6px 8px}.action-buttons-left,.action-buttons-right{display:flex;gap:4px}.delete-button svg,.edit-button svg,.share-button svg,.view-button svg{flex-shrink:0;height:16px;width:16px}.delete-button span,.edit-button span,.share-button span,.view-button span{line-height:1}}.share-button,.view-button{align-items:center;border-radius:var(--radius-sm);cursor:pointer;display:flex;font-size:.8rem;gap:6px;min-height:var(--touch);padding:6px 12px;position:relative;transition:background-color var(--t-fast) var(--ease)}.view-button{background-color:var(--surface-soft);border:1px solid var(--line);color:var(--ink)}.share-button{background-color:var(--accent-soft);border:1px solid var(--accent-soft);color:var(--accent)}.share-confirmation{animation:fadeInOut 2s ease-in-out;background-color:var(--ink);border-radius:var(--radius-sm);color:var(--surface);font-size:.75rem;left:50%;padding:4px 10px;position:absolute;top:-30px;transform:translateX(-50%);white-space:nowrap}.creator-tag-small{align-items:center;color:var(--muted);display:flex;font-size:.75rem;margin-left:10px;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.creator-icon{height:12px;margin-right:4px;width:12px}.creator-tag{align-items:center;background-color:var(--surface-soft);border-radius:var(--radius-pill);display:inline-flex;font-size:.8rem;gap:6px;padding:4px 8px}.creator-row,.creator-tag{color:var(--muted)}.creator-value{font-weight:500}@media (max-width:600px){.creator-tag-small{display:none}}@keyframes fadeInOut{0%{opacity:0;transform:translateX(-50%) translateY(10px)}20%{opacity:1;transform:translateX(-50%) translateY(0)}80%{opacity:1;transform:translateX(-50%) translateY(0)}to{opacity:0;transform:translateX(-50%) translateY(-5px)}}.share-button-active{background-color:var(--good-soft)!important;border-color:var(--good)!important;color:var(--good)!important}.share-tooltip{animation:fadeInOut 2s ease-in-out;background:var(--ink);border-radius:var(--radius-sm);box-shadow:var(--shadow-hover);color:var(--surface);font-size:.85rem;left:50%;padding:6px 12px;position:absolute;top:-40px;transform:translateX(-50%);white-space:nowrap;z-index:10}.mobile-form{padding:16px}.mobile-form-group{margin-bottom:24px}.mobile-form-label{color:var(--ink);display:block;font-size:.95rem;font-weight:600;margin-bottom:10px}.mobile-form-input,.mobile-form-select,.mobile-form-textarea{-webkit-tap-highlight-color:transparent!important;appearance:none;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);color:var(--ink);font-size:1rem;padding:14px 16px;width:100%}.mobile-form-input:focus,.mobile-form-select:focus,.mobile-form-textarea:focus{border-color:var(--line);box-shadow:none;outline:none}.mobile-select-button{-webkit-tap-highlight-color:transparent!important;-webkit-touch-callout:none;align-items:center;appearance:none!important;-webkit-appearance:none!important;-moz-appearance:none!important;background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);color:var(--ink);display:flex;font-size:1rem;justify-content:space-between;outline:none;padding:14px 16px;position:relative;text-align:left;-webkit-user-select:none;user-select:none;width:100%}.mobile-select-button:after{display:none}.mobile-select-button:active{background-color:var(--tint)}.mobile-segmented-control{-webkit-tap-highlight-color:transparent!important;background:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-lg);display:flex;gap:4px;padding:4px}.mobile-segmented-option{-webkit-tap-highlight-color:transparent!important;-webkit-touch-callout:none;background:none;border:none;border-radius:var(--radius);color:var(--muted);flex:1 1;font-size:1rem;outline:none;padding:12px 16px;-webkit-user-select:none;user-select:none}.mobile-segmented-option.active{-webkit-tap-highlight-color:transparent;background:var(--surface);box-shadow:var(--shadow);color:var(--ink);font-weight:500}.admin-management,.course-management{max-width:100%;overflow-x:hidden;padding:1rem 0;width:100%}.section-header{align-items:center;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-bottom:1.5rem;width:100%}.section-header h2{color:var(--ink);font-family:var(--font-display);font-size:1.4rem;font-weight:500;margin:0}.data-table{-webkit-overflow-scrolling:touch;background-color:var(--surface);border-collapse:collapse;border-radius:var(--border-radius);box-shadow:var(--shadow-sm);display:block;margin-bottom:2rem;overflow:hidden;overflow-x:auto;width:100%}.data-table td,.data-table th{border-bottom:1px solid var(--line);padding:12px 15px;text-align:left;white-space:normal;word-break:break-word}.data-table th{background-color:var(--surface-soft);color:var(--ink);font-weight:500;position:sticky;top:0;z-index:1}.data-table tr:last-child td{border-bottom:none}.action-buttons{display:flex;flex-wrap:wrap;gap:8px}.action-buttons button{font-size:.8rem;min-height:var(--touch);padding:.25rem .5rem;white-space:nowrap}button.delete{background-color:var(--flag-soft);border:1px solid var(--flag-soft);color:var(--flag)}.current-user{background-color:var(--surface-soft)}.checkbox-group{align-items:center;display:flex}.checkbox-group input[type=checkbox]{accent-color:var(--accent);margin-right:.5rem;width:auto}.admin-form .form-group{margin-bottom:16px;width:100%}.admin-form label{display:block;font-weight:500;margin-bottom:8px}.admin-form input,.admin-form select{border:1px solid var(--line);border-radius:var(--radius-sm);min-height:var(--touch);padding:8px 12px;transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease);width:100%}.admin-form input:focus,.admin-form select:focus{border-color:var(--accent);box-shadow:var(--ring);outline:none}@media (max-width:767px){.section-header{align-items:flex-start;flex-direction:column}.section-header button{width:100%}.data-table{font-size:.9rem}.data-table td,.data-table th{padding:10px 12px}.action-buttons{flex-direction:column;gap:5px}.action-buttons button{width:100%}}.filters-container{background-color:var(--surface);border:1px solid var(--line);border-radius:var(--border-radius);box-shadow:var(--shadow-sm);margin-bottom:1rem;max-width:100%;overflow:hidden;padding:1rem;width:100%}.filters-header{align-items:center;display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;margin-bottom:1rem;width:100%}.filters-header h3{color:var(--ink);font-family:var(--font-display);font-size:1.2rem;font-weight:500;margin:0}.reset-button{background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);font-size:.8rem;min-height:var(--touch);padding:.3rem .75rem;transition:background-color var(--t-fast) var(--ease);white-space:nowrap}.filters-grid{grid-gap:1rem;display:grid;gap:1rem;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));width:100%}.filter-group{display:flex;flex-direction:column;width:100%}.filter-group label{color:var(--muted);font-size:.9rem;font-weight:500;margin-bottom:.5rem}.filter-group select{background-color:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);font-size:.9rem;max-width:100%;min-height:var(--touch);padding:.5rem;transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease);width:100%}.filter-group select:focus{border-color:var(--accent);box-shadow:var(--ring);outline:none}@media (max-width:600px){.filters-grid{grid-template-columns:1fr}.filters-header{align-items:flex-start;flex-direction:column}.reset-button{margin-top:8px;text-align:center;width:100%}}@media (max-width:480px){.filters-container{padding:12px}}.hamburger-button{align-items:center;background:#0000;border:none;border-radius:4px;color:var(--ink);cursor:pointer;display:flex;flex-shrink:0;justify-content:center;margin-left:2px;margin-right:16px;padding:8px}.drawer{-webkit-overflow-scrolling:touch;background-color:var(--surface);bottom:0;box-shadow:var(--shadow);display:flex;flex-direction:column;left:0;max-width:280px;overflow-x:hidden;overflow-y:auto;position:fixed;top:0;transform:translateX(-100%);transition:transform .6s ease;width:75%;z-index:1000}.drawer.open{transform:translateX(0)}.drawer-overlay{background-color:var(--scrim);bottom:0;left:0;position:fixed;right:0;top:0;z-index:999}.drawer-header{border-bottom:1px solid var(--line);justify-content:flex-end;padding:16px}.close-drawer,.drawer-header{align-items:center;display:flex}.close-drawer{background:#0000;border:none;color:var(--muted);cursor:pointer;justify-content:center;margin:-10px;min-height:var(--touch);min-width:var(--touch);padding:10px}.user-info{border-bottom:1px solid var(--line);gap:12px;overflow:hidden;padding:16px}.user-avatar,.user-info{align-items:center;display:flex}.user-avatar{background-color:var(--ink);border-radius:50%;color:var(--surface);flex-shrink:0;font-size:1.2rem;font-weight:500;height:40px;justify-content:center;width:40px}.user-details{display:flex;flex-direction:column;overflow:hidden}.username{color:var(--ink);font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.role{color:var(--muted);font-size:.8rem}.drawer-nav{border-top:1px solid var(--line);display:flex;flex:1 1;flex-direction:column;overflow-x:hidden;overflow-y:auto;padding:0 0 16px}.nav-item{align-items:center;background:#0000;border:none;color:var(--ink);cursor:pointer;display:flex;font-size:.95rem;gap:12px;min-height:var(--touch);overflow:hidden;padding:12px 16px;text-align:left;transition:background-color var(--t-fast) var(--ease);width:100%}.nav-item:hover{background-color:var(--tint)}.nav-item.active{background-color:var(--accent-soft);border-left:3px solid var(--accent);color:var(--ink);padding-left:13px}.nav-item.add-item{color:var(--accent);margin-bottom:8px;padding-left:32px}.nav-item.logout{color:var(--amber);margin-top:auto}.drawer-footer{border-top:1px solid var(--line);font-size:.8rem;padding:16px}.drawer-auth,.drawer-footer{color:var(--muted);text-align:center}.drawer-auth{padding:24px 16px}.app-header-content{align-items:center;display:flex;width:100%}.header-right{align-items:center;display:flex;margin-left:auto;margin-right:10px}.app-title{margin-left:auto;margin-right:auto}@supports (padding:max(0px)){.drawer{padding:max(16px,env(safe-area-inset-top)) max(16px,env(safe-area-inset-right)) max(16px,env(safe-area-inset-bottom)) max(16px,env(safe-area-inset-left))}}@media (max-width:480px){.drawer{max-width:260px;width:80%}.nav-item{font-size:.9rem;padding:10px 14px}.user-avatar{font-size:1rem;height:36px;width:36px}}.header-center{align-items:center;display:flex;gap:12px;margin-left:auto;margin-right:auto}.header-logo{height:38px;margin-right:4px;position:relative;top:1px;width:38px}.drawer-login-button{background-color:var(--accent);border:none;border-radius:var(--radius);color:var(--surface);cursor:pointer;font-size:.9rem;margin:16px 0;min-height:var(--touch);padding:.75rem 1.5rem;transition:background-color var(--t-fast) var(--ease);width:100%}.drawer-login-button:hover{background-color:var(--accent-strong)}.drawer-auth{padding:8px 16px}.markdown-editor-container{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);overflow:hidden;width:100%}.markdown-toolbar{background-color:var(--surface-soft);border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:4px;padding:8px;width:100%}.markdown-toolbar button{align-items:center;background-color:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--muted);cursor:pointer;display:inline-flex;flex-shrink:0;font-size:.875rem;height:var(--touch);justify-content:center;min-width:var(--touch);padding:0 8px;transition:background-color var(--t-fast) var(--ease),color var(--t-fast) var(--ease)}.markdown-toolbar button:hover{background-color:var(--surface-soft)}.markdown-toolbar button:active{background-color:var(--line)}.markdown-toolbar button.preview-toggle{background-color:var(--surface-soft);color:var(--ink);margin-left:auto}.markdown-toolbar button.preview-toggle.active{background-color:var(--accent);border-color:var(--accent);color:var(--surface)}.markdown-textarea{border:none;color:var(--ink);font-family:inherit;font-size:.875rem;line-height:1.5;max-height:400px;min-height:150px;padding:12px;resize:vertical;width:100%}.markdown-textarea:focus{outline:none}.markdown-preview{background-color:var(--surface);color:var(--ink);font-size:.875rem;line-height:1.5;max-height:400px;min-height:150px;overflow-wrap:break-word;overflow-x:hidden;overflow-y:auto;padding:12px;width:100%;word-break:break-word}.markdown-preview h1,.markdown-preview h2,.markdown-preview h3{color:var(--ink);font-family:var(--font-display);font-weight:500;margin-bottom:.5em;margin-top:1em}.markdown-preview h1{font-size:1.5rem}.markdown-preview h2{font-size:1.3rem}.markdown-preview h3{font-size:1.1rem}.markdown-preview p{margin-bottom:1em}.markdown-preview ol,.markdown-preview ul{margin-bottom:1em;margin-left:20px;padding-left:20px}.markdown-preview li{margin-bottom:.5em}.markdown-preview blockquote{border-left:4px solid var(--line);color:var(--muted);font-style:italic;margin-left:0;padding-left:16px}.markdown-help{background-color:var(--surface-soft);border-top:1px solid var(--line);color:var(--muted);font-size:.8rem;padding:8px}@media (max-width:600px){.markdown-toolbar{flex-wrap:wrap;gap:3px;padding:6px}.markdown-toolbar button{font-size:.8rem;height:var(--touch);min-width:var(--touch);padding:0 6px}.markdown-help{display:none}}@media (max-width:640px){.mobile-markdown-editor-container{background:var(--surface);border-radius:var(--radius-lg);overflow:hidden}.mobile-markdown-toolbar{-webkit-overflow-scrolling:touch;background-color:var(--surface-soft);border-bottom:1px solid var(--line);display:flex;gap:2px;overflow-x:auto;padding:8px;scrollbar-width:none}.mobile-markdown-toolbar::-webkit-scrollbar{display:none}.mobile-markdown-toolbar button{align-items:center;background-color:var(--surface);border:1px solid var(--line);border-radius:var(--radius);color:var(--muted);display:flex;flex:0 0 auto;font-size:1rem;height:var(--touch);justify-content:center;min-width:var(--touch);padding:0}.mobile-markdown-toolbar button.mobile-preview-toggle{background-color:var(--surface-soft);color:var(--ink);margin-left:auto;padding:0 12px}.mobile-markdown-toolbar button.mobile-preview-toggle.active{background-color:var(--accent);border-color:var(--accent);color:var(--surface)}.mobile-markdown-textarea{border:none;width:100%}.mobile-markdown-preview,.mobile-markdown-textarea{color:var(--ink);font-size:1rem;line-height:1.5;min-height:120px;padding:12px}}.markdown-content{word-wrap:break-word;line-height:1.5;overflow-wrap:break-word;width:100%;word-break:break-word}.markdown-content h1,.markdown-content h2,.markdown-content h3{color:var(--ink);font-family:var(--font-display);font-weight:500;margin-bottom:.5em;margin-top:1em}.markdown-content h1{font-size:1.5rem}.markdown-content h2{font-size:1.3rem}.markdown-content h3{font-size:1.1rem}.markdown-content p{margin-bottom:1em}.markdown-content ol,.markdown-content ul{margin-bottom:1em;margin-left:20px;padding-left:20px}.markdown-content li{margin-bottom:.5em}.markdown-content blockquote{border-left:4px solid var(--line);color:var(--muted);font-style:italic;margin-left:0;padding-left:16px}.markdown-content a{color:var(--accent);text-decoration:none}.markdown-content a:hover{text-decoration:underline}.markdown-content img{border-radius:var(--radius-sm);display:block;height:auto;margin:1em 0;max-width:100%}@media (max-width:600px){.markdown-content h1{font-size:1.3rem}.markdown-content h2{font-size:1.2rem}.markdown-content h3{font-size:1rem}}.progress-track{height:6px!important;margin:24px 0 36px;overflow:visible}.marker-dot{box-shadow:var(--shadow);height:12px;transform:translateY(-50%);width:12px;z-index:2}.marker-dot.active{box-shadow:var(--shadow-hover)}.marker-label{font-size:12px;margin-top:16px}.today-indicator{flex-direction:column;transform:translate(-50%,-50%);z-index:3}.today-pulse{animation:pulse 10s ease-in-out infinite;border:2px solid var(--surface);box-shadow:var(--ring);height:12px;width:12px}.today-label{font-weight:600;position:absolute;top:-24px;white-space:nowrap}.vertical-timeline-section{background-color:var(--surface);border-radius:var(--radius-xl);box-shadow:var(--shadow);margin-bottom:24px;padding:28px 24px}.vertical-timeline{height:320px;margin-left:16px;padding:24px 0;position:relative}.timeline-track{background:linear-gradient(to bottom,var(--ink) 0,var(--ink) 50%,var(--line) 50%,var(--line) 100%);background:linear-gradient(to bottom,var(--ink) 0,var(--ink) var(--progress,50%),var(--line) var(--progress,50%),var(--line) 100%);bottom:0;left:0;position:absolute;top:0;width:2px}.timeline-checkpoint{display:flex;flex-direction:column;justify-content:center;min-height:40px;padding-left:32px;position:absolute;transform:translateY(-50%)}.timeline-checkpoint:nth-child(2){top:0}.timeline-checkpoint:nth-child(3){top:33.3%}.timeline-checkpoint:nth-child(4){top:66.6%}.timeline-checkpoint:nth-child(5){top:100%}.today-checkpoint{display:flex;flex-direction:column;justify-content:center;min-height:40px;padding-left:32px;position:absolute;transform:translateY(-50%);z-index:5}.checkpoint-connector{background-color:var(--line);height:2px;left:0;position:absolute;top:50%;transform:translateY(-50%);transition:background-color .6s ease;width:24px}.checkpoint-dot{background-color:var(--surface);border:2px solid var(--line);border-radius:50%;height:12px;left:0;position:absolute;top:50%;transform:translate(-6px,-50%);transition:all .6s ease;width:12px;z-index:2}.checkpoint-content{display:flex;flex-direction:column;gap:4px}.checkpoint-date{color:var(--muted);font-size:13px}.checkpoint-title{color:var(--ink);font-size:15px;font-weight:500}.timeline-checkpoint.past .checkpoint-dot{background-color:var(--ink);border-color:var(--ink)}.timeline-checkpoint.past .checkpoint-connector{background-color:var(--ink)}.timeline-checkpoint.current .checkpoint-dot{background-color:var(--ink);border-color:var(--ink);box-shadow:var(--ring);height:14px;transform:translate(-7px,-50%);width:14px}.timeline-checkpoint.current .checkpoint-title{color:var(--ink);font-weight:600}.today-checkpoint .checkpoint-dot.today-dot{animation:pulse 10s ease-in-out infinite;background-color:var(--muted);border-color:var(--muted);box-shadow:var(--ring)}.today-checkpoint .checkpoint-title.today-title{color:var(--muted);font-weight:600}@media (min-width:768px){.vertical-timeline{height:360px;margin-left:24px}.timeline-checkpoint{padding-left:48px}.checkpoint-connector{width:40px}.progress-track{margin:30px 0 42px}.marker-label{font-size:14px;margin-top:20px}}@media (max-width:480px){.vertical-timeline-section{border-radius:var(--radius-lg);padding:20px 16px}.vertical-timeline{height:280px;margin-left:12px;padding:16px 0}.timeline-checkpoint{padding-left:24px}.checkpoint-connector{width:18px}.checkpoint-title{font-size:14px}.checkpoint-date{font-size:12px}.progress-track{height:4px!important;margin:20px 0 32px}.marker-dot{height:10px;width:10px}.marker-label{font-size:10px;margin-top:14px}.today-pulse{height:10px;width:10px}.today-label{font-size:10px;top:-20px}.milestone-markers{overflow:visible}}@media (max-width:360px){.vertical-timeline{height:240px;margin-left:10px}.timeline-checkpoint{padding-left:20px}.checkpoint-connector{width:16px}.checkpoint-title{font-size:13px}.checkpoint-date{font-size:11px}.marker-label{font-size:9px}}.class-status-card{background:var(--surface);margin-bottom:20px;padding:24px}.program-header{display:flex;gap:20px;margin-bottom:28px}.program-icon{background:var(--ink);height:56px;width:56px}.program-icon span{color:var(--surface);font-size:16px;font-weight:600}.semester-badge{background:var(--surface);bottom:-6px;font-size:13px;height:22px;right:-6px;width:22px}.header-content{display:flex;flex-direction:column;gap:6px}.program-title{font-size:24px;margin:0}.section-text{color:var(--muted);font-size:16px}.cr-badge{background:var(--surface-soft);border-radius:var(--radius-pill);color:var(--muted);display:inline-flex;font-size:14px;margin-top:4px;padding:6px 12px}.semester-status{display:flex;flex-direction:column;gap:12px}.status-header{align-items:center;color:var(--muted);display:flex;font-size:16px;justify-content:space-between}.progress-percent{color:var(--ink);font-weight:600}.timeline-wrapper{padding:0 4px}.timeline{display:flex;flex-direction:column;gap:8px}.progress-fill{background:var(--ink);left:0;position:absolute;top:0}.timeline-dates{font-size:14px}@media (min-width:768px){.class-status-card{padding:28px}.program-icon{height:64px;width:64px}.program-title{font-size:28px}.section-text{font-size:18px}.program-header{margin-bottom:36px}}@media (max-width:480px){.class-status-card{border-radius:var(--radius-xl);padding:20px 16px}.program-header{gap:12px;margin-bottom:24px}.program-icon{border-radius:var(--radius-lg);height:48px;width:48px}.semester-badge{font-size:12px;height:20px;width:20px}.program-title{font-size:20px}.section-text{font-size:14px}.cr-badge{font-size:12px;padding:4px 10px}.status-header{font-size:14px}.timeline-dates{font-size:12px}}.semester-progress-minimal{margin-top:8px}.progress-header{font-size:13px;margin-bottom:16px}.progress-label{font-weight:500}.progress-percentage{font-weight:600}.minimal-timeline{padding:0 4px;position:relative}.timeline-line{border-radius:var(--radius-pill);height:4px;margin-bottom:32px;overflow:visible;position:relative}.timeline-progress{border-radius:var(--radius-pill);height:100%;left:0;transition:width .6s ease}.today-indicator{top:50%;transform:translateY(-50%);z-index:2}.today-pulse{background-color:var(--ink);box-shadow:0 0 0 2px var(--surface);height:10px;position:relative;width:10px}.today-pulse,.today-pulse:after{border-radius:50%;transform:translate(-50%,-50%)}.today-pulse:after{animation:pulse 10s ease-in-out infinite;background-color:var(--tint);content:"";height:18px;left:50%;position:absolute;top:50%;width:18px}@keyframes pulse{0%{opacity:.8;transform:translate(-50%,-50%) scale(.5)}70%{opacity:0;transform:translate(-50%,-50%) scale(1.2)}to{opacity:0;transform:translate(-50%,-50%) scale(1.2)}}.milestone-markers{height:100%;left:0;position:absolute;top:0;width:100%}.milestone-marker{align-items:center;display:flex;flex-direction:column;position:absolute;top:0;transform:translateX(-50%)}.marker-dot{background-color:var(--surface);border:2px solid var(--line);height:8px;margin-bottom:8px;position:relative;top:-2px;transition:all .6s ease;width:8px}.marker-dot.active{background-color:var(--ink);border-color:var(--ink)}.marker-label{color:var(--muted);font-size:11px;font-weight:500;position:relative;top:8px;white-space:nowrap}.timeline-dates{font-size:11px;margin-top:4px}@media (max-width:480px){.class-status-card{padding:20px}.card-header{margin-bottom:20px}.program-name{font-size:16px}.section-and-cr{align-items:flex-start;flex-direction:column;font-size:12px;gap:4px}.marker-label{font-size:10px}}.semester-timeline{margin-top:8px}.timeline-header{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.timeline-label{color:var(--muted);font-size:14px}.progress-value{color:var(--ink);font-size:14px;font-weight:600}.timeline-container{padding:0 8px}.timeline-track{background:var(--line);border-radius:var(--radius-pill);height:4px;margin-bottom:24px;position:relative}.progress-bar{background:var(--ink);height:100%;left:0;position:absolute;top:0;transition:width .6s ease}.today-marker{top:50%;transform:translate(-50%,-50%)}.marker-dot{background:var(--ink);border:2px solid var(--surface);border-radius:50%;box-shadow:var(--shadow-hover);height:10px;width:10px}.milestone-dots{height:100%;left:0;position:absolute;top:0;width:100%}.milestone-dot{background:var(--surface);border:2px solid var(--line);top:50%;transform:translate(-50%,-50%)}.milestone-dot.active{background:var(--ink);border-color:var(--ink)}.dot-label{color:var(--muted);font-size:12px;left:50%;position:absolute;text-transform:capitalize;top:16px;transform:translateX(-50%);white-space:nowrap}.timeline-dates{color:var(--muted);display:flex;font-size:13px;justify-content:space-between}@media (max-width:480px){.class-status-card{padding:20px}.program-details{align-items:flex-start;flex-direction:column;gap:4px}.cr-info,.progress-value,.section-label,.timeline-label{font-size:13px}.dot-label{font-size:11px}}.fh{--fh-gutter:4px;color:var(--ink);font-family:var(--font-body);font-size:15px;line-height:1.5;margin:0 auto;max-width:600px;padding:18px var(--fh-gutter) 56px}.fh-reveal{animation:fhIn 1s var(--ease) forwards;animation-delay:0ms;animation-delay:calc(var(--i, 0)*.14s);opacity:0;transform:translateY(8px)}@keyframes fhIn{to{opacity:1;transform:none}}@media (prefers-reduced-motion:reduce){.fh-reveal{opacity:1;transform:none}.fh-breath,.fh-reveal{animation:none}}.fh-eyebrow{color:var(--muted);font-size:11.5px;font-weight:600;letter-spacing:.16em;margin:0;text-transform:uppercase}.fh-eyebrow-small{font-size:10.5px;margin-top:22px}.fh-eyebrow-sep:before{content:"·";margin:0 8px}.fh-h1{font-size:clamp(34px,9vw,48px);letter-spacing:-.01em;line-height:1.1}.fh-h1,.fh-lead{font-family:var(--font-display);font-weight:300;margin:10px 0 0}.fh-lead{color:var(--ink);font-size:clamp(21px,5.6vw,26px);line-height:1.28}.fh-note{color:var(--muted);font-size:13.5px;line-height:1.55;margin:14px 0 0}.fh-top{padding:6px 0 4px}.fh-breath{animation:fhBreathe 10s ease-in-out infinite;background:var(--accent);border-radius:50%;display:inline-block;height:8px;margin:0 12px 1px 0;opacity:.5;vertical-align:middle;width:8px}@keyframes fhBreathe{0%{opacity:.3;transform:scale(1)}40%{opacity:.75;transform:scale(2)}to{opacity:.3;transform:scale(1)}}.fh-section{border-top:1px solid var(--line-soft);margin-top:40px;padding-top:22px}.fh-rows{list-style:none;margin:18px 0 0;padding:0}.fh-row{grid-column-gap:14px;align-items:baseline;border-bottom:1px solid var(--line-soft);column-gap:14px;display:grid;grid-template-columns:104px 1fr;padding:9px 0;position:relative;transition:opacity var(--t-fast) var(--ease)}.fh-row:last-child{border-bottom:none}.fh-time{font-feature-settings:"tnum";color:var(--accent-strong);font-family:var(--font-display);font-size:14.5px;font-variant-numeric:tabular-nums;font-weight:400;white-space:nowrap}.fh-what{color:var(--ink);display:flex;flex-direction:column;font-size:15px;gap:2px}.fh-course{line-height:1.35}.fh-code{color:var(--ink);font-weight:600;letter-spacing:.02em}.fh-meta{font-size:13px;line-height:1.4}.fh-meta,.fh-tag{color:var(--muted)}.fh-tag{background:var(--surface-soft);border-radius:var(--radius-pill);display:inline-block;font-size:10.5px;font-weight:600;letter-spacing:.1em;margin-left:8px;padding:1px 7px;text-transform:uppercase;vertical-align:2px}.fh-row-quiet .fh-time,.fh-row-quiet .fh-what{color:var(--muted)}.fh-row-past{opacity:.42}.fh-row-live:before{background:var(--accent);border-radius:50%;content:"";height:6px;left:-12px;margin-top:-3px;position:absolute;top:50%;width:6px}.fh-due{margin-top:6px}.fh-due .fh-rows{margin-top:8px}.fh-week{grid-gap:6px;display:grid;gap:6px;grid-template-columns:repeat(7,1fr);margin-top:18px}.fh-day{align-items:center;display:flex;flex-direction:column;gap:6px;min-width:0}.fh-day-name{color:var(--muted);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.fh-day-today .fh-day-name{color:var(--ink)}.fh-day-track{background:var(--surface-soft);border-radius:4px;height:78px;overflow:hidden;position:relative;width:100%}.fh-day-today .fh-day-track{box-shadow:inset 0 0 0 1.5px var(--accent)}.fh-block{background:var(--exam);border-radius:2px;left:3px;opacity:.95;position:absolute;right:3px}.fh-day-today .fh-block{background:var(--accent)}.fh-block-gym{opacity:1}.fh-block-gym,.fh-day-today .fh-block-gym{background:var(--break)}.fh-day-note{font-feature-settings:"tnum";color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums;line-height:1.3;max-width:100%;text-align:center;white-space:nowrap}.fh-day-today .fh-day-note{color:var(--ink)}.fh-strip{margin-top:18px}.fh-strip-bar{background:var(--surface-soft);border-radius:4px;display:flex;height:14px;overflow:hidden;position:relative}.fh-seg{border-right:1px solid var(--surface);display:block;height:100%}.fh-seg:last-child{border-right:none}.fh-seg-teach{background:var(--teach)}.fh-seg-exam{background:var(--exam)}.fh-seg-sw{background:var(--sw)}.fh-seg-free{background:var(--free)}.fh-seg-past{background:repeating-linear-gradient(135deg,#1d2a2e38 0 2px,#fffdfa8c 2px 5px);height:100%;left:0;position:absolute;top:0}.fh-strip-today{background:var(--ink);bottom:-3px;margin-left:-1px;position:absolute;top:-3px;width:2px}.fh-strip-months{color:var(--muted);font-size:10.5px;height:16px;letter-spacing:.12em;margin-top:6px;position:relative;text-transform:uppercase}.fh-strip-months span{position:absolute;white-space:nowrap}.fh-dates{list-style:none;margin:18px 0 0;padding:0}.fh-date{align-items:baseline;border-bottom:1px solid var(--line-soft);display:flex;font-size:14.5px;gap:16px;justify-content:space-between;padding:9px 0}.fh-date:last-child{border-bottom:none}.fh-date-name{color:var(--ink);line-height:1.4}.fh-date-when{font-feature-settings:"tnum";align-items:flex-end;display:flex;flex-direction:column;flex-shrink:0;font-variant-numeric:tabular-nums;text-align:right}.fh-date-when>span:first-child{color:var(--accent-strong);font-family:var(--font-display);font-size:14.5px;white-space:nowrap}.fh-date-in{color:var(--muted);font-size:12px;white-space:nowrap}.fh-date-now .fh-date-in{color:var(--accent-strong);font-weight:600}.fh-scale{margin:26px 10px 0;padding:24px 0 26px;position:relative}.fh-scale-track{background:var(--line);height:2px;position:relative}.fh-scale-band{background:var(--accent-soft);border:1px solid #518b9959;border-radius:6px;box-sizing:border-box;height:12px;position:absolute;top:-5px}.fh-scale-line{border-left:2px dashed var(--ink);height:16px;margin-left:-1px;position:absolute;top:-7px;width:0}.fh-scale-dot{background:var(--accent);border-radius:50%;box-shadow:0 0 0 2px var(--bg1);height:10px;margin-left:-5px;position:absolute;top:-4px;width:10px}.fh-scale-dot-now{background:var(--ink);height:12px;margin-left:-6px;top:-5px;width:12px}.fh-scale-labels{font-feature-settings:"tnum";color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums;height:16px;left:0;letter-spacing:.02em;position:absolute;right:0}.fh-scale-labels span{position:absolute;transform:translateX(-50%);white-space:nowrap}.fh-scale-above{top:0}.fh-scale-below{bottom:2px}.fh-scale-below span:first-child{color:var(--ink);font-weight:600}.fh-figures{margin:18px 0 0;padding:0}.fh-figure{grid-column-gap:14px;align-items:baseline;border-bottom:1px solid var(--line-soft);column-gap:14px;display:grid;grid-template-columns:96px 1fr;padding:9px 0}.fh-figure:last-child{border-bottom:none}.fh-figure dt{font-feature-settings:"tnum";color:var(--ink);font-family:var(--font-display);font-size:20px;font-variant-numeric:tabular-nums;font-weight:400;line-height:1.2;margin:0}.fh-figure dd{color:var(--ink);font-size:14.5px;line-height:1.5;margin:0}.fh-ladder{list-style:none;margin:18px 0 0;padding:0}.fh-rung{grid-column-gap:14px;border-bottom:1px solid var(--line-soft);column-gap:14px;display:grid;grid-template-columns:96px 1fr;padding:14px 0}.fh-rung:last-child{border-bottom:none}.fh-gpa{font-feature-settings:"tnum";color:var(--ink);font-family:var(--font-display);font-size:34px;font-variant-numeric:tabular-nums;font-weight:300;line-height:1;padding-top:2px}.fh-rung-now .fh-gpa{color:var(--accent-strong);font-size:22px;padding-top:6px}.fh-rung-body{display:flex;flex-direction:column;gap:5px;min-width:0}.fh-rung-head{color:var(--ink);font-size:13px;font-weight:600}.fh-rung-term{color:var(--muted);font-weight:400}.fh-rung-text{color:var(--ink);font-size:14.5px;line-height:1.55}.fh-close{border-top:1px solid var(--line-soft);margin:30px 0 0;padding:22px 0 0}.fh-close p{color:var(--ink);font-family:var(--font-display);font-size:clamp(22px,6vw,28px);font-weight:300;line-height:1.25;margin:0}.fh-close footer{color:var(--muted);font-size:12px;letter-spacing:.12em;margin-top:10px;text-transform:uppercase}.fh-foot{align-items:center;column-gap:22px;display:flex;flex-wrap:wrap;font-size:14px;margin-top:36px}.fh-foot a{border-bottom:1px solid var(--accent-soft);box-sizing:border-box;color:var(--accent-strong);display:inline-block;min-height:var(--touch);padding:8px 0;text-decoration:none}@media (min-width:980px){.fh{grid-column-gap:72px;column-gap:72px;display:grid;font-size:15.5px;grid-template-columns:minmax(0,1fr) minmax(0,1fr);max-width:1120px;padding:28px 24px 64px}.fh-top{grid-column:1/-1;padding-bottom:6px}.fh-col{min-width:0}.fh-section{margin-top:36px}.fh-h1{font-size:52px}.fh-lead{font-size:26px}.fh-figure,.fh-row,.fh-rung{grid-template-columns:112px 1fr}.fh-day-track{height:90px}}.schedule-page{background-color:var(--surface);display:flex;flex-direction:column;height:100vh;padding:24px}.date-navigator,.header-container{margin-bottom:24px}.header-container{align-items:baseline;display:flex;width:100%}.month-title{color:var(--ink);font-family:var(--font-display);font-size:26px;font-weight:500;white-space:nowrap}.dates-grid-container{gap:4px;width:100%}.dates-grid-container,.week-nav-button{align-items:center;display:flex;justify-content:center}.week-nav-button{background:#0000;border:none;color:var(--muted);cursor:pointer;font-size:20px;height:100%;min-height:var(--touch);min-width:var(--touch);opacity:.6;padding:8px;transition:opacity var(--t-fast) var(--ease)}.week-nav-button:hover{opacity:1}.dates-grid{background:var(--surface);border:1px solid var(--line);border-radius:24px;flex:1 1;padding:8px}.date-button,.dates-grid{display:flex;justify-content:center}.date-button{align-items:center;background:#0000;border:none;border-radius:20px;cursor:pointer;flex:1 1;flex-direction:column;min-height:72px;min-width:48px;padding:12px 24px;position:relative}.date-button.selected,.date-button:hover{background-color:var(--surface-soft)}.today-dot{background:var(--ink);height:4px;position:absolute;top:2px;width:4px}.day-name{color:var(--muted);font-size:12px;margin-bottom:4px;text-transform:uppercase}.day-number{color:var(--ink);font-size:15px;font-weight:500}.schedule-header{border-bottom:1px solid var(--line);margin-bottom:24px;padding:16px 0}.schedule-title-row{align-items:center;display:flex;gap:8px}.date-text{color:var(--ink);font-family:var(--font-display);font-size:19px;font-weight:500;line-height:1}.reset-button{align-items:center;background:#0000;border:none;color:var(--muted);cursor:pointer;display:flex;font-size:16px;height:var(--touch);justify-content:center;margin:-10px -10px -10px 0;opacity:.6;padding:0;transition:opacity var(--t-fast) var(--ease);width:var(--touch)}.reset-button:hover{opacity:1}.schedule-content{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);flex:1 1;overflow-y:auto;padding:24px}.events-container{display:flex;flex-direction:column;gap:16px}.event-row{align-items:flex-start;display:flex;gap:24px}.event-time-indicator{color:var(--muted);flex-shrink:0;font-size:13px;padding-top:16px;text-align:right;width:80px}.event-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);flex-grow:1;padding:16px;transition:border-color var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease)}.event-card:hover{border-color:var(--line);box-shadow:var(--shadow)}.event-content{display:flex;flex-direction:column;gap:8px}.event-title{font-size:15px}.event-location,.event-time{color:var(--muted);font-size:13px}.event-course{color:var(--accent);font-size:12px;margin-top:4px}.time-gap{align-items:center;display:flex;margin:8px 0;padding:8px 0 8px 104px}.gap-line{background:var(--line);flex-grow:1;height:1px;margin-right:12px}.gap-duration{color:var(--muted);flex-shrink:0;font-size:12px}.loading-indicator{color:var(--muted);font-size:14px;text-align:center}.error-message{background-color:var(--flag-soft);border-radius:var(--radius);color:var(--flag);font-size:14px;margin:20px 0;padding:16px}.no-events-message{color:var(--muted);font-size:14px;font-style:italic;padding:40px;text-align:center}.add-event-button{align-items:center;background-color:var(--accent);border-radius:28px;bottom:24px;box-shadow:var(--shadow-hover);color:var(--surface);cursor:pointer;display:flex;font-size:24px;height:56px;justify-content:center;position:fixed;right:24px;transition:transform var(--t-fast) var(--ease),background-color var(--t-fast) var(--ease);width:56px;z-index:10}.add-event-button:hover{background-color:var(--accent-strong);transform:scale(1.05)}.event-actions{display:flex;gap:8px;margin-top:12px}.edit-button{background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;font-size:.8rem;min-height:var(--touch);padding:4px 10px;transition:background-color var(--t-fast) var(--ease)}.edit-button:hover{background-color:var(--line)}.delete-button{background-color:var(--flag-soft);border:1px solid var(--flag-soft);border-radius:var(--radius-sm);color:var(--flag);cursor:pointer;font-size:.8rem;min-height:var(--touch);padding:4px 10px;transition:background-color var(--t-fast) var(--ease)}.delete-button:hover{background-color:var(--flag);color:var(--surface)}.edit-options{border-top:1px solid var(--line);margin-top:16px;padding-top:16px}.radio-group{display:flex;flex-direction:column;gap:8px;margin-top:8px}.checkbox-label,.radio-label{align-items:center;cursor:pointer;display:flex;font-size:.9rem;gap:8px}.checkbox-label input[type=checkbox],.radio-label input[type=radio]{accent-color:var(--accent);margin:0}@media (max-width:768px){.schedule-page{padding:16px}.header-container{margin-bottom:16px}.month-title{font-size:22px;line-height:1.2}.dates-grid-container{-webkit-overflow-scrolling:touch;margin:0 -16px;overflow-x:auto;padding:0 16px}.dates-grid{min-width:min-content;width:100%}.date-button{min-height:64px;padding:10px 16px}.date-text{font-size:16px}.schedule-content{padding:16px}.event-row{gap:16px}.event-time-indicator{width:70px}.time-gap{padding-left:86px}.add-event-button{bottom:16px;font-size:20px;height:48px;right:16px;width:48px}.checkbox-label,.radio-label{font-size:.85rem}}@media (max-width:480px){.schedule-page{padding:12px}.month-title{font-size:20px}.dates-grid-container{margin:0 -12px;padding:0 12px}.date-button{min-height:60px;min-width:40px;padding:8px 12px}.day-name{font-size:11px}.day-number{font-size:14px}.date-text{font-size:15px}.schedule-content{padding:12px}.event-row{gap:12px}.event-time-indicator{font-size:12px;width:60px}.time-gap{padding-left:72px}.event-title{font-size:14px}.event-location,.event-time{font-size:12px}.gap-duration{font-size:11px}}.journey-page{margin:0 auto;max-width:860px;padding:20px 16px 60px}.journey-header h2{color:var(--ink);font-family:var(--font-display);font-size:28px;font-weight:500;margin:0 0 4px}.journey-sub{color:var(--muted);font-size:14px;margin:0 0 20px}.journey-error,.journey-loading{color:var(--muted);padding:40px 0;text-align:center}.journey-error{color:var(--flag)}.journey-stats{grid-gap:12px;display:grid;gap:12px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));margin-bottom:20px}.stat-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);padding:14px 16px}.stat-card.danger{background:var(--flag-soft);border-color:var(--flag)}.stat-value{color:var(--ink);font-family:var(--font-display);font-size:30px;font-weight:500;line-height:1.1}.stat-label{color:var(--muted);font-size:12.5px;margin-top:4px}.stat-note{color:var(--flag);font-size:11.5px;margin-top:6px}.journey-chart-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);margin-bottom:24px;padding:16px}.journey-chart-card h3{color:var(--ink);font-family:var(--font-display);font-size:16px;font-weight:500;margin:0 0 10px}.journey-semesters{display:flex;flex-direction:column;gap:14px}.semester-card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden}.semester-head{align-items:baseline;background:var(--surface-soft);border-bottom:1px solid var(--line-soft);display:flex;justify-content:space-between;padding:12px 16px}.semester-no{color:var(--ink);font-family:var(--font-display);font-size:16px;font-weight:500}.semester-term{color:var(--muted);font-size:13px;margin-left:8px}.semester-meta{color:var(--muted);display:flex;font-size:12.5px;gap:10px}.semester-proj{color:var(--good);font-weight:600}.semester-table-wrap{-webkit-overflow-scrolling:touch;overflow-x:auto;width:100%}.semester-table{border-collapse:collapse;font-size:13.5px;min-width:360px;width:100%}.semester-table td{border-bottom:1px solid var(--surface-soft);padding:8px 16px;vertical-align:middle}.semester-table tr:last-child td{border-bottom:none}.c-code{color:var(--muted);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:12.5px;white-space:nowrap;width:70px}.c-title{color:var(--ink)}.c-cr{color:var(--muted);width:50px}.c-cr,.c-grade{text-align:right;white-space:nowrap}.c-grade{width:160px}.badge{border-radius:var(--radius-pill);display:inline-block;font-size:11.5px;font-weight:600;padding:2px 10px}.badge-retake{background:var(--accent-soft);color:var(--accent-strong);font-weight:500;margin-left:8px}.badge-passed{background:var(--good-soft);color:var(--good)}.badge-failed{background:var(--flag-soft);color:var(--flag)}.badge-plan{background:var(--amber-soft);color:var(--amber)}.badge-skip{background:var(--surface-soft);color:var(--muted)}.row-failed .c-title{color:var(--flag)}.row-not_registered td{color:var(--muted);font-style:italic}.journey-footnote{color:var(--muted);font-size:12px;line-height:1.5;margin-top:22px}@media (max-width:560px){.c-cr{display:none}.c-grade{width:auto}.semester-table td{padding:8px 12px}}.jn{--keep:#6b7280;color:var(--ink);font-family:var(--font-body);font-size:14px;line-height:1.45;margin:0 auto;max-width:560px;padding:0 0 96px}.jn-hdr{align-items:center;background:var(--bg1);display:flex;gap:10px;justify-content:space-between;padding:16px 14px 10px;position:sticky;top:0;z-index:5}.jn-arr{background:var(--surface);border:1px solid var(--line);border-radius:50%;color:var(--ink);cursor:pointer;flex:0 0 auto;font-size:22px;height:34px;line-height:1;min-height:34px;padding:0;transition:background var(--t-base) var(--ease);width:34px}.jn-arr:hover{background:var(--surface-soft)}.jn-date{text-align:center}.jn-date b{display:block;font-size:15px;font-weight:600}.jn-date span{color:var(--muted);font-size:11px;letter-spacing:.06em;text-transform:uppercase}.jn-date-all b{font-size:18px;letter-spacing:-.01em}.jn-date-hit{background:#0000;border:0;border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;display:block;font-family:var(--font-body);margin:0 auto;min-height:0;padding:2px 6px;transition:background var(--t-base) var(--ease)}.jn-date-hit:hover{background:var(--tint)}.jn-today{background:#0000;border:0;color:var(--accent-strong);cursor:pointer;font-family:var(--font-body);font-size:11px;font-weight:600;letter-spacing:.06em;min-height:0;padding:2px 6px;text-transform:uppercase}.jn-today:hover{background:#0000;color:var(--accent)}.jn-month{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow);margin:0 14px 8px;padding:10px 10px 12px}.jn-month-top{align-items:center;display:flex;gap:8px;justify-content:space-between;margin-bottom:8px}.jn-arr-sm{font-size:18px;height:30px;min-height:30px;width:30px}.jn-month-label{font-size:13px;font-weight:600}.jn-month-dow,.jn-month-grid{grid-gap:2px;display:grid;gap:2px;grid-template-columns:repeat(7,1fr)}.jn-month-dow span{color:var(--muted);font-size:10px;letter-spacing:.06em;padding-bottom:4px;text-align:center;text-transform:uppercase}.jn-cell{font-feature-settings:"tnum";align-items:center;aspect-ratio:1;background:#0000;border:0;border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;display:flex;font-family:var(--font-body);font-size:13px;font-variant-numeric:tabular-nums;justify-content:center;min-height:34px;padding:0;position:relative;transition:background var(--t-base) var(--ease)}.jn-cell:hover{background:var(--tint)}.jn-cell-today{box-shadow:inset 0 0 0 1px var(--accent)}.jn-cell-on,.jn-cell-on:hover{background:var(--accent-strong);color:var(--surface)}.jn-cell-dot{background:var(--muted);border-radius:50%;bottom:4px;height:4px;left:50%;position:absolute;transform:translateX(-50%);width:4px}.jn-cell-on .jn-cell-dot{background:var(--surface)}.jn-seg-row{align-items:center;display:flex;gap:10px;justify-content:space-between;margin:0 14px 6px}.jn-seg{background:var(--tint);border:1px solid var(--line);border-radius:8px;display:flex;gap:4px;padding:3px;width:max-content}.jn-seg button{background:#0000;border:0;border-radius:6px;color:var(--muted);cursor:pointer;font-family:var(--font-body);font-size:12px;font-weight:600;min-height:32px;padding:5px 12px;transition:background var(--t-base) var(--ease),color var(--t-base) var(--ease)}.jn-seg button:hover{background:#0000;color:var(--ink)}.jn-seg .jn-on,.jn-seg .jn-on:hover{background:var(--surface);box-shadow:0 0 0 1px var(--line);color:var(--ink)}.jn-alldays{background:#0000;border:0;color:var(--muted);cursor:pointer;font-family:var(--font-body);font-size:11px;font-weight:600;letter-spacing:.06em;min-height:34px;padding:8px 2px;text-transform:uppercase}.jn-alldays:hover{background:#0000;color:var(--ink)}.jn-rail{padding:4px 14px 0}.jn-ri{grid-gap:6px;display:grid;gap:6px;grid-template-columns:62px 14px minmax(0,1fr);margin:10px 0}.jn-rt{font-feature-settings:"tnum";color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums;padding-top:2px;text-align:right}.jn-rt-main{display:block;white-space:nowrap}.jn-rt-shared{color:var(--muted);display:block;font-size:10px;margin-top:2px;opacity:.85}.jn-rd{background:var(--ink);border-radius:50%;height:8px;margin-top:5px;position:relative;width:8px}.jn-rd:after{background:var(--line);content:"";height:calc(100% + 60px);left:3.5px;position:absolute;top:10px;width:1px}.jn-rd-keep{background:var(--keep)}.jn-rb{min-width:0;padding-bottom:6px}.jn-txt{color:var(--ink);cursor:pointer;white-space:pre-wrap}.jn-txt-clamp{-webkit-line-clamp:3;-webkit-box-orient:vertical;display:-webkit-box;overflow:hidden}.jn-txt:focus-visible{border-radius:3px;outline:2px solid var(--accent);outline-offset:2px}.jn-chips-out{display:flex;flex-wrap:wrap;gap:6px;margin-top:8px}.jn-chip-out{border:1px solid var(--line);border-radius:var(--radius-pill);color:var(--muted);font-size:11px;padding:1px 8px}.jn-edit{border:0;color:var(--accent-strong);cursor:pointer;font-family:var(--font-body);font-size:11px;letter-spacing:.04em;margin-top:6px;min-height:0;opacity:0;padding:4px 0;transition:opacity var(--t-base) var(--ease)}.jn-edit,.jn-edit:hover{background:#0000}.jn-edit:focus-visible{opacity:1;outline:2px solid var(--accent);outline-offset:2px}@media (hover:hover) and (pointer:fine){.jn-rb:hover .jn-edit{opacity:1}}@media (hover:none){.jn-edit{display:none}}.jn-quote{border-left:2px solid var(--keep);color:var(--ink);font-family:Georgia,var(--font-display),serif;font-size:14px;line-height:1.5;margin-top:8px;padding:2px 0 2px 10px;white-space:pre-wrap}.jn-quote-solo{margin-top:1px}.jn-quote-tap{cursor:pointer}.jn-quote-tap:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.jn-parent{background:var(--surface);border:1px solid var(--line-soft);border-radius:10px;margin:8px 0 0 12px;padding:10px 12px}.jn-parent .jn-txt{cursor:default}.jn-dsep{color:var(--muted);font-size:11px;font-weight:600;letter-spacing:.06em;margin:14px 0 2px 82px;text-transform:uppercase}.jn-empty{color:var(--muted);font-size:13px;margin:16px 14px}.jn-origin{color:var(--muted);font-size:11px;letter-spacing:.04em;margin-top:8px}.jn-fab{z-index:100}.jn-fab-draft:after{background:var(--surface);border-radius:50%;box-shadow:0 0 0 2px var(--accent-strong);content:"";height:9px;position:absolute;right:6px;top:6px;width:9px}.jn-scrim{align-items:flex-end;animation:jnFade var(--t-base) var(--ease) forwards;background:var(--scrim);display:flex;inset:0;justify-content:center;position:fixed;z-index:999}.jn-sheet{animation:jnRise var(--t-base) var(--ease) forwards;background:var(--surface);border-radius:var(--radius-xl) var(--radius-xl) 0 0;box-shadow:var(--shadow-hover);max-height:92vh;max-width:560px;overflow-y:auto;padding-bottom:env(safe-area-inset-bottom,0);width:100%}@keyframes jnFade{0%{opacity:0}to{opacity:1}}@keyframes jnRise{0%{transform:translateY(16px)}to{transform:none}}.jn-sheet-head{align-items:center;background:var(--surface);border-bottom:1px solid var(--line-soft);display:flex;gap:10px;justify-content:space-between;padding:14px 16px 12px;position:sticky;top:0;z-index:1}.jn-sheet-title{color:var(--ink);font-family:var(--font-display);font-size:17px;font-weight:600;margin:0}.jn-sheet-close{align-items:center;background:#0000;border:0;border-radius:var(--radius);color:var(--muted);cursor:pointer;display:flex;justify-content:center;min-height:var(--touch);min-width:var(--touch);padding:10px;transition:background var(--t-base) var(--ease),color var(--t-base) var(--ease)}.jn-sheet-close:hover{background:var(--surface-soft);color:var(--ink)}.jn-sheet-close svg{height:20px;width:20px}.jn-form{padding:14px 16px 18px}.jn-settings{grid-gap:6px;display:grid;gap:6px;padding:14px 16px 20px}.jn-setting-group{margin-top:10px}.jn-field{margin-bottom:14px}.jn-label{color:var(--muted);display:block;font-size:11px;font-weight:600;letter-spacing:.06em;margin-bottom:6px;text-transform:uppercase}.jn-field-when{align-items:center;display:flex;flex-wrap:wrap;gap:8px}.jn-field-when .jn-label{margin-bottom:0;width:100%}.jn-input{background:var(--surface-soft);border:1px solid var(--line-soft);border-radius:var(--radius);box-sizing:border-box;color:var(--ink);font-family:var(--font-body);font-size:16px;min-height:var(--touch);padding:10px 12px;transition:border-color var(--t-base) var(--ease),box-shadow var(--t-base) var(--ease)}.jn-search,.jn-textarea{width:100%}.jn-textarea{line-height:1.5;min-height:110px;resize:vertical}.jn-input:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--ring);outline:none}.jn-search::placeholder,.jn-textarea::placeholder{color:var(--muted);opacity:.85}.jn-check{align-items:center;color:var(--ink);cursor:pointer;display:flex;font-size:14px;gap:10px;min-height:var(--touch)}.jn-check input{accent-color:var(--accent-strong);flex:0 0 auto;height:18px;width:18px}.jn-chips{display:flex;flex-wrap:wrap;gap:8px;list-style:none;margin:0 0 10px;padding:0}.jn-chip{align-items:center;background:var(--accent-soft);border-radius:var(--radius-pill);color:var(--ink);display:inline-flex;font-size:13px;gap:6px;padding:6px 6px 6px 12px}.jn-chip-x{background:#0000;border:0;border-radius:var(--radius-pill);color:var(--muted);cursor:pointer;font-size:18px;height:28px;line-height:1;min-height:28px;padding:0;transition:background var(--t-base) var(--ease),color var(--t-base) var(--ease);width:28px}.jn-chip-x:hover{background:var(--tint);color:var(--ink)}.jn-matches{background:var(--surface);border:1px solid var(--line-soft);border-radius:var(--radius);list-style:none;margin:8px 0 0;max-height:240px;overflow-y:auto;padding:0}.jn-matches li+li{border-top:1px solid var(--line-soft)}.jn-match{background:#0000;border:0;color:var(--ink);cursor:pointer;display:block;font-family:var(--font-body);font-size:15px;min-height:var(--touch);padding:11px 14px;text-align:left;transition:background var(--t-base) var(--ease);width:100%}.jn-match:hover{background:var(--surface-soft)}.jn-match-id{color:var(--muted);font-size:12.5px;margin-left:8px}.jn-actions{align-items:center;display:flex;flex-wrap:wrap;gap:12px;margin-top:10px}.jn-save{background:var(--accent-strong);border:0;border-radius:var(--radius);color:var(--surface);cursor:pointer;font-family:var(--font-body);font-size:15px;font-weight:600;min-height:var(--touch);padding:12px 26px;transition:background var(--t-base) var(--ease),opacity var(--t-base) var(--ease)}.jn-save:hover{background:var(--accent)}.jn-save:disabled{cursor:default;opacity:.55}.jn-quiet{background:#0000;border:0;color:var(--muted);cursor:pointer;font-family:var(--font-body);font-size:14px;min-height:var(--touch);padding:10px 6px}.jn-quiet:hover{background:#0000;color:var(--ink)}.jn-notice{color:var(--flag);font-size:13px}@media (prefers-reduced-motion:reduce){.jn *,.jn-scrim,.jn-sheet{animation:none!important;transition:none!important}}@media (min-width:720px){.jn{font-size:14.5px}.jn-scrim{align-items:center}.jn-sheet{border-radius:var(--radius-xl);max-height:86vh;max-width:520px}}.graph-root{--bg:#f7f8f8;--panel:#fff;--surface:#00000008;--surface-2:rgba(0,0,0,.055);--line:#00000014;--line-2:#00000029;--t1:#1c1d1f;--t2:#4a4d55;--t3:#8a8f98;--t4:#b0b4bb;--green:#3d8f5b;--red:#b5443c;color-scheme:light}.graph-root *{box-sizing:border-box}.graph-root{font-feature-settings:"cv01","ss03";background:var(--bg);color:var(--t1);font:13px/1.5 Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;height:100%;letter-spacing:-.005em;position:relative}.graph-root button,.graph-root input{color:inherit;font:inherit;letter-spacing:inherit}.graph-root .cap{color:var(--t3);font-size:11px;font-weight:510;letter-spacing:.06em;text-transform:uppercase}.graph-root aside{background:var(--panel);border-right:1px solid var(--line);bottom:0;display:flex;flex-direction:column;left:0;min-height:0;position:absolute;top:48px;transform:translateX(-100%);transition:transform .18s ease;width:288px;z-index:6}.graph-root.g-drawer aside{transform:none}.graph-root .head{align-items:center;border-bottom:1px solid var(--line);display:flex;gap:8px;height:44px;padding:0 14px}.graph-root .head .logo{border:1.5px solid var(--t1);border-radius:50%;display:grid;flex:none;height:16px;place-items:center;width:16px}.graph-root .head .logo i{background:var(--t1);border-radius:50%;display:block;height:5px;width:5px}.graph-root .head b{font-weight:590}.graph-root .head small{font-feature-settings:"tnum";color:var(--t3);font-size:11px;font-variant-numeric:tabular-nums;margin-left:auto}.graph-root .head .back{background:none;border:none;color:var(--t3);cursor:pointer;display:none;margin-left:-4px;padding:2px 6px 2px 0}.graph-root .head .back svg{stroke:currentColor;fill:none;stroke-width:2;height:14px;width:14px}.graph-root .head .back:hover{color:var(--t1)}.graph-root aside.prof .head .back{display:inline-grid}.graph-root aside.prof .head .logo,.graph-root aside.prof .head small{display:none}.graph-root .body{flex:1 1;min-height:0;overflow-y:auto}.graph-root .search{margin:12px 12px 6px;position:relative}.graph-root .search input{background:var(--surface);border:1px solid var(--line);border-radius:6px;outline:none;padding:6px 8px 6px 28px;width:100%}.graph-root .search input:focus{background:var(--panel);border-color:var(--line-2)}.graph-root .search svg{stroke:var(--t3);fill:none;stroke-width:2;height:14px;left:8px;position:absolute;top:7px;width:14px}.graph-root .search kbd{position:absolute;right:8px;top:6px}.graph-root .sect{align-items:baseline;display:flex;justify-content:space-between;padding:12px 16px 4px}.graph-root .sect button{background:none;border:none;color:var(--t3);cursor:pointer;font-size:11px;padding:0}.graph-root .sect button:hover{color:var(--t1)}.graph-root .nav{padding:0 8px}.graph-root .row{align-items:center;border-radius:6px;color:var(--t2);cursor:pointer;display:flex;gap:9px;padding:5px 8px;-webkit-user-select:none;user-select:none}.graph-root .row.on,.graph-root .row:hover{background:var(--surface-2);color:var(--t1)}.graph-root .row.off{opacity:.38}.graph-root .row .dot{border-radius:50%;flex:none;height:8px;width:8px}.graph-root .row .n{font-feature-settings:"tnum";color:var(--t4);font-size:11px;font-variant-numeric:tabular-nums;margin-left:auto}.graph-root .foot{border-top:1px solid var(--line);color:var(--t4);display:flex;font-size:11px;gap:12px;padding:10px 16px}.graph-root kbd{background:var(--surface);border:1px solid var(--line);border-radius:4px;color:var(--t3);font:10.5px ui-monospace,SFMono-Regular,Menlo,monospace;padding:0 4px}.graph-root .prof{padding:16px 16px 28px}.graph-root .prof .top{align-items:center;display:flex;gap:12px}.graph-root .prof .big{border-radius:50%;color:#fff;display:grid;flex:none;font-weight:590;height:36px;place-items:center;width:36px}.graph-root .prof .big.ego{background:var(--panel);border:1.5px solid var(--t1);color:var(--t1)}.graph-root .prof h2{font-size:15px;font-weight:590;letter-spacing:-.01em;line-height:1.25;margin:0}.graph-root .prof .also{color:var(--t3);font-size:11.5px;margin-top:1px}.graph-root .prof .one{color:var(--t2);margin:14px 0 12px}.graph-root .scorebar{background:var(--line-2);border-radius:2px;height:3px;margin:6px 0;position:relative}.graph-root .scorebar.na{background:repeating-linear-gradient(90deg,var(--line-2) 0 5px,#0000 5px 10px)}.graph-root .scorebar i{border:2px solid var(--panel);border-radius:50%;height:12px;position:absolute;top:-4.5px;transform:translateX(-50%);width:12px}.graph-root .scoretxt{color:var(--t3);display:flex;font-size:11px;justify-content:space-between}.graph-root .chips{display:flex;flex-wrap:wrap;gap:6px;margin-top:12px}.graph-root .chip{border:1px solid var(--line-2);border-radius:9999px;color:var(--t2);font-size:11.5px;font-weight:510;padding:2px 9px}.graph-root .chip.tag{border-style:dashed;color:var(--t3)}.graph-root .field{margin:18px 0 6px}.graph-root .boundary{background:var(--surface);border-left:2px solid var(--t1);border-radius:0 6px 6px 0;color:var(--t1);padding:8px 12px}.graph-root .prof ul{color:var(--t2);margin:0;padding-left:16px}.graph-root .prof li{margin:3px 0}.graph-root .prof li.good::marker{color:var(--green);content:"+  "}.graph-root .prof li.bad::marker{color:var(--red);content:"−  "}.graph-root .conn{align-items:center;border:1px solid var(--line);border-radius:6px;color:var(--t2);cursor:pointer;display:flex;gap:8px;margin:4px 0;padding:6px 8px}.graph-root .conn:hover{background:var(--surface-2);color:var(--t1)}.graph-root .conn .dot{border-radius:50%;flex:none;height:8px;width:8px}.graph-root .conn .t{color:var(--t3);font-size:11.5px;margin-left:auto;text-align:right}.graph-root .tl{padding-left:14px;position:relative}.graph-root .tl:before{background:var(--line-2);bottom:6px;content:"";left:3px;position:absolute;top:6px;width:1px}.graph-root .ev{color:var(--t2);margin:0 0 10px;position:relative}.graph-root .ev:before{background:var(--t4);border-radius:50%;content:"";height:7px;left:-14px;position:absolute;top:6px;width:7px}.graph-root .ev .d{font-feature-settings:"tnum";color:var(--t3);font-size:11px;font-variant-numeric:tabular-nums}.graph-root .ev.jn:before{background:var(--t1)}.graph-root .meta{color:var(--t4);font-size:11px;margin-top:18px}.graph-root .dash{color:var(--t4)}.graph-root .stat{grid-gap:4px 12px;color:var(--t2);display:grid;gap:4px 12px;grid-template-columns:1fr auto;margin-top:8px}.graph-root .stat b{font-feature-settings:"tnum";color:var(--t1);font-variant-numeric:tabular-nums;font-weight:510}.graph-root main{display:flex;flex-direction:column;inset:0;overflow:hidden;position:absolute}.graph-root .topbar{align-items:center;border-bottom:1px solid var(--line);display:flex;gap:8px;height:48px;padding:0 12px 0 10px}.graph-root .topbar .icon{background:#0000;border:1px solid #0000;border-radius:6px;color:var(--t2);cursor:pointer;display:grid;height:28px;place-items:center;width:28px}.graph-root .topbar .icon.on,.graph-root .topbar .icon:hover{background:var(--surface-2);color:var(--t1)}.graph-root .topbar .icon svg{stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;height:15px;width:15px}.graph-root .crumb{color:var(--t3);font-size:12px}.graph-root .crumb b{color:var(--t1);font-weight:510}.graph-root .seg{background:var(--surface);border:1px solid var(--line);border-radius:6px;display:inline-flex;margin-left:18px;padding:2px}.graph-root .seg button{background:#0000;border:none;border-radius:4px;color:var(--t3);cursor:pointer;font-size:12px;font-weight:510;padding:3px 10px}.graph-root .seg button.on{background:var(--panel);box-shadow:0 0 0 1px var(--line);color:var(--t1)}.graph-root .changes{align-items:center;color:var(--t3);display:inline-flex;font-size:12px;gap:10px;margin-left:14px}.graph-root .changes[hidden]{display:none}.graph-root .changes button{background:var(--panel);border:1px solid var(--line-2);border-radius:6px;color:var(--t1);cursor:pointer;font-size:12px;font-weight:510;padding:2px 9px}.graph-root .changes button:hover{background:var(--surface-2)}.graph-root .node.dragging{opacity:1!important}.graph-root .ring.target{stroke:var(--t2);stroke-width:1.5}.graph-root .pod-label{fill:var(--t3);text-anchor:middle;font-size:10.5px;font-size:calc(10.5px*var(--inv, 1));font-weight:510;letter-spacing:.06em;text-transform:uppercase}.graph-root .ghost{fill:none;stroke-width:1.5;pointer-events:none}.graph-root.g-groups .ego,.graph-root.g-groups .ring,.graph-root.g-groups .ring-label,.graph-root.g-groups .sep,.graph-root.g-groups .wedge,.graph-root:not(.g-groups) .ghost,.graph-root:not(.g-groups) .pod-label{display:none}.graph-root .tools{display:flex;gap:2px;margin-left:auto;position:relative}.graph-root .tools button{background:#0000;border:1px solid #0000;border-radius:6px;color:var(--t2);cursor:pointer;display:grid;height:28px;place-items:center;width:28px}.graph-root .tools button:hover{background:var(--surface-2);color:var(--t1)}.graph-root .tools button.on{border-color:var(--line-2)}.graph-root .tools svg{stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;height:15px;width:15px}.graph-root #stage{flex:1 1;min-height:0;position:relative}.graph-root svg#graph{cursor:grab;display:block;height:100%;width:100%}.graph-root svg#graph.panning{cursor:grabbing}.graph-root .ring{fill:none;stroke:#0003;stroke-width:1}.graph-root .ring-label{fill:var(--t4);text-anchor:middle;stroke:var(--bg);stroke-width:3px;display:none;font-size:10px;font-size:calc(10px*var(--inv, 1));font-weight:510;letter-spacing:.08em;paint-order:stroke;text-transform:uppercase}.graph-root.g-show-rings .ring-label{display:block}.graph-root .wedge{display:none}.graph-root .wedge.on{fill-opacity:.035}.graph-root .sep{stroke:var(--line);stroke-width:1;display:none}.graph-root.g-show-seps .sep{display:block}.graph-root .redge{stroke:var(--t2);stroke-width:1;opacity:0;pointer-events:none;transition:opacity .18s}.graph-root .redge.hi{opacity:.7}.graph-root.g-show-ties .redge{opacity:.18}.graph-root.g-show-ties .redge.hi{opacity:.8}.graph-root .redge-label{fill:var(--t2);text-anchor:middle;stroke:var(--bg);stroke-width:3px;font-size:10px;font-size:calc(10px*var(--inv, 1));opacity:0;paint-order:stroke;pointer-events:none;transition:opacity .18s}.graph-root .redge-label.hi{opacity:1}.graph-root .node{cursor:pointer;transition:opacity .18s}.graph-root .node circle.core{stroke:var(--bg);stroke-width:1.5}.graph-root .node.left circle.core{fill:var(--panel);stroke:var(--t3);stroke-dasharray:2.5 2.5;stroke-width:1.5}.graph-root .node circle.sel-ring{fill:none;stroke:var(--t1);stroke-width:1.25;opacity:0;transition:opacity .15s}.graph-root .node.sel circle.sel-ring{opacity:1}.graph-root .node text{fill:var(--t2);stroke:var(--bg);stroke-width:3px;font-size:11px;font-size:calc(11px*var(--inv, 1));font-weight:500;paint-order:stroke;pointer-events:none}.graph-root .node text.q{fill:var(--t2);stroke:none;dominant-baseline:central;text-anchor:middle;font-size:10px;font-size:calc(10px*var(--inv, 1));font-weight:590}.graph-root .node text.collide{display:none}.graph-root .node.keep text.collide,.graph-root .node.sel text.collide{display:inline}.graph-root #nodes.nolabels .node:not(.keep):not(.sel) text:not(.q),.graph-root .node.filtered,.graph-root .redge-label.filtered,.graph-root .redge.filtered,.graph-root.g-hide-left .node.left{display:none}.graph-root.g-dimming .node:not(.keep):not(.near){opacity:.15}.graph-root.g-dimming .node.near{opacity:.55}.graph-root .ego{cursor:pointer}.graph-root .ego circle.fill{fill:var(--panel);stroke:var(--t1);stroke-width:1.5}.graph-root .ego text{text-anchor:middle;dominant-baseline:central;fill:var(--t1);font-size:16px;font-weight:590;letter-spacing:-.01em;pointer-events:none}.graph-root .ego.sel circle.fill{stroke-width:2.5}.graph-root .settings{background:var(--panel);border:1px solid var(--line-2);border-radius:8px;padding:6px 10px;position:absolute;right:0;top:34px;width:210px;z-index:5}.graph-root .settings[hidden]{display:none}.graph-root .s-row{align-items:center;border-top:1px solid var(--line);color:var(--t2);cursor:pointer;display:flex;justify-content:space-between;padding:7px 2px}.graph-root .s-row:first-of-type{border-top:none}.graph-root .s-row input{display:none}.graph-root .sw{background:var(--surface-2);border:1px solid var(--line);border-radius:8px;flex:none;height:16px;position:relative;transition:background .15s;width:28px}.graph-root .sw:after{background:var(--t3);border-radius:50%;content:"";height:10px;left:2px;position:absolute;top:2px;transition:left .15s,background .15s;width:10px}.graph-root .s-row input:checked+.sw{background:var(--t1);border-color:var(--t1)}.graph-root .s-row input:checked+.sw:after{background:var(--panel);left:14px}.graph-root .empty{color:var(--t3);display:grid;inset:0;place-items:center;position:absolute}.graph-root button:hover{background-color:initial}.graph-root .tools button:hover,.graph-root .topbar .icon.on,.graph-root .topbar .icon:hover{background-color:var(--surface-2)}.graph-page{bottom:0;left:0;overflow:hidden;position:fixed;right:0;z-index:1}.graph-host{height:100%;width:100%}.graph-status{color:#8a8f98;display:grid;font-size:13px;inset:0;place-content:center;position:absolute;text-align:center;z-index:2}.graph-status-detail{color:#b0b4bb;font-size:11.5px;margin:6px auto 0;max-width:34ch}.floating-action-button{align-items:center;background-color:var(--accent);border:none;border-radius:50%;bottom:2rem;box-shadow:var(--shadow-hover);color:var(--surface);cursor:pointer;display:flex;height:56px;justify-content:center;position:fixed;right:2rem;transition:transform var(--animation-speed-fast) var(--ease-out-cubic),box-shadow var(--animation-speed-fast) var(--ease-out-cubic),background-color var(--animation-speed-fast) var(--ease-out-cubic);width:56px;z-index:100}.floating-action-button:active{transform:scale(.95)}.floating-action-button svg{height:24px;width:24px}.fab-backdrop{align-items:center;background-color:var(--scrim);bottom:0;display:flex;justify-content:center;left:0;position:fixed;right:0;top:0;z-index:999}.fab-menu{animation:fab-menu-appear var(--animation-speed-normal) var(--ease-out-cubic) forwards;background-color:var(--surface);border-radius:var(--radius-xl);bottom:6rem;box-shadow:var(--shadow-hover);overflow:hidden;position:fixed;right:2rem;width:250px}@keyframes fab-menu-appear{0%{opacity:0;transform:translateY(20px)}to{opacity:1;transform:translateY(0)}}.fab-backdrop{animation:fade-in var(--animation-speed-normal) var(--ease-out-cubic) forwards}.fab-menu-header{align-items:center;border-bottom:1px solid var(--line);display:flex;justify-content:space-between;padding:12px 16px}.fab-menu-header h3{color:var(--ink);font-family:var(--font-display);font-size:1.1rem;font-weight:500;margin:0}.fab-close{align-items:center;background:none;border:none;color:var(--muted);cursor:pointer;display:flex;font-size:1.2rem;justify-content:center;margin:-10px;min-height:var(--touch);min-width:var(--touch);padding:10px}.fab-menu-options{max-height:60vh;overflow-y:auto;padding:8px 0}.fab-option{background:none;border:none;color:var(--ink);cursor:pointer;font-size:.95rem;min-height:var(--touch);overflow:hidden;padding:12px 16px;position:relative;text-align:left;transition:background-color var(--animation-speed-fast) var(--ease-out-cubic);width:100%}.fab-option:hover{background-color:var(--surface-soft)}.fab-option:active:after{animation:ripple var(--animation-speed-normal) var(--ease-out-cubic) forwards;background-color:var(--tint);border-radius:50%;content:"";height:100px;left:50%;opacity:1;position:absolute;top:50%;transform:translate(-50%,-50%) scale(0);width:100px}@keyframes ripple{to{opacity:0;transform:translate(-50%,-50%) scale(3)}}@media (max-width:600px){.floating-action-button{bottom:1.5rem;height:48px;right:1.5rem;width:48px}.fab-menu{bottom:5rem;right:1.5rem;width:220px}}.analytics-dashboard{background-color:initial;border-radius:var(--radius);padding:24px;width:100%}.analytics-header{align-items:center;display:flex;flex-wrap:wrap;gap:16px;justify-content:space-between;margin-bottom:24px}.analytics-header h2{color:var(--ink);font-family:var(--font-display);font-size:1.6rem;font-weight:500;margin:0}.date-range-selector{align-items:center;display:flex;gap:12px}.date-range-selector label{margin-bottom:0;white-space:nowrap}.date-range-selector select{background-color:var(--surface);border:1px solid var(--line);border-radius:var(--radius-sm);min-height:var(--touch);padding:8px 12px}.refresh-button{align-items:center;background-color:var(--surface-soft);border:1px solid var(--line);border-radius:var(--radius-sm);color:var(--ink);cursor:pointer;display:flex;height:var(--touch);justify-content:center;transition:background-color var(--t-fast) var(--ease),transform var(--t-fast) var(--ease);width:var(--touch)}.refresh-button:hover{background-color:var(--line)}.analytics-grid{grid-gap:24px;display:grid;gap:24px;grid-template-columns:repeat(auto-fill,minmax(400px,1fr));width:100%}.analytics-card{background-color:var(--surface);border-radius:var(--radius-xl);box-shadow:var(--shadow);overflow:hidden;padding:20px}.analytics-card h3{border-bottom:1px solid var(--line-soft);color:var(--ink);font-family:var(--font-display);font-size:1.15rem;font-weight:500;margin:0 0 16px;padding-bottom:12px}.chart-container{height:300px;width:100%}.no-data-message{align-items:center;color:var(--muted);display:flex;font-style:italic;height:100%;justify-content:center;padding:20px;text-align:center}.metrics-grid{grid-gap:16px;display:grid;gap:16px;grid-template-columns:repeat(2,1fr)}.metric-card{background-color:var(--surface);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:16px;text-align:center}.metric-value{color:var(--accent);font-family:var(--font-display);font-size:2rem;font-weight:500;margin-bottom:8px}.metric-label{color:var(--muted);font-size:.85rem}.loading-indicator{align-items:center;display:flex;flex-direction:column;justify-content:center;padding:40px;width:100%}.loading-spinner{animation:spin 1s linear infinite;border-top:3px solid var(--surface-soft);border:3px solid var(--surface-soft);border-radius:50%;border-top-color:var(--accent);height:40px;margin-bottom:16px;width:40px}.loading-message{color:var(--muted)}@keyframes spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}@media (max-width:768px){.analytics-dashboard{padding:16px}.analytics-grid{grid-template-columns:1fr}.analytics-header{align-items:flex-start;flex-direction:column}.date-range-selector{width:100%}.date-range-selector select{flex:1 1}}*{box-sizing:border-box;margin:0;padding:0}body,html{-webkit-text-size-adjust:none;color:var(--ink);font-family:var(--font-body);overflow-x:hidden;width:100%}.home-container{background-color:initial;display:flex;flex-direction:column;gap:10px;max-width:100%;min-height:100vh;padding:10px}.class-status-card{background-color:var(--surface);border-radius:var(--radius-xl);box-shadow:var(--shadow);padding:18px 18px 18px 20px;position:relative}.compact-header{display:flex;flex-direction:column;gap:16px}.icon-and-info{align-items:center;display:flex;gap:12px}.icon-wrapper{flex-shrink:0;margin-left:2px;position:relative}.program-icon{background-color:var(--ink);border-radius:var(--radius-lg);color:var(--surface);font-family:var(--font-display);font-size:14px;font-weight:500;height:48px;width:48px}.program-icon,.semester-badge{align-items:center;display:flex;justify-content:center}.semester-badge{background-color:var(--surface);border-radius:50%;bottom:-4px;box-shadow:var(--shadow);color:var(--ink);font-size:10px;font-weight:600;height:18px;position:absolute;right:-4px;width:18px}.header-content{flex:1 1;min-width:0}.program-title{color:var(--ink);font-family:var(--font-display);font-size:19px;font-weight:500;margin:0 0 4px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.meta-info{color:var(--muted);display:flex;flex-wrap:wrap;font-size:12px;gap:8px}.cr-badge,.section-text{align-items:center;background-color:var(--line);border-radius:var(--radius-sm);display:flex;font-size:11px;font-weight:500;gap:4px;line-height:1.4;padding:2px 6px}.meta-icon{color:var(--muted);flex-shrink:0}.inline-progress{align-items:center;display:flex;gap:10px;margin-bottom:6px;margin-top:12px}.cr-info{border:1px solid var(--line);border-radius:var(--radius-lg);gap:18px;margin-top:26px;padding:14px 18px}.cr-icon{background-color:var(--surface);border-radius:50%;box-shadow:var(--shadow);color:var(--ink);flex-shrink:0;padding:10px}.cr-text{color:var(--ink);font-size:15px;font-weight:500;line-height:1.3}.progress-bar{background-color:var(--line);border-radius:var(--radius-pill);flex:1 1;height:6px;overflow:hidden}.progress-text{color:var(--ink);font-size:12px;font-weight:600;text-align:right;width:30px}.mini-timeline{margin-bottom:12px;margin-top:6px;padding:0 24px}.milestone-track{height:42px;padding-top:18px;position:relative}.milestone-track:before{background-color:var(--line);content:"";right:0}.milestone-progress,.milestone-track:before{height:2px;left:0;position:absolute;top:18px}.milestone-progress{background-color:var(--ink);z-index:1}.milestone{width:30px}.milestone-dot{border:2px solid var(--surface);left:50%;margin-bottom:6px;position:absolute;top:-4px;transform:translateX(-50%);z-index:2}.milestone-dot.active{background-color:var(--ink)}.milestone-label{font-size:10px;position:relative;top:10px}.today-marker{flex-direction:column;transform:translateX(-50%);z-index:3}.today-dot{background-color:var(--ink);border:2px solid var(--surface);border-radius:50%;box-shadow:var(--ring);height:8px;margin-bottom:6px;width:8px}.today-label{font-size:9px}.semester-progress{padding:0 12px}.progress-header{display:flex;justify-content:space-between;margin-bottom:14px}.progress-label{color:var(--muted);font-size:14px}.progress-percentage{color:var(--ink);font-size:14px;font-weight:500}.progress-bar-wrapper{padding:0 12px}.progress-track{background-color:var(--line);border-radius:var(--radius-pill);height:4px;margin-bottom:28px;overflow:hidden;position:relative}.progress-track:after,.progress-track:before{content:"";height:100%;position:absolute;top:0;width:12px;z-index:1}.progress-track:before{background:linear-gradient(to right,var(--surface-soft),#0000);left:0}.progress-track:after{background:linear-gradient(to left,var(--surface-soft),#0000);right:0}.progress-fill{background-color:var(--accent);border-radius:var(--radius-pill);height:100%;transition:width var(--t-reveal) var(--ease)}.milestones{display:flex;height:40px;position:relative}.milestone{align-items:center;display:flex;flex-direction:column;gap:8px;position:absolute;transform:translateX(-50%)}.milestone-dot{background-color:var(--line);border-radius:50%;height:8px;transition:background-color var(--t-fast) var(--ease);width:8px}.milestone-dot.active{background-color:var(--accent)}.milestone-label{color:var(--muted);font-size:12px;font-weight:500;white-space:nowrap}.cr-info{background-color:var(--surface-soft);border-radius:12px;gap:16px;padding:16px}.cr-avatar,.cr-info{align-items:center;display:flex}.cr-avatar{flex-shrink:0;height:40px;justify-content:center;opacity:.85;width:40px}.cr-details{display:flex;flex-direction:column;gap:6px}.cr-label{color:var(--muted);font-size:12px}.cr-name{color:var(--ink);font-size:15px;font-weight:600}.navigation-section{padding:0}.section-heading{color:var(--ink);font-size:16px;font-weight:600;margin-bottom:12px;padding-left:2px}.navigation-tiles{grid-gap:10px;display:grid;gap:10px;grid-template-columns:1fr 1fr}.nav-tile{align-items:flex-start;background-color:var(--surface);border-radius:var(--radius-xl);box-shadow:var(--shadow);cursor:pointer;display:flex;gap:12px;min-height:var(--touch);padding:18px;transition:transform var(--t-fast) var(--ease),box-shadow var(--t-fast) var(--ease)}.nav-tile:active{transform:scale(.98)}.nav-tile:active,.tile-icon{background-color:var(--surface-soft)}.tile-icon{align-items:center;border-radius:var(--radius);display:flex;flex-shrink:0;height:32px;justify-content:center;width:32px}.tile-icon svg{color:var(--accent);height:16px;width:16px}.tile-content{flex:1 1}.tile-content h2{color:var(--ink);font-family:var(--font-display);font-size:15px;font-weight:500;margin:0 0 4px}.tile-content p{color:var(--muted);font-size:12px;line-height:1.3;margin:0}.events-section{background:var(--surface);border-radius:var(--radius-xl);box-shadow:var(--shadow);padding:18px}.events-heading{color:var(--ink);font-family:var(--font-display);font-size:17px;font-weight:500;margin-bottom:16px}.events-timeline{padding-left:50px;position:relative}.timeline-line{bottom:0;left:16px;top:0;width:2px;z-index:1}.timeline-progress{background-color:var(--ink);left:16px;position:absolute;top:0;width:2px;z-index:2}.event-item{align-items:center;display:flex;margin-bottom:28px;min-height:32px;padding-bottom:0;padding-left:40px;position:relative}.event-item:last-child{margin-bottom:0}.event-date{align-items:center;background:var(--surface);border-radius:var(--radius-lg);display:flex;flex-direction:column;height:100%;justify-content:center;left:-34px;padding:2px 0;position:absolute;top:0;width:32px;z-index:4}.event-month{color:var(--muted);font-size:10px;font-weight:500;text-transform:uppercase}.event-day{color:var(--ink);font-size:14px;font-weight:600}.event-connector{height:2px;left:17px;top:50%;transform:translateY(-50%);width:20px;z-index:1}.event-connector,.event-connector:before{background-color:var(--line);position:absolute}.event-connector:before{border:1px solid var(--surface);border-radius:50%;content:"";height:6px;left:-3px;top:-2px;width:6px}.event-item.past .event-connector,.event-item.past .event-connector:before{background-color:var(--ink)}.event-details{gap:12px;height:100%}.event-details,.event-icon{align-items:center;display:flex}.event-icon{background-color:var(--surface-soft);border-radius:var(--radius);color:var(--accent);flex-shrink:0;height:32px;justify-content:center;width:32px}.event-name{display:flex;flex-direction:column}.event-title{color:var(--ink);font-size:14px;font-weight:500;line-height:1.3}.event-item.past .event-dot{background-color:var(--ink)}.event-item.today .event-dot{background-color:var(--ink);box-shadow:var(--ring)}.event-item.today .event-title{color:var(--ink);font-weight:600}.today-indicator{left:0;width:100%;z-index:10}.today-indicator,.today-marker{align-items:center;display:flex;position:absolute}.today-marker{height:16px;justify-content:center;left:-26px;width:16px;z-index:5}.today-marker:before{background-color:var(--ink);border:2px solid var(--surface);border-radius:50%;box-shadow:var(--ring);content:"";height:8px;width:8px}.today-line{background-color:var(--scrim-soft);height:1px;left:-50px;position:absolute;right:0;z-index:3}.today-label{border-radius:var(--radius-sm);color:var(--ink);font-size:12px;font-weight:500;padding:2px 8px;position:relative;z-index:6}.semester-timeline-section,.today-label{background-color:var(--surface);box-shadow:var(--shadow)}.semester-timeline-section{border-radius:var(--radius-xl);padding:28px 24px}.timeline-container{margin-top:20px;padding-left:28px;position:relative}.timeline-line{background-color:var(--line);bottom:8px;left:4px;position:absolute;top:8px;width:1px}.timeline-event{margin-bottom:24px;padding-bottom:4px;position:relative}.timeline-dot{background-color:var(--ink);border-radius:50%;box-shadow:0 0 0 2px var(--surface);height:8px;left:-28px;position:absolute;top:8px;width:8px}.timeline-today .timeline-dot{background-color:var(--muted);height:10px;left:-29px;top:7px;width:10px}.timeline-date{color:var(--muted);font-size:13px;margin-bottom:6px}.timeline-title{color:var(--ink);font-size:15px;font-weight:500}.timeline-today-label{color:var(--muted);font-size:14px;font-weight:500}.warqa-footer{display:flex;flex-direction:column;gap:4px;margin-top:auto;padding:16px 0 8px;text-align:center}.warqa-signature{align-items:center;color:var(--muted);display:flex;font-size:9.6px;gap:6px;justify-content:center}.warqa-arabic{color:var(--muted);font-size:12.8px}.warqa-meaning,.warqa-pronunciation{color:var(--muted);font-family:monospace;font-size:9.6px}.warqa-meaning{font-style:normal;font-weight:400}.warqa-credit{color:var(--muted);font-size:8.8px;margin-top:4px}.warqa-english{font-family:monospace;font-weight:400}.warqa-arabic-name{color:var(--muted);font-size:10.4px;font-weight:500;margin-left:4px}@media (max-width:480px){.home-container{gap:10px;padding:10px}.navigation-tiles{gap:10px;grid-template-columns:1fr}.nav-tile{grid-gap:8px;display:grid;gap:8px;grid-template-columns:auto 1fr;grid-template-rows:auto auto;padding:18px}.tile-icon{align-self:center;grid-row:1/3;margin-right:4px}.tile-content{grid-column:2;padding-top:2px}.tile-content h2{margin-bottom:2px}.tile-content p{grid-column:2;grid-row:2}.events-timeline{padding-left:40px}.event-date{left:-40px}.event-connector{left:17px}.event-icon{height:28px;width:28px}.event-title{font-size:13px}.cr-info{margin-top:22px;padding:12px}.cr-icon{padding:8px}.cr-text{font-size:14px}}@media (max-width:359px){.mini-timeline{padding:0 3px}.milestone-label{font-size:9px}.navigation-tiles{gap:8px}.nav-tile{padding:10px}.tile-icon{height:28px;width:28px}.tile-content h2{font-size:12px}.events-timeline{padding-left:32px}.event-date{font-size:9px;left:-32px}.event-dot{left:-22px}.event-day{font-size:12px}}
/*# sourceMappingURL=main.74f6c830.css.map*/