@font-face{font-family:GiaoLong;src:url('../fonts/ThuPhapGiaoLong.ttf') format('truetype');font-display:swap}
:root{--primary:#8b1e24;--primary-dark:#5e1117;--secondary:#65463c;--gold:#b8892e;--paper:#f5ebdd;--surface:#fff9ef;--surface-strong:#fffdf8;--border:#d7bfa2;--ink:#3b211d;--muted:#80675d;--error:#b42318;--success:#2f6b43;--blue:#2f5f84;--font-ui:"Segoe UI",Arial,"Helvetica Neue",system-ui,sans-serif;--font-heading:"Segoe UI",Arial,"Helvetica Neue",system-ui,sans-serif;--shadow:0 10px 28px rgb(88 29 24 / .08);--shadow-hover:0 18px 42px rgb(88 29 24 / .14);--radius:16px}
*{box-sizing:border-box;border-color:var(--border)}
html{background:var(--paper);scroll-behavior:smooth}
body{margin:0;min-height:100vh;color:var(--ink);font:16px/1.6 var(--font-ui);background-color:var(--paper);background-image:radial-gradient(circle at 12% 8%,rgb(184 137 46/.1),transparent 28%),radial-gradient(circle at 88% 0%,rgb(139 30 36/.08),transparent 32%),linear-gradient(rgb(139 30 36/.025) 1px,transparent 1px),linear-gradient(90deg,rgb(139 30 36/.025) 1px,transparent 1px);background-size:auto,auto,32px 32px,32px 32px}
a{color:var(--primary);text-decoration:none}button,a,select{cursor:pointer}img{max-width:100%}button,input,textarea,select{font:inherit}button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible,select:focus-visible{outline:2px solid var(--primary);outline-offset:3px}
.site-shell{min-height:100vh;display:flex;flex-direction:column}.container{width:min(1280px,100%);margin-inline:auto;padding-inline:24px}.main{flex:1;padding-block:32px 56px}.narrow{width:min(760px,100%);margin-inline:auto}.muted{color:var(--muted)}.small{font-size:.875rem}.center{text-align:center}.text-right{text-align:right}.hidden{display:none!important}.stack{display:grid;gap:20px}.row{display:flex;align-items:center;gap:12px;flex-wrap:wrap}.row-between{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.grow{flex:1}.mt{margin-top:24px}.mb{margin-bottom:24px}
.public-header,.app-header{position:sticky;top:0;z-index:40;backdrop-filter:blur(18px);box-shadow:var(--shadow)}.public-header{background:rgb(255 249 239/.94);border-top:6px solid var(--primary-dark);border-bottom:1px solid var(--border)}.app-header{background:rgb(94 17 23/.96);border-bottom:1px solid rgb(184 137 46/.5)}.header-inner{height:74px;display:flex;align-items:center;justify-content:space-between;gap:18px}.brand{display:flex;align-items:center;gap:12px;min-width:0}.brand-seal{width:44px;height:44px;flex:0 0 44px;display:grid;place-items:center;border-radius:50%;background:var(--primary);border:1px solid var(--gold);box-shadow:inset 0 0 0 3px var(--primary),inset 0 0 0 4px rgb(184 137 46/.75),var(--shadow);color:var(--surface);font-weight:800}.app-header .brand-seal{background:var(--surface);color:var(--primary-dark);box-shadow:inset 0 0 0 3px var(--surface),inset 0 0 0 4px rgb(184 137 46/.8),var(--shadow)}.brand-title{font-family:GiaoLong,"Segoe UI",sans-serif;font-size:28px;font-weight:400;line-height:1.05;color:var(--primary-dark);white-space:nowrap}.app-header .brand-title{color:var(--surface)}
.nav{display:flex;align-items:center;gap:4px}.nav a,.nav button{padding:9px 12px;border-radius:11px;color:var(--secondary);font-weight:650;font-size:14px;background:transparent;border:0}.nav a:hover,.nav a.active{background:rgb(139 30 36/.08);color:var(--primary)}.app-header .nav a,.app-header .nav button{color:#fff4dc}.app-header .nav a:hover,.app-header .nav a.active,.app-header .nav button:hover{background:rgb(255 255 255/.12);color:#ffe39a}.nav-menu-button{display:none!important;width:44px;height:44px;padding:0!important;border:1px solid var(--border)!important;font-size:22px}.app-header .nav-menu-button{border-color:rgb(255 255 255/.25)!important}.inline-form{display:inline;margin:0}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:11px 17px;border-radius:12px;border:1px solid var(--border);background:rgb(255 249 239/.75);color:var(--primary);font-weight:700;transition:.2s ease;line-height:1.2}.btn:hover{transform:translateY(-1px);background:var(--surface-strong);box-shadow:var(--shadow)}.btn-primary{background:var(--primary);border-color:var(--primary-dark);color:var(--surface)}.btn-primary:hover{background:var(--primary-dark);color:#fff}.btn-gold{background:var(--gold);border-color:#8a641f;color:var(--ink)}.btn-danger{background:#fff0ee;border-color:#e9aaa5;color:var(--error)}.btn-sm{padding:7px 11px;border-radius:9px;font-size:13px}.btn-block{width:100%}
.hero-wrap{padding:32px 0 62px}.hero{position:relative;overflow:hidden;min-height:540px;display:grid;grid-template-columns:1.12fr .88fr;align-items:center;gap:56px;padding:64px;border-radius:32px;border:1px solid var(--primary-dark);background:radial-gradient(circle at 80% 20%,rgb(184 137 46/.22),transparent 28%),linear-gradient(135deg,var(--primary-dark),var(--primary) 58%,#74171d);box-shadow:var(--shadow-hover);color:var(--surface)}.hero:before{content:"";position:absolute;inset:0;background-image:linear-gradient(45deg,rgb(255 249 239/.035) 25%,transparent 25%),linear-gradient(-45deg,rgb(255 249 239/.035) 25%,transparent 25%);background-size:28px 28px}.hero>*{position:relative}.hero-kicker,.section-kicker{display:inline-flex;align-items:center;gap:8px;font-size:12px;font-weight:800;text-transform:uppercase;letter-spacing:.18em}.hero-kicker{border:1px solid rgb(184 137 46/.55);background:rgb(255 255 255/.08);padding:7px 14px;border-radius:999px;color:#ffe5a1}.section-kicker{color:var(--primary)}.hero h1{font-family:var(--font-heading);font-size:clamp(50px,6vw,80px);font-weight:800;line-height:1.14;margin:24px 0 14px}.hero p{color:rgb(255 249 239/.84);font-size:18px;line-height:1.8}.hero-actions{display:flex;gap:12px;flex-wrap:wrap;margin-top:30px}.hero-card-wrap{padding:18px;border:1px solid rgb(184 137 46/.4);background:rgb(255 255 255/.08);border-radius:30px}.hero-card{background:var(--surface);color:var(--ink);padding:32px;border-radius:24px;border:1px solid rgb(184 137 46/.4);box-shadow:var(--shadow)}.hero-card blockquote{margin:26px 0 8px;padding-top:24px;border-top:1px solid var(--border);font-size:28px;font-weight:800;color:var(--primary-dark)}
.section{padding:64px 0}.section-alt{border-block:1px solid var(--border);background:rgb(255 249 239/.66)}.section-heading{text-align:center;max-width:780px;margin:0 auto 36px}.section-heading h2{font-size:clamp(29px,4vw,40px);line-height:1.25;color:var(--primary-dark);margin:12px 0}.grid{display:grid;gap:20px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}.card,.panel{background:rgb(255 249 239/.94);border:1px solid var(--border);border-radius:24px;padding:24px;box-shadow:inset 0 0 0 1px rgb(255 255 255/.45),var(--shadow)}.card{transition:.25s ease}.card:hover{transform:translateY(-3px);border-color:rgb(139 30 36/.3);box-shadow:var(--shadow-hover)}.feature{text-align:center}.icon-seal{width:52px;height:52px;display:grid;place-items:center;margin:0 auto 16px;border-radius:15px;background:var(--primary);border:1px solid var(--primary-dark);color:var(--surface);font-size:24px;box-shadow:inset 0 0 0 2px rgb(255 249 239/.2),var(--shadow)}.feature h3{font-size:20px;color:var(--primary-dark);margin:6px 0}.feature p{font-size:14px;color:var(--muted);margin:0}
.page-title{position:relative;margin:0;color:var(--primary-dark);font-size:30px;line-height:1.25;padding-bottom:12px}.page-title:after{content:"";position:absolute;bottom:0;left:0;width:54px;height:2px;border-radius:99px;background:linear-gradient(90deg,var(--primary),var(--gold))}.page-head{margin-bottom:28px}.page-head p{margin:10px 0 0;color:var(--muted)}
.alert{padding:13px 16px;border-radius:12px;border:1px solid;margin-bottom:16px}.alert-success{background:#eff8f1;border-color:#acd0b7;color:#245b36}.alert-error{background:#fff0ee;border-color:#eeb5b0;color:#8d1e18}.alert-info{background:#fff7df;border-color:#e4c675;color:#674914}
.auth-shell{width:min(1040px,calc(100% - 32px));margin:42px auto;display:grid;grid-template-columns:.86fr 1.14fr;overflow:hidden;border-radius:28px;border:1px solid var(--border);box-shadow:var(--shadow-hover);background:var(--surface)}.auth-aside{background:linear-gradient(145deg,var(--primary-dark),var(--primary));color:white;padding:52px 38px;display:flex;flex-direction:column;justify-content:space-between}.auth-aside .brand-title{font-size:42px;color:white;white-space:normal}.auth-aside p{color:rgb(255 255 255/.78)}.auth-main{padding:45px}.auth-main h1{color:var(--primary-dark);margin:0 0 6px}.oauth-grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin:24px 0}.oauth-google,.oauth-zalo{color:#2c2c2c;background:#fff}.oauth-zalo{border-color:#96bfff;color:#075fb6}.divider{display:flex;align-items:center;gap:12px;color:var(--muted);font-size:13px;margin:22px 0}.divider:before,.divider:after{content:"";height:1px;flex:1;background:var(--border)}
.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.field{display:grid;gap:7px}.field-full{grid-column:1/-1}.field label{font-size:13px;font-weight:750;color:var(--secondary)}.field input,.field select,.field textarea{width:100%;border:1px solid var(--border);border-radius:11px;background:var(--surface-strong);color:var(--ink);padding:11px 12px}.field textarea{min-height:105px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--primary);box-shadow:0 0 0 3px rgb(139 30 36/.08)}.check{display:flex;gap:8px;align-items:center;font-size:14px}.check input{width:18px;height:18px;accent-color:var(--primary)}.form-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:24px;flex-wrap:wrap}
.dashboard-summary{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:30px}.stat-card{padding:20px;border-radius:20px;border:1px solid var(--border);background:var(--surface);box-shadow:var(--shadow);text-align:center}.stat-card strong{display:block;font-size:32px;line-height:1.2;color:var(--primary-dark)}.stat-card span{font-size:13px;color:var(--muted)}.launch-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.launch-card{display:flex;flex-direction:column;align-items:center;text-align:center}.launch-card h3{margin:4px 0;color:var(--primary-dark)}.launch-card p{margin:5px 0;color:var(--muted);font-size:14px}.admin-label{text-align:center;color:var(--primary);font-size:20px;margin:38px 0 18px}
.toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:18px}.toolbar .search{flex:1;min-width:210px}.segmented{display:flex;background:var(--surface);border:1px solid var(--border);padding:3px;border-radius:12px}.segmented button{border:0;background:transparent;color:var(--muted);padding:8px 12px;border-radius:9px;font-weight:700}.segmented button.active{background:var(--primary);color:white}.search{border:1px solid var(--border);background:var(--surface);border-radius:12px;padding:10px 12px;color:var(--ink)}
.member-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:15px}.member-card{display:flex;align-items:center;gap:14px}.avatar{width:58px;height:58px;flex:0 0 58px;border-radius:50%;object-fit:cover;background:#f1e3d2;border:2px solid var(--border)}.member-card h3{font-size:16px;margin:0;color:var(--primary-dark)}.member-card p{font-size:13px;margin:3px 0;color:var(--muted)}.badge{display:inline-flex;padding:3px 8px;border-radius:99px;background:#f1e3d2;color:var(--secondary);font-size:11px;font-weight:750}.badge-live{background:#eaf5ec;color:#28613a}.badge-dead{background:#eee9e5;color:#65564e}.badge-draft{background:#fff3d1;color:#745417}.badge-published{background:#eaf5ec;color:#28613a}.badge-admin{background:#f8d8d4;color:#74171d}.badge-editor{background:#e9e7f7;color:#4c3f85}
.table-wrap{overflow:auto;border:1px solid var(--border);border-radius:18px;background:var(--surface)}table{width:100%;border-collapse:collapse;min-width:680px}th,td{padding:13px 14px;text-align:left;border-bottom:1px solid #ead9c7;vertical-align:top}th{background:#f1e3d2;color:var(--secondary);font-size:12px;text-transform:uppercase;letter-spacing:.06em}tr:last-child td{border-bottom:0}tbody tr:hover{background:#fffdf8}
.tree-shell{height:68vh;min-height:500px;overflow:auto;border:1px solid var(--border);border-radius:22px;background-color:#fbf4e9;background-image:radial-gradient(rgb(139 30 36/.14) 1px,transparent 1px);background-size:22px 22px;padding:28px}.tree-canvas{min-width:900px;display:grid;gap:48px}.tree-generation{display:flex;justify-content:center;gap:18px;position:relative}.tree-generation:before{content:"";position:absolute;top:-24px;left:8%;right:8%;height:1px;background:var(--gold)}.tree-generation:first-child:before{display:none}.tree-node{width:170px;position:relative;text-align:center;background:var(--surface);border:1px solid var(--border);border-radius:17px;padding:13px;box-shadow:var(--shadow);color:var(--ink)}.tree-node:before{content:"";position:absolute;width:1px;height:25px;background:var(--gold);left:50%;top:-25px}.tree-generation:first-child .tree-node:before{display:none}.tree-node img{width:48px;height:48px;border-radius:50%;object-fit:cover;border:2px solid var(--border)}.tree-node strong{display:block;font-size:14px;color:var(--primary-dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tree-node span{font-size:11px;color:var(--muted)}.tree-node.in-law{border-style:dashed}.tree-legend{display:flex;gap:16px;font-size:12px;color:var(--muted);margin-top:12px}.tree-empty{text-align:center;padding:60px;color:var(--muted)}
.mindmap-shell{min-height:560px;overflow:auto;border:1px solid var(--border);border-radius:22px;background:#fbf4e9;padding:30px}.mindmap-tree{min-width:900px}.mindmap-tree ul{position:relative;display:flex;justify-content:center;gap:22px;padding:32px 0 0;margin:0;list-style:none}.mindmap-tree ul:before{content:"";position:absolute;top:15px;left:10%;right:10%;height:1px;background:var(--gold)}.mindmap-tree>ul:before{display:none}.mindmap-tree li{position:relative;text-align:center}.mindmap-tree li:before{content:"";position:absolute;top:-17px;left:50%;height:17px;width:1px;background:var(--gold)}.mindmap-tree>ul>li:before{display:none}.mindmap-card{display:inline-flex;align-items:center;gap:9px;min-width:150px;max-width:190px;padding:10px 12px;border:1px solid var(--border);border-radius:999px;background:var(--surface);box-shadow:var(--shadow);color:var(--primary-dark);font-size:13px;font-weight:750}.mindmap-card img{width:34px;height:34px;border-radius:50%;object-fit:cover}.bubble-shell{min-height:560px;display:flex;align-content:center;align-items:center;justify-content:center;gap:18px;flex-wrap:wrap;padding:36px;border:1px solid var(--border);border-radius:22px;background:radial-gradient(circle at center,#fff9ef,#f1e3d2)}.family-bubble{width:128px;height:128px;border-radius:50%;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:12px;background:var(--surface);border:3px solid var(--gold);box-shadow:var(--shadow-hover);color:var(--primary-dark);transition:.2s}.family-bubble:hover{transform:scale(1.06);z-index:2}.family-bubble img{width:48px;height:48px;border-radius:50%;object-fit:cover}.family-bubble strong{max-width:100%;font-size:12px;line-height:1.2;margin-top:5px}.family-bubble span{font-size:10px;color:var(--muted)}
.detail-hero{display:grid;grid-template-columns:170px 1fr;gap:28px}.detail-avatar{width:170px;height:170px;border-radius:24px;object-fit:cover;border:3px solid var(--border)}.detail-hero h1{font-size:34px;margin:0;color:var(--primary-dark)}.details-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px;margin-top:24px}.detail-item{padding:14px;background:#fbf4e9;border:1px solid #ead7c1;border-radius:13px}.detail-item span{display:block;font-size:12px;color:var(--muted)}.detail-item strong{font-size:15px}
.gallery-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.gallery-card{padding:0;overflow:hidden}.gallery-card>a{display:block}.gallery-card img{width:100%;aspect-ratio:4/3;object-fit:cover;display:block}.gallery-body{padding:17px}.gallery-body h3{margin:0 0 5px;color:var(--primary-dark)}
.news-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:22px}.news-card{padding:0;overflow:hidden}.news-card img,.news-placeholder{width:100%;aspect-ratio:16/9;object-fit:cover;display:grid;place-items:center;background:linear-gradient(135deg,var(--primary-dark),var(--primary));color:#fff;font-family:GiaoLong;font-size:42px}.news-card-body{padding:20px}.news-card h2,.news-card h3{margin:7px 0;color:var(--primary-dark);line-height:1.35}.news-card p{color:var(--muted);font-size:14px}.meta{display:flex;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--muted)}.article{width:min(880px,100%);margin:auto;background:var(--surface);border:1px solid var(--border);border-radius:28px;padding:clamp(22px,5vw,54px);box-shadow:var(--shadow)}.article h1{color:var(--primary-dark);font-size:clamp(30px,5vw,46px);line-height:1.25;margin:10px 0 14px}.article-cover{width:100%;max-height:500px;object-fit:cover;border-radius:18px;margin:24px 0}.article-content{font-size:17px;line-height:1.85;overflow-wrap:anywhere}.article-content img{height:auto;border-radius:10px}.article-content table{min-width:0}.article-content blockquote{border-left:4px solid var(--gold);margin:22px 0;padding:10px 20px;background:#fff7df;color:var(--secondary)}
.chart-row{display:grid;grid-template-columns:150px 1fr 45px;align-items:center;gap:12px;margin:12px 0}.chart-bar{height:18px;background:#ead7c1;border-radius:99px;overflow:hidden}.chart-bar>span{display:block;height:100%;min-width:3px;background:linear-gradient(90deg,var(--primary),var(--gold));border-radius:99px}.kinship-path{display:flex;align-items:center;justify-content:center;gap:8px;flex-wrap:wrap;margin-top:24px}.kinship-node{padding:12px 15px;background:var(--surface);border:1px solid var(--border);border-radius:13px;font-weight:700;color:var(--primary-dark)}.kinship-edge{font-size:12px;color:var(--muted);text-align:center}.kinship-edge b{display:block;color:var(--gold);font-size:18px}
.footer{margin-top:auto;background:var(--primary-dark);color:#ffefd2;border-top:1px solid var(--gold);padding:27px 0}.footer-inner{display:flex;justify-content:space-between;gap:20px;align-items:center}.footer p{margin:0;color:rgb(255 239 210/.7);font-size:13px}.footer a{color:#ffe39a}
.empty{padding:45px;text-align:center;color:var(--muted)}.empty .icon-seal{margin-bottom:15px}.pagination{display:flex;justify-content:center;gap:7px;margin-top:25px}.danger-zone{border-color:#eeb5b0;background:#fff5f3}.danger-zone h3{color:var(--error)}code{background:#f1e3d2;border-radius:5px;padding:2px 5px}.tox-tinymce{border-color:var(--border)!important;border-radius:12px!important}
@media(max-width:1000px){.nav-links{display:none;position:absolute;top:69px;right:20px;width:min(330px,calc(100vw - 40px));padding:10px;background:var(--surface-strong);border:1px solid var(--border);border-radius:18px;box-shadow:var(--shadow-hover)}.app-header .nav-links{background:var(--primary-dark)}.nav-links.open{display:grid}.nav-menu-button{display:grid!important;place-items:center}.hero{grid-template-columns:1fr;padding:46px}.hero-copy{text-align:center}.hero-actions{justify-content:center}.grid-4,.member-grid{grid-template-columns:repeat(2,1fr)}.launch-grid,.gallery-grid,.news-grid{grid-template-columns:repeat(2,1fr)}.dashboard-summary{grid-template-columns:repeat(2,1fr)}}
@media(max-width:720px){.container{padding-inline:16px}.main{padding-top:22px}.brand-title{font-size:22px;max-width:220px;white-space:normal}.hero-wrap{padding-top:16px}.hero{padding:34px 22px;border-radius:24px}.hero p{font-size:16px}.hero-card{padding:24px}.section{padding:46px 0}.grid-2,.grid-3,.grid-4,.member-grid,.launch-grid,.gallery-grid,.news-grid,.form-grid{grid-template-columns:1fr}.dashboard-summary{grid-template-columns:repeat(2,1fr)}.auth-shell{grid-template-columns:1fr;margin-block:22px}.auth-aside{padding:28px}.auth-main{padding:28px 22px}.oauth-grid{grid-template-columns:1fr}.detail-hero{grid-template-columns:1fr;text-align:center}.detail-avatar{margin:auto}.details-grid{grid-template-columns:1fr}.footer-inner{display:grid;text-align:center;justify-content:center}.article{border-radius:18px}.toolbar{align-items:stretch}.toolbar>*{width:100%}.segmented button{flex:1}.page-title{font-size:26px}}
@media(max-width:420px){.brand-title{font-size:19px;max-width:190px}.dashboard-summary{grid-template-columns:1fr}.hero h1{font-size:45px}}
@media(prefers-reduced-motion:reduce){*{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important}}

/* ===== Giao diện kế thừa, được giữ nguyên trong cấu trúc V5 ===== */
.heritage-frame{position:relative;box-shadow:inset 0 0 0 1px rgb(255 255 255/.5),var(--shadow)}
.heritage-frame:after{content:"";position:absolute;inset:7px;pointer-events:none;border:1px solid rgb(184 137 46/.13);border-radius:inherit}
.seal-mark{width:56px;height:56px;display:inline-grid;place-items:center;border-radius:16px;background:var(--primary);border:1px solid var(--primary-dark);box-shadow:inset 0 0 0 2px rgb(255 249 239/.18),var(--shadow);color:var(--surface);font-size:25px;font-weight:800}

/* Dashboard account menu */
.account-menu{position:relative;z-index:80}.account-trigger{display:flex;align-items:center;gap:10px;min-width:245px;padding:7px 10px;border:1px solid rgb(255 255 255/.17);border-radius:14px;background:rgb(255 255 255/.08);color:#fff7e7;text-align:left}.account-trigger:hover{background:rgb(255 255 255/.13)}.account-trigger img,.account-avatar{width:38px;height:38px;flex:0 0 38px;border-radius:50%;object-fit:cover;border:1px solid rgb(255 255 255/.3)}.account-avatar{display:grid;place-items:center;background:var(--gold);color:var(--primary-dark);font-weight:850}.account-copy{display:grid;min-width:0;line-height:1.25;flex:1}.account-copy strong{font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.account-copy small{color:#e6cfc3;font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.account-dropdown{display:none;position:absolute;right:0;top:calc(100% + 10px);width:min(330px,calc(100vw - 32px));padding:8px;background:rgb(255 253 248/.99);border:1px solid var(--border);border-radius:20px;box-shadow:0 24px 60px rgb(58 17 14/.25);color:var(--ink)}.account-dropdown.open{display:block;animation:drop-in .16s ease-out}.account-summary{display:grid;gap:3px;padding:13px 13px 12px;border-bottom:1px solid #ead8c4}.account-summary span:not(.badge){font-size:12px;color:var(--muted);overflow-wrap:anywhere}.account-summary .badge{width:max-content}.menu-group{display:grid;padding:8px 0;border-bottom:1px solid #efe1d2}.menu-group:last-child{border:0}.menu-group>span{padding:4px 11px;color:#a1887b;font-size:10px;font-weight:850;letter-spacing:.14em}.menu-group a,.menu-logout{display:flex;width:100%;align-items:center;gap:9px;padding:9px 11px;border:0;border-radius:10px;background:transparent;color:var(--secondary);font-size:13px;font-weight:650;text-align:left}.menu-group a:hover,.menu-logout:hover{background:#faeee2;color:var(--primary)}.menu-logout{color:var(--error)}

/* Login/register */
.auth-page{position:relative;min-height:calc(100vh - 50px);display:flex;align-items:center;justify-content:center;padding:72px 16px 40px;overflow:hidden;background:var(--paper)}.auth-page:before{content:"";position:absolute;inset:0;background-image:radial-gradient(circle at center top,rgb(184 137 46/.13),transparent 42%),linear-gradient(rgb(139 30 36/.025) 1px,transparent 1px),linear-gradient(90deg,rgb(139 30 36/.025) 1px,transparent 1px);background-size:auto,32px 32px,32px 32px}.auth-page:after{content:"";position:absolute;inset:0 0 auto;height:7px;background:linear-gradient(90deg,var(--primary-dark),var(--primary),var(--primary-dark))}.auth-glow{position:absolute;top:-250px;left:50%;translate:-50% 0;width:620px;height:620px;border-radius:50%;background:rgb(184 137 46/.09);filter:blur(55px)}.auth-back,.auth-contact{position:absolute;top:24px;z-index:3;border-radius:999px}.auth-back{left:24px}.auth-contact{right:24px}.auth-card{z-index:2;width:min(450px,100%);padding:38px;border:1px solid var(--border);border-radius:28px;background:rgb(255 249 239/.96);box-shadow:0 25px 70px rgb(94 17 23/.14)}.auth-heading{text-align:center;margin-bottom:24px}.auth-heading .seal-mark{margin-bottom:18px}.auth-heading h1{margin:0;color:var(--primary-dark);font:800 36px/1.2 Georgia,serif}.auth-heading p{margin:9px 0 0;color:var(--muted);font-size:14px}.auth-form{gap:15px}.input-icon{position:relative}.input-icon>span{position:absolute;left:14px;top:50%;translate:0 -50%;z-index:1;color:var(--muted)}.input-icon input{padding:13px 14px 13px 43px}.auth-submit{padding:14px;margin-top:6px}.auth-card .divider{text-transform:uppercase;font-size:10px;font-weight:800;letter-spacing:.12em}.auth-card .divider span{white-space:nowrap}.auth-card .oauth-grid{margin:0}.oauth-grid .btn{padding:12px}.oauth-google b{color:#4285f4}.oauth-zalo b{display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:#0768d6;color:white}.auth-switch{display:block;margin-top:16px;padding:12px;border:1px solid var(--border);border-radius:12px;background:var(--surface-strong);text-align:center;font-size:14px;font-weight:750}.auth-note{text-align:center;color:var(--muted);font-size:11px;line-height:1.5;margin:14px 0 0}.auth-footer{padding:10px;background:transparent;border:0;color:var(--muted);text-align:center}.auth-footer p{margin:0;color:inherit;font-size:11px}

/* Dashboard */
.dashboard-main{padding-top:30px}.today-card{position:relative;display:grid;grid-template-columns:minmax(0,1.15fr) minmax(340px,.85fr);overflow:hidden;margin-bottom:38px;padding:18px;border:1px solid var(--border);border-radius:28px;background:rgb(255 249 239/.96);color:var(--ink);transition:.25s}.today-card:hover{box-shadow:var(--shadow-hover)}.dashboard-calendar{overflow:hidden;border:1px solid #dfc7b0;border-radius:18px;background:#fffdf9}.dashboard-calendar-title{padding:9px 15px;background:#f1b1b2;color:#32120f;text-align:center;font-size:13px;font-weight:900}.dashboard-calendar-columns{display:grid;grid-template-columns:1fr 1fr}.dashboard-calendar-side{min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:space-between;gap:10px;min-height:202px;padding:12px 14px 10px;text-align:center}.dashboard-calendar-side+ .dashboard-calendar-side{border-left:1px solid #e2d5ca}.dashboard-calendar-kind{width:100%;padding-bottom:9px;border-bottom:1px solid #eaded1;color:#a01824}.dashboard-calendar-side>strong{font-size:15px}.dashboard-calendar-number{color:#d90e34;font-size:70px;line-height:.92}.dashboard-calendar-side>span:last-child{font-size:13px}.lunar-calendar-side{background:#fffaf6}.today-events{min-width:0;display:flex;flex-direction:column;padding:8px 4px 4px 22px}.events-title{display:flex;align-items:center;gap:9px;margin-bottom:14px;color:var(--muted);font-size:12px;font-weight:800;letter-spacing:.07em;text-transform:uppercase}.events-title b{margin-left:auto;display:grid;place-items:center;min-width:28px;height:28px;padding:0 7px;border-radius:999px;background:#fff4dc;color:var(--gold);font-size:13px}.pulse-dot{width:8px;height:8px;border-radius:50%;background:#d79b25;box-shadow:0 0 0 6px rgb(215 155 37/.12)}.event-preview-grid{display:grid;grid-template-columns:1fr;gap:8px;max-height:245px;overflow:auto;padding-right:5px;scrollbar-width:thin}.event-preview{display:grid;grid-template-columns:38px minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px;border:1px solid transparent;border-radius:15px;background:#fbf8f2}.event-preview:hover{border-color:#dfc7b0;background:#fffaf4}.event-icon{width:38px;height:38px;display:grid;place-items:center;flex:0 0 38px;border-radius:12px;background:#fff4dc;color:var(--gold)}.event-preview-copy{display:grid;min-width:0}.event-preview strong{font-size:13px}.event-preview small{overflow:hidden;color:var(--muted);font-size:11px;text-overflow:ellipsis;white-space:nowrap}.event-countdown{padding:4px 7px;border-radius:999px;background:#fce8e8;color:var(--primary);font-size:10px;font-weight:800;white-space:nowrap}.empty-inline{min-height:170px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;text-align:center}.empty-inline small{color:var(--muted)}.dashboard-events-link{align-self:center;margin-top:auto;padding-top:12px;color:var(--primary);font-size:12px;font-weight:800}.dashboard-events-link:hover{text-decoration:underline}.launch-card.heritage-frame{padding:26px;min-height:190px}.admin-label{display:flex;align-items:center;justify-content:center;gap:12px}.admin-label span{width:34px;height:1px;background:#e4b7ac}

/* Members and interactive genealogy */
.members-page{flex:1;padding:16px 0 50px}.view-tabs{width:max-content;margin:0 auto 18px;padding:6px;border-radius:999px;background:rgb(255 249 239/.78);box-shadow:inset 0 2px 5px rgb(90 37 22/.08)}.view-tabs button{display:flex;align-items:center;gap:8px;padding:9px 22px;border-radius:999px}.view-tabs button.active{background:var(--primary);color:white;box-shadow:var(--shadow)}.tree-controls{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin:10px 0;padding:8px 0}.root-picker{display:flex;align-items:center;gap:9px;color:var(--muted);font-size:12px;font-weight:700}.root-picker select,.member-list-toolbar select{max-width:300px;padding:9px 32px 9px 12px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--ink)}.tree-actions{display:flex;gap:7px;align-items:center;flex-wrap:wrap}.btn-round{width:40px;height:40px;padding:0;border-radius:50%;font-size:18px}.display-menu{position:relative}.display-menu summary{list-style:none}.display-menu>div{position:absolute;right:0;top:calc(100% + 7px);z-index:20;width:190px;display:grid;gap:9px;padding:14px;border:1px solid var(--border);border-radius:16px;background:var(--surface-strong);box-shadow:var(--shadow-hover)}.display-menu label{display:flex;gap:7px;font-size:13px;color:var(--secondary)}.tree-shell{height:70vh;min-height:530px;padding:35px;background-color:#fbf4e9;background-image:radial-gradient(rgb(139 30 36/.14) 1px,transparent 1px);background-size:22px 22px}.tree-canvas{display:block;width:max-content;min-width:100%;padding:15px 50px 120px;transition:transform .2s}.family-branch{position:relative;display:flex;flex-direction:column;align-items:center}.family-unit{position:relative;z-index:2}.children-row{position:relative;display:flex;align-items:flex-start;justify-content:center;gap:30px;padding-top:62px}.children-row:before{content:"";position:absolute;top:31px;left:calc(50% / var(--children,1));right:calc(50% / var(--children,1));height:2px;background:var(--gold)}.children-row>.family-branch:before{content:"";position:absolute;top:-31px;left:50%;width:2px;height:31px;background:var(--gold)}.family-unit:after{content:"";position:absolute;left:50%;bottom:-31px;width:2px;height:31px;background:var(--gold)}.family-branch:not(:has(.children-row))>.family-unit:after{display:none}.couple-row{display:flex;align-items:center;justify-content:center;gap:7px}.marriage-link{width:26px;height:26px;display:grid;place-items:center;border-radius:50%;background:#fff2eb;border:1px solid #d9a392;color:var(--primary);font-size:11px}.tree-node{width:178px;display:flex;align-items:center;gap:9px;padding:10px;text-align:left}.tree-node:before{display:none}.tree-node img{width:44px;height:44px;flex:0 0 44px}.tree-node .node-copy{min-width:0}.tree-node strong{font-size:13px}.tree-node small{display:block;color:var(--muted);font-size:10px}.tree-node.deceased{filter:saturate(.45)}.tree-node.minimal{width:145px}.tree-node.minimal img{display:none}.mindmap-card .node-copy{display:grid;text-align:left}.mindmap-card small{font-size:9px;color:var(--muted)}.family-bubble{width:var(--bubble-size,128px);height:var(--bubble-size,128px)}.family-bubble .node-copy{display:grid}.family-bubble small{font-size:9px;color:var(--muted)}.member-list-toolbar{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:16px;margin:20px 0 34px}.member-list-toolbar .search-field{flex:1}.member-list-toolbar .search{width:100%}.generation-group{margin-bottom:44px}.generation-heading{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:12px;margin-bottom:22px}.generation-heading span{height:1px;background:#e5cfb7}.generation-heading h2{margin:0;padding:6px 16px;border:1px solid #e8d1aa;border-radius:999px;background:#fff6df;color:#8c5d18;font:800 17px/1.2 Georgia,serif}.member-card{min-height:106px}.member-card:after{inset:5px}.member-card>div{min-width:0}

/* Member profile */
.member-profile{padding:30px}.member-profile:after{display:none}.profile-section-title{margin:28px 0 14px;padding-bottom:9px;border-bottom:1px solid #eaded1;color:var(--ink);font-size:17px}.private-item{background:#fff5dd;border-color:#ecd59d}.biography{padding:18px;border:1px solid #eaded1;border-radius:15px;background:#fffdf9;color:var(--secondary)}.relationship-groups{display:grid;grid-template-columns:1fr 1fr;gap:20px}.relationship-groups section{padding:16px;border:1px solid #eaded1;border-radius:16px;background:#fffdf9}.relationship-groups h3{margin:0 0 10px;font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.relationship-list{display:grid;gap:8px}.relationship-list a{display:flex;align-items:center;gap:10px;padding:8px;border-radius:11px;color:var(--ink)}.relationship-list a:hover{background:#f8eee3}.relationship-list img{width:36px;height:36px;border-radius:50%;object-fit:cover}.relationship-list span{display:grid}.relationship-list small{font-size:10px;color:var(--muted)}

/* Relationships, lineage and management forms */
.relationship-tools{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.relationship-tools details{padding:0;overflow:visible}.relationship-tools summary{min-height:104px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;padding:18px;list-style:none;text-align:center;cursor:pointer}.relationship-tools summary strong{color:var(--primary-dark)}.relationship-tools summary span{font-size:12px;color:var(--muted)}.details-form{padding:0 20px 20px}.bulk-children{display:grid;gap:9px}.bulk-child-row{display:grid;grid-template-columns:55px 1fr 90px 110px;gap:7px}.bulk-child-row input,.bulk-child-row select,.category-manager input{min-width:0;padding:9px;border:1px solid var(--border);border-radius:10px;background:var(--surface-strong)}.relationship-table{display:grid;margin-top:18px}.relationship-row{display:grid;grid-template-columns:130px 1fr auto;align-items:center;gap:15px;padding:13px;border-top:1px solid #eaded1}.relationship-row:first-child{border-top:0}.relationship-row>div{display:grid}.relationship-row small{color:var(--gold)}.relationship-type{font-size:11px;font-weight:800;color:var(--primary)}.lineage-info{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:22px}.lineage-info article{display:flex;gap:13px;align-items:flex-start}.lineage-info article>div{display:flex;gap:13px}.lineage-info article:last-child{display:grid}.lineage-info h3{margin:0 0 5px;font-size:14px}.lineage-info p{margin:0;color:var(--muted);font-size:12px}.lineage-manager>p{margin-bottom:0}.row-change{background:#fff8e8}.row-change b{color:#976917}.user-summary{display:flex;gap:12px;flex-wrap:wrap;margin-bottom:18px}.user-summary span{padding:9px 14px;border:1px solid var(--border);border-radius:999px;background:var(--surface);color:var(--muted);font-size:12px}.user-summary b{color:var(--primary-dark)}.user-cell{display:flex;align-items:center;gap:10px}.user-cell small{display:block;color:var(--muted)}

/* Native modal-like details for shared hosting without a JS framework */
.modal-details{position:relative}.modal-details>summary{list-style:none}.modal-details>summary::-webkit-details-marker{display:none}.modal-details[open]::before{content:"";position:fixed;inset:0;z-index:100;background:rgb(42 18 16/.58);backdrop-filter:blur(3px)}.floating-form{position:fixed;left:50%;top:50%;right:auto;z-index:101;width:min(520px,calc(100vw - 32px));max-height:calc(100vh - 32px);max-height:calc(100dvh - 32px);display:grid;gap:12px;overflow:auto;margin:0;padding:23px;transform:translate(-50%,-50%);box-shadow:0 28px 75px rgb(60 18 16/.32);animation:modal-in .16s ease-out}.floating-form h2,.floating-form h3{margin:0 38px 5px 0}.modal-close{position:absolute;top:14px;right:14px;width:34px;height:34px;display:grid;place-items:center;padding:0;border:1px solid var(--border);border-radius:50%;background:#fff7ed;color:var(--primary);font-size:24px;line-height:1;cursor:pointer}.modal-close:hover{background:var(--primary);border-color:var(--primary-dark);color:#fff}.modal-details [data-gallery-upload-status][data-state="error"]{color:var(--error);font-weight:750}body.modal-open{overflow:hidden}.event-container{width:min(900px,100%)}.events-panel{margin-top:10px}.event-list{display:grid;gap:10px}.event-card{position:relative;display:flex;align-items:center;gap:14px;padding:13px;border:1px solid #eaded1;border-radius:16px;background:#fffdf9}.event-date-box{width:58px;height:58px;display:flex;flex-direction:column;align-items:center;justify-content:center;border-radius:14px;background:#fff0dc;color:var(--primary)}.event-date-box b{font-size:20px;line-height:1}.event-date-box span{font-size:10px}.event-card-copy{display:grid;flex:1}.event-card-copy small{color:var(--muted)}.event-card-copy p{margin:4px 0 0;font-size:12px}.gallery-image{position:relative}.gallery-image>div{position:absolute;inset:auto 0 0;display:grid;padding:34px 15px 13px;background:linear-gradient(transparent,rgb(35 12 10/.84));color:white}.gallery-image span{font-size:11px;color:#f4ddc7}

/* News administration and backup */
.news-admin-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:20px;align-items:start}.category-manager{position:sticky;top:95px}.category-manager h2{margin-top:0;font-size:19px}.category-manager>.row{flex-wrap:nowrap}.category-list{display:grid;margin-top:16px}.category-list>div{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:10px 0;border-top:1px solid #eaded1}.category-list span{display:grid}.category-list small{color:var(--muted)}.data-cards .panel{position:relative;overflow:hidden}.panel-icon{width:48px;height:48px;display:grid;place-items:center;border-radius:14px;background:#f1e8de;color:var(--secondary);font-size:24px}.danger-zone .panel-icon{background:#ffe8e4;color:var(--error)}.export-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:20px 0}

/* About and public footer */
.about-hero{position:relative;overflow:hidden;padding:65px 20px;border-bottom:1px solid rgb(184 137 46/.35);background:var(--primary-dark);color:var(--surface)}.about-hero>.heritage-pattern{position:absolute;inset:0;opacity:.1}.about-hero-content{position:relative;width:min(900px,100%);margin:auto;text-align:center}.about-hero .brand-seal{width:80px;height:80px}.about-hero h1{margin:18px 0 12px;font:800 clamp(35px,5vw,50px)/1.2 Georgia,serif}.about-hero-content>p:last-child{max-width:780px;margin:auto;color:#f3ddca;line-height:1.9}.about-copy{width:min(900px,100%);text-align:center}.about-copy h2,.about-mission h2,.contact-card h2{color:var(--primary-dark);font:800 clamp(27px,4vw,38px)/1.25 Georgia,serif}.about-copy>p:not(.section-kicker){color:var(--secondary);line-height:1.9}.about-mission article{text-align:center;padding:34px}.amber-panel{background:#fff3d5}.contact-section{padding:0 0 70px}.contact-card{display:grid;grid-template-columns:1fr .7fr;gap:34px;padding:40px;border-radius:28px;background:var(--primary);color:white;box-shadow:var(--shadow-hover)}.contact-card h2{color:white}.contact-card p{color:#f5ded1}.contact-card aside{padding:24px;border:1px solid rgb(184 137 46/.35);border-radius:22px;background:rgb(94 17 23/.45)}.contact-card aside h3{color:#ffe5a1}.contact-card li{margin:10px 0;color:#f5ded1}.public-footer{padding:45px 0}.public-footer-grid{display:grid;grid-template-columns:1.4fr .8fr 1fr;gap:40px}.public-footer h2{color:#ffe0a0;font-size:13px;letter-spacing:.12em;text-transform:uppercase}.public-footer nav{display:grid;gap:7px}.public-footer .brand strong{color:white}.dashboard-footer{padding:18px 0}.dashboard-footer .footer-inner{font-size:12px}

@keyframes drop-in{from{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}
@keyframes modal-in{from{opacity:0;transform:translate(-50%,calc(-50% + 10px)) scale(.98)}to{opacity:1;transform:translate(-50%,-50%) scale(1)}}
@media(max-width:1000px){.relationship-tools{grid-template-columns:1fr}.news-admin-layout{grid-template-columns:1fr}.category-manager{position:static}.today-card{grid-template-columns:1fr}.today-events{padding:22px 4px 4px}.event-preview-grid{max-height:310px}.public-footer-grid{grid-template-columns:1fr 1fr}.public-footer-grid>div:first-child{grid-column:1/-1}.contact-card{grid-template-columns:1fr}.member-grid{grid-template-columns:repeat(3,1fr)}}
@media(max-width:720px){.account-trigger{min-width:0;padding:6px}.account-copy{display:none}.account-dropdown{right:-2px}.auth-card{padding:30px 22px}.auth-back,.auth-contact{top:18px;padding:8px 11px;font-size:12px}.auth-back{left:12px}.auth-contact{right:12px}.view-tabs button{padding:9px 16px;font-size:18px}.view-tabs button span{display:none}.tree-controls{align-items:stretch}.root-picker{width:100%;display:grid}.root-picker select{max-width:none;width:100%}.tree-actions{width:100%;justify-content:center}.member-list-toolbar{align-items:stretch;flex-direction:column}.member-list-toolbar .row{display:grid;grid-template-columns:1fr 1fr}.member-list-toolbar .btn{grid-column:1/-1}.member-grid{grid-template-columns:1fr}.relationship-groups{grid-template-columns:1fr}.bulk-child-row{grid-template-columns:52px 1fr}.bulk-child-row select,.bulk-child-row input:last-child{grid-row:2}.lineage-info{grid-template-columns:1fr}.dashboard-calendar-columns{grid-template-columns:1fr}.dashboard-calendar-side+ .dashboard-calendar-side{border-left:0;border-top:1px solid #e2d5ca}.dashboard-calendar-side{min-height:185px}.dashboard-calendar-number{font-size:60px}.event-preview{grid-template-columns:38px minmax(0,1fr)}.event-countdown{grid-column:2;justify-self:start}.event-card{align-items:flex-start;flex-wrap:wrap}.event-card-copy{min-width:calc(100% - 78px)}.event-edit .floating-form,.gallery-edit .floating-form{position:fixed;inset:80px 16px auto;max-height:calc(100vh - 100px);overflow:auto}.export-grid{grid-template-columns:1fr}.public-footer-grid{grid-template-columns:1fr;text-align:center}.public-footer-grid>div:first-child{grid-column:auto}.public-footer .brand{justify-content:center}.contact-card{padding:28px 20px}.about-hero{padding-top:50px}.footer-inner{display:grid}.tree-shell{padding:20px}.tree-canvas{padding-inline:10px}.children-row{gap:15px}.tree-node{width:145px}.tree-node img{width:36px;height:36px;flex-basis:36px}}
.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:14px}.stat-detail{padding:20px}.stat-detail>div:first-child{display:flex;align-items:center;justify-content:space-between}.stat-detail>div:first-child>b{padding:3px 8px;border-radius:99px;background:#f3eee8;color:var(--muted);font-size:10px}.stat-icon{width:39px;height:39px;display:grid;place-items:center;border-radius:12px;background:#f1e6d8;color:var(--primary)}.stat-detail>strong{display:block;margin-top:10px;font-size:29px;line-height:1.1}.stat-detail p{margin:2px 0;color:var(--muted);font-size:13px}.stat-detail .chart-bar{height:6px;margin-top:11px}.gender-ratio{height:20px;display:flex;overflow:hidden;border-radius:999px;background:#eee}.gender-ratio span:first-child{background:#62a4dc}.gender-ratio span:last-child{background:#e98da9}.gender-ratio+.row{margin-top:12px;color:var(--muted);font-size:13px}.purple>span{background:#a46bc5}.orange>span{background:#e49a45}@media(max-width:1000px){.stats-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:520px){.stats-grid{grid-template-columns:1fr}}
.kinship-selectors{display:grid;grid-template-columns:1fr auto 1fr;align-items:end;gap:12px}.kinship-titles{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:24px}.kinship-titles>div{display:grid;gap:5px;padding:18px;border:1px solid #eaded1;border-radius:16px;background:#fffaf2;text-align:center}.kinship-titles span{color:var(--muted);font-size:12px}.kinship-titles strong{color:var(--primary-dark);font:800 24px Georgia,serif}@media(max-width:620px){.kinship-selectors{grid-template-columns:1fr}.kinship-selectors .btn-round{margin:auto;rotate:90deg}.kinship-titles{grid-template-columns:1fr}}
.current-avatar{display:flex;align-items:center;gap:10px;margin-bottom:8px}.current-avatar img{width:58px;height:58px;border-radius:14px;object-fit:cover;border:2px solid var(--border)}

/* v4: Vietnamese-safe typography. The calligraphy font is intentionally kept
   only on the short brand name because it does not shape every Vietnamese
   heading reliably on Windows. */
h1,h2,h3,.kinship-titles strong{font-family:var(--font-heading)!important;font-kerning:normal;text-rendering:optimizeLegibility}

/* v4: relationship quick-entry dates */
.bulk-child-row{display:grid;grid-template-columns:58px minmax(0,1fr) 88px;gap:8px;margin:0;padding:12px;border:1px solid #ead7c1;border-radius:14px;background:#fffdf9}
.bulk-child-row legend{padding:0 7px;color:var(--primary);font-size:11px;font-weight:800;letter-spacing:.04em}
.bulk-child-row input,.bulk-child-row select{min-width:0;width:100%;padding:9px;border:1px solid var(--border);border-radius:10px;background:var(--surface-strong)}
.birth-date-fields{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;grid-column:1/-1}
.birth-date-fields label{display:grid;gap:4px;color:var(--muted);font-size:10px;font-weight:750;text-transform:uppercase;letter-spacing:.04em}
.birth-date-fields input{width:100%;min-width:0;padding:9px;border:1px solid var(--border);border-radius:10px;background:var(--surface-strong);font-size:14px}

/* v4: shared genealogy toolbar */
.root-picker-card{width:min(290px,100%);display:flex;align-items:center;gap:10px;padding:8px 13px;border:1px solid var(--border);border-radius:16px;background:rgb(255 249 239/.93);box-shadow:var(--shadow)}
.root-picker-card img{width:38px;height:38px;flex:0 0 38px;border-radius:50%;object-fit:cover;border:2px solid #fff;box-shadow:0 0 0 1px var(--border)}
.root-picker-card>span{min-width:0;display:grid;flex:1}.root-picker-card small{color:var(--muted);font-size:9px;font-weight:850;letter-spacing:.12em}.root-picker-card select{width:100%;min-width:0;padding:0 22px 0 0;border:0;background:transparent;color:var(--ink);font-weight:750;outline:0}
.zoom-group{height:42px;display:flex;overflow:hidden;border:1px solid var(--border);border-radius:999px;background:rgb(255 249 239/.93);box-shadow:var(--shadow)}
.zoom-group button{min-width:40px;padding:0 11px;border:0;border-right:1px solid var(--border);background:transparent;color:var(--secondary);font-weight:750}.zoom-group button:last-child{border:0}.zoom-group button:hover{background:#fff2df;color:var(--primary)}
.mindmap-quick{display:flex;gap:7px}.display-menu strong{color:#9a8175;font-size:10px;letter-spacing:.12em}.display-menu hr{width:100%;margin:2px 0;border:0;border-top:1px solid #eaded1}.filter-depth{justify-content:space-between}.filter-depth input{width:55px;padding:4px;border:1px solid var(--border);border-radius:7px;background:#fff;text-align:center}
.export-menu{position:relative}.export-menu summary{list-style:none}.export-menu>div{position:absolute;right:0;top:calc(100% + 7px);z-index:30;width:210px;display:grid;padding:8px;border:1px solid var(--border);border-radius:15px;background:var(--surface-strong);box-shadow:var(--shadow-hover)}.export-menu button{padding:10px;border:0;border-radius:9px;background:transparent;color:var(--secondary);font:650 13px var(--font-ui);text-align:left}.export-menu button:hover{background:#faeee2;color:var(--primary)}

/* v4.23: card-based pedigree with native pan/zoom and SVG connectors. */
.tree-shell,.mindmap-shell,.bubble-shell{background-color:#fbf4e9;background-image:radial-gradient(circle at 50% 0,rgb(184 137 46/.12),transparent 34%),linear-gradient(45deg,rgb(139 30 36/.026) 25%,transparent 25%),linear-gradient(-45deg,rgb(139 30 36/.026) 25%,transparent 25%);background-size:auto,28px 28px,28px 28px}
.tree-shell{position:relative;height:72vh;min-height:560px;overflow:hidden;padding:0;border:1px solid #ddc6a9;border-radius:26px;box-shadow:inset 0 1px 0 rgb(255 255 255/.7),0 18px 48px rgb(84 36 24/.09);cursor:grab;touch-action:none;overscroll-behavior:contain;user-select:none;-webkit-user-select:none}.tree-shell:before{content:"";position:absolute;inset:0;z-index:10;pointer-events:none;box-shadow:inset 0 0 50px rgb(98 47 30/.06)}.tree-shell:focus-visible{outline:3px solid rgb(184 137 46/.55);outline-offset:3px}.tree-shell.is-dragging{cursor:grabbing}.tree-gesture-hint{position:absolute;left:16px;bottom:14px;z-index:20;display:flex;align-items:center;gap:7px;padding:7px 11px;border:1px solid rgb(215 191 162/.8);border-radius:999px;background:rgb(255 253 248/.86);box-shadow:0 6px 18px rgb(74 34 22/.08);backdrop-filter:blur(8px);color:var(--muted);font-size:11px;font-weight:700;pointer-events:none}.tree-gesture-hint span{color:var(--gold);font-size:15px}
.tree-canvas{position:absolute;left:0;top:0;display:block;width:max-content;min-width:max-content;padding:76px 64px 96px;transform-origin:0 0;will-change:transform}.tree-canvas,.tree-canvas *{user-select:none;-webkit-user-select:none}.tree-canvas a,.tree-canvas button{user-select:auto;-webkit-user-select:auto}
.css-tree ul{position:relative;z-index:1;display:flex;justify-content:center;margin:0;padding:62px 0 0;list-style:none}.css-tree>ul{padding-top:0}.css-tree li{position:relative;z-index:1;padding:0 10px;text-align:center;list-style:none}.css-tree li:before,.css-tree li:after,.css-tree ul:before,.css-tree ul:after,.css-tree .family-unit:after{display:none!important;content:none!important}
.tree-link-layer{position:absolute;inset:0;z-index:0;display:block;overflow:visible;pointer-events:none}.tree-link{fill:none;stroke:#c7a36a;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;vector-effect:non-scaling-stroke;filter:drop-shadow(0 1px 0 rgb(255 255 255/.75))}
.tree-branch{position:relative}.family-unit{position:relative;z-index:3;display:inline-flex}.couple-row{display:flex;align-items:stretch;justify-content:center;gap:0}
.tree-node{position:relative;width:166px;min-height:84px;display:grid;grid-template-columns:50px minmax(0,1fr);align-items:center;gap:10px;padding:11px 12px;overflow:hidden;border:1px solid #dcc5a9;border-top:3px solid #8b4c43;border-radius:17px;background:linear-gradient(145deg,rgb(255 253 248/.98),rgb(255 247 235/.96));box-shadow:0 9px 22px rgb(80 34 25/.09),inset 0 1px 0 #fff;color:var(--ink);text-align:left;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}.tree-node.gender-female{border-top-color:#b8892e}.tree-node:hover{z-index:5;transform:translateY(-3px);border-color:rgb(139 30 36/.48);box-shadow:0 15px 30px rgb(80 34 25/.15),inset 0 1px 0 #fff}.tree-node.focus-person{border-color:var(--primary);box-shadow:0 0 0 3px rgb(139 30 36/.09),0 12px 28px rgb(80 34 25/.13)}.tree-node img{width:48px;height:48px;flex:0 0 48px;display:block;border:3px solid #fff;border-radius:50%;object-fit:cover;box-shadow:0 0 0 1px #d5b995,0 4px 10px rgb(73 37 28/.1)}.tree-node .node-copy{display:grid;gap:3px;min-width:0}.tree-node strong{display:-webkit-box;overflow:hidden;max-width:none;color:#4e211e;font-size:12px;line-height:1.28;text-overflow:clip;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.tree-node small{display:block;overflow:hidden;color:var(--muted);font-size:10px;line-height:1.25;text-overflow:ellipsis;white-space:nowrap}.tree-node.in-law{border-style:dashed}.tree-node.deceased{filter:saturate(.48);opacity:.8}.tree-node.minimal{width:auto;min-width:136px;min-height:0;display:block;padding:9px 12px;border-top-width:2px;text-align:center}.tree-node.minimal img,.tree-node.minimal small{display:none}.tree-node.minimal strong{display:block;white-space:nowrap}
.marriage-link{position:relative;z-index:4;width:34px;flex:0 0 34px;align-self:center}.marriage-link:before{content:"";position:absolute;left:0;right:0;top:50%;border-top:1px solid #c39d68}.marriage-link:after{content:"♥";position:absolute;top:50%;left:50%;width:22px;height:22px;display:grid;place-items:center;border:1px solid #d5b995;border-radius:50%;background:#fffaf2;box-shadow:0 4px 10px rgb(88 29 24/.1);color:var(--primary);font-size:10px;transform:translate(-50%,-50%)}.marriage-link.plus:after{content:"+";color:var(--gold);font-weight:900}.branch-toggle{position:absolute;left:50%;bottom:-14px;z-index:8;width:28px;height:28px;display:grid;place-items:center;padding:0;border:1px solid #d1b17b;border-radius:50%;background:#fffaf1;color:var(--primary);box-shadow:0 5px 12px rgb(76 36 24/.12);font-size:14px;font-weight:900;transform:translateX(-50%);transition:.18s ease}.branch-toggle:hover{background:var(--primary);border-color:var(--primary);color:#fff;transform:translateX(-50%) scale(1.08)}.branch-toggle.hidden-control{display:none}.tree-empty{padding:70px;text-align:center;color:var(--muted)}

/* v4: vertical mindmap with spouses and expandable branches */
.mindmap-shell{min-height:650px;padding:32px;overflow:auto}.mindmap-tree{width:max-content;min-width:min(100%,900px);padding:20px 70px 90px}.mindmap-branch{position:relative}.mindmap-branch>.mindmap-branch{margin-left:38px;padding-left:28px;border-left:2px solid #d7cec5}.mindmap-branch>.mindmap-branch:before{content:"";position:absolute;left:-2px;top:27px;width:28px;border-top:2px solid #d7cec5}.mindmap-row{position:relative;display:flex;align-items:center;gap:8px;margin:9px 0}.mindmap-toggle{width:24px;height:24px;display:grid;place-items:center;padding:0;border:1px solid var(--border);border-radius:50%;background:var(--surface);color:var(--secondary);font-weight:800}.mindmap-toggle.leaf{width:8px;height:8px;margin:0 8px;border:0;background:#cbbfb4}.mindmap-card{min-width:230px;max-width:390px;display:flex;align-items:center;gap:10px;padding:9px 12px;border-radius:16px}.mindmap-card img{width:40px;height:40px;flex:0 0 40px}.mindmap-card .node-copy{display:grid;min-width:0;text-align:left}.mindmap-spouses{display:flex;gap:5px;padding-left:7px;border-left:1px solid #e2d6cb}.mindmap-spouse{display:grid;justify-items:center;gap:2px;padding:5px;border:1px solid #eaded1;border-radius:11px;background:#fffaf2;color:var(--secondary);font-size:9px;font-weight:750}.mindmap-spouse img{width:28px;height:28px;border-radius:50%;object-fit:cover}.mindmap-children.collapsed{display:none}

/* v4: native SVG bubble relationship map */
.bubble-shell{position:relative;min-height:650px;overflow:hidden;padding:0}.bubble-shell svg{display:block;width:100%;height:650px;touch-action:none;cursor:grab}.bubble-shell svg.is-dragging{cursor:grabbing}.bubble-link{stroke:#cfc8c0;stroke-width:2}.bubble-unit{cursor:pointer}.bubble-pill{fill:#fffdf8;stroke:#b8892e;stroke-width:2;filter:drop-shadow(0 5px 7px rgb(88 29 24/.12))}.bubble-unit.root .bubble-pill{stroke:#8b1e24;stroke-width:4}.bubble-avatar-ring{fill:#fff;stroke:#d7bfa2;stroke-width:2}.bubble-name{fill:#442823;font:750 12px var(--font-ui);text-anchor:middle}.bubble-unit.root .bubble-name{font-weight:850;font-size:13px}

/* v4: family panels in list view */
.family-list-groups{display:grid;gap:30px}.family-list-panel{position:relative;padding:28px 22px 20px;border:1px solid var(--border);border-radius:30px;background:rgb(255 249 239/.92);box-shadow:var(--shadow)}.family-list-label{position:absolute;top:-13px;left:28px;padding:3px 12px;border:1px solid var(--border);border-radius:999px;background:#f1e3d2;color:var(--secondary);font-size:11px;font-weight:800;letter-spacing:.05em}.family-list-panel .member-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.family-couple{position:relative;display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:10px}.family-couple+.family-couple{margin-top:18px;padding-top:18px;border-top:1px solid #eaded1}.family-couple .member-card{height:100%}.family-couple:has(.member-card:nth-child(2)):after{content:"♥";position:absolute;top:50%;left:50%;translate:-50% -50%;z-index:4;width:24px;height:24px;display:grid;place-items:center;border:1px solid var(--border);border-radius:50%;background:var(--surface);color:var(--primary);font-size:11px}

/* v4: kinship help/reference/regional sections */
.kinship-container{width:min(940px,100%)}.kinship-form{padding:24px}.kinship-result{display:grid;gap:16px;margin-top:24px}.kinship-description{padding:15px 20px;border:1px solid #ecd28a;border-radius:16px;background:#fff7df;color:#835c15}.kinship-analysis{padding:20px}.kinship-analysis h2{margin:0 0 17px;color:var(--muted);font-size:12px;letter-spacing:.07em}.kinship-step{display:flex;align-items:flex-start;gap:14px;margin:12px 0}.kinship-step>b{width:25px;height:25px;flex:0 0 25px;display:grid;place-items:center;border:1px solid var(--border);border-radius:50%;background:#fff;color:var(--muted);font-size:10px;box-shadow:var(--shadow)}.kinship-step span{padding-top:2px;color:var(--secondary);font-size:14px}.kinship-help{margin-top:26px;padding-top:20px;border-top:1px solid var(--border)}.kinship-help-tabs{display:flex;align-items:center;gap:25px;overflow:auto;padding-bottom:15px}.kinship-help-tabs button{white-space:nowrap;padding:7px 0;border:0;border-bottom:2px solid transparent;background:transparent;color:var(--muted);font-weight:700}.kinship-help-tabs button.active{border-bottom-color:var(--gold);color:#966815}.kinship-help-panel{margin-top:3px}.guide-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.guide-card{padding:20px;border:1px solid;border-radius:18px}.guide-card h2{margin:0 0 12px;font-size:14px}.guide-card li{margin:8px 0;color:inherit;font-size:14px}.guide-blue{border-color:#b7d7f5;background:#f2f8ff;color:#174b7e}.guide-amber{border-color:#edd49a;background:#fff9e8;color:#775313}.reference-list{padding:0;overflow:hidden}.reference-list>h2,.regional-table>h2{margin:0;padding:13px 20px;border-bottom:1px solid #eaded1;background:#fbf4e9;color:var(--secondary);font-size:14px}.reference-list>div{display:grid;grid-template-columns:190px 1fr;gap:18px;padding:12px 20px;border-top:1px solid #eaded1}.reference-list>div:nth-child(2){border-top:0}.reference-list>div>strong{color:#976917}.reference-list>div>span{display:grid;color:var(--secondary);font-size:14px}.reference-list small{color:var(--muted)}.regional-table{padding:0;overflow:hidden}.regional-table .table-wrap{border:0;border-radius:0}.regional-note{margin-top:18px}.regional-note h3{color:#183f8c}.regional-note p{margin-bottom:0;color:var(--secondary)}

@media(max-width:900px){.family-list-panel .member-grid{grid-template-columns:1fr 1fr}.guide-grid{grid-template-columns:1fr}.tree-actions{justify-content:center}.root-picker-card{width:100%}}
@media(max-width:620px){.birth-date-fields{grid-template-columns:1fr 1fr 1fr}.family-list-panel .member-grid{grid-template-columns:1fr}.reference-list>div{grid-template-columns:1fr;gap:3px}.kinship-help-tabs{gap:16px}.tree-shell{height:70vh;min-height:510px;border-radius:20px}.tree-canvas{padding:66px 28px 82px}.tree-gesture-hint{right:12px;left:12px;justify-content:center;text-align:center}.css-tree ul{padding-top:56px}.css-tree li{padding-inline:6px}.mindmap-tree{padding-inline:5px}.mindmap-branch>.mindmap-branch{margin-left:17px;padding-left:17px}.mindmap-card{min-width:185px}.tree-node{width:140px;min-height:76px;grid-template-columns:42px minmax(0,1fr);gap:8px;padding:9px}.tree-node strong{font-size:10.5px}.tree-node img{width:40px;height:40px;flex-basis:40px}.marriage-link{width:28px;flex-basis:28px}}

@media print{body{background:#fff}.app-header,.footer,.view-tabs,.tree-controls,.tree-legend,.tree-gesture-hint{display:none!important}.members-page,.container{width:100%;max-width:none;padding:0}.tree-shell,.mindmap-shell,.bubble-shell{height:auto;min-height:0;overflow:visible;border:0;background:#fff;box-shadow:none}.tree-canvas{position:relative;left:auto;top:auto;width:max-content;transform:none!important;padding:20px}}

/* v4: connector correction for the generated mindmap-children wrapper. */
.mindmap-children{position:relative;margin-left:38px;padding-left:28px;border-left:2px solid #d7cec5}
.mindmap-children>.mindmap-branch:before{content:"";position:absolute;left:-28px;top:27px;width:28px;border-top:2px solid #d7cec5}
@media(max-width:620px){.mindmap-children{margin-left:17px;padding-left:17px}.mindmap-children>.mindmap-branch:before{left:-17px;width:17px}}

/* v4.1: keep the profile menu inside the viewport and make all items reachable. */
.account-dropdown{
  max-height:min(720px,calc(100vh - 96px));
  overflow-x:hidden;
  overflow-y:auto;
  overscroll-behavior:contain;
  scrollbar-gutter:stable;
}
.account-dropdown::-webkit-scrollbar{width:9px}
.account-dropdown::-webkit-scrollbar-track{background:#f3e8dc;border-radius:999px}
.account-dropdown::-webkit-scrollbar-thumb{background:#b9967e;border:2px solid #f3e8dc;border-radius:999px}
.account-dropdown::-webkit-scrollbar-thumb:hover{background:var(--primary)}

/* v4.1: preserve the hero-card contrast and larger location label. */
.hero-card p,.hero-card p.muted{color:#80675d!important}
.hero-card .badge{padding:7px 14px;font-size:16px;line-height:1.3;font-weight:800}

@media(max-width:520px){
  .account-dropdown{max-height:calc(100vh - 86px)}
  .hero-card .badge{padding:6px 10px;font-size:13px}
}

/* v4.2: privacy policy and terms of use */
.legal-page{padding-block:42px 70px}.legal-container{width:min(980px,100%)}.legal-document{padding:clamp(24px,5vw,56px);background:rgb(255 253 248/.97)}
.legal-header{padding-bottom:28px;border-bottom:1px solid var(--border)}.legal-header h1{margin:10px 0 8px;color:var(--primary-dark);font-size:clamp(32px,5vw,46px);line-height:1.2}.legal-header p{margin:0;color:var(--secondary)}.legal-header small{display:block;margin-top:10px;color:var(--muted)}
.legal-notice{margin:26px 0;padding:16px 18px;border:1px solid #e1c78c;border-radius:15px;background:#fff7df;color:#654914}.legal-toc{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0 0 34px}.legal-toc a{padding:9px 10px;border:1px solid #ead8c4;border-radius:10px;background:#fff9ef;color:var(--secondary);font-size:12px;font-weight:750}.legal-toc a:hover{border-color:var(--gold);color:var(--primary)}
.legal-document section{scroll-margin-top:105px;padding:25px 0;border-top:1px solid #eaded1}.legal-document section:first-of-type{border-top:0}.legal-document section h2{margin:0 0 12px;color:var(--primary-dark);font-size:22px;line-height:1.35}.legal-document section p{margin:10px 0;color:var(--secondary);line-height:1.85}.legal-document section ul{display:grid;gap:9px;margin:12px 0;padding-left:23px;color:var(--secondary)}.legal-document section li{padding-left:4px;line-height:1.75}.legal-document section a{text-decoration:underline;text-underline-offset:3px}.legal-related{display:flex;justify-content:flex-end;margin-top:24px;padding-top:22px;border-top:1px solid var(--border)}.legal-related a{font-weight:800}
@media(max-width:720px){.legal-page{padding-block:20px 45px}.legal-document{border-radius:18px}.legal-toc{grid-template-columns:1fr 1fr}.legal-document section h2{font-size:19px}}
@media(max-width:430px){.legal-toc{grid-template-columns:1fr}.legal-related{justify-content:flex-start}}

/* v4.3: unified typography scale for public pages and the administration area. */
:root{
  --type-display:clamp(44px,5vw,64px);
  --type-page:clamp(32px,3vw,40px);
  --type-section:clamp(26px,2.35vw,32px);
  --type-card:19px;
  --type-body:16px;
  --type-small:14px;
}
body{font-size:var(--type-body);line-height:1.65;-webkit-font-smoothing:antialiased}
h1,h2,h3{font-family:var(--font-heading)!important;font-weight:800;letter-spacing:-.015em;text-wrap:balance}
h1{font-size:var(--type-page);line-height:1.2}h2{font-size:var(--type-section);line-height:1.3}h3{font-size:var(--type-card);line-height:1.35}
.brand-title{font-size:clamp(24px,2vw,29px);line-height:1.05;letter-spacing:0}
.hero h1{max-width:780px;margin:22px 0 15px;font-size:var(--type-display);line-height:1.12;letter-spacing:-.025em}.hero p{font-size:18px;line-height:1.75}.hero-card blockquote{font-size:26px;line-height:1.45}
.about-hero h1{font-size:clamp(36px,4vw,46px);line-height:1.18}.legal-header h1,.article h1{font-size:var(--type-page);line-height:1.2}.auth-heading h1,.detail-hero h1{font-size:clamp(30px,2.8vw,36px);line-height:1.22}
.page-title{font-size:var(--type-page);line-height:1.22}.section-heading h2,.about-copy h2,.about-mission h2,.contact-card h2{font-size:var(--type-section);line-height:1.28}
.feature h3,.launch-card h3,.news-card h2,.news-card h3,.gallery-body h3{font-size:var(--type-card);line-height:1.38}.panel>h2,.floating-form h2,.category-manager h2,.events-panel h2,.data-cards h2{font-size:21px;line-height:1.35}
.auth-aside .brand-title{font-size:clamp(30px,3.4vw,38px)}.generation-heading h2{font-size:16px;line-height:1.25;letter-spacing:0}.kinship-titles strong{font-size:24px;line-height:1.25}
.feature p,.launch-card p,.news-card p,.gallery-body p{font-size:15px;line-height:1.7}.page-head p,.section-heading p,.about-copy>p:not(.section-kicker),.about-mission>article>p:not(.section-kicker),.contact-card p{font-size:16px;line-height:1.75}
.article-content{font-size:17px;line-height:1.85}.legal-document section h2{font-size:22px;line-height:1.35}.legal-document section p,.legal-document section li{font-size:16px;line-height:1.8}
.btn,.nav a,.nav button{font-size:14px}.field label{font-size:13px}.member-card h3{font-size:16px;line-height:1.35;letter-spacing:0}.member-card p{font-size:13px}.public-footer h2{font-size:13px;letter-spacing:.12em}.public-footer p,.public-footer nav{font-size:14px}
@media(max-width:720px){
  :root{--type-display:clamp(34px,10vw,44px);--type-page:clamp(29px,8vw,34px);--type-section:clamp(23px,6vw,28px);--type-card:18px}
  .brand-title{font-size:22px}.hero h1{margin-top:18px}.hero p{font-size:16px}.hero-card blockquote{font-size:23px}.about-hero h1{font-size:clamp(31px,8vw,39px)}
  .article-content{font-size:16px}.legal-document section h2{font-size:20px}.panel>h2,.floating-form h2,.category-manager h2,.events-panel h2,.data-cards h2{font-size:19px}
}

/* V5: trang quản trị bố cục, nhận diện, nội dung và menu. */
.appearance-admin{scroll-behavior:smooth}.appearance-admin>.container{display:grid;gap:22px}.appearance-jump{position:sticky;top:88px;z-index:20;display:flex;gap:8px;flex-wrap:wrap;padding:10px}.appearance-jump a{padding:8px 12px;border-radius:9px;font-weight:750}.appearance-jump a:hover{background:rgb(139 30 36/.08)}.appearance-settings,.appearance-admin section.panel{padding:clamp(18px,3vw,30px);scroll-margin-top:110px}.appearance-section-head{display:flex;align-items:center;gap:16px;border-bottom:1px solid var(--border);padding-bottom:18px;margin-bottom:22px}.appearance-section-head h2,.appearance-section-head p{margin:0}.appearance-logo-row{display:grid;grid-template-columns:92px 1fr;align-items:center;gap:14px;padding:12px;border:1px dashed var(--border);border-radius:14px}.appearance-logo-row img{width:92px;height:70px;object-fit:contain}.appearance-logo-row small{grid-column:2}.appearance-subsection{margin-top:30px;padding-top:20px;border-top:1px solid var(--border);scroll-margin-top:120px}.appearance-color-grid{display:grid;grid-template-columns:repeat(6,minmax(110px,1fr));gap:12px}.appearance-color-grid label{display:grid;gap:8px;font-size:12px;font-weight:750}.appearance-color-grid input{width:100%;height:48px;padding:4px}.appearance-layout-grid{margin-top:18px}.appearance-switches{display:flex;gap:12px;flex-wrap:wrap}.appearance-switches .check{padding:10px 12px;border:1px solid var(--border);border-radius:12px;background:var(--surface-strong)}.appearance-blocks{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.appearance-block-card{display:grid;gap:12px;padding:16px;border:1px solid var(--border);border-radius:14px;background:var(--surface-strong)}.appearance-block-card h3{margin:0;color:var(--primary-dark)}.appearance-menu-create{margin-bottom:24px}.appearance-menu-create>summary{list-style:none}.appearance-menu-form{margin-top:12px;padding:18px;border:1px dashed var(--gold);border-radius:14px;background:#fff7df}.appearance-menu-group{padding-top:18px}.appearance-menu-group+ .appearance-menu-group{border-top:1px solid var(--border)}.appearance-menu-list{display:grid;gap:10px}.appearance-menu-row{display:grid;grid-template-columns:minmax(220px,.8fr) minmax(420px,1.4fr) auto;gap:10px;align-items:center;padding:12px;border:1px solid var(--border);border-radius:13px;background:var(--surface-strong)}.appearance-menu-main{display:grid;grid-template-columns:.8fr 1.2fr;gap:8px}.appearance-menu-options{display:grid;grid-template-columns:1fr 64px 1fr 76px 1fr auto auto;gap:8px;align-items:center}.appearance-menu-row input,.appearance-menu-row select{min-width:0;padding:8px}.appearance-menu-actions{display:flex;gap:6px}@media(max-width:1100px){.appearance-color-grid{grid-template-columns:repeat(3,1fr)}.appearance-blocks{grid-template-columns:1fr}.appearance-menu-row{grid-template-columns:1fr}.appearance-menu-options{grid-template-columns:repeat(3,minmax(0,1fr))}.appearance-menu-actions{justify-content:flex-end}}@media(max-width:720px){.appearance-jump{top:76px;overflow-x:auto;flex-wrap:nowrap}.appearance-jump a{white-space:nowrap}.appearance-color-grid{grid-template-columns:repeat(2,1fr)}.appearance-logo-row{grid-template-columns:70px 1fr}.appearance-logo-row img{width:70px;height:56px}.appearance-menu-main,.appearance-menu-options{grid-template-columns:1fr}.appearance-menu-actions>*{flex:1}}

/* v4.4: Vietnamese lunar/solar calendar converter. */
.calendar-page{width:min(1120px,100%)}
.calendar-tabs{display:grid;grid-template-columns:1fr 1fr;max-width:650px;margin:0 auto 24px;padding:4px;border:1px solid var(--border);border-radius:15px;background:var(--surface);box-shadow:var(--shadow)}
.calendar-tabs a{display:flex;align-items:center;justify-content:center;gap:8px;padding:10px 18px;border-radius:11px;color:var(--muted);font-size:14px;font-weight:800}
.calendar-tabs a:hover{color:var(--primary)}.calendar-tabs a.active{background:var(--primary);color:#fff;box-shadow:0 5px 14px rgb(94 17 23/.18)}
.calendar-layout{display:grid;grid-template-columns:minmax(0,.95fr) minmax(0,1.05fr);gap:22px;align-items:stretch}
.calendar-input-panel,.calendar-result-panel{padding:28px;box-shadow:var(--shadow)}
.calendar-panel-heading{display:flex;align-items:flex-start;gap:13px;margin-bottom:24px}.calendar-panel-heading h2{margin:0;color:var(--primary-dark);font-size:20px!important;letter-spacing:0}.calendar-panel-heading p{margin:3px 0 0;color:var(--muted);font-size:13px}
.calendar-heading-icon{width:38px;height:38px;flex:0 0 38px;display:grid;place-items:center;border-radius:50%;background:#f1e8de;color:var(--primary);font-size:19px}.calendar-heading-icon.result{background:#e9f2e9;color:#337049}
.calendar-form{display:grid;gap:18px}.calendar-form .field label{font-size:13px}.calendar-form .field input,.calendar-form .field select{min-height:51px;padding:12px 13px;border-radius:12px;font-size:16px}
.calendar-date-grid{display:grid;grid-template-columns:1.1fr 1fr 1fr;gap:12px}.calendar-leap{width:max-content;padding:9px 12px;border:1px solid var(--border);border-radius:11px;background:#fffaf2;color:var(--secondary)}
.calendar-timezone{display:flex;align-items:center;gap:11px;padding:12px 14px;border:1px solid #e4d8ca;border-radius:12px;background:#f5f1eb;color:var(--secondary)}.calendar-timezone>span{font-size:20px;color:var(--primary)}.calendar-timezone div{display:grid}.calendar-timezone strong{font-size:13px}.calendar-timezone small{color:var(--muted)}
.calendar-result-panel{border-left-color:rgb(139 30 36/.35)}.calendar-result-card{padding:20px;border:1px solid #d5d7d5;border-radius:17px;background:#f0f1f1}.calendar-result-badge{display:inline-flex;margin-bottom:7px;padding:3px 10px;border:1px solid #93a5cf;border-radius:999px;color:#536ea6;font-size:12px}.calendar-result-card>strong{display:block;color:#201b18;font-size:clamp(25px,3vw,32px);line-height:1.25}.calendar-result-card p{margin:5px 0 0;color:var(--muted)}
.can-chi-title{margin:22px 0 12px;color:var(--ink);font-size:16px!important}.can-chi-grid{display:grid;grid-template-columns:1fr 1fr;gap:17px 28px}.can-chi-grid>div{display:grid;gap:2px}.can-chi-grid span,.calendar-opposite-date span{color:var(--muted);font-size:13px}.can-chi-grid strong{color:var(--primary-dark);font-size:17px}
.calendar-opposite-date{display:grid;gap:2px;margin-top:22px;padding-top:17px;border-top:1px solid var(--border)}.calendar-opposite-date strong{font-size:14px;color:var(--secondary)}
.calendar-empty{min-height:270px;display:grid;place-content:center;text-align:center;color:var(--muted)}.calendar-empty span{color:var(--gold);font-size:48px}.calendar-empty p{max-width:320px}
.calendar-note{margin:18px 2px 0;color:var(--muted);font-size:13px;line-height:1.6}
@media(max-width:820px){.calendar-layout{grid-template-columns:1fr}.calendar-result-panel{min-height:390px}}
@media(max-width:560px){.calendar-tabs{grid-template-columns:1fr}.calendar-input-panel,.calendar-result-panel{padding:21px}.calendar-date-grid{grid-template-columns:1fr 1fr}.calendar-date-grid .field:first-child{grid-column:1/-1}.can-chi-grid{gap:14px}.calendar-result-card>strong{font-size:23px}}

/* v4.5: automatic Solar/Lunar dates in the member form. */
.member-calendar-pair{padding:18px;border:1px solid var(--border);border-radius:17px;background:rgb(255 253 248/.72)}
.member-calendar-heading{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.member-calendar-heading>div{display:grid;gap:2px}.member-calendar-heading strong{color:var(--primary-dark);font-size:17px}.member-calendar-heading small{color:var(--muted)}.member-calendar-heading>span{width:34px;height:34px;display:grid;place-items:center;border-radius:50%;background:#f1e3d2;color:var(--primary);font-size:18px}
.member-calendar-columns{display:grid;grid-template-columns:minmax(0,1fr) 34px minmax(0,1fr);gap:8px;align-items:center}.member-calendar-columns fieldset{min-width:0;height:100%;margin:0;padding:13px;border:1px solid #e2c9aa;border-radius:13px;background:var(--surface)}.member-calendar-columns legend{padding:0 7px;color:var(--secondary);font-size:12px;font-weight:800}.member-date-inputs{display:grid;grid-template-columns:.75fr .85fr 1.2fr;gap:7px}.member-date-inputs label{display:grid;gap:4px}.member-date-inputs label>span{color:var(--muted);font-size:11px}.member-date-inputs input{width:100%;min-width:0;padding:9px 7px!important;text-align:center}
.member-calendar-arrow{display:grid;place-items:center;color:var(--gold);font-size:23px;font-weight:800}.member-lunar-leap{margin-top:10px;color:var(--secondary)}.member-calendar-status{display:block;margin-top:11px;color:var(--muted);line-height:1.45}.member-calendar-status[data-state="loading"]{color:#735618}.member-calendar-status[data-state="success"]{color:var(--success);font-weight:700}.member-calendar-status[data-state="error"]{color:var(--error);font-weight:700}
@media(max-width:660px){.member-calendar-columns{grid-template-columns:1fr}.member-calendar-arrow{height:22px;transform:rotate(90deg)}.member-date-inputs{grid-template-columns:.8fr .9fr 1.25fr}}

/* v4.7: image library for the TinyMCE news editor. */
.image-library-dialog{width:min(1050px,calc(100vw - 32px));max-width:none;max-height:calc(100vh - 32px);margin:auto;padding:0;overflow:hidden;border:1px solid #d9c0a4;border-radius:22px;background:#fffaf2;color:var(--ink);box-shadow:0 28px 80px rgb(45 18 15/.35)}
.image-library-dialog::backdrop{background:rgb(47 22 20/.65);backdrop-filter:blur(3px)}.image-library-shell{display:flex;flex-direction:column;max-height:calc(100vh - 34px)}
.image-library-header{display:flex;align-items:flex-start;justify-content:space-between;gap:22px;padding:22px 24px 18px;border-bottom:1px solid var(--border);background:#fffdf8}.image-library-header h2{margin:2px 0 3px;color:var(--primary-dark);font-size:25px!important}.image-library-header p{margin:0;color:var(--muted);font-size:13px}.image-library-close{width:38px;height:38px;display:grid;place-items:center;flex:0 0 38px;padding:0;border:1px solid var(--border);border-radius:50%;background:#fff;color:var(--secondary);font-size:26px;line-height:1;cursor:pointer}.image-library-close:hover{border-color:var(--primary);color:var(--primary)}
.image-library-toolbar{display:grid;grid-template-columns:minmax(220px,1fr) auto auto;gap:12px;align-items:center;padding:14px 24px;border-bottom:1px solid #eaded1}.image-library-search{display:flex;align-items:center;gap:8px;min-width:0;padding:0 12px;border:1px solid var(--border);border-radius:12px;background:#fff}.image-library-search>span{color:var(--muted);font-size:18px}.image-library-search input{width:100%;padding:10px 0;border:0;background:transparent;outline:0}.image-library-filters{display:flex;gap:5px;padding:4px;border:1px solid var(--border);border-radius:12px;background:#f6ede2}.image-library-filters button{padding:7px 10px;border:0;border-radius:9px;background:transparent;color:var(--muted);font-size:12px;font-weight:800;cursor:pointer}.image-library-filters button.active{background:var(--primary);color:#fff;box-shadow:0 3px 8px rgb(94 17 23/.16)}
.image-library-status{margin:20px 24px;padding:16px;border:1px dashed var(--border);border-radius:13px;text-align:center;color:var(--muted)}.image-library-status[data-state="error"]{border-color:#e6aaa6;background:#fff4f2;color:var(--error)}
.image-library-grid{min-height:280px;display:grid;grid-template-columns:repeat(auto-fill,minmax(165px,1fr));gap:13px;overflow-y:auto;padding:18px 24px;scrollbar-width:thin}.image-library-item{min-width:0;overflow:hidden;padding:0;border:1px solid #e3d2c1;border-radius:14px;background:#fff;box-shadow:0 3px 9px rgb(63 37 24/.06);text-align:left;cursor:pointer;transition:.18s}.image-library-item:hover,.image-library-item:focus-visible{translate:0 -2px;border-color:var(--gold);box-shadow:0 8px 20px rgb(63 37 24/.13);outline:0}.image-library-item img{width:100%;height:125px;display:block;object-fit:cover;background:#eee5db}.image-library-item>span{display:grid;gap:3px;padding:10px}.image-library-item strong,.image-library-item small{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.image-library-item strong{color:var(--primary-dark);font-size:13px}.image-library-item small{color:var(--muted);font-size:10px}.image-library-empty{grid-column:1/-1;min-height:260px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;text-align:center;color:var(--muted)}.image-library-empty>span{font-size:44px;color:var(--gold)}.image-library-empty strong{color:var(--secondary)}.image-library-empty small{font-size:12px}
.image-library-footer{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 24px;border-top:1px solid var(--border);background:#fffdf8}.image-library-footer>span{color:var(--muted);font-size:12px;font-weight:750}
@media(max-width:820px){.image-library-toolbar{grid-template-columns:1fr auto}.image-library-filters{grid-column:1/-1;grid-row:2;overflow-x:auto}.image-library-filters button{flex:1;white-space:nowrap}.image-library-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}}
@media(max-width:520px){.image-library-dialog{width:calc(100vw - 16px);max-height:calc(100vh - 16px);border-radius:16px}.image-library-shell{max-height:calc(100vh - 18px)}.image-library-header{padding:17px}.image-library-header p{display:none}.image-library-toolbar{padding:11px 14px}.image-library-grid{grid-template-columns:1fr 1fr;gap:9px;padding:13px}.image-library-item img{height:105px}.image-library-footer{padding:11px 14px}}

/* v4.8: choose the news cover image from the same hosting image library. */
.featured-image-picker{display:grid;gap:10px}.featured-image-preview{position:relative;min-height:130px;display:grid;place-items:center;overflow:hidden;border:1px solid var(--border);border-radius:13px;background:#f4eadf}.featured-image-preview img{width:100%;height:150px;display:block;object-fit:cover}.featured-image-preview>span{position:absolute;inset:auto 8px 8px;overflow:hidden;padding:5px 9px;border-radius:8px;background:rgb(47 22 20/.74);color:#fff;font-size:11px;text-overflow:ellipsis;white-space:nowrap}.featured-image-preview.is-empty>span{position:static;background:transparent;color:var(--muted)}.featured-image-actions{display:flex;flex-wrap:wrap;gap:8px}.featured-image-picker>small{color:var(--muted);font-size:11px;line-height:1.45}

/* v4.9: make draft saving obvious and keep the save controls within reach. */
.news-status-tabs{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 18px;padding:5px;border:1px solid var(--border);border-radius:14px;background:rgb(255 253 248/.78);width:max-content;max-width:100%}
.news-status-tabs a{display:flex;align-items:center;gap:8px;padding:8px 12px;border-radius:10px;color:var(--secondary);font-size:13px;font-weight:800}
.news-status-tabs a:hover{color:var(--primary)}.news-status-tabs a.active{background:var(--primary);color:#fff;box-shadow:0 4px 11px rgb(94 17 23/.17)}
.news-status-tabs b{min-width:22px;padding:2px 6px;border-radius:999px;background:rgb(255 255 255/.68);color:inherit;font-size:11px;text-align:center}.news-status-tabs a:not(.active) b{background:#efe1d2}
.news-row-saved td{background:#fff5d8!important;box-shadow:inset 0 2px #d49b25,inset 0 -2px #d49b25}.news-row-saved td:first-child{box-shadow:inset 3px 0 #d49b25,inset 0 2px #d49b25,inset 0 -2px #d49b25}.news-row-saved td:last-child{box-shadow:inset -3px 0 #d49b25,inset 0 2px #d49b25,inset 0 -2px #d49b25}
.news-save-bar{position:sticky;top:82px;z-index:25;display:flex;align-items:center;justify-content:space-between;gap:18px;margin:-4px 0 22px;padding:13px 15px;border:1px solid #d9bd91;border-radius:14px;background:rgb(255 249 237/.97);box-shadow:0 8px 24px rgb(74 39 26/.13);backdrop-filter:blur(8px)}
.news-save-bar>div:first-child{display:grid;gap:2px}.news-save-bar strong{color:var(--primary-dark);font-size:14px}.news-save-bar small{max-width:650px;color:var(--muted);font-size:11px;line-height:1.45}
.news-save-buttons{display:flex;align-items:center;justify-content:flex-end;gap:9px;flex-wrap:wrap}.news-save-buttons .btn{white-space:nowrap}.news-form-bottom-actions{align-items:center;justify-content:space-between;gap:14px;padding-top:20px;border-top:1px solid var(--border)}
@media(max-width:720px){.news-save-bar{top:70px;align-items:stretch;flex-direction:column}.news-save-buttons{justify-content:stretch}.news-save-buttons .btn{flex:1}.news-form-bottom-actions{align-items:stretch;flex-direction:column-reverse}.news-form-bottom-actions>.btn{width:100%}.news-status-tabs{width:100%}.news-status-tabs a{flex:1;justify-content:center}}
@media(max-width:460px){.news-save-buttons{display:grid;grid-template-columns:1fr}.news-save-bar{top:62px}.news-status-tabs a{min-width:calc(50% - 4px)}}

/* v4.10: let article titles use the full line instead of balanced short lines. */
.article{width:min(1080px,100%);padding-inline:clamp(24px,3.5vw,40px)}
.article h1{width:100%;max-width:none;font-size:clamp(30px,3.5vw,40px);text-wrap:wrap;overflow-wrap:break-word;word-break:normal}
@media(max-width:720px){.article h1{font-size:clamp(28px,8vw,34px);line-height:1.22}}

/* v4.11: news-card titles fill each line naturally before wrapping. */
.news-card h2,.news-card h3{width:100%;max-width:none;text-wrap:wrap;overflow-wrap:break-word;word-break:normal}

/* v4.12: homepage hero copy and transparent family-tree artwork. */
.hero-image-card{min-height:390px;display:grid;place-items:center;overflow:hidden;padding:18px}
.hero-family-image{display:block;width:100%;height:auto;max-height:390px;object-fit:contain;object-position:center}
@media(max-width:1000px){.hero-image-card{min-height:350px}.hero-family-image{max-height:350px}}
@media(max-width:520px){.hero-card-wrap{padding:10px}.hero-image-card{min-height:280px;padding:10px}.hero-family-image{max-height:280px}}

/* v4.13: public-header logo, uppercase standard wordmark and centered single row. */
.public-header .header-inner{display:flex;align-items:center;justify-content:space-between;flex-wrap:nowrap}
.public-brand{height:100%;align-items:center;flex:0 1 auto;min-width:0}
.public-brand-logo{width:58px;height:58px;flex:0 0 58px;display:block;object-fit:contain;object-position:center}
.public-header .public-brand-title{max-width:none;font-family:Arial,"Segoe UI",sans-serif;font-size:clamp(16px,1.4vw,20px);font-weight:800;line-height:1.2;letter-spacing:.025em;white-space:nowrap;text-transform:uppercase}
.public-header .header-inner>nav.nav{display:flex;align-items:center;flex:0 0 auto}
@media(max-width:720px){.public-brand{gap:8px}.public-brand-logo{width:48px;height:48px;flex-basis:48px}.public-header .public-brand-title{max-width:230px;font-size:14px;line-height:1.15;white-space:normal}}
@media(max-width:420px){.public-brand-logo{width:44px;height:44px;flex-basis:44px}.public-header .public-brand-title{max-width:205px;font-size:12px;letter-spacing:.015em}}

/* v4.16: multi-image gallery events and an in-page slideshow. */
.gallery-upload .field small{display:block;margin-top:6px;color:var(--muted);font-size:11px;line-height:1.45}
.gallery-events{display:grid;gap:24px}.gallery-event{padding:0;overflow:visible}.gallery-event-header{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:22px 24px;border-bottom:1px solid var(--border);background:linear-gradient(135deg,#fffdf8,#f8ecdd);border-radius:20px 20px 0 0}.gallery-event-copy{min-width:0}.gallery-event-copy .section-kicker{display:block;margin-bottom:5px;color:var(--gold-dark);font-size:11px}.gallery-event-copy h2{margin:0 0 5px;color:var(--primary-dark);font-size:clamp(22px,2.5vw,28px)!important;line-height:1.3;text-wrap:wrap}.gallery-event-copy p{max-width:820px;margin:10px 0 0;color:var(--secondary);font-size:14px;line-height:1.65}.gallery-event-edit{flex:0 0 auto}
.gallery-event-images{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:14px;padding:18px}.gallery-photo-card{min-width:0;overflow:visible;border:1px solid #e1cdb6;border-radius:15px;background:#fffaf2;box-shadow:0 4px 12px rgb(63 37 24/.07)}.gallery-image-button{position:relative;width:100%;display:block;overflow:hidden;padding:0;border:0;border-radius:14px;background:#eadfd3;cursor:zoom-in}.gallery-image-button img{width:100%;aspect-ratio:4/3;display:block;object-fit:cover;transition:transform .22s}.gallery-image-button:hover img,.gallery-image-button:focus-visible img{transform:scale(1.035)}.gallery-image-button:focus-visible{outline:3px solid var(--gold);outline-offset:2px}.gallery-image-button>span{position:absolute;right:9px;bottom:9px;padding:4px 8px;border-radius:999px;background:rgb(48 21 20/.78);color:#fff;font-size:11px;font-weight:800}.gallery-photo-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;padding:9px}.gallery-photo-actions details{position:relative}
.gallery-lightbox{width:min(1180px,calc(100vw - 28px));max-width:none;height:min(860px,calc(100vh - 28px));max-height:none;margin:auto;padding:0;overflow:hidden;border:0;border-radius:21px;background:#1b1413;color:#fff;box-shadow:0 30px 90px rgb(0 0 0/.5)}.gallery-lightbox::backdrop{background:rgb(19 8 8/.82);backdrop-filter:blur(5px)}.gallery-lightbox-shell{position:relative;width:100%;height:100%;display:grid;place-items:center;padding:16px 76px}.gallery-lightbox figure{width:100%;height:100%;min-height:0;display:grid;grid-template-rows:minmax(0,1fr) auto;align-items:center;justify-items:center;gap:12px;margin:0}.gallery-lightbox figure>img{max-width:100%;max-height:100%;width:auto;height:auto;display:block;object-fit:contain;border-radius:10px;box-shadow:0 12px 35px rgb(0 0 0/.35)}.gallery-lightbox figcaption{width:min(820px,100%);display:grid;grid-template-columns:1fr auto;gap:2px 16px;padding:0 8px;color:#f6e9dd}.gallery-lightbox figcaption strong{font-size:18px;line-height:1.3}.gallery-lightbox figcaption span{color:#d2bba9;font-size:12px;text-align:right}.gallery-lightbox figcaption p{grid-column:1/-1;margin:4px 0 0;color:#d9c8bc;font-size:13px;line-height:1.55}.gallery-lightbox figcaption output{grid-column:1/-1;color:#d8ad63;font-size:12px;font-weight:800}.gallery-lightbox-close,.gallery-lightbox-nav{position:absolute;z-index:2;display:grid;place-items:center;border:1px solid rgb(255 255 255/.25);background:rgb(255 255 255/.12);color:#fff;cursor:pointer;backdrop-filter:blur(4px)}.gallery-lightbox-close:hover,.gallery-lightbox-nav:hover{background:var(--primary)}.gallery-lightbox-close{top:16px;right:16px;width:42px;height:42px;border-radius:50%;font-size:29px;line-height:1}.gallery-lightbox-nav{top:50%;width:48px;height:64px;border-radius:15px;font-size:42px;transform:translateY(-50%)}.gallery-lightbox-nav.previous{left:14px}.gallery-lightbox-nav.next{right:14px}
@media(max-width:720px){.gallery-event-header{display:grid;padding:18px}.gallery-event-edit{justify-self:start}.gallery-event-images{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding:12px}.gallery-lightbox{width:100vw;height:100dvh;border-radius:0}.gallery-lightbox-shell{padding:60px 12px 18px}.gallery-lightbox figure{gap:9px}.gallery-lightbox figcaption{padding:0 42px 0 4px;grid-template-columns:1fr}.gallery-lightbox figcaption span{text-align:left}.gallery-lightbox-nav{top:auto;bottom:18px;width:38px;height:38px;border-radius:50%;font-size:30px;transform:none}.gallery-lightbox-nav.previous{left:auto;right:62px}.gallery-lightbox-nav.next{right:16px}.gallery-lightbox-close{top:12px;right:12px}}
@media(max-width:430px){.gallery-event-images{grid-template-columns:1fr}.gallery-photo-actions{justify-content:space-between}}
@media(max-width:720px){.modal-details .floating-form{inset:auto;left:50%;top:50%;right:auto;bottom:auto;width:min(520px,calc(100vw - 24px));max-height:calc(100dvh - 24px);padding:20px;transform:translate(-50%,-50%)}}

/* v4.18: balance the homepage calendar spacing with the surrounding sections. */
.home-calendar-section{padding-top:12px}
.home-calendar-heading{margin-bottom:22px}.home-calendar-heading h2{margin:0}
@media(max-width:720px){.home-calendar-section{padding-top:8px}}

/* v4.20: compact the About-page hero after removing its NT seal. */
.about-hero{padding:48px 20px}.about-hero-content>.hero-kicker{margin:0 0 14px}.about-hero h1{margin:0 0 12px}
@media(max-width:720px){.about-hero{padding:38px 18px}}

/* v4.21: use the shared family-tree logo in the public footer. */
.public-footer-logo{width:52px;height:52px;flex:0 0 52px;display:block;object-fit:contain;object-position:center}
@media(max-width:720px){.public-footer-logo{width:48px;height:48px;flex-basis:48px}}

/* v4.22: uppercase footer name and add the family contact details. */
.public-footer-contact{display:grid;gap:2px;margin-top:12px;color:rgb(255 239 210/.78);font-size:13px;line-height:1.55}.public-footer-contact a{color:#fff;font-weight:800}

/* v4.24: searchable generation-aware member pickers and unlimited child rows. */
.has-person-picker{position:relative}.person-picker-native{position:absolute!important;left:12px;top:38px;width:1px!important;height:1px!important;overflow:hidden;padding:0!important;border:0!important;opacity:0;pointer-events:none}.person-picker{position:relative;min-width:0}.person-picker.is-open{z-index:90}.person-picker-input{width:100%;padding-right:42px!important}.person-picker-toggle{position:absolute;right:1px;top:1px;width:39px;height:calc(100% - 2px);display:grid;place-items:center;padding:0;border:0;border-left:1px solid #ead7c1;border-radius:0 10px 10px 0;background:transparent;color:var(--secondary);font-size:20px}.person-picker-toggle:hover{background:#f8ecdf;color:var(--primary)}.person-picker-list{position:absolute;left:0;top:calc(100% + 6px);z-index:80;width:min(320px,calc(100vw - 48px));min-width:100%;max-height:285px;display:none;overflow-y:auto;overflow-x:hidden;padding:6px;border:1px solid #d7bfa2;border-radius:13px;background:#fffdf8;box-shadow:0 18px 42px rgb(65 27 22/.2);scrollbar-width:thin}.person-picker.is-open .person-picker-list{display:grid;gap:3px;animation:drop-in .14s ease-out}.person-picker-option{width:100%;min-width:0;display:flex;align-items:center;justify-content:space-between;gap:9px;padding:9px 10px;border:0;border-radius:9px;background:transparent;color:var(--ink);text-align:left}.person-picker-option strong{min-width:0;overflow:hidden;font-size:13px;text-overflow:ellipsis;white-space:nowrap}.person-picker-option small{flex:0 0 auto;padding:2px 7px;border-radius:999px;background:#f1e3d2;color:var(--primary-dark);font-size:10px;font-weight:800}.person-picker-option:hover,.person-picker-option.is-active{background:#f8eadb;color:var(--primary-dark)}.person-picker-option.is-empty strong{color:var(--muted);font-weight:650}.person-picker-empty{margin:0;padding:15px 10px;color:var(--muted);font-size:12px;text-align:center}
.bulk-child-row{position:relative;padding-top:16px}.bulk-child-remove{position:absolute;right:8px;top:-12px;width:25px;height:25px;display:grid;place-items:center;padding:0;border:1px solid #dfb6aa;border-radius:50%;background:#fff8f3;color:var(--error);font-size:18px;line-height:1}.bulk-child-remove:hover{border-color:var(--error);background:#fff0ee}.bulk-child-remove[hidden]{display:none}.bulk-child-add{width:100%;border-style:dashed;background:#fffaf2;color:var(--primary-dark)}
@media(max-width:520px){.person-picker-list{max-height:240px}.person-picker-option{align-items:flex-start;flex-direction:column;gap:3px}.bulk-child-remove{right:6px}}

/* v4.25: searchable root picker and PNG-export progress state. */
.root-picker-card.has-root-person-picker{position:relative;width:min(350px,100%);overflow:visible}.root-picker-card.has-root-person-picker>span{overflow:visible}.root-person-picker{margin-top:1px}.root-person-picker .person-picker-input{min-width:0;padding:1px 27px 1px 0!important;border:0;border-bottom:1px solid transparent;border-radius:0;background:transparent;color:var(--ink);font-size:14px;font-weight:750;line-height:1.35;outline:0}.root-person-picker .person-picker-input:focus{border-bottom-color:rgb(184 137 46/.55);box-shadow:none}.root-person-picker .person-picker-toggle{right:0;top:0;width:25px;height:100%;border:0;border-radius:7px;font-size:17px}.root-person-picker .person-picker-list{width:min(340px,calc(100vw - 48px));min-width:100%;top:calc(100% + 9px)}[data-export-tree]:disabled{cursor:wait;opacity:.68;transform:none!important}
@media(max-width:520px){.root-picker-card.has-root-person-picker{width:100%}.root-person-picker .person-picker-list{width:min(100%,calc(100vw - 48px))}}

/* v4.26: compact name-only tree cards and two-level searchable member menus. */
.tree-node:not(.minimal){width:126px;min-height:112px;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:7px;padding:11px 8px 9px;text-align:center}.tree-node:not(.minimal) img{width:50px;height:50px;flex:0 0 50px}.tree-node:not(.minimal) .node-copy{width:100%;display:block}.tree-node:not(.minimal) strong{display:-webkit-box;overflow:hidden;width:100%;color:#4e211e;font-size:11px;line-height:1.28;text-align:center;white-space:normal;-webkit-box-orient:vertical;-webkit-line-clamp:2}.tree-node:not(.minimal) small{display:none}.css-tree li{padding-inline:7px}.marriage-link{width:28px;flex-basis:28px}
.person-picker-trigger{width:100%;min-width:0;display:flex;align-items:center;justify-content:space-between;gap:8px;padding:11px 12px;border:1px solid var(--border);border-radius:11px;background:var(--surface-strong);color:var(--muted);font-size:14px;text-align:left}.person-picker-trigger.has-value{color:var(--ink);font-weight:700}.person-picker-trigger:focus-visible{border-color:var(--primary);outline:0;box-shadow:0 0 0 3px rgb(139 30 36/.08)}.person-picker-trigger-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.person-picker-chevron{flex:0 0 auto;color:var(--primary);font-size:18px;line-height:1;transition:transform .16s}.person-picker.is-open .person-picker-chevron{transform:rotate(180deg)}
.person-picker-popover{position:absolute;left:0;top:calc(100% + 7px);z-index:110;width:min(350px,calc(100vw - 48px));display:none;padding:9px;border:1px solid #d7bfa2;border-radius:16px;background:#fffdf8;box-shadow:0 20px 50px rgb(65 27 22/.22)}.person-picker.is-open .person-picker-popover{display:block;animation:drop-in .14s ease-out}.person-picker-search{display:flex;align-items:center;gap:7px;padding:0 10px;border:1px solid #dfc7ab;border-radius:11px;background:#fff}.person-picker-search>span{color:var(--muted);font-size:18px}.person-picker-search-input{width:100%;min-width:0;padding:9px 0;border:0;background:transparent;color:var(--ink);outline:0}.person-picker-search:focus-within{border-color:var(--gold);box-shadow:0 0 0 3px rgb(184 137 46/.1)}.person-picker-caption{padding:11px 7px 5px;color:#9a8175;font-size:9px;font-weight:850;letter-spacing:.1em}.person-picker .person-picker-list{position:static;left:auto;top:auto;width:100%;min-width:0;max-height:300px;display:grid;gap:2px;overflow-y:auto;overflow-x:hidden;padding:3px;border:0;border-radius:9px;background:transparent;box-shadow:none;animation:none}.person-picker.is-open .person-picker-list{display:grid;animation:none}.person-picker-option{min-height:54px;align-items:center;padding:8px 9px;border-radius:10px}.person-picker-option-copy{min-width:0;display:grid;gap:2px;flex:1}.person-picker-name-line{min-width:0;display:flex;align-items:baseline;gap:5px}.person-picker-name-line strong{min-width:0;overflow:hidden;color:var(--ink);font-size:13px;text-overflow:ellipsis;white-space:nowrap}.person-picker-name-line small{flex:0 0 auto;padding:0;background:transparent;color:#9a8c84;font-size:11px;font-weight:500}.person-picker-option-copy em{color:var(--muted);font-size:10px;font-style:normal}.person-picker-check{width:20px;flex:0 0 20px;color:var(--primary);font-size:14px;font-weight:900;text-align:center}.person-picker-option.is-empty{min-height:42px}.person-picker-option.is-empty strong{font-size:12px}.relationship-tools details:has(.person-picker.is-open){position:relative;z-index:100}
.root-person-picker .person-picker-trigger{padding:1px 4px 1px 0;border:0;border-bottom:1px solid transparent;border-radius:0;background:transparent;font-size:14px}.root-person-picker .person-picker-trigger:focus-visible{border-bottom-color:rgb(184 137 46/.55);box-shadow:none}.root-person-picker .person-picker-popover{left:-61px;width:min(350px,calc(100vw - 48px));top:calc(100% + 12px)}
@media(max-width:620px){.tree-node:not(.minimal){width:112px;min-height:104px}.tree-node:not(.minimal) img{width:46px;height:46px;flex-basis:46px}.person-picker-popover{width:min(330px,calc(100vw - 32px))}.root-person-picker .person-picker-popover{left:-57px;width:min(100vw - 32px,350px)}}

/* v4.28: reliable touch pan/zoom, draggable bubbles and divorce controls. */
.tree-canvas{transition:none!important}.tree-shell,.bubble-shell,.bubble-shell svg{touch-action:none;overscroll-behavior:contain}.bubble-shell{user-select:none;-webkit-user-select:none}.bubble-shell svg:focus-visible{outline:3px solid rgb(184 137 46/.55);outline-offset:-3px}.bubble-unit{cursor:grab}.bubble-unit.is-dragging{cursor:grabbing}.bubble-gesture-hint{max-width:calc(100% - 32px)}
.relationship-actions{display:flex!important;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}.relationship-actions form{display:block}.relationship-type.is-divorced{color:var(--error)}.relationship-divorce .floating-form{width:min(440px,calc(100vw - 32px))}
@media(max-width:720px){.relationship-row{grid-template-columns:1fr;align-items:start}.relationship-actions{justify-content:flex-start}.bubble-shell{min-height:560px}.bubble-shell svg{height:560px}.bubble-gesture-hint{right:12px;left:12px;justify-content:center;border-radius:16px;text-align:center}}

/* v4.29: restore member-card taps and prevent mobile member toolbar overflow. */
@media(max-width:720px){
  .view-tabs{width:100%;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));margin-bottom:18px;padding:5px}
  .view-tabs button{width:100%;min-width:0;justify-content:center;padding:10px 5px}
  .member-list-toolbar,.member-list-toolbar .search-field,.member-list-toolbar .row{width:100%;min-width:0}
  .member-list-toolbar{overflow:hidden;padding:16px}
  .member-list-toolbar .row{grid-template-columns:minmax(0,1fr);gap:10px}
  .member-list-toolbar select,.member-list-toolbar .btn{width:100%;max-width:100%;min-width:0;margin:0}
  .member-list-toolbar select{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .member-list-toolbar .btn{grid-column:1;white-space:normal;text-align:center}
}

/* v4.30: keep member-form controls at their natural, consistent height. */
[data-member-calendar-form] .field{align-content:start}
[data-member-calendar-form] .form-grid>.field:not(.member-calendar-pair)>input:not([type="hidden"]):not([type="file"]),[data-member-calendar-form] .form-grid>.field:not(.member-calendar-pair)>select{height:51px}

/* v4.31: consistent parent links, bulk relationship rows and inline family removal. */
.relationship-list-item{display:flex;align-items:center;gap:5px;min-width:0;border-radius:11px}.relationship-list-item>a{min-width:0;flex:1}.relationship-list-item>form{flex:0 0 auto}.family-relation-remove,.relationship-entry-remove{width:28px;height:28px;display:grid;place-items:center;padding:0;border:1px solid #dfb6aa;border-radius:50%;background:#fff8f3;color:var(--error);font-size:19px;line-height:1;cursor:pointer}.family-relation-remove:hover,.relationship-entry-remove:hover{border-color:var(--error);background:#fff0ee;box-shadow:0 4px 12px rgb(141 30 24/.12)}
.parent-conflict-alert{display:grid;gap:10px;background:#fff7df;border-color:#e4c675;color:#674914}.parent-conflict-alert p{margin:4px 0 0}.parent-conflict-alert ul{margin:0;padding-left:20px}.parent-conflict-alert form{justify-self:start}
.relationship-tools{grid-template-columns:repeat(2,minmax(0,1fr))}.relationship-tools>details:first-child{grid-column:1/-1}.relationship-entry-list{display:grid;gap:14px}.relationship-entry{position:relative;min-width:0;margin:0;padding:18px 14px 14px;border:1px solid #e2ccb3;border-radius:16px;background:#fffaf2}.relationship-entry legend{padding:0 8px;color:var(--primary-dark);font-size:12px;font-weight:850}.relationship-entry-remove{position:absolute;right:10px;top:9px}.relationship-entry-remove[hidden]{display:none}.relationship-entry-add{width:100%;border-style:dashed;background:#fffaf2;color:var(--primary-dark)}
@media(max-width:720px){.relationship-tools{grid-template-columns:1fr}.relationship-tools>details:first-child{grid-column:auto}.relationship-entry{padding-inline:10px}.parent-conflict-alert form,.parent-conflict-alert .btn{width:100%}}

/* v4.32: balanced searchable dropdowns and refreshed public homepage controls. */
.person-picker-search{height:44px;padding:0 11px}.person-picker-search .person-picker-search-input,.field .person-picker-search .person-picker-search-input{height:42px;min-height:0;margin:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;outline:0}.person-picker-search .person-picker-search-input:focus,.field .person-picker-search .person-picker-search-input:focus{border:0;background:transparent;box-shadow:none;outline:0}.person-picker-search>span{width:20px;flex:0 0 20px;display:grid;place-items:center;line-height:1}
.public-header .nav-links>a{letter-spacing:.025em}.hero-genealogy-button{background:#fff;border-color:#fff;color:#111}.hero-genealogy-button:hover{background:var(--gold);border-color:#8a641f;color:#111}

/* v4.33: interactive home tree, direct feature links and unified brand presentation. */
.app-brand{min-width:0}.app-brand-logo{width:54px;height:54px;flex:0 0 54px;display:block;object-fit:contain}.app-brand-title{min-width:0;color:#fff;font-family:Arial,"Segoe UI",sans-serif;font-size:clamp(14px,1.35vw,19px);font-weight:800;line-height:1.2;letter-spacing:.025em;text-transform:uppercase;white-space:nowrap}
.auth-logo{width:92px;height:92px;display:block;margin:0 auto 15px;object-fit:contain;filter:drop-shadow(0 8px 15px rgb(94 17 23/.12))}
.page-title{width:max-content;max-width:100%}.page-title:after{left:50%;transform:translateX(-50%)}.page-title.center{margin-inline:auto}
.home-main{display:flex;flex-direction:column}.home-main>.hero-wrap{order:1}.home-main>.section-alt{order:2}.home-main>.section:not(.section-alt):not(.home-calendar-section){order:3}.home-main>.home-calendar-section{order:4;padding-top:30px;padding-bottom:68px}
.home-main .hero{grid-template-columns:minmax(0,.96fr) minmax(0,1.04fr);gap:48px}.home-family-orbit-wrap{min-width:0;padding:12px;background:linear-gradient(145deg,rgb(255 255 255/.12),rgb(184 137 46/.1));box-shadow:inset 0 1px rgb(255 255 255/.16)}.home-family-orbit{position:relative;min-height:420px;display:grid;grid-template-rows:auto minmax(0,1fr) auto;gap:8px;overflow:hidden;padding:20px;background:radial-gradient(circle at 50% 42%,#fffdf7 0,#fff8ed 58%,#f4dfc9 100%)}.home-family-orbit:before{content:"";position:absolute;inset:0;opacity:.42;background-image:linear-gradient(rgb(139 30 36/.04) 1px,transparent 1px),linear-gradient(90deg,rgb(139 30 36/.04) 1px,transparent 1px);background-size:24px 24px;pointer-events:none}.home-orbit-heading,.home-orbit-hint,.home-family-orbit canvas{position:relative}.home-orbit-heading{z-index:1;display:flex;align-items:end;justify-content:space-between;gap:12px}.home-orbit-heading span{color:var(--gold-dark);font-size:9px;font-weight:900;letter-spacing:.14em}.home-orbit-heading strong{color:var(--primary-dark);font:800 15px/1.2 Georgia,serif}.home-family-orbit canvas{width:100%;height:318px;display:block;border-radius:18px;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}.home-family-orbit canvas.is-dragging{cursor:grabbing}.home-family-orbit canvas:focus-visible{outline:3px solid rgb(184 137 46/.55);outline-offset:2px}.home-orbit-hint{z-index:1;margin:0!important;color:#816f65!important;font-size:11px!important;line-height:1.45!important;text-align:center}.home-feature-link{display:block;color:inherit;text-decoration:none;transition:transform .18s ease,border-color .18s ease,box-shadow .18s ease}.home-feature-link:hover,.home-feature-link:focus-visible{transform:translateY(-4px);border-color:rgb(184 137 46/.7);box-shadow:var(--shadow-hover)}.home-feature-link:focus-visible{outline:3px solid rgb(184 137 46/.35);outline-offset:3px}.home-feature-link h3{color:var(--primary-dark)}.home-feature-action{display:inline-flex;margin-top:10px;color:var(--primary);font-size:12px;font-weight:850}.public-footer-access-copy{display:block;margin:0 0 16px;color:#fff;font-size:14px;font-weight:850;line-height:1.6;text-decoration:none}.public-footer-access-copy:hover,.public-footer-access-copy:focus-visible{color:#ffe0a0;text-decoration:underline}
@media(max-width:1000px){.home-main .hero{grid-template-columns:1fr}.home-main .hero-copy{order:1}.home-family-orbit-wrap{order:2;width:min(620px,100%);margin:auto}.home-family-orbit{min-height:390px}.home-family-orbit canvas{height:290px}}
@media(max-width:720px){.app-brand{gap:8px}.app-brand-logo{width:47px;height:47px;flex-basis:47px}.app-brand-title{max-width:230px;font-size:13px;white-space:normal}.auth-logo{width:80px;height:80px}.home-main>.home-calendar-section{padding-top:18px;padding-bottom:52px}.home-family-orbit-wrap{padding:8px}.home-family-orbit{min-height:335px;padding:14px}.home-family-orbit canvas{height:245px}.home-orbit-heading{align-items:start;flex-direction:column;gap:3px}.home-orbit-heading strong{font-size:14px}.home-orbit-hint{font-size:10px!important}.home-main .hero{gap:28px}}
@media(max-width:420px){.app-brand-logo{width:43px;height:43px;flex-basis:43px}.app-brand-title{max-width:205px;font-size:11px}.home-family-orbit{min-height:315px}.home-family-orbit canvas{height:225px}}

/* v4.34: borderless translucent home bubbles, timed notices and a roomier event panel. */
.home-main .home-family-orbit{min-width:0;min-height:410px;display:grid;grid-template-rows:minmax(0,1fr) auto;gap:4px;overflow:visible;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none}.home-main .home-family-orbit:before{display:none}.home-main .home-family-orbit canvas{height:365px}.home-main .home-orbit-hint{color:rgb(255 249 239/.76)!important;text-shadow:0 1px 2px rgb(54 10 14/.55)}
.public-footer .public-footer-access-copy{color:#fff;text-transform:uppercase;letter-spacing:.025em}
.alert-success{max-height:120px;overflow:hidden;transition:opacity .28s ease,transform .28s ease,max-height .32s ease,margin .32s ease,padding .32s ease,border-width .32s ease}.alert-success.is-dismissing{max-height:0;margin-top:0;margin-bottom:0;padding-top:0;padding-bottom:0;border-width:0;opacity:0;transform:translateY(-6px)}
.today-card{grid-template-columns:minmax(420px,.76fr) minmax(0,1.24fr);padding:14px}.dashboard-calendar{align-self:start}.dashboard-calendar-side{min-height:176px;gap:7px;padding:10px 12px 9px}.dashboard-calendar-number{font-size:58px}.today-events{padding:4px 3px 2px 20px}.events-title{font-size:13px}.event-preview strong{font-size:15px}.event-preview small{overflow:visible;font-size:13px;line-height:1.4;text-overflow:clip;white-space:normal}.event-countdown{font-size:12px}.dashboard-events-link{font-size:14px}.empty-inline strong{font-size:15px}.empty-inline small{font-size:13px}
@media(max-width:1000px){.home-main .home-family-orbit{order:2;width:min(620px,100%);min-height:360px;margin:auto}.home-main .home-family-orbit canvas{height:320px}.today-card{grid-template-columns:1fr}.today-events{padding:20px 4px 4px}}
@media(max-width:720px){.home-main .home-family-orbit{min-height:305px;padding:0}.home-main .home-family-orbit canvas{height:270px}.dashboard-calendar-side{min-height:155px}.dashboard-calendar-number{font-size:52px}.event-preview{padding:11px}.event-preview strong{font-size:15px}.event-preview small{font-size:13px}}
@media(max-width:420px){.home-main .home-family-orbit{min-height:282px}.home-main .home-family-orbit canvas{height:248px}}

/* v4.35: equal-height dashboard panels and self-service account profiles. */
.today-card{align-items:stretch}.dashboard-calendar{align-self:stretch;height:100%}.dashboard-calendar-columns{height:100%}.dashboard-calendar-side{justify-content:space-evenly}
.narrow-wide{width:min(1080px,100%)}.profile-settings-grid{display:grid;grid-template-columns:280px minmax(0,1fr);gap:22px;align-items:start}.profile-account-card{position:sticky;top:98px;display:flex;flex-direction:column;align-items:center;gap:10px;text-align:center}.profile-account-card h2{margin:5px 0 0;color:var(--primary-dark);font-size:22px}.profile-account-card>.field{width:100%;margin-top:10px;text-align:left}.profile-account-card>.check{align-self:flex-start;text-align:left}.profile-account-avatar{width:126px;height:126px;display:grid;place-items:center;border:3px solid #ead0af;border-radius:50%;object-fit:cover;background:#f3e4d2;box-shadow:0 10px 25px rgb(94 17 23/.13)}.profile-account-initial{background:linear-gradient(145deg,var(--primary),var(--primary-dark));color:#fff;font-size:48px;font-weight:850}.profile-settings-form{min-width:0}.profile-form-heading{display:flex;align-items:center;gap:14px;margin-bottom:22px;padding-bottom:18px;border-bottom:1px solid var(--border)}.profile-form-heading h2,.profile-password-heading h2{margin:0;color:var(--primary-dark);font-size:22px}.profile-form-heading p,.profile-password-heading p{margin:5px 0 0;color:var(--muted);font-size:13px}.profile-settings-form .field.full{grid-column:1/-1}.profile-settings-form textarea{resize:vertical}.profile-password-heading{margin:28px 0 17px;padding-top:23px;border-top:1px solid var(--border)}.profile-settings-form .form-actions{margin-top:24px}.profile-account-card .field small{display:block;margin-top:6px;color:var(--muted);font-size:11px}
@media(max-width:820px){.profile-settings-grid{grid-template-columns:1fr}.profile-account-card{position:static}.profile-account-card>.field{width:min(460px,100%)}.profile-account-card>.check{align-self:center}}
@media(max-width:520px){.account-profile-page .page-head{align-items:stretch}.account-profile-page .page-head>.btn{width:100%}.profile-account-card,.profile-settings-form{padding:22px 18px}.profile-account-avatar{width:104px;height:104px}.profile-settings-form .form-grid{grid-template-columns:1fr}.profile-settings-form .field.full{grid-column:auto}.profile-settings-form .form-actions{display:grid}.profile-settings-form .form-actions>*{width:100%}}

/* v4.36: transparent Dong Son drum texture and full-width Vietnamese solar/lunar calendar. */
.home-main .hero:before{background-image:linear-gradient(135deg,rgb(94 17 23/.22),rgb(139 30 36/.06)),url('../../images/bronze-drum-pattern.svg');background-repeat:no-repeat;background-position:center,center;background-size:100% 100%,min(78vw,760px) min(78vw,760px);opacity:.92}
.home-main>.section{position:relative;overflow:hidden}.home-main>.section:before{content:"";position:absolute;z-index:0;inset:0;background-image:url('../../images/bronze-drum-pattern.svg');background-repeat:repeat;background-position:center;background-size:560px 560px;opacity:.12;pointer-events:none}.home-main>.section>.container{position:relative;z-index:1}
.home-main .card,.home-main .panel{background-color:rgb(255 249 239/.96);background-image:linear-gradient(rgb(255 249 239/.92),rgb(255 249 239/.92)),url('../../images/bronze-drum-pattern.svg');background-repeat:no-repeat;background-position:center;background-size:100% 100%,340px 340px}
.home-solar-date-field{position:relative}.calendar-form .solar-calendar-trigger{width:100%;min-height:51px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 14px;border:1px solid var(--border);border-radius:12px;background:var(--surface-strong);color:var(--ink);font-size:16px;text-align:left}.calendar-form .solar-calendar-trigger:hover{border-color:var(--primary);box-shadow:0 0 0 3px rgb(139 30 36/.08)}.solar-calendar-trigger-icon{color:var(--primary);font-size:20px;line-height:1}
.solar-calendar-popover{width:100%;margin-top:5px;padding:16px;border:1px solid #cfaa7e;border-radius:16px;background:#fffdf8;box-shadow:0 18px 36px rgb(75 27 20/.13)}.solar-calendar-toolbar{display:grid;grid-template-columns:42px minmax(0,1fr) 42px;align-items:center;gap:10px;margin-bottom:12px}.solar-calendar-toolbar strong{text-align:center;color:var(--primary-dark);font-size:17px}.solar-calendar-toolbar button{width:42px;height:42px;display:grid;place-items:center;padding:0;border:1px solid var(--border);border-radius:11px;background:#fff8ed;color:var(--primary);font-size:26px;line-height:1}.solar-calendar-toolbar button:hover:not(:disabled){background:#f5e2ca}.solar-calendar-toolbar button:disabled{cursor:not-allowed;opacity:.38}
.solar-calendar-weekdays,.solar-calendar-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}.solar-calendar-weekdays{margin-bottom:7px}.solar-calendar-weekdays span{min-width:0;color:var(--secondary);font-size:11px;font-weight:850;text-align:center;white-space:nowrap}.solar-calendar-weekdays span:last-child{color:var(--primary)}
.solar-calendar-day{min-width:0;min-height:63px;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;padding:5px 2px;border:1px solid #ead7c0;border-radius:10px;background:#fffaf2;color:var(--ink);line-height:1.1;transition:background .15s ease,border-color .15s ease,transform .15s ease}.solar-calendar-day:hover{z-index:1;transform:translateY(-1px);border-color:var(--primary);background:#f9ecda}.solar-calendar-day.is-outside{opacity:.42}.solar-calendar-solar{font-size:19px;font-weight:850}.solar-calendar-lunar{color:var(--muted);font-size:9px;font-weight:700;white-space:nowrap}.solar-calendar-day.is-today{border:2px solid var(--primary);color:var(--primary)}.solar-calendar-day.is-selected{border-color:var(--primary-dark);background:var(--primary);color:#fff;box-shadow:0 5px 13px rgb(139 30 36/.22)}.solar-calendar-day.is-selected .solar-calendar-lunar{color:#ffe9c7}.solar-calendar-footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:12px;padding-top:11px;border-top:1px solid #ead7c0}.solar-calendar-footer button{padding:7px 12px;border:0;border-radius:9px;background:#f5e2ca;color:var(--primary-dark);font-size:12px;font-weight:800}.solar-calendar-footer button:hover{background:var(--primary);color:#fff}
@media(max-width:560px){.home-main .hero:before{background-size:100% 100%,620px 620px}.home-main>.section:before{background-size:410px 410px}.solar-calendar-popover{padding:11px 8px}.solar-calendar-toolbar{grid-template-columns:38px minmax(0,1fr) 38px;gap:6px}.solar-calendar-toolbar button{width:38px;height:38px}.solar-calendar-toolbar strong{font-size:15px}.solar-calendar-weekdays,.solar-calendar-grid{gap:3px}.solar-calendar-weekdays span{font-size:9px}.solar-calendar-day{min-height:52px;border-radius:8px}.solar-calendar-solar{font-size:16px}.solar-calendar-lunar{font-size:7.5px}}

/* v4.37: compact typeable home calendar and admin account-profile editor. */
.home-main .hero:before{opacity:.72}
.home-solar-date-field{z-index:12}.solar-calendar-control{display:grid;grid-template-columns:minmax(0,1fr) 48px;overflow:hidden;border:1px solid var(--border);border-radius:12px;background:var(--surface-strong)}.calendar-form .solar-calendar-control>input{min-width:0;height:50px;min-height:50px;padding:11px 13px;border:0;border-radius:0;background:transparent;box-shadow:none}.calendar-form .solar-calendar-control>input:focus{border:0;box-shadow:none;outline:0}.solar-calendar-control:focus-within{border-color:var(--primary);box-shadow:0 0 0 3px rgb(139 30 36/.08)}.calendar-form .solar-calendar-control .solar-calendar-trigger{width:48px;min-height:50px;padding:0;border:0;border-left:1px solid var(--border);border-radius:0;background:#fff7eb;color:var(--primary);text-align:center}.calendar-form .solar-calendar-control .solar-calendar-trigger:hover{border-color:var(--border);background:#f3dfc6;box-shadow:none}.solar-calendar-help{margin-top:-2px;color:var(--muted);font-size:10px}.solar-calendar-popover{position:absolute;top:100%;left:0;z-index:30;width:min(360px,100%);margin-top:6px;padding:11px;border-radius:12px;box-shadow:0 16px 35px rgb(75 27 20/.2)}.solar-calendar-toolbar{grid-template-columns:34px minmax(0,1fr) 34px;gap:6px;margin-bottom:8px}.solar-calendar-toolbar button{width:34px;height:34px;border-radius:8px;font-size:21px}.solar-calendar-toolbar strong{font-size:14px}.solar-calendar-weekdays,.solar-calendar-grid{gap:2px}.solar-calendar-weekdays{margin-bottom:3px}.solar-calendar-weekdays span{font-size:9px}.solar-calendar-day{position:relative;min-height:43px;align-items:flex-start;justify-content:flex-start;gap:0;padding:5px 4px;border-color:#eadfce;border-radius:3px;background:#fffdf8}.solar-calendar-solar{font-size:14px;line-height:1;font-weight:800}.solar-calendar-lunar{position:absolute;top:5px;right:3px;font-size:7px;line-height:1}.solar-calendar-footer{margin-top:7px;padding-top:7px}.solar-calendar-footer button{padding:5px 9px;font-size:10px}.calendar-input-panel{position:relative;overflow:visible}.account-profile-page.is-admin-editor .profile-account-card{border-color:rgb(184 137 46/.7)}.admin-profile-status{width:100%;display:grid;gap:10px;margin-top:8px;padding:13px;border:1px solid var(--border);border-radius:12px;background:#fffaf2;text-align:left}.admin-profile-status .check{font-weight:750}.user-actions{align-items:center}.user-actions .btn{white-space:nowrap}
@media(max-width:560px){.solar-calendar-popover{width:100%;padding:9px 7px}.solar-calendar-day{min-height:40px;padding:4px 3px}.solar-calendar-solar{font-size:13px}.solar-calendar-lunar{top:4px;font-size:6.5px}.solar-calendar-weekdays span{font-size:8px}}

/* v4.38: centered shared calendar, concise account UI and orbiting genealogy bubbles. */
.menu-group-unlabeled{padding-top:4px}.profile-form-heading-centered{justify-content:center;text-align:center}.profile-form-heading-centered>div{width:100%}
.calendar-form .solar-calendar-control .solar-calendar-trigger{display:grid!important;place-items:center!important}.solar-calendar-trigger-icon{width:100%;height:100%;display:grid;place-items:center;line-height:1}
.solar-calendar-popover{left:50%;width:100%;max-width:none;transform:translateX(-50%)}.solar-calendar-day{min-height:49px;align-items:center;justify-content:center;gap:3px;padding:5px 2px}.solar-calendar-solar{font-size:16px;line-height:1.05}.solar-calendar-lunar{position:static;font-size:9.5px;line-height:1.05}.solar-calendar-day.is-sunday:not(.is-selected){color:#a4141d}.solar-calendar-day.is-sunday:not(.is-selected) .solar-calendar-lunar{color:#b74a4f}.solar-calendar-day.is-selected .solar-calendar-lunar{color:#ffe9c7}
.bubble-shell svg{background:radial-gradient(circle at 50% 48%,rgb(255 255 255/.72),transparent 53%)}.bubble-link{fill:none;stroke:#c9a978;stroke-width:1.7;stroke-linecap:round;pointer-events:none}.bubble-orbit-unit{cursor:grab;transform-box:fill-box;transform-origin:center;will-change:transform,opacity}.bubble-orbit-unit:focus-visible{outline:none}.bubble-orbit-unit:focus-visible .bubble-orbit-disc{stroke:#8b1e24;stroke-width:4}.bubble-orbit-disc{fill:rgb(255 253 248/.7);stroke:rgb(184 137 46/.48);stroke-width:1.5;filter:drop-shadow(0 7px 10px rgb(88 29 24/.14))}.bubble-orbit-unit.root .bubble-orbit-disc{fill:rgb(255 239 197/.8);stroke:#8b1e24;stroke-width:3}.bubble-orbit-unit:hover .bubble-orbit-disc{fill:rgb(255 247 225/.92);stroke:#8b1e24}.bubble-orbit-unit .bubble-avatar-ring{fill:#fff;stroke:rgb(184 137 46/.72);stroke-width:1.5}.bubble-orbit-name{font:800 12px var(--font-ui);paint-order:stroke;stroke:#fffaf2;stroke-width:3px;stroke-linejoin:round}.bubble-orbit-meta{fill:#80675d;font:750 9px var(--font-ui);text-anchor:middle;paint-order:stroke;stroke:#fffaf2;stroke-width:2.5px;stroke-linejoin:round}.bubble-shell svg.is-dragging .bubble-orbit-unit{cursor:grabbing}
@media(max-width:560px){.solar-calendar-popover{left:50%;width:100%;padding:9px 7px}.solar-calendar-day{min-height:45px;align-items:center;justify-content:center;padding:4px 2px}.solar-calendar-solar{font-size:15px}.solar-calendar-lunar{position:static;font-size:8px}.bubble-orbit-name{font-size:11px}.bubble-gesture-hint{font-size:10px}}

/* v4.39: automatically generated, themeable and print-ready genealogy book. */
.genealogy-book-page{--book-accent:#8b1e24;--book-deep:#5e1117;--book-gold:#b8892e;--book-paper:#fffdf8;--book-soft:#fff5e5;--book-ink:#301b19;background:linear-gradient(180deg,#f5eadb,#efe0cd)}
.genealogy-book-page[data-book-theme="elegant"]{--book-accent:#276d66;--book-deep:#174b47;--book-gold:#b38a45;--book-paper:#fffefa;--book-soft:#eaf5f1;--book-ink:#183532}
.genealogy-book-page[data-book-theme="modern"]{--book-accent:#832536;--book-deep:#371a20;--book-gold:#a78f72;--book-paper:#fff;--book-soft:#f1f1f1;--book-ink:#201d1d}
.genealogy-book-page[data-book-theme="warm"]{--book-accent:#a34c2b;--book-deep:#6c291b;--book-gold:#cf9838;--book-paper:#fffaf0;--book-soft:#fae8d1;--book-ink:#44251c}
.genealogy-book-container{max-width:1240px}.genealogy-book-heading{align-items:end}.book-page-kicker{display:block;margin-bottom:5px;color:var(--gold-dark);font-size:10px;font-weight:900;letter-spacing:.18em}.genealogy-book-toolbar{position:sticky;z-index:70;top:84px;display:flex;align-items:center;justify-content:space-between;gap:18px;margin-bottom:8px;padding:13px 16px;border-color:rgb(184 137 46/.45);box-shadow:0 10px 30px rgb(78 36 24/.12)}.genealogy-book-summary{min-width:160px;display:grid;gap:2px}.genealogy-book-summary strong{color:var(--primary-dark);font-size:14px}.genealogy-book-summary span{color:var(--muted);font-size:11px}.genealogy-book-actions{display:flex;align-items:center;justify-content:flex-end;gap:8px;flex-wrap:wrap}.book-choice{height:42px;padding:0 14px;border:1px solid var(--border);border-radius:11px;background:#fffaf2;color:var(--secondary);font-weight:800}.book-choice.is-active,.book-choice[aria-pressed="true"]{border-color:var(--primary);background:#f8e6df;color:var(--primary-dark)}.book-theme-menu{position:relative}.book-theme-menu>summary{min-width:122px;list-style:none;cursor:pointer}.book-theme-menu>summary::-webkit-details-marker{display:none}.book-theme-options{position:absolute;z-index:90;top:calc(100% + 7px);right:0;width:225px;display:grid;gap:4px;padding:8px;border:1px solid #dbc4a9;border-radius:14px;background:#fffdf9;box-shadow:0 18px 45px rgb(65 27 22/.22)}.book-theme-options button{display:grid;gap:2px;padding:10px;border:0;border-radius:9px;background:transparent;color:var(--ink);font-weight:800;text-align:left}.book-theme-options button small{color:var(--muted);font-size:10px;font-weight:600}.book-theme-options button:hover,.book-theme-options button.is-active{background:#f6e9d8;color:var(--primary-dark)}.genealogy-book-tip{margin:0 0 18px;color:var(--muted);font-size:11px;text-align:center}.genealogy-book-preview-nav{position:sticky;z-index:60;top:148px;width:min(100%,900px);display:flex;gap:6px;margin:0 auto 16px;padding:8px;overflow-x:auto;border:1px solid #dfc9ae;border-radius:13px;background:rgb(255 253 248/.96);box-shadow:0 8px 24px rgb(78 36 24/.1);scrollbar-width:thin}.genealogy-book-preview-nav.hidden{display:none}.genealogy-book-preview-nav a{flex:0 0 auto;padding:7px 11px;border-radius:8px;color:var(--secondary);font-size:11px;font-weight:800;text-decoration:none}.genealogy-book-preview-nav a:hover{background:#f5e4d1;color:var(--primary-dark)}
.family-book{width:min(820px,100%);display:grid;gap:24px;margin:0 auto;counter-reset:book-screen-page}.family-book-sheet{position:relative;isolation:isolate;width:100%;min-height:1120px;overflow:hidden;padding:68px 72px 62px;border:1px solid rgb(111 66 47/.16);border-radius:3px;background:var(--book-paper);color:var(--book-ink);box-shadow:0 18px 55px rgb(77 36 24/.2);counter-increment:book-screen-page}.family-book-sheet:after{content:"";position:absolute;z-index:-1;inset:13px;border:1px solid color-mix(in srgb,var(--book-gold) 38%,transparent);pointer-events:none}.book-screen-page-number{position:absolute;right:0;bottom:25px;left:0;color:color-mix(in srgb,var(--book-ink) 60%,transparent);font:600 10px Georgia,serif;text-align:center}.book-screen-page-number:before{content:"— "}.book-screen-page-number:after{content:" —"}.book-cover-pattern{position:absolute;z-index:-1;inset:0;background-image:radial-gradient(circle at center,color-mix(in srgb,var(--book-paper) 24%,transparent),var(--book-paper) 68%),url('../../images/bronze-drum-pattern.svg');background-position:center;background-repeat:no-repeat;background-size:100% 100%,760px 760px;opacity:.18}.family-book-cover{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:linear-gradient(145deg,var(--book-paper),var(--book-soft))}.book-cover-logo{width:116px;height:116px;display:block;object-fit:contain;filter:drop-shadow(0 8px 16px rgb(74 28 22/.15))}.book-cover-overline{margin:30px 0 8px;color:var(--book-gold);font:700 14px/1.4 Georgia,serif;letter-spacing:.28em}.family-book-cover h2{max-width:600px;margin:8px 0 4px;color:var(--book-deep);font:700 clamp(36px,6vw,57px)/1.12 Georgia,"Times New Roman",serif;letter-spacing:.035em}.book-cover-place{margin:5px 0 38px;color:var(--book-accent);font:700 18px Georgia,serif;letter-spacing:.22em}.book-cover-rule{width:min(390px,80%);display:flex;align-items:center;justify-content:center;gap:13px;color:var(--book-gold)}.book-cover-rule span{height:1px;flex:1;background:linear-gradient(90deg,transparent,var(--book-gold))}.book-cover-rule span:last-child{background:linear-gradient(90deg,var(--book-gold),transparent)}.book-cover-statistics{display:flex;align-items:center;justify-content:center;gap:26px;margin:0 0 42px}.book-cover-statistics span{min-width:120px;display:grid;gap:5px;color:color-mix(in srgb,var(--book-ink) 72%,transparent);font:600 12px Georgia,serif}.book-cover-statistics span+span{border-left:1px solid color-mix(in srgb,var(--book-gold) 55%,transparent)}.book-cover-statistics b{color:var(--book-accent);font-size:26px}.book-cover-date{color:color-mix(in srgb,var(--book-ink) 65%,transparent);font:italic 13px Georgia,serif}.book-cover-footer{margin:20px 0 0;color:var(--book-deep);font:600 12px Georgia,serif;letter-spacing:.08em}
.book-section-title{margin-bottom:38px;text-align:center}.book-section-title:after{content:"";width:72px;height:2px;display:block;margin:19px auto 0;background:var(--book-gold)}.book-section-title>span,.book-generation-header span{color:var(--book-gold);font:700 10px Georgia,serif;letter-spacing:.2em}.book-section-title h2{margin:8px 0;color:var(--book-deep);font:700 31px/1.2 Georgia,serif}.book-section-title p{margin:0;color:color-mix(in srgb,var(--book-ink) 65%,transparent);font:italic 12px Georgia,serif}.book-toc-block{margin-top:28px}.book-toc-block h3{display:flex;align-items:center;justify-content:space-between;margin:0 0 9px;padding-bottom:7px;border-bottom:2px solid var(--book-accent);color:var(--book-deep);font:700 18px Georgia,serif}.book-toc-block h3 small{color:color-mix(in srgb,var(--book-ink) 55%,transparent);font:600 10px var(--font-ui)}.book-toc-block>a{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:11px 3px;border-bottom:1px dotted color-mix(in srgb,var(--book-gold) 55%,transparent);color:var(--book-ink);font:600 13px Georgia,serif;text-decoration:none}.book-toc-block>a:hover{color:var(--book-accent)}.book-toc-block>a b{color:color-mix(in srgb,var(--book-ink) 55%,transparent);font:600 10px var(--font-ui)}.book-toc-appendix{margin-top:42px}
.book-generation-header{display:flex;align-items:end;justify-content:space-between;gap:18px;margin-bottom:31px;padding-bottom:18px;border-bottom:2px solid var(--book-accent)}.book-generation-header h2{margin:7px 0 0;color:var(--book-deep);font:700 28px/1.1 Georgia,serif}.book-generation-header>b{color:color-mix(in srgb,var(--book-ink) 62%,transparent);font-size:10px;white-space:nowrap}.book-member-list{display:grid;gap:14px}.book-member-card{display:grid;grid-template-columns:34px minmax(0,1fr);gap:12px;padding:15px;border:1px solid color-mix(in srgb,var(--book-gold) 40%,transparent);border-radius:8px;background:color-mix(in srgb,var(--book-soft) 55%,var(--book-paper));break-inside:avoid}.book-member-number{width:30px;height:30px;display:grid;place-items:center;border-radius:50%;background:var(--book-accent);color:#fff;font:700 12px Georgia,serif}.book-member-content{min-width:0}.book-member-content>header{display:flex;align-items:start;justify-content:space-between;gap:12px}.book-member-content h3{margin:0;color:var(--book-deep);font:700 17px/1.25 Georgia,serif}.book-member-content h3 a{color:inherit;text-decoration:none}.book-member-content h3 a:hover{text-decoration:underline}.book-member-content header p{margin:3px 0 0;color:color-mix(in srgb,var(--book-ink) 60%,transparent);font:italic 10px Georgia,serif}.book-member-content header>span{flex:0 0 auto;color:var(--book-accent);font:700 11px Georgia,serif}.book-member-relations{display:grid;gap:5px;margin:12px 0 0}.book-member-relations>div{display:grid;grid-template-columns:73px minmax(0,1fr);gap:7px}.book-member-relations dt{color:color-mix(in srgb,var(--book-ink) 65%,transparent);font:700 10px var(--font-ui)}.book-member-relations dd{margin:0;color:var(--book-ink);font:600 11px/1.5 Georgia,serif}.book-member-relations a{color:inherit;text-decoration:none}.book-member-relations small{color:color-mix(in srgb,var(--book-ink) 62%,transparent);font-size:9px}.book-member-relations em{color:var(--book-accent);font-size:9px}.book-member-note{margin:11px 0 0;padding-top:9px;border-top:1px dotted color-mix(in srgb,var(--book-gold) 52%,transparent);color:color-mix(in srgb,var(--book-ink) 76%,transparent);font:italic 10px/1.55 Georgia,serif}.family-book-external .book-member-number{border:2px solid var(--book-gold);background:transparent;color:var(--book-accent)}
.book-name-index{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1px 28px}.book-name-index>a{min-width:0;display:grid;gap:2px;padding:9px 3px;border-bottom:1px dotted color-mix(in srgb,var(--book-gold) 48%,transparent);color:var(--book-ink);text-decoration:none;break-inside:avoid}.book-name-index>a:hover span{color:var(--book-accent)}.book-name-index span{overflow:hidden;font:700 12px Georgia,serif;text-overflow:ellipsis;white-space:nowrap}.book-name-index small{color:color-mix(in srgb,var(--book-ink) 58%,transparent);font-size:8px}.family-book-closing{display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;background:linear-gradient(145deg,var(--book-paper),var(--book-soft))}.family-book-closing>span{margin:28px;color:var(--book-gold);font-size:22px}.family-book-closing blockquote{margin:0;color:var(--book-deep);font:italic 700 clamp(23px,4vw,33px)/1.7 Georgia,serif}.family-book-closing>p{margin-top:36px;color:var(--book-accent);font:700 13px Georgia,serif;letter-spacing:.08em}
@media(max-width:900px){.genealogy-book-toolbar{position:relative;top:auto;align-items:stretch;flex-direction:column}.genealogy-book-summary{text-align:center}.genealogy-book-actions{justify-content:center}.genealogy-book-preview-nav{position:relative;top:auto}.family-book-sheet{min-height:1000px;padding:55px 52px}}
@media(max-width:620px){.genealogy-book-heading{align-items:stretch;flex-direction:column}.genealogy-book-heading>div{width:100%;min-width:0}.genealogy-book-heading .page-title{width:auto;overflow-wrap:anywhere}.genealogy-book-heading>.btn{width:100%}.genealogy-book-toolbar{padding:13px 11px}.genealogy-book-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));width:100%}.genealogy-book-actions>*{width:100%;min-width:0}.genealogy-book-actions>[data-book-print]{grid-column:1/-1}.book-theme-menu>summary{width:100%}.book-theme-options{right:auto;left:0;width:min(260px,calc(100vw - 50px))}.genealogy-book-tip{padding-inline:12px}.family-book{gap:14px}.family-book-sheet{min-height:760px;padding:40px 23px 48px;border-radius:2px}.family-book-sheet:after{inset:7px}.book-cover-logo{width:88px;height:88px}.book-cover-overline{font-size:10px}.family-book-cover h2{font-size:34px}.book-cover-place{margin-bottom:28px;font-size:14px}.book-cover-statistics{gap:8px}.book-cover-statistics span{min-width:105px}.book-section-title{margin-bottom:27px}.book-section-title h2{font-size:25px}.book-generation-header{align-items:start;flex-direction:column;gap:8px}.book-generation-header h2{font-size:23px}.book-member-card{grid-template-columns:28px minmax(0,1fr);gap:8px;padding:12px 9px}.book-member-number{width:25px;height:25px}.book-member-content>header{display:grid;gap:4px}.book-member-relations>div{grid-template-columns:62px minmax(0,1fr)}.book-name-index{grid-template-columns:1fr}.family-book-closing blockquote{font-size:22px}}
@media print{
  @page{size:A4 portrait;margin:0}
  body{background:#fff!important}.site-shell{display:block!important}.app-header,.public-header,.footer,.dashboard-footer,.genealogy-book-heading,.genealogy-book-toolbar,.genealogy-book-tip,.genealogy-book-preview-nav{display:none!important}.genealogy-book-page{padding:0!important;background:#fff!important}.genealogy-book-container{width:100%!important;max-width:none!important;padding:0!important}.family-book{width:210mm!important;display:block;margin:0!important}.family-book-sheet{width:210mm!important;min-height:297mm;margin:0!important;padding:16mm 17mm 15mm;border:0!important;border-radius:0!important;box-shadow:none!important;break-after:page;page-break-after:always;overflow:visible;-webkit-print-color-adjust:exact;print-color-adjust:exact}.family-book-sheet:last-child{break-after:auto;page-break-after:auto}.family-book-sheet:after{inset:7mm}.book-member-card,.book-name-index>a{break-inside:avoid;page-break-inside:avoid}.family-book-sheet.hidden,[data-book-inlaw-content].hidden{display:none!important}.family-book a{color:inherit!important;text-decoration:none!important}
}

/* v4.40: one Vietnamese-safe font throughout the genealogy book. */
.family-book,.family-book *{font-family:"Segoe UI",Arial,"Noto Sans",sans-serif!important;font-kerning:normal;text-rendering:optimizeLegibility}
.book-cover-designer{margin:7px 0 0;color:color-mix(in srgb,var(--book-ink) 72%,transparent);font-size:11px;font-weight:700;letter-spacing:.025em}
.book-member-relations dd{display:flex;align-items:baseline;flex-wrap:wrap;gap:4px 12px}.book-relative{min-width:0;display:inline-flex;align-items:baseline;gap:3px}.book-relative+.book-relative:before{content:"•";margin-right:7px;color:var(--book-gold);font-size:8px}.book-relative a{font-weight:700}.book-relative small,.book-relative em{white-space:nowrap}

/* v4.41: book cover credit, larger relationship copy and page-aware contents. */
.book-cover-designer{font-size:13px}.book-member-content header p{font-size:12px}.book-member-relations dt{font-size:12px}.book-member-relations dd{font-size:13px}.book-member-relations small,.book-member-relations em{font-size:11px}
.book-toc-columns,.book-toc-block>a.book-toc-row{display:grid;grid-template-columns:minmax(0,1fr) 145px 88px;align-items:center;gap:12px}.book-toc-columns{padding:0 3px 9px;border-bottom:2px solid var(--book-accent);color:var(--book-deep);font-size:11px;font-weight:800}.book-toc-columns b,.book-toc-columns em{text-align:right;font-style:normal}.book-toc-block>a.book-toc-row{justify-content:normal}.book-toc-row>b,.book-toc-row>em{color:color-mix(in srgb,var(--book-ink) 62%,transparent);font-size:11px;font-weight:700;text-align:right;font-style:normal}
@media(max-width:620px){.book-toc-columns,.book-toc-block>a.book-toc-row{grid-template-columns:minmax(0,1fr) 82px 58px;gap:6px}.book-toc-columns{font-size:8px}.book-toc-row>b,.book-toc-row>em{font-size:9px}}

/* v4.42: compact member directory table for the genealogy list view. */
.member-table-panel{overflow:hidden;padding:0;border-color:#dfbf8e;background:rgb(255 250 240/.92)}
.member-table-scroll{width:100%;max-width:100%;overflow-x:auto;overscroll-behavior-inline:contain;scrollbar-width:thin;scrollbar-color:#c99a55 #f7ead7}
.member-table-scroll:focus-visible{outline:3px solid rgb(153 30 36/.22);outline-offset:-3px}
.member-table{width:100%;min-width:880px;border-collapse:separate;border-spacing:0;background:transparent;color:var(--secondary);font-size:14px;line-height:1.35}
.member-table th,.member-table td{height:49px;padding:9px 16px;border-bottom:1px solid #e6c795;text-align:left;vertical-align:middle;white-space:nowrap}
.member-table th{position:sticky;top:0;z-index:2;height:54px;background:#fbf3e6;color:#5e4034;font-size:13px;font-weight:800;letter-spacing:.01em}
.member-table th span{margin-left:3px;color:#9c7965;font-size:11px}
.member-table tbody tr:last-child td{border-bottom:0}
.member-table-row{transition:background-color .16s ease,box-shadow .16s ease}
.member-table-row:hover{background:#fff3dc;box-shadow:inset 3px 0 var(--primary)}
.member-table-name{display:inline-block;max-width:270px;overflow:hidden;color:var(--primary-dark);font-weight:750;text-decoration:none;text-overflow:ellipsis;vertical-align:middle}
.member-table-name:hover{color:var(--primary);text-decoration:underline;text-underline-offset:3px}
.member-table-badge,.member-table-status{display:inline-flex;align-items:center;justify-content:center;min-height:25px;padding:3px 9px;border-radius:999px;font-size:12px;font-weight:750;line-height:1}
.member-generation-badge{background:#f1e9df;color:#4e443d}
.member-relation-internal{border:1px solid var(--primary);background:#fff4f0;color:var(--primary)}
.member-relation-external{border:1px solid #c88821;background:#fff7e5;color:#8b5b11}
.member-gender-badge{border:1px solid #dfbd88;background:#fffaf0;color:#684c3b}
.member-table-status.is-living{background:var(--primary-dark);color:#fff}
.member-table-status.is-deceased{background:#e8e3df;color:#5e554f}
.member-table-empty td{height:110px;color:var(--muted);font-style:italic;text-align:center}
@media(max-width:720px){
  .member-table-panel{border-radius:18px}
  .member-table{min-width:760px;font-size:13px}
  .member-table th,.member-table td{height:47px;padding-inline:12px}
  .member-table th{height:50px;font-size:12px}
  .member-table-name{max-width:210px}
}

/* v4.43: fuller A4 genealogy-book pages and aligned wrapped relationships. */
.book-cover-location{max-width:660px;margin:5px 0 38px;text-align:center}
.book-cover-place{margin:0;font-size:21px;line-height:1.25}
.book-cover-address{margin:8px 0 0;color:color-mix(in srgb,var(--book-ink) 72%,transparent);font-size:19px;font-weight:600;line-height:1.42;letter-spacing:0}
.book-generation-header{margin-bottom:20px;padding-bottom:12px}
.book-member-list{gap:10px}
.book-member-card{padding:12px 14px}
.book-member-relations{margin-top:9px}
.book-member-relations dd{column-gap:0}
.book-relative+.book-relative:before{content:none}
.book-relative:not(:last-child):after{content:"•";margin:0 9px;color:var(--book-gold);font-size:8px}
@media(max-width:620px){
  .book-cover-location{margin-bottom:28px}
  .book-cover-place{font-size:17px}
  .book-cover-address{font-size:15px;line-height:1.4}
  .book-generation-header{margin-bottom:16px;padding-bottom:10px}
  .book-member-list{gap:8px}
}

/* v4.44: measure real card heights and fill each printed A4 page dynamically. */
.family-book-sheet.book-pagination-measure{position:fixed!important;z-index:-999!important;top:0!important;left:-10000px!important;width:820px!important;height:1120px!important;min-height:1120px!important;max-height:1120px!important;margin:0!important;padding:68px 72px 62px!important;overflow:hidden!important;visibility:hidden!important;border:0!important;border-radius:0!important;box-shadow:none!important;pointer-events:none!important}
.family-book-sheet.book-pagination-measure:after,.family-book-sheet.book-pagination-measure .book-screen-page-number{display:none!important}

/* v4.45: open genealogy canvases, centered views and the closing book credit. */
.home-main .hero{position:relative}
.home-main .hero>canvas.home-family-orbit{width:100%;height:430px;min-width:0;min-height:0;display:block;align-self:center;margin:0;padding:0;border:0;border-radius:0;background:transparent;box-shadow:none;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none}
.home-main .hero>canvas.home-family-orbit.is-dragging{cursor:grabbing}
.home-main .hero>canvas.home-family-orbit:focus-visible{outline:3px solid rgb(255 231 175/.55);outline-offset:3px}
.family-visual-panel{position:relative;left:50%;width:min(1600px,calc(100vw - 24px));transform:translateX(-50%)}
.family-visual-panel .tree-shell,.family-visual-panel .mindmap-shell,.family-visual-panel .bubble-shell{border:0;border-radius:0;background:transparent;box-shadow:none}
.family-visual-panel .tree-shell:before{display:none}
.family-visual-panel .tree-shell{height:76vh;min-height:610px}
.family-visual-panel .mindmap-shell{min-height:72vh;padding:34px 22px;scrollbar-width:thin}
.family-visual-panel .mindmap-tree{margin-inline:auto}
.family-visual-panel .bubble-shell{min-height:72vh}
.family-visual-panel .bubble-shell svg{height:72vh;min-height:610px;background:transparent}
.family-visual-panel .tree-legend{justify-content:center;flex-wrap:wrap;text-align:center}
.book-closing-credit{width:min(520px,90%);display:grid;justify-items:center;gap:12px;margin-top:36px}
.book-closing-credit>p{margin:0;color:var(--book-accent);font-size:13px;font-weight:700;letter-spacing:.08em}
.book-closing-credit-rule{width:min(330px,85%);display:flex;align-items:center;gap:12px;color:var(--book-gold)}
.book-closing-credit-rule span{height:1px;flex:1;background:linear-gradient(90deg,transparent,var(--book-gold))}
.book-closing-credit-rule span:last-child{background:linear-gradient(90deg,var(--book-gold),transparent)}
.book-closing-credit-rule b{font-size:10px}
.book-closing-credit small{color:color-mix(in srgb,var(--book-ink) 72%,transparent);font-size:13px;font-weight:700;letter-spacing:.025em}
@media(max-width:1000px){.home-main .hero>canvas.home-family-orbit{order:2;width:min(720px,100%);height:370px;margin-inline:auto}.family-visual-panel{width:calc(100vw - 16px)}}
@media(max-width:720px){.home-main .hero>canvas.home-family-orbit{height:310px}.family-visual-panel .tree-shell{height:72vh;min-height:520px}.family-visual-panel .mindmap-shell,.family-visual-panel .bubble-shell{min-height:560px}.family-visual-panel .bubble-shell svg{height:560px;min-height:560px}.book-closing-credit{margin-top:28px}.book-closing-credit>p,.book-closing-credit small{font-size:11px}}

/* v4.46: locked administrator roles, tidy root results and complete internal-clan book entries. */
.user-admin-locked,.admin-account-lock{display:grid;justify-items:start;gap:3px}
.user-admin-locked small,.admin-account-lock small{color:var(--muted);font-size:10px}
.admin-account-lock{min-height:50px;align-content:center;padding:9px 12px;border:1px solid var(--border);border-radius:11px;background:#fff8ed}
.admin-account-lock strong{color:var(--primary-dark);font-size:13px}
.user-role-fixed{background:#eee9e5;color:#65564e}
.root-person-picker .person-picker-list{gap:0;padding-inline:2px}
.root-person-picker .person-picker-option{min-height:56px;align-items:center!important;justify-content:flex-start;flex-direction:row!important;gap:8px;padding:9px 7px;border-radius:0;text-align:left}
.root-person-picker .person-picker-option:not(:last-child){border-bottom:1px dashed #dcc9b7}
.root-person-picker .person-picker-option-copy{align-content:center;justify-items:start;text-align:left}
.root-person-picker .person-picker-name-line{width:100%;justify-content:flex-start;flex-wrap:wrap;text-align:left}
.root-person-picker .person-picker-name-line strong{overflow:visible;text-align:left;text-overflow:clip;white-space:normal}
.root-person-picker .person-picker-option-copy em{text-align:left}
.root-person-picker .person-picker-check{margin-left:auto;text-align:right}
.book-member-relations dd{min-width:0}
.book-relative{max-width:100%;flex-wrap:wrap;overflow-wrap:anywhere}
.book-relative em{min-width:0;white-space:normal;overflow-wrap:anywhere}
@media(max-width:620px){
  .root-person-picker .person-picker-option{min-height:54px;padding:8px 6px}
  .root-person-picker .person-picker-name-line{gap:3px 6px}
  .book-relative em{display:block;flex:1 0 100%;margin-top:1px;line-height:1.35}
}

/* v4.47: trình chọn thành viên trong Quản lý quan hệ */
.relationship-tools .person-picker,.relationship-tools .has-person-picker{min-width:0;max-width:100%}
.relationship-tools .person-picker-popover{width:100%;min-width:0;max-width:100%;padding:8px}
.relationship-tools .person-picker-list{gap:0!important;padding:2px}
.relationship-tools .person-picker-option{min-height:56px;align-items:center!important;justify-content:flex-start;flex-direction:row!important;gap:8px;padding:9px 7px;border-radius:0;text-align:left}
.relationship-tools .person-picker-option:not(:last-child){border-bottom:1px dashed #dcc9b7}
.relationship-tools .person-picker-option-copy{min-width:0;align-content:center;justify-items:start;text-align:left}
.relationship-tools .person-picker-name-line{width:100%;min-width:0;justify-content:flex-start;flex-wrap:wrap;text-align:left}
.relationship-tools .person-picker-name-line strong{overflow:visible;text-align:left;text-overflow:clip;white-space:normal;overflow-wrap:anywhere}
.relationship-tools .person-picker-option-copy em{text-align:left}
.relationship-tools .person-picker-check{margin-left:auto}

/* v4.47: tìm kiếm quan hệ và hộp cập nhật hôn nhân */
.relationship-list-heading>div{min-width:180px}
.relationship-list-heading .relationship-search{width:min(460px,48vw);max-width:100%;flex:0 1 460px}
.relationship-marriage-editor .floating-form{width:min(460px,calc(100vw - 32px))}
.relationship-marriage-editor [data-marriage-end-field]{transition:opacity .15s ease}
.relationship-marriage-editor [data-marriage-end-field].is-disabled{opacity:.5}
.marriage-editor-help{min-height:1.25em;margin:0}

/* v4.47: bộ lọc Danh sách thành viên gọn trên điện thoại */
.member-list-filter-grid{min-width:0;align-items:flex-end}
.member-filter-control{min-width:0;display:block}
.member-filter-control>span{display:none}
.member-filter-control select{width:100%}

@media(max-width:720px){
  .relationship-tools .person-picker-popover{left:0;right:0;width:100%;max-width:100%}
  .relationship-tools .person-picker-option{min-height:54px;padding:8px 6px}
  .relationship-tools .details-form,.relationship-tools .details-form .form-grid,.relationship-tools .details-form .field{min-width:0;max-width:100%}
  .relationship-list-heading{align-items:stretch;flex-direction:column}
  .relationship-list-heading>div,.relationship-list-heading .relationship-search{width:100%;max-width:100%;flex-basis:auto}
  .relationship-list-heading h2{margin-bottom:2px}
  .relationship-list-heading p{margin:0}
  .member-list-toolbar{gap:12px}
  .member-list-toolbar .member-list-filter-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;width:100%;min-width:0}
  .member-filter-control{width:100%;min-width:0;display:grid;gap:5px}
  .member-filter-control>span{display:block;color:var(--muted);font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
  .member-list-toolbar .member-filter-control select{width:100%;max-width:100%;min-width:0;padding:10px 29px 10px 10px;font-size:12px}
  .member-list-toolbar .member-list-filter-grid>.btn{grid-column:1/-1;width:100%;max-width:100%;margin:0;text-align:center;white-space:normal}
}
@media(max-width:360px){
  .member-list-toolbar .member-list-filter-grid{grid-template-columns:minmax(0,1fr)}
  .member-list-toolbar .member-list-filter-grid>.btn{grid-column:1}
}

/* v4.48: menu lựa chọn đồng nhất màu website, thay bảng chọn mặc định quá lớn trên mobile. */
.site-select{display:contents}
.site-select-trigger,.site-select-menu{display:none}
.member-filter-control>label{display:none}

@media(max-width:720px){
  .site-select{position:relative;display:block;width:100%;min-width:0}
  .site-select.is-open{z-index:160}
  .site-select-native{position:absolute!important;left:0!important;bottom:0!important;width:1px!important;height:1px!important;min-width:0!important;max-width:none!important;padding:0!important;border:0!important;opacity:0!important;pointer-events:none!important}
  .site-select-trigger{width:100%;min-width:0;min-height:46px;display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid #d8b994;border-radius:12px;background:#fffaf2;color:var(--ink);font-family:inherit;font-size:13px;font-weight:700;line-height:1.35;text-align:left;box-shadow:inset 0 1px 0 rgb(255 255 255/.82);cursor:pointer}
  .site-select-trigger:hover,.site-select-trigger:focus-visible,.site-select.is-open .site-select-trigger{border-color:var(--gold);background:#fff7e9;outline:0;box-shadow:0 0 0 3px rgb(184 137 46/.12)}
  .site-select-trigger-text{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .site-select-chevron{flex:0 0 auto;color:var(--primary);font-size:17px;line-height:1;transition:transform .15s ease}
  .site-select.is-open .site-select-chevron{transform:rotate(180deg)}
  .site-select-menu{position:absolute;left:0;top:calc(100% + 6px);z-index:170;width:100%;min-width:0;max-height:min(320px,calc(100dvh - 56px));overflow:auto;padding:5px;border:1px solid #d8b994;border-radius:15px;background:#fffdf8;box-shadow:0 18px 45px rgb(71 30 24/.24);scrollbar-width:thin;overscroll-behavior:contain}
  .site-select.is-open .site-select-menu{display:grid;animation:drop-in .14s ease-out}
  .site-select.opens-up .site-select-menu{top:auto;bottom:calc(100% + 6px);transform-origin:bottom}
  .site-select-option{width:100%;min-width:0;min-height:46px;display:flex;align-items:center;justify-content:space-between;gap:9px;padding:9px 10px;border:0;border-radius:0;background:transparent;color:var(--secondary);font-family:inherit;font-size:13px;font-weight:700;line-height:1.4;text-align:left;cursor:pointer}
  .site-select-option:not(:last-child){border-bottom:1px dashed #dcc9b7}
  .site-select-option>span:first-child{min-width:0;white-space:normal;overflow-wrap:anywhere}
  .site-select-option:hover,.site-select-option:focus-visible{border-radius:9px;background:#f9ecde;color:var(--primary-dark);outline:0}
  .site-select-option.is-selected{border-radius:9px;background:#f7e4d9;color:var(--primary-dark)}
  .site-select-check{width:20px;height:20px;flex:0 0 20px;display:grid;place-items:center;border:1px solid #cfae87;border-radius:50%;color:transparent;font-size:11px}
  .site-select-option.is-selected .site-select-check{border-color:var(--primary);background:var(--primary);color:#fff;box-shadow:0 0 0 3px rgb(139 30 36/.1)}
  .member-filter-control>label{display:block;color:var(--muted);font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase}
  .member-list-toolbar{overflow:visible}
  .member-list-toolbar .member-filter-control .site-select-menu{width:min(330px,calc(100vw - 64px))}
  .member-list-toolbar .member-filter-control:nth-child(2) .site-select-menu{right:0;left:auto}
  .member-list-toolbar .site-select-trigger{min-height:44px;padding:9px 10px;font-size:12px}
  .member-list-toolbar .site-select-option{min-height:43px;padding:8px 9px;font-size:12px}
  .bulk-child-row>.site-select{grid-row:2}
}
