@import url('https://fonts.googleapis.com/css2?family=Manrope:wght@400;500;600;700&display=swap');
:root{font-family:Manrope,Arial,sans-serif;color:#30425a;background:#f5f7fa;font-synthesis:none}*{box-sizing:border-box}body{margin:0;overflow:hidden}button,input{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}button:focus-visible,a:focus-visible,input:focus-visible{outline:3px solid #477aca;outline-offset:5px}button{border:0}a{text-decoration:none;color:inherit}[hidden]{display:none!important}.cosmos{position:fixed;inset:0;overflow:hidden;cursor:grab;touch-action:none;perspective:1400px;background:radial-gradient(ellipse at 61% 44%,#fff 5%,#f0f5fc 45%,#f8f9fb 83%);outline-offset:-8px}.cosmos.dragging{cursor:grabbing}.ambient{position:absolute;pointer-events:none;filter:blur(65px);border-radius:50%}.ambient.a{width:70vw;height:70vh;left:15%;top:12%;background:radial-gradient(ellipse,#c9ddf54d,transparent 70%)}.ambient.b{width:65vw;height:50vh;left:-15%;bottom:-8%;background:radial-gradient(ellipse,#ffe0c778,transparent 70%)}.starfield{position:absolute;inset:-50px;pointer-events:none;background-image:radial-gradient(circle,#7c9cc678 .8px,transparent 1.4px),radial-gradient(circle,#9fb6d173 .6px,transparent 1.3px),radial-gradient(circle,#fff 1.2px,transparent 2px);background-position:10px 10px,40px 70px,90px 30px;background-size:153px 131px,227px 199px,311px 271px;opacity:.55}.world{position:absolute;left:0;top:0;width:0;height:0;transform-origin:0 0;transform-style:preserve-3d;transition:transform 1.4s cubic-bezier(.2,.78,.17,1);will-change:transform}.dragging .world,.zooming .world{transition:none}.world>svg{position:absolute;left:-1600px;top:-1100px;width:3600px;height:2400px;overflow:visible;pointer-events:none;transform:translateZ(-80px)}.world path{fill:none;stroke:#8ea8cb80;stroke-width:1.3}.world path.partner{stroke:#c5b08d8c;stroke-dasharray:3 7}.world path.uncertain{stroke:#c3a27c;stroke-dasharray:4 6}.orbit{position:absolute;pointer-events:none;border:1px solid #a3bcdb38;border-radius:50%;transform:rotate(-22deg) rotateX(38deg) translateZ(-100px);width:1300px;height:720px;left:-650px;top:-360px;box-shadow:0 0 90px #b2cced0a}.orbit-two{width:1850px;height:1080px;left:-925px;top:-540px;border-style:dashed;transform:rotate(24deg) rotateX(40deg) translateZ(-130px)}.orbit-three{width:800px;height:480px;left:-400px;top:-240px;transform:rotate(12deg) rotateX(52deg) translateZ(-160px)}.era-label{position:absolute;font-size:12px;letter-spacing:7px;color:#9caec6;white-space:nowrap;pointer-events:none;transform:translateZ(-180px)}.roots{left:-670px;top:-440px}.future{left:530px;top:410px}.planet{position:absolute;left:0;top:0;width:180px;margin-left:-90px;margin-top:-75px;transform:translate3d(var(--x),var(--y),var(--z));text-align:center;background:none;padding:0;transition:opacity .65s,filter .65s;pointer-events:auto;z-index:2}.sphere-wrap{display:block;position:relative;width:var(--size);height:var(--size);margin:0 auto 16px;animation:float 9s ease-in-out infinite;animation-delay:var(--delay)}.sphere{width:100%;height:100%;display:grid;place-items:center;border-radius:50%;background:radial-gradient(circle at 29% 22%,#fff 0%,#ffffffeb 13%,#eef4fbd9 39%,#c7d9efcb 72%,#9db8dccc 91%,#e4f2ff 100%);box-shadow:inset 6px 7px 15px #ffffffee,inset -7px -9px 17px #8ca8cd55,0 12px 30px #6788b32b,0 0 60px #d2e4f954;border:1px solid #fff;color:#6686b0;font-size:calc(var(--size)*.28);font-weight:400;letter-spacing:-2px;position:relative;transition:box-shadow .6s,transform .6s}.sphere:before{content:'';position:absolute;inset:7%;border-radius:50%;border:1px solid #ffffff8c;pointer-events:none}.sphere:after{content:'';position:absolute;inset:-10px;border:1px solid #afc7e347;border-radius:50%;opacity:0;transition:opacity .5s}.planet:hover .sphere,.planet:focus-visible .sphere{transform:scale(1.07)}.planet.selected .sphere:after{opacity:1}.planet.selected .sphere{box-shadow:inset 6px 7px 15px #fff,inset -7px -9px 17px #8ca8cd55,0 14px 45px #779dcc4d,0 0 80px #c5dffd78}.planet.core .sphere{background:radial-gradient(circle at 27% 20%,#fff,#f8fbff 20%,#dae7f6 47%,#8eb0dba8 78%,#c8e4ff 100%);color:#426a9d}.planet.warm .sphere{background:radial-gradient(circle at 29% 22%,#fff,#fff9f0 32%,#e9d4b6bf 76%,#f9e6c8);color:#a48a67;box-shadow:inset 5px 6px 14px #fff,inset -6px -8px 15px #c7a77b3b,0 12px 30px #b89e7b26}.planet-name{display:block;font-size:14px;font-weight:600;letter-spacing:-.35px;line-height:1.4;color:#38516f;text-shadow:0 1px 12px #ffffff}.planet-years{display:block;font-size:10px;color:#8194ad;letter-spacing:1px;margin-top:5px}.planet-role{display:block;font-size:8px;color:#8ba1bb;letter-spacing:2px;margin-bottom:10px;text-transform:uppercase}.planet.core .planet-name{font-size:20px}.planet.selected .planet-name{color:#355e95}.planet.dim{opacity:.35;filter:blur(.3px)}header{position:fixed;left:0;right:0;top:0;padding:30px 4vw;display:flex;align-items:center;justify-content:space-between;gap:20px;z-index:10;pointer-events:none}header>*{pointer-events:auto}.brand{font-size:13px;letter-spacing:5px;position:relative;padding-left:20px}.brand i{position:absolute;left:0;top:7px;width:6px;height:6px;background:#486fbb}.brand span{display:block;font-size:6px;letter-spacing:3px;color:#8396af;margin-top:8px}.view-toggle{display:flex;gap:4px;padding:5px;border:1px solid #fff;background:#ffffff70;backdrop-filter:blur(15px);border-radius:30px;box-shadow:0 5px 20px #8ba1bf0d}.view-toggle button{background:transparent;font-size:11px;padding:11px 20px;border-radius:25px;color:#8191a7}.view-toggle button.active{background:#fff;color:#426496;box-shadow:0 3px 12px #7892b521}.round{width:43px;height:43px;display:grid;place-items:center;border:1px solid #ffffff;background:#ffffff8c;border-radius:50%;color:#6c85a8}.round svg{width:18px;fill:none;stroke:currentColor;stroke-width:1.4}.intro{position:fixed;left:4vw;top:150px;pointer-events:none;z-index:3;transition:opacity .7s}.eyebrow{font-size:8px;letter-spacing:2.7px;color:#8b9cb3}.intro h1{font-size:clamp(32px,3.4vw,56px);font-weight:400;letter-spacing:-2.7px;line-height:1.15;margin:20px 0 16px}.intro h1 em{font-style:normal;color:#8ba1bd}.intro p{font-size:12px;color:#8a99ae;line-height:1.8}.live-label{margin-top:30px;display:flex;gap:6px;align-items:center;font-size:10px;color:#8195ae}.live-label i{width:5px;height:5px;border-radius:50%;background:#82a6cf;margin-right:4px;box-shadow:0 0 0 4px #8faed21a}.person{position:fixed;right:4vw;top:50%;transform:translateY(-50%);width:260px;padding:25px;background:linear-gradient(140deg,#ffffffb8,#ffffff42);border:1px solid #ffffffd4;backdrop-filter:blur(24px);border-radius:23px;box-shadow:0 12px 50px #6c8aad0d;z-index:6;animation:appear .6s}.person .eyebrow{font-size:7px;letter-spacing:2px}.person h2{font-size:26px;font-weight:500;line-height:1.25;letter-spacing:-1.2px;margin:14px 0 8px}.person .relation{font-size:10px;color:#8da0b8}.person .dates{font-size:11px;line-height:1.9;color:#6e86a4;margin:22px 0 17px}.person .life{font-size:11px;color:#8193aa;line-height:1.85;border-top:1px solid #dce6f2;padding-top:17px}.person .open-story{display:flex;justify-content:space-between;align-items:center;width:100%;background:#496fa7;color:#fff;font-size:11px;border-radius:25px;padding:12px 16px;margin-top:22px}.person .open-story span{font-size:17px}.family-links{display:flex;flex-wrap:wrap;gap:6px;margin-top:15px}.family-links button{font-size:9px;background:#ffffff9e;border:1px solid #dae5f2;border-radius:20px;padding:7px 9px;color:#6684a9}.bottom-bar{position:fixed;bottom:65px;left:4vw;right:4vw;display:flex;align-items:end;justify-content:space-between;gap:20px;z-index:8;pointer-events:none}.bottom-bar>*{pointer-events:auto}.travel>span{font-size:7px;letter-spacing:2.1px;color:#94a3b8}.timeline{display:flex;align-items:center;gap:12px;margin-top:15px}.timeline button{background:none;font-size:11px;padding:5px 0;color:#91a0b5}.timeline button.active{color:#486c9e}.timeline button.active:before{content:'';display:block;position:absolute;margin-top:24px;width:17px;height:2px;background:#668bbb}.timeline i{width:36px;height:1px;background:#cbd8e8}.tools{display:flex;align-items:center;gap:3px;border:1px solid #fff;background:#ffffff85;backdrop-filter:blur(15px);border-radius:30px;padding:5px;box-shadow:0 5px 20px #7793b20d}.tools button{height:35px;min-width:35px;background:none;border-radius:50%;font-size:19px;color:#7690b3}.tools button:hover{background:white}.tools #home{padding:0 13px;font-size:19px;border-right:1px solid #dde7f3;border-radius:0;display:flex;align-items:center;gap:9px}.tools #home span{font-size:10px}.tools>span{font-size:9px;color:#8c9db4;min-width:32px;text-align:center}footer{position:fixed;bottom:23px;left:4vw;right:4vw;display:flex;justify-content:space-between;pointer-events:none;color:#9aa9bc;font-size:8px;letter-spacing:.5px}footer span:last-child{font-size:6px;letter-spacing:1.4px}.search-panel{position:fixed;right:4vw;top:95px;width:300px;max-height:65vh;overflow:auto;background:#f9fcffed;border:1px solid #fff;backdrop-filter:blur(20px);border-radius:20px;padding:21px;z-index:20;box-shadow:0 20px 70px #47698f22}.search-panel label{font-size:11px;color:#7389a7}.search-panel input{width:100%;font-size:16px;border:1px solid #dae5f1;border-radius:10px;background:white;padding:11px;margin:14px 0;color:#355277}.search-panel #results button{display:block;width:100%;text-align:left;background:none;padding:11px 5px;font-size:12px;border-bottom:1px solid #e4edf6}.search-panel #results button small{display:block;color:#95a5b9;font-size:9px;margin-top:5px}dialog{width:min(520px,92vw);max-height:85dvh;overflow:auto;border:1px solid #fff;background:#f7fbfff5;border-radius:25px;padding:38px;box-shadow:0 30px 100px #45678c33;color:#3a5577}dialog::backdrop{background:#45678c30;backdrop-filter:blur(10px)}.close{position:absolute;right:15px;top:13px;width:34px;height:34px;background:white;border-radius:50%;font-size:24px;color:#7e95b2}dialog h2{font-size:32px;font-weight:500;letter-spacing:-1.5px;margin:15px 0}dialog p{font-size:13px;line-height:1.9;color:#6d85a3}dialog .note{background:#fff4e5;padding:12px;border-radius:10px;color:#987747;font-size:11px}.story-monogram{width:100px;height:100px;border-radius:50%;display:grid;place-items:center;background:radial-gradient(circle at 30% 20%,white,#c7dcf4);color:#6a8bb5;font-size:35px;margin-bottom:30px;border:1px solid white}.story-meta{font-size:11px!important;color:#8a9eb7!important}.paused .sphere-wrap{animation-play-state:paused}.focused .intro{opacity:.25}@keyframes float{0%,100%{transform:translateY(-5px)}50%{transform:translateY(5px)}}@keyframes appear{from{opacity:0}to{opacity:1}}
@media(max-width:1050px){.person{right:3vw;width:225px;padding:21px}.intro{left:3vw;top:125px}.intro h1{font-size:37px}.person h2{font-size:23px}.timeline i{width:22px}}
@media(max-width:700px){header{padding:23px 20px;gap:10px}.brand{font-size:10px;letter-spacing:3px;padding-left:14px}.brand span{font-size:5px;letter-spacing:1.8px}.brand i{width:5px;height:5px;top:5px}.view-toggle{padding:3px;gap:0}.view-toggle button{font-size:9px;padding:10px 11px}.round{width:34px;height:34px;flex-shrink:0}.intro{left:22px;top:100px}.intro .eyebrow{font-size:6px;letter-spacing:2px}.intro h1{font-size:32px;letter-spacing:-1.6px;margin:12px 0 10px}.intro p{font-size:10px;margin-top:0}.live-label{margin-top:12px;font-size:8px}.person{left:16px;right:16px;top:auto;bottom:120px;transform:none;width:auto;padding:16px 19px;border-radius:19px;display:grid;grid-template-columns:1fr auto;column-gap:15px;max-height:170px;overflow:auto}.person .eyebrow{grid-column:1;font-size:6px;letter-spacing:1.5px}.person h2{grid-column:1;font-size:21px;line-height:1.2;margin:7px 0 4px}.person .relation{grid-column:1;font-size:8px}.person .dates{grid-column:2;grid-row:1/4;align-self:center;font-size:9px;text-align:right;max-width:105px;margin:0}.person .life,.person .family-links{display:none}.person .open-story{grid-column:1/-1;margin-top:11px;padding:9px 14px;font-size:10px}.bottom-bar{left:20px;right:20px;bottom:52px;gap:10px;align-items:center}.travel>span{display:none}.timeline{gap:8px;margin:0}.timeline button{font-size:9px}.timeline i{width:10px}.tools{padding:3px;gap:0}.tools button{height:31px;min-width:29px;font-size:17px}.tools>span{min-width:27px;font-size:8px}.tools #home{padding:0 7px}.tools #home span{display:none}.tools #motion{display:none}footer{bottom:20px;left:20px;right:20px;font-size:7px}footer span:last-child{font-size:5px;letter-spacing:.5px;max-width:130px;text-align:right}.search-panel{right:16px;top:80px;width:calc(100vw - 32px)}.focused .intro{opacity:0}.planet-role{font-size:8px}.sphere-wrap{margin-bottom:12px}.planet-name{font-size:14px}.planet.core .planet-name{font-size:19px}}
@media(max-width:360px){header{padding:20px 14px}.view-toggle button{padding:9px;font-size:8px}.timeline{gap:5px}.timeline i{width:6px}.tools button{min-width:25px}.tools>span{min-width:24px}.bottom-bar{left:15px;right:15px}}
@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}.world{will-change:auto}}
.planet-name{font-size:calc(14px * var(--readability,1))}.planet.core .planet-name{font-size:calc(20px * var(--readability,1))}.planet-years{font-size:calc(10px * var(--readability,1))}.planet-role{font-size:calc(8px * var(--readability,1))}@media(max-width:700px){body:not(.focused) .planet-role,body:not(.focused) .planet-years{display:none}body:not(.focused) .planet-name{line-height:1.2}.planet.core .planet-name{font-size:calc(19px * var(--readability,1))}}
/* Direct touch tracking must not lag behind the fingers. */
.cosmos,.cosmos *{touch-action:none;-webkit-user-select:none;user-select:none}.cosmos.gesturing .world{transition:none}.cosmos.gesturing{cursor:grabbing}.world{transition:transform 1.65s cubic-bezier(.16,.8,.18,1)}
/* Slow orbital light, breathing atmosphere and independent planet float. */
.starfield{animation:stellar-drift 50s linear infinite alternate}.ambient.a{animation:nebula-breathe 16s ease-in-out infinite alternate}.ambient.b{animation:nebula-breathe 21s ease-in-out -8s infinite alternate}.sphere-wrap{animation:planet-drift 10s ease-in-out infinite;animation-delay:var(--delay)}.sphere:before{background:linear-gradient(125deg,transparent 20%,#ffffff70 42%,transparent 64%);background-size:240% 100%;animation:glass-light 12s ease-in-out infinite;animation-delay:var(--delay)}.planet.selected .sphere:after{animation:selection-pulse 5s ease-in-out infinite}.orbit:after{content:'';position:absolute;left:50%;top:50%;width:9px;height:9px;border-radius:50%;background:#9bbdeabf;box-shadow:0 0 14px #82b1f3a8,0 0 35px #82b1f33b;animation:orbit-light 38s linear infinite;--radius:650px}.orbit-two:after{--radius:925px;width:6px;height:6px;animation-duration:62s;animation-direction:reverse;background:#d4ba92}.orbit-three:after{--radius:400px;animation-duration:27s;width:7px;height:7px}.world path:not(.partner){stroke-dasharray:5 8;animation:connection-flow 28s linear infinite}.world path.uncertain{stroke-dasharray:4 6}.person h2{margin-bottom:14px}@keyframes planet-drift{0%,100%{transform:translate3d(-3px,-9px,0) rotate(-2deg)}50%{transform:translate3d(4px,9px,0) rotate(2deg)}}@keyframes stellar-drift{from{transform:translate3d(-8px,-12px,0)}to{transform:translate3d(18px,14px,0)}}@keyframes nebula-breathe{from{transform:translate3d(-2%,0,0) scale(.95);opacity:.65}to{transform:translate3d(4%,3%,0) scale(1.12);opacity:1}}@keyframes glass-light{0%,100%{background-position:120% 50%;opacity:.35}50%{background-position:-40% 50%;opacity:.8}}@keyframes selection-pulse{0%,100%{transform:scale(1);opacity:.4}50%{transform:scale(1.07);opacity:.85}}@keyframes orbit-light{from{transform:rotate(0deg) translateX(var(--radius)) scaleY(.65)}to{transform:rotate(360deg) translateX(var(--radius)) scaleY(.65)}}@keyframes connection-flow{to{stroke-dashoffset:-130}}
.paused .starfield,.paused .ambient,.paused .orbit:after,.paused .sphere:before,.paused .sphere:after,.paused .world path{animation-play-state:paused}@media(max-width:700px){.tools #motion{display:block;min-width:25px;font-size:12px}.person .dates{grid-row:1/3}.person h2{margin-bottom:0}.planet-name{margin-top:6px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
/* Original family portraits: display crop only; source images remain unchanged. */
.sphere.has-photo{padding:5px;background:linear-gradient(135deg,#fff,#cfdef1)}.sphere.has-photo img{display:block;width:100%;height:100%;border-radius:50%;object-fit:cover;object-position:50% 32%;pointer-events:none}.sphere.has-photo:before{z-index:1;inset:0;box-shadow:inset 2px 2px 8px #fff8,inset -3px -4px 9px #446b9340;background:none;animation:none}.person-photo{display:block;width:92px;height:92px;border-radius:50%;padding:4px;background:#fff;border:1px solid #dfe9f5;margin-bottom:22px;box-shadow:0 8px 25px #597ba51a}.person-photo img{display:block;width:100%;height:100%;object-fit:cover;object-position:50% 32%;border-radius:50%}.story-monogram.has-photo{display:block;width:180px;height:220px;border-radius:22px;padding:5px;background:#fff;box-shadow:0 10px 30px #607f9f1a}.story-monogram.has-photo img{width:100%;height:100%;object-fit:cover;object-position:50% 30%;border-radius:17px;display:block}@media(max-width:700px){.person-photo{grid-column:1;grid-row:1/4;width:58px;height:58px;margin:0 12px 0 0}.person:has(.person-photo){grid-template-columns:58px 1fr auto;column-gap:10px}.person:has(.person-photo) .eyebrow,.person:has(.person-photo) h2{grid-column:2}.person:has(.person-photo) h2{font-size:18px}.person:has(.person-photo) .dates{grid-column:3;grid-row:1/4;font-size:8px}.person:has(.person-photo) .open-story{grid-column:1/-1}.person:has(.person-photo) .eyebrow{font-size:5px;letter-spacing:.8px}.story-monogram.has-photo{width:150px;height:190px}}@media(max-width:360px){.person:has(.person-photo){grid-template-columns:48px 1fr}.person-photo{width:48px;height:48px}.person:has(.person-photo) .dates{grid-column:2;grid-row:3;text-align:left;max-width:none;display:flex;gap:6px;flex-wrap:wrap;font-size:8px}.person:has(.person-photo) h2{font-size:17px}}
.sphere.has-photo{display:block;overflow:hidden}.sphere.has-photo img{min-width:0;min-height:0;aspect-ratio:1}
.unlock-dialog{width:min(440px,calc(100vw - 32px));padding:38px}.unlock-dialog h2{font-size:31px}.unlock-dialog label{display:block;font-size:12px;margin:22px 0 9px;color:#7188a5}.unlock-dialog input{width:100%;font:16px Manrope,Arial,sans-serif;padding:13px 15px;border:1px solid #cddcec;border-radius:12px;background:#fff;color:#355277}.unlock-dialog form>button{width:100%;padding:13px;border:0;border-radius:25px;background:#496fa7;color:white;margin-top:9px;min-height:44px}.unlock-dialog form>button:disabled{opacity:.55}.unlock-dialog #unlock-error{color:#a25151;font-size:12px;min-height:20px;margin:10px 0}
.full-family .planet-years{white-space:pre-line;line-height:1.65;letter-spacing:.2px}.anniversaries{padding:14px 0;border-top:1px solid #dce6f2;border-bottom:1px solid #dce6f2;margin:16px 0;grid-column:1/-1}.anniversaries h3{font:600 10px Manrope,Arial,sans-serif;color:#6681a4;margin:0 0 10px;letter-spacing:.5px}.anniversary-row{display:flex;align-items:baseline;justify-content:space-between;gap:12px;font-size:10px;line-height:1.7;color:#8295ad}.anniversary-row+ .anniversary-row{margin-top:5px}.anniversary-row strong{font-weight:600;color:#52739c;white-space:nowrap}#story .anniversaries{background:#edf4fd;border:1px solid #d9e6f6;padding:16px;border-radius:14px}#story .anniversaries h3{font-size:12px}#story .anniversary-row{font-size:12px}#story .story-meta{white-space:pre-line}@media(max-width:700px){.full-family .person{max-height:235px}.person .anniversaries{margin:10px 0 0;padding:10px 0 0;border-bottom:0}.person .anniversaries h3{display:none}.person .anniversary-row{font-size:9px;line-height:1.5}.person .open-story{grid-row:auto}}@media(prefers-reduced-motion:reduce){.anniversaries{transition:none}}
