.phone{position:relative;display:flex;align-items:stretch;width:100%;min-width:0}.phone .phone-cc{display:flex;align-items:center;gap:4px;flex-shrink:0;padding:0 .5rem 0 .6rem;border:1.5px solid var(--line);border-right:none;border-radius:var(--r-sm) 0 0 var(--r-sm);background:var(--tint-surface, #fff);font-family:inherit;font-size:.9rem;color:var(--ink-800, var(--ink-900));cursor:pointer;transition:border-color .15s,background .12s}.phone .phone-cc:hover:not(:disabled){background:var(--line-soft)}.phone-cc-flag{font-size:1.05rem;line-height:1}.phone-cc-dial{font-weight:600;font-size:.86rem}.phone-cc-caret{font-size:.6rem;color:var(--ink-400);margin-left:1px}.phone .phone-num{flex:1 1 auto;min-width:0;width:100%;box-sizing:border-box;padding:.6rem .75rem;border:1.5px solid var(--line);border-radius:0 var(--r-sm) var(--r-sm) 0;font-size:.9rem;font-family:inherit;outline:none;background:#fff;transition:border-color .15s,box-shadow .15s}.phone:focus-within .phone-cc,.phone:focus-within .phone-num{border-color:var(--brand-500)}.phone:focus-within .phone-num{box-shadow:0 0 0 3px var(--focus-ring-sm)}.phone:focus-within .phone-cc{box-shadow:-3px 0 0 0 var(--focus-ring-sm)}.phone--disabled{opacity:.6}.phone--disabled .phone-cc{cursor:not-allowed}.phone-menu{position:absolute;top:calc(100% + 4px);left:0;z-index:50;width:min(300px,84vw);background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);box-shadow:var(--shadow-lg, var(--shadow-md));padding:6px;display:flex;flex-direction:column}.phone .phone-search{width:100%;box-sizing:border-box;padding:.5rem .6rem;margin-bottom:6px;border:1.5px solid var(--line);border-radius:var(--r-sm);font-size:.85rem;font-family:inherit;outline:none;background:#fff}.phone .phone-search:focus{border-color:var(--brand-500);box-shadow:0 0 0 3px var(--focus-ring-sm)}.phone-list{list-style:none;margin:0;padding:0;max-height:220px;overflow-y:auto}.phone-opt{display:flex;align-items:center;gap:.55rem;width:100%;text-align:left;padding:.5rem .55rem;border:none;background:none;border-radius:var(--r-sm);font-family:inherit;font-size:.85rem;color:var(--ink-800, var(--ink-900));cursor:pointer}.phone-opt:hover{background:var(--line-soft)}.phone-opt.is-sel{background:var(--brand-50);color:var(--brand-700)}.phone-opt-flag{font-size:1.1rem;line-height:1}.phone-opt-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.phone-opt-dial{flex-shrink:0;font-weight:600;color:var(--ink-500)}.phone-empty{padding:.6rem;font-size:.82rem;color:var(--ink-500);text-align:center}.auth-shell{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1.5rem;background:var(--grad-hero);overflow:hidden}.auth-shell:before,.auth-shell:after{content:"";position:absolute;border-radius:50%;filter:blur(8px);pointer-events:none}.auth-shell:before{width:320px;height:320px;top:-80px;left:-60px;background:radial-gradient(circle,rgba(34,197,94,.2),transparent 70%);animation:float-slow 9s ease-in-out infinite}.auth-shell:after{width:260px;height:260px;bottom:-70px;right:-40px;background:radial-gradient(circle,rgba(251,191,36,.16),transparent 70%);animation:float-slow 11s ease-in-out infinite reverse}.auth-card{position:relative;z-index:1;width:100%;max-width:410px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);padding:2.6rem 2.2rem 2.3rem;box-shadow:var(--shadow-lg);display:flex;flex-direction:column;gap:1rem;animation:auth-rise .5s cubic-bezier(.16,1,.3,1)}.auth-brand{display:flex;align-items:center;justify-content:center;gap:.55rem}.auth-logo{width:52px;height:52px;display:flex;align-items:center;justify-content:center;padding:5px;border-radius:14px;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-sm);overflow:hidden}.auth-title{margin:0;font-family:var(--font-display);font-size:1.85rem;font-weight:800;letter-spacing:-.02em;text-align:center;color:var(--brand-600)}.auth-subtitle{margin:0;text-align:center;color:var(--ink-500);font-size:.92rem}.auth-steps{display:flex;align-items:center;justify-content:center;gap:.5rem;margin:.35rem 0 .15rem}.auth-step{width:30px;height:30px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.82rem;font-weight:700;border:2px solid var(--line);color:var(--ink-400);background:#fff;transition:all .25s ease}.auth-step.active{background:var(--grad-brand);border-color:transparent;color:#fff;box-shadow:var(--shadow-brand);transform:scale(1.06)}.auth-step.done{background:var(--brand-100);border-color:var(--brand-300);color:var(--brand-700)}.auth-step-line{flex:1;max-width:64px;height:2px;background:var(--line);border-radius:1px}.auth-alert{background:var(--danger-50);border:1px solid var(--danger-200);color:var(--danger-700);padding:.65rem .8rem;border-radius:var(--r-sm);font-size:.875rem}.auth-success{background:var(--brand-50);border:1px solid var(--brand-200);color:var(--brand-700);padding:.65rem .8rem;border-radius:var(--r-sm);font-size:.875rem;text-align:center}.auth-field{display:flex;flex-direction:column;gap:.4rem;margin-bottom:.85rem;font-size:.88rem;color:var(--ink-700)}.auth-field span{font-weight:600}.auth-field input{padding:.72rem .85rem;border:1.5px solid var(--line);border-radius:var(--r-md);font-size:1rem;font-family:inherit;background:#fff;outline:none;transition:border-color .15s,box-shadow .15s}.auth-field input:focus{border-color:var(--brand-500);box-shadow:0 0 0 4px var(--focus-ring)}.auth-field input:disabled{background:var(--line-soft)}.auth-otp-input{letter-spacing:.4em;font-size:1.6rem!important;text-align:center;font-weight:700;color:var(--brand-700)!important}.auth-hint{color:var(--ink-400);font-size:.78rem}.auth-field-error{color:var(--danger-600);font-size:.8rem}.auth-tabs{display:flex;gap:.4rem;background:var(--line-soft);padding:4px;border-radius:var(--r-md);margin-bottom:1rem}.auth-tab{flex:1 1 0;padding:.55rem .5rem;border:none;background:transparent;border-radius:calc(var(--r-md) - 3px);font-family:inherit;font-size:.82rem;font-weight:600;color:var(--ink-500);cursor:pointer;transition:background .15s,color .15s,box-shadow .15s;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.auth-tab:hover:not(.is-active):not(:disabled){color:var(--ink-700)}.auth-tab.is-active{background:var(--surface);color:var(--brand-700);box-shadow:var(--shadow-sm)}.auth-tab:disabled{cursor:not-allowed}.auth-button{width:100%;padding:.82rem;border:none;border-radius:var(--r-md);background:var(--grad-brand);color:#fff;font-size:1rem;font-weight:700;font-family:inherit;cursor:pointer;box-shadow:var(--shadow-brand);transition:transform .12s,box-shadow .2s,filter .2s;margin-bottom:.25rem}.auth-button:hover:not(:disabled){filter:brightness(1.04);box-shadow:var(--shadow-brand-lg);transform:translateY(-1px)}.auth-button:active:not(:disabled){transform:translateY(0) scale(.99)}.auth-button:disabled{background:var(--ink-300);box-shadow:none;cursor:not-allowed}.auth-row-links{display:flex;justify-content:space-between;align-items:center;margin-top:.35rem}.auth-link{background:none;border:none;color:var(--brand-600);font-size:.85rem;font-weight:600;font-family:inherit;cursor:pointer;padding:0;text-decoration:none;border-bottom:1px solid transparent;transition:border-color .15s,color .15s}.auth-link:hover:not(:disabled){color:var(--brand-700);border-bottom-color:var(--brand-400)}.auth-link:disabled{color:var(--ink-400);cursor:not-allowed}.auth-divider{height:1px;background:var(--line-soft);margin:.25rem 0}.auth-footer{margin:0;text-align:center;font-size:.875rem;color:var(--ink-500)}.auth-dev-otp{display:flex;align-items:center;justify-content:center;gap:.6rem;padding:.65rem 1rem;background:linear-gradient(135deg,#fffbeb,#fef3c7);border:1.5px dashed var(--accent-500);border-radius:var(--r-md);margin-bottom:.85rem;font-size:.85rem}.auth-dev-label{color:var(--accent-600);font-weight:700;font-size:.72rem;text-transform:uppercase;letter-spacing:.06em}.auth-dev-code{font-size:1.5rem;font-weight:800;color:var(--accent-600);letter-spacing:.15em;font-variant-numeric:tabular-nums}.ob-shell{position:relative;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:1rem;background:var(--grad-hero);overflow:hidden}.ob-shell:before{content:"";position:absolute;width:340px;height:340px;top:-90px;right:-70px;border-radius:50%;background:radial-gradient(circle,rgba(34,197,94,.18),transparent 70%);filter:blur(8px);animation:float-slow 10s ease-in-out infinite;pointer-events:none}.ob-card{position:relative;z-index:1;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-xl);box-shadow:var(--shadow-lg);padding:2.5rem 2.1rem;width:100%;max-width:480px;text-align:center;animation:auth-rise .5s cubic-bezier(.16,1,.3,1)}@keyframes auth-rise{0%{opacity:0;transform:translateY(22px) scale(.98)}to{opacity:1;transform:translateY(0) scale(1)}}.ob-logo{width:84px;height:84px;margin:0 auto .85rem;display:flex;align-items:center;justify-content:center;padding:7px;border-radius:22px;background:#fff;border:1px solid var(--line);box-shadow:var(--shadow-sm);overflow:hidden}.ob-title{font-family:var(--font-display);font-size:1.5rem;font-weight:800;letter-spacing:-.02em;color:var(--ink-900);margin:0 0 .25rem}.ob-dots{display:flex;justify-content:center;gap:.5rem;margin:1.1rem 0 1.6rem}.ob-dot{width:9px;height:9px;border-radius:50%;background:var(--line);transition:all .25s}.ob-dot--active{background:var(--grad-brand);width:26px;border-radius:999px}.ob-dot--done{background:var(--brand-400)}.ob-alert{background:var(--danger-50);border:1px solid var(--danger-200);color:var(--danger-600);border-radius:var(--r-sm);padding:.65rem .8rem;font-size:.85rem;margin-bottom:1rem;text-align:left}.ob-form{text-align:left}.ob-step-title{font-size:1.15rem;font-weight:700;margin:0 0 .25rem;color:var(--ink-900)}.ob-hint{color:var(--ink-500);font-size:.85rem;margin:0 0 1.35rem}.ob-row{display:grid;grid-template-columns:1fr 1fr;gap:.75rem;margin-bottom:1rem}@media (max-width: 400px){.ob-row{grid-template-columns:1fr}}.ob-field{display:flex;flex-direction:column;gap:.4rem;margin-bottom:1rem;min-width:0}.ob-field span{font-size:.82rem;font-weight:600;color:var(--ink-700)}.ob-req{color:var(--danger-600)}.ob-optional{color:var(--ink-400);font-weight:400;font-size:.82em}.ob-field input{width:100%;padding:.68rem .8rem;border:1.5px solid var(--line);border-radius:var(--r-md);font-size:.92rem;font-family:inherit;outline:none;transition:border-color .15s,box-shadow .15s}.ob-field input:focus{border-color:var(--brand-500);box-shadow:0 0 0 4px var(--focus-ring)}.ob-gender-row{display:flex;gap:.5rem;flex-wrap:wrap}.ob-gender-opt{display:flex;align-items:center;gap:.4rem;padding:.6rem .95rem;border:1.5px solid var(--line);border-radius:var(--r-md);cursor:pointer;font-size:.85rem;font-weight:600;color:var(--ink-600);transition:all .15s}.ob-gender-opt:hover{border-color:var(--brand-300)}.ob-gender-opt input{display:none}.ob-gender-opt--sel{border-color:var(--brand-500);background:var(--brand-50);color:var(--brand-700);box-shadow:0 0 0 3px var(--focus-ring-sm)}.ob-gender-icon{font-size:1.05rem}.ob-btn-primary{width:100%;padding:.82rem;background:var(--grad-brand);color:#fff;border:none;border-radius:var(--r-md);font-size:.96rem;font-weight:700;font-family:inherit;cursor:pointer;box-shadow:var(--shadow-brand);transition:transform .12s,box-shadow .2s,filter .2s;margin-top:.5rem}.ob-btn-primary:hover:not(:disabled){filter:brightness(1.04);transform:translateY(-1px);box-shadow:var(--shadow-brand-lg)}.ob-btn-primary:disabled{background:var(--ink-300);box-shadow:none;opacity:1;cursor:not-allowed}.ob-married-row{display:flex;gap:1rem;margin:1rem 0;flex-wrap:wrap}.ob-married-opt{flex:1;min-width:130px;display:flex;flex-direction:column;align-items:center;gap:.5rem;padding:1.4rem 1rem;background:#fff;border:2px solid var(--line);border-radius:var(--r-lg);cursor:pointer;font-size:.9rem;font-weight:700;color:var(--ink-800);transition:all .18s}.ob-married-opt:hover:not(:disabled){border-color:var(--brand-500);background:var(--brand-50);transform:translateY(-2px);box-shadow:var(--shadow-md)}.ob-married-opt:disabled{opacity:.5;cursor:not-allowed}.ob-married-icon{font-size:2rem}.ob-btn-ghost{background:none;border:none;color:var(--ink-500);font-size:.85rem;font-weight:600;cursor:pointer;padding:.25rem 0;font-family:inherit;border-bottom:1px solid transparent;transition:color .15s,border-color .15s}.ob-btn-ghost:hover:not(:disabled){color:var(--brand-600);border-bottom-color:var(--brand-400)}.ob-btn-ghost:disabled{opacity:.5}.ob-loading{color:var(--ink-500);font-size:.85rem;text-align:center;margin-top:.75rem}.ct{display:inline-flex;flex-direction:column;align-items:center;position:relative}.ct-loading{font-size:.72rem;color:var(--ink-400);padding:6px}.ct-anc-loading{font-size:.68rem;color:var(--ink-400);padding:6px 4px}.ct-inlaw-col{display:flex;flex-direction:column;align-items:center;justify-content:flex-end}.ct-couple{display:flex;align-items:flex-end}.ct-col{display:flex;flex-direction:column;align-items:center;justify-content:flex-end}.ct-tower-wrap{width:0;display:flex;justify-content:center}.ct-tower-wrap>*{flex:none}.ct-tower-wrap--left{justify-content:flex-end}.ct-tower-wrap--right{justify-content:flex-start}.ct-tower-wrap--left .ct-marriage:before,.ct-tower-wrap--right .ct-marriage:before{display:none}.ct-tower{display:flex;flex-direction:column;align-items:center}.ct-tower-drop{width:0;height:32px;border-left:2px dotted var(--brand-300)}.ct-col--left>.ct-tower-drop{border-color:var(--male)}.ct-col--right>.ct-tower-drop{border-color:var(--female)}.ct-marriage{position:relative;width:28px;height:0;border-top:2px dotted var(--gold);margin-bottom:37px;flex-shrink:0}.ct-marriage:after{content:"💛";position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);font-size:.85rem;filter:drop-shadow(0 0 6px color-mix(in srgb,var(--gold) 70%,transparent))}.ct-marriage:before{content:"";position:absolute;top:0;left:50%;transform:translate(-50%);width:0;height:37px;border-left:2px dotted var(--gold)}.ct-card{position:relative;width:80px;min-height:82px;background:linear-gradient(180deg,color-mix(in srgb,var(--c) 6%,var(--surface)) 0%,var(--surface) 60%);border:1px solid var(--line);border-radius:var(--r-md);padding:7px 5px 5px;display:flex;flex-direction:column;align-items:center;box-shadow:var(--shadow-sm);transition:box-shadow .16s,border-color .16s,transform .12s}.ct-card:before{content:"";position:absolute;top:0;left:18%;right:18%;height:3px;border-radius:0 0 4px 4px;background:var(--c);box-shadow:0 0 10px var(--c);opacity:.95}.ct-card:hover{box-shadow:var(--shadow-md);border-color:var(--c);transform:translateY(-2px)}.ct-card--focus{border-color:var(--c);box-shadow:0 0 0 3px color-mix(in srgb,var(--c) 16%,transparent),var(--shadow-md)}.ct-you-badge{position:absolute;top:-7px;left:50%;transform:translate(-50%);background:var(--c);color:#fff;font-size:.44rem;font-weight:800;letter-spacing:.09em;padding:1px 7px;border-radius:999px;box-shadow:0 2px 6px color-mix(in srgb,var(--c) 45%,transparent)}.ct-avatar{width:17px;height:17px;border-radius:4px;background:radial-gradient(circle at 50% 32%,color-mix(in srgb,var(--c) 52%,#ffffff) 0%,var(--c) 100%);border:1px solid color-mix(in srgb,var(--c) 45%,#ffffff);cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 1.5px color-mix(in srgb,var(--c) 16%,transparent),0 0 7px color-mix(in srgb,var(--c) 50%,transparent);transition:transform .14s,box-shadow .14s}.ct-avatar-face{font-size:.52rem;line-height:1}.ct-avatar:hover{transform:scale(1.07);box-shadow:0 0 0 4px color-mix(in srgb,var(--c) 22%,transparent),0 0 22px color-mix(in srgb,var(--c) 68%,transparent)}.ct-name{margin-top:5px;font-family:var(--font-serif);font-size:.58rem;font-weight:700;color:var(--ink-900);letter-spacing:.01em;text-align:center;line-height:1.15;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ct-label{margin-top:2px;font-size:.4rem;font-weight:700;color:var(--c);text-transform:uppercase;letter-spacing:.04em;text-align:center;line-height:1.12;max-width:100%;white-space:normal;overflow-wrap:anywhere;word-break:break-word}.ct-label--you{color:var(--brand-700);background:var(--brand-50);padding:0 6px;border-radius:999px}.ct-actions{display:flex;gap:1px;margin-top:5px;width:100%;justify-content:center;padding-top:4px;border-top:1px solid var(--line)}.ct-act{width:16px;height:15px;border:none;background:transparent;border-radius:5px;font-size:.6rem;line-height:1;cursor:pointer;opacity:.82;display:flex;align-items:center;justify-content:center;transition:background .12s,transform .1s,opacity .12s}.ct-act:hover{background:var(--line-soft);transform:translateY(-1px);opacity:1}.ct-act--del:hover{background:var(--danger-50)}.ct-act--add{color:var(--brand-600);font-weight:700}.ct-act--add:hover{background:var(--brand-50)}.ct-toggle,.ct-parents-toggle,.ct-sib-toggle{border-radius:999px;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:var(--shadow-xs);z-index:2;transition:all .14s}.ct-toggle{margin-top:6px;width:22px;height:22px;border:1.5px solid var(--line);background:var(--surface);color:var(--ink-500);font-size:.58rem}.ct-toggle:hover{background:var(--grad-brand);color:#fff;border-color:transparent;box-shadow:var(--shadow-brand)}.ct-parents-toggle{margin:0 0 5px;width:22px;height:22px;border:1.5px solid var(--brand-200);background:var(--brand-50);color:var(--brand-700);font-size:.58rem}.ct-parents-toggle:hover{background:var(--grad-brand);color:#fff;border-color:transparent;box-shadow:var(--shadow-brand)}.ct-sib-toggle{margin:6px 0 2px;height:20px;padding:0 9px;border:1.5px solid var(--brand-200);background:var(--brand-50);color:var(--brand-700);font-size:.56rem;font-weight:700;letter-spacing:.03em;gap:3px}.ct-sib-toggle:hover{background:var(--grad-brand);color:#fff;border-color:transparent;box-shadow:var(--shadow-brand)}.ct-anc{display:flex;flex-direction:column;align-items:center}.ct-anc-couple{display:flex;align-items:flex-end}.ct-descent{display:flex;flex-direction:column;align-items:center;position:relative}.ct-stem{position:relative;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:5px;min-height:22px;padding:7px 0}.ct-stem:before{content:"";position:absolute;top:0;bottom:0;left:50%;width:0;border-left:2px dotted var(--brand-300);transform:translate(-50%);z-index:0}.ct-stem--ink:before{border-color:var(--ink-300)}.ct-stem--collapsed:before{display:none}.ct-stem>*{position:relative;z-index:2;margin:0}.ct-branchrow{display:flex;justify-content:center;align-items:flex-start;position:relative}.ct-branch-svg{position:absolute;top:0;left:0;overflow:visible;pointer-events:none;z-index:0}.ct-branch-path{fill:none;stroke:var(--ink-300);stroke-width:2;stroke-dasharray:2 4;stroke-linecap:round}.ct-branch-svg--brand .ct-branch-path{stroke:var(--brand-300)}.ct-branch-junction{fill:var(--brand-400);stroke:color-mix(in srgb,var(--brand-400) 22%,transparent);stroke-width:3}.ct-branch{--attach: 50%;position:relative;padding:58px 32px 0;display:flex;justify-content:center}.fg-canvas{position:relative}.fg-lines{position:absolute;top:0;left:0;overflow:visible;pointer-events:none;z-index:0}.fg-line{fill:none;stroke:var(--brand-300);stroke-width:2;stroke-dasharray:2 5;stroke-linecap:round}.fg-heart{position:absolute;transform:translate(-50%,-50%);font-size:.85rem;line-height:1;pointer-events:none;z-index:1;filter:drop-shadow(0 0 6px color-mix(in srgb,var(--gold) 70%,transparent))}.fg-node{position:absolute;width:80px;z-index:2;animation:fg-in .3s cubic-bezier(.22,.61,.36,1) both}@keyframes fg-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:translateY(0)}}.ftv-wrap{position:relative;width:100%;height:100%;overflow:hidden}.ftv-scroll{position:relative;width:100%;height:100%;overflow:hidden;touch-action:none;background:radial-gradient(circle at 50% 0%,var(--canvas-glow),transparent 45%),var(--bg);background-image:radial-gradient(circle at 50% 0%,var(--canvas-glow),transparent 45%),radial-gradient(circle,var(--dot-grid) 1.2px,transparent 1.2px);background-size:auto,28px 28px}.ftv-stage{position:absolute;top:0;left:0;padding:40px 64px 80px;box-sizing:border-box;width:max-content;transform-origin:0 0;will-change:transform;transition:transform .12s ease-out}.ftv-scroll--drag .ftv-stage{transition:none}.ftv-controls{position:absolute;bottom:20px;right:20px;display:flex;flex-direction:column;gap:7px;padding:6px;background:color-mix(in srgb,var(--surface) 80%,transparent);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-sm);z-index:20}.ftv-ctrl{width:38px;height:38px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-md);font-size:1.05rem;color:var(--ink-700);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:all .14s}.ftv-ctrl:hover{background:var(--grad-brand);color:#fff;border-color:transparent;box-shadow:var(--shadow-brand);transform:translateY(-1px)}.ftv-state{height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.7rem;text-align:center;padding:3rem}.ftv-state-icon{font-size:3.4rem;line-height:1}.ftv-state-title{margin:0;font-family:var(--font-display);font-size:1.15rem;font-weight:700;color:var(--ink-900)}.ftv-muted{margin:0;color:var(--ink-500);font-size:.9rem}.ftv-error{margin:0;color:var(--danger-600);font-size:.9rem}.ftv-spinner{width:38px;height:38px;border:3px solid var(--brand-100);border-top-color:var(--brand-600);border-radius:50%;animation:ftv-spin .65s linear infinite}@keyframes ftv-spin{to{transform:rotate(360deg)}}.aff-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:200;padding:1rem;animation:aff-fade .15s ease}@keyframes aff-fade{0%{opacity:0}to{opacity:1}}.aff-card{background:var(--surface);border-radius:var(--r-xl);width:100%;max-width:680px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg);animation:aff-slide .22s cubic-bezier(.16,1,.3,1)}@keyframes aff-slide{0%{transform:translateY(18px) scale(.98);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.aff-header{display:flex;align-items:flex-start;justify-content:space-between;padding:1.4rem 1.5rem .5rem}.aff-title{margin:0;font-family:var(--font-display);font-size:1.2rem;font-weight:700;color:var(--ink-900)}.aff-subtitle{margin:.25rem 0 0;font-size:.82rem;color:var(--ink-500)}.aff-close{background:none;border:none;font-size:1.5rem;line-height:1;color:var(--ink-400);cursor:pointer;border-radius:8px;width:30px;height:30px;transition:background .12s,color .12s}.aff-close:hover{background:var(--line-soft);color:var(--ink-700)}.aff-alert{margin:.5rem 1.5rem 0;background:var(--danger-50);border:1px solid var(--danger-200);color:var(--danger-700);padding:.65rem .8rem;border-radius:var(--r-sm);font-size:.85rem}.aff-body{padding:.85rem 1.5rem 1.5rem}.aff-section{border:1.5px solid var(--line-soft);border-radius:var(--r-md);padding:.9rem;margin-bottom:.85rem;background:var(--tint-surface);transition:border-color .15s,box-shadow .15s}.aff-section:focus-within{border-color:var(--brand-300);box-shadow:0 0 0 3px var(--focus-ring-sm)}.aff-section-head{display:flex;align-items:center;gap:.5rem;margin-bottom:.7rem}.aff-section-icon{font-size:1.25rem}.aff-section-title{font-size:.92rem;font-weight:700;color:var(--ink-900)}.aff-gender-toggle{margin-left:auto;display:flex;gap:4px}.aff-gender-toggle button{padding:4px 11px;border:1px solid var(--line);background:#fff;border-radius:999px;font-size:.72rem;font-weight:600;color:var(--ink-500);cursor:pointer;transition:all .13s}.aff-gender-toggle button.on{background:var(--grad-brand);color:#fff;border-color:transparent}.aff-note{font-size:.78rem;color:var(--ink-500);background:var(--brand-50);border:1px solid var(--brand-100);border-radius:var(--r-sm);padding:.6rem .7rem;margin:0}.aff-section-gender{margin-left:auto;font-size:.7rem;font-weight:700;color:var(--ink-600);background:var(--line-soft);padding:3px 10px;border-radius:999px}.aff-row{display:grid;grid-template-columns:1fr 1fr;gap:.5rem;margin-bottom:.5rem}@media (max-width: 420px){.aff-row{grid-template-columns:1fr}}.aff-fields{display:flex;flex-wrap:wrap;gap:.5rem}.aff-cell{flex:1 1 145px;min-width:0}.aff-cell--phone{flex:1 1 210px}.aff-cell--phone.has-error .phone-cc,.aff-cell--phone.has-error .phone-num{border-color:var(--danger-600)}.aff-field-error{display:block;margin-top:4px;color:var(--danger-600);font-size:.72rem;font-weight:500}.aff-input{width:100%;box-sizing:border-box;padding:.6rem .75rem;border:1.5px solid var(--line);border-radius:var(--r-sm);font-size:.9rem;font-family:inherit;outline:none;background:#fff;transition:border-color .15s,box-shadow .15s}.aff-input:focus{border-color:var(--brand-500);box-shadow:0 0 0 3px var(--focus-ring-sm)}.aff-input+.aff-input{margin-top:0}.aff-footer{display:flex;justify-content:flex-end;gap:.6rem;margin-top:.4rem}.aff-btn-cancel{padding:.62rem 1.15rem;border:1.5px solid var(--line);background:#fff;border-radius:var(--r-sm);font-size:.88rem;font-weight:600;font-family:inherit;color:var(--ink-600);cursor:pointer;transition:background .13s}.aff-btn-cancel:hover{background:var(--line-soft)}.aff-btn-save{padding:.62rem 1.5rem;border:none;background:var(--grad-brand);color:#fff;border-radius:var(--r-sm);font-size:.88rem;font-weight:700;font-family:inherit;cursor:pointer;box-shadow:var(--shadow-brand);transition:transform .12s,filter .2s,box-shadow .2s}.aff-btn-save:hover:not(:disabled){filter:brightness(1.05);transform:translateY(-1px)}.aff-btn-save:disabled{background:var(--ink-300);box-shadow:none;opacity:1;cursor:not-allowed}@media (max-width: 480px){.aff-backdrop{align-items:flex-end;padding:0}.aff-card{max-width:none;border-radius:var(--r-xl) var(--r-xl) 0 0;max-height:92vh;animation:aff-sheet .26s cubic-bezier(.16,1,.3,1)}}@keyframes aff-sheet{0%{transform:translateY(100%)}to{transform:translateY(0)}}.mm-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:var(--backdrop);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);display:flex;align-items:center;justify-content:center;z-index:200;padding:1rem;animation:mm-fade .15s ease}@keyframes mm-fade{0%{opacity:0}to{opacity:1}}.mm-card{background:var(--surface);border-radius:var(--r-xl);width:100%;max-width:420px;max-height:90vh;overflow-y:auto;box-shadow:var(--shadow-lg);animation:mm-slide .22s cubic-bezier(.16,1,.3,1)}@keyframes mm-slide{0%{transform:translateY(18px) scale(.98);opacity:0}to{transform:translateY(0) scale(1);opacity:1}}.mm-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.4rem .6rem}.mm-title{margin:0;font-family:var(--font-display);font-size:1.2rem;font-weight:700;color:var(--ink-900)}.mm-close{background:none;border:none;font-size:1.5rem;line-height:1;color:var(--ink-400);cursor:pointer;border-radius:8px;width:30px;height:30px;transition:background .12s,color .12s}.mm-close:hover{background:var(--line-soft);color:var(--ink-700)}.mm-alert{margin:0 1.4rem;background:var(--danger-50);border:1px solid var(--danger-200);color:var(--danger-700);padding:.65rem .8rem;border-radius:var(--r-sm);font-size:.85rem}.mm-body{padding:.5rem 1.4rem 1.2rem}.mm-row{display:flex;justify-content:space-between;gap:1rem;padding:.5rem 0;font-size:.88rem}.mm-row-label{color:var(--ink-500)}.mm-row-value{color:var(--ink-900);font-weight:600;text-align:right}.mm-divider{height:1px;background:var(--line-soft);margin:.5rem 0}.mm-form-row{display:grid;grid-template-columns:1fr 1fr;gap:.6rem}@media (max-width: 400px){.mm-form-row{grid-template-columns:1fr}}.mm-field{display:flex;flex-direction:column;gap:.35rem;margin-bottom:.8rem;min-width:0}.mm-field>span{font-size:.8rem;font-weight:600;color:var(--ink-700)}.mm-req{color:var(--danger-600)}.mm-field input{width:100%;padding:.6rem .75rem;border:1.5px solid var(--line);border-radius:var(--r-sm);font-size:.9rem;font-family:inherit;outline:none;transition:border-color .15s,box-shadow .15s}.mm-field input:focus{border-color:var(--brand-500);box-shadow:0 0 0 3px var(--focus-ring-sm)}.mm-field--error .phone-cc,.mm-field--error .phone-num{border-color:var(--danger-600)}.mm-field-error{color:var(--danger-600);font-size:.72rem;font-weight:500}.mm-gender{display:flex;gap:.4rem;flex-wrap:wrap}.mm-gender-opt{padding:.5rem .8rem;border:1.5px solid var(--line);border-radius:var(--r-sm);font-size:.82rem;font-weight:600;color:var(--ink-600);cursor:pointer;transition:all .14s}.mm-gender-opt:hover{border-color:var(--brand-300)}.mm-gender-opt input{display:none}.mm-gender-opt.sel{border-color:var(--brand-500);background:var(--brand-50);color:var(--brand-700);box-shadow:0 0 0 3px var(--focus-ring-sm)}.mm-footer{display:flex;justify-content:flex-end;gap:.6rem;padding:0 1.4rem 1.3rem}.mm-btn-ghost{padding:.58rem 1.15rem;border:1.5px solid var(--line);background:#fff;border-radius:var(--r-sm);font-size:.86rem;font-weight:600;font-family:inherit;color:var(--ink-600);cursor:pointer;transition:background .13s}.mm-btn-ghost:hover{background:var(--line-soft)}.mm-btn-primary{padding:.58rem 1.35rem;border:none;background:var(--grad-brand);color:#fff;border-radius:var(--r-sm);font-size:.86rem;font-weight:700;font-family:inherit;cursor:pointer;box-shadow:var(--shadow-brand);transition:transform .12s,filter .2s}.mm-btn-primary:hover:not(:disabled){filter:brightness(1.05);transform:translateY(-1px)}.mm-btn-primary:disabled{background:var(--ink-300);box-shadow:none;opacity:1;cursor:not-allowed}@media (max-width: 480px){.mm-backdrop{align-items:flex-end;padding:0}.mm-card{max-width:none;border-radius:var(--r-xl) var(--r-xl) 0 0;max-height:92vh;animation:mm-sheet .26s cubic-bezier(.16,1,.3,1)}.mm-footer{position:sticky;bottom:0;background:var(--surface);padding-top:.8rem}}@keyframes mm-sheet{0%{transform:translateY(100%)}to{transform:translateY(0)}}.tp-shell{height:100vh;display:flex;background:radial-gradient(1200px 440px at 62% -10%,rgba(124,92,255,.24),transparent 62%),linear-gradient(180deg,#14132e,#0b0d17 42%);font-family:var(--font-sans);color:var(--ink-900);overflow:hidden}.tp-content{--surface: #171b2c;--bg: #0c0e1a;--line: rgba(255, 255, 255, .09);--line-soft: rgba(255, 255, 255, .06);--ink-900: #f6f3ec;--ink-800: #e7e4dc;--ink-700: #d2cfc7;--ink-600: #adabbb;--ink-500: #8d8c9b;--ink-400: #6e6d7f;--ink-300: #3d3e56;--canvas-glow: color-mix(in srgb, #7c5cff 16%, transparent);--dot-grid: rgba(255, 255, 255, .05);--shadow-xs: 0 1px 2px rgba(0, 0, 0, .45);--shadow-sm: 0 2px 12px rgba(0, 0, 0, .45);--shadow-md: 0 16px 38px rgba(0, 0, 0, .55);color:var(--ink-900)}.tp-sidebar{width:84px;flex-shrink:0;background:var(--grad-brand-deep);display:flex;flex-direction:column;align-items:center;padding:16px 10px;gap:10px;box-shadow:4px 0 24px #042f252e;z-index:30}.tp-logo{width:52px;height:52px;display:flex;align-items:center;justify-content:center;padding:5px;border-radius:16px;background:#fff;border:1px solid rgba(255,255,255,.25);box-shadow:0 4px 12px #0000002e;cursor:pointer;overflow:hidden;transition:transform .12s,box-shadow .15s}.tp-logo:hover{transform:translateY(-1px);box-shadow:0 8px 18px #0000003d}.tp-nav{margin-top:8px;display:flex;flex-direction:column;gap:6px;width:100%;flex:1}.tp-nav-btn{width:100%;display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 4px;background:transparent;border:none;border-radius:14px;color:#ffffffb8;font-family:inherit;font-size:.62rem;font-weight:600;letter-spacing:.02em;cursor:pointer;transition:background .15s,color .15s}.tp-nav-icon{font-size:1.25rem;line-height:1}.tp-nav-btn:hover{background:#ffffff1f;color:#fff}.tp-nav-btn.is-active{background:#ffffff2e;color:#fff;box-shadow:inset 0 0 0 1px #fff3}.tp-signout{margin-top:auto;color:#ffffffa8}.tp-signout:hover{background:#ef444438;color:#fff}.tp-content{flex:1;display:flex;flex-direction:column;min-width:0;overflow:visible}.tp-topbar{height:72px;flex-shrink:0;padding:0 1.5rem;background:color-mix(in srgb,var(--surface) 62%,transparent);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--line);box-shadow:var(--shadow-xs);display:flex;align-items:center;gap:1rem;position:relative;z-index:20}.tp-topbar-lead{display:flex;align-items:center;gap:.75rem;min-width:0}.tp-topbar-titles{display:flex;flex-direction:column;gap:1px;min-width:0}.tp-topbar-title{margin:0;font-family:var(--font-serif);font-size:1.42rem;font-weight:700;line-height:1.1;letter-spacing:.01em;color:var(--ink-900);white-space:nowrap}.tp-topbar-sub{font-size:.6rem;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:color-mix(in srgb,var(--gold) 70%,var(--ink-500));white-space:nowrap}.tp-btn-home{padding:.45rem .9rem;background:var(--brand-50);color:var(--brand-700);border:1px solid var(--brand-200);border-radius:999px;font-size:.82rem;font-weight:600;font-family:inherit;cursor:pointer;white-space:nowrap;transition:background .14s,box-shadow .14s}.tp-btn-home:hover{background:var(--brand-100);box-shadow:var(--shadow-xs)}.tp-search{position:relative;flex:1;max-width:440px;margin-left:auto;display:flex;align-items:center}.tp-search-icon{position:absolute;left:.85rem;width:15px;height:15px;pointer-events:none}.tp-search-input{width:100%;padding:.6rem 2.4rem;border:1.5px solid var(--line);border-radius:999px;font-size:.88rem;font-family:inherit;background:color-mix(in srgb,var(--surface) 70%,transparent);color:var(--ink-900);outline:none;transition:border-color .15s,box-shadow .15s}.tp-search-input::placeholder{color:var(--ink-400)}.tp-search-input:focus{border-color:var(--brand-500);box-shadow:0 0 0 4px var(--focus-ring-sm)}.tp-search-clear{position:absolute;right:.7rem;background:none;border:none;color:var(--ink-400);font-size:1.05rem;cursor:pointer;padding:0;line-height:1}.tp-search-clear:hover{color:var(--ink-600)}.tp-results{position:absolute;top:calc(100% + 8px);left:0;right:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:var(--shadow-md);list-style:none;margin:0;padding:5px;max-height:340px;overflow-y:auto;z-index:50;animation:tp-pop .14s ease}@keyframes tp-pop{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}.tp-result{display:flex;align-items:center;gap:.65rem;padding:.55rem .6rem;border-radius:var(--r-sm);cursor:pointer;transition:background .12s}.tp-result:hover,.tp-result--active{background:color-mix(in srgb,var(--brand-500) 16%,transparent)}.tp-result--empty{color:var(--ink-400);font-size:.85rem;cursor:default;justify-content:center}.tp-result--empty:hover{background:none}.tp-result-avatar{width:32px;height:32px;border-radius:50%;color:#fff;font-size:.78rem;font-weight:700;display:flex;align-items:center;justify-content:center;flex-shrink:0;box-shadow:var(--shadow-xs)}.tp-result-info{display:flex;flex-direction:column;min-width:0}.tp-result-name{font-size:.86rem;font-weight:600;color:var(--ink-900);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.tp-result-sub{font-size:.74rem;color:var(--ink-500)}.tp-topbar-right{display:flex;align-items:center;gap:.6rem;flex-shrink:0}.tp-avatar{width:40px;height:40px;border-radius:50%;display:flex;align-items:center;justify-content:center;padding:3px;background:#fff;border:1.5px solid var(--brand-200);overflow:hidden}.tp-main{flex:1;overflow:hidden;position:relative}@media (max-width: 720px){.tp-sidebar{width:68px}.tp-nav-label,.tp-signout .tp-nav-label{display:none}.tp-topbar-title{font-size:1.02rem}}@media (max-width: 560px){.tp-topbar{gap:.6rem;padding:0 .9rem}.tp-topbar-title{display:none}.tp-search{max-width:none}.tp-avatar{display:none}}:root{--brand-50: #f0fdf4;--brand-100: #dcfce7;--brand-200: #bbf7d0;--brand-300: #86efac;--brand-400: #4ade80;--brand-500: #22c55e;--brand-600: #16a34a;--brand-700: #15803d;--brand-800: #166534;--brand-900: #14532d;--accent-300: #fcd34d;--accent-400: #fbbf24;--accent-500: #f59e0b;--accent-600: #d97706;--male: #14b8a6;--female: #e5799f;--other: #a78bfa;--gold: #f5c451;--ink-900: #1a1b18;--ink-800: #2b2c27;--ink-700: #44453d;--ink-600: #5f6056;--ink-500: #83847a;--ink-400: #a8a99e;--ink-300: #d0d1c7;--line: #e7e7df;--line-soft:#f0f0e9;--surface: #ffffff;--bg: #f4f4ef;--danger-50: #fef2f2;--danger-200: #fecaca;--danger-600: #dc2626;--danger-700: #b91c1c;--grad-brand: linear-gradient(135deg, #22c55e 0%, #16a34a 100%);--grad-brand-deep: linear-gradient(160deg, #166534 0%, #14532d 60%, #0d3d21 100%);--grad-gold: linear-gradient(135deg, #fbbf24 0%, #f59e0b 100%);--grad-hero: radial-gradient(1100px 560px at 14% -12%, rgba(34, 197, 94, .16), transparent 60%), radial-gradient(820px 480px at 110% 4%, rgba(22, 163, 74, .1), transparent 55%), radial-gradient(680px 680px at 52% 122%, rgba(74, 222, 128, .12), transparent 60%), linear-gradient(165deg, #f7f7f1 0%, #f1f3ec 100%);--focus-ring: color-mix(in srgb, var(--brand-500) 18%, transparent);--focus-ring-sm: color-mix(in srgb, var(--brand-500) 12%, transparent);--backdrop: color-mix(in srgb, var(--brand-900) 48%, rgba(12, 20, 12, .5));--canvas-glow: color-mix(in srgb, var(--brand-500) 8%, transparent);--dot-grid: color-mix(in srgb, var(--brand-500) 16%, #dddeD3);--tint-surface: color-mix(in srgb, var(--brand-50) 55%, #ffffff);--shadow-xs: 0 1px 2px rgba(26, 27, 24, .05);--shadow-sm: 0 2px 10px rgba(26, 27, 24, .06);--shadow-md: 0 12px 30px rgba(26, 27, 24, .1);--shadow-lg: 0 26px 64px rgba(26, 27, 24, .18);--shadow-brand: 0 8px 20px color-mix(in srgb, var(--brand-600) 30%, transparent);--shadow-brand-lg: 0 14px 32px color-mix(in srgb, var(--brand-600) 38%, transparent);--r-sm: 10px;--r-md: 13px;--r-lg: 18px;--r-xl: 24px;--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;--font-display: "Poppins", var(--font-sans);--font-serif: "Playfair Display", Georgia, "Times New Roman", serif;font-family:var(--font-sans);line-height:1.5;color:var(--ink-900);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility}*{box-sizing:border-box}html,body,#root{margin:0;min-height:100vh}body{background:var(--bg)}::selection{background:var(--brand-200);color:var(--brand-900)}:focus-visible{outline:2px solid var(--brand-500);outline-offset:2px;border-radius:4px}:focus:not(:focus-visible){outline:none}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}*{scrollbar-width:thin;scrollbar-color:var(--ink-300) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-track{background:transparent}*::-webkit-scrollbar-thumb{background:var(--ink-300);border-radius:999px;border:2px solid transparent;background-clip:padding-box}*::-webkit-scrollbar-thumb:hover{background:var(--ink-400);background-clip:padding-box}@keyframes float-slow{0%,to{transform:translateY(0) rotate(0)}50%{transform:translateY(-18px) rotate(3deg)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}
