:root{--theme:#8d1f1f;--gold:#c99a2e;--ink:#272727;--muted:#6f6f6f;--bg:#f5f3ef;--card:#fff;--line:#d7cec0;--danger:#b42318;--ok:#067647;--warn:#b54708}*{box-sizing:border-box}body{margin:0;font-family:Arial,"Helvetica Neue",sans-serif;color:var(--ink);background:var(--bg);line-height:1.55}a{color:var(--theme);text-decoration:none}a:hover{text-decoration:underline}img{max-width:100%}.site-header{background:linear-gradient(180deg,var(--theme),#641313);color:#fff;border-bottom:4px solid var(--gold)}.topbar{max-width:1280px;margin:auto;padding:22px 24px;display:flex;justify-content:space-between;gap:20px;align-items:center}.brand{color:#fff;text-decoration:none}.brand-title{font-family:Georgia,serif;font-size:30px;font-weight:700;letter-spacing:.6px}.brand-sub{opacity:.88}.account-links a{color:#fff}.main-nav{background:#741717}.main-nav ul{max-width:1280px;margin:auto;padding:0 18px;list-style:none;display:flex;flex-wrap:wrap}.main-nav li a{display:block;color:#fff;padding:13px 14px;font-weight:700;font-size:14px}.main-nav li a:hover{background:rgba(255,255,255,.08);text-decoration:none}.nav-toggle{display:none}.site-main{max-width:1280px;margin:0 auto;padding:28px 24px 60px}.site-footer{background:#2b2320;color:#eee;padding:28px 24px;text-align:center}.hero{background:linear-gradient(135deg,rgba(112,13,13,.97),rgba(165,47,33,.9));color:#fff;border:1px solid #7f1f1f;border-radius:16px;padding:46px 34px;position:relative;overflow:hidden}.hero:after{content:"壽";position:absolute;right:24px;top:-36px;font-family:serif;font-size:190px;opacity:.08}.hero h1{font-family:Georgia,serif;font-size:44px;margin:0 0 8px}.hero p{max-width:760px}.btn{display:inline-block;border:0;border-radius:8px;background:var(--theme);color:#fff;padding:10px 15px;font-weight:700;cursor:pointer}.btn:hover{opacity:.93;text-decoration:none}.btn.secondary{background:#5d5d5d}.btn.light{background:#fff;color:var(--theme)}.btn.danger{background:var(--danger)}.btn.small{padding:6px 9px;font-size:13px}.grid{display:grid;gap:18px}.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{background:var(--card);border:1px solid #e8e2d8;border-radius:12px;padding:18px;box-shadow:0 3px 12px rgba(0,0,0,.035)}.section{margin-top:28px}.section-title{font-family:Georgia,serif;font-size:27px;color:#6c1919;margin:0 0 15px;padding-bottom:8px;border-bottom:2px solid #d7bd80}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:12px;margin:22px 0}.stat{background:#fff;border-radius:11px;padding:18px;text-align:center;border:1px solid #e8e0d2}.stat strong{display:block;font-size:28px;color:var(--theme)}.flash{padding:12px 14px;border-radius:8px;margin-bottom:16px;background:#eef2f6}.flash.success{background:#ecfdf3;color:#067647}.flash.error{background:#fef3f2;color:#b42318}.flash.warning{background:#fffaeb;color:#b54708}.form-row{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.form-group{margin-bottom:14px}.form-group label{display:block;font-weight:700;margin-bottom:5px}.form-control,select,textarea,input[type=text],input[type=email],input[type=password],input[type=date],input[type=number],input[type=url]{width:100%;padding:10px 11px;border:1px solid #cfc8bc;border-radius:7px;background:#fff;font:inherit}textarea{min-height:120px}.help{font-size:13px;color:var(--muted)}table{width:100%;border-collapse:collapse;background:#fff}th,td{padding:10px 11px;border-bottom:1px solid #eee;text-align:left;vertical-align:top}th{background:#f5f1ea}.table-wrap{overflow:auto;border-radius:10px;border:1px solid #e4ddd2}.person-list-item{display:flex;gap:12px;align-items:center}.avatar-sm{width:44px;height:44px;object-fit:cover;border-radius:50%;background:#eee}.avatar-md{width:92px;height:92px;object-fit:cover;border-radius:12px;background:#eee}.avatar-lg{width:180px;height:210px;object-fit:cover;border-radius:12px;background:#eee}.article-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}.article-card{background:#fff;border:1px solid #e4ddd1;border-radius:10px;overflow:hidden}.article-card img{width:100%;height:190px;object-fit:cover}.article-card .body{padding:14px}.article-card h3{margin:0 0 6px}.album-card img{width:100%;height:190px;object-fit:cover;border-radius:8px}.breadcrumbs{font-size:14px;color:#777;margin-bottom:15px}.profile-head{display:flex;gap:24px;align-items:flex-start}.tag{display:inline-block;padding:3px 8px;border-radius:999px;background:#eee;font-size:12px}.toolbar{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:16px}.filters{display:flex;gap:10px;flex-wrap:wrap;align-items:end}.filters .form-group{margin:0;min-width:160px}.empty{padding:28px;text-align:center;color:#777}.map-link{font-weight:700}.richtext{background:#fff;padding:22px;border-radius:12px;border:1px solid #e4ddd3}.richtext img{height:auto}.auth-box{max-width:520px;margin:45px auto;background:#fff;padding:26px;border-radius:12px;border:1px solid #e5ded3}.platform-head{background:#6f1616;color:#fff;padding:18px 24px}.platform-head a{color:#fff}.platform-wrap{max-width:1100px;margin:auto;padding:30px 24px}.cover-image{width:100%;max-height:360px;object-fit:cover;border-radius:12px;border:1px solid #ddd}.donation-progress{height:16px;background:#eee;border-radius:999px;overflow:hidden}.donation-progress>span{display:block;height:100%;background:var(--theme)}
@media(max-width:820px){.topbar{padding:16px}.brand-title{font-size:24px}.account-links{font-size:13px}.main-nav{padding:0 12px}.nav-toggle{display:block;background:transparent;color:#fff;border:0;padding:11px 2px;font-weight:bold}.main-nav ul{display:none;padding:0}.main-nav ul.show{display:block}.main-nav li a{padding:10px 4px}.site-main{padding:18px 12px 44px}.grid-2,.grid-3,.grid-4,.stats,.article-grid,.form-row{grid-template-columns:1fr}.hero{padding:28px 20px}.hero h1{font-size:32px}.profile-head{flex-direction:column}.filters{display:block}.filters .form-group{margin-bottom:10px}}
.tree-toolbar{background:#fff;border:1px solid #e1dbd0;border-radius:10px;padding:12px;display:flex;gap:8px;flex-wrap:wrap;align-items:end}.tree-canvas{overflow:auto;background:#fff;border:1px solid #ddd4c7;border-radius:12px;padding:30px;min-height:420px}.family-tree,.family-tree ul{padding-top:20px;position:relative;display:flex;justify-content:center;margin:0;padding-left:0}.family-tree ul:before{content:"";position:absolute;top:0;left:50%;border-left:1px solid #b5a998;height:20px}.family-tree li{list-style:none;text-align:center;position:relative;padding:20px 8px 0}.family-tree li:before,.family-tree li:after{content:"";position:absolute;top:0;right:50%;border-top:1px solid #b5a998;width:50%;height:20px}.family-tree li:after{right:auto;left:50%;border-left:1px solid #b5a998}.family-tree li:only-child:after,.family-tree li:only-child:before{display:none}.family-tree li:only-child{padding-top:0}.family-tree li:first-child:before,.family-tree li:last-child:after{border:0}.family-tree li:last-child:before{border-right:1px solid #b5a998;border-radius:0 5px 0 0}.family-tree li:first-child:after{border-radius:5px 0 0 0}.tree-card{display:inline-block;min-width:150px;max-width:210px;padding:10px;border-radius:9px;background:#fff8ef;border:1px solid #c8b797;box-shadow:0 2px 7px rgba(0,0,0,.06);text-align:center}.tree-card>a{display:flex;flex-direction:column;align-items:center;gap:5px}.tree-card img{width:50px;height:50px;border-radius:50%;object-fit:cover}.tree-card small,.tree-generation{display:block;font-size:11px;color:#6f6256}.tree-spouses{margin-top:7px;padding-top:6px;border-top:1px dashed #ccbda4;font-size:11px}.tree-spouses em{font-size:10px;color:#777}.h-tree{min-width:max-content}.h-node{display:flex;align-items:center;position:relative;margin:8px 0}.h-person{position:relative;padding-right:34px}.h-person:after{content:"";position:absolute;right:0;top:50%;width:34px;border-top:1px solid #b5a998}.h-children{display:flex;flex-direction:column;position:relative;padding-left:34px}.h-children:before{content:"";position:absolute;left:0;top:14px;bottom:14px;border-left:1px solid #b5a998}.h-children>.h-node:before{content:"";position:absolute;left:-34px;top:50%;width:34px;border-top:1px solid #b5a998}.tree-list-row{display:flex;gap:12px;align-items:center;padding:9px;border-bottom:1px solid #eee}.tree-list-indent{display:inline-block}.tree-list-row img{width:38px;height:38px;border-radius:50%;object-fit:cover}
.tree-union-note{display:block;margin-top:5px;padding:2px 5px;border-radius:5px;background:#f6e8d5;color:#7c4a22;font-size:10px}
.main-nav li{position:relative}.main-nav .submenu{display:none;position:absolute;top:100%;left:0;min-width:210px;background:#681414;padding:5px 0;z-index:30;box-shadow:0 8px 20px rgba(0,0,0,.18)}.main-nav .submenu li{width:100%}.main-nav .submenu a{padding:10px 14px;white-space:nowrap}.main-nav li:hover>.submenu{display:block}@media(max-width:820px){.main-nav .submenu{display:block;position:static;box-shadow:none;padding-left:15px;background:rgba(0,0,0,.1)}.main-nav .submenu a{white-space:normal}}

/* v1.3 - lunar dates, personal galleries, compact/explorer tree */
.profile-edit-grid{display:grid;grid-template-columns:minmax(0,1fr) 260px;gap:22px;align-items:start}.avatar-editor{background:#faf8f4;border:1px solid #e5ddd2;border-radius:10px;padding:14px;text-align:center}.avatar-editor .avatar-lg{display:block;margin:0 auto 12px}.form-section-title{font-size:18px;margin:22px 0 10px;color:#6c1919;border-bottom:1px solid #eadfce;padding-bottom:6px}.lunar-row{display:grid;grid-template-columns:auto repeat(3,minmax(90px,130px)) auto auto;gap:8px;align-items:center;margin:6px 0 4px;padding:10px;border:1px dashed #d4b46d;background:#fffaf0;border-radius:8px}.lunar-row input[type=number]{width:100%}
.upload-zone{border:2px dashed #c8b797;border-radius:12px;padding:24px;text-align:center;background:#fffaf4;cursor:pointer;transition:.15s}.upload-zone.dragover{border-color:var(--theme);background:#fff2df;transform:translateY(-1px)}.upload-zone input[type=file]{display:block;margin:12px auto 0;max-width:100%}
.person-gallery-admin,.personal-gallery{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:14px}.media-tile,.personal-photo{margin:0;background:#fff;border:1px solid #e5dfd5;border-radius:10px;padding:8px;position:relative}.media-tile.is-avatar{outline:3px solid #c99a2e}.media-tile img,.personal-photo img{width:100%;height:150px;object-fit:cover;border-radius:7px}.media-title{font-size:13px;font-weight:700;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;margin:6px 0}.media-actions{display:flex;gap:5px;flex-wrap:wrap}.personal-photo figcaption{font-size:13px;padding:6px 2px 0}
.kinship-stats{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:10px;margin:14px 0 18px}.kinship-stats>div{background:#fff;border:1px solid #e2dbd0;border-radius:10px;padding:12px;text-align:center}.kinship-stats strong{display:block;font-size:25px;color:var(--theme)}.kinship-stats span{font-size:12px;color:#666}.generation-filter{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.generation-filter a{display:inline-block;min-width:30px;text-align:center;padding:5px 8px;border-radius:6px;background:#f2eee7}.generation-filter a.active{background:var(--theme);color:#fff}.genealogy-list td{vertical-align:middle}.tree-view-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:14px}
.compact-tree{min-width:max-content;padding:4px 0}.compact-generation{display:flex;align-items:center;gap:16px;border-bottom:1px solid rgba(0,0,0,.08);padding:14px 0}.compact-generation-label{position:sticky;left:0;z-index:4;width:72px;min-width:72px;font-weight:700;color:#8d1f1f;background:#fff7e9;border-radius:8px;padding:8px;text-align:center;border:1px solid #ead7ad}.compact-generation-row{display:flex;align-items:flex-start;gap:8px;flex-wrap:nowrap}.compact-person{width:78px;min-height:112px;padding:6px 5px;border:1px solid #d8cbbb;border-top:4px solid #84acd6;border-radius:7px;background:#eaf4ff;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;text-align:center;position:relative;color:#222}.compact-person.gender-female{background:#fff0f5;border-top-color:#e6a1b8}.compact-person img{width:42px;height:42px;border-radius:50%;object-fit:cover;margin-bottom:5px}.compact-person span{font-size:11px;line-height:1.15;font-weight:700;word-break:break-word}.compact-person:hover{text-decoration:none;transform:translateY(-1px);box-shadow:0 5px 12px rgba(0,0,0,.08)}
.explore-tree li>ul{display:none}.explore-tree li.open>ul{display:flex}.tree-card-explore{position:relative;cursor:pointer;min-width:120px;max-width:165px}.tree-card-explore .tree-info-link{position:absolute;right:4px;top:4px;width:20px;height:20px;border-radius:50%;background:#0d6f9b;color:#fff;font:700 12px/20px Arial;text-align:center;text-decoration:none}.tree-card-explore .branch-hint{display:block;font-size:9px;color:#777;margin-top:4px}.tree-card-explore[aria-expanded="true"]{box-shadow:0 0 0 2px rgba(201,154,46,.28)}
.hide-tree-names .tree-card .tree-name,.hide-tree-names .compact-person .tree-name{display:none}.hide-tree-names .tree-card{min-width:62px;width:62px;padding:6px}.hide-tree-names .tree-card img{width:48px;height:48px;margin:0}.hide-tree-names .compact-person{width:58px;min-height:58px;padding:5px}.hide-tree-names .compact-person img{margin:0;width:46px;height:46px}.hide-tree-names .tree-card-explore .tree-info-link{right:-8px;top:-8px}.tree-card.gender-male{border-top:3px solid #629bd0}.tree-card.gender-female{border-top:3px solid #dc8eaa}
@media(max-width:900px){.profile-edit-grid{grid-template-columns:1fr}.lunar-row{grid-template-columns:1fr 1fr 1fr}.lunar-row strong,.lunar-row label,.lunar-row button{grid-column:auto}.kinship-stats{grid-template-columns:repeat(3,1fr)}.compact-generation-label{position:static}.tree-card{min-width:118px}.personal-gallery,.person-gallery-admin{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:520px){.kinship-stats{grid-template-columns:repeat(2,1fr)}.lunar-row{grid-template-columns:1fr 1fr}.personal-gallery,.person-gallery-admin{grid-template-columns:1fr 1fr}}
.tree-card-explore[data-person-tooltip],.compact-person[data-person-tooltip]{position:relative}
.personal-album-row{display:flex;gap:6px;align-items:center;padding:7px 0;border-bottom:1px solid #eee}.personal-album-edit{display:grid;grid-template-columns:minmax(120px,1fr) 70px auto auto;gap:6px;align-items:center;flex:1}.personal-album-public{margin:16px 0 24px}.personal-album-public h3{margin:0 0 10px}.personal-album-public .badge{font-size:11px;font-weight:400}
@media(max-width:700px){.personal-album-edit{grid-template-columns:1fr 70px}.personal-album-edit .badge{display:none}}
.compact-family-unit{display:flex;gap:3px;align-items:flex-start;padding-right:4px;position:relative}.compact-family-unit+.compact-family-unit{margin-left:5px}.compact-spouse{opacity:.88;border-style:dashed}.compact-spouse:before{content:"⚭";position:absolute;left:-8px;top:45px;font-size:10px;color:#8b6a38;background:#fff;border-radius:50%}
.explore-spouses{display:block;font-size:10px;color:#8a4d24;margin-top:3px;max-width:150px;white-space:normal}

/* v1.4 - viewer ảnh, tooltip nổi, pan phả đồ */
body.gp-lightbox-open{overflow:hidden}.gp-lightbox{position:fixed;inset:0;z-index:999999;background:rgba(0,0,0,.92);color:#fff}.gp-lightbox[hidden]{display:none}.gp-lightbox-toolbar{height:54px;display:flex;align-items:center;gap:7px;padding:7px 10px;background:rgba(20,20,20,.88);position:relative;z-index:2}.gp-lightbox-toolbar button{border:1px solid rgba(255,255,255,.25);background:rgba(255,255,255,.1);color:#fff;border-radius:6px;min-width:38px;height:38px;cursor:pointer;font-size:18px}.gp-lightbox-toolbar .gp-lightbox-close{margin-left:auto;font-size:28px}.gp-lightbox-count{font-size:13px;opacity:.85}.gp-lightbox-stage{position:absolute;left:0;right:0;top:54px;bottom:0;overflow:hidden;display:flex;align-items:center;justify-content:center;cursor:grab;touch-action:none}.gp-lightbox-stage.dragging{cursor:grabbing}.gp-lightbox-stage img{max-width:94vw;max-height:82vh;object-fit:contain;transform-origin:center center;user-select:none;transition:transform .05s linear}.gp-lightbox-caption{position:absolute;left:50%;bottom:16px;transform:translateX(-50%);max-width:min(900px,88vw);background:rgba(0,0,0,.65);padding:8px 12px;border-radius:8px;text-align:center;font-size:13px;pointer-events:none}.gp-lightbox-caption strong{display:block;font-size:14px}.gp-gallery-link{display:block;cursor:zoom-in}.gp-tooltip{position:fixed;z-index:999998;display:none;min-width:220px;max-width:320px;padding:9px 11px;background:#222;color:#fff;border-radius:8px;font-size:12px;line-height:1.4;white-space:pre-line;text-align:left;box-shadow:0 8px 24px rgba(0,0,0,.28);pointer-events:none}.tree-canvas.pan-ready{cursor:grab}.tree-canvas.is-panning{cursor:grabbing;user-select:none}.branch-toggle-dot{position:absolute;left:50%;bottom:-14px;transform:translateX(-50%);width:23px;height:23px;border-radius:50%;border:1px solid #a88d60;background:#fff;color:#7a5117;font-weight:700;line-height:19px;padding:0;cursor:pointer;z-index:6}.tree-card-explore{overflow:visible}.tree-canvas,.family-tree,.family-tree li{overflow:visible}.media-caption-form{display:grid;gap:5px;margin:7px 0}.media-caption-form label{font-size:12px;font-weight:700}.media-caption-form input,.media-caption-form textarea{font-size:12px;padding:6px}.media-caption-form textarea{min-height:54px;resize:vertical}.inline-alive-form{white-space:nowrap}.alive-check{padding:10px;border:1px solid #e2d8c7;border-radius:8px;background:#faf7f1}

/* ===== GiaPha v1.5: khung phả đồ cố định + thẻ vợ/chồng ===== */
.tree-canvas{
  width:100%;max-width:100%;height:640px;max-height:72vh;min-height:460px;
  overflow:auto !important;position:relative;box-sizing:border-box;contain:paint;
  overscroll-behavior:contain;scrollbar-gutter:stable both-edges;
}
.tree-canvas>.family-tree,.tree-canvas>.h-tree,.tree-canvas>.compact-tree{min-width:max-content;min-height:max-content}
.tree-canvas>.family-tree{width:max-content;min-width:100%;padding-left:30px;padding-right:30px}
.tree-canvas .family-tree,.tree-canvas .family-tree li,.tree-canvas .family-tree ul{overflow:visible}
.tree-canvas.pan-ready{cursor:grab}.tree-canvas.is-panning{cursor:grabbing;user-select:none}
.tree-family-unit,.tree-explore-family{display:inline-flex;align-items:flex-start;justify-content:center;gap:7px;position:relative;vertical-align:top}
.tree-spouse-cards{display:flex;gap:5px;align-items:flex-start;flex-wrap:nowrap}
.tree-spouse-card{width:92px;min-height:92px;padding:6px 4px;border:1px solid #e0b9c6;border-top:3px solid #cf7e9b;border-radius:8px;background:#fff5f8;color:#222;text-align:center;display:flex;flex-direction:column;align-items:center;position:relative;box-sizing:border-box;text-decoration:none}
.tree-spouse-card.gender-male{border-top-color:#629bd0;background:#f1f7ff}.tree-spouse-card.gender-female{border-top-color:#dc8eaa;background:#fff5f8}
.tree-spouse-card img{width:38px;height:38px;border-radius:50%;object-fit:cover}.tree-spouse-card .tree-name{font-size:10px;line-height:1.15;word-break:break-word}.tree-spouse-card small{font-size:9px;color:#766}.spouse-symbol{position:absolute;left:-8px;top:34px;background:#fff;border:1px solid #d8cbbb;border-radius:50%;width:17px;height:17px;font-size:10px;line-height:15px;text-align:center}
.tree-photo-only .tree-name,.tree-photo-only .branch-hint,.tree-photo-only .tree-generation,.tree-photo-only .tree-union-note{display:none!important}
.tree-photo-only .tree-card{min-width:62px;width:62px;padding:6px}.tree-photo-only .tree-card img{width:48px;height:48px;margin:0}.tree-photo-only .tree-spouse-card{width:54px;min-height:54px;padding:4px}.tree-photo-only .tree-spouse-card img{width:44px;height:44px}.tree-photo-only .spouse-symbol{top:20px}.tree-photo-only .compact-person{width:58px;min-height:58px;padding:5px}.tree-photo-only .compact-person img{margin:0;width:46px;height:46px}
.tree-photo-only .tree-card-explore .tree-info-link{right:-8px;top:-8px}
.h-tree{width:max-content;min-width:max-content;padding:20px 30px}.compact-tree{width:max-content;padding:10px 20px}
.gp-tooltip{z-index:2147483000!important}
@media(max-width:900px){.tree-canvas{height:560px;max-height:68vh;min-height:420px}.tree-spouse-card{width:78px}}

/* ===== GiaPha v1.5: sidebar công khai + lịch ===== */
.site-main{max-width:1440px;margin:0 auto;padding:18px}.public-layout{display:grid;grid-template-columns:240px minmax(0,1fr);gap:18px;align-items:start}.public-layout.sidebar-right{grid-template-columns:minmax(0,1fr) 240px}.public-layout.sidebar-right .family-sidebar{order:2}.public-layout.sidebar-right .public-content{order:1}.public-layout.no-sidebar{grid-template-columns:minmax(0,1fr)}.public-content{min-width:0}.family-sidebar{min-width:0}.family-sidebar.is-sticky{position:sticky;top:12px;max-height:calc(100vh - 24px);overflow:auto;padding-right:2px}.sidebar-block{background:#fff;border:1px solid #e1d6c6;border-radius:9px;margin-bottom:12px;overflow:hidden}.sidebar-block>h3{margin:0;padding:8px 10px;font-size:15px;border-left:4px solid var(--theme);background:#f7efd9}.sidebar-random-gallery{display:grid;grid-template-columns:1fr;gap:6px;padding:8px}.sidebar-random-gallery a{position:relative;display:block;color:#222}.sidebar-random-gallery img{width:100%;height:118px;object-fit:cover;border-radius:5px;display:block}.sidebar-random-gallery span{display:block;font-size:11px;padding-top:3px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.sidebar-more{display:block;padding:0 9px 9px;text-align:right;font-size:12px}.family-calendar{padding:8px}.family-calendar-head{display:grid;grid-template-columns:30px 1fr 30px;align-items:center;text-align:center;margin-bottom:8px}.family-calendar-head button{border:0;background:#f0f0f0;border-radius:50%;width:28px;height:28px;cursor:pointer}.family-calendar-week,.family-calendar-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}.family-calendar-week span{text-align:center;font-size:10px;font-weight:700;padding:3px 0}.family-calendar-week span:first-child{color:#c11}.cal-day{position:relative;border:1px solid transparent;background:#fff;border-radius:5px;min-height:42px;padding:3px 1px;text-align:center;cursor:default}.cal-day strong{display:block;font-size:12px}.cal-day small{display:block;font-size:9px;color:#888}.cal-day.today{background:#fff0c9;border-color:#efce74}.cal-day.has-event{border-color:#9cc2e7}.cal-day.has-reminder{box-shadow:inset 0 0 0 2px #e79b3b}.cal-day i{position:absolute;right:2px;top:1px;color:#0b8a46;font-style:normal;font-size:9px}.cal-empty{min-height:42px}.calendar-reminders{margin-top:8px;padding-top:7px;border-top:1px solid #eee;font-size:11px;color:#8d1f1f}.calendar-reminders div{padding:2px 0}.sidebar-album-picker{display:grid;gap:8px}.sidebar-album-picker label{padding:8px;border:1px solid #ddd;border-radius:6px}
@media(max-width:1050px){.public-layout,.public-layout.sidebar-right{grid-template-columns:1fr}.family-sidebar,.public-layout.sidebar-right .family-sidebar{order:0;position:static!important;max-height:none!important}.sidebar-random-gallery{grid-template-columns:repeat(3,1fr)}.sidebar-random-gallery img{height:100px}}
@media(max-width:640px){.site-main{padding:10px}.sidebar-random-gallery{grid-template-columns:repeat(2,1fr)}}

/* GiaPha v1.5 - banner trang chủ */
.home-banner-slider{position:relative;width:100%;aspect-ratio:16/5;overflow:hidden;border-radius:10px;background:#eee}.home-banner-slide{position:absolute;inset:0;display:none;color:#fff}.home-banner-slide.active{display:block}.home-banner-slide img{width:100%;height:100%;object-fit:cover;display:block}.home-banner-slide span{position:absolute;left:18px;bottom:15px;background:rgba(0,0,0,.55);padding:6px 10px;border-radius:6px}.banner-prev,.banner-next{position:absolute;top:50%;transform:translateY(-50%);z-index:3;border:0;background:rgba(0,0,0,.42);color:#fff;width:36px;height:44px;font-size:28px;border-radius:6px;cursor:pointer}.banner-prev{left:9px}.banner-next{right:9px}.banner-dots{position:absolute;left:50%;bottom:8px;transform:translateX(-50%);display:flex;gap:5px;z-index:4}.banner-dots button{width:8px;height:8px;border-radius:50%;border:0;padding:0;background:rgba(255,255,255,.6)}.banner-dots button.active{background:#fff;transform:scale(1.25)}
.richtext iframe,.richtext video{display:block;width:min(100%,860px);min-height:360px;margin:14px auto;border:0;border-radius:8px;background:#000}.richtext figure{margin:16px 0;text-align:center}.richtext figcaption{font-size:13px;color:#777}.richtext blockquote{border-left:4px solid var(--theme);margin:14px 0;padding:8px 14px;background:#faf6ef}.post-summary{font-weight:700;margin:16px 0;padding:12px 14px;background:#faf7f1;border-left:4px solid var(--theme)}
.tree-family-unit>.tree-spouse-cards,.tree-explore-family>.tree-spouse-cards{flex-direction:column}
.compact-family-unit>.tree-spouse-cards{flex-direction:row}

/* ===== GiaPha v1.6: phả đồ pan + bảng thông tin + bản in ===== */
.tree-canvas{cursor:grab}
.tree-canvas *{user-select:none}
.tree-card,.tree-spouse-card{min-width:150px;max-width:210px;min-height:118px;padding:10px}
.tree-card>a,.tree-spouse-card{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:5px;text-decoration:none}
.tree-spouse-card{position:relative}
.tree-spouse-card .spouse-symbol{left:-10px;top:50%;transform:translateY(-50%)}
.tree-spouse-card small{display:block;font-size:10px;color:#6f6256}
.tree-family-unit,.tree-explore-family{gap:10px}
.tree-view-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:14px 0}
.tree-person-drawer{position:fixed;left:0;top:0;bottom:0;width:min(380px,92vw);background:#fff;border-right:1px solid #ddd;box-shadow:8px 0 24px rgba(0,0,0,.14);z-index:1200;display:flex;flex-direction:column}
.tree-person-drawer[hidden]{display:none}
.tree-person-drawer-head{display:flex;justify-content:space-between;align-items:center;padding:14px 16px;background:#faf5ec;border-bottom:1px solid #eadfce}
.tree-person-drawer-close{border:0;background:transparent;font-size:28px;line-height:1;cursor:pointer}
.tree-person-drawer-body{padding:16px;overflow:auto}
body.drawer-open{overflow-x:hidden}
.person-panel-top{display:flex;gap:14px;align-items:flex-start;margin-bottom:10px}.person-panel-top .avatar-lg{width:100px;height:120px}.person-panel-block{margin:14px 0;padding-top:10px;border-top:1px solid #eee}.person-panel-block ul{margin:8px 0 0 18px;padding:0}.person-panel-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:14px}
.print-tree-board{position:relative;background:#b1181b;color:#fff;border:8px solid #f3c640;border-radius:14px;padding:24px;overflow:auto;min-width:max-content}
.print-tree-board:before{content:"";position:absolute;inset:0;background-image:var(--print-bg);background-size:cover;background-position:center;opacity:.20;pointer-events:none}
.print-tree-inner{position:relative;z-index:1;min-width:max-content}.print-tree-title{text-align:center;font-size:32px;font-weight:700;margin:4px 0 20px;text-shadow:0 2px 6px rgba(0,0,0,.25)}
.print-generation-row{display:grid;grid-template-columns:100px minmax(0,1fr);gap:16px;align-items:start;margin-bottom:18px}.print-generation-badge{font-size:30px;font-weight:700;color:#ffd648;font-family:Georgia,serif;align-self:center}.print-generation-cells{display:flex;gap:14px;flex-wrap:wrap;align-items:flex-start}.print-family-unit{display:inline-flex;gap:8px;align-items:flex-start}
.print-person-card{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:6px;width:190px;min-height:110px;padding:12px 10px;border-radius:18px;background:#dfeaf9;border:2px solid #8db3e8;color:#123;text-align:center;text-decoration:none}.print-person-card.spouse{background:#f7e0ee;border-color:#e6a5ca}.print-person-card img{width:52px;height:52px;border-radius:50%;object-fit:cover}.print-person-card small{font-size:12px;color:#334}.print-spouse-mark{position:absolute;left:-8px;top:50%;transform:translateY(-50%);background:#fff;color:#8d1f1f;border-radius:50%;width:20px;height:20px;line-height:20px;font-size:11px;border:1px solid #d9bdbd}
.print-generation-cells.vertical-desc{align-items:flex-end}.print-generation-cells.vertical-desc .print-person-card{width:54px;min-height:170px;padding:10px 6px;border-radius:10px}.print-generation-cells.vertical-desc .print-person-card img{width:32px;height:32px}.print-generation-cells.vertical-desc .print-person-card .tree-name{writing-mode:vertical-rl;text-orientation:mixed;max-height:104px;overflow:hidden;font-size:13px;line-height:1.05}.print-generation-cells.vertical-desc .print-person-card small{display:none}.print-generation-cells.vertical-desc .print-person-card .print-spouse-mark{top:22px;left:50%;transform:translateX(-50%)}
.sidebar-random-gallery{position:relative}.sidebar-random-gallery .sidebar-slide{display:none}.sidebar-random-gallery .sidebar-slide.active{display:block}.sidebar-random-gallery .sidebar-gallery-nav{position:absolute;top:50%;transform:translateY(-50%);width:28px;height:28px;border:0;border-radius:50%;background:rgba(0,0,0,.45);color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center}.sidebar-random-gallery .sidebar-gallery-prev{left:10px}.sidebar-random-gallery .sidebar-gallery-next{right:10px}
@media(max-width:900px){.tree-person-drawer{width:min(92vw,360px)}.print-generation-row{grid-template-columns:1fr}.print-generation-badge{font-size:24px}.print-tree-title{font-size:26px}}

/* ===== GiaPha v1.7: fullscreen, spouse parity, print lines ===== */
[data-tree-fullscreen-scope]:fullscreen,[data-tree-fullscreen-scope]:-webkit-full-screen{background:#fff;padding:18px;overflow:auto}
[data-tree-fullscreen-scope]:fullscreen .tree-canvas,[data-tree-fullscreen-scope]:-webkit-full-screen .tree-canvas{height:calc(100vh - 140px);max-height:none}
[data-tree-fullscreen-scope]:fullscreen .section.tree-canvas,[data-tree-fullscreen-scope]:-webkit-full-screen .section.tree-canvas{height:calc(100vh - 140px);max-height:none}
[data-tree-fullscreen-exit][hidden]{display:none!important}
.tree-canvas.is-fullscreen,.tree-fullscreen-scope.is-fullscreen{background:#fff}

/* spouse cards same visual importance as main family member */
.tree-spouse-cards{display:flex;gap:10px;align-items:flex-start;flex-wrap:wrap}
.tree-family-unit>.tree-spouse-cards,.tree-explore-family>.tree-spouse-cards{flex-direction:row}
.tree-card.tree-spouse-card,.tree-spouse-card{width:180px;min-width:180px;max-width:210px;min-height:118px;padding:10px;border-radius:9px;border:1px solid #c8b797;box-shadow:0 2px 7px rgba(0,0,0,.06);background:#fff8ef}
.tree-spouse-card.gender-male{border-top:3px solid #629bd0;background:#eef6ff}
.tree-spouse-card.gender-female{border-top:3px solid #dc8eaa;background:#fff0f5}
.tree-spouse-card img{width:50px;height:50px;border-radius:50%;object-fit:cover}
.tree-spouse-card .tree-name{font-size:13px;line-height:1.2;font-weight:700;word-break:break-word}
.tree-spouse-card small{font-size:11px;color:#6f6256}
.tree-spouse-card .spouse-symbol{left:-10px;top:50%;transform:translateY(-50%);width:18px;height:18px;line-height:16px}
.tree-photo-only .tree-spouse-card{width:62px;min-width:62px;min-height:62px;padding:6px}
.tree-photo-only .tree-spouse-card img{width:48px;height:48px}
.tree-photo-only .tree-family-unit>.tree-spouse-cards,.tree-photo-only .tree-explore-family>.tree-spouse-cards{flex-direction:row}
.compact-family-unit>.tree-spouse-cards .compact-spouse{width:78px;min-height:112px;padding:6px 5px;border:1px solid #d8cbbb;border-top:4px solid #e6a1b8;border-radius:7px;background:#fff0f5;opacity:1}
.compact-family-unit>.tree-spouse-cards .compact-spouse img{width:42px;height:42px;margin-bottom:5px}
.compact-family-unit>.tree-spouse-cards .compact-spouse .tree-name{font-size:11px;line-height:1.15;font-weight:700}
.hide-tree-names .tree-spouse-card .tree-name,.tree-photo-only .tree-spouse-card .tree-name,.hide-tree-names .compact-family-unit>.tree-spouse-cards .compact-spouse .tree-name,.tree-photo-only .compact-family-unit>.tree-spouse-cards .compact-spouse .tree-name{display:none}

/* print view connector lines */
.print-tree-inner{display:flex;flex-direction:column;gap:8px}
.print-generation-row{position:relative;padding-top:14px}
.print-generation-row:not(:first-of-type):before{content:"";position:absolute;left:122px;right:10px;top:0;border-top:2px solid rgba(255,255,255,.72)}
.print-generation-cells{position:relative;gap:22px}
.print-family-unit{position:relative;padding-top:18px}
.print-family-unit:before{content:"";position:absolute;left:50%;top:0;height:18px;border-left:2px solid rgba(255,255,255,.72)}
.print-family-unit:after{content:"";position:absolute;left:50%;top:18px;transform:translateX(-50%);width:0;height:0}
.print-person-card{box-shadow:0 8px 18px rgba(0,0,0,.10)}
.print-family-unit .print-person-card + .print-person-card{margin-left:10px}
.print-family-unit .print-person-card.spouse:before{content:"";position:absolute;left:-10px;top:50%;width:10px;border-top:2px solid rgba(255,255,255,.78)}
.print-generation-cells.vertical-desc{gap:14px}
.print-generation-cells.vertical-desc .print-family-unit{padding-top:14px}
.print-generation-cells.vertical-desc .print-family-unit:before{height:14px}
.print-generation-cells.vertical-desc .print-person-card,.print-generation-cells.vertical-desc .print-person-card.spouse{width:56px;min-width:56px;min-height:176px}
.print-generation-cells.vertical-desc .print-person-card img,.print-generation-cells.vertical-desc .print-person-card.spouse img{width:32px;height:32px}
.print-generation-cells.vertical-desc .print-person-card .tree-name,.print-generation-cells.vertical-desc .print-person-card.spouse .tree-name{writing-mode:vertical-rl;text-orientation:mixed;max-height:104px;overflow:hidden;font-size:13px;line-height:1.05}

@media(max-width:900px){
  .tree-spouse-card{width:150px;min-width:150px}
}

/* ===== GiaPha v1.8: line SVG chuẩn tâm nhánh, zoom fullscreen, export ===== */
.tree-fullscreen-scope{position:relative;min-width:0}
.tree-zoom-status{display:inline-flex;align-items:center;justify-content:center;min-width:54px;padding:5px 8px;border-radius:7px;background:#fff7e9;border:1px solid #dac9ac;font-size:12px;font-weight:700;color:#6f4b1f}
[data-tree-fullscreen-scope]:fullscreen,[data-tree-fullscreen-scope]:-webkit-full-screen{background:#f5f3ef;padding:14px;overflow:auto}
[data-tree-fullscreen-scope]:fullscreen .tree-canvas,[data-tree-fullscreen-scope]:-webkit-full-screen .tree-canvas{height:calc(100vh - 28px);max-height:none;margin:0;border-radius:0}
[data-tree-fullscreen-scope]:fullscreen .tree-person-drawer,[data-tree-fullscreen-scope]:-webkit-full-screen .tree-person-drawer{position:fixed;left:14px;top:14px;bottom:14px;z-index:2147482000;border-radius:10px;border:1px solid #d8cec1;box-shadow:0 10px 35px rgba(0,0,0,.22)}
.tree-line-overlay{position:absolute;left:0;top:0;z-index:20;pointer-events:none;overflow:visible}
.tree-card,.print-person-card,.compact-person{position:relative;z-index:30}
.tree-canvas.has-svg-lines .family-tree ul:before,.tree-canvas.has-svg-lines .family-tree li:before,.tree-canvas.has-svg-lines .family-tree li:after{display:none!important}
.tree-canvas.has-svg-lines .h-person:after,.tree-canvas.has-svg-lines .h-children:before,.tree-canvas.has-svg-lines .h-children>.h-node:before{display:none!important}
.tree-canvas.has-svg-lines .print-generation-row:before,.tree-canvas.has-svg-lines .print-family-unit:before,.tree-canvas.has-svg-lines .print-family-unit:after{display:none!important}
.tree-canvas.has-svg-lines .print-family-unit .print-person-card.spouse:before{display:block!important}
.tree-canvas{position:relative;isolation:isolate}
.tree-canvas>.family-tree,.tree-canvas>.h-tree,.tree-canvas>.compact-tree,.tree-canvas>.print-tree-board{position:relative;z-index:10}

/* Vợ/chồng cùng kích thước và chữ với thành viên chính */
.tree-card,.tree-card.tree-spouse-card,.tree-spouse-card{width:180px;min-width:180px;max-width:180px;min-height:126px;padding:10px}
.tree-card img,.tree-spouse-card img{width:52px!important;height:52px!important;border-radius:50%;object-fit:cover}
.tree-card .tree-name,.tree-spouse-card .tree-name{font-size:14px!important;line-height:1.22!important;font-weight:700!important}
.tree-card small,.tree-spouse-card small,.tree-generation{font-size:11px!important}
.tree-family-unit,.tree-explore-family{display:inline-flex;align-items:flex-start;justify-content:center;gap:10px}
.tree-family-unit>.tree-spouse-cards,.tree-explore-family>.tree-spouse-cards{display:flex;flex-direction:row;gap:10px;align-items:flex-start;flex-wrap:nowrap}
.tree-photo-only .tree-card,.tree-photo-only .tree-spouse-card{width:64px;min-width:64px;max-width:64px;min-height:64px;padding:6px}
.tree-photo-only .tree-card img,.tree-photo-only .tree-spouse-card img{width:50px!important;height:50px!important}

/* Phả đồ in ấn: line SVG trắng liền mạch, nền thay đổi được */
.print-tree-board{overflow:visible!important;isolation:isolate;padding:34px 34px 44px;border-radius:16px}
.print-tree-board:before{z-index:0}.print-tree-inner{z-index:2;position:relative}
.print-tree-title{position:relative;z-index:30}
.print-generation-row{position:relative;z-index:10;margin-bottom:28px;padding-top:14px}
.print-generation-badge{display:inline-flex;align-items:center;justify-content:center;min-width:88px;min-height:46px;padding:6px 12px;border-radius:10px;background:rgba(126,20,22,.36);border:1px solid rgba(255,224,84,.55);text-shadow:0 2px 4px rgba(0,0,0,.28)}
.print-generation-cells{gap:24px;align-items:flex-start}
.print-family-unit{display:inline-flex;align-items:flex-start;gap:10px;padding-top:18px}
.print-person-card,.print-person-card.spouse{z-index:30}
.print-person-card.spouse{width:190px;min-width:190px;max-width:190px;min-height:110px}
.print-person-card.spouse img{width:52px;height:52px}
.print-generation-cells.vertical-desc .print-person-card,.print-generation-cells.vertical-desc .print-person-card.spouse{width:58px;min-width:58px;max-width:58px;min-height:180px}
.print-generation-cells.vertical-desc .print-person-card img,.print-generation-cells.vertical-desc .print-person-card.spouse img{width:34px;height:34px}
.print-generation-cells.vertical-desc .print-person-card .tree-name,.print-generation-cells.vertical-desc .print-person-card.spouse .tree-name{font-size:13px!important}

.tree-print-bg-tools{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:12px 0;padding:10px 12px;background:#fff;border:1px solid #e1d8cc;border-radius:10px}
.tree-print-bg-tools>div{display:flex;gap:8px;align-items:center;flex-wrap:wrap}.tree-print-bg-tools img{width:120px;height:70px;object-fit:cover;border-radius:7px;border:1px solid #ddd}.print-bg-delete{font-size:13px}

@media(max-width:900px){.tree-card,.tree-card.tree-spouse-card,.tree-spouse-card{width:150px;min-width:150px;max-width:150px}.tree-card .tree-name,.tree-spouse-card .tree-name{font-size:13px!important}}

/* ===== GiaPha v1.9 ===== */
body.tree-app-fullscreen-open{overflow:hidden!important}
[data-tree-fullscreen-scope].tree-app-fullscreen{position:fixed!important;inset:0!important;z-index:2147481000!important;background:#f5f3ef!important;padding:12px!important;overflow:hidden!important;display:block!important}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-canvas{height:calc(100vh - 24px)!important;max-height:none!important;margin:0!important;border-radius:8px!important;overflow:auto!important}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-person-drawer{position:absolute!important;left:22px!important;top:22px!important;bottom:22px!important;z-index:2147482500!important;border-radius:10px!important}
.tree-floating-exit{position:absolute;right:24px;top:22px;z-index:2147482600;box-shadow:0 4px 14px rgba(0,0,0,.22)}

/* all connectors are square/orthogonal; old CSS connector lines are disabled when SVG overlay is active */
.tree-canvas.has-svg-lines .family-tree ul:before,.tree-canvas.has-svg-lines .family-tree li:before,.tree-canvas.has-svg-lines .family-tree li:after,.tree-canvas.has-svg-lines .h-person:after,.tree-canvas.has-svg-lines .h-children:before,.tree-canvas.has-svg-lines .h-children>.h-node:before,.tree-canvas.has-svg-lines .print-generation-row:before,.tree-canvas.has-svg-lines .print-family-unit:before,.tree-canvas.has-svg-lines .print-family-unit:after,.tree-canvas.has-svg-lines .print-person-card.spouse:before{display:none!important}
.tree-line-overlay path{stroke-linecap:square!important;stroke-linejoin:miter!important}

/* print tree: centered on the vertical axis, continuous background overlay */
.print-tree-board{position:relative!important;overflow:visible!important;min-width:max-content!important;padding:38px 42px 52px!important}
.print-tree-board:before{content:""!important;position:absolute!important;inset:0!important;background-image:var(--print-bg)!important;background-size:cover!important;background-position:center!important;opacity:1!important;z-index:0!important;pointer-events:none!important}
.print-tree-board:after{content:"";position:absolute;inset:0;background:rgba(146,16,19,var(--print-overlay-opacity,.35));z-index:1;pointer-events:none}
.print-tree-inner{position:relative!important;z-index:2!important;display:flex!important;flex-direction:column!important;align-items:stretch!important;min-width:max-content!important}
.print-tree-title{text-align:center!important;margin:0 auto 24px!important;min-width:800px}
.print-generation-row{position:relative!important;display:grid!important;grid-template-columns:100px minmax(900px,1fr)!important;align-items:center!important;gap:18px!important;padding:16px 0!important;margin:0!important}
.print-generation-badge{justify-self:center!important;border-radius:4px!important}
.print-generation-cells{display:flex!important;justify-content:center!important;align-items:flex-start!important;gap:22px!important;min-width:900px!important;width:max-content!important;margin:0 auto!important;padding:0 30px!important}
.print-family-unit{display:inline-flex!important;justify-content:center!important;align-items:flex-start!important;gap:10px!important;position:relative!important;padding-top:24px!important}
.print-generation-cells.vertical-desc{justify-content:center!important;align-items:flex-end!important;gap:14px!important}
.print-person-card,.print-person-card.spouse{position:relative!important;z-index:30!important}

/* background library */
.tree-print-bg-tools{display:block!important;padding:14px!important}
.print-bg-upload,.print-overlay-form{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.print-overlay-form input[type=range]{width:170px;vertical-align:middle}
.print-bg-library{display:flex;gap:12px;overflow:auto;padding:8px 0 2px}
.print-bg-item{min-width:170px;border:1px solid #ddd4c7;border-radius:8px;padding:8px;background:#fff}
.print-bg-item.active{outline:3px solid var(--theme)}
.print-bg-item>img{width:150px;height:90px;object-fit:cover;border-radius:5px;display:block;margin-bottom:6px;background:#eee}
.print-bg-item>strong{display:block;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.print-bg-actions{display:flex;gap:5px;margin-top:6px}.print-bg-actions form{margin:0}

/* sticky public top menu */
.main-nav{position:sticky!important;top:0!important;z-index:1000!important;box-shadow:0 2px 8px rgba(0,0,0,.12)}
.admin-top{position:sticky;top:0;z-index:1200}

/* place upload */
.place-image-preview{width:180px;height:120px;object-fit:cover;border-radius:8px;border:1px solid #ddd;margin-top:8px}

/* sortable categories */
.category-sort-row{cursor:grab}.category-sort-row.dragging{opacity:.5;background:#fff3d6}.drag-handle{font-size:20px;color:#866;cursor:grab;user-select:none}.copy-link-btn{white-space:nowrap}

/* icons */
.admin-sidebar a .mi,.main-nav a .mi{display:inline-block;width:20px;text-align:center;margin-right:4px}

/* v1.9.1: căn giữa toàn bộ các đời trong phả đồ in ấn */
.print-generation-row{display:flex!important;justify-content:center!important;align-items:flex-start!important;position:relative!important;min-width:1200px!important;padding:18px 0 18px 110px!important}
.print-generation-badge{position:absolute!important;left:12px!important;top:50%!important;transform:translateY(-50%)!important;min-width:78px!important;border-radius:3px!important}
.print-generation-cells{display:flex!important;justify-content:center!important;align-items:flex-start!important;width:max-content!important;min-width:1000px!important;margin:0 auto!important;padding:0!important}
.print-generation-cells.vertical-desc{justify-content:center!important;align-items:flex-end!important}

/* ===== GiaPha v2.0: banner giữ nguyên toàn ảnh ===== */
.home-banner-slider.banner-full-image{width:100%;height:auto;aspect-ratio:4/1;overflow:hidden;border-radius:0;background:#eee;position:relative}
.home-banner-slider.banner-full-image .home-banner-slide{position:absolute;inset:0;display:none;width:100%;height:100%}
.home-banner-slider.banner-full-image .home-banner-slide.active{display:block}
.home-banner-slider.banner-full-image .home-banner-slide img{width:100%;height:100%;object-fit:contain;object-position:center;display:block;background:transparent}
.home-banner-slider.banner-full-image .home-banner-slide span,.home-banner-slider.banner-full-image .banner-prev,.home-banner-slider.banner-full-image .banner-next,.home-banner-slider.banner-full-image .banner-dots{display:none!important}
.banner-full-fallback{display:block;width:100%;height:auto;max-height:none!important;object-fit:contain!important;border-radius:0!important}
.top-banner-slider.banner-full-image{max-width:none;margin:0 auto;border-radius:0}

/* ===== GiaPha v2.0: nối vợ/chồng liền mạch ===== */
.spouse-symbol,.print-spouse-mark{display:none!important}
.tree-marriage-badge{position:absolute;z-index:45;transform:translate(-50%,-50%);width:20px;height:20px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fff;color:#9a2222;border:1px solid #c9b7a0;font-size:11px;font-weight:700;line-height:1;pointer-events:none;box-sizing:border-box}
.tree-marriage-badge.is-print{background:#fff;color:#c21d2b;border:1px solid rgba(255,255,255,.95);box-shadow:0 0 0 1px rgba(160,0,0,.15)}
.tree-canvas.has-svg-lines .tree-marriage-badge{display:flex!important}
.tree-canvas.has-svg-lines .tree-family-unit,.tree-canvas.has-svg-lines .tree-explore-family,.tree-canvas.has-svg-lines .print-family-unit{position:relative}

/* ===== GiaPha v2.1: nối hôn nhân triệt để + tìm kiếm fullscreen ===== */
/* Không dùng SVG cho đường vợ/chồng: đường nối là một phần của chính thẻ vợ/chồng,
   vì vậy không thể bị lệch do scroll/zoom hoặc bị card che khuất. */
.tree-family-unit,.tree-explore-family{align-items:stretch!important}
.tree-family-unit>.tree-spouse-cards,.tree-explore-family>.tree-spouse-cards{align-self:stretch!important;align-items:stretch!important;gap:10px!important}
.tree-family-unit>.tree-spouse-cards>.tree-spouse-card,.tree-explore-family>.tree-spouse-cards>.tree-spouse-card{height:auto!important;align-self:stretch!important}
.tree-spouse-card,.compact-spouse,.print-person-card.spouse{overflow:visible!important}

.tree-spouse-card::before{
  content:""!important;display:block!important;position:absolute!important;
  left:-10px!important;top:50%!important;width:10px!important;height:0!important;
  border:0!important;border-top:2px solid #b5a998!important;
  transform:none!important;z-index:31!important;pointer-events:none!important;
}
.tree-spouse-card::after{
  content:"⚭"!important;display:flex!important;position:absolute!important;
  left:-5px!important;top:50%!important;transform:translate(-50%,-50%)!important;
  width:20px!important;height:20px!important;border-radius:50%!important;
  align-items:center!important;justify-content:center!important;
  background:#fff!important;color:#9a2222!important;border:1px solid #c9b7a0!important;
  font-size:11px!important;font-weight:700!important;line-height:1!important;
  z-index:34!important;pointer-events:none!important;box-sizing:border-box!important;
}

/* Compact tree: mỗi spouse nối trực tiếp với card đứng ngay trước nó. */
.compact-family-unit>.tree-spouse-cards{align-items:stretch!important;gap:8px!important}
.compact-family-unit>.tree-spouse-cards>.compact-spouse{position:relative!important;align-self:stretch!important;overflow:visible!important}
.compact-family-unit>.tree-spouse-cards>.compact-spouse::before{
  content:""!important;display:block!important;position:absolute!important;left:-8px!important;top:50%!important;
  width:8px!important;border-top:2px solid #b5a998!important;z-index:31!important;
}
.compact-family-unit>.tree-spouse-cards>.compact-spouse::after{
  content:"⚭"!important;display:flex!important;position:absolute!important;left:-4px!important;top:50%!important;
  transform:translate(-50%,-50%)!important;width:18px!important;height:18px!important;border-radius:50%!important;
  align-items:center!important;justify-content:center!important;background:#fff!important;color:#9a2222!important;
  border:1px solid #c9b7a0!important;font-size:10px!important;z-index:34!important;
}

/* Phả đồ in ấn: đường hôn nhân trắng, liền từ mép thẻ chính đến mép thẻ spouse. */
.tree-canvas.has-svg-lines .print-person-card.spouse::before,.print-person-card.spouse::before{
  content:""!important;display:block!important;position:absolute!important;
  left:-10px!important;top:50%!important;width:10px!important;height:0!important;
  border:0!important;border-top:2px solid rgba(255,255,255,.98)!important;
  transform:none!important;z-index:31!important;pointer-events:none!important;
}
.print-person-card.spouse::after{
  content:"⚭"!important;display:flex!important;position:absolute!important;
  left:-5px!important;top:50%!important;transform:translate(-50%,-50%)!important;
  width:20px!important;height:20px!important;border-radius:50%!important;
  align-items:center!important;justify-content:center!important;background:#fff!important;color:#c51e2f!important;
  border:1px solid rgba(255,255,255,.98)!important;box-shadow:0 0 0 1px rgba(150,0,0,.18)!important;
  font-size:11px!important;font-weight:700!important;z-index:34!important;pointer-events:none!important;
}
.print-family-unit{align-items:stretch!important}
.print-family-unit>.print-person-card{align-self:stretch!important}

/* Ẩn badge hôn nhân cũ do JS/CSS đời trước sinh ra. */
.tree-marriage-badge{display:none!important}

/* Thanh công cụ trong fullscreen: tìm người + thoát fullscreen. */
.tree-fullscreen-tools[hidden]{display:none!important}
.tree-fullscreen-tools{
  position:absolute!important;right:24px!important;top:22px!important;z-index:2147482700!important;
  display:flex!important;align-items:flex-start!important;gap:8px!important;pointer-events:auto!important;
}
.tree-fullscreen-tools .tree-floating-exit{position:static!important;right:auto!important;top:auto!important;white-space:nowrap!important}
.tree-fullscreen-search{position:relative!important;display:flex!important;align-items:center!important;gap:6px!important;
  width:310px!important;max-width:42vw!important;padding:6px 9px!important;background:#fff!important;border:1px solid #d3c8bb!important;
  border-radius:9px!important;box-shadow:0 4px 14px rgba(0,0,0,.15)!important}
.tree-fullscreen-search input{width:100%!important;border:0!important;outline:0!important;background:transparent!important;font-size:14px!important;padding:4px!important}
.tree-fullscreen-search-results{position:absolute!important;left:0!important;right:0!important;top:calc(100% + 6px)!important;background:#fff!important;
  border:1px solid #ddd!important;border-radius:9px!important;box-shadow:0 8px 24px rgba(0,0,0,.18)!important;max-height:330px!important;overflow:auto!important;padding:5px!important}
.tree-fullscreen-search-results button{display:block!important;width:100%!important;text-align:left!important;border:0!important;background:#fff!important;padding:9px 10px!important;border-radius:6px!important;cursor:pointer!important}
.tree-fullscreen-search-results button:hover{background:#f4eee4!important;color:#8d1f1f!important}
.tree-search-empty{padding:10px!important;color:#777!important}
.tree-search-hit{outline:4px solid #ffb000!important;outline-offset:4px!important;box-shadow:0 0 0 8px rgba(255,176,0,.18)!important}

@media(max-width:760px){
  .tree-fullscreen-tools{left:12px!important;right:12px!important;top:12px!important}
  .tree-fullscreen-search{width:auto!important;max-width:none!important;flex:1!important}
}

/* GiaPha v2.2 */
.child-row-actions{display:flex;gap:6px;align-items:center;flex-wrap:wrap}.child-row-actions .inline-form{margin:0}.child-delete-person{background:#7a0000;border-color:#7a0000}

/* ===== GiaPha v2.3: tách nhánh in ấn theo đúng cha/mẹ ===== */
.print-generation-cells{display:flex!important;align-items:flex-start!important;justify-content:center!important;gap:42px!important}
.print-parent-group{display:flex!important;align-items:flex-start!important;justify-content:center!important;gap:14px!important;position:relative!important;flex:0 0 auto!important;padding:0 12px!important}
.print-parent-group + .print-parent-group{margin-left:18px!important}
.print-generation-cells.vertical-desc .print-parent-group{align-items:flex-end!important;gap:9px!important;padding:0 10px!important}
/* Khi SVG lineage đã vẽ, tuyệt đối không dùng line ngang toàn hàng cũ. */
.tree-canvas.has-svg-lines .print-generation-row::before,
.tree-canvas.has-svg-lines .print-generation-row::after,
.tree-canvas.has-svg-lines .print-generation-cells::before,
.tree-canvas.has-svg-lines .print-generation-cells::after,
.tree-canvas.has-svg-lines .print-parent-group::before,
.tree-canvas.has-svg-lines .print-parent-group::after{display:none!important;content:none!important}

/* ===== GiaPha v2.4: cây mở từng nhánh dọc + nút chỉ ảnh trong fullscreen ===== */
  display:block!important;
  justify-content:initial!important;
  padding:0!important;
  margin:0!important;
  min-width:0!important;
}

/* Fullscreen: chỉ còn ô vuông + ảnh đại diện, ẩn toàn bộ text/trạng thái */
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-spouse-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .compact-person,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .print-person-card{
  width:68px!important;min-width:68px!important;max-width:68px!important;
  height:68px!important;min-height:68px!important;max-height:68px!important;
  padding:8px!important;box-sizing:border-box!important;border-radius:10px!important;
  display:flex!important;align-items:center!important;justify-content:center!important;
}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-spouse-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .compact-person img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .print-person-card img{
  width:52px!important;height:52px!important;min-width:52px!important;min-height:52px!important;
  margin:0!important;border-radius:50%!important;object-fit:cover!important;
}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-name,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .branch-hint,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-generation,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-union-note,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-info-link,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .spouse-symbol,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .print-spouse-mark,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only small{
  display:none!important;
}
.tree-fullscreen-photo-toggle{white-space:nowrap!important}

@media(max-width:900px){
}

/* ===== GiaPha v2.5: cây mở từng nhánh dọc lai + phả đồ in ấn đúng trục cha/con ===== */
/* Cây mở từng nhánh dọc: giữ chuỗi tổ tiên dọc; tại điểm có nhiều con, các con xếp ngang; hậu duệ của từng người xếp dọc. */

/* Phả đồ in ấn cấu trúc lồng nhau: mỗi cụm con nằm đúng dưới cha/mẹ của chính nó. */
.print-tree-stage{position:relative!important;display:block!important;width:max-content!important;min-width:1200px!important;margin:0 auto!important;padding:14px 36px 48px 118px!important;box-sizing:border-box!important}
.print-tree-struct,
.print-tree-struct ul{display:flex!important;justify-content:center!important;align-items:flex-start!important;position:relative!important;list-style:none!important;margin:0!important;padding-left:0!important;min-width:max-content!important}
.print-tree-struct{padding-top:0!important}
.print-tree-struct ul{padding-top:58px!important}
.print-tree-struct li{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:flex-start!important;position:relative!important;list-style:none!important;text-align:center!important;padding:0 18px!important;margin:0!important;min-width:max-content!important}
.print-tree-struct li:before,
.print-tree-struct li:after,
.print-tree-struct ul:before{display:none!important;content:none!important}
.print-node-family{display:flex!important;align-items:stretch!important;justify-content:center!important;gap:12px!important;position:relative!important;width:max-content!important;z-index:3!important}
.print-tree-struct .print-person-card{position:relative!important;z-index:3!important}
.print-tree-struct .print-struct-children{gap:0!important;width:max-content!important}
.print-tree-struct .print-struct-children>.print-struct-node{padding-left:22px!important;padding-right:22px!important}
.print-tree-struct .depth-3>.print-node-family .print-person-card,
.print-tree-struct .depth-4>.print-node-family .print-person-card,
.print-tree-struct .depth-5>.print-node-family .print-person-card,
.print-tree-struct .depth-6>.print-node-family .print-person-card,
.print-tree-struct .depth-7>.print-node-family .print-person-card,
.print-tree-struct .depth-8>.print-node-family .print-person-card,
.print-tree-struct .depth-9>.print-node-family .print-person-card{width:58px!important;min-width:58px!important;max-width:58px!important;min-height:180px!important}
.print-tree-struct .depth-3>.print-node-family .print-person-card img,
.print-tree-struct .depth-4>.print-node-family .print-person-card img,
.print-tree-struct .depth-5>.print-node-family .print-person-card img,
.print-tree-struct .depth-6>.print-node-family .print-person-card img,
.print-tree-struct .depth-7>.print-node-family .print-person-card img,
.print-tree-struct .depth-8>.print-node-family .print-person-card img,
.print-tree-struct .depth-9>.print-node-family .print-person-card img{width:34px!important;height:34px!important}
.print-tree-struct .depth-3>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-4>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-5>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-6>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-7>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-8>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-9>.print-node-family .print-person-card .tree-name{writing-mode:vertical-rl!important;text-orientation:mixed!important;max-height:106px!important;overflow:hidden!important;font-size:13px!important;line-height:1.05!important}
.print-tree-struct .depth-3>.print-node-family .print-person-card small,
.print-tree-struct .depth-4>.print-node-family .print-person-card small,
.print-tree-struct .depth-5>.print-node-family .print-person-card small,
.print-tree-struct .depth-6>.print-node-family .print-person-card small,
.print-tree-struct .depth-7>.print-node-family .print-person-card small,
.print-tree-struct .depth-8>.print-node-family .print-person-card small,
.print-tree-struct .depth-9>.print-node-family .print-person-card small{display:none!important}

.print-generation-labels{position:absolute!important;left:14px!important;top:0!important;bottom:0!important;width:88px!important;pointer-events:none!important;z-index:8!important}
.print-generation-label{position:absolute!important;left:0!important;width:82px!important;min-height:46px!important;display:flex!important;align-items:center!important;justify-content:center!important;padding:6px 8px!important;box-sizing:border-box!important;border-radius:5px!important;background:rgba(126,20,22,.45)!important;border:1px solid rgba(255,224,84,.72)!important;color:#ffd648!important;font-size:26px!important;font-weight:700!important;font-family:Georgia,serif!important;text-shadow:0 2px 4px rgba(0,0,0,.28)!important;transform:translateY(-50%)!important}

@media(max-width:900px){
  .print-tree-stage{padding-left:94px!important}
  .print-generation-labels{left:5px!important}
}

/* ===== GiaPha v2.6: compact person editor + portrait focus + line layer ===== */
.person-edit-form input:not([type]),
.parent-slots-form input:not([type]),
.media-caption-form input:not([type]){width:100%;padding:10px 11px;border:1px solid #cfc8bc;border-radius:7px;background:#fff;font:inherit}
.person-edit-form .form-group{min-width:0}
.person-edit-form .profile-edit-grid{grid-template-columns:minmax(0,1fr) 300px;gap:18px}
.person-edit-form .form-row{gap:12px}
.person-edit-form .form-section-title{margin-top:16px;margin-bottom:8px}
.person-edit-form textarea[data-rich-editor]{min-height:170px}
.avatar-focus-preview{width:180px;height:210px;margin:0 auto 12px;overflow:hidden;border-radius:12px;background:#eee}
.avatar-focus-preview .avatar-lg{width:100%;height:100%;margin:0!important;object-fit:cover;border-radius:0}
.avatar-focus-control input[type=range]{width:100%}
.parent-slot-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:10px 0}
.parent-slot{border:1px solid #ddd3c4;border-radius:9px;background:#fffaf2;padding:10px;display:grid;gap:8px}
.parent-slot h3{font-size:15px;margin:0;color:#6c1919}
.parent-slot-adopt{background:#f5f8ff;border-color:#cad7ea}
.parent-link-check{margin:8px 0 10px}
.parent-advanced{margin-top:12px;border-top:1px dashed #ddd;padding-top:10px}
.parent-advanced summary{cursor:pointer;font-weight:700;color:#6c1919}
.person-gallery-admin{grid-template-columns:repeat(auto-fill,minmax(220px,260px));justify-content:start;align-items:start}
.media-tile{width:100%;min-width:0;overflow:hidden}
.media-tile img{width:100%;height:200px;object-fit:cover}
.media-tile input,.media-tile textarea,.media-tile button{max-width:100%}
.media-caption-form{min-width:0}
.media-actions form{min-width:0}

/* line must stay below cards and +/- branch icon even when browser zoom is high */
.tree-line-overlay{z-index:1!important}
.tree-card,.tree-family-unit,.tree-explore-wrap,.tree-explore-family,.branch-toggle-dot,.tree-info-link{position:relative;z-index:4}
.branch-toggle-dot{z-index:12!important;background:#fff!important;box-shadow:0 0 0 3px #fff}
.tree-line-overlay path{pointer-events:none}

@media(min-width:1180px){
  .person-edit-form{padding:16px}
  .person-edit-form .profile-edit-grid>div:first-child{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 12px}
  .person-edit-form .profile-edit-grid>div:first-child>.form-row{display:contents}
  .person-edit-form .profile-edit-grid>div:first-child>.form-row>.form-group{margin-bottom:10px}
}
@media(max-width:900px){
  .parent-slot-grid{grid-template-columns:1fr}
  .person-gallery-admin{grid-template-columns:repeat(2,minmax(0,1fr))}
}
.avatar-source-preview .avatar-lg{display:block;margin:0 auto 10px;width:150px;height:200px;object-fit:cover;border-radius:10px}
.avatar-focus-caption{font-size:12px;font-weight:700;color:#6c1919;margin:4px 0 6px;text-align:center}
.avatar-focus-preview{width:112px;height:112px;margin:0 auto 12px;overflow:hidden;border-radius:50%;background:#eee;border:3px solid #d6b96f;box-shadow:0 2px 8px rgba(0,0,0,.08)}
.avatar-focus-preview img{display:block;width:100%;height:100%;object-fit:cover}

/* ===== GiaPha v2.7: person form compact + spouse bloodline + branch button ===== */
@media(min-width:1100px){
  .person-edit-form .profile-edit-grid-compact{grid-template-columns:minmax(0,1fr) 270px;gap:16px;align-items:start}
  .person-edit-form .person-main-fields{min-width:0}
  .person-edit-form .person-core-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px}
  .person-edit-form .alive-compact{display:flex;align-items:end;padding-bottom:8px}
  .person-edit-form .date-sections-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-top:8px}
  .person-edit-form .compact-info-box{border:1px solid #eadfce;background:#fffdf9;border-radius:9px;padding:10px;min-width:0}
  .person-edit-form .compact-info-box .form-section-title{margin:0 0 8px;font-size:16px}
  .person-edit-form .compact-info-box .form-row{grid-template-columns:minmax(0,1.4fr) minmax(110px,.6fr)}
  .person-edit-form .lunar-row-compact{grid-template-columns:auto repeat(3,minmax(54px,1fr));auto;gap:5px;padding:7px}
  .person-edit-form .lunar-row-compact button{grid-column:1/-1;width:100%}
  .person-edit-form .person-detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:6px 12px;margin-top:10px}
  .person-edit-form .person-detail-grid .form-group{margin-bottom:4px}
  .person-edit-form .avatar-editor-sticky{position:sticky;top:92px}
}
@media(max-width:1099px){
  .person-edit-form .person-core-grid,.person-edit-form .person-detail-grid,.person-edit-form .date-sections-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 12px}
}
@media(max-width:700px){
  .person-edit-form .person-core-grid,.person-edit-form .person-detail-grid,.person-edit-form .date-sections-grid{grid-template-columns:1fr}
}
.person-edit-form .person-detail-grid input,.person-edit-form .person-detail-grid select,.person-edit-form .person-core-grid input,.person-edit-form .person-core-grid select{width:100%;box-sizing:border-box}
.parent-editor-card .relation-box strong a{color:#6c1919;text-decoration:none;border-bottom:1px dotted #9c5a5a}.parent-editor-card .relation-box strong a:hover{color:#a21f1f;border-bottom-style:solid}
.person-gallery-admin{grid-template-columns:repeat(auto-fill,minmax(230px,260px))!important;align-items:start;justify-content:start}
.person-gallery-admin .media-tile{width:100%!important;box-sizing:border-box;overflow:hidden}
.person-gallery-admin .media-caption-form,.person-gallery-admin .media-caption-form input,.person-gallery-admin .media-caption-form textarea{width:100%;box-sizing:border-box;min-width:0}
.person-gallery-admin .media-actions{display:flex;gap:6px;flex-wrap:wrap}.person-gallery-admin .media-actions form{margin:0}

/* spouse card: profile click + bloodline branch button */
.tree-spouse-card,.compact-spouse{position:relative}
.tree-spouse-card .spouse-main-link,.compact-spouse .spouse-main-link{display:flex;flex-direction:column;align-items:center;justify-content:flex-start;gap:5px;text-decoration:none;color:inherit;width:100%;height:100%}
.spouse-bloodline-link{position:absolute;right:5px;bottom:5px;z-index:14;width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#fff;border:1px solid #76a36f;color:#39743c;text-decoration:none;font-size:12px;box-shadow:0 1px 5px rgba(0,0,0,.12)}
.spouse-bloodline-link:hover{background:#e9f7e7;transform:scale(1.08)}
.tree-photo-only .spouse-bloodline-link,.hide-tree-names .spouse-bloodline-link{right:-7px;bottom:-7px}

/* + / - must sit inside bottom-right corner, like information icon */
.tree-card-explore .branch-hint{padding-right:26px}
@media(min-width:1100px){
  .person-edit-form .profile-edit-grid-compact>.person-main-fields{display:block!important}
}


/* ===== GiaPha v3.3: nút mở/đóng nhánh ở góc phải + toolbar fullscreen ===== */
.tree-card-explore{position:relative!important;overflow:visible!important}
.branch-toggle-dot{
  position:absolute!important;left:auto!important;right:5px!important;bottom:5px!important;top:auto!important;transform:none!important;
  width:22px!important;min-width:22px!important;max-width:22px!important;height:22px!important;min-height:22px!important;max-height:22px!important;
  aspect-ratio:1/1!important;padding:0!important;margin:0!important;border-radius:50%!important;border:1px solid #a88d60!important;background:#fff!important;
  color:#7a5117!important;font-size:16px!important;font-weight:700!important;line-height:20px!important;display:flex!important;align-items:center!important;justify-content:center!important;
  flex:0 0 22px!important;box-sizing:border-box!important;z-index:30!important;box-shadow:0 1px 5px rgba(0,0,0,.12)!important
}
.branch-toggle-dot:hover{background:#fff8e8!important;transform:scale(1.06)!important}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-card-explore .branch-toggle-dot{right:-7px!important;bottom:-7px!important;transform:none!important;z-index:40!important}
.tree-fullscreen-tools .tree-fullscreen-expand,.tree-fullscreen-tools .tree-fullscreen-collapse,.tree-fullscreen-tools .tree-fullscreen-photo-toggle,.tree-fullscreen-tools .tree-floating-exit{white-space:nowrap!important;height:38px!important;display:inline-flex!important;align-items:center!important;justify-content:center!important}
@media(max-width:1100px){.tree-fullscreen-tools{flex-wrap:wrap!important;justify-content:flex-end!important;max-width:calc(100vw - 24px)!important}.tree-fullscreen-search{order:1!important;flex:1 1 280px!important}.tree-fullscreen-photo-toggle,.tree-fullscreen-expand,.tree-fullscreen-collapse,.tree-floating-exit{order:2!important}}

/* ===== GiaPha v3.3 ===== */
.site-footer.themed-footer{background:linear-gradient(180deg,var(--theme),color-mix(in srgb,var(--theme) 78%,#000));color:#fff;text-align:left;padding:34px 24px 18px;border-top:4px solid var(--gold)}
.footer-logo{max-width:190px;max-height:70px;object-fit:contain;margin-bottom:8px;filter:drop-shadow(0 1px 2px rgba(0,0,0,.15))}.footer-grid{max-width:1280px;margin:auto;display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:28px}.footer-grid h3{margin:0 0 10px;color:#fff}.footer-grid p{margin:0;opacity:.95}.footer-grid ul{margin:0;padding-left:18px}.footer-grid a{color:#fff;text-decoration:none}.footer-grid a:hover{text-decoration:underline}.footer-bottom{max-width:1280px;margin:26px auto 0;padding-top:14px;border-top:1px solid rgba(255,255,255,.25);text-align:center;font-size:13px;opacity:.9}
.upload-zone-preview{display:flex;gap:8px;flex-wrap:wrap;justify-content:center;margin-top:10px}.upload-zone-preview img{width:110px;height:90px;object-fit:cover;border-radius:7px;border:1px solid #d6cbbd;background:#fff}.event-type-badge{display:inline-flex;align-items:center;gap:4px;padding:3px 8px;border-radius:999px;background:#f2eadf;font-size:12px;font-weight:700}.event-scope-personal{background:#eef5ff;color:#24548f}.event-scope-family{background:#eef8ef;color:#2f6e34}
@media(max-width:820px){.footer-grid{grid-template-columns:1fr}}

/* ===== GiaPha v3.5: Chi/Nhánh + toolbar phả đồ gọn + nút nhánh góc trái ===== */
.tree-stats-note{margin:6px 0 10px;color:#70675d}
.tree-toolbar.tree-toolbar-compact{display:flex;flex-wrap:wrap;align-items:flex-end;gap:10px 12px;padding:12px 14px}
.tree-toolbar.tree-toolbar-compact .form-group{margin:0;min-width:0}
.tree-toolbar.tree-toolbar-compact .tree-center-group{flex:0 1 390px;width:min(390px,100%)}
.tree-toolbar.tree-toolbar-compact .tree-scope-group{flex:0 0 210px;width:210px}
.tree-toolbar.tree-toolbar-compact .tree-layout-group{flex:0 0 205px;width:205px}
.tree-toolbar.tree-toolbar-compact .tree-depth-group{flex:0 0 110px;width:110px}
.tree-toolbar.tree-toolbar-compact .tree-details-group{flex:0 0 175px;width:175px}
.tree-toolbar.tree-toolbar-compact select,.tree-toolbar.tree-toolbar-compact input[type="search"]{width:100%;box-sizing:border-box}
.tree-center-picker{display:grid;grid-template-columns:minmax(125px,.82fr) minmax(170px,1.18fr);gap:6px;align-items:center}
.tree-center-picker input[type="search"]{height:42px;border:1px solid #d3c8b8;border-radius:8px;padding:0 10px;background:#fff}
.tree-view-submit{height:42px;min-width:58px}

/* Nút +/- luôn ở góc dưới trái, đối xứng nút xem huyết thống bên phải. */
.tree-card-explore .branch-toggle-dot,
.branch-toggle-dot{
  left:5px!important;right:auto!important;bottom:5px!important;top:auto!important;transform:none!important;
  width:22px!important;min-width:22px!important;max-width:22px!important;height:22px!important;min-height:22px!important;max-height:22px!important;
  border-radius:50%!important;box-sizing:border-box!important;z-index:40!important
}
.tree-card-explore .branch-toggle-dot:hover,.branch-toggle-dot:hover{transform:scale(1.06)!important}
.tree-photo-only .tree-card-explore .branch-toggle-dot,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .tree-card-explore .branch-toggle-dot{
  left:-7px!important;right:auto!important;bottom:-7px!important;top:auto!important;transform:none!important;width:22px!important;height:22px!important;min-width:22px!important;min-height:22px!important
}

.branch-stats{grid-template-columns:repeat(4,minmax(120px,1fr));margin:12px 0 18px}
.branch-admin-grid{grid-template-columns:minmax(330px,.8fr) minmax(620px,1.4fr);align-items:start}
.branch-table th,.branch-table td{vertical-align:top}
.branch-tree-name .branch-indent{color:#b58b4b;white-space:pre}
.branch-actions{display:flex;gap:5px;flex-wrap:wrap;align-items:center}
.branch-people-filters{display:grid;grid-template-columns:minmax(220px,1fr) minmax(220px,.75fr) minmax(180px,.55fr) auto auto;gap:10px;align-items:end}
.branch-people-filters .form-group{margin:0}.branch-sub-filter label{display:flex;gap:7px;align-items:center;min-height:42px}
@media(max-width:1200px){
 .tree-toolbar.tree-toolbar-compact .tree-center-group{flex:1 1 100%}
 .tree-toolbar.tree-toolbar-compact .tree-scope-group,.tree-toolbar.tree-toolbar-compact .tree-layout-group{flex:1 1 220px;width:auto}
 .tree-toolbar.tree-toolbar-compact .tree-depth-group,.tree-toolbar.tree-toolbar-compact .tree-details-group{flex:1 1 150px;width:auto}
 .branch-admin-grid{grid-template-columns:1fr}.branch-people-filters{grid-template-columns:1fr 1fr}
}
@media(max-width:700px){.tree-center-picker{grid-template-columns:1fr}.branch-stats{grid-template-columns:1fr 1fr}.branch-people-filters{grid-template-columns:1fr}}

/* ===== GiaPha v3.6: chế độ xem huyết thống đầy đủ của vợ/chồng ngoài tộc ===== */
.bloodline-view-notice{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 14px;padding:12px 14px;border:1px solid #d9c9a9;border-left:4px solid var(--theme,#9b1c1c);border-radius:10px;background:#fffaf1}
.bloodline-view-notice strong{font-size:16px;color:var(--theme,#8e1b1b)}
.bloodline-view-notice span{flex:1;min-width:260px;color:#655d53}
.bloodline-sections{display:flex;flex-direction:column;gap:18px}
.bloodline-section{border:1px solid #e2d8ca;border-radius:12px;background:#fff;overflow:hidden}
.bloodline-section-title{margin:0;padding:10px 14px;border-bottom:1px solid #eadfce;background:#faf6ef;font-size:16px;color:#3d352e}
.bloodline-section-title span{font-weight:400;color:#766d63;font-size:13px}
.bloodline-section .tree-canvas{border:0;border-radius:0;margin:0}
@media(max-width:760px){.bloodline-view-notice{align-items:flex-start}.bloodline-view-notice span{min-width:100%}}

/* ===== GiaPha v3.7: header đồng bộ, avatar nam/nữ, nhận diện người đã mất ===== */
html{scroll-padding-top:64px}
[id]{scroll-margin-top:72px}
.public-header-unified{display:contents}
.public-header-unified .main-nav{position:sticky!important;top:0!important;z-index:2000!important;background:color-mix(in srgb,var(--theme) 88%,#000)!important;border-bottom:3px solid var(--gold);box-shadow:0 2px 10px rgba(0,0,0,.18)}
.public-account-strip{background:color-mix(in srgb,var(--theme) 96%,#000);color:#fff;border-bottom:1px solid rgba(255,255,255,.13)}
.public-account-inner{max-width:1280px;margin:auto;padding:8px 24px;display:flex;justify-content:flex-end;align-items:center;gap:7px;min-height:38px;font-size:14px}
.public-account-inner a{color:#fff;font-weight:600}.public-account-inner a:hover{text-decoration:underline}
.public-site .site-main{padding-top:22px}

/* card quan hệ trên trang hồ sơ thành viên */
.relation-person-list{display:grid;gap:9px}
.relation-person-card{display:flex;align-items:center;gap:10px;padding:9px 10px;border:1px solid #eee4d8;border-radius:9px;background:#fcfaf7;color:inherit;text-decoration:none}
.relation-person-card:hover{background:#fff6e8;text-decoration:none}
.relation-person-card .avatar-sm{flex:0 0 46px;width:46px;height:46px}
.relation-person-card span{display:flex;flex-direction:column;min-width:0}
.relation-person-card strong{color:var(--theme)}
.relation-person-card small{color:#756d64;font-size:12px;margin-top:2px}
.profile-avatar-wrap{position:relative;align-self:flex-start}.profile-deceased-badge{position:absolute;left:8px;bottom:8px;background:rgba(35,35,35,.9);color:#fff;border-radius:999px;padding:3px 8px;font-size:12px;font-weight:700}
.person-public-profile.is-deceased .avatar-lg{filter:grayscale(.45);opacity:.9}

/* Người đã mất: nhìn rõ cả khi chỉ hiển thị ảnh */
.tree-card.is-deceased,.compact-person.is-deceased,.print-person-card.is-deceased{position:relative}
.tree-card.is-deceased img,.compact-person.is-deceased img,.print-person-card.is-deceased img{filter:grayscale(.78) contrast(.92);opacity:.82}
.deceased-mark{position:absolute;left:5px;top:5px;z-index:55;width:21px;height:21px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:#3c3c3c;color:#fff;border:2px solid #fff;font:700 15px/1 Georgia,serif;box-shadow:0 1px 5px rgba(0,0,0,.22);pointer-events:none}
.deceased-label{color:#555!important;font-weight:700!important}
.tree-photo-only .deceased-mark,.hide-tree-names .deceased-mark{left:-6px;top:-6px;width:19px;height:19px;font-size:13px}
.print-person-card.is-deceased{background:color-mix(in srgb,#fff 83%,#d8d8d8)!important}

@media(max-width:820px){
 .public-account-inner{padding:7px 12px;font-size:13px;flex-wrap:wrap;justify-content:center}
 .person-relations-grid{grid-template-columns:1fr}
}

/* ===== GiaPha v3.8: phả đồ cân đối + menu tài khoản cùng hàng + địa điểm ===== */
/* Menu cố định: cụm tài khoản nằm cùng hàng và canh phải */
.main-nav .public-main-menu{display:flex;align-items:stretch;flex-wrap:wrap}
.main-nav .nav-account-cluster{margin-left:auto;display:flex;align-items:center;gap:2px}
.main-nav .nav-account-cluster>a{display:flex;align-items:center;padding:13px 9px;font-size:13px;white-space:nowrap}
.main-nav .nav-account-cluster>a+a:before{content:"·";margin-right:10px;color:rgba(255,255,255,.65)}
.public-account-strip{display:none!important}
@media(max-width:820px){
  .main-nav .public-main-menu.show{display:block}
  .main-nav .nav-account-cluster{margin-left:0;display:flex;flex-wrap:wrap;border-top:1px solid rgba(255,255,255,.16);padding-top:3px}
  .main-nav .nav-account-cluster>a{padding:9px 8px}
  .main-nav .nav-account-cluster>a+a:before{content:"";margin:0}
}

/* Người trong nhánh chính: ảnh tròn độc lập phía trên, thông tin xếp dưới */
.tree-card-explore{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:flex-start!important;text-align:center!important}
.tree-card-explore>img{display:block!important;width:52px!important;height:52px!important;margin:0 auto 5px!important;flex:0 0 52px!important}
.tree-card-explore>strong.tree-name,.tree-card-explore>small.tree-name,.tree-card-explore>span.tree-name{display:block!important;width:100%!important;text-align:center!important}
.tree-card:not(.tree-spouse-card)>a{display:flex!important;flex-direction:column!important;align-items:center!important;justify-content:flex-start!important;text-align:center!important;width:100%!important}
.tree-card:not(.tree-spouse-card)>a>img{display:block!important;margin:0 auto 5px!important}
.tree-card:not(.tree-spouse-card)>a>.tree-name{display:block!important;width:100%!important;text-align:center!important}

/* Đã mất: chỉ dùng dấu †, tuyệt đối không làm ảnh xám/mất sắc độ */
.tree-card.is-deceased img,.compact-person.is-deceased img,.print-person-card.is-deceased img{filter:none!important;opacity:1!important}
.print-person-card.is-deceased{background:inherit!important}

/* Toolbar phả đồ thẳng hàng, gọn hơn */
.tree-toolbar.tree-toolbar-compact{display:grid!important;grid-template-columns:minmax(330px,1.7fr) minmax(170px,.72fr) minmax(190px,.82fr) minmax(105px,.46fr) minmax(165px,.72fr) auto;align-items:end!important;gap:10px 12px!important}
.tree-toolbar.tree-toolbar-compact .tree-center-group,.tree-toolbar.tree-toolbar-compact .tree-scope-group,.tree-toolbar.tree-toolbar-compact .tree-layout-group,.tree-toolbar.tree-toolbar-compact .tree-depth-group,.tree-toolbar.tree-toolbar-compact .tree-details-group{width:auto!important;min-width:0!important;margin:0!important}
.tree-toolbar.tree-toolbar-compact label{min-height:24px;display:flex;align-items:center;margin-bottom:5px}
.tree-toolbar.tree-toolbar-compact select,.tree-toolbar.tree-toolbar-compact input[type="search"],.tree-view-submit{height:42px!important}
.tree-center-picker{grid-template-columns:minmax(120px,.8fr) minmax(175px,1.2fr)!important}
@media(max-width:1180px){.tree-toolbar.tree-toolbar-compact{grid-template-columns:1fr 1fr 1fr}.tree-toolbar.tree-toolbar-compact .tree-center-group{grid-column:span 2}}
@media(max-width:760px){.tree-toolbar.tree-toolbar-compact{grid-template-columns:1fr!important}.tree-toolbar.tree-toolbar-compact .tree-center-group{grid-column:auto}.tree-center-picker{grid-template-columns:1fr!important}}

/* Bảng thông tin thành viên phải nằm trong chính vùng phả đồ, không phủ banner/menu */
[data-tree-fullscreen-scope]{position:relative!important;isolation:isolate}
.tree-person-drawer{position:absolute!important;left:8px!important;top:8px!important;bottom:8px!important;width:min(370px,calc(100% - 16px))!important;max-height:calc(100% - 16px)!important;z-index:180!important;border-radius:10px!important;border:1px solid #d8cec1!important;box-shadow:0 8px 26px rgba(0,0,0,.18)!important;overflow:hidden!important}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-person-drawer{position:absolute!important;left:14px!important;top:14px!important;bottom:14px!important;max-height:calc(100% - 28px)!important;z-index:2147482500!important}
.tree-person-drawer-body{min-height:0;overflow:auto!important}
@media(max-width:700px){.tree-person-drawer{width:min(92%,350px)!important}}

/* Địa điểm: ảnh trên, tiêu đề + mô tả dưới */
.place-public-grid{align-items:start}
.place-public-card{padding:0!important;overflow:hidden}
.place-cover{width:100%;aspect-ratio:16/8;background:#eee;overflow:hidden}
.place-cover img{display:block;width:100%;height:100%;object-fit:cover}
.place-card-body{padding:17px 18px 18px}
.place-card-body h2{margin:8px 0 7px;color:var(--theme);font-size:22px;line-height:1.25}
.place-related,.place-address{margin:6px 0;color:#5f574e}
.place-description{margin:9px 0 14px;white-space:normal}
.place-actions{display:flex;gap:7px;flex-wrap:wrap;margin-top:13px}

/* Bỏ hoàn toàn nút i cũ nếu trình duyệt còn cache markup cũ */
.tree-info-link{display:none!important}

/* ===== GiaPha v3.8.1: Chỉ ảnh ở Cây mở từng nhánh =====
   Một số quy tắc bố cục phía cuối file ép .tree-name display:block!important,
   làm tên/năm/ghi chú xuất hiện lại khi bật Chỉ ảnh. Quy tắc dưới đây là lớp
   override cuối cùng, chỉ tác động lên canvas đang ở tree-photo-only. */
.tree-canvas.tree-photo-only .tree-card-explore > strong.tree-name,
.tree-canvas.tree-photo-only .tree-card-explore > small.tree-name,
.tree-canvas.tree-photo-only .tree-card-explore > span.tree-name,
.tree-canvas.tree-photo-only .tree-spouse-card .tree-name,
.tree-canvas.tree-photo-only .compact-person .tree-name,
.tree-canvas.tree-photo-only .print-person-card .tree-name {
  display:none!important;
}
.tree-canvas.tree-photo-only .tree-card-explore > img {
  display:block!important;
  width:52px!important;
  height:52px!important;
  margin:0 auto!important;
  flex:0 0 52px!important;
}

/* ===== GiaPha v3.8.2: Phả đồ in ấn theo từng gia đình / union ===== */
/* Ẩn placeholder phải thắng mọi display:flex!important của cây in. */
.tree-placeholder-hidden{display:none!important}

/* Tùy chọn không dùng background: vẫn giữ dữ liệu nền đã chọn để bật lại sau. */
.print-tree-board.no-print-background:before{background-image:none!important;background:none!important}
.print-tree-board.no-print-background:after{display:none!important}
.print-tree-board.no-print-background{background:#fff!important}
.print-background-settings-row{display:flex;align-items:center;gap:16px;flex-wrap:wrap;margin:0 0 12px}
.print-background-toggle-form,.print-background-settings-row .print-overlay-form{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:0!important}
.print-background-toggle-form label,.print-background-settings-row .print-overlay-form label{display:flex;align-items:center;gap:5px;margin:0}

/* Bố cục cây in: mỗi node tự chứa các nhóm con theo đúng union_id. */
.print-tree-stage{padding:12px 24px 34px 96px!important;min-width:1000px!important}
.print-tree-struct,.print-tree-struct ul{min-width:max-content!important}
.print-tree-struct li{padding-left:6px!important;padding-right:6px!important}
.print-tree-struct .print-node-family{gap:6px!important}
.print-tree-struct .print-union-groups{
  display:flex!important;
  justify-content:center!important;
  align-items:flex-start!important;
  gap:8px!important;
  min-width:max-content!important;
  padding:34px 0 0!important;
  margin:0!important;
  position:relative!important;
}
.print-tree-struct .print-union-group{
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:flex-start!important;
  position:relative!important;
  min-width:max-content!important;
  padding:0 2px!important;
  margin:0!important;
}
.print-tree-struct .print-union-group>.print-struct-children{
  display:flex!important;
  justify-content:center!important;
  align-items:flex-start!important;
  gap:0!important;
  min-width:max-content!important;
  width:max-content!important;
  padding:0!important;
  margin:0!important;
}
.print-tree-struct .print-union-group>.print-struct-children>.print-struct-node{
  padding-left:4px!important;
  padding-right:4px!important;
}

/* Đời 1-3 (depth 0-2): ô ngang gọn, đủ tên và năm. */
.print-tree-struct .depth-0>.print-node-family .print-person-card,
.print-tree-struct .depth-1>.print-node-family .print-person-card,
.print-tree-struct .depth-2>.print-node-family .print-person-card{
  width:150px!important;min-width:150px!important;max-width:150px!important;
  min-height:88px!important;padding:8px 8px!important;border-radius:10px!important;gap:3px!important;
}
.print-tree-struct .depth-0>.print-node-family .print-person-card img,
.print-tree-struct .depth-1>.print-node-family .print-person-card img,
.print-tree-struct .depth-2>.print-node-family .print-person-card img{
  width:42px!important;height:42px!important;flex:0 0 42px!important;
}
.print-tree-struct .depth-0>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-1>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-2>.print-node-family .print-person-card .tree-name{
  writing-mode:horizontal-tb!important;text-orientation:mixed!important;max-height:none!important;
  font-size:12px!important;line-height:1.12!important;overflow:visible!important;
}
.print-tree-struct .depth-0>.print-node-family .print-person-card small,
.print-tree-struct .depth-1>.print-node-family .print-person-card small,
.print-tree-struct .depth-2>.print-node-family .print-person-card small{font-size:9px!important;display:block!important}

/* Từ đời 4 trở đi (depth >=3): ô dọc nhỏ, sát nhau giống bản phả đồ treo/in. */
.print-tree-struct .depth-3>.print-node-family .print-person-card,
.print-tree-struct .depth-4>.print-node-family .print-person-card,
.print-tree-struct .depth-5>.print-node-family .print-person-card,
.print-tree-struct .depth-6>.print-node-family .print-person-card,
.print-tree-struct .depth-7>.print-node-family .print-person-card,
.print-tree-struct .depth-8>.print-node-family .print-person-card,
.print-tree-struct .depth-9>.print-node-family .print-person-card,
.print-tree-struct .depth-10>.print-node-family .print-person-card,
.print-tree-struct .depth-11>.print-node-family .print-person-card,
.print-tree-struct .depth-12>.print-node-family .print-person-card{
  width:42px!important;min-width:42px!important;max-width:42px!important;
  min-height:128px!important;padding:5px 3px!important;border-radius:6px!important;gap:2px!important;
}
.print-tree-struct .depth-3>.print-node-family .print-person-card img,
.print-tree-struct .depth-4>.print-node-family .print-person-card img,
.print-tree-struct .depth-5>.print-node-family .print-person-card img,
.print-tree-struct .depth-6>.print-node-family .print-person-card img,
.print-tree-struct .depth-7>.print-node-family .print-person-card img,
.print-tree-struct .depth-8>.print-node-family .print-person-card img,
.print-tree-struct .depth-9>.print-node-family .print-person-card img,
.print-tree-struct .depth-10>.print-node-family .print-person-card img,
.print-tree-struct .depth-11>.print-node-family .print-person-card img,
.print-tree-struct .depth-12>.print-node-family .print-person-card img{
  width:24px!important;height:24px!important;flex:0 0 24px!important;
}
.print-tree-struct .depth-3>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-4>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-5>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-6>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-7>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-8>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-9>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-10>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-11>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-12>.print-node-family .print-person-card .tree-name{
  writing-mode:vertical-rl!important;text-orientation:mixed!important;max-height:88px!important;
  overflow:hidden!important;font-size:10px!important;line-height:1!important;
}
.print-tree-struct .depth-3>.print-node-family .print-person-card small,
.print-tree-struct .depth-4>.print-node-family .print-person-card small,
.print-tree-struct .depth-5>.print-node-family .print-person-card small,
.print-tree-struct .depth-6>.print-node-family .print-person-card small,
.print-tree-struct .depth-7>.print-node-family .print-person-card small,
.print-tree-struct .depth-8>.print-node-family .print-person-card small,
.print-tree-struct .depth-9>.print-node-family .print-person-card small,
.print-tree-struct .depth-10>.print-node-family .print-person-card small,
.print-tree-struct .depth-11>.print-node-family .print-person-card small,
.print-tree-struct .depth-12>.print-node-family .print-person-card small{display:none!important}

/* Khe nối hôn nhân nhỏ lại tương ứng với khoảng cách thẻ mới. */
.print-tree-struct .print-person-card.spouse::before{left:-6px!important;width:6px!important}
.print-tree-struct .print-person-card.spouse::after{left:-3px!important;width:16px!important;height:16px!important;font-size:9px!important}

/* Nhãn đời gọn để dành chiều ngang cho nhánh. */
.print-generation-labels{width:70px!important;left:8px!important}
.print-generation-label{width:64px!important;min-height:38px!important;font-size:18px!important;padding:4px!important}

@media(max-width:900px){
  .print-tree-stage{padding-left:78px!important}
  .print-generation-labels{left:4px!important}
}


/* ===== GiaPha v3.8.3: line phả đồ in + khoảng cách nhánh/đời ===== */
/* SVG của bản in nằm trong print-tree-board: trên nền, dưới các thẻ. */
.print-tree-board{position:relative!important;isolation:isolate!important}
.print-tree-board>.tree-print-line-overlay{
  position:absolute!important;left:0!important;top:0!important;z-index:1!important;
  pointer-events:none!important;overflow:visible!important;
}
.print-tree-board:before{z-index:0!important}
.print-tree-board>.print-tree-inner{position:relative!important;z-index:2!important;background:transparent!important}
.print-tree-board>.tree-print-line-overlay path{stroke-linecap:square!important;stroke-linejoin:miter!important;vector-effect:non-scaling-stroke}

/* Các nhánh cùng một đời ép sát hơn; bề rộng chủ yếu do chính subtree quyết định. */
.print-tree-struct li{padding-left:2px!important;padding-right:2px!important}
.print-tree-struct .print-node-family{gap:4px!important}
.print-tree-struct .print-union-groups{
  gap:3px!important;
  padding-top:72px!important; /* tăng khoảng cách giữa các đời để line nhìn rõ */
}
.print-tree-struct .print-union-group{padding-left:0!important;padding-right:0!important}
.print-tree-struct .print-union-group>.print-struct-children{gap:0!important;padding:0!important}
.print-tree-struct .print-union-group>.print-struct-children>.print-struct-node{
  padding-left:2px!important;padding-right:2px!important;
}
/* Từ đời 4 trở đi thu gọn thêm bề ngang để các nhánh không bị hở lớn. */
.print-tree-struct .depth-3>.print-node-family .print-person-card,
.print-tree-struct .depth-4>.print-node-family .print-person-card,
.print-tree-struct .depth-5>.print-node-family .print-person-card,
.print-tree-struct .depth-6>.print-node-family .print-person-card,
.print-tree-struct .depth-7>.print-node-family .print-person-card,
.print-tree-struct .depth-8>.print-node-family .print-person-card,
.print-tree-struct .depth-9>.print-node-family .print-person-card,
.print-tree-struct .depth-10>.print-node-family .print-person-card,
.print-tree-struct .depth-11>.print-node-family .print-person-card,
.print-tree-struct .depth-12>.print-node-family .print-person-card{
  width:38px!important;min-width:38px!important;max-width:38px!important;
  min-height:126px!important;padding-left:2px!important;padding-right:2px!important;
}
.print-tree-struct .depth-3>.print-node-family .print-person-card img,
.print-tree-struct .depth-4>.print-node-family .print-person-card img,
.print-tree-struct .depth-5>.print-node-family .print-person-card img,
.print-tree-struct .depth-6>.print-node-family .print-person-card img,
.print-tree-struct .depth-7>.print-node-family .print-person-card img,
.print-tree-struct .depth-8>.print-node-family .print-person-card img,
.print-tree-struct .depth-9>.print-node-family .print-person-card img,
.print-tree-struct .depth-10>.print-node-family .print-person-card img,
.print-tree-struct .depth-11>.print-node-family .print-person-card img,
.print-tree-struct .depth-12>.print-node-family .print-person-card img{
  width:22px!important;height:22px!important;flex-basis:22px!important;
}
/* Không để rule SVG cũ vô tình ẩn connector của bản in mới. */
.tree-canvas.has-svg-lines .print-tree-board>.tree-print-line-overlay{display:block!important}


/* ===== GiaPha v3.8.4: sửa line bản in khi zoom + ép sát đời 5 trở đi ===== */
/* Line phải nằm trên lớp phủ nền nhưng dưới thẻ thành viên. */
.print-tree-board>.tree-print-line-overlay{
  z-index:2!important;
}
.print-tree-board>.print-tree-inner{
  z-index:3!important;
}

/* Giữ khoảng dọc giữa các đời đủ rộng để line cha/mẹ -> con nhìn rõ. */
.print-tree-struct .print-union-groups{
  padding-top:76px!important;
}

/* Đời 4 vẫn đủ rộng để đọc; từ đời 5 trở đi ép sát mạnh theo chiều ngang. */
.print-tree-struct .depth-3>.print-node-family .print-person-card{
  width:36px!important;min-width:36px!important;max-width:36px!important;
}
.print-tree-struct .depth-4>.print-node-family .print-person-card,
.print-tree-struct .depth-5>.print-node-family .print-person-card,
.print-tree-struct .depth-6>.print-node-family .print-person-card,
.print-tree-struct .depth-7>.print-node-family .print-person-card,
.print-tree-struct .depth-8>.print-node-family .print-person-card,
.print-tree-struct .depth-9>.print-node-family .print-person-card,
.print-tree-struct .depth-10>.print-node-family .print-person-card,
.print-tree-struct .depth-11>.print-node-family .print-person-card,
.print-tree-struct .depth-12>.print-node-family .print-person-card{
  width:30px!important;min-width:30px!important;max-width:30px!important;
  min-height:112px!important;padding:4px 1px!important;border-radius:5px!important;gap:1px!important;
}
.print-tree-struct .depth-4>.print-node-family .print-person-card img,
.print-tree-struct .depth-5>.print-node-family .print-person-card img,
.print-tree-struct .depth-6>.print-node-family .print-person-card img,
.print-tree-struct .depth-7>.print-node-family .print-person-card img,
.print-tree-struct .depth-8>.print-node-family .print-person-card img,
.print-tree-struct .depth-9>.print-node-family .print-person-card img,
.print-tree-struct .depth-10>.print-node-family .print-person-card img,
.print-tree-struct .depth-11>.print-node-family .print-person-card img,
.print-tree-struct .depth-12>.print-node-family .print-person-card img{
  width:18px!important;height:18px!important;min-width:18px!important;min-height:18px!important;flex-basis:18px!important;
}
.print-tree-struct .depth-4>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-5>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-6>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-7>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-8>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-9>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-10>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-11>.print-node-family .print-person-card .tree-name,
.print-tree-struct .depth-12>.print-node-family .print-person-card .tree-name{
  max-height:82px!important;font-size:8.5px!important;line-height:.95!important;
}

/* Mỗi subtree chỉ giữ khe tối thiểu; bề rộng nhánh do hậu duệ thật quyết định. */
.print-tree-struct .print-union-groups{gap:1px!important;}
.print-tree-struct .print-union-group{padding-left:0!important;padding-right:0!important;}
.print-tree-struct .print-union-group>.print-struct-children{gap:0!important;}
.print-tree-struct .print-union-group>.print-struct-children>.print-struct-node{
  padding-left:1px!important;padding-right:1px!important;
}
.print-tree-struct .depth-4,
.print-tree-struct .depth-5,
.print-tree-struct .depth-6,
.print-tree-struct .depth-7,
.print-tree-struct .depth-8,
.print-tree-struct .depth-9,
.print-tree-struct .depth-10,
.print-tree-struct .depth-11,
.print-tree-struct .depth-12{
  padding-left:1px!important;padding-right:1px!important;
}
.print-tree-struct .depth-4>.print-node-family,
.print-tree-struct .depth-5>.print-node-family,
.print-tree-struct .depth-6>.print-node-family,
.print-tree-struct .depth-7>.print-node-family,
.print-tree-struct .depth-8>.print-node-family,
.print-tree-struct .depth-9>.print-node-family,
.print-tree-struct .depth-10>.print-node-family,
.print-tree-struct .depth-11>.print-node-family,
.print-tree-struct .depth-12>.print-node-family{gap:2px!important;}

/* ===== GiaPha v3.8.5: phả đồ in theo hàng đời, ép sát thành viên + line đúng cha/mẹ ===== */
/* Bản in chuyển sang từng hàng đời độc lập. Hậu duệ sâu không còn kéo giãn vị trí
   của anh/chị/em ở đời trên; SVG vẫn nối bằng data-parent-id + union_id. */
.print-flat-stage{
  position:relative!important;
  display:block!important;
  width:max-content!important;
  min-width:1200px!important;
  margin:0 auto!important;
  padding:20px 28px 52px 92px!important;
  box-sizing:border-box!important;
}
.print-flat-tree{
  position:relative!important;
  z-index:3!important;
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  width:max-content!important;
  min-width:1080px!important;
  gap:72px!important;
  margin:0 auto!important;
  padding:0!important;
}
.print-flat-row{
  position:relative!important;
  display:flex!important;
  align-items:flex-start!important;
  justify-content:center!important;
  width:max-content!important;
  min-width:0!important;
  gap:3px!important;
  padding:0!important;
  margin:0 auto!important;
}
.print-flat-node{
  position:relative!important;
  display:flex!important;
  flex:0 0 auto!important;
  align-items:flex-start!important;
  justify-content:center!important;
  width:max-content!important;
  min-width:0!important;
  margin:0!important;
  padding:0 1px!important;
}
.print-flat-node .print-node-family{
  display:flex!important;
  align-items:stretch!important;
  justify-content:center!important;
  width:max-content!important;
  min-width:0!important;
  gap:3px!important;
  margin:0!important;
  padding:0!important;
}
/* Đời 1-3: ô ngang. */
.print-flat-node.depth-0 .print-person-card,
.print-flat-node.depth-1 .print-person-card,
.print-flat-node.depth-2 .print-person-card{
  width:150px!important;min-width:150px!important;max-width:150px!important;
  min-height:88px!important;padding:8px!important;border-radius:10px!important;gap:3px!important;
}
.print-flat-node.depth-0 .print-person-card img,
.print-flat-node.depth-1 .print-person-card img,
.print-flat-node.depth-2 .print-person-card img{
  width:42px!important;height:42px!important;min-width:42px!important;min-height:42px!important;flex-basis:42px!important;
}
.print-flat-node.depth-0 .print-person-card .tree-name,
.print-flat-node.depth-1 .print-person-card .tree-name,
.print-flat-node.depth-2 .print-person-card .tree-name{
  writing-mode:horizontal-tb!important;text-orientation:mixed!important;max-height:none!important;
  font-size:12px!important;line-height:1.12!important;overflow:visible!important;
}
.print-flat-node.depth-0 .print-person-card small,
.print-flat-node.depth-1 .print-person-card small,
.print-flat-node.depth-2 .print-person-card small{display:block!important;font-size:9px!important}
/* Đời 4: dọc vừa; đời 5 trở đi dọc nhỏ và rất sát nhau. */
.print-flat-node.depth-3 .print-person-card{
  width:36px!important;min-width:36px!important;max-width:36px!important;min-height:124px!important;
  padding:4px 2px!important;border-radius:5px!important;gap:1px!important;
}
.print-flat-node.depth-4 .print-person-card,
.print-flat-node.depth-5 .print-person-card,
.print-flat-node.depth-6 .print-person-card,
.print-flat-node.depth-7 .print-person-card,
.print-flat-node.depth-8 .print-person-card,
.print-flat-node.depth-9 .print-person-card,
.print-flat-node.depth-10 .print-person-card,
.print-flat-node.depth-11 .print-person-card,
.print-flat-node.depth-12 .print-person-card{
  width:28px!important;min-width:28px!important;max-width:28px!important;min-height:108px!important;
  padding:3px 1px!important;border-radius:4px!important;gap:1px!important;
}
.print-flat-node.depth-3 .print-person-card img{width:20px!important;height:20px!important;min-width:20px!important;min-height:20px!important;flex-basis:20px!important}
.print-flat-node.depth-4 .print-person-card img,
.print-flat-node.depth-5 .print-person-card img,
.print-flat-node.depth-6 .print-person-card img,
.print-flat-node.depth-7 .print-person-card img,
.print-flat-node.depth-8 .print-person-card img,
.print-flat-node.depth-9 .print-person-card img,
.print-flat-node.depth-10 .print-person-card img,
.print-flat-node.depth-11 .print-person-card img,
.print-flat-node.depth-12 .print-person-card img{
  width:17px!important;height:17px!important;min-width:17px!important;min-height:17px!important;flex-basis:17px!important;
}
.print-flat-node.depth-3 .print-person-card .tree-name,
.print-flat-node.depth-4 .print-person-card .tree-name,
.print-flat-node.depth-5 .print-person-card .tree-name,
.print-flat-node.depth-6 .print-person-card .tree-name,
.print-flat-node.depth-7 .print-person-card .tree-name,
.print-flat-node.depth-8 .print-person-card .tree-name,
.print-flat-node.depth-9 .print-person-card .tree-name,
.print-flat-node.depth-10 .print-person-card .tree-name,
.print-flat-node.depth-11 .print-person-card .tree-name,
.print-flat-node.depth-12 .print-person-card .tree-name{
  writing-mode:vertical-rl!important;text-orientation:mixed!important;max-height:82px!important;
  overflow:hidden!important;font-size:8px!important;line-height:.92!important;
}
.print-flat-node.depth-3 .print-person-card small,
.print-flat-node.depth-4 .print-person-card small,
.print-flat-node.depth-5 .print-person-card small,
.print-flat-node.depth-6 .print-person-card small,
.print-flat-node.depth-7 .print-person-card small,
.print-flat-node.depth-8 .print-person-card small,
.print-flat-node.depth-9 .print-person-card small,
.print-flat-node.depth-10 .print-person-card small,
.print-flat-node.depth-11 .print-person-card small,
.print-flat-node.depth-12 .print-person-card small{display:none!important}
/* Người Hữu vị vô danh và toàn bộ hậu duệ của nút đó ẩn cùng lúc ở bản in. */
.print-flat-node.tree-placeholder-hidden{display:none!important}
/* SVG line luôn trên nền nhưng dưới các thẻ. */
.print-tree-board>.tree-print-line-overlay{z-index:2!important;pointer-events:none!important;overflow:visible!important}
.print-tree-board>.print-tree-inner{z-index:3!important}
/* Khoảng cách giữa các đời rộng để đường vuông góc đọc rõ, nhưng trong cùng đời cực sát. */
.print-flat-row.depth-4,.print-flat-row.depth-5,.print-flat-row.depth-6,
.print-flat-row.depth-7,.print-flat-row.depth-8,.print-flat-row.depth-9,
.print-flat-row.depth-10,.print-flat-row.depth-11,.print-flat-row.depth-12{gap:1px!important}
@media(max-width:900px){.print-flat-stage{padding-left:78px!important}.print-flat-tree{min-width:1000px!important}}

/* ===== GiaPha v3.8.6: siết Đời 3 + line gia đình liền mạch ===== */
/* Đời 3 (depth 2) vẫn là thẻ ngang nhưng không chiếm bề ngang 150px như trước. */
.print-flat-row.depth-2{gap:1px!important}
.print-flat-node.depth-2{padding-left:0!important;padding-right:0!important}
.print-flat-node.depth-2 .print-node-family{gap:2px!important}
.print-flat-node.depth-2 .print-person-card{
  width:118px!important;min-width:118px!important;max-width:118px!important;
  min-height:76px!important;padding:6px 5px!important;border-radius:8px!important;gap:2px!important;
}
.print-flat-node.depth-2 .print-person-card img{
  width:34px!important;height:34px!important;min-width:34px!important;min-height:34px!important;flex-basis:34px!important;
}
.print-flat-node.depth-2 .print-person-card .tree-name{
  font-size:10.5px!important;line-height:1.08!important;
}
.print-flat-node.depth-2 .print-person-card small{font-size:8px!important;line-height:1.05!important}
/* SVG là line chính của bản in. Tắt đoạn pseudo-line cạnh vợ/chồng để không tạo cảm giác
   line bị gãy/đè đôi; biểu tượng hôn nhân vẫn giữ nguyên. */
.print-flat-tree .print-person-card.spouse::before{display:none!important;content:none!important}
/* Tạo thêm một ít khoảng dọc cho các lane line, không làm giãn ngang các thành viên. */
.print-flat-tree{gap:78px!important}


/* ===== GiaPha v3.8.7: phả đồ in - line tách lane + ẩn Vô Danh + nền thẻ ổn định ===== */
/* Giữ thành viên cùng đời sát nhau; tăng khoảng trống CHỈ theo chiều dọc để
   các lane nối bố/mẹ -> nhóm con có chỗ đi mà không đè lên nhau. */
.print-flat-tree{gap:126px!important}
.print-flat-row{gap:1px!important}
.print-flat-node{padding-left:0!important;padding-right:0!important}
.print-flat-node .print-node-family{gap:2px!important}

/* Mọi thẻ bản in phải có nền đặc. Rule cũ background:inherit của người đã mất
   có thể khiến nền đỏ phía dưới xuyên qua thẻ. Giữ ảnh màu và dùng † để báo đã mất. */
.print-flat-stage .print-person-card.gender-male,
.print-flat-stage .print-person-card.gender-male.is-deceased{
  background:#dfeaf9!important;border-color:#79a9df!important;color:#182433!important;
}
.print-flat-stage .print-person-card.gender-female,
.print-flat-stage .print-person-card.gender-female.is-deceased{
  background:#f7e0ee!important;border-color:#df8fb5!important;color:#2b1b23!important;
}
.print-flat-stage .print-person-card.gender-other,
.print-flat-stage .print-person-card.gender-unknown,
.print-flat-stage .print-person-card.gender-other.is-deceased,
.print-flat-stage .print-person-card.gender-unknown.is-deceased{
  background:#f1f1ee!important;border-color:#aaa89f!important;color:#242424!important;
}
.print-flat-stage .print-person-card.is-deceased img{filter:none!important;opacity:1!important}

/* Ẩn thật sự toàn bộ nút/nhánh Vô Danh ở bản in khi trạng thái mặc định đang ẩn. */
.print-flat-stage .tree-placeholder-hidden{display:none!important}

/* Line trắng rõ nhưng mảnh hơn để các lane gần nhau vẫn dễ đọc. */
.print-tree-board>.tree-print-line-overlay path{vector-effect:non-scaling-stroke;stroke-width:1.55!important}


/* ===== GiaPha v3.8.21: lane đối xứng mọi đời + khoảng đời gọn ===== */
/* JS sẽ tự nới thêm đúng mức cần thiết nếu số lane nhiều; mặc định giữ các đời gần nhau hơn. */
.print-flat-tree{gap:88px!important}
/* Không để margin/padding khác làm line có cảm giác hở tại mép thẻ. */
.print-flat-row{margin-left:auto!important;margin-right:auto!important}
.print-flat-node .print-person-card{box-sizing:border-box!important}


/* ===== GiaPha v3.8.23: Chỉ ảnh gọn đúng ô + dấu † xuống dưới + line chạm thẻ ===== */
/* Bản in không dùng bóng đổ phía dưới thẻ: bóng cũ che mất vài pixel đầu của
   đường SVG, tạo cảm giác line từ bố/mẹ xuống bị hở dù tọa độ đã chạm mép. */
.tree-canvas[data-tree-layout="print"] .print-flat-stage .print-person-card{
  box-shadow:none!important;
}

/* Dấu người đã mất ở PHẢ ĐỒ IN ẤN luôn nằm giữa mép dưới thẻ, không đè lên avatar.
   Line huyết thống vẫn chạy phía dưới dấu † vì SVG có z-index thấp hơn thẻ. */
.tree-canvas[data-tree-layout="print"] .print-flat-stage .print-person-card .deceased-mark{
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:-10px!important;
  transform:translateX(-50%)!important;
  width:18px!important;
  height:18px!important;
  font-size:12px!important;
  line-height:1!important;
  z-index:60!important;
}

/* Khi bật Chỉ ảnh: mọi thẻ bản in co đúng chiều cao của ô vuông; không còn
   min-height 76/108/124px của chế độ đầy đủ gây khoảng trống ở phía dưới. */
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node .print-node-family{
  align-items:center!important;
}
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-person-card{
  display:flex!important;
  flex-direction:column!important;
  align-items:center!important;
  justify-content:center!important;
  gap:0!important;
  margin-top:0!important;
  margin-bottom:0!important;
  box-sizing:border-box!important;
  overflow:visible!important;
}

/* Đời 1-3: ô vuông vừa đủ nhìn ảnh, nhưng nhỏ hơn rất nhiều so với thẻ thông tin. */
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-0 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-1 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-2 .print-person-card{
  width:46px!important;
  min-width:46px!important;
  max-width:46px!important;
  height:46px!important;
  min-height:46px!important;
  max-height:46px!important;
  padding:5px!important;
  border-radius:7px!important;
  align-self:center!important;
}
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-0 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-1 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-2 .print-person-card img{
  width:34px!important;
  min-width:34px!important;
  max-width:34px!important;
  height:34px!important;
  min-height:34px!important;
  max-height:34px!important;
  flex:0 0 34px!important;
  margin:0!important;
  border-radius:50%!important;
  object-fit:cover!important;
}

/* Đời 4: vẫn phân biệt được từng người nhưng không còn ô dọc dài. */
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-3 .print-person-card{
  width:34px!important;
  min-width:34px!important;
  max-width:34px!important;
  height:34px!important;
  min-height:34px!important;
  max-height:34px!important;
  padding:4px!important;
  border-radius:6px!important;
  align-self:center!important;
}
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-3 .print-person-card img{
  width:24px!important;
  min-width:24px!important;
  max-width:24px!important;
  height:24px!important;
  min-height:24px!important;
  max-height:24px!important;
  flex:0 0 24px!important;
  margin:0!important;
  border-radius:50%!important;
  object-fit:cover!important;
}

/* Đời 5 trở đi: giữ mật độ bản in hiện tại, nhưng biến thẻ thành ô vuông đúng nghĩa. */
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-4 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-5 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-6 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-7 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-8 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-9 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-10 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-11 .print-person-card,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-12 .print-person-card{
  width:28px!important;
  min-width:28px!important;
  max-width:28px!important;
  height:28px!important;
  min-height:28px!important;
  max-height:28px!important;
  padding:3px!important;
  border-radius:5px!important;
  align-self:center!important;
}
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-4 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-5 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-6 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-7 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-8 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-9 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-10 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-11 .print-person-card img,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-node.depth-12 .print-person-card img{
  width:20px!important;
  min-width:20px!important;
  max-width:20px!important;
  height:20px!important;
  min-height:20px!important;
  max-height:20px!important;
  flex:0 0 20px!important;
  margin:0!important;
  border-radius:50%!important;
  object-fit:cover!important;
}

/* Ẩn toàn bộ phần chữ/trạng thái trong Chỉ ảnh. Rule đặt cuối file để thắng
   các selector depth-* có !important ở các phiên bản trước. */
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-person-card .tree-name,
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-person-card small{
  display:none!important;
}

/* Dấu † trong Chỉ ảnh nhỏ hơn và treo sát dưới ô; không che ảnh đại diện. */
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-stage .print-person-card .deceased-mark{
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:-8px!important;
  transform:translateX(-50%)!important;
  width:16px!important;
  height:16px!important;
  font-size:11px!important;
}

/* Fullscreen dùng đúng kích thước Chỉ ảnh của bản in ở trên, không dùng rule
   chung 68x68 / avatar 52x52 vốn làm ảnh phóng to và phá mật độ phả đồ. */
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-canvas[data-tree-layout="print"].tree-photo-only .print-person-card{
  box-sizing:border-box!important;
}

/* ===== v3.9.4: sidebar sticky, home hero image, side couplets ===== */
.family-sidebar.is-sticky{
  top:64px!important;
  max-height:calc(100vh - 78px)!important;
  overscroll-behavior:contain;
}

.family-home-hero{display:grid;grid-template-columns:minmax(0,1fr) minmax(220px,34%);align-items:stretch;gap:0;padding:0!important;min-height:250px}
.family-home-hero .family-home-hero-copy{padding:42px 34px;position:relative;z-index:2;display:flex;flex-direction:column;justify-content:center}
.family-home-hero .family-home-hero-copy h1{margin-top:0}
.family-home-hero .family-home-hero-image{position:relative;min-height:250px;overflow:hidden;border-radius:0 15px 15px 0;background:rgba(255,255,255,.08)}
.family-home-hero .family-home-hero-image:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(123,22,22,.35),transparent 32%);z-index:1;pointer-events:none}
.family-home-hero .family-home-hero-image img{width:100%;height:100%;min-height:250px;object-fit:cover;display:block}
.family-home-hero.has-home-image:after{display:none}

.family-couplet{position:absolute;top:190px;width:112px;max-height:calc(100vh - 120px);z-index:850;pointer-events:none;display:flex;justify-content:center}
.family-couplet img{display:block;max-width:100%;max-height:calc(100vh - 120px);width:auto;height:auto;object-fit:contain;filter:drop-shadow(0 3px 5px rgba(0,0,0,.16))}
.family-couplet-left{left:max(8px,calc((100vw - 1440px)/2 - 132px))}
.family-couplet-right{right:max(8px,calc((100vw - 1440px)/2 - 132px))}
.family-couplet.is-fixed{position:fixed;top:50%;transform:translateY(-50%)}
@media(max-width:1580px){.family-couplet{display:none!important}}
@media(max-width:820px){
  .family-home-hero{grid-template-columns:1fr;min-height:0}
  .family-home-hero .family-home-hero-copy{padding:28px 20px}
  .family-home-hero .family-home-hero-image{min-height:180px;border-radius:0 0 15px 15px}
  .family-home-hero .family-home-hero-image img{min-height:180px}
  .family-sidebar.is-sticky{top:auto!important;max-height:none!important}
}

.guest-edit-note{border-left:4px solid #d08a00;background:#fff8e8;padding:10px 12px;border-radius:8px;margin:0 0 16px}
.guest-edit-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.guest-upload-preview{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.guest-upload-preview img{width:72px;height:72px;border-radius:10px;object-fit:cover;border:1px solid #ddd}

/* ===== GiaPha v3.9.5: canh câu đối, tooltip ảnh, khổ menu/footer ===== */
/* Menu công khai dùng cùng bề rộng 1440px và lề 18px với .site-main. */
.public-header-unified .main-nav>.public-main-menu,
.main-nav .public-main-menu{
  width:100%;
  max-width:1440px!important;
  padding-left:18px!important;
  padding-right:18px!important;
  margin-left:auto!important;
  margin-right:auto!important;
}

/* Footer canh đúng mép chữ của nội dung công khai. */
.site-footer.themed-footer{padding-left:0!important;padding-right:0!important}
.site-footer.themed-footer .footer-grid,
.site-footer.themed-footer .footer-bottom{
  width:100%;
  max-width:1440px!important;
  box-sizing:border-box;
  padding-left:18px;
  padding-right:18px;
}

/* Câu đối: kích thước lấy từ % trong quản trị. JS sẽ đặt top đúng hàng
   với khối đầu tiên của sidebar (Thư viện hình ảnh) ở cả lúc đầu và khi cuộn. */
.family-couplet{
  width:var(--couplet-width,112px)!important;
  z-index:850;
  transform:none!important;
  transform-origin:top center;
  align-items:flex-start;
  overflow:visible;
}
.family-couplet img{
  width:100%!important;
  height:auto!important;
  max-width:none!important;
  max-height:100%!important;
  object-fit:contain!important;
  object-position:top center;
}
.family-couplet-left{left:max(8px,calc((100vw - 1440px)/2 - var(--couplet-width,112px) - 20px))!important}
.family-couplet-right{right:max(8px,calc((100vw - 1440px)/2 - var(--couplet-width,112px) - 20px))!important}
.family-couplet.is-fixed{position:fixed!important;transform:none!important}

/* Tooltip phả đồ: ảnh gốc chữ nhật ở trên, thông tin ở dưới. */
.gp-tooltip.gp-person-tooltip{
  min-width:250px;
  width:290px;
  max-width:min(320px,calc(100vw - 24px));
  padding:0!important;
  overflow:hidden;
  white-space:normal!important;
  background:#222;
  border:1px solid rgba(255,255,255,.13);
}
.gp-person-tooltip .gp-tooltip-photo{
  display:block;
  width:100%;
  height:auto;
  max-height:280px;
  object-fit:contain;
  object-position:center center;
  background:#111;
  border:0;
}
.gp-person-tooltip .gp-tooltip-photo[hidden]{display:none!important}
.gp-person-tooltip .gp-tooltip-text{
  padding:10px 12px 11px;
  white-space:pre-line;
  line-height:1.45;
}

/* Giao diện quản trị câu đối - tách khối rõ ràng, không dùng relation-box cũ. */
.couplet-admin-head{align-items:flex-start}
.couplet-admin-head h1{margin-bottom:2px}
.couplet-admin-grid{align-items:start}
.couplet-settings-card,.couplet-upload-card{overflow:visible}
.couplet-settings-form{display:grid;gap:16px}
.couplet-toggle-list{display:grid;gap:10px}
.couplet-toggle-row{
  display:grid;
  grid-template-columns:26px minmax(0,1fr);
  gap:10px;
  align-items:start;
  padding:12px 14px;
  border:1px solid #e4ddd2;
  background:#faf8f4;
  border-radius:10px;
  cursor:pointer;
}
.couplet-toggle-control{padding-top:2px}
.couplet-toggle-row input[type=checkbox]{width:18px;height:18px;margin:0;accent-color:var(--theme)}
.couplet-toggle-row strong{display:block;font-size:15px;line-height:1.35}
.couplet-toggle-row small{display:block;color:var(--muted);font-size:12px;line-height:1.45;margin-top:3px}
.couplet-select-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}
.couplet-select-grid .form-group{margin:0}
.couplet-scale-box{border:1px solid #e4ddd2;background:#fffdf9;border-radius:10px;padding:14px}
.couplet-scale-title{display:flex;justify-content:space-between;gap:16px;align-items:flex-start;margin-bottom:10px}
.couplet-scale-number{display:flex;align-items:center;gap:5px;flex:0 0 auto}
.couplet-scale-number input{width:88px!important;text-align:center;padding:8px 9px!important}
.couplet-scale-number span{font-weight:700}
.couplet-scale-range{width:100%;accent-color:var(--theme)}
.couplet-scale-presets{display:flex;gap:7px;flex-wrap:wrap;margin-top:9px}
.couplet-scale-presets button{border:1px solid #d9cdbd;background:#fff;border-radius:999px;padding:5px 10px;cursor:pointer}
.couplet-scale-presets button:hover{border-color:var(--theme);color:var(--theme)}
.couplet-library-item{text-align:center}
.couplet-library-item img{display:block;max-width:100%;height:240px;object-fit:contain;margin:0 auto}
.couplet-library-item strong{display:block;margin:8px 0}

@media(max-width:1050px){
  .family-couplet{display:none!important}
}
@media(max-width:820px){
  .public-header-unified .main-nav>.public-main-menu,.main-nav .public-main-menu{padding-left:12px!important;padding-right:12px!important}
  .site-footer.themed-footer .footer-grid,.site-footer.themed-footer .footer-bottom{padding-left:12px;padding-right:12px}
  .couplet-select-grid{grid-template-columns:1fr}
  .couplet-scale-title{display:block}
  .couplet-scale-number{margin-top:9px}
}


/* ===== GiaPha v3.9.6: câu đối dừng trước footer + Cây mở từng nhánh 2 ===== */
/* Ảnh câu đối luôn giữ đúng tỷ lệ. JS đặt --couplet-max-height theo khoảng trống
   từ đầu sidebar tới ngay phía trên footer, vì vậy cuộn tới cuối trang không lẹm footer. */
.family-couplet{
  max-height:var(--couplet-max-height,calc(100vh - 120px))!important;
}
.family-couplet img{
  width:auto!important;
  max-width:100%!important;
  height:auto!important;
  max-height:var(--couplet-max-height,calc(100vh - 120px))!important;
  object-fit:contain!important;
  object-position:top center!important;
}

/* Cây mở từng nhánh 2: giữ nguyên quan hệ/logic mở nhánh của Explorer 1,
   chỉ nén mạnh khoảng trống giữa node và giữa các đời. */
.explore-tree-v2,
.explore-tree-v2 ul{
  padding-top:12px!important;
}
.explore-tree-v2 ul:before{
  height:12px!important;
}
.explore-tree-v2 li{
  padding:12px 2px 0!important;
}
.explore-tree-v2 li:before,
.explore-tree-v2 li:after{
  height:12px!important;
}
.explore-tree-v2 .tree-explore-family{
  gap:4px!important;
}
.explore-tree-v2 .tree-explore-family>.tree-spouse-cards{
  gap:4px!important;
}
.explore-tree-v2 .tree-card,
.explore-tree-v2 .tree-card.tree-spouse-card,
.explore-tree-v2 .tree-spouse-card{
  width:116px!important;
  min-width:116px!important;
  max-width:116px!important;
  min-height:96px!important;
  padding:6px!important;
}
.explore-tree-v2 .tree-card img,
.explore-tree-v2 .tree-spouse-card img{
  width:44px!important;
  height:44px!important;
}
.explore-tree-v2 .tree-card .tree-name,
.explore-tree-v2 .tree-spouse-card .tree-name{
  font-size:12px!important;
  line-height:1.12!important;
}
.explore-tree-v2 .tree-card small,
.explore-tree-v2 .tree-spouse-card small,
.explore-tree-v2 .tree-generation{
  font-size:10px!important;
}
.explore-tree-v2 .tree-card-explore .branch-hint{
  font-size:8px!important;
  margin-top:2px!important;
  padding-right:0!important;
}
.explore-tree-v2 .branch-toggle-dot{
  width:19px!important;
  height:19px!important;
  line-height:15px!important;
  font-size:12px!important;
  bottom:-10px!important;
}

/* Khi chọn "Chỉ ảnh đại diện", phương án 2 được nén gần giống mẫu người dùng:
   mỗi thành viên là một ô vuông nhỏ, khoảng cách anh/chị/em chỉ còn vài pixel. */
.tree-canvas.tree-photo-only .explore-tree-v2,
.tree-canvas.tree-photo-only .explore-tree-v2 ul{
  padding-top:10px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li{
  padding:10px 1px 0!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-explore-family,
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-explore-family>.tree-spouse-cards{
  gap:2px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-card,
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-card.tree-spouse-card,
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-spouse-card{
  width:52px!important;
  min-width:52px!important;
  max-width:52px!important;
  min-height:52px!important;
  height:52px!important;
  padding:3px!important;
  border-radius:7px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-card img,
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-spouse-card img,
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-card-explore>img{
  width:44px!important;
  height:44px!important;
  flex:0 0 44px!important;
  margin:0!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .spouse-symbol{
  top:17px!important;
  transform:translate(-50%,-50%) scale(.82)!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .deceased-mark{
  width:18px!important;
  height:18px!important;
  line-height:16px!important;
  font-size:12px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .branch-toggle-dot{
  right:-6px!important;
  left:auto!important;
  bottom:-7px!important;
  transform:none!important;
  width:18px!important;
  height:18px!important;
  line-height:14px!important;
}

/* Fullscreen giữ nguyên độ nén của Explorer 2, không bị các rule fullscreen cũ phóng thẻ trở lại. */
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-v2 .tree-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-v2 .tree-card.tree-spouse-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-v2 .tree-spouse-card{
  width:52px!important;
  min-width:52px!important;
  max-width:52px!important;
  min-height:52px!important;
  height:52px!important;
  padding:3px!important;
}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-v2 .tree-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-v2 .tree-spouse-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-v2 .tree-card-explore>img{
  width:44px!important;
  height:44px!important;
  flex:0 0 44px!important;
}

/* ===== GiaPha v3.9.7: Explorer 2 sát nhánh + câu đối giữ nguyên size + hero banner ===== */
/* Câu đối luôn giữ đúng kích thước % đã cấu hình. Không dùng chiều cao viewport
   để co ảnh nữa; JS chỉ thay đổi vị trí top khi sticky và khi chạm footer. */
.family-couplet{
  width:var(--couplet-width,112px)!important;
  max-height:none!important;
  overflow:visible!important;
}
.family-couplet img{
  display:block!important;
  width:100%!important;
  max-width:none!important;
  height:auto!important;
  max-height:none!important;
  object-fit:contain!important;
}

/* Explorer 2 ở chế độ Chỉ ảnh: hậu duệ được đặt tuyệt đối dưới bố/mẹ để độ rộng
   của hàng cháu không còn đẩy anh/chị/em ở hàng con ra xa nhau. */
.tree-canvas.tree-photo-only .explore-tree-v2 li{
  flex:0 0 auto!important;
  width:auto!important;
  min-width:0!important;
  padding-left:1px!important;
  padding-right:1px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li>ul{
  position:absolute!important;
  top:100%!important;
  left:50%!important;
  transform:translateX(-50%)!important;
  width:max-content!important;
  min-width:max-content!important;
  margin:0!important;
  padding-top:8px!important;
  gap:0!important;
  z-index:2;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li:not(.open)>ul{display:none!important}
.tree-canvas.tree-photo-only .explore-tree-v2 li.open>ul{display:flex!important}
.tree-canvas.tree-photo-only .explore-tree-v2 li>ul>li{
  flex:0 0 auto!important;
  padding-top:8px!important;
  padding-left:1px!important;
  padding-right:1px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-explore-family,
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-explore-family>.tree-spouse-cards{gap:1px!important}
/* Chừa một khoảng rất nhỏ giữa các gia đình cùng đời; vẫn đủ chỗ cho viền/biểu tượng. */
.tree-canvas.tree-photo-only .explore-tree-v2>li>ul>li{margin-inline:1px!important}

/* Nền ô giới thiệu trang chủ: ảnh phủ toàn khung, chữ nằm trên ảnh. */
.family-home-hero{
  display:block!important;
  position:relative!important;
  isolation:isolate;
  min-height:250px;
  overflow:hidden;
}
.family-home-hero .family-home-hero-bg{
  position:absolute;
  inset:0;
  width:100%;
  height:100%;
  min-height:250px;
  object-fit:cover;
  object-position:center center;
  z-index:0;
}
.family-home-hero .family-home-hero-overlay{
  position:absolute;
  inset:0;
  z-index:1;
  pointer-events:none;
}
.family-home-hero.overlay-ltr.overlay-dark .family-home-hero-overlay{background:linear-gradient(90deg,rgba(0,0,0,.72) 0%,rgba(0,0,0,.48) 34%,rgba(0,0,0,.08) 72%,rgba(0,0,0,0) 100%)}
.family-home-hero.overlay-rtl.overlay-dark .family-home-hero-overlay{background:linear-gradient(270deg,rgba(0,0,0,.72) 0%,rgba(0,0,0,.48) 34%,rgba(0,0,0,.08) 72%,rgba(0,0,0,0) 100%)}
.family-home-hero.overlay-ltr.overlay-light .family-home-hero-overlay{background:linear-gradient(90deg,rgba(255,255,255,.9) 0%,rgba(255,255,255,.6) 34%,rgba(255,255,255,.12) 72%,rgba(255,255,255,0) 100%)}
.family-home-hero.overlay-rtl.overlay-light .family-home-hero-overlay{background:linear-gradient(270deg,rgba(255,255,255,.9) 0%,rgba(255,255,255,.6) 34%,rgba(255,255,255,.12) 72%,rgba(255,255,255,0) 100%)}
.family-home-hero .family-home-hero-copy{
  position:relative!important;
  z-index:2!important;
  width:min(760px,70%);
  min-height:250px;
  padding:42px 34px!important;
  display:flex;
  flex-direction:column;
  justify-content:center;
}
.family-home-hero.overlay-rtl .family-home-hero-copy{margin-left:auto;text-align:right;align-items:flex-end}
.family-home-hero.overlay-light .family-home-hero-copy{color:#2c201d;text-shadow:0 1px 0 rgba(255,255,255,.45)}
.family-home-hero.has-home-image:after{display:none!important}
.family-home-hero .family-home-hero-image{display:none!important}

/* Quản trị thư viện nền ô giới thiệu. */
.home-hero-admin-grid{align-items:start}
.home-hero-admin-preview{display:block;width:100%;max-width:520px;max-height:220px;object-fit:cover;border-radius:10px;border:1px solid #ddd;margin-top:10px}
.hero-effect-form{display:grid;gap:12px}
.home-hero-library-item{padding:12px!important}
.home-hero-library-item.is-selected{box-shadow:0 0 0 2px var(--theme);border-color:var(--theme)}
.home-hero-library-item>img{display:block;width:100%;height:150px;object-fit:cover;border-radius:8px;margin-bottom:9px}
.home-hero-library-item>strong{display:block;margin-bottom:3px}
.home-hero-library-actions{display:flex;gap:6px;flex-wrap:wrap;align-items:center;margin-top:9px}
.home-hero-library-actions .inline-form{margin:0}

@media(max-width:820px){
  .family-home-hero .family-home-hero-copy{width:100%;min-height:220px;padding:30px 20px!important}
  .family-home-hero.overlay-rtl .family-home-hero-copy{margin-left:0;text-align:left;align-items:flex-start}
}

/* ===== GiaPha v3.9.8: Explorer 2 chống chồng nhánh + mobile menu/sidebar ===== */
/* Explorer 2 Chỉ ảnh được JS xếp theo từng hàng đời. Xóa toàn bộ connector CSS cũ,
   SVG sẽ vẽ line theo vị trí mới nên các nhóm con/cháu có thể sát nhau mà không đè thẻ. */
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed{
  display:block!important;
  position:relative!important;
  padding:0!important;
  margin:0!important;
  justify-content:initial!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed ul{
  position:static!important;
  width:auto!important;
  min-width:0!important;
  height:auto!important;
  margin:0!important;
  padding:0!important;
  transform:none!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li{
  position:static!important;
  width:auto!important;
  min-width:0!important;
  height:auto!important;
  margin:0!important;
  padding:0!important;
  transform:none!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:before,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:after,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed ul:before{display:none!important}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:not(.open)>ul{display:none!important}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li.open>ul{display:contents!important}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed .tree-explore-wrap{
  margin:0!important;
  z-index:3;
}

/* Menu con có nút riêng trên mobile; desktop vẫn dùng hover như cũ. */
.submenu-toggle{display:none}

/* Hai dòng chữ trong banner giới thiệu gần nhau hơn. */
.family-home-hero .family-home-hero-copy{gap:8px!important}
.family-home-hero .family-home-hero-copy h1{margin:0!important;line-height:1.12!important}
.family-home-hero .family-home-hero-copy p{margin:0!important;line-height:1.35!important}

@media(max-width:820px){
  /* Menu mobile gọn: bấm Menu mới mở, các menu con dùng nút + / − riêng. */
  .public-header-unified .main-nav,.main-nav{padding:0!important}
  .public-header-unified .nav-toggle,.main-nav .nav-toggle{
    display:flex!important;
    align-items:center;
    gap:6px;
    width:100%;
    max-width:100%;
    margin:0!important;
    padding:9px 14px!important;
    background:rgba(0,0,0,.08)!important;
    border:0!important;
    color:#fff!important;
    font-size:14px;
    font-weight:700;
    text-align:left;
  }
  .public-header-unified .main-nav>.public-main-menu,
  .main-nav .public-main-menu{display:none!important}
  .public-header-unified .main-nav>.public-main-menu.show,
  .main-nav .public-main-menu.show{
    display:grid!important;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:2px 6px;
    padding:6px 10px 10px!important;
    width:100%!important;
  }
  .main-nav .public-main-menu>li{min-width:0;position:relative;border-bottom:1px solid rgba(255,255,255,.08)}
  .main-nav .public-main-menu>li>a{padding:8px 8px!important;font-size:13px!important;line-height:1.3;white-space:normal}
  .main-nav .public-main-menu>li.has-sub>a{padding-right:38px!important}
  .main-nav .submenu-toggle{
    display:flex!important;
    position:absolute;
    right:4px;
    top:4px;
    width:30px;
    height:30px;
    padding:0;
    border:1px solid rgba(255,255,255,.22);
    border-radius:6px;
    background:rgba(255,255,255,.08);
    color:#fff;
    align-items:center;
    justify-content:center;
    font-size:19px;
    line-height:1;
    z-index:2;
  }
  .main-nav .has-sub>.submenu{
    display:none!important;
    position:static!important;
    min-width:0!important;
    width:100%!important;
    margin:0!important;
    padding:3px 0 5px 10px!important;
    background:rgba(0,0,0,.12)!important;
    box-shadow:none!important;
  }
  .main-nav .has-sub.submenu-open>.submenu{display:block!important}
  .main-nav .has-sub>.submenu li{border:0!important}
  .main-nav .has-sub>.submenu a{padding:7px 8px!important;font-size:12px!important}
  .main-nav .nav-account-cluster{
    grid-column:1/-1;
    display:grid!important;
    grid-template-columns:repeat(2,minmax(0,1fr));
    gap:2px 6px;
    margin:2px 0 0!important;
    padding:5px 0 0!important;
    border-top:1px solid rgba(255,255,255,.18)!important;
  }
  .main-nav .nav-account-cluster>a{padding:8px!important;font-size:12px!important}

  /* Chỉ trang chủ mới hiện sidebar trên mobile; các trang con dành toàn chiều rộng cho nội dung. */
  .tree-public-inner .family-sidebar{display:none!important}
  .tree-public-home .family-sidebar{display:block!important;width:100%!important;max-width:none!important}

  /* Gallery mobile dùng toàn bề ngang và cho phép bắt đầu thao tác cuộn ngay trên ảnh. */
  .family-sidebar,.sidebar-block,.sidebar-random-gallery,.sidebar-random-gallery .sidebar-slide,
  .sidebar-random-gallery .sidebar-slide img,.family-calendar,.family-calendar-grid,.cal-day{
    touch-action:pan-y pinch-zoom!important;
    overscroll-behavior:auto!important;
  }
  .tree-public-home .sidebar-random-gallery{display:block!important;padding:8px!important;width:100%!important}
  .tree-public-home .sidebar-random-gallery .sidebar-slide{width:100%!important;max-width:none!important}
  .tree-public-home .sidebar-random-gallery .sidebar-slide.active{display:block!important}
  .tree-public-home .sidebar-random-gallery img{
    display:block!important;
    width:100%!important;
    max-width:none!important;
    height:auto!important;
    min-height:0!important;
    object-fit:cover!important;
    -webkit-user-drag:none;
    user-select:none;
  }
  .tree-public-home .sidebar-random-gallery span{font-size:12px!important;white-space:normal!important}
  .tree-public-home .sidebar-more{font-size:12px!important;padding:2px 10px 10px!important}
  .family-sidebar{overscroll-behavior:auto!important;overflow:visible!important}
  .family-calendar button,.sidebar-gallery-nav{touch-action:manipulation!important}

  .family-home-hero .family-home-hero-copy{gap:6px!important}
  .family-home-hero .family-home-hero-copy h1{margin:0!important}
  .family-home-hero .family-home-hero-copy p{margin:0!important}
}


/* ===== GiaPha v3.9.10: Explorer 2 - ngang sát, đời tách rõ ===== */
/*
   Explorer 2 dùng đúng flow/subtree của Explorer 1 để mỗi nhánh giữ vùng riêng.
   Chỉ nén theo CHIỀU NGANG; khoảng cách DỌC giữa các đời giữ như Explorer 1
   để thẻ đời con/cháu không chồng lên đời trên.
*/
.tree-canvas.tree-photo-only .explore-tree-v2,
.tree-canvas.tree-photo-only .explore-tree-v2 ul,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed ul{
  position:relative!important;
  display:flex!important;
  justify-content:center!important;
  width:auto!important;
  min-width:0!important;
  height:auto!important;
  min-height:0!important;
  margin:0!important;
  top:auto!important;
  left:auto!important;
  right:auto!important;
  transform:none!important;
}

/* Giữ khoảng cách dọc tương đương Cây mở từng nhánh (Explorer 1). */
.tree-canvas.tree-photo-only .explore-tree-v2{
  padding-top:20px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 ul,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed ul{
  padding-top:20px!important;
  gap:0!important;
  z-index:auto!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 ul:before,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed ul:before{
  display:block!important;
  height:20px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li{
  position:relative!important;
  flex:0 0 auto!important;
  width:auto!important;
  min-width:0!important;
  height:auto!important;
  min-height:0!important;
  margin:0!important;
  padding:20px 1px 0!important;
  transform:none!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li:before,
.tree-canvas.tree-photo-only .explore-tree-v2 li:after,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:before,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:after{
  display:block!important;
  height:20px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li:only-child:before,
.tree-canvas.tree-photo-only .explore-tree-v2 li:only-child:after,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:only-child:before,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:only-child:after{
  display:none!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li:first-child:before,
.tree-canvas.tree-photo-only .explore-tree-v2 li:last-child:after,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:first-child:before,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:last-child:after{
  border:0!important;
}

.tree-canvas.tree-photo-only .explore-tree-v2 li:not(.open)>ul,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li:not(.open)>ul{
  display:none!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 li.open>ul,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-packed li.open>ul{
  display:flex!important;
}

.tree-canvas.tree-photo-only .explore-tree-v2 .tree-explore-wrap{
  position:relative!important;
  left:auto!important;
  top:auto!important;
  margin:0!important;
  min-height:52px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-explore-family,
.tree-canvas.tree-photo-only .explore-tree-v2 .tree-explore-family>.tree-spouse-cards{
  gap:1px!important;
  align-items:flex-start!important;
}

/* Nén ngang: anh/chị/em sát nhau nhưng subtree vẫn tự chiếm đủ chỗ,
   nhờ vậy các nhánh không đè nhau. */
.tree-canvas.tree-photo-only .explore-tree-v2 li>ul>li{
  margin-inline:0!important;
  padding-left:1px!important;
  padding-right:1px!important;
}

/* Chừa vùng an toàn dưới thẻ cho nút +/- trước khi sang đời kế tiếp. */
.tree-canvas.tree-photo-only .explore-tree-v2 .branch-toggle-dot{
  bottom:-9px!important;
}

/* ===== GiaPha v3.9.11: Explorer 2 - khóa vùng riêng cho từng subtree =====
   JS tính chiều rộng bottom-up cho mỗi nhánh. CSS chỉ chịu trách nhiệm giữ
   subtree con ở giữa vùng cha và không cho padding/gap làm sai phép đo. */
.tree-canvas .explore-tree-v2.explorer2-safe-layout,
.tree-canvas .explore-tree-v2.explorer2-safe-layout ul{
  box-sizing:border-box!important;
}
.tree-canvas .explore-tree-v2.explorer2-safe-layout li{
  box-sizing:border-box!important;
  max-width:none!important;
  padding-left:0!important;
  padding-right:0!important;
  overflow:visible!important;
}
.tree-canvas .explore-tree-v2.explorer2-safe-layout li>ul{
  box-sizing:border-box!important;
  margin-left:auto!important;
  margin-right:auto!important;
  max-width:none!important;
  flex-wrap:nowrap!important;
  align-items:flex-start!important;
  overflow:visible!important;
}
.tree-canvas .explore-tree-v2.explorer2-safe-layout .tree-explore-wrap{
  display:flex!important;
  width:100%!important;
  max-width:none!important;
  justify-content:center!important;
  align-items:flex-start!important;
  box-sizing:border-box!important;
}
.tree-canvas .explore-tree-v2.explorer2-safe-layout .tree-explore-family{
  flex:0 0 auto!important;
  max-width:none!important;
}
/* Mỗi đời có vùng line riêng. Khoảng ngang giữa các subtree được JS đặt bằng gap,
   vì thế không cần margin âm/absolute positioning ở Explorer 2. */
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout li{
  padding-top:20px!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout ul{
  padding-top:20px!important;
}


/* ===== GiaPha v3.9.12: Explorer 2 - chống chồng nhánh triệt để =====
   Các bản 3.9.7 còn rule position:absolute + width:max-content !important cho UL con,
   và width:auto !important cho LI. Chúng có specificity cao hơn các bản vá sau nên
   chiều rộng subtree do JS đo đã không thật sự được áp dụng. Kết quả: con/cháu của
   hai nhánh cùng đời có thể tràn vào nhau.

   Bản này khóa lại flow chuẩn của Explorer 1:
   - UL con nằm trong normal flow, KHÔNG absolute.
   - Mỗi LI dùng đúng --explorer2-subtree-width do JS tính bottom-up.
   - Mỗi UL con dùng đúng --explorer2-child-band-width.
   - Nhánh cha/con được canh giữa; subtree kế bên chỉ sát nhau qua gap, không chồng.
*/
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout{
  position:relative!important;
  display:flex!important;
  justify-content:center!important;
  align-items:flex-start!important;
  width:var(--explorer2-root-width,max-content)!important;
  min-width:var(--explorer2-root-width,max-content)!important;
  max-width:none!important;
  height:auto!important;
  min-height:0!important;
  overflow:visible!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout li{
  position:relative!important;
  display:block!important;
  box-sizing:border-box!important;
  width:var(--explorer2-subtree-width,auto)!important;
  min-width:var(--explorer2-subtree-width,0px)!important;
  max-width:none!important;
  flex:0 0 var(--explorer2-subtree-width,auto)!important;
  height:auto!important;
  min-height:0!important;
  margin:0!important;
  padding-left:0!important;
  padding-right:0!important;
  overflow:visible!important;
  transform:none!important;
}
/* Selector cố ý có specificity cao hơn rule v3.9.7 li>ul. */
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout li>ul{
  position:relative!important;
  display:flex!important;
  flex-wrap:nowrap!important;
  justify-content:flex-start!important;
  align-items:flex-start!important;
  box-sizing:border-box!important;
  top:auto!important;
  left:auto!important;
  right:auto!important;
  bottom:auto!important;
  transform:none!important;
  width:var(--explorer2-child-band-width,auto)!important;
  min-width:var(--explorer2-child-band-width,0px)!important;
  max-width:none!important;
  height:auto!important;
  min-height:0!important;
  margin-left:auto!important;
  margin-right:auto!important;
  padding-top:20px!important;
  padding-left:0!important;
  padding-right:0!important;
  gap:var(--explorer2-branch-gap,8px)!important;
  overflow:visible!important;
  z-index:auto!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout li:not(.open)>ul{
  display:none!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout li.open>ul{
  display:flex!important;
}
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout li>ul>li{
  padding-top:20px!important;
  padding-left:0!important;
  padding-right:0!important;
  margin:0!important;
}
/* Card/family luôn ở giữa đúng vùng subtree của chính nhánh. */
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout .tree-explore-wrap{
  position:relative!important;
  display:flex!important;
  justify-content:center!important;
  align-items:flex-start!important;
  width:100%!important;
  max-width:none!important;
  margin:0!important;
  left:auto!important;
  right:auto!important;
  top:auto!important;
  transform:none!important;
  overflow:visible!important;
}
/* Không cho margin âm/translate cũ làm một node tràn sang vùng của nhánh kế bên. */
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout .tree-explore-family,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout .tree-card,
.tree-canvas.tree-photo-only .explore-tree-v2.explorer2-safe-layout .tree-spouse-card{
  margin-left:0!important;
  margin-right:0!important;
}

/* ===== GiaPha v3.9.13: Cây mở từng nhánh 2 = đúng layout Explorer 1, chỉ thu gọn =====
   QUAN TRỌNG: dùng class MỚI .explore-tree-compact2 để tách hoàn toàn khỏi mọi
   thử nghiệm .explore-tree-v2 trước đây (absolute, subtree-width, packed...).
   Vì vẫn có class .family-tree + .explore-tree nên cơ chế bố cục, mở/đóng nhánh
   và line là 100% của "Cây mở từng nhánh" gốc. Chỉ giảm kích thước thẻ và
   padding ngang, do đó con/cháu sát nhau hơn nhưng không thể chồng subtree.
*/

/* Giữ nguyên normal-flow của family-tree; chỉ giảm khoảng ngang từ 8px -> 2px. */
.tree-canvas .explore-tree-compact2 li{
  padding-left:2px!important;
  padding-right:2px!important;
}
/* Không thay khoảng dọc/line của cây gốc. */
.tree-canvas .explore-tree-compact2 li:not(:only-child){
  padding-top:20px!important;
}
.tree-canvas .explore-tree-compact2 li:only-child{
  padding-top:0!important;
}

/* Gia đình (người chính + vợ/chồng) sát nhau hơn, nhưng không tác động width subtree. */
.tree-canvas .explore-tree-compact2 .tree-explore-family{
  gap:3px!important;
}
.tree-canvas .explore-tree-compact2 .tree-explore-family>.tree-spouse-cards{
  gap:3px!important;
}

/* Chế độ đầy đủ: thẻ nhỏ hơn Explorer 1 nhưng vẫn nằm trong flow cây gốc. */
.tree-canvas .explore-tree-compact2 .tree-card,
.tree-canvas .explore-tree-compact2 .tree-card.tree-spouse-card,
.tree-canvas .explore-tree-compact2 .tree-spouse-card{
  width:116px!important;
  min-width:116px!important;
  max-width:116px!important;
  min-height:96px!important;
  padding:6px!important;
}
.tree-canvas .explore-tree-compact2 .tree-card img,
.tree-canvas .explore-tree-compact2 .tree-spouse-card img{
  width:44px!important;
  height:44px!important;
}
.tree-canvas .explore-tree-compact2 .tree-card .tree-name,
.tree-canvas .explore-tree-compact2 .tree-spouse-card .tree-name{
  font-size:12px!important;
  line-height:1.12!important;
}
.tree-canvas .explore-tree-compact2 .tree-card small,
.tree-canvas .explore-tree-compact2 .tree-spouse-card small,
.tree-canvas .explore-tree-compact2 .tree-generation{
  font-size:10px!important;
}
.tree-canvas .explore-tree-compact2 .tree-card-explore .branch-hint{
  font-size:8px!important;
  margin-top:2px!important;
  padding-right:0!important;
}

/* Chỉ ảnh: icon nhỏ và sát; tuyệt đối KHÔNG đổi position/width/flex của LI/UL. */
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card.tree-spouse-card,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-spouse-card{
  width:52px!important;
  min-width:52px!important;
  max-width:52px!important;
  height:52px!important;
  min-height:52px!important;
  padding:3px!important;
  border-radius:7px!important;
  box-sizing:border-box!important;
}
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card img,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-spouse-card img,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card-explore>img{
  width:44px!important;
  height:44px!important;
  min-width:44px!important;
  max-width:44px!important;
  flex:0 0 44px!important;
  margin:0!important;
}
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-explore-family,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-explore-family>.tree-spouse-cards{
  gap:2px!important;
}
.tree-canvas.tree-photo-only .explore-tree-compact2 .branch-toggle-dot{
  right:-6px!important;
  left:auto!important;
  bottom:-8px!important;
  transform:none!important;
  width:18px!important;
  height:18px!important;
  line-height:14px!important;
}

/* Fullscreen: giữ cùng kích thước, không để rule fullscreen cũ phóng to. */
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card.tree-spouse-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-spouse-card{
  width:52px!important;
  min-width:52px!important;
  max-width:52px!important;
  height:52px!important;
  min-height:52px!important;
  padding:3px!important;
}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-spouse-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card-explore>img{
  width:44px!important;
  height:44px!important;
  flex:0 0 44px!important;
}


/* ===== GiaPha v3.9.14: Explorer 2 tidy/contour compact =====
   Giữ hình thức Cây mở từng nhánh nhưng bỏ "ô trống" do một subtree rộng.
   JS đặt từng family-unit theo contour của từng đời; CSS dưới đây chỉ tạo stage
   tuyệt đối sạch, không thay đổi kích thước thẻ đã thiết lập ở v3.9.13. */
.explore-tree-compact2.compact2-tidy-active{
  display:block!important;
  position:relative!important;
  justify-content:initial!important;
  padding:0!important;
  margin:0 auto!important;
  overflow:visible!important;
}
.explore-tree-compact2.compact2-tidy-active>li,
.explore-tree-compact2.compact2-tidy-active li{
  display:contents!important;
  position:static!important;
  padding:0!important;
  margin:0!important;
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
}
.explore-tree-compact2.compact2-tidy-active ul{
  display:none!important;
  position:static!important;
  padding:0!important;
  margin:0!important;
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
  transform:none!important;
}
.explore-tree-compact2.compact2-tidy-active li.open>ul{display:contents!important}
.explore-tree-compact2.compact2-tidy-active .tree-explore-wrap{
  position:absolute!important;
  z-index:4!important;
  margin:0!important;
  padding:0!important;
  transform:none!important;
  width:max-content!important;
}
.explore-tree-compact2.compact2-tidy-active .tree-explore-family{
  width:max-content!important;
  margin:0!important;
}
.explore-tree-compact2.compact2-tidy-active:before,
.explore-tree-compact2.compact2-tidy-active ul:before,
.explore-tree-compact2.compact2-tidy-active li:before,
.explore-tree-compact2.compact2-tidy-active li:after{
  display:none!important;
  content:none!important;
}
.explore-tree-compact2.compact2-tidy-active>.compact2-line-layer{
  position:absolute!important;
  left:0!important;
  top:0!important;
  z-index:1!important;
  overflow:visible!important;
  pointer-events:none!important;
}
.explore-tree-compact2.compact2-tidy-active>.compact2-line-layer path{
  stroke-linecap:square!important;
  stroke-linejoin:miter!important;
}

/* ===== GiaPha v3.9.15: Explorer 2 polish + guest branch manager ===== */
/* Từng nhánh 2: giãn nhẹ giữa các family-unit để nút +/- không chạm thẻ bên cạnh. */
.tree-canvas.tree-photo-only .explore-tree-compact2.compact2-tidy-active .tree-explore-family,
.tree-canvas.tree-photo-only .explore-tree-compact2.compact2-tidy-active .tree-explore-family>.tree-spouse-cards{
  gap:6px!important;
}
/* Ô bao ảnh cao hơn ảnh tròn một chút ở phía dưới, nhìn cân hơn. */
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card.tree-spouse-card,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-spouse-card{
  width:52px!important;
  min-width:52px!important;
  max-width:52px!important;
  height:58px!important;
  min-height:58px!important;
  padding:3px 3px 7px!important;
  box-sizing:border-box!important;
}
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card img,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-spouse-card img,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card-explore>img{
  width:44px!important;
  height:44px!important;
  min-width:44px!important;
  max-width:44px!important;
  flex:0 0 44px!important;
  margin:0!important;
}
/* Nút mở/đóng nhánh nhỏ hơn và chỉ nhô nhẹ ra ngoài thẻ. */
.tree-canvas .explore-tree-compact2 .branch-toggle-dot,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .branch-toggle-dot{
  width:16px!important;
  height:16px!important;
  min-width:16px!important;
  min-height:16px!important;
  right:-3px!important;
  left:auto!important;
  bottom:-5px!important;
  padding:0!important;
  font-size:10px!important;
  line-height:13px!important;
  border-width:1px!important;
  box-shadow:0 0 0 2px #fff!important;
  transform:none!important;
}
/* Nút xem huyết thống của vợ/chồng cũng thu nhỏ tương ứng. */
.tree-canvas .explore-tree-compact2 .spouse-bloodline-link,
[data-tree-fullscreen-scope].tree-app-fullscreen .explore-tree-compact2 .spouse-bloodline-link{
  width:16px!important;
  height:16px!important;
  min-width:16px!important;
  min-height:16px!important;
  right:-3px!important;
  bottom:-4px!important;
  padding:0!important;
  font-size:9px!important;
  line-height:14px!important;
  box-shadow:0 0 0 2px #fff,0 1px 3px rgba(0,0,0,.12)!important;
}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card.tree-spouse-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-spouse-card{
  height:58px!important;
  min-height:58px!important;
  padding:3px 3px 7px!important;
}
/* Nếu DOM cũ để sót card trực tiếp dưới root thì tuyệt đối không cho nó nổi ở góc canvas. */
.explore-tree-compact2.compact2-tidy-active>.tree-card,
.explore-tree-compact2.compact2-tidy-active>.tree-spouse-card{
  display:none!important;
}

/* Quản lý chi/nhánh công khai khi chủ gia phả bật chế độ cộng tác. */
.guest-branch-manager{display:grid;gap:14px}
.guest-branch-manager .guest-branch-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 12px;align-items:end}
.guest-branch-manager .guest-branch-form .full{grid-column:1/-1}
.guest-branch-list{display:grid;gap:10px}
.guest-branch-item{border:1px solid #e2d8ca;border-radius:10px;background:#fffdf9;padding:10px 12px}
.guest-branch-item summary{cursor:pointer;display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:700}
.guest-branch-item summary::marker{color:var(--theme,#8d1f1f)}
.guest-branch-depth{display:inline-block;width:calc(var(--branch-depth,0) * 18px);flex:0 0 auto}
.guest-branch-meta{font-size:12px;color:#756a5e;font-weight:400}
.guest-branch-actions{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:10px}
.guest-branch-danger{background:#7b1111!important;border-color:#7b1111!important}
@media(max-width:720px){
  .guest-branch-manager .guest-branch-form{grid-template-columns:1fr}
  .guest-branch-manager .guest-branch-form .full{grid-column:auto}
}

/* ===== GiaPha v3.9.16: spouse toggle + tooltip + compact controls ===== */
/* Nhánh nội vẫn render sẵn vợ/chồng nhưng ẩn mặc định; nút JS bật/tắt trực quan. */
.tree-canvas.tree-spouses-hidden .tree-spouse-cards,
.tree-canvas.tree-spouses-hidden .print-person-card.spouse{
  display:none!important;
}

/* Tooltip: ảnh phủ đúng chiều ngang box, giữ tỉ lệ tự nhiên; bỏ nền đen hai bên. */
.gp-person-tooltip{
  min-width:0!important;
  width:min(280px,calc(100vw - 24px))!important;
  max-width:min(280px,calc(100vw - 24px))!important;
}
.gp-person-tooltip .gp-tooltip-photo{
  display:block!important;
  width:100%!important;
  height:auto!important;
  max-height:none!important;
  object-fit:contain!important;
  background:transparent!important;
  margin:0!important;
}
.gp-person-tooltip .gp-tooltip-photo[hidden]{display:none!important}

/* Từng nhánh 2: +/- cùng cỡ nút xem huyết thống và đặt giữa đáy thẻ để không đè thẻ bên cạnh. */
.tree-canvas .explore-tree-compact2 .branch-toggle-dot,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .branch-toggle-dot,
.tree-canvas .explore-tree-compact2 .spouse-bloodline-link,
[data-tree-fullscreen-scope].tree-app-fullscreen .explore-tree-compact2 .spouse-bloodline-link{
  width:15px!important;
  height:15px!important;
  min-width:15px!important;
  min-height:15px!important;
  padding:0!important;
  font-size:9px!important;
  line-height:13px!important;
  box-sizing:border-box!important;
}
.tree-canvas .explore-tree-compact2 .branch-toggle-dot,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .branch-toggle-dot{
  left:50%!important;
  right:auto!important;
  bottom:-7px!important;
  transform:translateX(-50%)!important;
  box-shadow:0 0 0 1px #fff!important;
}
.tree-canvas .explore-tree-compact2 .spouse-bloodline-link,
[data-tree-fullscreen-scope].tree-app-fullscreen .explore-tree-compact2 .spouse-bloodline-link{
  right:-2px!important;
  bottom:-3px!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  box-shadow:0 0 0 1px #fff,0 1px 2px rgba(0,0,0,.12)!important;
}

/* Ảnh Từng nhánh 2 luôn là hình tròn thật, kể cả toàn màn hình. */
.tree-canvas .explore-tree-compact2 .tree-card img,
.tree-canvas .explore-tree-compact2 .tree-spouse-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-spouse-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card-explore>img{
  aspect-ratio:1/1!important;
  border-radius:50%!important;
  clip-path:circle(50% at 50% 50%)!important;
  object-fit:cover!important;
  display:block!important;
}
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-spouse-card img,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card-explore>img{
  width:44px!important;
  height:44px!important;
  min-width:44px!important;
  min-height:44px!important;
  max-width:44px!important;
  max-height:44px!important;
  flex:0 0 44px!important;
}
/* Thẻ Chỉ ảnh cao thêm 2px ở đáy để viền dưới không sát ảnh tròn. */
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-card.tree-spouse-card,
.tree-canvas.tree-photo-only .explore-tree-compact2 .tree-spouse-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-card.tree-spouse-card,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-photo-only .explore-tree-compact2 .tree-spouse-card{
  height:60px!important;
  min-height:60px!important;
  max-height:60px!important;
  padding:3px 3px 9px!important;
}

/* ===== GiaPha v3.9.17: đồng bộ kích thước các nút/icon trên phả đồ =====
   Lấy nút "Xem huyết thống" làm chuẩn: 15x15px.
   Áp dụng cho +/- mở nhánh, dấu † đã mất và huy hiệu liên kết vợ/chồng.
   Không tác động Phả đồ in ấn. */
.tree-canvas:not([data-tree-layout="print"]) .branch-toggle-dot,
.tree-canvas:not([data-tree-layout="print"]) .deceased-mark,
.tree-canvas:not([data-tree-layout="print"]) .spouse-bloodline-link,
.tree-canvas:not([data-tree-layout="print"]) > .tree-marriage-badge{
  width:15px!important;
  height:15px!important;
  min-width:15px!important;
  min-height:15px!important;
  max-width:15px!important;
  max-height:15px!important;
  padding:0!important;
  box-sizing:border-box!important;
  border-width:1px!important;
  border-radius:50%!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  line-height:1!important;
  vertical-align:middle!important;
}
/* +/-: cùng vòng trắng và kích thước nhìn thấy như nút huyết thống. */
.tree-canvas:not([data-tree-layout="print"]) .branch-toggle-dot{
  font-size:9px!important;
  font-weight:700!important;
  box-shadow:0 0 0 1px #fff!important;
}
/* † đã mất: bỏ viền 2px cũ để đường kính thực tế không lớn hơn các nút khác. */
.tree-canvas:not([data-tree-layout="print"]) .deceased-mark{
  font-size:10px!important;
  font-weight:700!important;
  box-shadow:0 0 0 1px #fff!important;
}
/* Huy hiệu liên kết vợ/chồng do JS đặt trên line. */
.tree-canvas:not([data-tree-layout="print"]) > .tree-marriage-badge{
  font-size:8px!important;
  font-weight:700!important;
  box-shadow:0 0 0 1px #fff!important;
}
/* Nút xem huyết thống là chuẩn 15x15; giữ màu xanh và không phóng to khi hover. */
.tree-canvas:not([data-tree-layout="print"]) .spouse-bloodline-link{
  font-size:9px!important;
  box-shadow:0 0 0 1px #fff!important;
}
.tree-canvas:not([data-tree-layout="print"]) .spouse-bloodline-link:hover,
.tree-canvas:not([data-tree-layout="print"]) .branch-toggle-dot:hover{
  transform:none!important;
}
/* Chế độ chỉ ảnh: dấu † vẫn ở góc trên trái nhưng không phóng lớn. */
.tree-canvas:not([data-tree-layout="print"]).tree-photo-only .deceased-mark,
.tree-canvas:not([data-tree-layout="print"]) .hide-tree-names .deceased-mark{
  width:15px!important;
  height:15px!important;
  min-width:15px!important;
  min-height:15px!important;
  max-width:15px!important;
  max-height:15px!important;
  left:-4px!important;
  top:-4px!important;
  font-size:10px!important;
}
/* Từng nhánh 2: giữ vị trí +/- giữa đáy thẻ, chỉ đồng bộ kích thước. */
.tree-canvas:not([data-tree-layout="print"]) .explore-tree-compact2 .branch-toggle-dot,
[data-tree-fullscreen-scope].tree-app-fullscreen .tree-canvas:not([data-tree-layout="print"]) .explore-tree-compact2 .branch-toggle-dot{
  width:15px!important;
  height:15px!important;
  min-width:15px!important;
  min-height:15px!important;
  max-width:15px!important;
  max-height:15px!important;
  left:50%!important;
  right:auto!important;
  bottom:-7px!important;
  transform:translateX(-50%)!important;
}

/* ===== GiaPha v3.9.18: chuẩn hóa kiểu xem + badge bản in + cây ngang ===== */
/* Phả đồ in ấn: nút liên kết vợ/chồng và dấu † có cùng đường kính nhỏ gọn. */
.tree-canvas[data-tree-layout="print"] .tree-marriage-badge.is-print,
.tree-canvas[data-tree-layout="print"] .print-flat-stage .print-person-card .deceased-mark{
  width:14px!important;
  height:14px!important;
  min-width:14px!important;
  min-height:14px!important;
  max-width:14px!important;
  max-height:14px!important;
  padding:0!important;
  box-sizing:border-box!important;
  border-width:1px!important;
  border-radius:50%!important;
  display:flex!important;
  align-items:center!important;
  justify-content:center!important;
  line-height:1!important;
  box-shadow:0 0 0 1px rgba(255,255,255,.95)!important;
}
.tree-canvas[data-tree-layout="print"] .tree-marriage-badge.is-print{
  font-size:8px!important;
  font-weight:700!important;
  transform:translate(-50%,-50%)!important;
}
.tree-canvas[data-tree-layout="print"] .print-flat-stage .print-person-card .deceased-mark{
  left:50%!important;
  right:auto!important;
  top:auto!important;
  bottom:-7px!important;
  transform:translateX(-50%)!important;
  font-size:9px!important;
  font-weight:700!important;
}
.tree-canvas[data-tree-layout="print"].tree-photo-only .print-flat-stage .print-person-card .deceased-mark{
  width:14px!important;
  height:14px!important;
  bottom:-7px!important;
  font-size:9px!important;
}

/* Cây ngang: avatar -> họ tên -> các thông tin khác cùng nằm trên một hàng. */
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-family-unit{
  align-items:center!important;
  gap:8px!important;
}
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-family-unit>.tree-spouse-cards{
  align-items:center!important;
  gap:8px!important;
}
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-card,
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-spouse-card{
  display:flex!important;
  flex-direction:row!important;
  align-items:center!important;
  justify-content:flex-start!important;
  gap:7px!important;
  width:auto!important;
  min-width:0!important;
  max-width:none!important;
  min-height:58px!important;
  padding:6px 9px!important;
  text-align:left!important;
  white-space:nowrap!important;
}
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-card>a,
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-spouse-card>.spouse-main-link{
  display:flex!important;
  flex-direction:row!important;
  align-items:center!important;
  gap:7px!important;
  min-width:0!important;
}
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-card img,
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-spouse-card img{
  width:44px!important;
  height:44px!important;
  min-width:44px!important;
  min-height:44px!important;
  max-width:44px!important;
  max-height:44px!important;
  border-radius:50%!important;
  object-fit:cover!important;
  flex:0 0 44px!important;
}
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-card .tree-name,
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-card small,
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-generation,
.tree-canvas[data-tree-layout="horizontal"] .h-tree .tree-union-note{
  display:inline!important;
  margin:0!important;
  writing-mode:horizontal-tb!important;
}
.tree-canvas[data-tree-layout="horizontal"].tree-photo-only .h-tree .tree-card,
.tree-canvas[data-tree-layout="horizontal"].tree-photo-only .h-tree .tree-spouse-card{
  min-height:54px!important;
}



/* ===== GiaPha v3.9.19: trang cá nhân + bản in thoáng từ đời 4 + badge nhỏ ===== */
.person-social-link{display:inline-flex;align-items:center;gap:4px;word-break:break-all}

/* Icon hôn nhân và dấu † người đã mất dùng cùng một kích thước nhỏ. */
.tree-canvas[data-tree-layout="print"] .tree-marriage-badge.is-print,
.tree-canvas[data-tree-layout="print"] .print-flat-stage .print-person-card .deceased-mark{
  width:12px!important;height:12px!important;min-width:12px!important;min-height:12px!important;
  max-width:12px!important;max-height:12px!important;padding:0!important;border-width:1px!important;
  border-radius:50%!important;line-height:1!important;box-sizing:border-box!important;
}
.tree-canvas[data-tree-layout="print"] .tree-marriage-badge.is-print{font-size:7px!important;font-weight:700!important}
.tree-canvas[data-tree-layout="print"] .print-flat-stage .print-person-card .deceased-mark{
  bottom:-6px!important;font-size:8px!important;font-weight:700!important;
}

/* Từ Đời 4 (depth 3) trở đi: không ép người sát nhau. Khoảng 8px đủ nhìn line,
   vẫn giữ toàn bộ hàng gọn hơn rất nhiều so với thẻ ngang đời đầu. */
.print-flat-row.depth-3,.print-flat-row.depth-4,.print-flat-row.depth-5,.print-flat-row.depth-6,
.print-flat-row.depth-7,.print-flat-row.depth-8,.print-flat-row.depth-9,.print-flat-row.depth-10,
.print-flat-row.depth-11,.print-flat-row.depth-12{gap:8px!important}
.print-route-family-group{display:flex!important;align-items:flex-start!important;gap:8px!important}
.print-flat-row.depth-3 .print-flat-node,.print-flat-row.depth-4 .print-flat-node,.print-flat-row.depth-5 .print-flat-node,
.print-flat-row.depth-6 .print-flat-node,.print-flat-row.depth-7 .print-flat-node,.print-flat-row.depth-8 .print-flat-node,
.print-flat-row.depth-9 .print-flat-node,.print-flat-row.depth-10 .print-flat-node,.print-flat-row.depth-11 .print-flat-node,
.print-flat-row.depth-12 .print-flat-node{padding-left:1px!important;padding-right:1px!important}

/* Line bản in mảnh hơn một chút để các nhánh nhiều đời không thành mảng trắng. */
.print-tree-board>.tree-print-line-overlay path{stroke-width:1.35!important}
