:root{font-family:system-ui,Avenir,Helvetica,Arial,sans-serif;line-height:1.5;font-weight:400;color-scheme:light dark;color:#ffffffde;background-color:#242424;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}a{font-weight:500;color:#646cff;text-decoration:inherit}a:hover{color:#535bf2}body{margin:0;display:flex;place-items:center;min-width:320px;min-height:100vh}h1{font-size:3.2em;line-height:1.1}button{border-radius:8px;border:1px solid transparent;padding:.6em 1.2em;font-size:1em;font-weight:500;font-family:inherit;background-color:#1a1a1a;cursor:pointer;transition:border-color .25s}button:hover{border-color:#646cff}button:focus,button:focus-visible{outline:4px auto -webkit-focus-ring-color}@media(prefers-color-scheme:light){:root{color:#213547;background-color:#fff}a:hover{color:#747bff}button{background-color:#f9f9f9}}*{box-sizing:border-box}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:#f5f5f5;color:#333}.app{min-height:100vh}.header{background:linear-gradient(135deg,#abd8a5,#8bc78b);color:#2d5a27;padding:1rem 2rem;display:flex;justify-content:space-between;align-items:center;box-shadow:0 2px 8px #0000001a}.header h1{margin:0;font-size:1.5rem}.logo{display:flex;align-items:center;gap:.75rem}.logo-icon{width:48px;height:48px;background:#2d5a27;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.5rem}.logo-text{display:flex;flex-direction:column}.logo-text .title{font-size:1.8rem;font-weight:800;color:#2d5a27;letter-spacing:2px;line-height:1}.logo-text .subtitle{font-size:.75rem;color:#4a7c44;text-transform:uppercase;letter-spacing:1px}.nav{display:flex;gap:.5rem}.nav button{background:transparent;border:2px solid #2d5a27;color:#2d5a27;padding:.5rem 1rem;border-radius:4px;cursor:pointer;font-size:.9rem;transition:all .2s;font-weight:500}.nav button:hover,.nav button.active{background:#2d5a27;color:#fff}.main{max-width:1200px;margin:0 auto;padding:2rem}.loading{text-align:center;padding:2rem;color:#666}.dashboard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:2rem;gap:2rem;flex-wrap:wrap}.dashboard-header h2{margin:0;color:#2d5a27}.dashboard-header select,.filters select{padding:.6rem 2rem .6rem 1rem;border:2px solid #ABD8A5;border-radius:8px;font-size:1rem;background-color:#fff;color:#2d5a27;font-weight:500;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%232d5a27' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;transition:all .2s}.dashboard-header select:hover,.filters select:hover{border-color:#2d5a27}.dashboard-header select:focus,.filters select:focus{outline:none;border-color:#2d5a27;box-shadow:0 0 0 3px #2d5a271a}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:2rem}.stat-card{background:#fff;padding:1.5rem;border-radius:8px;box-shadow:0 2px 4px #0000001a;text-align:center;color:#333}.stat-value{font-size:2rem;font-weight:700;color:#2d5a27}.stat-label{color:#666;margin-top:.5rem}.chart-container{background:#fff;padding:1.5rem;border-radius:8px;box-shadow:0 2px 4px #0000001a}.chart-container h3{margin-top:0}.leaderboard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.leaderboard-header h2{margin:0;color:#2d5a27}.leaderboard-header select{padding:.6rem 2rem .6rem 1rem;border:2px solid #ABD8A5;border-radius:8px;font-size:1rem;background-color:#fff;color:#2d5a27;font-weight:500;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%232d5a27' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center;transition:all .2s}.leaderboard-header select:hover{border-color:#2d5a27}.leaderboard-header select:focus{outline:none;border-color:#2d5a27;box-shadow:0 0 0 3px #2d5a271a}.metric-tabs{display:flex;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;overflow:hidden;margin-bottom:1.5rem}.metric-tab{flex:1;padding:1rem 1.5rem;border:none;background:#fff;color:#666;font-size:.95rem;font-weight:500;cursor:pointer;transition:all .2s;border-bottom:3px solid transparent}.metric-tab:not(:last-child){border-right:1px solid #eee}.metric-tab:hover{background:#f9f9f9;color:#2d5a27}.metric-tab.active{color:#2d5a27;background:#f0f7ef;border-bottom-color:#2d5a27}.filters{display:flex;gap:1rem;margin-bottom:1.5rem;flex-wrap:wrap}.leaderboard-table,.athletes-table{width:100%;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;border-collapse:collapse;overflow:hidden}.leaderboard-table th,.leaderboard-table td,.athletes-table th,.athletes-table td{padding:1rem;text-align:left;border-bottom:1px solid #eee;color:#333}.leaderboard-table th,.athletes-table th{background:#f9f9f9;font-weight:600}.leaderboard-table .rank{font-weight:700;width:50px}.leaderboard-table .rank-1{background:#fff9e6}.leaderboard-table .rank-1 .rank{color:gold}.leaderboard-table .rank-2{background:#f5f5f5}.leaderboard-table .rank-2 .rank{color:silver}.leaderboard-table .rank-3{background:#fdf5ef}.leaderboard-table .rank-3 .rank{color:#cd7f32}.leaderboard-table .value{font-weight:600;color:#2d5a27}.leaderboard-table .value{display:flex;align-items:center;gap:.5rem}.leaderboard-table .value .time{font-weight:600;color:#2d5a27}.leaderboard-table .value .activity-link{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;color:#2d5a27;background:#f0f7ef;transition:all .2s}.leaderboard-table .value .activity-link:hover{background:#2d5a27;color:#fff}.athlete-list-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.athlete-list-header h2{margin:0;color:#2d5a27}.search-input{width:100%;max-width:300px;padding:.6rem 1rem;border:2px solid #ABD8A5;border-radius:8px;font-size:.95rem;transition:all .2s}.search-input:hover{border-color:#8bc78b}.search-input:focus{outline:none;border-color:#2d5a27;box-shadow:0 0 0 3px #2d5a271a}.athletes-table a{color:#2d5a27;text-decoration:none;font-weight:500}.athletes-table a:hover{text-decoration:underline}.athletes-table .kom-count{text-align:center;font-weight:600;color:#2d5a27}.athletes-table.sortable th.sortable-header{cursor:pointer;-webkit-user-select:none;user-select:none;transition:background .2s}.athletes-table.sortable th.sortable-header:hover{background:#e8f5e6}.sort-indicator{margin-left:.4rem;color:#999;font-size:.85rem}.sort-indicator.active{color:#2d5a27}.best-efforts-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem}.best-efforts-header h2{margin:0;color:#2d5a27}.best-efforts-header select{display:none}.distance-tabs{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.5rem}.distance-tab{padding:.6rem 1rem;border:2px solid #ABD8A5;background:#fff;color:#2d5a27;font-size:.9rem;font-weight:500;border-radius:20px;cursor:pointer;transition:all .2s}.distance-tab:hover{background:#f0f7ef;border-color:#2d5a27}.distance-tab.active{background:#2d5a27;color:#fff;border-color:#2d5a27}.weekly-activity{max-width:100%}.weekly-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.weekly-header h2{margin:0;color:#2d5a27}.weekly-header .header-controls{display:flex;align-items:center;gap:1rem;flex-wrap:wrap}.weekly-header select{padding:.6rem 2rem .6rem 1rem;border:2px solid #ABD8A5;border-radius:8px;font-size:1rem;background-color:#fff;color:#2d5a27;font-weight:500;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%232d5a27' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center}.view-mode-toggle{display:flex;gap:0;border-radius:8px;overflow:hidden;border:2px solid #ABD8A5}.view-mode-toggle button{padding:.5rem 1rem;border:none;background:#fff;color:#2d5a27;font-size:.9rem;font-weight:500;cursor:pointer;transition:all .2s}.view-mode-toggle button:hover{background:#f0f7ef}.view-mode-toggle button.active{background:#2d5a27;color:#fff}.week-navigation{display:flex;align-items:center;justify-content:center;gap:1rem;margin-bottom:1.5rem;background:#fff;padding:1rem;border-radius:8px;box-shadow:0 2px 4px #0000001a}.week-nav-btn{width:36px;height:36px;border:none;background:#f0f7ef;color:#2d5a27;font-size:1.1rem;font-weight:600;border-radius:8px;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center}.week-nav-btn:hover:not(:disabled){background:#2d5a27;color:#fff;transform:scale(1.05)}.week-nav-btn:active:not(:disabled){transform:scale(.95)}.week-nav-btn:disabled{opacity:.3;cursor:not-allowed;background:#f5f5f5;color:#999}.week-info{text-align:center;min-width:180px}.week-number{display:block;font-size:1.3rem;font-weight:700;color:#2d5a27}.week-dates{display:block;font-size:.9rem;color:#666}.weekly-stats-grid{grid-template-columns:repeat(4,1fr)}.weekly-leaderboard{background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;padding:1.5rem;margin-bottom:1.5rem}.weekly-leaderboard h3{margin:0;color:#2d5a27}.weekly-leaderboard .leaderboard-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;flex-wrap:wrap;gap:.5rem}.leaderboard-toggle{display:flex;flex-wrap:wrap;gap:.5rem}.leaderboard-toggle button{padding:.4rem .8rem;border:none;background:#f0f0f0;color:#666;font-size:.85rem;cursor:pointer;transition:all .2s;border-radius:1rem}.leaderboard-toggle button:hover{background:#e0e0e0}.leaderboard-toggle button.active{background:#2d5a27;color:#fff}.leaderboard-list{display:flex;flex-direction:column;gap:.5rem;max-height:440px;overflow-y:auto;scrollbar-color:#c1c1c1 #f1f1f1}.leaderboard-list::-webkit-scrollbar{width:12px}.leaderboard-list::-webkit-scrollbar-track{background:#f1f1f1;border-radius:4px}.leaderboard-list::-webkit-scrollbar-thumb{background:#c1c1c1;border-radius:4px}.leaderboard-list::-webkit-scrollbar-thumb:hover{background:#a1a1a1}.leaderboard-item{display:flex;align-items:center;padding:.75rem 1rem;background:#f9f9f9;border-radius:6px;cursor:pointer;transition:all .2s}.leaderboard-item:hover{background:#f0f7ef}.leaderboard-item.rank-1{background:#fff9e6}.leaderboard-item.rank-2{background:#f5f5f5}.leaderboard-item.rank-3{background:#fdf5ef}.leaderboard-item .rank{width:32px;font-weight:600;font-size:1rem}.leaderboard-item .name{flex:1;font-weight:500;color:#333;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.leaderboard-item .distance{font-weight:600;color:#2d5a27;margin-left:1rem}.athlete-progression{background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a;padding:1.5rem}.progression-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1.5rem;flex-wrap:wrap;gap:1rem}.progression-header h3{margin:0;color:#2d5a27}.progression-header select{padding:.5rem 2rem .5rem .75rem;border:2px solid #ABD8A5;border-radius:6px;font-size:.9rem;background-color:#fff;color:#2d5a27;font-weight:500;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%232d5a27' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;max-width:200px}.weekly-chart{margin-bottom:1rem}.chart-bars{display:flex;align-items:flex-end;height:120px;gap:2px;padding:0 4px;border-bottom:2px solid #eee}.chart-bar-container{flex:1;height:100%;display:flex;align-items:flex-end;cursor:pointer;min-width:0}.chart-bar-container:hover .chart-bar{background:#8bc78b}.chart-bar-container.selected .chart-bar{background:#2d5a27}.chart-bar{width:100%;background:#abd8a5;border-radius:2px 2px 0 0;min-height:2px;transition:background .2s}.chart-labels{display:flex;justify-content:space-between;padding:.5rem 4px 0;font-size:.75rem;color:#999}.monthly-chart .monthly-bars{gap:8px}.monthly-chart .chart-bar-container{min-width:20px}.monthly-chart .chart-bar{border-radius:4px 4px 0 0}.monthly-labels{justify-content:space-around}.athlete-summary{display:flex;gap:2rem;padding-top:1rem;border-top:1px solid #eee}.summary-item{display:flex;flex-direction:column}.summary-value{font-size:1.1rem;font-weight:600;color:#2d5a27}.summary-label{font-size:.85rem;color:#666}.week-activities{margin-top:1rem;padding-top:1rem;border-top:1px solid #eee}.week-activities h4{margin:0 0 .5rem;font-size:.95rem;color:#333}.activities-list{display:flex;flex-direction:column;gap:.3rem}.activity-item{display:flex;align-items:center;gap:1rem;padding:.4rem .6rem;background:#f8f9fa;border-radius:4px;font-size:.9rem}.activity-date{color:#666;min-width:120px}.activity-distance{font-weight:600;color:#2d5a27;min-width:70px}.activity-time{color:#888}.activity-link{color:#fc4c02;text-decoration:none;margin-left:8px;font-size:.85em}.activity-link:hover{color:#e34402;text-decoration:underline}.no-data-message{text-align:center;padding:2rem;color:#666;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a}@media(max-width:768px){.main{padding:1rem}.header{flex-direction:column;gap:1rem;padding:1rem}.nav{flex-wrap:wrap;justify-content:center}.stats-grid{grid-template-columns:repeat(2,1fr)}.filters{flex-direction:column}.filters select{width:100%}.dashboard-header,.leaderboard-header{flex-direction:column;align-items:flex-start;gap:1rem}.leaderboard-header select{width:100%}.metric-tabs{flex-direction:column}.metric-tab{border-bottom:1px solid #eee;border-right:none!important}.metric-tab.active{border-bottom-color:#eee;border-left:3px solid #2d5a27}.leaderboard-table,.athletes-table{font-size:.9rem}.leaderboard-table th,.leaderboard-table td,.athletes-table th,.athletes-table td{padding:.75rem .5rem}.distance-tabs{display:none}.best-efforts-header select{display:block;padding:.6rem 2rem .6rem 1rem;border:2px solid #ABD8A5;border-radius:8px;font-size:1rem;background-color:#fff;color:#2d5a27;font-weight:500;cursor:pointer;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%232d5a27' d='M6 8L1 3h10z'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .75rem center}.weekly-header{flex-direction:column;align-items:flex-start}.weekly-header select{width:100%}.weekly-stats-grid{grid-template-columns:repeat(2,1fr)}.week-navigation{padding:.75rem}.week-info{min-width:140px}.week-number{font-size:1.1rem}.leaderboard-item .name{max-width:150px}.progression-header{flex-direction:column;align-items:flex-start}.progression-header select{width:100%;max-width:none}.chart-bars{height:100px;overflow-x:auto;min-width:100%}.athlete-summary{flex-direction:column;gap:1rem}}.athlete-profile{max-width:800px;margin:0 auto}.back-link{display:inline-block;color:#2d5a27;text-decoration:none;font-weight:500;margin-bottom:1.5rem;padding:.5rem 1rem;background:#fff;border-radius:6px;box-shadow:0 2px 4px #0000001a;transition:all .2s}.back-link:hover{background:#f0f7ef}.profile-header{display:flex;gap:1.5rem;align-items:center;background:#fff;padding:1.5rem;border-radius:8px;box-shadow:0 2px 4px #0000001a;margin-bottom:1.5rem}.profile-photo-container{flex-shrink:0}.profile-photo{width:80px;height:80px;border-radius:50%;object-fit:cover;border:3px solid #ABD8A5}.profile-photo-placeholder{width:80px;height:80px;border-radius:50%;background:#f0f7ef;display:flex;align-items:center;justify-content:center;color:#abd8a5;border:3px solid #ABD8A5}.profile-info{flex:1}.profile-info h2{margin:0 0 .5rem;color:#2d5a27;font-size:1.5rem}.profile-badges{display:flex;gap:.75rem;flex-wrap:wrap;margin-bottom:.75rem}.badge{display:inline-flex;align-items:center;gap:.3rem;padding:.3rem .6rem;border-radius:1rem;font-size:.8rem;font-weight:500}.kom-badge{background:#fff3cd;color:#856404}.activities-badge{background:#f0f7ef;color:#2d5a27}.strava-link{color:#2d5a27;font-size:.9rem;text-decoration:none}.strava-link:hover{text-decoration:underline}.athlete-profile .stats-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:1rem;margin-bottom:1.5rem}.athlete-profile .stat-card{background:#fff;padding:1.25rem;border-radius:8px;box-shadow:0 2px 4px #0000001a;text-align:center}.athlete-profile .stat-value{font-size:1.75rem;font-weight:700;color:#2d5a27}.athlete-profile .stat-label{font-size:.85rem;color:#666;margin-top:.25rem}.progression-section,.best-efforts-section,.trends-section,.yearly-section{background:#fff;padding:1.5rem;border-radius:8px;box-shadow:0 2px 4px #0000001a;margin-bottom:1.5rem}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.section-header h3,.best-efforts-section h3,.trends-section h3,.yearly-section h3{margin:0;color:#2d5a27;font-size:1.1rem}.year-selector{display:flex;gap:.5rem}.year-selector button{padding:.4rem .8rem;border:1px solid #ABD8A5;background:#fff;color:#2d5a27;font-size:.85rem;border-radius:4px;cursor:pointer;transition:all .2s}.year-selector button:hover{background:#f0f7ef}.year-selector button.active{background:#2d5a27;color:#fff;border-color:#2d5a27}.athlete-profile .weekly-chart{display:flex;align-items:flex-end;height:100px;gap:2px;margin-bottom:.5rem}.athlete-profile .week-bar{flex:1;background:#e0e0e0;border-radius:2px 2px 0 0;min-height:2px;transition:background .2s}.athlete-profile .week-bar.has-data{background:#abd8a5}.athlete-profile .week-bar:hover{background:#8bc78b}.chart-legend{display:flex;justify-content:space-between;font-size:.75rem;color:#999;padding:0 2px}.best-efforts-section h3{margin-bottom:1rem}.best-efforts-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:1rem}.effort-card{background:#f9f9f9;padding:1rem;border-radius:8px;text-align:center}.effort-distance{font-size:.85rem;color:#666;margin-bottom:.25rem}.effort-time{font-size:1.25rem;font-weight:700;color:#2d5a27}.effort-link{display:inline-block;margin-top:.5rem;font-size:.8rem;color:#2d5a27;text-decoration:none}.effort-link:hover{text-decoration:underline}.trends-section h3{margin-bottom:1rem}.trends-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:1rem}.trend-item{padding:1rem;background:#f9f9f9;border-radius:8px;text-align:center}.trend-value{font-size:1.1rem;font-weight:600;color:#2d5a27}.trend-label{font-size:.8rem;color:#666;margin-top:.25rem}.yearly-section h3{margin-bottom:1rem}.yearly-table{width:100%;border-collapse:collapse}.yearly-table th,.yearly-table td{padding:.75rem;text-align:left;border-bottom:1px solid #eee}.yearly-table th{background:#f9f9f9;font-weight:600;color:#333}.athlete-name-link{color:#2d5a27;text-decoration:none;font-weight:500}.athlete-name-link:hover{text-decoration:underline}.error{text-align:center;padding:2rem;color:#666;background:#fff;border-radius:8px;box-shadow:0 2px 4px #0000001a}@media(max-width:768px){.profile-header{flex-direction:column;text-align:center}.profile-badges{justify-content:center}.athlete-profile .stats-cards{grid-template-columns:repeat(3,1fr)}.athlete-profile .stat-value{font-size:1.25rem}.section-header{flex-direction:column;align-items:flex-start;gap:.75rem}.year-selector{width:100%;justify-content:flex-start}.best-efforts-grid{grid-template-columns:repeat(2,1fr)}.trends-grid{grid-template-columns:1fr}}
