*{box-sizing:border-box;margin:0;padding:0}:root{--red:#c0392b;--red-dark:#96281b;--dark:#16181d;--bg:#f2f2ef;--card:#ffffff;--text:#24262b;--muted:#6b6f76;--border:#e2e2dd;--radius:12px}html{-webkit-text-size-adjust:100%}body{background:var(--bg);color:var(--text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;line-height:1.45}a{color:inherit}.header{background:var(--dark);color:#fff;position:-webkit-sticky;position:sticky;top:0;z-index:50;box-shadow:0 2px 8px rgba(0,0,0,.25)}.header-inner{max-width:1100px;margin:0 auto;padding:10px 16px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}.logo{font-weight:900;font-style:italic;font-size:26px;letter-spacing:.5px;color:var(--red);text-shadow:1.5px 1.5px 0 #000,-1px -1px 0 #000,1px -1px 0 #000,-1px 1px 0 #000,2px 2px 0 #fff;text-decoration:none;line-height:1}.logo small{display:block;font-size:11px;color:#ddd;font-style:normal;font-weight:600;letter-spacing:2px;text-shadow:none;margin-top:3px;text-transform:uppercase}.nav{display:flex;gap:4px;margin-left:auto;flex-wrap:wrap}.nav a{color:#e8e8e8;text-decoration:none;font-weight:600;font-size:14px;padding:7px 12px;border-radius:8px}.nav a:hover{background:rgba(255,255,255,.12)}.nav a.active{background:var(--red);color:#fff}.whoami{font-size:13px;color:#bbb;cursor:pointer;border:1px dashed #555;padding:5px 10px;border-radius:999px;background:none}.whoami:hover{color:#fff;border-color:#999}.container{max-width:1100px;margin:0 auto;padding:20px 16px 80px}.page-title{font-size:24px;font-weight:800;margin:8px 0 4px}.page-sub{color:var(--muted);font-size:14px;margin-bottom:20px}.toolbar{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-bottom:20px}.search{flex:1 1;min-width:200px;padding:10px 14px;border:1px solid var(--border);border-radius:999px;font-size:15px;background:#fff;outline:none}.search:focus{border-color:var(--red)}.chip-btn{padding:8px 16px;border-radius:999px;border:1px solid var(--border);background:#fff;font-size:14px;font-weight:600;cursor:pointer;color:var(--text)}.chip-btn.on{background:var(--dark);color:#fff;border-color:var(--dark)}.v-divider{width:1px;align-self:stretch;background:var(--border);margin:2px 6px}.carte-head .add-race-btn,.toolbar .add-race-btn{text-decoration:none;display:inline-flex;align-items:center;flex:0 0 auto;width:auto;margin-left:auto;border-radius:999px}.month-block{margin-bottom:34px}.month-title{font-size:18px;font-weight:800;text-transform:uppercase;letter-spacing:1.5px;color:var(--red-dark);border-bottom:3px solid var(--red);display:inline-block;padding-bottom:4px;margin-bottom:16px}.race-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));grid-gap:16px;gap:16px}.race-card{background:var(--card);border-radius:var(--radius);border:1px solid var(--border);overflow:hidden;display:flex;flex-direction:column;box-shadow:0 1px 3px rgba(0,0,0,.06)}.race-poster{height:170px;background:#fafaf8;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--border);position:relative}.race-poster img{max-width:100%;max-height:100%;object-fit:contain}.race-poster .no-img{font-size:40px;opacity:.25}.race-date-badge{position:absolute;top:10px;left:10px;background:var(--dark);color:#fff;font-size:12px;font-weight:700;padding:4px 10px;border-radius:999px}.race-body{padding:14px;display:flex;flex-direction:column;gap:8px;flex:1 1}.race-title{font-size:16px;font-weight:800;line-height:1.25;word-break:break-word}.race-title a{color:var(--red-dark);text-decoration:none}.race-title a:hover{text-decoration:underline}.race-date{font-size:13px;color:var(--muted);font-weight:600}.race-link{font-size:13px;font-weight:700;color:var(--red);text-decoration:none;align-self:flex-start}.race-link:hover{text-decoration:underline}.race-desc a{color:var(--red);font-weight:600;text-decoration:none;word-break:break-all}.race-desc a:hover{text-decoration:underline}.race-desc{font-size:13px;color:var(--muted);display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden;white-space:pre-line}.race-desc.open{display:block}.desc-toggle{background:none;border:none;color:var(--red);font-size:12px;font-weight:700;cursor:pointer;align-self:flex-start;padding:0}.participants{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}.p-chip{display:inline-flex;align-items:center;gap:6px;background:#f4f4f1;border:1px solid var(--border);border-radius:999px;padding:3px 10px 3px 3px;font-size:12.5px;font-weight:600}.p-chip.me{border-color:var(--red);background:#fdf1ef}.avatar{width:22px;height:22px;border-radius:50%;color:#fff;font-size:10px;font-weight:800;display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}.race-actions{display:flex;gap:8px;margin-top:10px}.btn{border:none;border-radius:8px;padding:9px 14px;font-size:14px;font-weight:700;cursor:pointer;transition:filter .1s}.btn:hover{filter:brightness(1.08)}.btn:disabled{opacity:.5;cursor:default}.btn-join{background:var(--red);color:#fff;flex:1 1}.btn-leave{background:#fff;color:var(--muted);border:1px solid var(--border);flex:1 1}.btn-dark{background:var(--dark);color:#fff}.count-badge{font-size:12px;font-weight:700;color:var(--muted)}.race-edit{position:absolute;top:10px;right:10px;background:rgba(255,255,255,.92);border:1px solid var(--border);border-radius:999px;width:30px;height:30px;display:inline-flex;align-items:center;justify-content:center;font-size:14px;text-decoration:none;box-shadow:0 1px 3px rgba(0,0,0,.15)}.race-edit:hover{background:#fff;transform:scale(1.08)}.modal-backdrop{position:fixed;inset:0;background:rgba(10,10,10,.55);display:flex;align-items:center;justify-content:center;z-index:100;padding:16px}.modal{background:#fff;border-radius:14px;padding:24px;width:100%;max-width:420px;box-shadow:0 12px 40px rgba(0,0,0,.3)}.modal h3{font-size:18px;margin-bottom:4px}.modal p{font-size:13px;color:var(--muted);margin-bottom:14px}.modal input[type=text]{width:100%;padding:11px 14px;border:1px solid var(--border);border-radius:8px;font-size:15px;margin-bottom:14px;outline:none}.modal input[type=text]:focus{border-color:var(--red)}.modal-actions{display:flex;gap:8px;justify-content:flex-end}.picker-list{border:1px solid var(--border);border-radius:10px;max-height:290px;overflow-y:auto;margin-bottom:14px;background:#fafaf8}.picker-item{display:flex;align-items:center;gap:10px;width:100%;padding:9px 12px;border:none;border-bottom:1px solid var(--border);background:none;font-size:14px;font-weight:600;color:var(--text);cursor:pointer;text-align:left;font-family:inherit}.picker-item:last-child{border-bottom:none}.picker-item:hover{background:#fdf1ef}.picker-new{color:var(--red-dark);background:#fff;position:-webkit-sticky;position:sticky;top:0;border-bottom:2px solid var(--red)}.picker-empty{padding:18px;text-align:center;color:var(--muted);font-size:13.5px}.form{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:22px;max-width:560px}.form label{display:block;font-size:13px;font-weight:700;margin:14px 0 5px}.form label:first-child{margin-top:0}.form input[type=date],.form input[type=text],.form input[type=url],.form textarea{width:100%;padding:10px 13px;border:1px solid var(--border);border-radius:8px;font-size:15px;font-family:inherit;outline:none;background:#fff}.form input:focus,.form textarea:focus{border-color:var(--red)}.form textarea{min-height:90px;resize:vertical}.form .hint{font-size:12px;color:var(--muted);margin-top:4px}.link-row{display:flex;gap:6px;margin-bottom:6px}.link-row input{flex:1 1}.link-remove{border:1px solid var(--border);background:#fff;color:var(--muted);border-radius:8px;width:38px;cursor:pointer;font-size:14px}.link-remove:hover{color:var(--red);border-color:var(--red)}.link-add{background:none;border:none;color:var(--red);font-weight:700;font-size:13px;cursor:pointer;padding:2px 0}.link-add:hover{text-decoration:underline}.form .preview{margin-top:10px;max-height:180px;border-radius:8px;border:1px solid var(--border)}.form-submit{margin-top:20px;width:100%;padding:12px;font-size:15px}.error-box{background:#fdecea;color:#96281b}.error-box,.ok-box{padding:10px 14px;border-radius:8px;font-size:14px;margin-top:12px}.ok-box{background:#eafaf1;color:#1e8449}.week-block{margin-bottom:30px}.week-head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}.week-title{font-size:16px;font-weight:800;color:var(--dark)}.press-race{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:14px 16px;margin-bottom:10px}.press-race-head{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}.press-race-title{font-weight:800;font-size:15px}.press-race-date{font-size:12.5px;color:var(--muted);font-weight:600}.press-runner{display:flex;align-items:center;gap:8px;padding:5px 0;border-top:1px dashed var(--border)}.press-runner-name{font-size:13.5px;font-weight:600;min-width:150px}.press-result-input{flex:1 1;border:1px solid transparent;background:#f7f7f4;border-radius:6px;padding:6px 10px;font-size:13px;outline:none;min-width:160px}.press-result-input:focus{border-color:var(--red);background:#fff}.loading{padding:60px 0;font-size:15px}.footer-note,.loading{text-align:center;color:var(--muted)}.footer-note{font-size:12px;margin-top:40px}.back-link,.footer-note a{color:var(--muted)}.back-link{display:inline-block;font-size:13px;font-weight:700;text-decoration:none;margin-bottom:14px}.back-link:hover{color:var(--red)}.course-hero{display:flex;gap:22px;align-items:flex-start;flex-wrap:wrap;margin-bottom:10px}.course-poster{width:260px;height:300px;max-width:100%;background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:10px;position:relative}.course-poster img{object-fit:contain;padding:10px}.course-head{flex:1 1;min-width:240px;display:flex;flex-direction:column;gap:8px}.course-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}.course-actions .btn{text-decoration:none;display:inline-flex;align-items:center;flex:0 0 auto}.course-section{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:18px;margin-top:16px}.course-section h2{font-size:16px;font-weight:800;margin-bottom:12px}.course-desc{font-size:14px;color:var(--text);white-space:pre-line}.muted-line{font-size:13.5px;color:var(--muted)}.p-chip{text-decoration:none;color:var(--text)}.p-chip:hover{border-color:var(--red)}.ride-row{display:flex;align-items:center;gap:10px;padding:7px 0;border-top:1px dashed var(--border);font-size:14px}.ride-row:first-of-type{border-top:none}.ride-remove{margin-left:auto;border:1px solid var(--border);background:#fff;color:var(--muted);border-radius:6px;width:28px;height:28px;cursor:pointer}.ride-remove:hover{color:var(--red);border-color:var(--red)}.ride-form{margin-top:12px;display:flex;flex-direction:column;gap:8px}.ride-form-row{display:flex;gap:8px;align-items:center;flex-wrap:wrap;font-size:13.5px}.ride-form-row label{font-weight:700}.ride-form-row input[type=number]{width:58px;padding:8px;font-size:14px}.ride-form-row input[type=number],.ride-note{border:1px solid var(--border);border-radius:8px}.ride-note{width:100%;padding:9px 12px;font-size:13.5px;outline:none}.ride-note:focus{border-color:var(--red)}.comment{border-top:1px dashed var(--border);padding:10px 0}.comment:first-of-type{border-top:none}.comment-head{display:flex;align-items:center;gap:8px;font-size:13.5px;margin-bottom:4px}.comment-date{color:var(--muted);font-size:12px}.comment p{font-size:14px;white-space:pre-line}.comment-form{display:flex;gap:8px;margin-top:12px;align-items:flex-end}.comment-form textarea{flex:1 1;min-height:60px;padding:10px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;resize:vertical;outline:none}.comment-form textarea:focus{border-color:var(--red)}.gueu-head{display:flex;align-items:center;gap:16px;margin-bottom:8px}.avatar-big{width:56px;height:56px;font-size:20px}.gueu-race{display:flex;gap:12px;align-items:center;padding:8px 0;border-top:1px dashed var(--border);text-decoration:none;color:var(--text)}.gueu-race:first-of-type{border-top:none}.gueu-race:hover .gueu-race-title{color:var(--red)}.gueu-race-thumb{width:56px;height:56px;border:1px solid var(--border);border-radius:8px;background:#fafaf8;display:flex;align-items:center;justify-content:center;overflow:hidden;flex-shrink:0}.gueu-race-thumb img{max-width:100%;max-height:100%;object-fit:contain}.gueu-race-title{font-weight:700;font-size:14.5px}.gueu-race-date{font-size:12.5px;color:var(--muted)}.gueu-race-result{font-size:13px;color:#1e8449;font-weight:600}.stat-tiles{display:flex;gap:12px;flex-wrap:wrap}.stat-tile{flex:1 1;min-width:140px;background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:18px;text-align:center}.stat-num{font-size:34px;font-weight:900;color:var(--red-dark);line-height:1.1}.stat-label{font-size:12.5px;color:var(--muted);font-weight:600;margin-top:4px}.month-bars{display:flex;flex-direction:column;gap:7px}.month-bar-row{display:flex;align-items:center;gap:10px;font-size:13px}.month-bar-label{width:120px;font-weight:600;color:var(--muted);flex-shrink:0}.month-bar-track{flex:1 1;background:#f2f2ef;border-radius:999px;height:16px}.month-bar{background:var(--red);height:100%;border-radius:999px;min-width:6px}.month-bar-count{width:26px;font-weight:700;text-align:right}.rank-list{display:flex;flex-direction:column}.rank-row{display:flex;align-items:center;gap:12px;padding:8px 0;border-top:1px dashed var(--border);text-decoration:none;color:var(--text);font-size:14px}.rank-row:first-child{border-top:none}.rank-row:hover .rank-name{color:var(--red)}.rank-pos{width:24px;font-weight:900;color:var(--muted);text-align:right}.rank-name{font-weight:700}.rank-count{margin-left:auto;color:var(--muted);font-weight:600;font-size:13px}.year-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));grid-gap:14px;gap:14px}.mini-month{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:12px}.mini-month.empty{opacity:.55}.mini-month-title{font-size:13px;font-weight:800;text-transform:uppercase;letter-spacing:1px;color:var(--red-dark);margin-bottom:8px}.mini-month-grid{display:grid;grid-template-columns:repeat(7,1fr);grid-gap:2px;gap:2px;text-align:center}.mini-dow{font-size:10px;font-weight:700;color:var(--muted);padding-bottom:2px}.mini-day{font-size:11.5px;padding:4px 0;border-radius:6px;color:var(--muted);border:none;background:none;font-family:inherit}.mini-day.today{outline:2px solid var(--dark);outline-offset:-2px;font-weight:800;color:var(--text)}.mini-day.has-race{background:var(--red);color:#fff;font-weight:800;cursor:pointer}.mini-day.has-race:hover{background:var(--red-dark)}.mini-day.has-race.selected{background:var(--dark)}.day-panel{background:#fff;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:16px}.day-panel-date{background:var(--red);color:#fff;font-weight:800;font-size:12.5px;text-transform:uppercase;letter-spacing:1.5px}.day-panel .day-panel-race,.day-panel-date{padding:8px 16px}.day-panel-race{display:flex;align-items:center;gap:10px;padding:6px 0;border-top:1px dashed var(--border);text-decoration:none;color:var(--text)}.day-panel-race:first-of-type{border-top:none}.day-panel-title{font-weight:700;font-size:14px}.day-panel-race:hover .day-panel-title{color:var(--red)}.member-map{height:72vh;min-height:420px;border-radius:var(--radius);border:1px solid var(--border);z-index:0}.page-sub a{color:var(--red);font-weight:600}.map-legend{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:12px;font-size:13px;font-weight:600}.legend-item{display:inline-flex;align-items:center;gap:6px}.legend-dot{width:12px;height:12px;border-radius:50%;border:1.5px solid #fff;box-shadow:0 0 0 1px rgba(0,0,0,.15)}.leaflet-popup-content{font-family:inherit;font-size:13px;margin:12px 14px}.pop-name{font-weight:800;font-size:15px}.pop-cat{font-size:11px;font-weight:800;text-transform:uppercase;letter-spacing:.8px;margin-bottom:4px}.pop-ville{color:var(--muted);font-weight:600}.pop-tel{margin-top:4px;font-weight:600}.pop-tel a{color:var(--red);text-decoration:none}.pop-tel a:hover{text-decoration:underline}.pop-note{margin-top:6px;color:var(--muted);font-style:italic}.carte-head{justify-content:space-between;gap:12px;margin-bottom:14px}.carte-head,.carte-tools{display:flex;align-items:center;flex-wrap:wrap}.carte-tools{gap:8px;margin-bottom:12px}.toolbar .add-race-btn.no-push{margin-left:0}.chip-btn.dark{background:var(--dark);color:#fff;border-color:var(--dark)}.chip-btn.dark:hover{filter:brightness(1.25)}.gueu-search{flex:1 1;min-width:220px}.gueu-search .search{width:100%;padding:8px 16px}.list-scroll{max-height:320px;overflow-y:auto}.cat-cluster{width:34px;height:34px;border-radius:50%;color:#fff;font-weight:800;font-size:13px;display:flex;align-items:center;justify-content:center;border:2px solid #fff;box-shadow:0 1px 4px rgba(0,0,0,.35)}.cat-cluster-wrap,.leduc-marker{background:none;border:none}.leduc-marker{font-size:24px;line-height:28px;text-align:center;filter:drop-shadow(0 1px 2px rgba(0,0,0,.5))}.nearby-panel{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:12px 16px;margin-bottom:12px}.nearby-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px;font-size:14px}.nearby-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-gap:4px 16px;gap:4px 16px}.nearby-row{display:flex;align-items:center;gap:8px;padding:5px 0;border:none;background:none;font-family:inherit;font-size:13.5px;cursor:pointer;text-align:left}.nearby-row:hover .nearby-name{color:var(--red)}.nearby-name{font-weight:700}.nearby-city{color:var(--muted);font-size:12.5px}.nearby-km{margin-left:auto;font-weight:800;color:var(--red-dark);font-size:12.5px}.member-form{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:16px;margin-bottom:14px}.member-form label{display:block;font-size:12.5px;font-weight:700;margin-bottom:4px}.member-form input,.member-form select{width:100%;padding:9px 12px;border:1px solid var(--border);border-radius:8px;font-size:14px;font-family:inherit;background:#fff;outline:none}.member-form input:focus{border-color:var(--red)}.member-form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));grid-gap:12px;gap:12px}.member-form-actions{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap;margin-top:12px}.member-form-actions .city-field{flex:1 1;min-width:190px}.city-alt-btn{align-self:flex-end;padding-top:9px;padding-bottom:9px}.city-field{position:relative}.city-suggestions{position:absolute;top:100%;left:0;right:0;background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:0 6px 20px rgba(0,0,0,.12);z-index:1000;overflow:hidden}.city-suggestions button{display:block;width:100%;text-align:left;padding:8px 12px;border:none;background:none;font-size:13.5px;font-family:inherit;cursor:pointer;border-bottom:1px solid var(--border)}.city-suggestions button:last-child{border-bottom:none}.city-suggestions button:hover{background:#fdf1ef}.audit-row{background:#fff;border:1px solid var(--border);border-radius:var(--radius);padding:12px 16px;margin-bottom:10px}.audit-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-size:13.5px}.audit-action{font-weight:800}.audit-title{font-weight:700;color:var(--red-dark);text-decoration:none}.audit-title:hover{text-decoration:underline}.audit-meta{color:var(--muted);font-size:12.5px}.audit-diff{margin:8px 0 0 22px;font-size:13px;color:var(--muted)}@media (max-width:560px){.race-grid{grid-template-columns:1fr 1fr}.race-poster{height:120px}.logo{font-size:21px}}