*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,Roboto,Helvetica,Arial,sans-serif;font-size:14px;color:#1f2937;background:#f3f4f6}a{color:#2563eb;text-decoration:none}a:hover{text-decoration:underline}.app-shell{display:flex;min-height:100vh}.sidebar{width:220px;background:#1e293b;color:#e2e8f0;padding:16px 0;flex-shrink:0}.sidebar .brand{font-size:16px;font-weight:600;padding:0 20px 16px;border-bottom:1px solid #334155}.sidebar .brand small{display:block;font-size:11px;color:#94a3b8;margin-top:2px;font-weight:400}.sidebar nav a{display:block;padding:10px 20px;color:#cbd5e1;font-size:14px;border-left:3px solid transparent}.sidebar nav a:hover{background:#334155;text-decoration:none}.sidebar nav a.active{background:#334155;color:#fff;border-left-color:#38bdf8}.sidebar .section{padding:12px 20px 4px;font-size:11px;color:#64748b;text-transform:uppercase;letter-spacing:.5px}.main{flex:1;display:flex;flex-direction:column}.topbar{height:56px;background:#fff;border-bottom:1px solid #e5e7eb;display:flex;align-items:center;justify-content:space-between;padding:0 24px}.topbar .title{font-size:15px;font-weight:600;color:#374151}.topbar .user{font-size:13px;color:#6b7280}.topbar .user button{margin-left:12px;background:transparent;border:1px solid #d1d5db;color:#374151;padding:4px 10px;border-radius:4px;cursor:pointer}.topbar .user button:hover{background:#f3f4f6}.content{flex:1;padding:24px;overflow-y:auto}.card{background:#fff;border-radius:6px;border:1px solid #e5e7eb;padding:20px;margin-bottom:16px}.card h3{margin:0 0 14px;font-size:15px}.card .card-actions{margin-top:14px;padding-top:14px;border-top:1px solid #f3f4f6;display:flex;justify-content:flex-end;gap:8px}.form-row{display:flex;flex-wrap:wrap;gap:12px}.form-row>.form-group{flex:1;min-width:200px}.form-group{margin-bottom:12px}.form-group label{display:block;font-size:13px;font-weight:500;color:#374151;margin-bottom:4px}.form-group input,.form-group select,.form-group textarea{width:100%;padding:8px 10px;border:1px solid #d1d5db;border-radius:4px;font-size:14px;background:#fff}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:#2563eb;box-shadow:0 0 0 2px #2563eb26}.form-help{font-size:12px;color:#6b7280;margin-top:4px}.form-group input[type=checkbox],.form-group input[type=radio]{width:auto;padding:0;margin:0;flex:none;outline:none;box-shadow:none}.group-chip-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:6px}.group-chip{display:flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid #d1d5db;border-radius:4px;cursor:pointer;font-size:13px;background:#fff;transition:all .12s}.group-chip:hover{border-color:#93c5fd}.group-chip.selected{background:#dbeafe;border-color:#93c5fd}.group-chip input[type=checkbox]{width:auto;padding:0;margin:0;flex:none}.group-chip span{flex:1}.btn{padding:7px 14px;border-radius:4px;border:1px solid transparent;font-size:13px;font-weight:500;cursor:pointer;background:#fff;color:#374151;border-color:#d1d5db;transition:all .15s}.btn:hover{background:#f3f4f6}.btn:disabled{opacity:.6;cursor:not-allowed}.btn-primary{background:#2563eb;color:#fff;border-color:#2563eb}.btn-primary:hover{background:#1d4ed8}.btn-success{background:#16a34a;color:#fff;border-color:#16a34a}.btn-success:hover{background:#15803d}.btn-danger{background:#fff;color:#dc2626;border-color:#fca5a5}.btn-danger:hover{background:#fef2f2}.btn-sm{padding:4px 8px;font-size:12px}.table-wrap{overflow-x:auto}table.data{width:100%;border-collapse:collapse;background:#fff}table.data th,table.data td{padding:10px 12px;text-align:left;border-bottom:1px solid #e5e7eb;font-size:13px}table.data th{background:#f9fafb;font-weight:600;color:#374151}table.data tr:hover td{background:#f9fafb}.badge{display:inline-block;padding:2px 8px;font-size:11px;border-radius:10px;background:#e5e7eb;color:#374151}.badge-green{background:#d1fae5;color:#065f46}.badge-yellow{background:#fef3c7;color:#92400e}.badge-red{background:#fee2e2;color:#991b1b}.badge-blue{background:#dbeafe;color:#1e40af}.badge-gray{background:#e5e7eb;color:#4b5563}.badge-orange{background:#ffedd5;color:#9a3412}.badge-purple{background:#7c3aed;color:#fff}table.data tr.row-error td{background:#fef2f2}table.data tr.row-error:hover td{background:#fee2e2}table.relay-table{white-space:nowrap}table.relay-table th,table.relay-table td{padding:8px 10px}table.relay-table thead th{text-align:center}table.relay-table thead tr:first-child th{border-bottom:1px solid #e5e7eb}table.relay-table th.relay-leg-head{text-align:center;font-weight:600;color:#374151;border-left:1px solid #d1d5db;padding:7px 10px}table.relay-table th.relay-sub-head{font-weight:400;font-size:12px;color:#6b7280;border-left:1px solid #e5e7eb}table.data td.team-group-band{background:#fcfcfd;font-weight:700;font-size:13px;color:#374151;padding:8px 10px}table.relay-table td.relay-name,table.relay-table td.relay-num{border-left:1px solid #f3f4f6}table.relay-table th.relay-lead,table.relay-table td.relay-lead{vertical-align:middle;background:#fcfcfd}table.relay-table th.relay-lead{text-align:left;font-weight:600;color:#374151}table.relay-table td.relay-num{font-variant-numeric:tabular-nums;color:#4b5563}table.relay-table td.relay-name{color:#111827}.relay-sub{display:block;font-size:11px;color:#9ca3af;margin-top:1px;font-variant-numeric:tabular-nums}.alert{padding:10px 14px;border-radius:4px;margin-bottom:14px;font-size:13px}.alert-error{background:#fef2f2;color:#991b1b;border:1px solid #fecaca}.alert-success{background:#f0fdf4;color:#166534;border:1px solid #bbf7d0}.alert-info{background:#eff6ff;color:#1e40af;border:1px solid #bfdbfe}.alert-warning{background:#fffbeb;color:#92400e;border:1px solid #fde68a}.text-muted{color:#6b7280}.text-right{text-align:right}.text-center{text-align:center}.mt-2{margin-top:8px}.mt-3{margin-top:12px}.mb-2{margin-bottom:8px}.mb-3{margin-bottom:12px}.flex{display:flex;gap:12px;align-items:center}.flex-1{flex:1}.flex-between{display:flex;justify-content:space-between;align-items:center;gap:12px}.gap-2{gap:8px}.empty-state{text-align:center;padding:40px 20px;color:#9ca3af;font-size:13px}.auth-page{display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(135deg,#1e3a8a,#1e293b)}.auth-card{background:#fff;padding:32px;border-radius:8px;width:360px;box-shadow:0 10px 40px #0003}.auth-card h2{margin:0 0 8px;font-size:20px;text-align:center}.auth-card .subtitle{text-align:center;color:#6b7280;font-size:13px;margin-bottom:20px}.auth-card .switch{text-align:center;margin-top:16px;font-size:13px;color:#6b7280}.event-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}.event-card{background:#fff;border:1px solid #e5e7eb;border-radius:6px;padding:16px;transition:all .15s;cursor:pointer}.event-card:hover{border-color:#2563eb;box-shadow:0 4px 12px #2563eb14}.event-card .name{font-weight:600;margin-bottom:6px}.event-card .meta{font-size:12px;color:#6b7280;margin-bottom:10px}.event-card .footer{display:flex;justify-content:space-between;align-items:center}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:100}.modal{background:#fff;border-radius:6px;width:520px;max-width:calc(100% - 32px);max-height:calc(100% - 64px);overflow-y:auto;box-shadow:0 12px 32px #00000040}.modal-header{padding:14px 20px;border-bottom:1px solid #e5e7eb;display:flex;justify-content:space-between;align-items:center}.modal-header h3{margin:0;font-size:16px}.modal-header button{background:transparent;border:none;font-size:20px;cursor:pointer;color:#6b7280}.modal-footer{padding:12px 20px;border-top:1px solid #e5e7eb;display:flex;justify-content:flex-end;gap:8px}.baton-pills{display:flex;flex-wrap:wrap;gap:6px}.baton-pill{padding:4px 10px;border:1px solid #d1d5db;border-radius:14px;font-size:12px;cursor:pointer;background:#fff}.baton-pill.active{background:#2563eb;color:#fff;border-color:#2563eb}@media print{@page{size:A4 portrait;margin:10mm 12mm}body{background:#fff!important}.app-shell{display:block!important;min-height:auto!important}.sidebar,.topbar,.no-print{display:none!important}.main{display:block!important}.content{padding:0!important;overflow:visible!important}.card{box-shadow:none!important;margin:0 auto!important;max-width:100%!important}.certificate-print{page-break-inside:avoid;-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}.certificate-print h2{-webkit-print-color-adjust:exact!important;print-color-adjust:exact!important}}.bell-link{position:relative;display:inline-flex;align-items:center;margin-right:12px;padding:4px 8px;border-radius:4px;color:#475569;text-decoration:none}.bell-link:hover{background:#f1f5f9;text-decoration:none}.bell-icon{font-size:18px}.bell-badge{position:absolute;top:-4px;right:-4px;background:#dc2626;color:#fff;border-radius:10px;padding:2px 6px;font-size:11px;font-weight:600;min-width:18px;text-align:center;line-height:14px}.notification-list{display:flex;flex-direction:column;gap:8px}.notification-item{padding:12px 16px;background:#fff;border:1px solid #e2e8f0;border-radius:6px;cursor:pointer;transition:all .15s ease}.notification-item:hover{background:#f8fafc;border-color:#cbd5e1}.notification-item.unread{background:#eff6ff;border-left:3px solid #2563eb}.notification-item .meta{font-size:12px;color:#94a3b8;margin-top:4px}.notification-item .title{font-weight:600;color:#1e293b;margin-bottom:4px}.notification-item .content{color:#475569;font-size:13px;line-height:1.5}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal{background:#fff;border-radius:8px;max-width:720px;width:90%;max-height:85vh;overflow-y:auto;box-shadow:0 20px 25px -5px #0000001a}.modal-header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #e2e8f0}.modal-close{background:transparent;border:none;font-size:24px;cursor:pointer;color:#94a3b8;padding:0;line-height:1}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;z-index:100;padding:16px}.ok-box{background:#ecfdf5;color:#065f46;border:1px solid #a7f3d0;border-radius:6px;padding:10px 12px;font-size:14px;margin:8px 0}.p-app{max-width:480px;margin:0 auto;min-height:100vh;background:#f1f5f9;display:flex;flex-direction:column}.p-topbar{background:#1e293b;color:#fff;padding:12px 16px;display:flex;align-items:center;justify-content:space-between}.p-title{font-size:16px;font-weight:600}.p-user{display:flex;align-items:center;gap:10px;font-size:13px}.p-link{background:none;border:none;color:#2563eb;cursor:pointer;padding:0;font-size:13px}.p-content{flex:1;padding:16px}.p-bottomnav{display:flex;border-top:1px solid #e2e8f0;background:#fff}.p-bottomnav a{flex:1;text-align:center;padding:12px;text-decoration:none;color:#475569;font-size:14px}.p-bottomnav a.active{color:#2563eb;font-weight:600;border-top:2px solid #2563eb}.p-event-card{display:block;background:#fff;border-radius:8px;padding:12px 14px;margin-bottom:12px;text-decoration:none;color:inherit;box-shadow:0 1px 3px #00000014}.p-event-name{font-size:15px;font-weight:600;margin-bottom:4px}.p-event-meta{font-size:12px;color:#64748b;margin:2px 0}.p-member{border:1px solid #e2e8f0;border-radius:8px;padding:12px;margin-bottom:12px;background:#f8fafc}.p-races{display:flex;flex-wrap:wrap;gap:8px}.p-race-chip{display:inline-flex;align-items:center;gap:4px;background:#fff;border:1px solid #cbd5e1;border-radius:16px;padding:4px 10px;font-size:13px}.p-race-row{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 0;border-bottom:1px solid #f1f5f9;font-size:14px}.p-seg{display:flex;gap:8px}.p-seg button{flex:1;padding:8px;border:1px solid #cbd5e1;background:#fff;border-radius:6px;cursor:pointer;font-size:14px}.p-seg button.active{background:#2563eb;color:#fff;border-color:#2563eb}.modal-body{padding:20px}@media (max-width: 720px){.content{padding:12px!important}.card{padding:14px!important;border-radius:10px;margin-bottom:12px}h2{font-size:17px!important}h3{font-size:15px!important}.modal{width:calc(100vw - 16px)!important;max-width:calc(100vw - 16px)!important;border-radius:10px}.modal-header{padding:12px 14px}.modal-body{padding:14px;max-height:calc(100vh - 190px);overflow-y:auto}.modal-footer{padding:10px 14px;flex-wrap:wrap}.modal-footer .btn{flex:1;min-width:120px}.btn{padding:9px 14px;font-size:14px}.btn-sm{padding:6px 10px;font-size:13px}.form-row{gap:8px}.form-row>.form-group{min-width:100%!important;flex:1 1 100%}input,select,textarea{font-size:16px!important}.form-group input,.form-group select,.form-group textarea{padding:9px 10px}table.data th,table.data td{padding:7px 8px;font-size:12px;white-space:nowrap}table.relay-table th,table.relay-table td,table.relay-table th.relay-leg-head{padding:6px 7px}.relay-sub{font-size:11px;margin-top:0}.empty-state{padding:24px 12px}}.dots{display:inline-block;animation:checkin-dots 1.6s ease-in-out infinite}@keyframes checkin-dots{0%,to{opacity:.25}50%{opacity:1}}.spin-ring{width:84px;height:84px;border-radius:50%;border:8px solid rgba(251,191,36,.18);border-top-color:#fbbf24;animation:checkin-spin .9s linear infinite}@keyframes checkin-spin{to{transform:rotate(360deg)}}@media (prefers-reduced-motion: reduce){.spin-ring{animation-duration:3s}.dots{animation-duration:4s}}.fs-dock{position:fixed;right:16px;bottom:12px;z-index:50;display:flex;align-items:center;gap:10px;max-width:calc(100vw - 32px)}.fs-btn{-webkit-appearance:none;-moz-appearance:none;appearance:none;cursor:pointer;flex:0 0 auto;display:inline-flex;align-items:center;gap:6px;padding:7px 15px;border-radius:999px;border:1px solid rgba(148,163,184,.45);background:#0f172ac7;color:#cbd5e1;font-size:14px;font-family:inherit;letter-spacing:1px;opacity:.72;transition:opacity .18s ease,background .18s ease,color .18s ease,border-color .18s ease;-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.fs-btn:hover,.fs-btn:focus-visible{opacity:1;color:#f8fafc;background:#1e293bf5;border-color:#94a3b8cc}.fs-ico{display:block;flex:0 0 auto}.fs-dock.is-fs .fs-btn{opacity:.2}.fs-dock.is-fs .fs-btn:hover,.fs-dock.is-fs .fs-btn:focus-visible{opacity:1}.fs-hint{flex:0 1 auto;font-size:13px;line-height:1.35;letter-spacing:.5px;color:#fbbf24;background:#0f172ab8;padding:5px 10px;border-radius:8px}.fs-dock.is-fs .fs-hint{opacity:.45}.fs-dock.is-fs:hover .fs-hint{opacity:1}.icp-link{text-decoration:none;border-bottom:1px dotted currentColor;transition:opacity .15s ease,border-bottom-color .15s ease}.icp-link:hover,.icp-link:focus-visible{opacity:.78;border-bottom-style:solid}
