/* CTF-ORION forms, tables, account, studio and admin panel. Uses the tokens from style.css. */

/* flash messages */
.flashes{display:grid;gap:10px;margin-bottom:20px}
.flash{display:flex;gap:12px;align-items:flex-start;padding:12px 16px;border:1px solid var(--line);border-left:4px solid var(--accent-text);background:var(--surface);border-radius:var(--r);font-weight:500}
.flash .lucide{color:var(--accent-text);margin-top:2px}

/* forms */
.field{display:grid;gap:6px;min-width:0}
.field > label,.lab{font-weight:600;font-size:.95rem}
.field small,.hint{color:var(--muted);font-size:.88rem;font-weight:400}
.input,.field input:not([type=checkbox]):not([type=radio]):not([type=file]),.field select,.field textarea{font:400 1rem var(--display);padding:.75em .9em;border:1.5px solid var(--line);border-radius:var(--r);background:var(--bg);color:var(--ink);width:100%;min-width:0}
.field textarea{min-height:120px;resize:vertical;line-height:1.5}
.field textarea.tall{min-height:340px;font-family:var(--mono);font-size:.94rem}
.field input:focus,.field select:focus,.field textarea:focus,.input:focus{outline:none;border-color:var(--accent-text)}
.field input[type=file]{font:400 .95rem var(--display);padding:.5em;border:1.5px dashed var(--line);border-radius:var(--r);background:var(--surface)}
.check{display:flex;gap:10px;align-items:center;font-weight:500}
.fgrid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.fgrid .full{grid-column:1 / -1}
.fgrid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}
.formcard{display:grid;gap:18px;padding:clamp(20px,2.4vw,32px)}
.formcard h2,.formcard h3{font-size:1.25rem}
.actions{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.btn-sm{padding:.55em .9em;font-size:.92rem}
.btn-danger{background:transparent;color:var(--warn);border-color:var(--warn)}
@media (hover:hover) and (pointer:fine){.btn-danger:hover{background:var(--warn);color:#fff}}
.err{color:var(--warn);font-weight:600}

/* sign in / sign up */
.authwrap{min-height:100vh;display:grid;place-items:center;padding-block:clamp(32px,6vw,80px)}
.authcard{width:min(460px,100%);display:grid;gap:18px;padding:clamp(24px,3vw,36px);border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);box-shadow:var(--shadow)}
.authcard h1{font-size:clamp(1.7rem,3vw,2.2rem)}
.authcard .alt{color:var(--muted);text-align:center}
.authcard .alt a{color:var(--accent-text);font-weight:600}
.authtabs{display:flex;gap:4px;padding:4px;border:1px solid var(--line);border-radius:12px;background:var(--bg)}
.authtabs a{flex:1;text-align:center;padding:9px;border-radius:9px;text-decoration:none;font-weight:600;color:var(--muted)}
.authtabs a[aria-current=page]{background:var(--accent);color:var(--on-accent)}

/* prose (lessons, stories) */
.prose{max-width:76ch;font-size:1.04rem;line-height:1.7}
.prose > * + *{margin-top:1em}
.prose h2,.prose h3,.prose h4{margin-top:1.6em;letter-spacing:-.02em;line-height:1.2}
.prose h2{font-size:1.6rem}.prose h3{font-size:1.3rem}.prose h4{font-size:1.1rem}
.prose ul{padding-left:1.3em}
.prose li + li{margin-top:.35em}
.prose code{font-family:var(--mono);font-size:.9em;background:var(--surface-2);padding:.1em .4em;border-radius:5px}
.prose pre{background:var(--slab);color:var(--on-slab);padding:16px 18px;border-radius:var(--r);overflow-x:auto;line-height:1.5}
.prose pre code{background:none;padding:0;color:inherit}

/* tables */
.tscroll{overflow-x:auto}
.tbl{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;min-width:640px}
.tbl th{font-weight:500;font-size:.85rem;color:var(--muted);text-align:left;padding:12px 14px;border-bottom:1px solid var(--line);background:var(--surface-2);white-space:nowrap}
.tbl td{padding:12px 14px;border-bottom:1px solid var(--line);vertical-align:middle}
.tbl tbody tr:last-child td{border-bottom:0}
.tbl td.n,.tbl th.n{text-align:right}
.tbl .sub{display:block;color:var(--muted);font-size:.86rem}
.tbl a{text-decoration:none;font-weight:600}
.tbl a:hover{color:var(--accent-text)}
.tbl form{display:inline}
.box{border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface);overflow:hidden}
.pill{display:inline-flex;align-items:center;gap:6px;font:600 12px/1 var(--display);padding:5px 9px;border-radius:6px;background:var(--surface-2);color:var(--muted);white-space:nowrap}
.pill.s2,.pill.ok{background:var(--accent);color:var(--on-accent)}
.pill.s1,.pill.warn{background:color-mix(in srgb,var(--warn) 16%,transparent);color:var(--warn)}
.pill.s3,.pill.bad{background:var(--warn);color:#fff}
.pager{display:flex;gap:12px;align-items:center;justify-content:flex-end;padding:12px 14px;color:var(--muted);font-size:.92rem}
.toolbar2{display:flex;flex-wrap:wrap;gap:12px;align-items:center;justify-content:space-between;margin-bottom:18px}
.toolbar2 form{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.toolbar2 .input{width:min(260px,100%)}
.empty2{padding:34px;text-align:center;color:var(--muted)}

/* account / stats */
.stats{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:clamp(12px,1.6vw,20px)}
.stat{display:grid;gap:4px;padding:18px 20px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.stat b{font-size:clamp(1.7rem,3vw,2.4rem);letter-spacing:-.04em;line-height:1.05;font-variant-numeric:tabular-nums}
.stat span{color:var(--muted);font-size:.92rem}
.cols2{display:grid;grid-template-columns:minmax(0,1.3fr) minmax(0,1fr);gap:clamp(16px,2vw,28px);align-items:start}
.stack{display:grid;gap:clamp(16px,2vw,24px)}
.kv{display:grid;grid-template-columns:auto 1fr;gap:8px 18px;margin:0}
.kv dt{color:var(--muted)}
.kv dd{margin:0;font-weight:600;word-break:break-word}
.joincode{font:600 1.5rem var(--mono);letter-spacing:.12em;padding:10px 14px;border:1px dashed var(--line);border-radius:var(--r);display:inline-block}
.members{list-style:none;display:grid}
.members li{display:flex;gap:12px;align-items:center;justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--line)}
.members li:last-child{border-bottom:0}

/* challenge list / detail */
.chgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(14px,1.8vw,24px)}
.ch{display:grid;gap:12px;align-content:start;text-decoration:none;position:relative}
.ch h3{font-size:1.2rem}
.ch .top{display:flex;justify-content:space-between;align-items:center;gap:10px}
.ch .meta2{display:flex;flex-wrap:wrap;gap:6px 14px;color:var(--muted);font-size:.9rem;border-top:1px solid var(--line);padding-top:12px}
.ch .meta2 span{display:inline-flex;align-items:center;gap:6px}
.ch .meta2 .lucide{width:15px;height:15px}
.ch.solved{border-color:var(--accent-text)}
@media (hover:hover) and (pointer:fine){a.ch:hover{border-color:var(--ink)}}
.catfilter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:20px}
.catfilter a{padding:8px 14px;border:1px solid var(--line);border-radius:999px;text-decoration:none;font-weight:500;background:var(--surface)}
.catfilter a[aria-current=true]{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.dl{display:grid;gap:10px}
.dl a{display:flex;align-items:center;gap:12px;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r);text-decoration:none;font:500 .95rem var(--mono)}
.dl a span:last-child{margin-left:auto;color:var(--muted);font-size:.85rem}

/* admin */
.adm{display:grid;grid-template-columns:240px minmax(0,1fr);min-height:100vh;background:var(--bg)}
.adm-side{position:sticky;top:0;align-self:start;height:100vh;overflow-y:auto;display:flex;flex-direction:column;gap:6px;padding:18px 14px;border-right:1px solid var(--line);background:var(--surface)}
.adm-side .brand{padding:4px 8px 14px;font-size:1.1rem}
.adm-side .grp{font:500 11.5px var(--mono);letter-spacing:.09em;text-transform:uppercase;color:var(--muted);padding:14px 10px 4px}
.adm-side a.ni,.adm-side button.ni{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:9px;text-decoration:none;font-weight:500;font-size:.97rem;border:0;background:none;width:100%;text-align:left;cursor:pointer;color:var(--ink)}
.adm-side .ni .lucide{width:18px;height:18px;color:var(--muted)}
.adm-side .ni[aria-current=page]{background:var(--accent);color:var(--on-accent)}
.adm-side .ni[aria-current=page] .lucide{color:var(--on-accent)}
.adm-side .ni .cnt{margin-left:auto;font:600 11.5px var(--display);background:var(--warn);color:#fff;border-radius:999px;padding:2px 7px}
@media (hover:hover) and (pointer:fine){.adm-side .ni:hover{background:var(--surface-2)}.adm-side .ni[aria-current=page]:hover{background:var(--accent)}}
.adm-side .sp{flex:1}
.adm-main{padding:clamp(18px,2.2vw,28px) clamp(18px,2.6vw,36px) clamp(24px,3vw,40px);min-width:0;display:grid;gap:22px;align-content:start}
.adm-main > h1{font-size:clamp(1.6rem,2.6vw,2.2rem)}
.adm-top{display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center}
.mini-title{font-size:1.1rem;padding:16px 18px 0}
@media (max-width:1000px){
  .adm{grid-template-columns:minmax(0,1fr)}
  .adm-side{position:static;height:auto;flex-direction:row;flex-wrap:wrap;gap:4px;border-right:0;border-bottom:1px solid var(--line);padding:10px}
  .adm-side .grp{display:none}.adm-side .sp{display:none}.adm-side .brand{width:100%}
  .adm-side a.ni,.adm-side button.ni{width:auto}
}
@media (max-width:980px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.cols2{grid-template-columns:minmax(0,1fr)}.chgrid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.fgrid,.fgrid3,.chgrid{grid-template-columns:minmax(0,1fr)}.stats{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* site banner, faq, info pages */
.sitebanner{background:var(--accent);color:var(--on-accent);font-weight:600;font-size:.95rem}
.sitebanner .wrap{display:flex;gap:10px;align-items:center;padding-block:10px}
.faq{display:grid;gap:10px}
.faq details{border:1px solid var(--line);border-radius:var(--r);background:var(--surface);padding:0 18px}
.faq summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:16px;align-items:center;padding:16px 0;font-weight:600;font-size:1.04rem}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:'+';font:500 1.4rem var(--mono);color:var(--accent-text)}
.faq details[open] summary::after{content:'-'}
.faq .ans{padding:0 0 18px;color:var(--muted);max-width:90ch;line-height:1.65}
.faq .ans p + p{margin-top:.7em}
.legal{display:grid;grid-template-columns:minmax(220px,300px) minmax(0,1fr);gap:clamp(24px,4vw,64px);align-items:start}
.legal nav{position:sticky;top:calc(var(--hdr-h,72px) + 20px);display:grid;gap:4px;padding:16px;border:1px solid var(--line);border-radius:var(--r-lg);background:var(--surface)}
.legal nav a{padding:7px 10px;border-radius:8px;text-decoration:none;font-weight:500;color:var(--muted)}
.legal nav a:hover{background:var(--surface-2);color:var(--ink)}
.legal section{padding-bottom:clamp(20px,3vw,36px)}
.legal h2{font-size:1.5rem;margin-bottom:12px;scroll-margin-top:96px}
.legal p,.legal li{color:var(--muted);line-height:1.7;max-width:90ch}
.legal p + p{margin-top:.8em}
.legal ul{padding-left:1.2em;display:grid;gap:6px;margin-top:8px}
.legal table{width:100%;border-collapse:collapse;margin-top:12px;font-size:.96rem}
.legal th,.legal td{text-align:left;padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:top}
.legal th{font-weight:600;color:var(--ink);background:var(--surface-2)}
.legal td{color:var(--muted)}
.statline{display:flex;gap:14px;align-items:center;padding:16px 18px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface)}
.statline .dotl{width:12px;height:12px;border-radius:50%;background:var(--accent-text);flex:none}
.statline .dotl.bad{background:var(--warn)}
.statline small{display:block;color:var(--muted)}
.statline b{display:block}
.timeline{display:grid;gap:0}
.tl{display:grid;grid-template-columns:150px minmax(0,1fr);gap:24px;padding:22px 0;border-bottom:1px solid var(--line)}
.tl time{color:var(--muted);font:500 .9rem var(--mono)}
.tl h3{font-size:1.2rem;margin-bottom:6px}
.chart{display:flex;align-items:flex-end;gap:5px;height:120px;padding:6px 0}
.chart i{flex:1;background:var(--accent-text);border-radius:4px 4px 0 0;min-height:2px;opacity:.85;position:relative}
.chart i:hover{opacity:1}
.chartlab{display:flex;justify-content:space-between;color:var(--muted);font:500 .78rem var(--mono)}
.tabs2{display:flex;flex-wrap:wrap;gap:6px;border-bottom:1px solid var(--line);padding-bottom:10px}
.tabs2 a{padding:8px 14px;border-radius:9px;text-decoration:none;font-weight:600;color:var(--muted)}
.tabs2 a[aria-current=true]{background:var(--accent);color:var(--on-accent)}
.notice-tile{display:flex;gap:12px;align-items:center;padding:14px 16px;border:1px solid var(--line);border-radius:var(--r);background:var(--surface);text-decoration:none}
.notice-tile b{font-size:1.5rem;letter-spacing:-.03em}
.notice-tile.hot{border-color:var(--warn)}
.msgbody{white-space:pre-wrap;word-break:break-word;padding:12px 14px;border:1px solid var(--line);border-radius:var(--r);background:var(--bg);line-height:1.55}
@media (max-width:980px){.legal{grid-template-columns:minmax(0,1fr)}.legal nav{position:static}.tl{grid-template-columns:minmax(0,1fr);gap:6px}}

/* admin top bar: breadcrumb left, theme + sign out right */
.adm-side .side-brand{padding:4px 8px 14px;font-size:1.1rem}
.adm-col{min-width:0;display:flex;flex-direction:column}
.adm-bar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:12px;height:60px;padding:0 clamp(18px,2.6vw,36px);border-bottom:1px solid var(--line);background:color-mix(in srgb,var(--bg) 92%,transparent);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px)}
.adm-crumb{display:flex;align-items:center;gap:8px;min-width:0;font-size:.95rem;color:var(--muted);white-space:nowrap;overflow:hidden}
.adm-crumb .lucide{width:15px;height:15px}
.adm-crumb b{color:var(--ink);font-weight:600;overflow:hidden;text-overflow:ellipsis}
.adm-tools{display:flex;align-items:center;gap:10px}
.adm-tools form{margin:0}
.adm-bar .so{display:inline-flex;align-items:center;gap:8px;height:40px;padding:0 14px;border:1px solid var(--line);border-radius:999px;background:var(--surface);color:var(--ink);font:500 .92rem var(--display);white-space:nowrap;cursor:pointer;transition:border-color .2s ease,color .2s ease}
.adm-bar .so .lucide{width:16px;height:16px;color:var(--muted)}
@media (hover:hover) and (pointer:fine){.adm-bar .so:hover{border-color:var(--warn);color:var(--warn)}.adm-bar .so:hover .lucide{color:var(--warn)}}

/* page title rows and filter toolbars: one line, equal-height controls */
.adm-top,.toolbar2{display:flex;flex-wrap:wrap;align-items:center;gap:12px 24px;margin:0}
.adm-top > h1,.toolbar2 > h1{font-size:clamp(1.6rem,2.6vw,2.2rem);margin-right:auto;line-height:1.1}
.toolbar2 > form,form.toolbar2 .actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:10px;flex:1 1 560px}
form.toolbar2{justify-content:flex-end}
.toolbar2 .input{height:44px;padding-block:0;width:auto;flex:0 0 auto}
.toolbar2 input.input{flex:1 1 200px;max-width:320px;min-width:160px}
.toolbar2 .btn{height:44px;padding-block:0;font-size:.95rem}
.toolbar2 .btn.px,.adm-top .btn.btn-sm.px{clip-path:none;border-radius:var(--r)}
.toolbar2 .btn-ink{background:var(--surface-2);color:var(--ink);border-color:var(--line)}
@media (hover:hover) and (pointer:fine){.toolbar2 .btn-ink:hover{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}}
@media (max-width:760px){.toolbar2 > form,form.toolbar2 .actions{justify-content:flex-start}.toolbar2 input.input{max-width:none}}

/* empty table / list state */
.empty2{padding:44px 20px;text-align:center;color:var(--muted);font-weight:500}
.empty2::before{content:"";display:block;width:44px;height:44px;margin:0 auto 12px;border-radius:12px;background:var(--surface-2) no-repeat center/22px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23889070' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 12h-6l-2 3h-4l-2-3H2'/%3E%3Cpath d='M5.45 5.11 2 12v6a2 2 0 0 0 2 2h16a2 2 0 0 0 2-2v-6l-3.45-6.89A2 2 0 0 0 16.76 4H7.24a2 2 0 0 0-1.79 1.11z'/%3E%3C/svg%3E")}
td.empty2{display:table-cell}
@media (max-width:1000px){.adm-bar{padding:0 12px}.adm-crumb span,.adm-crumb .lucide{display:none}}

/* custom dropdown (built by app.js from select.dd-src) */
.dd{position:relative;display:inline-block;min-width:0}
.field .dd,.dd.dd-block{display:block}
.dd>select{position:absolute;inset:0;width:100%;height:100%;opacity:0;pointer-events:none}
.dd-btn{display:flex;align-items:center;justify-content:space-between;gap:10px;width:100%;min-height:44px;padding:.6em 14px .6em 1em;border:1.5px solid var(--line);border-radius:var(--r);background:var(--surface-2,var(--bg));color:var(--ink);font:500 .95rem var(--display);text-align:left;cursor:pointer;transition:border-color .15s,background .15s}
.dd-btn:hover{border-color:var(--accent-text)}
.dd.open .dd-btn,.dd-btn:focus-visible{outline:none;border-color:var(--accent-text)}
.dd-btn>span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.dd-btn>i{flex:none;width:16px;height:16px;opacity:.7;transition:transform .2s;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/16px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.6' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") center/16px no-repeat}
.dd.open .dd-btn>i{transform:rotate(180deg)}
.dd-menu{position:absolute;z-index:60;left:0;top:calc(100% + 6px);min-width:100%;max-height:280px;overflow:auto;margin:0;padding:6px;list-style:none;border:1.5px solid var(--line);border-radius:var(--r);background:var(--surface,var(--bg));box-shadow:0 14px 36px rgba(0,0,0,.35);opacity:0;visibility:hidden;transform:translateY(-4px);transition:opacity .15s,transform .15s,visibility .15s}
.dd.up .dd-menu{top:auto;bottom:calc(100% + 6px);transform:translateY(4px)}
.dd.open .dd-menu{opacity:1;visibility:visible;transform:none}
.dd-menu li{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:.55em .8em;border-radius:calc(var(--r) - 4px);font:500 .92rem var(--display);color:var(--ink);white-space:nowrap;cursor:pointer}
.dd-menu li:hover,.dd-menu li.hl{background:var(--surface-2,rgba(128,128,128,.14))}
.dd-menu li.sel{color:var(--accent-text);font-weight:600}
.dd-menu li.sel::after{content:"";width:14px;height:14px;background:currentColor;-webkit-mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/14px no-repeat;mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E") center/14px no-repeat}
.toolbar2 .dd{min-width:140px}

.authtop{display:flex;align-items:center;justify-content:space-between;gap:12px}
.authtop .btn{padding:.6em 1em}
.authtabs.acct{flex:none}
.authtabs.acct a{display:inline-flex;align-items:center;gap:6px;padding:7px 12px;font-size:.92rem}
.authtabs.acct .lucide{width:16px;height:16px}
body.bare{padding-bottom:0!important}
