.camp-roster-page{margin:0;background:radial-gradient(ellipse at 90% 0,#fff0bb 0,transparent 44%),#fffaf0;color:#332918;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;-webkit-font-smoothing:antialiased}
.camp-roster,.camp-roster *,.camp-roster-entry,.camp-roster-entry *{box-sizing:border-box}
.camp-roster [hidden],.camp-roster-entry[hidden]{display:none!important}
.camp-roster a,.camp-roster-entry a{color:inherit;text-decoration:none}
/* The admin shell deliberately excludes its global anchor reset on this page so
   the roster styles can own the content surface. Reapply the reset only to this
   Camp page; other admin pages keep their existing cascade unchanged. */
body[data-admin-page="camp-roster"] .ac-shell a,
body[data-admin-page="camp-roster"] .ac-shell a:visited{color:inherit;text-decoration:none}
.camp-roster{max-width:1200px;margin:0 auto;padding:0 20px 40px}
.camp-roster h1,.camp-roster h2,.camp-roster p{margin-top:0}
.camp-roster h1{font-size:28px;line-height:1.4;margin-bottom:12px}
.camp-roster h2{font-size:19px;line-height:1.5;margin:0}
.camp-roster-header{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:18px 0;color:#816840;font-size:13px}
.camp-roster-header a{display:inline-flex;align-items:center;min-height:44px;font-size:14px}
.camp-roster-header span{font-weight:650}
.camp-roster-hero{padding:24px;border:1px solid #f4d880;border-radius:22px;background:linear-gradient(125deg,#ffe9a0,#fff5d5 70%,#fff9e8);box-shadow:0 10px 28px #bc8e2810}
.camp-roster-hero p{color:#81663a;font-size:13px;line-height:1.8;margin-bottom:8px}
.camp-roster-hero p:last-child{margin-bottom:0}
.camp-roster-eyebrow{display:block;color:#967025;font-size:12px;font-weight:650;margin-bottom:10px}
.camp-roster-notice{padding:13px 16px;border:1px solid #eee2c3;border-radius:14px;background:#f5ecd9;color:#7a613c;font-size:13px;line-height:1.7;margin:16px 0;overflow-wrap:anywhere}
.camp-roster-notice[data-error="true"]{background:#fff0eb;border-color:#f1d6c8;color:#a04a2d}
.camp-roster-login{display:inline-block;padding:8px 0;margin:0 0 10px;color:#946b1b!important;font-size:14px;text-decoration:underline!important}
.camp-roster-filters{display:grid;grid-template-columns:repeat(auto-fit,minmax(165px,1fr));align-items:end;gap:14px;padding:20px;border:1px solid #eee3c9;background:#fffefb;border-radius:18px;margin-bottom:16px}
.camp-roster-filters label{display:flex;flex-direction:column;gap:7px;font-size:12px;color:#8b744c;min-width:0}
.camp-roster-filters select,.camp-roster-filters input{width:100%;min-height:44px;padding:9px 11px;border:1px solid #e6d7b7;border-radius:10px;background:#fffaf0;font:inherit;font-size:14px;color:#58472b}
.camp-roster-filter-actions{display:flex;gap:8px;flex-wrap:wrap}
.camp-roster button{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:9px 15px;border:1px solid #e2b854;border-radius:11px;background:linear-gradient(120deg,#f9d369,#efc34b);font:inherit;font-size:13px;color:#4d3712;cursor:pointer;font-weight:600;white-space:nowrap}
.camp-roster button:disabled{opacity:.55;cursor:default}
.camp-roster button.camp-roster-secondary{background:#fffaf0;border-color:#e4d0a0;color:#866426}
.camp-roster button:focus-visible,.camp-roster input:focus-visible,.camp-roster select:focus-visible,.camp-roster-entry a:focus-visible{outline:3px solid #c39534;outline-offset:3px}
.camp-roster-list-card{padding:20px;border:1px solid #eee3c9;border-radius:18px;background:#fffefb;box-shadow:0 5px 20px #6d512007}
.camp-roster-list-heading{display:flex;gap:14px;align-items:center;justify-content:space-between;margin-bottom:12px}
.camp-roster-export-note{font-size:12px;line-height:1.8;color:#98815a;margin-bottom:16px}
.camp-roster-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border:1px solid #efe6d4;border-radius:12px}
.camp-roster-table{width:100%;min-width:950px;border-collapse:collapse;font-size:13px;text-align:left}
.camp-roster-table th{padding:13px 12px;background:#fff5d8;color:#8c6c2d;font-size:12px;font-weight:650;white-space:nowrap}
.camp-roster-table td{padding:13px 12px;color:#594b35;border-top:1px solid #f1ebdd;line-height:1.7;vertical-align:top;overflow-wrap:anywhere;max-width:210px}
.camp-roster-table td:nth-child(2),.camp-roster-table td:nth-child(4){font-family:ui-monospace,SFMono-Regular,Consolas,monospace;white-space:nowrap;font-weight:600}
.camp-roster-invitation{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:140px}
.camp-roster-invitation span{font-size:12px;color:#8b744c}
.camp-roster-invitation[data-invited="true"] span{color:#618148}
.camp-roster-invitation button{min-height:36px;padding:6px 10px;font-size:12px}
.camp-roster-empty{text-align:center;color:#9b8868;font-size:13px;padding:24px 8px;margin:0}
.camp-roster-pagination{display:flex;align-items:center;justify-content:space-between;gap:12px;padding-top:16px;color:#9b8868;font-size:12px;flex-wrap:wrap}
.camp-roster-pagination div{display:flex;gap:8px}
.camp-roster-entry{margin:16px 0;border:1px solid #efd596;border-radius:16px;background:linear-gradient(110deg,#fff5d6,#fffdf4);overflow:hidden}
.camp-roster-entry a{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:17px 20px}
.camp-roster-entry strong,.camp-roster-entry small{display:block}
.camp-roster-entry strong{font-size:15px;line-height:1.5;color:#493718}
.camp-roster-entry small{margin-top:4px;font-size:12px;color:#947c4e;line-height:1.6}
.camp-roster-entry a>span:last-child{font-size:27px;color:#9f731e}
@media(max-width:480px){.camp-roster{padding-left:14px;padding-right:14px}.camp-roster-hero{padding:22px 18px}.camp-roster h1{font-size:25px}.camp-roster-filters{padding:16px;grid-template-columns:1fr 1fr}.camp-roster-search-label,.camp-roster-filter-actions{grid-column:1/-1}.camp-roster-list-card{padding:16px}.camp-roster-list-heading h2{font-size:17px}}
