:root{--bg:#f8f3eb;--paper:#fffdf9;--ink:#0f315d;--ink2:#1c446f;--muted:#718198;--red:#c9253d;--red2:#a91831;--gold:#d69a2b;--green:#188b5d;--line:#e9dac8;--shadow:0 18px 55px rgba(60,37,21,.08)}*{box-sizing:border-box}[hidden]{display:none!important}html{scroll-behavior:smooth}body{margin:0;background:linear-gradient(180deg,#fffaf4,#f8f3eb);color:var(--ink);font:15px/1.55 Inter,system-ui,-apple-system,"Segoe UI",sans-serif;overflow-x:hidden}button,input,textarea,select{font:inherit}button{cursor:pointer}a{text-decoration:none;color:inherit}.shell{width:min(1240px,calc(100% - 32px));margin:auto}.page-pattern{position:fixed;inset:0;pointer-events:none;z-index:-2;background:radial-gradient(circle at 4% 12%,rgba(244,173,188,.45) 0 5px,transparent 6px),radial-gradient(circle at 92% 20%,rgba(244,173,188,.32) 0 7px,transparent 8px),repeating-radial-gradient(ellipse at 0 100%,rgba(30,66,109,.04) 0 2px,transparent 2px 16px)}.topbar{position:sticky;top:0;z-index:50;background:rgba(255,253,249,.94);backdrop-filter:blur(16px);border-bottom:1px solid var(--line)}.bar{min-height:72px;display:flex;align-items:center;gap:26px}.brand{display:flex;align-items:center;gap:12px;min-width:220px}.brand img{width:50px;height:50px;object-fit:contain;border-radius:50%}.brand span{display:grid;line-height:1}.brand b{letter-spacing:.2em;font-size:18px}.brand small{font-size:9px;letter-spacing:.24em;margin-top:6px;color:var(--muted)}nav{display:flex;gap:24px;margin:auto}nav a{color:#49627e;font-weight:650}.top-actions{display:flex;gap:8px;align-items:center}.account{font-weight:800;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.primary,.secondary,.ghost{border:1px solid var(--line);border-radius:14px;min-height:42px;padding:0 15px;display:inline-flex;align-items:center;justify-content:center;font-weight:750}.primary{background:linear-gradient(#db3c53,#bb2037);border-color:#bb2037;color:#fff;box-shadow:0 10px 24px rgba(190,31,52,.15)}.secondary{background:#fff;border-color:#efc2c9;color:var(--red)}.ghost{background:#fffaf3;color:var(--ink)}.full{width:100%}.hero{display:grid;grid-template-columns:1.15fr .85fr;gap:48px;align-items:center;padding:68px 0 42px}.eyebrow{font-size:11px;font-weight:900;letter-spacing:.25em;color:var(--red)}h1{font-size:clamp(50px,6.5vw,82px);line-height:.94;letter-spacing:-.055em;margin:14px 0 20px}h1 em{font-style:normal;color:var(--red)}.hero-copy>p{max-width:690px;font-size:18px;color:var(--muted)}.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:24px}.hero-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin-top:30px;max-width:650px}.hero-stats div{background:rgba(255,253,249,.86);border:1px solid var(--line);border-radius:16px;padding:15px}.hero-stats b{display:block;font-size:28px}.hero-stats span{font-size:12px;color:var(--muted)}.hero-art{min-height:380px;position:relative;border:1px solid var(--line);border-radius:30px;background:radial-gradient(circle at 70% 25%,#ffe2e8,transparent 35%),linear-gradient(135deg,#143b70,#0e2f59);box-shadow:var(--shadow);overflow:hidden}.tile{position:absolute;width:112px;height:150px;border-radius:16px;background:#fffaf2;display:grid;place-items:center;font:800 54px/1 serif;box-shadow:0 16px 40px rgba(0,0,0,.18);border:1px solid #dfd4c6}.t1{left:50px;bottom:44px;color:#123d75;transform:rotate(-7deg)}.t2{left:160px;bottom:70px;color:#cf2b40;transform:rotate(3deg)}.t3{left:270px;bottom:43px;color:#14804c;transform:rotate(8deg)}.hero-badge{position:absolute;right:34px;top:38px;text-align:right;color:#fff}.hero-badge span{font:700 36px serif;opacity:.92}.hero-badge b{display:block;font-size:24px;letter-spacing:.17em;margin-top:8px}.hero-badge small{display:block;letter-spacing:.18em;opacity:.68}.info-strip{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-bottom:28px}.info-strip article{background:var(--paper);border:1px solid var(--line);border-radius:18px;padding:18px;display:flex;gap:14px;box-shadow:var(--shadow)}.info-strip article>span{width:42px;height:42px;border-radius:12px;background:#fff0e3;color:var(--red);display:grid;place-items:center;font-weight:900}.info-strip b,.info-strip small{display:block}.info-strip small{color:var(--muted);margin-top:3px}.section{padding:42px 0 70px}.section-alt{background:rgba(255,253,249,.68);border-top:1px solid var(--line);border-bottom:1px solid var(--line)}.section-head{display:flex;align-items:end;justify-content:space-between;gap:18px;margin-bottom:20px}.section-head h2{font-size:46px;line-height:1;margin:7px 0}.section-head p{color:var(--muted);margin:8px 0 0}.event-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:18px}.event-card{background:var(--paper);border:1px solid var(--line);border-radius:24px;overflow:hidden;box-shadow:var(--shadow);display:flex;flex-direction:column}.event-media{height:220px;position:relative;overflow:hidden;background:linear-gradient(135deg,#f1e4d7,#fbe8e9)}.event-media img{width:100%;height:100%;object-fit:cover}.event-badges{position:absolute;left:14px;top:14px;display:flex;gap:7px}.badge{background:rgba(255,253,249,.94);padding:6px 10px;border-radius:999px;font-size:10px;font-weight:900;letter-spacing:.08em}.badge.mode{color:var(--red)}.event-body{padding:20px;display:flex;flex-direction:column;flex:1}.event-body h3{font-size:28px;line-height:1.12;margin:6px 0 10px}.event-meta{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:10px}.pill{border:1px solid var(--line);border-radius:999px;background:#fff8f1;padding:6px 9px;font-size:11px}.event-body p{color:var(--muted);margin:4px 0 12px}.staff{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:8px 0 14px}.staff-box{background:#fbf4ec;border:1px solid #efe2d5;border-radius:14px;padding:10px}.staff-box b{display:block;font-size:11px;color:var(--red);margin-bottom:3px}.staff-box span{font-size:12px;color:#586d88}.event-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:auto}.mini{min-height:36px;padding:0 12px;border-radius:999px;font-size:12px}.count{font-weight:800}.admin-row{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}.history-grid{display:grid;gap:16px}.history-card{background:var(--paper);border:1px solid var(--line);border-radius:22px;padding:20px;box-shadow:var(--shadow)}.history-top{display:flex;justify-content:space-between;gap:18px;align-items:start}.history-card h3{font-size:24px;margin:4px 0 7px}.podium{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:14px}.result-card{border:1px solid #eadfce;border-radius:14px;background:#fff8f1;padding:12px}.result-card b{display:block}.result-rank{font-size:11px;color:var(--red);font-weight:900}.empty{border:1px dashed #d8c9bb;border-radius:20px;padding:30px;text-align:center;color:var(--muted);background:rgba(255,253,249,.65)}.footer{padding:28px 0 50px;color:var(--muted);font-size:12px}.toast{position:fixed;left:50%;bottom:28px;z-index:200;transform:translate(-50%,18px);opacity:0;background:#10325d;color:#fff;border-radius:12px;padding:11px 16px;transition:.2s}.toast.show{opacity:1;transform:translate(-50%,0)}.modal{border:0;padding:0;background:transparent;width:min(620px,calc(100% - 24px));max-width:none}.modal::backdrop{background:rgba(11,38,72,.44);backdrop-filter:blur(4px)}.modal-card{position:relative;background:#fffdf9;border:1px solid var(--line);border-radius:22px;padding:24px;display:grid;gap:13px;box-shadow:0 34px 90px rgba(15,44,80,.22)}.modal-card.wide{width:min(820px,calc(100vw - 28px));margin-left:50%;transform:translateX(-50%)}.modal-card.xwide{width:min(1100px,calc(100vw - 28px));margin-left:50%;transform:translateX(-50%)}.modal-card h3{font-size:26px;margin:0}.modal-card label{display:grid;gap:5px;color:#596d87;font-size:13px}.modal-card input,.modal-card textarea,.modal-card select{width:100%;border:1px solid var(--line);border-radius:11px;padding:10px 11px;background:#fff;color:var(--ink)}.close{position:absolute;right:14px;top:10px;border:0;background:transparent;font-size:28px;color:#8190a4}.two{display:grid;grid-template-columns:1fr 1fr;gap:10px}.four{display:grid;grid-template-columns:.55fr 1.3fr .8fr 1.2fr;gap:9px}.check{display:flex!important;align-items:center;gap:8px}.check input{width:auto}.auth-tabs{display:flex;gap:8px}.tab{border:1px solid var(--line);background:#fff8f1;border-radius:10px;padding:9px 12px}.tab.active{background:var(--ink);color:#fff}.link-btn{border:0;background:transparent;text-decoration:underline;color:var(--muted)}.form-note{font-size:12px;color:var(--muted);margin:0}.dialog-head{display:flex;justify-content:space-between;align-items:center;gap:16px}.table-wrap{overflow:auto;max-height:65vh}.reg-table{width:100%;border-collapse:collapse;font-size:12px}.reg-table th,.reg-table td{padding:9px;border-bottom:1px solid var(--line);text-align:left;white-space:nowrap}.reg-table th{position:sticky;top:0;background:#fffaf4;z-index:1}.file-preview img{max-width:220px;max-height:150px;border-radius:12px;object-fit:cover;border:1px solid var(--line)}.result-form{padding:14px;background:#fbf4ec;border:1px solid #eadfce;border-radius:16px;display:grid;gap:10px}.result-list{display:grid;gap:8px}.result-row{display:grid;grid-template-columns:60px 1.5fr .8fr 1fr 42px;gap:8px;align-items:center;border-bottom:1px solid var(--line);padding:8px 0}.skeleton-card{height:420px;border-radius:24px;background:linear-gradient(90deg,#eee5d8,#fbf5ec,#eee5d8);background-size:200% 100%;animation:shimmer 1.2s infinite}@keyframes shimmer{to{background-position:-200% 0}}@media(max-width:900px){nav{display:none}.bar{flex-wrap:wrap;padding:8px 0}.top-actions{margin-left:auto}.hero{grid-template-columns:1fr}.hero-art{min-height:300px}.event-grid,.info-strip{grid-template-columns:1fr}.staff{grid-template-columns:1fr}.podium{grid-template-columns:1fr}.two,.four{grid-template-columns:1fr}.modal-card.wide,.modal-card.xwide{width:auto;margin-left:0;transform:none}.history-top{flex-direction:column}.hero-stats{grid-template-columns:1fr 1fr 1fr}}@media(max-width:600px){.shell{width:min(100% - 20px,1240px)}.brand span{display:none}.hero{padding-top:42px}.hero-stats{grid-template-columns:1fr}.tile{width:80px;height:110px;font-size:40px}.t1{left:25px}.t2{left:105px}.t3{left:185px}.hero-badge{right:20px}.event-media{height:180px}.event-body h3{font-size:23px}}

/* ===== v2.1 modal layout fix ===== */
/* Dialog itself owns the width. Cards never translate outside the dialog. */
.modal{
  width:min(640px,calc(100vw - 32px));
  max-width:calc(100vw - 32px);
  max-height:calc(100dvh - 28px);
  margin:auto;
  padding:0;
  overflow:hidden;
}
#eventDialog,#resultsDialog{
  width:min(860px,calc(100vw - 32px));
  max-width:calc(100vw - 32px);
}
#registrantsDialog{
  width:min(1140px,calc(100vw - 32px));
  max-width:calc(100vw - 32px);
}
.modal-card,
.modal-card.wide,
.modal-card.xwide{
  width:100%;
  max-width:100%;
  margin:0;
  transform:none;
  max-height:calc(100dvh - 28px);
  overflow-y:auto;
  overflow-x:hidden;
  overscroll-behavior:contain;
  scrollbar-gutter:stable;
}
.modal-card *{min-width:0}
.modal-card input,
.modal-card textarea,
.modal-card select{
  width:100%;
  max-width:100%;
  min-width:0;
}
.modal-card textarea{resize:vertical}
.modal-card .two,
.modal-card .four{
  width:100%;
  min-width:0;
}
/* Keep close button visible while the form scrolls. */
.modal-card>.close{
  position:sticky;
  top:0;
  z-index:30;
  justify-self:end;
  margin-bottom:-44px;
  width:40px;
  height:40px;
  display:grid;
  place-items:center;
  border:1px solid var(--line);
  border-radius:10px;
  background:rgba(255,253,249,.96);
  backdrop-filter:blur(8px);
  box-shadow:0 8px 20px rgba(15,44,80,.08);
}
#eventDialog .modal-card{padding:22px 24px 26px}
#eventDialog .modal-card h3{padding-right:48px}
#registrantsDialog .table-wrap{
  max-width:100%;
  overflow:auto;
  max-height:calc(100dvh - 180px);
}
@media(max-width:760px){
  .modal,#eventDialog,#resultsDialog,#registrantsDialog{
    width:calc(100vw - 16px);
    max-width:calc(100vw - 16px);
    max-height:calc(100dvh - 16px);
  }
  .modal-card,.modal-card.wide,.modal-card.xwide{
    max-height:calc(100dvh - 16px);
    border-radius:16px;
    padding:18px;
  }
  #eventDialog .modal-card{padding:18px}
  .modal-card .two,.modal-card .four{grid-template-columns:1fr}
  .dialog-head{align-items:flex-start;flex-direction:column}
  #exportExcelBtn{width:100%}
}
