/* One continuous route, with finite entrance animations. */
.constellation-map{margin:0;padding:0;border:0}
.constellation-heading{max-width:650px}
.constellation-heading .section-heading{font-size:27px;margin-bottom:8px}
.constellation-heading p{margin:0;color:#aaa0b3;font-size:14px;line-height:1.65}
.constellation-field{position:relative;height:500px;margin-top:18px;border:1px solid #c8a7df24;border-radius:22px;background:radial-gradient(ellipse at 16% 80%,#ac66552b,transparent 52%),radial-gradient(ellipse at 80% 12%,#7970bd30,transparent 54%),linear-gradient(145deg,#161321,#0b0b13);overflow:hidden;isolation:isolate;box-shadow:inset 0 1px #ffffff08,0 18px 60px #00000016}
.constellation-field::after{content:'';position:absolute;inset:0;pointer-events:none;border-radius:inherit;background:radial-gradient(ellipse at center,transparent 35%,#07071055)}
.constellation-legend{position:absolute;z-index:4;top:20px;left:22px;right:22px;display:flex;justify-content:flex-end;gap:18px;color:#c6b8cb;font-size:12px}
.constellation-legend span{display:flex;align-items:center;gap:7px}
.legend-dot{width:6px;height:6px;border-radius:50%}
.legend-dot.work{background:#f2ad8e;box-shadow:0 0 10px #e58b6f}
.legend-dot.education{background:#c4b9ff;box-shadow:0 0 10px #9788ee}
.star-dust{position:absolute;inset:0;pointer-events:none}
.star-dust i{position:absolute;width:var(--size);height:var(--size);border-radius:50%;background:#e2d4ef;opacity:.3}
.star-dust i:nth-child(5n){box-shadow:0 0 7px #cab3f0;animation:dust-arrive 2.4s var(--delay) ease-out both}
.constellation-sky{position:absolute;inset:65px 30px 72px;z-index:2}
.constellation-sky svg{position:absolute;inset:0;width:100%;height:100%;overflow:visible;pointer-events:none}
.constellation-line{fill:none;stroke:#c6b8ed;stroke-width:1.5;stroke-linecap:round;opacity:.6;stroke-dasharray:1000;animation:route-reveal .9s var(--delay) cubic-bezier(.22,1,.36,1) both;transition:opacity .3s,stroke-width .3s,filter .3s}
.constellation-line.route-work{stroke:#ecae92}
.constellation-line.route-education{stroke:#c7bbff}
.constellation-line.is-travelled{opacity:.95;stroke-width:1.7;filter:drop-shadow(0 0 3px #dab7f5)}
.mobile-line{display:none}
.constellation-map .star-node{--star:#c7bcff;position:absolute;left:var(--x);top:var(--y);z-index:3;width:44px;height:44px;transform:translate(-50%,-50%);padding:0;border:0;background:transparent;color:#fff;text-align:left;overflow:visible;cursor:pointer;-webkit-tap-highlight-color:transparent}
.constellation-map .star-work{--star:#ffc3a2}
.constellation-map .star-core{position:absolute;left:50%;top:50%;width:9px;height:9px;margin:-4.5px;border-radius:50%;background:#fff4e9;box-shadow:0 0 6px 2px var(--star),0 0 20px 4px color-mix(in srgb,var(--star) 38%,transparent);animation:star-arrive .8s var(--delay) both;transition:transform .3s,box-shadow .3s}
.star-halo{position:absolute;inset:9px;border:1px solid color-mix(in srgb,var(--star) 25%,transparent);border-radius:50%;transition:transform .45s,border-color .45s;background:radial-gradient(circle,transparent 45%,color-mix(in srgb,var(--star) 8%,transparent));animation:star-arrive .9s var(--delay) both}
.star-number{position:absolute;bottom:39px;left:50%;transform:translateX(-50%);color:var(--star);opacity:.55;font:10px/1.2 monospace;letter-spacing:.08em}
.constellation-map .star-copy{position:absolute;top:42px;left:22px;display:flex;flex-direction:column;width:max-content;max-width:185px;margin:0;text-shadow:0 2px 12px #070610;animation:label-arrive .7s var(--delay) both}
.constellation-map .star-kicker{color:#ad9db9;font-size:11px;line-height:1.5;letter-spacing:0;text-transform:none}
.constellation-map .star-label{color:#eee4ee;font-size:14px;line-height:1.4;transition:color .25s}
.constellation-map .star-node:nth-of-type(1) .star-copy{top:-110px;max-width:150px}
.constellation-map .star-node:nth-of-type(3) .star-copy,.constellation-map .star-node:nth-of-type(6) .star-copy{align-items:flex-end;transform:translateX(-100%);text-align:right;margin:0}
.constellation-map .star-node:nth-of-type(5) .star-copy{align-items:flex-start;transform:none;text-align:left;margin:0}
.star-node.is-active .star-halo{transform:scale(1.5);border-color:var(--star)}
.constellation-map .star-node.is-active .star-core{transform:scale(1.3);box-shadow:0 0 9px 3px var(--star),0 0 32px 8px color-mix(in srgb,var(--star) 35%,transparent)}
.star-node.is-active .star-label{color:var(--star)}
.constellation-map .star-node:focus-visible{outline:2px solid var(--star);outline-offset:5px;border-radius:50%}
.constellation-map .star-node:active .star-halo{transform:scale(.8)}
.constellation-hint{margin:12px 0 0;text-align:center;font-size:12px;color:#ad9db9;line-height:1.6}
.star-dialog{width:min(560px,calc(100vw - 32px));max-height:min(88dvh,780px);padding:0;border:1px solid #bc9bbb70;border-radius:22px;color:#f3ebf2;background:radial-gradient(circle at 94% 0%,#6d466449,transparent 48%),linear-gradient(145deg,#24202e,#14131d);box-shadow:0 28px 90px #050409d9;overflow:hidden;opacity:0;transform:translateY(18px) scale(.97);transition:opacity .38s ease,transform .48s cubic-bezier(.2,.8,.2,1)}
.star-dialog[open]{display:flex;flex-direction:column}
.star-dialog.is-visible{opacity:1;transform:translateY(0) scale(1)}
.star-dialog.is-closing{transition-duration:.28s}
.star-dialog::backdrop{background:#07070d45;backdrop-filter:blur(1px);opacity:0;transition:opacity .38s ease}
.star-dialog.is-visible::backdrop{opacity:1}
.star-dialog.is-closing::backdrop{transition-duration:.28s}
.star-dialog-inner{min-height:0;flex:1 1 auto;overflow:auto;overscroll-behavior:contain;scrollbar-color:#765b75 transparent;padding:38px 34px 14px}
.star-dialog-footer{flex:none;padding:12px 34px 28px;border-top:1px solid #d9b7d11a;background:linear-gradient(180deg,#191721eF,#14131d)}
.star-dialog-close{position:absolute;right:17px;top:14px;width:36px;height:36px;border:1px solid #ffffff1c;border-radius:12px;background:#ffffff08;color:#eee3f1;font-size:24px;line-height:1}
.star-dialog-kicker{display:block;max-width:calc(100% - 30px);color:#d6adce;font-size:11px;letter-spacing:.08em;text-transform:uppercase}
.star-dialog h3{margin:14px 0 18px;font:600 clamp(22px,4vw,28px)/1.25 Manrope,sans-serif;letter-spacing:-.04em}
.star-dialog-date{margin:0;padding:12px 15px;border:1px solid #ddc8ef1b;border-radius:12px;background:#ffffff08;color:#d1c7d7;font-size:13px;line-height:1.5}
.star-dialog-date strong{color:#f2bfa6;font-weight:600}
.star-dialog-summary{margin:18px 0 18px;color:#d0c5d5;font-size:14px;line-height:1.75}
.star-dialog-highlights{margin:0 0 18px}
.star-dialog-section-label{display:block;margin-bottom:10px;color:#e2b7cb;font-size:10px;font-weight:700;letter-spacing:.11em;text-transform:uppercase}
.star-dialog-list{display:grid;gap:9px;margin:0;padding:0;list-style:none}
.star-dialog-list li{position:relative;padding-left:17px;color:#c8bdcf;font-size:13px;line-height:1.62}
.star-dialog-list li::before{position:absolute;top:.64em;left:1px;width:6px;height:6px;border-radius:50%;background:#f0b398;box-shadow:0 0 8px #eaa99088;content:''}
.star-dialog-tags{display:flex;flex-wrap:wrap;gap:7px;margin:0 0 22px}
.star-dialog-tags .star-dialog-section-label{flex-basis:100%;margin-bottom:1px}
.star-dialog-tag{padding:6px 9px;border:1px solid #d9b7d126;border-radius:999px;background:#ffffff07;color:#d6c6da;font-size:11px;line-height:1.25}
.star-dialog-more{width:100%;padding:13px 18px;border:1px solid #f3bea96b;border-radius:12px;background:linear-gradient(120deg,#edb798,#d69bb8);color:#261b2a;font-weight:700;transition:transform .2s,filter .2s}
.star-dialog-more:hover{transform:translateY(-2px);filter:brightness(1.08)}
.eyebrow:empty,.intro:empty,.footer-tagline:empty{display:none}
.avatar{display:block;width:46px;height:46px;flex:none;padding:0;border:1px solid #d2adc65c;border-radius:13px;background:#2a202d url('assets/mario-avatar.jpeg') center 22%/145% auto no-repeat;box-shadow:0 0 0 3px #bb8a9d12}
.message-avatar{width:50px;height:50px;border-radius:15px}
@keyframes route-reveal{from{stroke-dashoffset:1000}to{stroke-dashoffset:0}}
@keyframes star-arrive{from{opacity:0;scale:.45}to{opacity:1;scale:1}}
@keyframes label-arrive{from{opacity:0;translate:0 7px}to{opacity:1;translate:0 0}}
@keyframes dust-arrive{from{opacity:0}50%{opacity:.8}to{opacity:.4}}
@media(max-width:960px){
  .constellation-heading .section-heading{font-size:24px;line-height:1.3}
  .constellation-field{height:760px;min-height:760px;border-radius:18px;margin-top:16px}
  .constellation-legend{top:18px;left:16px;right:16px;gap:10px;justify-content:flex-start;flex-wrap:wrap;font-size:11px}
  .constellation-sky{inset:62px 14px 70px}
  .constellation-line.desktop-line{display:none}.constellation-line.mobile-line{display:block}
  .constellation-map .star-node{left:var(--mx);top:var(--my)}
  .constellation-map .star-copy{max-width:min(160px,43vw);top:38px}
  .constellation-map .star-node:nth-of-type(1) .star-copy{top:-35px;max-width:min(160px,43vw)}
  .constellation-map .star-node:nth-of-type(odd) .star-copy{align-items:flex-start;transform:none;text-align:left;margin:0}
  .constellation-map .star-node:nth-of-type(even) .star-copy{align-items:flex-end;transform:translateX(-100%);text-align:right;margin:0}
  .constellation-map .star-node:nth-of-type(4) .star-copy{align-items:flex-start;transform:none;text-align:left}
  .constellation-map .star-copy{padding:2px 4px;border-radius:5px;background:#15131dba;backdrop-filter:blur(2px)}
  .constellation-map .star-label{font-size:14px}.constellation-map .star-kicker{font-size:11px}
  .star-dialog-inner{padding:34px 24px 14px}.star-dialog-footer{padding:10px 24px 22px}
}
@media(min-width:721px) and (max-width:960px){
  .constellation-field{height:680px;min-height:680px}
  .constellation-sky{inset:60px 24px 64px}
}
@media(max-width:720px){
  .chat-brand .avatar{display:block;width:42px;height:42px;border-radius:11px}
  .assistant.message{gap:10px}
  .assistant .avatar{display:block;width:46px;height:46px;border-radius:13px}
  .assistant .bubble{max-width:calc(100% - 56px)}
}
@media(prefers-reduced-motion:reduce){
  .constellation-map *,.constellation-map *::before,.constellation-map *::after{animation:none!important;transition:none!important}
}
