.login-wrap { --login-ink:#edf7fa; --login-soft:#b5cbd4; --login-light:#d5edf0; --login-deep:#0b2532; --login-focus:#8ed6e6; position:relative; display:grid; place-items:center; width:100%; min-height:100vh; min-height:100dvh; margin:0; padding:28px 20px; overflow:hidden; color-scheme:dark; background:#06141e url("/static/background-poster.jpg") center/cover no-repeat; }
.login-bg { position:absolute; inset:0; z-index:0; width:100%; height:100%; object-fit:cover; pointer-events:none; background:url("/static/background-poster.jpg") center/cover no-repeat; }
.login-scrim { position:absolute; inset:0; z-index:1; background:radial-gradient(ellipse 340px 290px at 50% 50%,rgba(3,16,26,.55),transparent 100%),radial-gradient(ellipse at 50% 45%,rgba(6,20,30,.04) 15%,rgba(3,12,20,.55) 100%); }
.login-card { position:relative; z-index:2; width:min(380px,100%); padding:24px 16px; text-align:center; color:var(--login-ink); background:none; border:0; border-radius:0; box-shadow:none; text-shadow:0 2px 12px rgba(0,8,16,.65); }
.login-card .logo { display:block; width:64px; height:64px; margin:0 auto 20px; border-radius:16px; box-shadow:0 6px 24px rgba(0,12,23,.22); }
.login-card h1 { margin:0 0 8px; color:var(--login-ink); font-size:32px; font-weight:650; letter-spacing:.14em; text-indent:.14em; }
.login-card #site-slogan { margin:0 0 36px; color:var(--login-soft); font-size:14px; letter-spacing:.015em; }
.login-card .primary { display:flex; align-items:center; justify-content:center; gap:12px; width:100%; max-width:300px; min-height:52px; margin:0 auto; padding:13px 24px; color:var(--login-ink); font:inherit; font-weight:600; text-shadow:none; text-decoration:none; background:rgba(12,37,51,.5); border:1px solid rgba(192,230,238,.55); border-radius:999px; backdrop-filter:blur(8px); -webkit-backdrop-filter:blur(8px); cursor:pointer; transition:background-color var(--dur-base) var(--ease),border-color var(--dur-base) var(--ease); }
.login-card .primary:hover { color:var(--login-ink); text-decoration:none; background:rgba(34,72,87,.72); border-color:rgba(219,248,253,.85); }
.login-card .primary:focus-visible { outline:2px solid var(--login-focus); outline-offset:4px; }
.login-card .primary:disabled { cursor:wait; opacity:.65; }
.login-card .primary[aria-disabled="true"] { cursor:not-allowed; opacity:.55; }
.field { margin:0 0 14px; text-align:left; }
.field label { display:block; margin-bottom:7px; color:var(--login-ink); font-size:var(--fs-sm); font-weight:600; }
.field input { width:100%; min-height:46px; padding:10px 12px; color:var(--login-ink); font:inherit; background:rgba(3,19,29,.55); border:1px solid rgba(172,224,235,.28); border-radius:12px; }
.field input:focus-visible { outline:2px solid var(--login-focus); outline-offset:2px; }
.notice { min-height:0; margin:0; color:#ffb7ad; white-space:pre-line; }
.notice:not(:empty) { margin:0 0 16px; }
.login-note,.dev-hint { color:var(--login-soft); font-size:var(--fs-sm); line-height:1.75; }
.login-note { max-width:290px; margin:22px auto 0; text-wrap:pretty; }
.dev-hint { margin:8px 0 14px; }
.user-name { margin:0 0 6px; color:var(--text); font-weight:700; }
.user-email { margin:0 0 18px; color:var(--text-soft); font-size:var(--fs-sm); overflow-wrap:anywhere; }
.login-wrap.session-expired { --bg:#0f1217; --bg-elev:#171b22; --border:#262d38; --border-strong:#333c49; --text:#e7eaf0; --text-soft:#b3bccb; --accent:#6c9bff; --accent-ink:#b9ceff; --brand-cyan:#4fc3e8; --warn:#e0b15a; --danger:#f0796f; --button-ink:#0f1217; color-scheme:dark; color:var(--text); background:radial-gradient(ellipse 520px 390px at 50% 43%,rgba(48,119,150,.13),transparent 78%),radial-gradient(ellipse at 88% 84%,rgba(108,155,255,.05),transparent 42%),var(--bg); }
.session-expired .login-scrim { background:linear-gradient(180deg,rgba(15,18,23,.05),rgba(15,18,23,.12)); }
.login-card.session-expired-card { width:min(560px,100%); padding:38px 48px 42px; text-align:left; color:var(--text); background:linear-gradient(145deg,rgba(27,36,47,.88),rgba(20,25,33,.94) 70%); border:1px solid rgba(126,159,185,.22); border-radius:20px; box-shadow:0 28px 90px rgba(0,0,0,.28),0 0 70px rgba(55,144,180,.055); text-shadow:none; }
.session-expired-header { display:flex; align-items:center; gap:24px; min-width:0; padding-bottom:26px; border-bottom:1px solid rgba(126,159,185,.22); }
.session-brand-mark { display:block; flex:none; width:96px; height:96px; object-fit:contain; mix-blend-mode:screen; -webkit-mask-image:radial-gradient(circle,#000 58%,transparent 78%); mask-image:radial-gradient(circle,#000 58%,transparent 78%); }
.session-expired-meta { min-width:0; }
.session-expired-copy { min-width:0; padding-top:30px; }
.login-card.session-expired-card .session-expired-brand { margin:0; color:var(--brand-cyan); font-size:var(--fs-sm); font-weight:650; letter-spacing:.1em; text-shadow:none; }
.login-card.session-expired-card h1 { margin:0; color:var(--text); font-family:var(--font); font-size:var(--fs-xl); font-weight:650; line-height:1.3; letter-spacing:-.025em; text-indent:0; text-shadow:none; word-break:keep-all; }
.login-card.session-expired-card #site-slogan { max-width:none; margin:12px 0 0; color:var(--text-soft); font-family:var(--font); font-size:var(--fs-base); line-height:1.7; letter-spacing:0; text-shadow:none; }
.session-expired-state { display:flex; align-items:flex-start; gap:9px; margin:10px 0 0; color:var(--warn); font-family:var(--font); font-size:var(--fs-xs); font-weight:600; line-height:1.6; }
.session-expired-state::before { content:""; flex:none; width:7px; height:7px; margin-top:5px; border-radius:50%; background:var(--warn); }
.session-expired-actions { display:flex; align-items:center; flex-wrap:wrap; gap:8px; margin-top:30px; }
.login-card.session-expired-card .notice { color:var(--danger); font-family:var(--font); font-size:var(--fs-sm); line-height:1.6; text-shadow:none; }
.login-card.session-expired-card .primary { width:auto; min-width:176px; max-width:none; min-height:48px; margin-left:0; margin-right:0; color:var(--button-ink); font-family:var(--font); font-size:var(--fs-sm); font-weight:600; line-height:22px; letter-spacing:0; background:var(--accent); border-color:var(--accent); backdrop-filter:none; -webkit-backdrop-filter:none; }
.login-card.session-expired-card .primary:hover { color:var(--button-ink); background:var(--accent-ink); border-color:var(--accent-ink); }
.login-card.session-expired-card .field input { color:var(--text); background:var(--bg-elev); border-color:var(--border-strong); }
.login-card.session-expired-card .session-expired-actions form { width:100%; }
.login-card.session-expired-card .session-expired-actions form .primary { margin-top:14px; }
@media (max-width:520px) { .login-wrap { padding:24px 20px; } .login-card { padding:24px 8px; } .login-card .logo { width:58px; height:58px; margin-bottom:18px; } .login-card h1 { font-size:30px; } .login-card #site-slogan { margin-bottom:32px; } }
@media (max-width:600px) { .login-card.session-expired-card { padding:28px 26px 32px; } .session-expired-header { gap:18px; padding-bottom:22px; } .session-brand-mark { width:76px; height:76px; } .session-expired-copy { padding-top:26px; } .login-card.session-expired-card h1 { font-size:26px; } .session-expired-actions { margin-top:26px; } }
@media (max-width:380px) { .login-card.session-expired-card { padding:24px 20px 28px; } .session-expired-header { gap:14px; } .session-brand-mark { width:68px; height:68px; } .login-card.session-expired-card h1 { font-size:calc(var(--fs-xl) - 2px); } }
@media (prefers-reduced-motion:reduce) { .login-card .primary { transition:none; } }

.intro { position:fixed; inset:0; z-index:200; display:grid; place-items:center; background:#0b131b; transition:opacity .6s var(--ease); }
.intro.hide { opacity:0; pointer-events:none; }
.intro video { display:block; width:100%; height:100%; object-fit:contain; }
.intro video.fill { object-fit:cover; }
.intro-ctl { position:absolute; right:20px; bottom:20px; }
.intro-ctl button { min-height:44px; padding:10px 16px; color:var(--on-fill); font:inherit; background:rgba(255,255,255,.12); border:1px solid rgba(255,255,255,.28); border-radius:var(--radius-sm); backdrop-filter:blur(6px); cursor:pointer; }
.intro-ctl button:hover { background:rgba(255,255,255,.22); }
.intro-ctl button:focus-visible { outline:2px solid var(--accent); outline-offset:3px; }
@media (max-width:600px) { .intro-ctl { right:12px; bottom:12px; } }

/* ── 2026-10-17 테크 글래스 정렬: 로그인·로그인 필요·접근 제한·오프닝 건너뛰기 ──────────
   로그인 화면에는 data-skin이 없어서 brand-tech.css 값을 여기서 같은 값으로 쓴다(항상 어두운 화면). */
.login-wrap,.intro { --lg-accent:#5b8cff; --lg-accent-strong:#3563d9; --lg-accent-2:#38d6ff; --lg-warn:#ffc35a; --lg-danger:#ff5d73;
  --lg-text:#eaf0f8; --lg-soft:#a9b4c6; --lg-mute:#7f8a9e; --lg-glass:rgba(10,14,21,.66); --lg-glass-strong:rgba(10,14,21,.8);
  --lg-line:rgba(255,255,255,.08); --lg-line-strong:rgba(255,255,255,.16);
  --lg-edge:linear-gradient(140deg,rgba(255,255,255,.16),rgba(255,255,255,.05) 40%,rgba(255,255,255,.04) 65%,rgba(91,140,255,.22));
  --lg-r:12px; --lg-r-sm:8px; --lg-ease:cubic-bezier(.16,1,.3,1); --lg-mono:"Cascadia Mono",Consolas,"Malgun Gothic",sans-serif; }

/* 로그인 창: 장면 위 투명한 구성은 유지하고 로고·버튼·초점만 기준에 맞춘다. */
.login-card .logo { border-radius:25%; box-shadow:0 0 0 1px var(--lg-line),0 10px 30px rgba(0,8,16,.45); }
.login-card h1 { font-weight:600; }
.login-card .primary { min-height:48px; border:1px solid transparent; border-radius:var(--lg-r-sm);
  background:linear-gradient(var(--lg-glass),var(--lg-glass)) padding-box,var(--lg-edge) border-box;
  box-shadow:0 1px 0 rgba(255,255,255,.07) inset,0 10px 30px rgba(0,0,0,.35);
  transition:transform 140ms var(--lg-ease),box-shadow 220ms var(--lg-ease); }
.login-card .primary:hover { background:linear-gradient(rgba(16,24,38,.78),rgba(16,24,38,.78)) padding-box,var(--lg-edge) border-box;
  box-shadow:0 1px 0 rgba(255,255,255,.07) inset,0 0 0 3px rgba(91,140,255,.18),0 10px 30px rgba(0,0,0,.35); }
.login-card .primary:active:not(:disabled):not([aria-disabled="true"]) { transform:scale(.97); }
.login-card .primary:focus-visible,.field input:focus-visible { outline:2px solid var(--lg-accent-2); outline-offset:3px; }
.field input { border-radius:var(--lg-r-sm); border-color:var(--lg-line-strong); background:var(--lg-glass); }
.notice { color:var(--lg-danger); }

/* 로그인 필요·접근 제한 창: 로그인과 같은 장면 위에 유리 판 하나. */
.login-wrap.session-expired { --bg:#04060a; --bg-elev:#0b0f16; --text:var(--lg-text); --text-soft:var(--lg-soft); --accent:var(--lg-accent); --accent-ink:#a3c0ff; --brand-cyan:var(--lg-accent-2); --warn:var(--lg-warn); --danger:var(--lg-danger); --button-ink:#fff;
  background:#04060a url("/static/status-bg.svg") center/cover no-repeat; }
.session-expired .login-scrim { background:radial-gradient(ellipse 620px 420px at 50% 48%,rgba(4,6,10,.45),rgba(4,6,10,0) 100%); }
.login-card.session-expired-card { width:min(520px,100%); padding:32px 36px 36px; border:1px solid transparent; border-radius:var(--lg-r);
  background:linear-gradient(var(--lg-glass-strong),var(--lg-glass-strong)) padding-box,var(--lg-edge) border-box;
  -webkit-backdrop-filter:blur(20px) saturate(150%); backdrop-filter:blur(20px) saturate(150%);
  box-shadow:0 1px 0 rgba(255,255,255,.07) inset,0 24px 64px rgba(0,0,0,.6);
  animation:lg-card-in 640ms var(--lg-ease) both; }
@supports not ((backdrop-filter:blur(1px)) or (-webkit-backdrop-filter:blur(1px))) { .login-card.session-expired-card { background:#0b0f16; border-color:var(--lg-line-strong); } }
.session-expired-header { gap:16px; padding-bottom:22px; border-bottom:1px solid var(--lg-line); }
.session-brand-mark { width:52px; height:52px; border-radius:25%; mix-blend-mode:normal; -webkit-mask-image:none; mask-image:none; object-fit:cover; box-shadow:0 0 0 1px var(--lg-line); }
.login-card.session-expired-card .session-expired-brand { font-family:var(--lg-mono); font-size:12px; font-weight:600; letter-spacing:.14em; color:var(--lg-accent-2); }
.session-expired-state { display:inline-flex; align-items:center; gap:7px; margin:6px 0 0; padding:2px 9px 2px 8px; border-radius:var(--lg-r-sm); background:rgba(255,195,90,.1); line-height:1.6; }
.session-expired-state::before { margin-top:0; width:6px; height:6px; }
.session-expired-copy { padding-top:24px; }
.login-card.session-expired-card h1 { font-size:26px; font-weight:600; letter-spacing:-.03em; }
.login-card.session-expired-card #site-slogan { margin-top:8px; font-size:var(--fs-sm); }
.session-expired-actions { margin-top:24px; }
.login-card.session-expired-card .primary { min-width:0; min-height:44px; padding:10px 18px; gap:10px; color:#fff; border:1px solid transparent; border-radius:var(--lg-r-sm);
  background:var(--lg-accent-strong); box-shadow:0 1px 0 rgba(255,255,255,.22) inset,0 4px 14px rgba(53,99,217,.3); }
.login-card.session-expired-card .primary:hover { color:#fff; background:#3d6fe8; border-color:transparent; box-shadow:0 1px 0 rgba(255,255,255,.22) inset,0 0 0 3px rgba(91,140,255,.2),0 4px 14px rgba(53,99,217,.3); }
.login-card.session-expired-card .field input { border-radius:var(--lg-r-sm); }
@keyframes lg-card-in { from { opacity:0; transform:translateY(12px); filter:blur(6px); } to { opacity:1; transform:none; filter:none; } }
@media (max-width:600px) { .login-card.session-expired-card { padding:24px 22px 28px; } .session-brand-mark { width:44px; height:44px; } .login-card.session-expired-card h1 { font-size:22px; } .session-expired-copy { padding-top:20px; } .session-expired-actions { margin-top:20px; } .login-card.session-expired-card .primary { width:100%; } }
@media (max-width:380px) { .login-card.session-expired-card { padding:22px 18px 24px; } .session-expired-header { gap:12px; } .session-brand-mark { width:40px; height:40px; } .login-card.session-expired-card h1 { font-size:21px; } }

/* 오프닝 건너뛰기: 같은 유리 버튼. 바로 보이지 않고 잠시 뒤 나타난다. */
.intro-ctl { right:24px; bottom:24px; animation:lg-skip-in 420ms var(--lg-ease) 500ms both; }
.intro-ctl button { display:inline-flex; align-items:center; gap:10px; min-height:40px; padding:8px 12px 8px 14px; color:var(--lg-text); font-size:13px; font-weight:600;
  border:1px solid transparent; border-radius:var(--lg-r-sm); background:linear-gradient(var(--lg-glass),var(--lg-glass)) padding-box,var(--lg-edge) border-box;
  -webkit-backdrop-filter:blur(12px); backdrop-filter:blur(12px); box-shadow:0 1px 0 rgba(255,255,255,.07) inset,0 8px 24px rgba(0,0,0,.4);
  transition:transform 140ms var(--lg-ease),box-shadow 220ms var(--lg-ease); }
.intro-ctl button:hover { background:linear-gradient(rgba(16,24,38,.8),rgba(16,24,38,.8)) padding-box,var(--lg-edge) border-box; box-shadow:0 1px 0 rgba(255,255,255,.07) inset,0 0 0 3px rgba(91,140,255,.18),0 8px 24px rgba(0,0,0,.4); }
.intro-ctl button:focus-visible { outline:2px solid var(--lg-accent-2); outline-offset:3px; box-shadow:0 1px 0 rgba(255,255,255,.07) inset,0 8px 24px rgba(0,0,0,.4); }
.intro-ctl button:active { transform:scale(.97); }
.intro-ctl kbd { padding:1px 6px; font-family:var(--lg-mono); font-size:11px; font-weight:500; color:var(--lg-mute); border:1px solid var(--lg-line-strong); border-radius:4px; }
@keyframes lg-skip-in { from { opacity:0; transform:translateY(6px); } to { opacity:1; transform:none; } }
@media (max-width:600px) { .intro-ctl { right:16px; bottom:16px; } .intro-ctl kbd { display:none; } }
@media (hover:none) { .intro-ctl kbd { display:none; } }
@media (prefers-reduced-motion:reduce) { .login-card.session-expired-card,.intro-ctl { animation:none; } .login-card .primary,.intro-ctl button { transition:none; } .login-card .primary:active,.intro-ctl button:active { transform:none; } }
/* 배경 원본 오른쪽 아래의 생성 표식(✦)은 화면 밖으로: 장면 가운데 빛은 제자리에 두고 20% 키운다. */
.login-wrap { background:#04060a; }
.login-wrap::before { content:""; position:absolute; inset:0; z-index:0; background:url("/static/background-poster.jpg") center/cover no-repeat; transform:scale(1.2); transform-origin:50% 40%; pointer-events:none; }
.login-wrap.session-expired { background:#04060a; }
/* 상태 화면(로그인 필요·접근 불가·불러오기 실패)은 영상 캡처 대신 직접 만든 브랜드 배경. 확대·표식 숨김이 필요 없다. */
.login-wrap.session-expired::before { background:#04060a url("/static/status-bg.svg") center/cover no-repeat; transform:none; }
.login-bg { transform:scale(1.2); transform-origin:50% 40%; }
