/* ================================ Admin UI (Independent) Prefix: a- ================================ */ :root{ --a-bg: #0b0f19; --a-panel: rgba(255,255,255,.06); --a-panel2: rgba(255,255,255,.08); --a-border: rgba(255,255,255,.12); --a-text: rgba(255,255,255,.92); --a-muted: rgba(255,255,255,.64); --a-muted2: rgba(255,255,255,.52); --a-primary: #2b7fff; --a-primary2: #7c5cff; --a-danger: #ff4d4f; --a-warn: #ffb020; --a-info: #2b7fff; --a-radius: 18px; --a-radius-sm: 12px; --a-shadow: 0 24px 80px rgba(0,0,0,.45); --a-shadow2: 0 12px 40px rgba(0,0,0,.35); } *{ box-sizing:border-box; } html,body{ height:100%; } .a-body{ margin:0; font-family: Pretendard, system-ui, -apple-system, Segoe UI, Roboto, sans-serif; background: var(--a-bg); color: var(--a-text); } .a-auth-bg{ position:fixed; inset:0; background: radial-gradient(1000px 500px at 10% 10%, rgba(43,127,255,.20), transparent 55%), radial-gradient(900px 450px at 90% 15%, rgba(124,92,255,.18), transparent 60%), radial-gradient(700px 400px at 50% 90%, rgba(255,255,255,.06), transparent 60%), linear-gradient(180deg, rgba(255,255,255,.03), transparent 35%); filter: saturate(1.1); } .a-auth-shell{ min-height:100vh; display:grid; place-items:center; padding:28px; position:relative; } .a-auth-card{ width:min(980px, 100%); display:grid; grid-template-columns: 1.05fr .95fr; border:1px solid var(--a-border); border-radius: var(--a-radius); background: rgba(0,0,0,.22); backdrop-filter: blur(10px); box-shadow: var(--a-shadow); overflow:hidden; } .a-auth-left{ padding:28px; border-right:1px solid var(--a-border); background: linear-gradient(135deg, rgba(43,127,255,.10), rgba(124,92,255,.08)), rgba(255,255,255,.03); } .a-auth-right{ padding:22px; } .a-brand{ display:flex; align-items:center; gap:12px; margin-bottom:22px; } .a-brand__mark{ width:42px; height:42px; border-radius:14px; display:grid; place-items:center; font-weight:900; background: linear-gradient(135deg, rgba(43,127,255,.95), rgba(124,92,255,.95)); box-shadow: var(--a-shadow2); } .a-brand__name{ font-weight:800; letter-spacing:.02em; } .a-brand__sub{ color:var(--a-muted); font-size:13px; margin-top:2px; } .a-auth-left__copy{ margin-top:18px; } .a-h1{ font-size:22px; margin:0 0 8px; letter-spacing:-.02em; } .a-muted{ color:var(--a-muted); } .a-badges{ margin-top:18px; display:flex; flex-wrap:wrap; gap:8px; } .a-badge{ font-size:12px; color: rgba(255,255,255,.80); border:1px solid rgba(255,255,255,.14); background: rgba(255,255,255,.05); padding:6px 10px; border-radius: 999px; } .a-panel{ border:1px solid var(--a-border); background: var(--a-panel); border-radius: var(--a-radius); padding:18px; } .a-form{ display:block; } .a-field{ margin:14px 0; } .a-label{ display:block; font-size:13px; color: rgba(255,255,255,.82); margin-bottom:8px; } .a-input{ width:100%; border-radius: var(--a-radius-sm); border:1px solid rgba(255,255,255,.14); background: rgba(0,0,0,.25); color: var(--a-text); padding:12px 12px; outline:none; transition: border-color .15s ease, background .15s ease, transform .15s ease; } .a-input::placeholder{ color: rgba(255,255,255,.35); } .a-input:focus{ border-color: rgba(43,127,255,.55); background: rgba(0,0,0,.32); } .a-inputwrap{ position:relative; } .a-input--withbtn{ padding-right:64px; } .a-inputbtn{ position:absolute; right:10px; top:50%; transform: translateY(-50%); border:1px solid rgba(255,255,255,.14); background: rgba(255,255,255,.06); color: rgba(255,255,255,.85); padding:8px 10px; border-radius: 999px; cursor:pointer; font-size:12px; } .a-inputbtn:hover{ background: rgba(255,255,255,.10); } .a-row{ margin:10px 0 16px; display:flex; align-items:center; justify-content:space-between; gap:10px; } .a-check{ display:flex; align-items:center; gap:8px; font-size:13px; color: rgba(255,255,255,.78); user-select:none; } .a-check input{ width:16px; height:16px; } .a-link{ color: rgba(255,255,255,.78); text-decoration:none; font-size:13px; opacity:.9; } .a-link:hover{ text-decoration:underline; } .a-btn{ width:100%; border-radius: var(--a-radius-sm); border:1px solid rgba(255,255,255,.14); padding:12px 14px; cursor:pointer; font-weight:800; letter-spacing:.01em; } .a-btn--primary{ border:0; color:white; background: linear-gradient(135deg, var(--a-primary), var(--a-primary2)); box-shadow: 0 14px 34px rgba(43,127,255,.18); } .a-btn--primary:active{ transform: translateY(1px); } .a-help{ margin-top:12px; } .a-foot{ margin-top:14px; text-align:center; } .a-alert{ border-radius: 14px; border:1px solid rgba(255,255,255,.12); padding:12px 12px; margin: 0 0 12px; background: rgba(255,255,255,.05); } .a-alert__title{ font-weight:800; margin-bottom:4px; font-size:13px; } .a-alert__body{ font-size:13px; color: rgba(255,255,255,.82); } .a-alert--danger{ border-color: rgba(255,77,79,.30); background: rgba(255,77,79,.12); } .a-alert--warn{ border-color: rgba(255,176,32,.28); background: rgba(255,176,32,.10); } .a-alert--info{ border-color: rgba(43,127,255,.28); background: rgba(43,127,255,.10); } .a-brand__logoBox{ width: 110px; display: inline-flex; align-items: center; justify-content: center; padding:5px; background: #fff; border-radius: 5px; border: 1px solid rgba(0,0,0,.08); box-shadow: 0 6px 18px rgba(0,0,0,.12); overflow: hidden; } .a-brand__logo{ width: 70%; height: 70%; object-fit: contain; display: block; } @media (max-width: 860px){ .a-auth-card{ grid-template-columns: 1fr; } .a-auth-left{ border-right:0; border-bottom:1px solid var(--a-border); } } /* ===== OTP ===== */ .a-otp-meta{ display:flex; align-items:center; justify-content:space-between; gap:12px; padding:10px 12px; border: 1px solid rgba(255,255,255,.10); background: rgba(255,255,255,.04); border-radius: 14px; margin-bottom: 14px; } .a-otp-meta__label{ font-weight: 700; letter-spacing: .02em; opacity: .85; } .a-otp-meta__value{ font-weight: 800; letter-spacing: .08em; opacity: .95; } .a-otp-input{ text-align: center; font-size: 22px; font-weight: 800; letter-spacing: .35em; /* 6자리 느낌 */ padding: 14px 14px; } .a-otp-help{ margin-top: 12px; } /* 공통 에러 스타일이 없다면 */ .a-error{ margin-top: 8px; font-size: 12px; color: #ff6b6b; } /* ================================ Admin App (after login) ================================ */ .a-app__wrap{ min-height: 100vh; display: grid; grid-template-columns: 280px 1fr; } .a-side{ position: sticky; top: 0; height: 100vh; border-right: 1px solid var(--a-border); background: linear-gradient(180deg, rgba(255,255,255,.03), transparent 40%), rgba(0,0,0,.18); backdrop-filter: blur(10px); overflow: auto; } .a-side__brand{ display:flex; align-items:center; gap:12px; padding:18px 16px; border-bottom: 1px solid var(--a-border); } .a-side__logo{ width:42px; height:42px; border-radius: 14px; display:grid; place-items:center; font-weight:900; background: linear-gradient(135deg, rgba(43,127,255,.95), rgba(124,92,255,.95)); box-shadow: var(--a-shadow2); } .a-side__brandName{ font-weight: 900; letter-spacing: .02em; } .a-side__brandSub{ font-size: 12px; color: var(--a-muted); margin-top: 2px; } .a-nav{ padding: 14px 10px 18px; } .a-nav__group{ margin: 10px 0 14px; } .a-nav__title{ padding: 8px 10px; font-size: 12px; letter-spacing: .08em; text-transform: uppercase; color: rgba(255,255,255,.55); } .a-nav__item{ display:flex; align-items:center; gap:10px; padding: 10px 10px; border-radius: 12px; color: rgba(255,255,255,.82); text-decoration:none; border: 1px solid transparent; cursor:pointer; } .a-nav__dot{ width: 8px; height: 8px; border-radius: 99px; background: rgba(255,255,255,.25); } .a-nav__item:hover{ background: rgba(255,255,255,.05); border-color: rgba(255,255,255,.10); } .a-nav__item.is-active{ background: rgba(43,127,255,.12); border-color: rgba(43,127,255,.22); } .a-nav__item.is-active .a-nav__dot{ background: linear-gradient(135deg, var(--a-primary), var(--a-primary2)); } .a-nav__item.is-disabled{ opacity: .45; cursor: not-allowed; } .a-main{ min-width: 0; display: grid; grid-template-rows: auto 1fr auto; } .a-top{ border-bottom: 1px solid var(--a-border); background: radial-gradient(900px 260px at 15% 0%, rgba(43,127,255,.14), transparent 60%), radial-gradient(700px 240px at 85% 0%, rgba(124,92,255,.12), transparent 60%), rgba(0,0,0,.14); backdrop-filter: blur(10px); } .a-top > *{ padding: 14px 18px; display:flex; align-items:center; justify-content:space-between; gap: 12px; } .a-top__h{ font-size: 16px; font-weight: 900; letter-spacing: -.02em; } .a-top__sub{ font-size: 12px; margin-top: 2px; } .a-top__search{ width: min(520px, 42vw); } .a-top__searchInput{ width: 100%; border-radius: 14px; border: 1px solid rgba(255,255,255,.12); background: rgba(0,0,0,.22); color: var(--a-text); padding: 10px 12px; outline: none; } .a-top__user{ display:flex; align-items:center; gap: 10px; border: 1px solid rgba(255,255,255,.10); background: rgba(255,255,255,.04); padding: 8px 10px; border-radius: 16px; } .a-top__avatar{ width:34px; height:34px; border-radius: 12px; display:grid; place-items:center; font-weight: 900; background: rgba(255,255,255,.08); border: 1px solid rgba(255,255,255,.10); } .a-top__userName{ font-weight: 800; font-size: 13px; } .a-top__userMeta{ font-size: 12px; } .a-top__logout{ border: 1px solid rgba(255,255,255,.14); background: rgba(255,255,255,.06); color: rgba(255,255,255,.86); padding: 8px 10px; border-radius: 999px; cursor:pointer; font-size: 12px; } .a-top__logout:hover{ background: rgba(255,255,255,.10); } .a-content{ padding: 18px; } .a-footer{ padding: 14px 18px; border-top: 1px solid var(--a-border); background: rgba(0,0,0,.10); } /* Dashboard */ .a-dash{ display:block; } .a-grid{ display:grid; gap: 12px; } .a-grid--kpi{ grid-template-columns: repeat(4, minmax(0, 1fr)); margin-bottom: 12px; } .a-grid--charts{ grid-template-columns: 1.2fr .8fr; margin-bottom: 12px; } .a-grid--tables{ grid-template-columns: 1fr 1fr; } .a-card{ border:1px solid var(--a-border); background: rgba(255,255,255,.04); border-radius: var(--a-radius); padding: 14px; box-shadow: var(--a-shadow2); min-width: 0; } .a-card--accent{ background: linear-gradient(135deg, rgba(43,127,255,.18), rgba(124,92,255,.14)), rgba(255,255,255,.04); border-color: rgba(43,127,255,.18); } .a-card--lg{ min-height: 280px; } .a-card__label{ font-size: 12px; } .a-card__value{ margin-top: 8px; font-size: 24px; font-weight: 900; letter-spacing: -.02em; } .a-card__meta{ margin-top: 6px; font-size: 12px; } .a-card__head{ display:flex; align-items:flex-start; justify-content:space-between; gap: 10px; margin-bottom: 10px; } .a-card__title{ font-weight: 900; } .a-card__desc{ font-size: 12px; margin-top: 3px; } .a-chip{ font-size: 12px; border: 1px solid rgba(255,255,255,.12); background: rgba(255,255,255,.05); padding: 6px 10px; border-radius: 999px; } .a-chart{ height: 220px; border-radius: 14px; border: 1px dashed rgba(255,255,255,.14); background: rgba(0,0,0,.15); display:grid; place-items:center; } .a-chart__placeholder{ font-size: 12px; } .a-table{ display:block; } .a-tr{ display:grid; grid-template-columns: 90px 70px 1fr 90px; gap: 10px; padding: 10px 8px; border-top: 1px solid rgba(255,255,255,.08); align-items:center; } .a-th{ border-top: 0; padding-top: 6px; padding-bottom: 8px; color: rgba(255,255,255,.55); font-size: 12px; } .a-ellipsis{ overflow:hidden; white-space:nowrap; text-overflow:ellipsis; min-width: 0; } .a-pill{ display:inline-flex; align-items:center; justify-content:center; padding: 6px 10px; border-radius: 999px; border: 1px solid rgba(255,255,255,.12); background: rgba(255,255,255,.05); font-size: 12px; } .a-pill--warn{ border-color: rgba(255,176,32,.28); background: rgba(255,176,32,.10); } .a-pill--info{ border-color: rgba(43,127,255,.28); background: rgba(43,127,255,.10); } @media (max-width: 1200px){ .a-grid--kpi{ grid-template-columns: repeat(2, minmax(0, 1fr)); } .a-grid--charts{ grid-template-columns: 1fr; } .a-grid--tables{ grid-template-columns: 1fr; } } @media (max-width: 980px){ .a-app__wrap{ grid-template-columns: 1fr; } .a-side{ position: relative; height: auto; } }