@font-face{font-family:FP-Roboto;src:url("../fonts/Roboto-Regular.ttf")}@font-face{font-family:FP-Roboto;src:url("../fonts/Roboto-Bold.ttf");font-weight:700}@font-face{font-family:FP-Roboto-Mono;src:url("../fonts/RobotoMono-Regular.ttf")}@font-face{font-family:FP-Fira;src:url("../fonts/FiraCode-Regular.ttf")}@font-face{font-family:FP-Fira-Mono;src:url("../fonts/FiraMono-Regular.ttf")}@font-face{font-family:FP-IBM-Plex;src:url("../fonts/IBMPlexSans-Regular.ttf")}@font-face{font-family:FP-IBM-Plex-Mono;src:url("../fonts/IBMPlexMono-Regular.ttf")}@font-face{font-family:FP-Noto;src:url("../fonts/NotoSans-Regular.ttf")}@font-face{font-family:FP-Noto-Mono;src:url("../fonts/NotoSansMono-Regular.ttf")}@font-face{font-family:FP-Source-Sans;src:url("../fonts/SourceSans3-Regular.ttf")}@font-face{font-family:FP-Source-Serif;src:url("../fonts/SourceSerif4-Regular.ttf")}@font-face{font-family:FP-Source-Mono;src:url("../fonts/SourceCodePro-Regular.ttf")}@font-face{font-family:FP-Space;src:url("../fonts/SpaceGrotesk-Regular.ttf")}@font-face{font-family:FP-Space-Mono;src:url("../fonts/SpaceMono-Regular.ttf")}@font-face{font-family:FP-Share-Tech;src:url("../fonts/ShareTech-Regular.ttf")}@font-face{font-family:FP-Share-Tech-Mono;src:url("../fonts/ShareTechMono-Regular.ttf")}@font-face{font-family:FP-Ubuntu;src:url("../fonts/Ubuntu-Regular.ttf")}@font-face{font-family:FP-Ubuntu-Mono;src:url("../fonts/UbuntuMono-Regular.ttf")}@font-face{font-family:FP-Ubuntu-Sans;src:url("../fonts/UbuntuSans-Regular.ttf")}@font-face{font-family:FP-Ubuntu-Sans-Mono;src:url("../fonts/UbuntuSansMono-Regular.ttf")}
:root{--fp-navy:#17253f;--fp-red:#c91e2e;--fp-blue:#1663d8;--fp-border:#dce4ef;--fp-muted:#64748b;--fp-success:#087443;--fp-danger:#b42318}.fp-page{background:#edf2f8;color:var(--fp-navy)}.fp-page *{box-sizing:border-box}.fp-modal-open{overflow:hidden}.fp-topbar{position:relative;z-index:30}.fp-app button,.fp-app input,.fp-app select,.fp-app textarea{font:inherit}.fp-app .eyebrow{color:var(--fp-red);font-size:11px;font-weight:850;letter-spacing:.12em;text-transform:uppercase}
.fp-intro{padding:48px 0;background:linear-gradient(135deg,#132039,#233c64 68%,#315a91);color:#fff}.fp-intro-grid{display:grid;grid-template-columns:1.4fr .6fr;align-items:center;gap:38px}.fp-intro h1{max-width:760px;margin:15px 0 12px;color:#fff;font-size:clamp(34px,5vw,62px);line-height:1.03;letter-spacing:-.04em}.fp-intro p{max-width:760px;margin:0;color:#ffffffca;font-size:18px;line-height:1.65}.fp-intro .badge{border:1px solid #ffffff29;background:#ffffff14;color:#fff}.fp-intro-points{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.fp-intro-points span{padding:16px 8px;border:1px solid #ffffff29;border-radius:17px;background:#ffffff12;text-align:center;color:#ffffffbd;font-size:11px}.fp-intro-points strong{display:block;margin-bottom:6px;color:#fff;font-size:25px}
.fp-sticky-tools{position:sticky;z-index:25;top:0;border-bottom:1px solid var(--fp-border);background:#fffffff2;backdrop-filter:blur(14px)}.fp-main-toolbar{min-height:68px;display:flex;align-items:center;gap:11px;flex-wrap:wrap;padding-top:9px;padding-bottom:9px}.fp-inline-field{display:flex;align-items:center;gap:7px;color:var(--fp-muted);font-size:12px;font-weight:800}.fp-inline-field select{min-width:90px;padding:8px;border:1px solid #cbd6e4;border-radius:9px;background:#fff}.fp-privacy-note{margin-left:auto;color:var(--fp-muted);font-size:12px}.fp-user-loading{padding:8px 11px;border-radius:999px;background:#fff3ce;color:#815500;font-size:12px;font-weight:800}.fp-mobile-switch{display:none;margin-top:15px}.fp-mobile-switch button{flex:1;padding:11px;border:1px solid var(--fp-border);background:#fff;font-weight:800}.fp-mobile-switch button:first-child{border-radius:12px 0 0 12px}.fp-mobile-switch button:last-child{border-radius:0 12px 12px 0}.fp-mobile-switch button.is-active{border-color:var(--fp-navy);background:var(--fp-navy);color:#fff}
.fp-workspace{max-width:1680px;display:grid;grid-template-columns:minmax(0,1.08fr) minmax(440px,.92fr);align-items:start;gap:22px;padding-top:24px;padding-bottom:70px}.fp-editor-panel,.fp-preview-panel{min-width:0;overflow:hidden;border:1px solid var(--fp-border);border-radius:24px;background:#fff;box-shadow:0 18px 50px #1e2f4e14}.fp-panel-heading{display:flex;align-items:end;justify-content:space-between;gap:20px;padding:21px 23px;border-bottom:1px solid var(--fp-border)}.fp-panel-heading h2{margin:4px 0 0;font-size:23px}.fp-panel-heading p{max-width:330px;margin:0;color:var(--fp-muted);font-size:13px;text-align:right}
.fp-editor-scroll{overflow-x:auto;background:linear-gradient(#f8fafc,#f2f6fb)}.fp-editor-tree{min-width:820px;height:620px;display:flex;gap:13px;padding:20px}.fp-editor-generation{--count:1;position:relative;min-width:135px;flex:1;display:grid;grid-template-rows:repeat(var(--count),1fr);gap:5px}.fp-editor-generation[data-generation="2"]{--count:2}.fp-editor-generation[data-generation="3"]{--count:4}.fp-editor-generation[data-generation="4"]{--count:8}.fp-editor-generation[data-generation="5"]{--count:16}.fp-editor-generation:not(:first-child):before{content:"";position:absolute;left:-7px;top:3%;bottom:3%;border-left:1px dashed #c6d2df}.fp-editor-node{position:relative;min-height:0;overflow:hidden;width:100%;padding:5px 8px 5px 24px;border:1px solid #bdcbdc;border-radius:8px;background:var(--fp-editor-node-fill,#fff);color:var(--fp-navy);text-align:left;cursor:pointer}.fp-editor-node:hover{z-index:2;border-color:var(--fp-blue);box-shadow:0 5px 15px #1663d826}.fp-editor-node.is-selected{z-index:3;border-color:var(--fp-red);box-shadow:0 0 0 3px #c91e2e24}.fp-editor-node.is-invalid{border-color:var(--fp-danger);background:#fff2f0}.fp-editor-node strong,.fp-editor-node small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fp-editor-node strong{color:#8d111c;font:700 10px/1.2 FP-Roboto-Mono,monospace}.fp-editor-node small{margin-top:2px;color:var(--fp-muted);font-size:8px}.fp-editor-node.is-empty strong{color:#9aa7b8;font-style:italic}.fp-node-index{position:absolute;left:4px;top:4px;min-width:15px;height:15px;display:grid;place-items:center;border-radius:4px;background:#e7edf5;color:#526176;font-size:8px}.fp-node-gender{position:absolute;right:4px;top:3px;color:var(--fp-blue);font-size:9px}
.fp-node-editor{padding:21px 23px 24px;border-top:1px solid var(--fp-border)}.fp-node-editor>header{display:flex;justify-content:space-between;align-items:start;gap:18px;margin-bottom:16px}.fp-node-editor h3{margin:0;font-size:19px}.fp-node-editor header p{margin:3px 0;color:var(--fp-muted);font-size:12px}.fp-selection-chip{padding:6px 9px;border-radius:999px;background:#eef4ff;color:#2356a1;font-size:10px;font-weight:850}.fp-field{display:grid;gap:5px;margin-bottom:12px;color:#46556a;font-size:12px;font-weight:800}.fp-form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:0 12px}.fp-field input,.fp-field select,.fp-field textarea,.fp-controls-grid input,.fp-controls-grid select{width:100%;min-height:40px;padding:8px 10px;border:1px solid #cbd6e4;border-radius:9px;background:#fff;color:var(--fp-navy)}.fp-field input:disabled,.fp-field textarea:disabled{background:#f1f4f8}.fp-field input[type="color"]{padding:3px}.fp-ring-field small{min-height:16px;color:var(--fp-danger);font-weight:600}.fp-ring-field small[data-valid="true"]{color:var(--fp-success)}.fp-node-actions,.fp-export-actions{display:flex;gap:9px;flex-wrap:wrap}
.fp-preview-panel{position:sticky;top:91px}.fp-preview-toolbox{border-bottom:1px solid var(--fp-border);background:#f8fafc}.fp-preview-toolbox summary{padding:14px 21px;cursor:pointer;font-weight:850}.fp-controls-grid{max-height:265px;overflow-y:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:2px 20px 18px}.fp-controls-grid>label{min-width:0;display:grid;gap:4px;color:#536176;font-size:10px;font-weight:800}.fp-controls-grid input,.fp-controls-grid select{min-height:34px;padding:5px 7px;font-size:11px}.fp-controls-grid input[type="color"]{padding:2px}.fp-controls-grid input[type="range"]{padding:0}.fp-controls-grid .fp-check{display:flex;align-items:center;gap:6px;padding:6px 8px;border:1px solid #d7e0eb;border-radius:8px;background:#fff}.fp-controls-grid .fp-check input{width:15px;min-height:15px}.fp-paper-viewport{padding:18px;overflow:auto;background:#dce3eb}
.fp-paper{--fp-paper-font:FP-Roboto-Mono;--fp-paper-mono:FP-Roboto-Mono;position:relative;min-width:540px;width:100%;aspect-ratio:210/297;display:grid;grid-template-rows:9.5% 1fr 5.5%;overflow:hidden;background:#fff;color:#111;font-family:var(--fp-paper-font),monospace;box-shadow:0 9px 30px #14223733}.fp-paper-header{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:1.8% 2.2%;border-bottom:2px solid var(--fp-title-color)}.fp-paper-identity{min-width:0;display:flex;align-items:center;gap:9px}.fp-paper-logo{width:42px;height:42px;object-fit:contain}.fp-paper-identity div,.fp-paper-title{display:grid}.fp-paper-identity strong{color:var(--fp-title-color);font-size:13px}.fp-paper-identity span{max-width:300px;overflow:hidden;color:#596579;font-size:7px;text-overflow:ellipsis;white-space:nowrap}.fp-paper-title{text-align:right}.fp-paper-title span{color:var(--fp-title-color);font-size:10px;font-weight:800;text-transform:uppercase}.fp-paper-title strong{color:var(--fp-ring-color);font:700 11px var(--fp-paper-mono),monospace}.fp-paper-body{min-height:0;display:flex;gap:6px;padding:1.5% 1.7%}.fp-paper-photo{width:12%;margin:0;align-self:center}.fp-paper-photo img{width:100%;max-height:150px;object-fit:contain;border:1px solid var(--fp-line-color);border-radius:var(--fp-node-radius)}.fp-paper-generations{min-width:0;flex:1;display:flex;gap:.8%}.fp-paper-generation{min-width:0;flex:1;display:grid;gap:3px}.fp-paper-generation[data-generation="1"]{grid-template-rows:repeat(1,1fr)}.fp-paper-generation[data-generation="2"]{grid-template-rows:repeat(2,1fr)}.fp-paper-generation[data-generation="3"]{grid-template-rows:repeat(4,1fr)}.fp-paper-generation[data-generation="4"]{grid-template-rows:repeat(8,1fr)}.fp-paper-generation[data-generation="5"]{grid-template-rows:repeat(16,1fr)}.fp-paper-node{position:relative;min-height:0;overflow:hidden;padding:4px 3px 3px 10px;border:1px solid var(--fp-line-color);border-radius:var(--fp-node-radius);background:var(--fp-node-fill,#fff)}.fp-paper-node.has-shadow{box-shadow:1px 2px 3px #17253f30}.fp-paper-node.is-empty{opacity:.62}.fp-paper-node.has-separator .fp-paper-ring{padding-bottom:1px;border-bottom:1px solid #17253f55}.fp-paper-gender{position:absolute;left:2px;top:2px;font-size:6px}.fp-paper-gender.is-male{color:#0b60cf}.fp-paper-gender.is-female{color:#c91e2e}.fp-paper-node strong,.fp-paper-node span,.fp-paper-node p{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.fp-paper-ring{color:var(--fp-ring-color);font:700 7px var(--fp-paper-mono),monospace}.fp-paper-name{margin-top:2px;color:var(--fp-name-color);font-size:6px;font-weight:700}.fp-paper-fancier{color:var(--fp-fancier-color);font-size:5.4px}.fp-paper-color{color:var(--fp-pigeon-color);font-size:5.2px}.fp-paper-details{margin:2px 0 0;font-size:4.6px;white-space:normal!important}.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-name,.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-fancier,.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-color,.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-details{display:none}.fp-paper-footer{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;padding:0 2.2%;border-top:1px solid var(--fp-line-color);color:#586477;font-size:7px}.fp-paper-footer strong{color:var(--fp-title-color)}.fp-paper-qr{justify-self:end;width:34px;height:34px}.fp-paper-qr img,.fp-paper-qr canvas{width:100%!important;height:100%!important}.fp-export-actions{padding:15px 19px 20px;border-top:1px solid var(--fp-border)}
.fp-status{position:fixed;z-index:90;left:50%;bottom:24px;width:min(620px,calc(100% - 30px));transform:translateX(-50%);padding:13px 17px;border-radius:12px;background:var(--fp-navy);color:#fff;box-shadow:0 14px 45px #0c192e47;text-align:center;font-weight:750}.fp-status[data-type="success"]{background:var(--fp-success)}.fp-status[data-type="error"]{background:var(--fp-danger)}.fp-app.is-busy:after{content:"";position:fixed;z-index:89;inset:0;cursor:wait}
.fp-modal[hidden]{display:none}.fp-modal{position:fixed;z-index:100;inset:0;display:grid;place-items:center;padding:20px}.fp-modal-backdrop{position:absolute;inset:0;width:100%;border:0;background:#0a1425c7;backdrop-filter:blur(5px)}.fp-scan-dialog{position:relative;width:min(1380px,100%);max-height:calc(100vh - 40px);display:grid;grid-template-rows:auto auto minmax(0,1fr) auto;overflow:hidden;border-radius:22px;background:#fff;box-shadow:0 30px 90px #00000059}.fp-scan-dialog>header,.fp-scan-dialog>footer{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:17px 22px;border-bottom:1px solid var(--fp-border)}.fp-scan-dialog>header h2{margin:3px 0;font-size:22px}.fp-scan-dialog>header p{margin:0;color:var(--fp-muted);font-size:12px}.fp-modal-close{width:39px;height:39px;border:1px solid var(--fp-border);border-radius:50%;background:#fff;font-size:26px}.fp-scan-toolbar{display:flex;align-items:center;gap:9px;flex-wrap:wrap;padding:10px 22px;border-bottom:1px solid var(--fp-border);background:#f8fafc}.fp-scan-toolbar span{margin-left:auto;color:var(--fp-muted);font-size:11px}.fp-scan-empty{min-height:380px;display:grid;place-content:center;padding:38px;color:var(--fp-muted);text-align:center}.fp-scan-empty strong{color:var(--fp-navy);font-size:20px}.fp-scan-stage{position:relative;min-height:0;overflow:auto;padding:18px;background:#27344a}.fp-scan-stage canvas{display:block;max-width:100%;height:auto;margin:auto;box-shadow:0 4px 22px #0005}#fp-scan-overlay{position:absolute;pointer-events:none}.fp-scan-box{position:absolute;border:2px solid #ff344a;background:#ff293f15;box-shadow:0 0 0 1px #fff;cursor:move;touch-action:none;pointer-events:auto}.fp-scan-box.is-selected{border-color:#12ddff;background:#12ddff1f}.fp-scan-box>span{position:absolute;left:-2px;top:-18px;min-width:20px;height:17px;display:grid;place-items:center;border-radius:4px 4px 0 0;background:#ff344a;color:#fff;font-size:9px}.fp-scan-resize{position:absolute;right:-7px;bottom:-7px;width:14px;height:14px;padding:0;border:2px solid #fff;border-radius:50%;background:#ff344a;cursor:nwse-resize}.fp-scan-dialog>footer{border-top:1px solid var(--fp-border);border-bottom:0}.fp-scan-dialog>footer small{color:var(--fp-muted)}
@media(max-width:1180px){.fp-intro-grid{grid-template-columns:1fr}.fp-intro-points{max-width:620px}.fp-workspace{grid-template-columns:1fr}.fp-preview-panel{position:static}.fp-paper{max-width:780px;margin:auto}}@media(max-width:780px){.fp-topbar .links{display:none}.fp-intro{padding:34px 0}.fp-intro-grid{gap:24px}.fp-main-toolbar{flex-wrap:nowrap;overflow-x:auto}.fp-privacy-note{display:none}.fp-mobile-switch{display:flex}.fp-workspace{padding-top:13px}.fp-app[data-mobile-panel="editor"] [data-panel="preview"],.fp-app:not([data-mobile-panel]) [data-panel="preview"]{display:none}.fp-app[data-mobile-panel="preview"] [data-panel="editor"]{display:none}.fp-panel-heading{display:block;padding:17px}.fp-panel-heading p{margin-top:7px;text-align:left}.fp-editor-tree{height:540px;padding:13px}.fp-node-editor{padding:17px}.fp-form-grid{grid-template-columns:1fr}.fp-controls-grid{grid-template-columns:repeat(2,1fr);padding:2px 14px 15px}.fp-paper-viewport{padding:9px}.fp-paper{min-width:620px}.fp-modal{padding:8px}.fp-scan-dialog{max-height:calc(100vh - 16px)}.fp-scan-toolbar span{width:100%;margin:0}.fp-scan-dialog>footer{align-items:stretch;flex-direction:column}}
@media print{body *{visibility:hidden!important}#fp-paper,#fp-paper *{visibility:visible!important}#fp-paper{position:fixed;inset:0;width:210mm;height:297mm;min-width:0;box-shadow:none}@page{size:A4 portrait;margin:0}}

/* Fast Pedigree inline editor */
.fp-editor-scroll{max-height:780px;overflow:auto;background:linear-gradient(#f8fafc,#f2f6fb)}
.fp-editor-tree{min-width:1080px;display:flex;gap:12px;padding:0 16px;transition:height .18s ease}
.fp-editor-generation{position:relative;min-width:200px;display:block!important;flex:1;gap:0}
.fp-editor-generation:not(:first-child):before{left:-7px;top:12px;bottom:12px}
.fp-editor-node{position:absolute;left:0;width:100%;min-height:132px;display:flex;flex-direction:column;gap:2px;overflow:hidden;padding:5px 6px;border:1px solid #bdcbdc;border-radius:8px;background:var(--fp-editor-node-fill,#fff);color:var(--fp-navy);text-align:left;transition:height .18s ease,border-color .15s ease,box-shadow .15s ease}
.fp-editor-node:hover{z-index:2;border-color:var(--fp-blue);box-shadow:0 5px 15px #1663d826}
.fp-editor-node.is-selected{z-index:3;border-color:var(--fp-red);box-shadow:0 0 0 3px #c91e2e24}
.fp-editor-node.is-invalid{border-color:var(--fp-danger);box-shadow:inset 0 0 0 1px var(--fp-danger)}
.fp-editor-node-meta{height:17px;display:flex;align-items:center;gap:5px;padding:0 2px;color:#526176;font-size:8px}
.fp-editor-node-meta strong{min-width:0;flex:1;overflow:hidden;color:#526176;font-size:8px;text-overflow:ellipsis;white-space:nowrap}
.fp-editor-node .fp-node-index{position:static;flex:0 0 auto;min-width:15px;height:15px}
.fp-editor-node .fp-node-gender{position:static;flex:0 0 auto;color:var(--fp-blue);font-size:10px}
.fp-node-line{min-width:0;height:18px;display:grid;grid-template-columns:14px minmax(0,1fr);align-items:center;gap:2px;margin:0;color:#64748b;font-size:8px;font-weight:800}
.fp-node-line>span{text-align:right}
.fp-node-line input,.fp-node-line textarea{width:100%;min-width:0;height:18px;min-height:0;padding:1px 3px;border:0;border-bottom:1px solid #8391a433;border-radius:0;outline:0;background:#ffffff9e;color:var(--fp-navy);font-size:9px;line-height:14px}
.fp-node-line input:focus,.fp-node-line textarea:focus{border-bottom-color:var(--fp-blue);background:#fff;box-shadow:0 1px 0 var(--fp-blue)}
.fp-node-line input::placeholder,.fp-node-line textarea::placeholder{color:#8a98aa;font-style:italic;opacity:.9}
.fp-node-line:first-of-type input{color:#8d111c;font-family:FP-Roboto-Mono,monospace;font-weight:700}
.fp-node-details{height:auto;min-height:28px;flex:1;align-items:stretch}
.fp-node-details>span{padding-top:4px}
.fp-node-details textarea{height:100%;min-height:26px;resize:none;white-space:pre-wrap}
.fp-editor-node.is-empty:not(.is-selected) .fp-node-line:not(:first-of-type){opacity:.78}
.fp-node-editor{padding:15px 20px 17px;border-top:1px solid var(--fp-border);background:#fbfcfe}
.fp-node-editor>header,.fp-node-editor form,.fp-node-editor h3,.fp-node-editor p,.fp-selection-chip{display:none}
.fp-node-toolbar{display:grid;grid-template-columns:minmax(180px,.7fr) minmax(260px,1.4fr) minmax(180px,.7fr);align-items:end;gap:12px}
.fp-node-toolbar .fp-field{margin:0}
.fp-node-toolbar .fp-field input,.fp-node-toolbar .fp-field select{min-height:42px}
.fp-node-toolbar .fp-color-control input{padding:3px}
.fp-node-toolbar .btn{width:100%;min-height:42px}
.fp-paper-generation[data-generation="1"],.fp-paper-generation[data-generation="2"]{display:flex;flex-direction:column;justify-content:space-around;gap:3px}
.fp-paper-generation[data-generation="1"] .fp-paper-node{height:var(--fp-root-node-height,23.5%);flex:none}
.fp-paper-generation[data-generation="2"] .fp-paper-node{height:var(--fp-parent-node-height,23.5%);flex:none}
.fp-paper.has-node-shadow .fp-paper-node{box-shadow:0 2px 6px #17253f59}
.fp-paper:not(.has-node-shadow) .fp-paper-node{box-shadow:none}
@media(max-width:780px){.fp-editor-scroll{max-height:680px}.fp-editor-tree{min-width:1040px;padding:0 12px}.fp-editor-generation{min-width:190px}.fp-node-toolbar{grid-template-columns:1fr}.fp-node-toolbar .fp-field,.fp-node-toolbar .btn{width:100%}}

/* Proportional pedigree geometry and display zooms */
.fp-panel-side{display:grid;justify-items:end;gap:8px}
.fp-panel-side p{max-width:330px;margin:0;color:var(--fp-muted);font-size:13px;text-align:right}
.fp-zoom-controls{display:inline-flex;align-items:center;gap:2px;padding:2px;border:1px solid #d5deea;border-radius:9px;background:#f8fafc}
.fp-zoom-controls button{width:30px;height:28px;padding:0;border:0;border-radius:7px;background:#fff;color:var(--fp-navy);font-size:18px;font-weight:800;cursor:pointer}
.fp-zoom-controls button:hover{background:#e9f1fb;color:var(--fp-blue)}
.fp-zoom-controls output{min-width:47px;color:#526176;font-size:10px;font-weight:850;text-align:center}
.fp-editor-tree{transform-origin:top left}
.fp-editor-tree,.fp-editor-tree input,.fp-editor-tree textarea,.fp-editor-tree select{font-family:FP-Roboto-Mono,monospace}
.fp-editor-node{min-height:0}
.fp-editor-generation[data-generation="5"] .fp-editor-node{gap:0;padding:2px 4px}
.fp-editor-generation[data-generation="5"] .fp-editor-node-meta{height:12px;font-size:7px}
.fp-editor-generation[data-generation="5"] .fp-editor-node-meta strong{font-size:7px}
.fp-editor-generation[data-generation="5"] .fp-editor-node .fp-node-index{min-width:12px;height:11px;font-size:6px}
.fp-editor-generation[data-generation="5"] .fp-editor-node .fp-node-gender{font-size:8px}
.fp-editor-generation[data-generation="5"] .fp-node-line{height:13px;grid-template-columns:11px minmax(0,1fr);gap:1px;font-size:6px}
.fp-editor-generation[data-generation="5"] .fp-node-line input,.fp-editor-generation[data-generation="5"] .fp-node-line textarea{height:13px;padding:0 2px;font-size:7px;line-height:11px}
.fp-editor-generation[data-generation="5"] .fp-node-details{height:auto;min-height:16px;flex:1}
.fp-editor-generation[data-generation="5"] .fp-node-details textarea{height:100%;min-height:14px}
.fp-node-toolbar{display:flex;grid-template-columns:none;align-items:end;gap:10px;flex-wrap:wrap}
.fp-node-toolbar .fp-field{width:210px;flex:0 1 210px}
.fp-node-toolbar .fp-color-control{width:190px;flex-basis:190px}
.fp-node-toolbar .btn{width:auto;min-width:0;min-height:42px;padding:9px 16px;flex:0 0 auto}
.fp-paper-stage{position:relative;width:100%;min-width:540px;aspect-ratio:210/297;margin:0 auto}
.fp-paper-stage .fp-paper{position:absolute;left:0;top:0;width:100%;min-width:540px;transform-origin:top left}
.fp-paper-details{white-space:pre-wrap!important}
.fp-paper-gender{left:auto;right:2px;top:2px}
.fp-paper-node{padding:4px 10px 3px 3px}
.fp-paper.has-node-shadow .fp-paper-node{box-shadow:2px 2px 0 var(--fp-line-color)}
.fp-paper:not(.has-node-shadow) .fp-paper-node{box-shadow:none}
@media(max-width:780px){.fp-panel-heading .fp-panel-side{justify-items:start;margin-top:8px}.fp-panel-side p{text-align:left}.fp-node-toolbar{display:flex}.fp-node-toolbar .fp-field{width:min(210px,100%);flex-basis:210px}.fp-node-toolbar .btn{width:auto}.fp-paper-stage{min-width:540px}}

/* Final editor safeguards and ring alignment control */
.fp-node-toolbar{gap:7px}
.fp-node-toolbar .fp-field{width:180px;flex-basis:180px}
.fp-node-toolbar .fp-color-control{width:160px;flex-basis:160px}
.fp-node-toolbar .btn{min-height:34px;padding:6px 10px;font-size:11px}
.fp-paper-ring{text-align:center}
@media(max-width:780px){.fp-node-toolbar .fp-field{width:170px;flex-basis:170px}.fp-node-toolbar .fp-color-control{width:145px;flex-basis:145px}.fp-node-toolbar .btn{width:auto;min-height:34px;padding:6px 9px}}

/* Definite preview height so adaptive percentages are effective */
.fp-paper-body,.fp-paper-generations,.fp-paper-generation{height:100%}
.fp-paper-generations{align-self:stretch;align-items:stretch}
.fp-paper-generation[data-generation="1"] .fp-paper-node{height:auto;flex:0 0 var(--fp-root-node-height,23.5%)}
.fp-paper-generation[data-generation="2"] .fp-paper-node{height:auto;flex:0 0 var(--fp-parent-node-height,23.5%)}

/* Same readable type hierarchy as the site's established pedigree preview. */
.fp-paper-node{padding:3px 5px 3px 4px}
.fp-paper-gender{top:2px;right:4px;font-size:13px;font-weight:900;line-height:1}
.fp-paper-ring{padding-right:12px;font-size:10px;line-height:1.25}
.fp-paper-name{margin-top:1px;font-size:9px;line-height:1.2}
.fp-paper-fancier,.fp-paper-color{font-size:8px;line-height:1.18}
.fp-paper-details{margin-top:2px;font-size:7px;line-height:1.15;overflow-wrap:anywhere}
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-name:not(:empty),
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-fancier:not(:empty),
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-color:not(:empty),
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"] .fp-paper-details:not(:empty){display:block}

/* Give pedigree columns more width and scale text with the visible depth. */
.fp-paper-body{padding:1.2% .6%}
.fp-paper{--fp-case-ring-size:13.66px;--fp-case-name-size:12.42px;--fp-case-meta-size:10.8px;--fp-case-details-size:9.31px;--fp-case-gender-size:17.39px}
.fp-paper[data-level="1"]{--fp-case-ring-size:18.63px;--fp-case-name-size:16.15px;--fp-case-meta-size:14.9px;--fp-case-details-size:12.42px;--fp-case-gender-size:22.36px}
.fp-paper[data-level="2"]{--fp-case-ring-size:16.15px;--fp-case-name-size:14.9px;--fp-case-meta-size:13.41px;--fp-case-details-size:11.43px;--fp-case-gender-size:19.87px}
.fp-paper[data-level="3"]{--fp-case-ring-size:14.9px;--fp-case-name-size:13.66px;--fp-case-meta-size:12.17px;--fp-case-details-size:10.68px;--fp-case-gender-size:18.63px}
.fp-paper[data-level="5"]{--fp-case-ring-size:10.8px;--fp-case-name-size:9.44px;--fp-case-meta-size:8.08px;--fp-case-details-size:7.32px;--fp-case-gender-size:13.66px}
.fp-paper-gender{font-size:var(--fp-case-gender-size)}
.fp-paper-ring{font-size:var(--fp-case-ring-size)}
.fp-paper-name{font-size:var(--fp-case-name-size)}
.fp-paper-fancier,.fp-paper-color{font-size:var(--fp-case-meta-size)}
.fp-paper-details{font-size:var(--fp-case-details-size)}
.fp-paper-ring,.fp-paper-name,.fp-paper-fancier,.fp-paper-color{white-space:nowrap!important}

/* Scan feedback, source zoom and manual-review markers. */
.fp-scan-dialog{grid-template-rows:auto auto auto minmax(0,1fr) auto}
.fp-scan-stage canvas{max-width:none}
.fp-scan-progress{position:relative;min-height:42px;padding:11px 48px 11px 22px;border-bottom:1px solid #d5deea;background:#eef5ff;color:#17456e;font-size:13px;font-weight:800}
.fp-scan-progress[hidden]{display:none}
.fp-scan-progress[data-type="success"]{background:#e9f7ed;color:#08622e}
.fp-scan-progress[data-type="error"]{background:#fff0f0;color:#a01e27}
.fp-scan-progress.is-busy:after{content:"";position:absolute;right:22px;top:50%;width:17px;height:17px;margin-top:-10px;border:3px solid currentColor;border-right-color:transparent;border-radius:50%;animation:fp-scan-spin .75s linear infinite}
.fp-editor-node.is-scan-missing:not(.is-invalid){border:2px dashed #dc8700;background:linear-gradient(#fff8e8,#fff3cf)}
.fp-editor-node.is-scan-missing .fp-node-index{background:#dc8700;color:#fff}
@keyframes fp-scan-spin{to{transform:rotate(360deg)}}

/* Visible deployment diagnostic while the Fast Pedigree module is loading. */
.fp-module-placeholder{opacity:0;min-height:150px;display:grid;align-content:center;justify-items:center;gap:7px;padding:24px;color:#526176;text-align:center;animation:fp-module-placeholder-show 0s 1.5s forwards}
.fp-module-placeholder strong{color:var(--fp-navy);font-size:15px}
.fp-module-placeholder small{max-width:430px;font-size:11px}
.fp-editor-tree>.fp-module-placeholder{flex:1 0 100%}
.fp-paper>.fp-module-placeholder{grid-row:1/-1;min-height:100%}
@keyframes fp-module-placeholder-show{to{opacity:1}}

/* Existing-pigeon lookup aligned with the Flutter/Python end-of-ring flow. */
.fp-editor-node.is-checking-existing{border-color:#d59a20;box-shadow:0 0 0 3px #d59a2029}
.fp-editor-node.is-checking-existing:after{content:"";position:absolute;right:5px;bottom:5px;width:11px;height:11px;border:2px solid #b87800;border-right-color:transparent;border-radius:50%;animation:fp-scan-spin .75s linear infinite}
.fp-existing-confirm{position:fixed;z-index:130;inset:0;display:grid;place-items:center;padding:18px}
.fp-existing-dialog{position:relative;width:min(520px,100%);padding:24px;border:1px solid #d8e0eb;border-radius:20px;background:#fff;color:var(--fp-navy);box-shadow:0 28px 90px #0006}
.fp-existing-dialog h2{margin:4px 0 10px;font-size:22px}
.fp-existing-dialog p{margin:8px 0;color:var(--fp-muted)}
.fp-existing-dialog dl{display:grid;gap:7px;margin:16px 0;padding:12px 14px;border-radius:12px;background:#f4f7fb}
.fp-existing-dialog dl div{display:grid;grid-template-columns:110px minmax(0,1fr);gap:10px}
.fp-existing-dialog dt{color:var(--fp-muted);font-size:12px;font-weight:800}
.fp-existing-dialog dd{margin:0;overflow-wrap:anywhere;font-weight:850}
.fp-existing-warning{padding:11px 13px;border-left:4px solid #d59a20;background:#fff7e6;color:#6e4a00!important;font-size:13px}
.fp-existing-actions{display:flex;justify-content:flex-end;gap:9px;margin-top:20px}
@media(max-width:560px){.fp-existing-dialog{padding:19px}.fp-existing-dialog dl div{grid-template-columns:1fr;gap:1px}.fp-existing-actions{display:grid;grid-template-columns:1fr 1fr}.fp-existing-actions .btn{width:100%;padding-inline:10px}}

/* Identical compact Preview spacing in visitor and member pages. */
.fp-paper-body{gap:2px;padding:1.2% .6% 1.2% .2%}
.fp-paper-generations,.fp-paper-generation:first-child{margin-left:0}
.fp-paper-node{padding-left:2px}
.fp-paper-photo{width:9%;flex:0 0 9%;margin-left:0}

/* Five-generation preview: parents start a quarter of the way across the central box. */
.fp-paper[data-level="5"]{--fp-case-ring-size:11.92px;--fp-case-name-size:10.43px;--fp-case-meta-size:8.94px;--fp-case-details-size:8.08px;--fp-case-gender-size:14.9px}
.fp-paper[data-level="5"] .fp-paper-generations{position:relative;display:block;--fp-column-width:calc((100% - 12px)/4.25)}
.fp-paper[data-level="5"] .fp-paper-generation{position:absolute;top:0;width:var(--fp-column-width)}
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="1"]{left:0}
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="2"]{left:calc(var(--fp-column-width)/4);display:grid;grid-template-columns:minmax(0,1fr);justify-content:normal;grid-template-rows:minmax(0,1fr) var(--fp-root-node-height) minmax(0,1fr);gap:6px;align-items:end}
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="2"] .fp-paper-node:last-child{grid-row:3;align-self:start}
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="3"]{left:calc(var(--fp-column-width)*1.25 + 4px)}
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="4"]{left:calc(var(--fp-column-width)*2.25 + 8px)}
.fp-paper[data-level="5"] .fp-paper-generation[data-generation="5"]{left:calc(var(--fp-column-width)*3.25 + 12px)}
/* Anchor the sheet at the left, including when zoom or adaptive heights change. */
.fp-paper-body{padding-left:0}
.fp-paper-viewport{padding-left:4px}
.fp-paper-stage,.fp-paper{margin-left:0}
/* A photo uses a small fixed gutter rather than a percentage of the sheet. */
.fp-paper-photo{width:28px;flex:0 0 28px}

/* Loft name and two contact lines, alongside a more readable heading. */
.fp-paper-identity{flex:1;min-width:0}
.fp-paper-identity div{min-width:0;gap:2px}
.fp-paper-identity span{max-width:none;font-size:8px;line-height:1.2;white-space:normal;overflow-wrap:anywhere;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:1}
.fp-paper-title{flex:0 1 43%;min-width:0}
.fp-paper-title span{font-size:14px;line-height:1.15}
.fp-paper-title strong{font-size:15px;line-height:1.2;overflow-wrap:anywhere}
