*{box-sizing:border-box}body{margin:0;color:#172033;background:#f6f9fc}.app-shell{display:grid;grid-template-columns:250px 1fr;min-height:100vh}.sidebar{position:sticky;top:0;height:100vh;border-right:1px solid #e4e9f0;padding:28px 20px;background:#fff}.brand{display:inline-block;margin-bottom:28px;color:#2866dc;font-size:24px;font-weight:900;text-decoration:none}.side-nav{display:grid;gap:8px}.side-nav a{border-radius:14px;padding:12px 14px;color:#657087;font-weight:800;text-decoration:none}.side-nav a:hover{background:#edf4ff;color:#2866dc}.dashboard-main{width:100%;max-width:calc(1060px + var(--pf-gutter)*2);margin:0 auto;padding:40px var(--pf-gutter) 80px}.dashboard-header{position:relative;display:flex;justify-content:space-between;align-items:flex-start;gap:24px;margin-bottom:24px}.welcome{margin:0 0 8px;color:#667085;font-size:15px}.welcome strong{color:#2866dc}.dashboard-header h1{margin:0;font-size:34px;line-height:1.28}.header-action{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 16px;border-radius:14px;background:#fff;color:#2866dc;font-weight:900;text-decoration:none;box-shadow: var(--pf-shadow-sm)}.header-orbit{display:grid;place-items:center;flex:0 0 auto;width:132px;height:104px;border-radius:26px;background:radial-gradient(72% 72% at 50% 46%,#e2f0ff 0%,#eaf4ff 58%,rgba(234,244,255,0) 100%);-webkit-mask-image:radial-gradient(78% 78% at 50% 48%,#000 52%,rgba(0,0,0,.35) 78%,transparent 100%);mask-image:radial-gradient(78% 78% at 50% 48%,#000 52%,rgba(0,0,0,.35) 78%,transparent 100%)}.header-orbit svg{width:104px;height:104px}.notice-box{margin-bottom:18px;padding:14px 16px;border:1px solid #f7c6ca;border-radius:14px;background:#fff5f5;color:#b42318}.growth-card{display:grid;grid-template-columns:190px 1fr;align-items:center;gap:28px;margin-bottom:28px;padding:28px;border:1px solid #dfe7f1;border-radius:28px;background:linear-gradient(135deg,#fff 20%,#edf5ff);color:inherit;text-decoration:none;box-shadow: var(--pf-shadow-sm)}.progress-ring{--progress:0;display:grid;place-items:center;width:176px;aspect-ratio:1;border-radius:50%;background:radial-gradient(closest-side,#fff 78%,transparent 80%),conic-gradient(#3478e5 calc(var(--progress)*1%),#dce8f5 0)}.progress-ring span{color:#2866dc;font-size:34px;font-weight:900}.section-kicker{display:block;margin-bottom:7px;color:#4b79cf;font-size:13px;font-weight:900}.growth-copy h2{margin:0 0 12px;font-size:32px;line-height:1.25;letter-spacing:-.5px;word-break:keep-all}.tag-row{display:flex;flex-wrap:wrap;gap:7px;margin-bottom:16px}.tag-row span{padding:7px 10px;border-radius:999px;background:#fff;color:#3970c5;font-size:12px;font-weight:800}.text-link{color:#2866dc;font-size:14px;font-weight:900}.summary-section, .home-section{margin-bottom:30px}.section-title-row{display:flex;align-items:center;justify-content:space-between;gap:16px;margin-bottom:15px}.section-title-row h2{margin:0;font-size:22px}.section-title-row a{color:#667085;font-size:14px;font-weight:800;text-decoration:none}.summary-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:14px}.summary-card{position:relative;display:flex;min-width:0;min-height:164px;flex-direction:column;align-items:flex-start;padding:18px;border:1px solid #e5eaf1;border-radius:21px;background:#fff;color:#4a556b;text-align:left;text-decoration:none;box-shadow: var(--pf-shadow-sm)}button.summary-card{font:inherit;cursor:pointer}.summary-card strong{margin:8px 0 5px;color:#172033;font-size:30px}.summary-card small{color:#8a94a7;line-height:1.35}.summary-icon{display:grid;place-items:center;width:35px;height:35px;margin-bottom:13px;border-radius:12px;font-weight:900}.summary-icon.blue{background:#eaf2ff;color:#3677e7}.summary-icon.green{background:#e9f8f1;color:#21a36a}.summary-icon.violet{background:#f2edff;color:#7b61d9}.summary-icon.coral{background:#fff0eb;color:#ef7658}.schedule-list{display:grid;gap:12px}.schedule-card{position:relative;display:flex;align-items:center;gap:16px;padding:16px;border:1px solid #e5eaf1;border-radius:20px;background:#fff;color:inherit;text-decoration:none;box-shadow: var(--pf-shadow-sm)}.date-box{display:grid;flex:0 0 70px;place-items:center;padding:10px 6px;border-radius:16px;background:#edf5ff}.date-box b{color:#3478e5;font-size:11px}.date-box strong{font-size:23px}.date-box small{color:#667085;font-size:11px}.schedule-copy{display:grid;min-width:0;gap:5px}.schedule-copy em, .recommendation-type{width:max-content;padding:4px 8px;border-radius:999px;background:#ecf8f1;color:#24885d;font-size:11px;font-style:normal;font-weight:900}.schedule-copy strong{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.schedule-copy small{color:#7c879b}.chevron{margin-left:auto;color:#9ba4b4;font-size:27px}.recommendation-meta{display:flex;justify-content:space-between;color:#667085;font-size:12px}.recommendation-meta b{color:#ef7658}.empty-state{grid-column:1/-1;padding:22px;border:1px dashed #cad4e2;border-radius:18px;background:#fbfdff;color:#7c879b}.mobile-only{display:none}.dashboard-mobile-topbar{display:none}@media(max-width:1100px){.app-shell{grid-template-columns:1fr}.sidebar{display:none}.summary-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:760px){body{padding-bottom:calc(90px + env(safe-area-inset-bottom));background:#f8fafc}.dashboard-mobile-topbar{display:flex}.topbar-actions{display:flex;gap:8px}.icon-button{display:grid;place-items:center;width:44px;height:44px;padding:0;border:1px solid var(--pf-border);border-radius:50%;background:var(--pf-surface);color:var(--pf-primary);text-decoration:none;box-shadow:none}.dashboard-main{padding:14px var(--pf-gutter) 28px;overflow:hidden}.dashboard-header{min-height:116px;margin:0 0 19px}.welcome{font-size:14px}.dashboard-header h1{font-size:27px;letter-spacing:-.6px}.header-action{display:none}.header-orbit{position:absolute;right:0;bottom:0;width:104px;height:84px;border-radius:22px}.header-orbit svg{width:84px;height:84px}.mobile-only{display:block}.growth-card{grid-template-columns:100px 1fr;gap:15px;margin-bottom:27px;padding:19px 17px;border-radius:24px}.progress-ring{width:96px}.progress-ring span{font-size:22px}.growth-copy h2{font-size:24px}.tag-row{gap:5px;margin-bottom:12px}.tag-row span{padding:5px 7px;font-size:10px}.text-link{font-size:12px}.summary-section, .home-section{margin-bottom:28px}.section-title-row{margin-bottom:13px}.section-title-row h2{font-size:19px}.section-title-row a{font-size:12px}.summary-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.summary-card{min-height:154px;padding:16px;border-radius:20px}.summary-card strong{font-size:29px}.summary-card small{font-size:11px}.schedule-card{gap:12px;padding:13px;border-radius:19px}.date-box{flex-basis:61px}.schedule-copy strong{max-width:210px;font-size:14px}.schedule-copy small{overflow:hidden;max-width:205px;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.mobile-toast{bottom:calc(80px + env(safe-area-inset-bottom))}}@media(max-width:360px){.growth-card{grid-template-columns:88px 1fr}.progress-ring{width:84px}.schedule-copy strong, .schedule-copy small{max-width:175px}}@media(min-width:761px) and (max-width:1100px){.dashboard-main{padding-top:32px}}@media(prefers-reduced-motion:no-preference){.summary-card,.growth-card,.recommendation-card,.schedule-card,.category-card{transition:transform .18s ease,box-shadow .18s ease}.summary-card:hover, .growth-card:hover, .schedule-card:hover{transform:translateY(-2px);box-shadow: var(--pf-shadow-sm)}}a:focus-visible, button:focus-visible{outline:3px solid rgba(52,120,229,.35);outline-offset:3px}

.progress-ring span{font-variant-numeric:tabular-nums}

/* --------------------------------------------------------------- 잠금 안내 창 */

/*
 * 진행률 0%에서 분석 레포트를 눌렀을 때 뜹니다.
 * 자기탐색 화면의 확인 창과 같은 모양이되, 그 CSS는 그 페이지에서만 불러오므로
 * 여기서는 pf- 접두어로 따로 정의합니다.
 */
.pf-modal {
  position: fixed;
  inset: 0;
  z-index: 100;
  display: grid;
  place-items: center;
  padding: var(--pf-gutter);
}

.pf-modal.hidden {
  display: none;
}

.pf-modal-backdrop {
  position: absolute;
  inset: 0;
  background: rgba(18, 32, 66, 0.42);
}

.pf-modal-card {
  position: relative;
  z-index: 1;
  display: grid;
  justify-items: center;
  gap: 12px;
  width: min(420px, 100%);
  padding: 26px 22px;
  border-radius: 24px;
  background: var(--pf-surface);
  text-align: center;
  box-shadow: var(--pf-shadow-strong);
}

.pf-modal-card h2 {
  margin: 0;
  font-size: 20px;
  word-break: keep-all;
}

.pf-modal-card p {
  margin: 0;
  color: var(--pf-muted);
  font-size: 14px;
  line-height: 1.6;
  word-break: keep-all;
}

.pf-modal-actions {
  display: flex;
  gap: 10px;
  width: 100%;
  margin-top: 6px;
}

.pf-modal-button {
  display: inline-flex;
  flex: 1;
  align-items: center;
  justify-content: center;
  min-height: 46px;
  padding: 0 14px;
  border: 1px solid var(--pf-border-strong);
  border-radius: 999px;
  background: var(--pf-surface);
  color: var(--pf-text);
  font-size: 14px;
  font-weight: 800;
  text-decoration: none;
  cursor: pointer;
}

.pf-modal-button.primary {
  border-color: var(--pf-primary);
  background: var(--pf-primary);
  color: #fff;
}

/* 전역 button:hover가 클래스 하나짜리 규칙을 이겨 직접 적습니다. */
.pf-modal-button:hover {
  border-color: var(--pf-primary);
  background: var(--pf-primary-pale);
  color: var(--pf-primary-dark);
}

.pf-modal-button.primary:hover {
  border-color: var(--pf-primary-dark);
  background: var(--pf-primary-dark);
  color: #fff;
}

/* 잠긴 동안에는 카드가 링크가 아니라 안내라는 걸 커서로 알립니다. */
.growth-card.is-locked {
  cursor: pointer;
}

/*
 * 인사말과 새싹이 겹치면 새싹을 숨깁니다.
 * 모바일에서 새싹은 position:absolute라 글자 위에 얹히는데,
 * 이름이 길거나 제목이 두 줄로 넘어가면 글씨를 가립니다. 판정은 dashboard.js가 합니다.
 */
.header-orbit {
  transition: opacity 0.2s ease;
}

.header-orbit.is-crowded {
  opacity: 0;
  /* display:none 대신 이렇게 두는 건, 데스크톱에서 flex 항목이라 사라지면 배치가 튀기 때문입니다. */
  visibility: hidden;
}

@media (prefers-reduced-motion: reduce) {
  .header-orbit {
    transition: none;
  }
}
