.usage-bar{margin-bottom:1rem}.usage-bar-header{display:flex;justify-content:space-between;margin-bottom:.25rem;font-size:.875rem}.usage-bar-label{font-weight:500;color:var(--text-primary)}.usage-bar-value{color:var(--text-secondary)}.usage-bar-track{height:8px;background:var(--bg-secondary);border-radius:4px;overflow:hidden}.usage-bar-fill{height:100%;background:var(--accent-color, #3b82f6);border-radius:4px;transition:width .3s ease}.usage-bar-fill.warning{background:#f59e0b}.usage-bar-fill.danger{background:#ef4444}.usage-bar-warning{font-size:.75rem;color:#f59e0b;margin-top:.25rem}.usage-bar-danger{font-size:.75rem;color:#ef4444;margin-top:.25rem}.plan-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem;display:flex;flex-direction:column;transition:border-color .2s,box-shadow .2s}.plan-card:hover{border-color:var(--accent-color, #3b82f6)}.plan-card.popular{border-color:var(--accent-color, #3b82f6);box-shadow:0 0 0 1px var(--accent-color, #3b82f6)}.plan-card.current{background:var(--bg-secondary)}.plan-card-header{margin-bottom:1rem}.plan-card-badge{display:inline-block;background:var(--accent-color, #3b82f6);color:#fff;font-size:.75rem;font-weight:600;padding:.25rem .5rem;border-radius:4px;margin-bottom:.5rem}.plan-card-name{font-size:1.25rem;font-weight:600;margin:0;color:var(--text-primary)}.plan-card-description{font-size:.875rem;color:var(--text-secondary);margin:.25rem 0 0}.plan-card-pricing{margin-bottom:1rem}.plan-card-price{font-size:2rem;font-weight:700;color:var(--text-primary)}.plan-card-price-period{font-size:.875rem;color:var(--text-secondary);font-weight:400}.plan-card-annual{font-size:.75rem;color:var(--text-secondary);margin-top:.25rem}.plan-card-annual-savings{color:#22c55e;font-weight:500}.plan-card-features{list-style:none;padding:0;margin:0 0 1.5rem;flex:1}.plan-card-features li{display:flex;align-items:flex-start;gap:.5rem;padding:.25rem 0;font-size:.875rem;color:var(--text-primary)}.plan-card-features li:before{content:"✓";color:#22c55e;font-weight:700}.plan-card-action{margin-top:auto}.plan-card-action .btn-primary,.plan-card-action .btn-secondary{width:100%;padding:.75rem 1rem;font-size:.875rem;font-weight:500;border-radius:8px;cursor:pointer;transition:opacity .2s}.plan-card-action .btn-primary{background:var(--accent-color, #3b82f6);color:#fff;border:none}.plan-card-action .btn-primary:hover{opacity:.9}.plan-card-action .btn-primary:disabled{opacity:.5;cursor:not-allowed}.plan-card-action .btn-secondary{background:transparent;color:var(--text-secondary);border:1px solid var(--border-color)}.plan-card-current-badge{text-align:center;color:var(--text-secondary);font-size:.875rem;padding:.75rem}.plans-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem;margin-bottom:2rem}.upgrade-modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem}.upgrade-modal{background:var(--bg-primary);border-radius:16px;max-width:900px;width:100%;max-height:90vh;overflow-y:auto;box-shadow:0 20px 25px -5px #0000001a}.upgrade-modal-header{display:flex;justify-content:space-between;align-items:center;padding:1.5rem;border-bottom:1px solid var(--border-color)}.upgrade-modal-header h2{margin:0;font-size:1.5rem}.upgrade-modal-close{background:none;border:none;font-size:1.5rem;cursor:pointer;color:var(--text-secondary);padding:.25rem;line-height:1}.upgrade-modal-close:hover{color:var(--text-primary)}.upgrade-modal-content{padding:1.5rem}.upgrade-modal-billing-toggle{display:flex;justify-content:center;gap:.5rem;margin-bottom:1.5rem;background:var(--bg-secondary);padding:.25rem;border-radius:8px;width:fit-content;margin-left:auto;margin-right:auto}.upgrade-modal-billing-toggle button{padding:.5rem 1rem;border:none;background:transparent;border-radius:6px;cursor:pointer;font-size:.875rem;color:var(--text-secondary);transition:all .2s}.upgrade-modal-billing-toggle button.active{background:var(--bg-primary);color:var(--text-primary);box-shadow:0 1px 3px #0000001a}.upgrade-modal-billing-toggle button:hover:not(.active){color:var(--text-primary)}.trial-banner{background:linear-gradient(135deg,#3b82f6,#8b5cf6);color:#fff;padding:1rem 1.5rem;border-radius:8px;display:flex;align-items:center;justify-content:space-between;gap:1rem;margin-bottom:1rem}.trial-banner-content{flex:1}.trial-banner-title{font-weight:600;margin:0 0 .25rem}.trial-banner-text{font-size:.875rem;opacity:.9;margin:0}.trial-banner-action{flex-shrink:0}.trial-banner-action button{background:#fff;color:#3b82f6;border:none;padding:.5rem 1rem;border-radius:6px;font-weight:500;cursor:pointer;transition:opacity .2s}.trial-banner-action button:hover{opacity:.9}.trial-banner.warning{background:linear-gradient(135deg,#f59e0b,#ef4444)}.trial-banner.warning .trial-banner-action button{color:#f59e0b}.billing-section{padding:1.5rem 0}.billing-section h2{margin:0 0 1rem;font-size:1.25rem}.billing-section h3{margin:0 0 1rem;font-size:1rem;color:var(--text-secondary)}.billing-current-plan{background:var(--bg-secondary);border-radius:8px;padding:1rem;margin-bottom:1.5rem}.billing-current-plan-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.billing-current-plan-name{font-weight:600;font-size:1.125rem}.billing-current-plan-status{font-size:.75rem;padding:.25rem .5rem;border-radius:4px;font-weight:500}.billing-current-plan-status.active{background:#dcfce7;color:#166534}.billing-current-plan-status.trialing{background:#dbeafe;color:#1e40af}.billing-current-plan-status.past_due{background:#fef3c7;color:#92400e}.billing-current-plan-status.canceled{background:#fecaca;color:#991b1b}.billing-current-plan-info{font-size:.875rem;color:var(--text-secondary)}.billing-actions{display:flex;gap:.5rem;flex-wrap:wrap;margin-top:1rem}.billing-actions button{padding:.5rem 1rem;border-radius:6px;font-size:.875rem;cursor:pointer;transition:opacity .2s}.billing-actions .btn-primary{background:var(--accent-color, #3b82f6);color:#fff;border:none}.billing-actions .btn-secondary{background:transparent;color:var(--text-primary);border:1px solid var(--border-color)}.billing-actions button:disabled{opacity:.5;cursor:not-allowed}.usage-summary{margin-bottom:2rem}.usage-summary-last-updated{font-size:.75rem;color:var(--text-secondary);margin-top:.5rem}.billing-non-owner-notice{display:flex;align-items:flex-start;gap:1rem;background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:8px;padding:1rem 1.25rem;margin-bottom:1.5rem}.billing-non-owner-icon{font-size:1.5rem;line-height:1}.billing-non-owner-content{flex:1}.billing-non-owner-title{margin:0 0 .25rem;font-weight:500;color:var(--text-primary)}.billing-non-owner-owner{margin:0;font-size:.875rem;color:var(--text-secondary)}.billing-info-readonly{margin-top:1rem}.billing-owner-notice{display:flex;align-items:flex-start;gap:.5rem;background:#dbeafe;border-radius:6px;padding:.75rem 1rem;margin-top:1rem;font-size:.875rem;color:#1e40af}.billing-owner-notice-icon{font-size:1rem;line-height:1.4}.billing-interest-section{margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid var(--border-color)}.billing-interest-form p{margin:0 0 .75rem;font-size:.875rem;color:var(--text-secondary)}.billing-interest-input-group{display:flex;gap:.5rem}.billing-interest-input-group input{flex:1;padding:.5rem .75rem;border:1px solid var(--border-color);border-radius:6px;font-size:.875rem;background:var(--bg-primary);color:var(--text-primary)}.billing-interest-input-group input:focus{outline:none;border-color:var(--accent-color, #3b82f6)}.billing-interest-success{display:flex;align-items:center;gap:.5rem;color:#16a34a;font-size:.875rem}.billing-interest-success span{font-weight:700}.billing-contact-badge{color:var(--accent-color, #3b82f6);font-size:.875em}@media(max-width:768px){.plans-grid{grid-template-columns:1fr}.trial-banner{flex-direction:column;text-align:center}.billing-current-plan-header{flex-direction:column;align-items:flex-start;gap:.5rem}.billing-interest-input-group{flex-direction:column}.billing-non-owner-notice{flex-direction:column;text-align:center}}.stats-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.25rem;min-width:180px}.stats-card-default{border-left:4px solid var(--accent-color, #3b82f6)}.stats-card-success{border-left:4px solid #22c55e}.stats-card-warning{border-left:4px solid #f59e0b}.stats-card-danger{border-left:4px solid #ef4444}.stats-card-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.5rem}.stats-card-title{font-size:.75rem;font-weight:500;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.stats-card-trend{font-size:.75rem;font-weight:500;padding:.125rem .375rem;border-radius:4px}.stats-card-trend.trend-up{background:#dcfce7;color:#166534}.stats-card-trend.trend-down{background:#fecaca;color:#991b1b}.stats-card-trend.trend-neutral{background:var(--bg-secondary);color:var(--text-secondary)}.stats-card-value{font-size:2rem;font-weight:700;color:var(--text-primary);line-height:1.2}.stats-card-subtitle{font-size:.75rem;color:var(--text-secondary);margin-top:.25rem}.stats-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:1rem;margin-bottom:2rem}.accounts-table-container{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;overflow:hidden}.accounts-table-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.25rem;border-bottom:1px solid var(--border-color)}.accounts-table-header h3{margin:0;font-size:1rem;font-weight:600}.accounts-table-search{display:flex;gap:.5rem}.accounts-table-search input{padding:.5rem .75rem;border:1px solid var(--border-color);border-radius:6px;font-size:.875rem;min-width:200px}.accounts-table-search input:focus{outline:none;border-color:var(--accent-color, #3b82f6)}.accounts-table{width:100%;border-collapse:collapse}.accounts-table th,.accounts-table td{padding:.75rem 1rem;text-align:left;font-size:.875rem}.accounts-table th{background:var(--bg-secondary);font-weight:500;color:var(--text-secondary);border-bottom:1px solid var(--border-color)}.accounts-table tr:not(:last-child) td{border-bottom:1px solid var(--border-color)}.accounts-table tr:hover td{background:var(--bg-secondary)}.accounts-table-email{font-weight:500;color:var(--text-primary)}.accounts-table-name{font-size:.75rem;color:var(--text-secondary)}.accounts-table-plan{display:inline-block;padding:.25rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500}.accounts-table-plan.FREE{background:var(--bg-secondary);color:var(--text-secondary)}.accounts-table-plan.STARTER{background:#dbeafe;color:#1e40af}.accounts-table-plan.FAMILY{background:#dcfce7;color:#166534}.accounts-table-plan.LEGACY{background:#fef3c7;color:#92400e}.accounts-table-status{display:inline-block;padding:.25rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500}.accounts-table-status.ACTIVE,.accounts-table-status.FREE{background:#dcfce7;color:#166534}.accounts-table-status.TRIALING{background:#dbeafe;color:#1e40af}.accounts-table-status.PAST_DUE{background:#fef3c7;color:#92400e}.accounts-table-status.CANCELED,.accounts-table-status.SUSPENDED{background:#fecaca;color:#991b1b}.accounts-table-actions{display:flex;gap:.5rem}.accounts-table-actions button{padding:.25rem .5rem;font-size:.75rem;border:1px solid var(--border-color);border-radius:4px;background:transparent;color:var(--text-secondary);cursor:pointer}.accounts-table-actions button:hover{background:var(--bg-secondary);color:var(--text-primary)}.accounts-table-pagination{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;border-top:1px solid var(--border-color);font-size:.875rem;color:var(--text-secondary)}.accounts-table-pagination-buttons{display:flex;gap:.5rem}.accounts-table-pagination button{padding:.375rem .75rem;border:1px solid var(--border-color);border-radius:4px;background:transparent;cursor:pointer}.accounts-table-pagination button:disabled{opacity:.5;cursor:not-allowed}.admin-dashboard{max-width:1200px;margin:0 auto;padding:2rem}.admin-dashboard-header{margin-bottom:2rem}.admin-dashboard-header h1{margin:0 0 .5rem;font-size:1.5rem}.admin-dashboard-header p{margin:0;color:var(--text-secondary)}.admin-dashboard-section{margin-bottom:2rem}.admin-dashboard-section h2{margin:0 0 1rem;font-size:1rem;font-weight:600;color:var(--text-secondary)}.account-detail{max-width:800px;margin:0 auto;padding:2rem}.account-detail-header{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:2rem}.account-detail-header h1{margin:0 0 .25rem;font-size:1.5rem}.account-detail-header p{margin:0;color:var(--text-secondary)}.account-detail-section{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.25rem;margin-bottom:1rem}.account-detail-section h3{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.account-detail-row{display:flex;justify-content:space-between;padding:.5rem 0;border-bottom:1px solid var(--border-color)}.account-detail-row:last-child{border-bottom:none}.account-detail-label{color:var(--text-secondary);font-size:.875rem}.account-detail-value{font-weight:500;font-size:.875rem}@media(max-width:768px){.admin-dashboard{padding:1rem}.stats-grid{grid-template-columns:repeat(2,1fr)}.accounts-table-container{overflow-x:auto}.accounts-table{min-width:600px}.accounts-table-search{flex-direction:column}.accounts-table-search input{min-width:100%}}.admin-nav-links{display:flex;gap:.75rem;margin:1rem 0}.badge{display:inline-block;padding:.25rem .625rem;border-radius:9999px;font-size:.75rem;font-weight:600;text-transform:uppercase}.badge-neutral{background:var(--bg-secondary);color:var(--text-secondary)}.badge-low{background:#dcfce7;color:#166534}.badge-medium{background:#fef3c7;color:#92400e}.badge-high{background:#fecaca;color:#991b1b}.btn{display:inline-flex;align-items:center;justify-content:center;padding:.5rem 1rem;border-radius:6px;font-size:.875rem;font-weight:500;cursor:pointer;transition:all .2s;text-decoration:none;border:1px solid transparent}.btn-sm{padding:.25rem .5rem;font-size:.75rem}.btn-primary{background:var(--accent-color, #3b82f6);color:#fff}.btn-secondary{background:var(--bg-secondary);color:var(--text-primary);border-color:var(--border-color)}.btn-warning{background:#f59e0b;color:#fff}.btn-success{background:#22c55e;color:#fff}.btn-danger{background:#ef4444;color:#fff}.btn:hover{opacity:.9;transform:translateY(-1px)}.loading-state,.error-state{text-align:center;padding:4rem;color:var(--text-secondary)}.error-state{color:#ef4444}.text-muted{color:var(--text-secondary)}.revenue-split-grid{display:grid;grid-template-columns:2fr 1fr;gap:1.5rem;margin-bottom:2rem}.revenue-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem}.revenue-card h3{margin:0 0 1.5rem;font-size:.875rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.chart-wrapper{width:100%;height:200px;display:flex;align-items:center;justify-content:center}.line-chart-svg{width:100%;height:100%}.chart-placeholder{color:var(--text-secondary);font-size:.875rem;font-style:italic}.funnel-chart{display:flex;flex-direction:column;gap:1.25rem}.funnel-row{display:grid;grid-template-columns:100px 1fr 60px;align-items:center;gap:1rem}.funnel-label{font-size:.875rem;color:var(--text-secondary)}.funnel-bar-bg{height:12px;background:var(--bg-secondary);border-radius:6px;overflow:hidden}.funnel-bar{height:100%;background:var(--accent-color, #3b82f6);border-radius:6px;transition:width .6s ease-out}.funnel-bar.success{background:#22c55e}.funnel-value{font-size:.875rem;font-weight:600;text-align:right}@media(max-width:992px){.revenue-split-grid{grid-template-columns:1fr}}.layout-usage-container{display:grid;grid-template-columns:200px 1fr;gap:2rem;align-items:center;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem}.layout-usage-chart{display:flex;align-items:center;justify-content:center}.pie-chart-svg{width:160px;height:160px}.pie-chart-empty{width:160px;height:160px;display:flex;align-items:center;justify-content:center;background:var(--bg-secondary);border-radius:50%;color:var(--text-secondary);font-size:.875rem}.layout-usage-legend{display:flex;flex-direction:column;gap:.75rem}.layout-legend-item{display:flex;align-items:center;gap:.75rem}.layout-legend-color{width:12px;height:12px;border-radius:2px;flex-shrink:0}.layout-legend-label{flex:1;font-size:.875rem;color:var(--text-primary)}.layout-legend-value{font-size:.875rem;font-weight:600;color:var(--text-primary)}.info-banner{background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px;padding:1rem;font-size:.875rem;color:#1e40af}.info-banner strong{font-weight:600}@media(max-width:768px){.layout-usage-container{grid-template-columns:1fr;text-align:center}.layout-usage-legend{flex-direction:row;flex-wrap:wrap;justify-content:center}.layout-legend-item{min-width:100px}}.families-table-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem;gap:1rem;flex-wrap:wrap}.families-search{display:flex;gap:.5rem}.families-search input{padding:.5rem .75rem;border:1px solid var(--border-color);border-radius:6px;font-size:.875rem;min-width:250px}.families-search input:focus{outline:none;border-color:var(--accent-color, #3b82f6)}.families-actions{display:flex;align-items:center;gap:1rem}.families-count{font-size:.875rem;color:var(--text-secondary)}.families-table-container{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;overflow:hidden}.families-table{width:100%;border-collapse:collapse}.families-table th{padding:.875rem 1rem;text-align:left;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);background:var(--bg-secondary);border-bottom:1px solid var(--border-color)}.families-table th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none}.families-table th.sortable:hover{color:var(--text-primary)}.sort-icon{margin-left:.25rem;font-size:.75rem}.families-table td{padding:.875rem 1rem;font-size:.875rem;border-bottom:1px solid var(--border-color)}.families-table tbody tr:last-child td{border-bottom:none}.families-table .clickable-row{cursor:pointer;transition:background .15s}.families-table .clickable-row:hover{background:var(--bg-secondary)}.family-name{font-weight:500;color:var(--text-primary)}.owner-cell{display:flex;flex-direction:column;gap:.125rem}.owner-name{font-weight:500;color:var(--text-primary)}.owner-email{font-size:.75rem;color:var(--text-secondary)}.families-table .numeric{text-align:right;font-variant-numeric:tabular-nums}.plan-badge{display:inline-block;padding:.25rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500}.plan-badge.FREE{background:var(--bg-secondary);color:var(--text-secondary)}.plan-badge.STARTER{background:#dbeafe;color:#1e40af}.plan-badge.FAMILY{background:#dcfce7;color:#166534}.plan-badge.LEGACY{background:#fef3c7;color:#92400e}.table-loading,.table-empty{text-align:center;padding:3rem;color:var(--text-secondary)}.table-pagination{display:flex;justify-content:space-between;align-items:center;padding:.875rem 1rem;border-top:1px solid var(--border-color);font-size:.875rem;color:var(--text-secondary)}.pagination-buttons{display:flex;gap:.5rem}@media(max-width:768px){.families-table-header{flex-direction:column;align-items:stretch}.families-search{flex-direction:column}.families-search input{min-width:100%}.families-table-container{overflow-x:auto}.families-table{min-width:700px}}.family-detail-header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem;flex-wrap:wrap}.family-meta{color:var(--text-secondary);margin:0}.family-detail-badges{display:flex;gap:.5rem}.status-badge{display:inline-block;padding:.25rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500}.status-badge.ACTIVE,.status-badge.FREE{background:#dcfce7;color:#166534}.status-badge.TRIALING{background:#dbeafe;color:#1e40af}.status-badge.PAST_DUE{background:#fef3c7;color:#92400e}.status-badge.CANCELED,.status-badge.SUSPENDED{background:#fecaca;color:#991b1b}.layout-usage-horizontal{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem;display:flex;flex-direction:column;gap:1rem}.layout-bar-item{display:grid;grid-template-columns:120px 1fr 50px;align-items:center;gap:1rem}.layout-bar-label{display:flex;align-items:center;gap:.5rem;font-size:.875rem}.layout-bar-dot{width:10px;height:10px;border-radius:2px;flex-shrink:0}.layout-bar-track{height:8px;background:var(--bg-secondary);border-radius:4px;overflow:hidden}.layout-bar-fill{height:100%;border-radius:4px;transition:width .3s ease}.layout-bar-value{font-size:.875rem;font-weight:600;text-align:right}.owner-info-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.25rem;display:flex;justify-content:space-between;align-items:center}.owner-info-main{display:flex;flex-direction:column;gap:.25rem}.owner-info-name{font-weight:600;font-size:1rem}.owner-info-email,.owner-info-meta{font-size:.875rem;color:var(--text-secondary)}.contributors-table-container{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;overflow:hidden}.contributors-table{width:100%;border-collapse:collapse}.contributors-table th{padding:.875rem 1rem;text-align:left;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);background:var(--bg-secondary);border-bottom:1px solid var(--border-color)}.contributors-table td{padding:.875rem 1rem;font-size:.875rem;border-bottom:1px solid var(--border-color)}.contributors-table tbody tr:last-child td{border-bottom:none}.contributor-name{font-weight:500}.contributor-email{color:var(--text-secondary)}.role-badge{display:inline-block;padding:.25rem .5rem;border-radius:4px;font-size:.75rem;font-weight:500;text-transform:uppercase}.role-badge.role-owner{background:#fef3c7;color:#92400e}.role-badge.role-maintainer{background:#dbeafe;color:#1e40af}.role-badge.role-member{background:#dcfce7;color:#166534}.role-badge.role-viewer{background:var(--bg-secondary);color:var(--text-secondary)}.no-data-message{text-align:center;padding:2rem;color:var(--text-secondary);background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px}@media(max-width:768px){.family-detail-header{flex-direction:column}.layout-bar-item{grid-template-columns:100px 1fr 40px;gap:.5rem}.contributors-table-container{overflow-x:auto}.contributors-table{min-width:600px}}.insights-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1rem}.insight-card{display:flex;align-items:flex-start;gap:.75rem;background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1rem 1.25rem}.insight-icon{font-size:1.25rem;flex-shrink:0}.insight-text{font-size:.875rem;color:var(--text-primary);line-height:1.5}.device-comparison-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:1.5rem}.device-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.25rem}.device-card h3{margin:0 0 1rem;font-size:.875rem;font-weight:600;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.device-layout-bars{display:flex;flex-direction:column;gap:.75rem}.layout-bar-item.compact{grid-template-columns:90px 1fr 45px}.metrics-comparison-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(350px,1fr));gap:1.5rem}.metrics-card{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;padding:1.5rem}.metrics-card h3{margin:0 0 .25rem;font-size:1rem;font-weight:600}.metrics-subtitle{margin:0 0 1.25rem;font-size:.75rem;color:var(--text-secondary)}.metrics-bars{display:flex;flex-direction:column;gap:.875rem}.metric-bar-row{display:grid;grid-template-columns:90px 1fr 60px;align-items:center;gap:.75rem}.metric-bar-label{font-size:.875rem;color:var(--text-secondary)}.metric-bar-track{height:8px;background:var(--bg-secondary);border-radius:4px;overflow:hidden}.metric-bar-fill{height:100%;border-radius:4px;transition:width .3s ease}.metric-bar-fill.success{background:#22c55e}.metric-bar-fill.warning{background:#f59e0b}.metric-bar-fill.danger{background:#ef4444}.metric-bar-value{font-size:.875rem;font-weight:600;text-align:right}.switch-flow-container{background:var(--bg-primary);border:1px solid var(--border-color);border-radius:12px;overflow:hidden}.switch-flow-table{width:100%;border-collapse:collapse}.switch-flow-table th{padding:.875rem 1rem;text-align:left;font-size:.75rem;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);background:var(--bg-secondary);border-bottom:1px solid var(--border-color)}.switch-flow-table td{padding:.75rem 1rem;font-size:.875rem;border-bottom:1px solid var(--border-color)}.switch-flow-table tbody tr:last-child td{border-bottom:none}.layout-badge{display:inline-block;padding:.25rem .625rem;border-radius:4px;font-size:.75rem;font-weight:500;color:#fff}.flow-arrow{display:inline-block;margin:0 .5rem;color:var(--text-secondary)}@media(max-width:768px){.device-comparison-grid,.metrics-comparison-grid{grid-template-columns:1fr}.metric-bar-row{grid-template-columns:80px 1fr 50px}}:root{--breakpoint-sm: 480px;--breakpoint-md: 768px;--breakpoint-lg: 1024px;--breakpoint-xl: 1280px;--spacing-xs: .25rem;--spacing-sm: .5rem;--spacing-md: 1rem;--spacing-lg: 1.5rem;--spacing-xl: 2rem;--touch-target-min: 44px;--tap-highlight-color: rgba(0, 0, 0, .1)}*{margin:0;padding:0;box-sizing:border-box}html,body,#root{width:100%;height:100%;overflow-x:hidden}html{-webkit-text-size-adjust:100%;text-size-adjust:100%}body{font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Oxygen,Ubuntu,sans-serif;background-color:#f5f5f5;font-size:16px;line-height:1.5;-webkit-overflow-scrolling:touch}a,button,input,select,textarea,[role=button],[tabindex]:not([tabindex="-1"]){touch-action:manipulation}button,[role=button],input[type=submit],input[type=button],input[type=reset]{min-height:var(--touch-target-min)}*{-webkit-tap-highlight-color:transparent}.app{display:flex;flex-direction:column;height:100%}.header{background:#2c3e50;color:#fff;padding:.75rem 1rem;display:flex;justify-content:space-between;align-items:center;gap:1rem;transition:transform .25s ease-out;will-change:transform;z-index:100}.header.header-two-row{flex-direction:column;padding:0;gap:0}.header-row-1{width:100%;padding:.5rem 1rem;background:#1a252f;border-bottom:1px solid #34495e;display:flex;justify-content:space-between;align-items:center}.header-row-1 h1{margin:0;font-size:1.25rem;font-weight:600;flex-shrink:0}.header-row-1-center{display:flex;align-items:center;justify-content:center;gap:1rem;flex:1}.header-row-1-spacer{width:100px;flex-shrink:0}.header-row-2{width:100%;padding:.5rem 1rem;display:flex;justify-content:space-between;align-items:center;gap:1rem}.header-left{display:flex;align-items:center;gap:.75rem}.header-center{flex:1;display:flex;justify-content:center;align-items:center;gap:1rem}.header-right{display:flex;align-items:center;gap:.5rem}.header h1{font-size:1.25rem;white-space:nowrap}.center-person-selector{display:flex;align-items:center;gap:.5rem;background:#ffffff1a;padding:.25rem .75rem;border-radius:4px}.center-person-selector label{font-size:.875rem;color:#bdc3c7;white-space:nowrap}.center-person-dropdown{background:#34495e;color:#fff;border:1px solid #4a6278;border-radius:4px;padding:.35rem .5rem;font-size:.875rem;min-width:150px;max-width:200px;cursor:pointer}.center-person-dropdown:hover{background:#3d566e;border-color:#5a7a9a}.center-person-dropdown:focus{outline:none;border-color:#3498db;box-shadow:0 0 0 2px #3498db4d}.center-person-dropdown option{background:#2c3e50;color:#fff;padding:.5rem}.generations-selector{display:flex;align-items:center;gap:.5rem;background:#ffffff1a;padding:.25rem .75rem;border-radius:4px}.generations-selector label{font-size:.875rem;color:#bdc3c7;white-space:nowrap}.generations-dropdown{background:#34495e;color:#fff;border:1px solid #4a6278;border-radius:4px;padding:.35rem .5rem;font-size:.875rem;min-width:60px;cursor:pointer}.generations-dropdown:hover{background:#3d566e;border-color:#5a7a9a}.generations-dropdown:focus{outline:none;border-color:#3498db;box-shadow:0 0 0 2px #3498db4d}.generations-dropdown option{background:#2c3e50;color:#fff;padding:.5rem}.layout-selector{display:flex;align-items:center;gap:.5rem;background:#ffffff1a;padding:.25rem .75rem;border-radius:4px}.layout-selector label{font-size:.875rem;color:#bdc3c7;white-space:nowrap}.layout-dropdown{background:#34495e;color:#fff;border:1px solid #4a6278;border-radius:4px;padding:.35rem .5rem;font-size:.875rem;min-width:100px;cursor:pointer}.layout-dropdown:hover{background:#3d566e;border-color:#5a7a9a}.layout-dropdown:focus{outline:none;border-color:#3498db;box-shadow:0 0 0 2px #3498db4d}.layout-dropdown option{background:#2c3e50;color:#fff;padding:.5rem}.center-person-selector.stacked,.generations-selector.stacked,.layout-selector.stacked{flex-direction:column;align-items:center;gap:.25rem;padding:.35rem .75rem}.center-person-selector.stacked label,.generations-selector.stacked label,.layout-selector.stacked label{font-size:.75rem;text-transform:uppercase;letter-spacing:.5px;color:#95a5a6}.center-person-selector.disabled,.generations-selector.disabled,.layout-selector.disabled{opacity:.5}.center-person-selector.disabled select,.generations-selector.disabled select,.layout-selector.disabled select{cursor:not-allowed;background:#2a3a48}.search-box{position:relative;flex:0 0 auto}.search-input-wrapper{position:relative;display:flex;align-items:center}.search-icon{position:absolute;right:.75rem;font-size:.875rem;pointer-events:none;opacity:.6}.search-input{width:220px;padding:.5rem 2rem .5rem .75rem;border:1px solid rgba(255,255,255,.3);border-radius:6px;background:#ffffff1a;color:#fff;font-size:.875rem;transition:all .2s}.search-input::placeholder{color:#ffffff80}.search-input:focus{outline:none;background:#ffffff26;border-color:#ffffff80;width:280px}.search-clear{position:absolute;right:.5rem;background:none;border:none;color:#ffffff80;font-size:1.25rem;cursor:pointer;padding:0;line-height:1}.search-clear:hover{color:#fff}.search-dropdown{position:absolute;top:100%;left:0;right:0;margin-top:.25rem;background:#fff;border-radius:6px;box-shadow:0 4px 20px #0003;max-height:300px;overflow-y:auto;z-index:1000}.search-result{display:flex;justify-content:space-between;align-items:center;padding:.75rem 1rem;cursor:pointer;transition:background .15s}.search-result:hover,.search-result.selected{background:#f0f4f8}.search-result.selected{background:#e3f2fd}.result-name{color:#2c3e50;font-size:.875rem}.result-name mark{background:#fff3cd;padding:0 2px;border-radius:2px}.result-date{color:#7f8c8d;font-size:.75rem}.search-no-results{padding:1rem;text-align:center;color:#7f8c8d;font-size:.875rem}.search-more{padding:.5rem 1rem;text-align:center;color:#7f8c8d;font-size:.75rem;border-top:1px solid #eee}.controls{display:flex;gap:1rem;align-items:center}.controls label{display:flex;align-items:center;gap:.5rem}.controls select{padding:.25rem .5rem;border-radius:4px;border:none}.controls .checkbox-label{display:flex;align-items:center;gap:.25rem;cursor:pointer}.controls .checkbox-label input[type=checkbox]{width:16px;height:16px;cursor:pointer}.graph-container{flex:1;position:relative;overflow:hidden}.graph-container svg{width:100%;height:100%}.node{cursor:pointer;transition:opacity .3s ease;will-change:transform,opacity}.node circle{stroke-width:2px;transition:stroke-width .2s ease,r .1s ease-out;transform-origin:center}.node:hover circle{stroke-width:4px}.node:hover:not(.center){filter:brightness(1.1)}.node.clicking circle{filter:brightness(1.2)}.node:active circle{filter:brightness(1.15)}.node:focus circle{stroke-width:4px;filter:drop-shadow(0 0 4px rgba(52,152,219,.6))}.node-ripple{position:absolute;border-radius:50%;background:#fff6;transform:scale(0);animation:ripple-effect .4s ease-out forwards;pointer-events:none}@keyframes ripple-effect{to{transform:scale(2);opacity:0}}.node.confirmed circle{fill:#3498db;stroke:#2980b9}.node.placeholder circle{fill:#fff;stroke:#95a5a6;stroke-dasharray:4,2}.node.center circle{stroke:#e74c3c;stroke-width:3px;filter:drop-shadow(0 0 6px rgba(231,76,60,.4))}.node.center{cursor:pointer}.node circle.rel-self{fill:#2c3e50;stroke:#1a252f}.node circle.rel-parent{fill:#3498db;stroke:#2980b9}.node circle.rel-child{fill:#27ae60;stroke:#1e8449}.node circle.rel-sibling{fill:#9b59b6;stroke:#7d3c98}.node circle.rel-partner{fill:#e74c3c;stroke:#c0392b}.node circle.rel-extended{fill:#f39c12;stroke:#d68910}.node circle.rel-unknown{fill:#95a5a6;stroke:#7f8c8d}.node circle.rel-disconnected{fill:#bdc3c7;stroke:#95a5a6}.node.center:hover circle{stroke-width:4px}.node.highlighted circle{stroke:#f39c12;stroke-width:4px;filter:drop-shadow(0 0 8px rgba(243,156,18,.6))}.node.highlighted text{font-weight:600}.node.dimmed{opacity:.3}.node.dimmed circle{filter:grayscale(.5)}.node text{font-size:12px;text-anchor:middle;pointer-events:none}.link{fill:none;stroke-width:2px}.link.parent-child{stroke:#7f8c8d}.link.parent-child.biological{stroke:#27ae60}.link.parent-child.adoptive,.link.parent-child.step,.link.parent-child.foster{stroke:#9b59b6;stroke-dasharray:5,5}.link.partnership{stroke:#e91e63}.link.partnership.divorced{stroke-dasharray:3,3}.link.sibling{stroke:#9b59b6;stroke-width:2px}.link.sibling.full{stroke:#9b59b6;stroke-width:3px}.link.sibling.half-maternal,.link.sibling.half-paternal{stroke:#bb8fce;stroke-dasharray:8,4}.link.sibling.step{stroke:#9b59b6;stroke-dasharray:4,4}.link.sibling.adoptive{stroke:#8e44ad;stroke-dasharray:6,3}.arrow-head{fill:currentColor}.arrow-head.biological{fill:#27ae60}.arrow-head.non-biological{fill:#9b59b6}.arrow-head.unknown{fill:#7f8c8d}.empty-state{display:flex;flex-direction:column;align-items:center;justify-content:center;height:100%;color:#7f8c8d;text-align:center;padding:2rem}.empty-state h2{margin-bottom:.5rem;color:#2c3e50}.empty-state p{margin-bottom:1.5rem;font-size:1rem}.empty-state-action{font-size:1rem;padding:.75rem 1.5rem}.tooltip{position:absolute;background:#000c;color:#fff;padding:.5rem 1rem;border-radius:4px;font-size:14px;pointer-events:none;z-index:100}.sample-data-badge{background:#f39c12;color:#fff;padding:.25rem .75rem;border-radius:12px;font-size:.75rem;font-weight:600;text-transform:uppercase}.main-content{display:flex;flex:1;overflow:hidden}.main-content .graph-container{flex:1}.btn-primary,.btn-secondary,.btn-danger{padding:.5rem 1rem;border:none;border-radius:4px;cursor:pointer;font-size:.875rem;font-weight:500;transition:background-color .2s,opacity .2s}.btn-primary{background:#3498db;color:#fff}.btn-primary:hover{background:#2980b9}.btn-primary:disabled{background:#bdc3c7;cursor:not-allowed}.btn-secondary{background:#ecf0f1;color:#2c3e50}.btn-secondary:hover{background:#bdc3c7}.btn-danger{background:#e74c3c;color:#fff}.btn-danger:hover{background:#c0392b}.btn-danger:disabled{background:#bdc3c7;cursor:not-allowed}.btn-close{background:none;border:none;font-size:1.5rem;cursor:pointer;color:#7f8c8d;line-height:1}.btn-close:hover{color:#2c3e50}.btn-add{background:#27ae60;color:#fff;padding:.5rem 1rem;border:none;border-radius:4px;cursor:pointer;font-size:.875rem;font-weight:500;display:flex;align-items:center;gap:.5rem}.btn-add:hover{background:#219a52}.export-dropdown{position:relative}.btn-export{background:#3498db;color:#fff;padding:.5rem 1rem;border:none;border-radius:4px;cursor:pointer;font-size:.875rem;font-weight:500}.btn-export:hover{background:#2980b9}.export-menu{position:absolute;top:100%;left:0;margin-top:.25rem;background:#fff;border:1px solid #ddd;border-radius:4px;box-shadow:0 2px 8px #00000026;z-index:1000;min-width:140px}.export-menu button{display:block;width:100%;padding:.5rem 1rem;border:none;background:none;text-align:left;cursor:pointer;font-size:.875rem;color:#2c3e50}.export-menu button:hover{background:#f0f0f0}.export-menu button:first-child{border-radius:4px 4px 0 0}.export-menu button:last-child{border-radius:0 0 4px 4px}.layout-toggle{display:flex;border-radius:4px;overflow:hidden;border:1px solid rgba(255,255,255,.3)}.layout-btn{padding:.4rem .75rem;border:none;background:#ffffff1a;color:#ffffffb3;cursor:pointer;font-size:.8rem;font-weight:500;transition:background .2s,color .2s}.layout-btn:first-child{border-right:1px solid rgba(255,255,255,.2)}.layout-btn:hover{background:#fff3;color:#fff}.layout-btn.active{background:#ffffff40;color:#fff}.view-toggle{display:flex;border-radius:4px;overflow:hidden;border:1px solid rgba(255,255,255,.3)}.view-btn{padding:.4rem .75rem;border:none;background:#ffffff1a;color:#ffffffb3;cursor:pointer;font-size:.8rem;font-weight:500;transition:background .2s,color .2s}.view-btn:first-child{border-right:1px solid rgba(255,255,255,.2)}.view-btn:hover{background:#fff3;color:#fff}.view-btn.active{background:#ffffff40;color:#fff}.timeline-container{width:100%;height:100%;position:relative;background:#fff}.timeline-container svg{width:100%;height:100%}.timeline-bar{transition:opacity .2s}.timeline-bar.male{fill:#3498db}.timeline-bar.female{fill:#e91e8f}.timeline-bar.other,.timeline-bar.unknown{fill:#95a5a6}.timeline-bar.placeholder{fill-opacity:.5;stroke-dasharray:4,2}.timeline-bar:hover{opacity:.8;filter:brightness(1.1)}.timeline-bar-group:hover .timeline-bar{stroke:#2c3e50;stroke-width:2}.person-name{transition:fill .2s}.person-name:hover{fill:#3498db;font-weight:500}.ongoing-indicator{opacity:.9}.timeline-tooltip{position:fixed;background:#2c3e50f2;color:#fff;padding:.75rem 1rem;border-radius:6px;font-size:.875rem;pointer-events:none;z-index:1000;max-width:250px;box-shadow:0 4px 12px #0003}.tooltip-name{font-weight:600;margin-bottom:.25rem}.tooltip-dates{opacity:.9;font-size:.8rem}.tooltip-gender{margin-top:.25rem;opacity:.7;font-size:.75rem;text-transform:capitalize}.person-panel{width:320px;background:#fff;border-left:1px solid #ddd;display:flex;flex-direction:column;overflow-y:auto}.panel-header{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid #ddd;background:#f8f9fa}.panel-header h2{font-size:1.25rem;margin:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.panel-title{display:flex;align-items:center;gap:.5rem;overflow:hidden}.center-badge{background:#e74c3c;color:#fff;padding:.125rem .5rem;border-radius:12px;font-size:.7rem;font-weight:600;text-transform:uppercase;flex-shrink:0}.person-details{padding:1rem;flex:1}.detail-row{display:flex;margin-bottom:.75rem}.detail-row .label{font-weight:500;color:#7f8c8d;min-width:100px}.status-badge{padding:.125rem .5rem;border-radius:12px;font-size:.75rem;font-weight:500}.status-badge.placeholder{background:#f39c12;color:#fff}.status-badge.confirmed{background:#27ae60;color:#fff}.table-view-action{padding:.75rem 1rem;border-top:1px solid #eee;text-align:center}.table-view-action button{width:100%}.panel-actions{padding:1rem;border-top:1px solid #ddd;display:flex;flex-direction:column;gap:.5rem}.person-form{padding:1rem}.form-group{margin-bottom:1rem}.form-group label{display:block;margin-bottom:.25rem;font-weight:500;color:#2c3e50}.form-group input,.form-group select,.form-group textarea{width:100%;padding:.5rem;border:1px solid #ddd;border-radius:4px;font-size:.875rem}.form-group input:focus,.form-group select:focus,.form-group textarea:focus{outline:none;border-color:#3498db;box-shadow:0 0 0 2px #3498db33}.form-group textarea{resize:vertical}.form-actions{display:flex;gap:.5rem;justify-content:flex-end;margin-top:1rem}.next-step-options{margin-top:1.5rem;padding-top:1rem;border-top:1px solid #e0e0e0}.radio-option{display:flex;align-items:flex-start;gap:.75rem;padding:.75rem;border:1px solid #e0e0e0;border-radius:6px;cursor:pointer;transition:all .15s}.radio-option:hover{background:#f8f9fa;border-color:silver}.radio-option:has(input:checked){background:#e8f4fc;border-color:#2196f3}.radio-option input[type=radio]{width:auto;margin:2px 0 0}.radio-label{display:flex;flex-direction:column;gap:.125rem}.radio-label strong{font-weight:600;font-size:.9375rem}.radio-description{font-size:.8125rem;color:#666}.add-relationship-step{padding:1rem}.add-relationship-step h3{margin:0 0 .5rem;font-size:1rem}.step-hint{color:#666;font-size:.875rem;margin:0 0 1rem}.person-select-list{max-height:200px;overflow-y:auto;border:1px solid #ddd;border-radius:4px;padding:.5rem;margin-bottom:1rem}.person-select-item{display:flex;align-items:center;gap:.5rem;padding:.5rem;cursor:pointer;border-radius:4px;transition:background-color .15s}.person-select-item:hover{background:#f5f5f5}.person-select-item input[type=checkbox]{width:auto;margin:0}.person-select-item input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed}.person-select-name{flex:1;font-weight:500}.person-select-date{font-size:.75rem;color:#888}.parent-select-item{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;padding:.5rem;cursor:pointer;border-radius:4px;transition:background-color .15s}.parent-select-item:hover{background:#f5f5f5}.parent-select-item.selected{background:#e8f4fd;border:1px solid #3498db}.parent-select-checkbox{display:flex;align-items:center;gap:.5rem;flex:1;cursor:pointer}.parent-select-checkbox input[type=checkbox]{width:auto;margin:0}.parent-select-checkbox input[type=checkbox]:disabled{opacity:.5;cursor:not-allowed}.role-select{padding:.25rem .5rem;border:1px solid #ddd;border-radius:4px;font-size:.75rem;background:#fff;cursor:pointer;min-width:100px}.role-select:focus{outline:none;border-color:#3498db}.empty-state{text-align:center;padding:2rem 1rem;color:#666}.empty-state p{margin:.5rem 0}.error-message{background:#fee;color:#c0392b;padding:.75rem;margin:.5rem 1rem;border-radius:4px;font-size:.875rem}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000;padding:1rem;padding-top:max(1rem,env(safe-area-inset-top));padding-bottom:max(1rem,env(safe-area-inset-bottom));box-sizing:border-box}.modal-content{background:#fff;border-radius:8px;width:400px;max-width:calc(100vw - 2rem);max-height:calc(100vh - 2rem);overflow-y:auto;box-shadow:0 4px 20px #00000026}.modal-content .panel-header{border-radius:8px 8px 0 0}.relationship-form{padding:1rem}.relationship-form h3{margin-bottom:1rem;color:#2c3e50}.radio-group{display:flex;flex-direction:column;gap:.5rem}.radio-label{display:flex;align-items:center;gap:.5rem;cursor:pointer;padding:.5rem;border-radius:4px;transition:background-color .2s}.radio-label:hover{background:#f8f9fa}.radio-label input[type=radio]{width:auto}.tab-group{display:flex;border-bottom:2px solid #ddd;margin-bottom:1rem}.tab{flex:1;padding:.75rem 1rem;border:none;background:none;cursor:pointer;font-size:.875rem;font-weight:500;color:#7f8c8d;border-bottom:2px solid transparent;margin-bottom:-2px;transition:color .2s,border-color .2s}.tab:hover{color:#2c3e50}.tab.active{color:#3498db;border-bottom-color:#3498db}.relationship-tabs .tab{padding:.75rem .5rem;font-size:.8rem}@media(min-width:480px){.relationship-tabs .tab{padding:.75rem 1rem;font-size:.875rem}}.relationship-hint{color:#666;font-size:.875rem;margin:0;padding:.5rem;background:#f5f5f5;border-radius:4px}.empty-hint{color:#888;font-size:.875rem;font-style:italic;text-align:center;padding:1rem;margin:0}.merge-modal-content{padding:1rem}.merge-description{margin-bottom:1rem;color:#555;line-height:1.5}.merge-empty{text-align:center;padding:2rem 1rem}.merge-empty .hint{color:#95a5a6;font-size:.875rem;margin-top:.5rem}.merge-candidates h3{margin-bottom:1rem;color:#2c3e50;font-size:1rem}.merge-candidate{display:flex;justify-content:space-between;align-items:center;padding:1rem;border:1px solid #ddd;border-radius:4px;margin-bottom:.5rem;background:#f8f9fa}.merge-candidate:hover{border-color:#3498db}.candidate-info{display:flex;flex-direction:column;gap:.25rem}.candidate-info strong{color:#2c3e50}.match-score{font-size:.875rem;color:#27ae60;font-weight:500}.match-reason{font-size:.75rem;color:#7f8c8d}.confidence-badge{padding:.125rem .5rem;border-radius:12px;font-size:.75rem;font-weight:500}.confidence-badge.low{background:#e74c3c;color:#fff}.confidence-badge.medium{background:#f39c12;color:#fff}.confidence-badge.high{background:#27ae60;color:#fff}.confidence-badge.verified{background:#3498db;color:#fff}.relationship-list{padding:1rem;border-top:1px solid #ddd}.relationship-list h3{margin-bottom:.75rem;font-size:1rem;color:#2c3e50}.relationship-group{margin-bottom:1rem}.relationship-group h4{font-size:.875rem;color:#7f8c8d;margin-bottom:.5rem;font-weight:500}.relationship-item{display:flex;justify-content:space-between;align-items:center;padding:.5rem;background:#f8f9fa;border-radius:4px;margin-bottom:.25rem}.relationship-item:hover{background:#ecf0f1}.relationship-info{display:flex;flex-direction:column;gap:.25rem;flex:1}.relationship-name{font-weight:500;color:#2c3e50}.relationship-role{font-size:.75rem;color:#7f8c8d}.relationship-actions{display:flex;gap:.25rem}.btn-icon{background:none;border:none;cursor:pointer;font-size:1rem;padding:.25rem .5rem;border-radius:4px;color:#7f8c8d;transition:background-color .2s,color .2s}.btn-icon:hover{background:#ddd;color:#2c3e50}.btn-icon-danger:hover{background:#fee;color:#e74c3c}.btn-icon:disabled{opacity:.5;cursor:not-allowed}.relationship-edit-form{display:flex;flex-direction:column;gap:.5rem;margin-top:.25rem}.relationship-edit-form select{padding:.25rem .5rem;border:1px solid #ddd;border-radius:4px;font-size:.875rem}.relationship-edit-actions{display:flex;gap:.5rem}.btn-small{padding:.25rem .5rem;font-size:.75rem;border:none;border-radius:4px;cursor:pointer}.btn-small.btn-primary{background:#3498db;color:#fff}.btn-small.btn-primary:hover{background:#2980b9}.btn-small.btn-secondary{background:#ecf0f1;color:#2c3e50}.btn-small.btn-secondary:hover{background:#bdc3c7}.btn-small:disabled{opacity:.5;cursor:not-allowed}.relationships-table-modal{background:#fff;border-radius:8px;width:800px;max-width:95vw;max-height:90vh;display:flex;flex-direction:column;box-shadow:0 4px 20px #00000026}.table-controls{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid #ddd;gap:1rem}.table-controls-left{display:flex;gap:.5rem;flex:1}.filter-select{padding:.5rem;border:1px solid #ddd;border-radius:4px;font-size:.875rem;min-width:120px}.search-input{padding:.5rem;border:1px solid #ddd;border-radius:4px;font-size:.875rem;flex:1;max-width:250px}.table-container{flex:1;overflow-y:auto;padding:0 1rem}.relationships-table{width:100%;border-collapse:collapse;font-size:.875rem}.relationships-table th{background:#f8f9fa;padding:.75rem;text-align:left;font-weight:600;border-bottom:2px solid #ddd;cursor:pointer;-webkit-user-select:none;user-select:none;white-space:nowrap}.relationships-table th:hover{background:#ecf0f1}.relationships-table td{padding:.75rem;border-bottom:1px solid #eee}.relationships-table tbody tr:hover{background:#f8f9fa}.relationships-table .clickable-row{cursor:pointer}.relationships-table .clickable-row:hover{background:#e8f4fd}.person-name-cell{font-weight:500;color:#2c3e50}.degree-cell{text-align:center}.empty-row{text-align:center;color:#7f8c8d;padding:2rem!important}.table-footer{padding:1rem;border-top:1px solid #ddd;display:flex;justify-content:space-between;align-items:center}.relationship-count{font-size:.875rem;color:#7f8c8d}.import-modal{background:#fff;border-radius:8px;width:90%;max-width:600px;max-height:80vh;overflow-y:auto;box-shadow:0 4px 20px #0000004d}.import-upload{padding:2rem}.drop-zone{border:2px dashed #bdc3c7;border-radius:8px;padding:3rem 2rem;text-align:center;cursor:pointer;transition:all .2s ease}.drop-zone:hover,.drop-zone.dragging{border-color:#3498db;background:#f8f9fa}.drop-zone-content{pointer-events:none}.drop-icon{font-size:3rem;margin-bottom:1rem}.drop-zone p{margin:.5rem 0;color:#2c3e50}.drop-hint{font-size:.875rem;color:#7f8c8d}.import-note{text-align:center;margin-top:1rem;font-size:.875rem;color:#7f8c8d}.import-preview{padding:1.5rem}.preview-summary h3{margin:0 0 1rem;font-size:1.1rem;color:#2c3e50}.preview-counts{display:flex;gap:1rem;flex-wrap:wrap;margin-bottom:1.5rem}.count-item{flex:1;min-width:100px;background:#f8f9fa;padding:1rem;border-radius:8px;text-align:center}.count-item.warning{background:#fef3cd}.count-value{display:block;font-size:1.5rem;font-weight:600;color:#2c3e50}.count-label{font-size:.75rem;color:#7f8c8d;text-transform:uppercase}.duplicate-option{margin-bottom:1.5rem;padding:.75rem;background:#fef3cd;border-radius:4px}.duplicate-option label{display:flex;align-items:center;gap:.5rem;cursor:pointer}.preview-section{margin-bottom:1.5rem}.preview-section h4{margin:0 0 .75rem;font-size:.9rem;color:#2c3e50}.preview-list{max-height:200px;overflow-y:auto;border:1px solid #ddd;border-radius:4px}.preview-item{display:flex;gap:.75rem;align-items:center;padding:.5rem .75rem;border-bottom:1px solid #eee}.preview-item:last-child{border-bottom:none}.preview-item.duplicate{background:#fef3cd}.item-name{flex:1;font-weight:500}.item-detail{font-size:.875rem;color:#7f8c8d}.duplicate-badge{font-size:.75rem;padding:.125rem .5rem;background:#f39c12;color:#fff;border-radius:4px}.preview-more{padding:.5rem;text-align:center;font-size:.875rem;color:#7f8c8d;font-style:italic}.preview-section.warnings{background:#fef3cd;padding:.75rem;border-radius:4px}.warning-list{font-size:.875rem}.warning-item{padding:.25rem 0;color:#856404}.import-actions{display:flex;justify-content:flex-end;gap:.75rem;padding-top:1rem;border-top:1px solid #ddd}.import-progress{padding:3rem;text-align:center}.spinner{width:40px;height:40px;border:3px solid #eee;border-top-color:#3498db;border-radius:50%;margin:0 auto 1rem;animation:spin 1s linear infinite}.import-complete{padding:2rem;text-align:center}.success-icon{width:60px;height:60px;background:#27ae60;color:#fff;font-size:2rem;line-height:60px;border-radius:50%;margin:0 auto 1rem}.import-complete h3{margin:0 0 1.5rem;color:#27ae60}.result-summary{margin-bottom:1.5rem}.result-summary p{margin:.5rem 0}.result-errors{background:#fef3cd;padding:1rem;border-radius:4px;text-align:left;margin-bottom:1.5rem}.result-errors ul{margin:.5rem 0 0 1rem;padding:0;font-size:.875rem}.btn-import{background:#9b59b6;color:#fff;padding:.5rem 1rem;border:none;border-radius:4px;cursor:pointer;font-size:.875rem;font-weight:500}.btn-import:hover{background:#8e44ad}.btn-experimental{background:#7f8c8d;color:#fff;padding:.5rem .75rem;border:none;border-radius:4px;cursor:pointer;font-size:.75rem;font-weight:500;opacity:.8;transition:all .2s}.btn-experimental:hover{background:#6c7a7b;opacity:1}.btn-experimental.active{background:#e67e22;opacity:1}.btn-experimental.active:hover{background:#d35400}.settings-dropdown{position:relative}.btn-settings{background:#ffffff1a;color:#fff;padding:.5rem .75rem;border:1px solid rgba(255,255,255,.2);border-radius:4px;cursor:pointer;font-size:.875rem;transition:all .2s}.btn-settings:hover{background:#fff3;border-color:#ffffff4d}.settings-menu{position:absolute;top:100%;right:0;margin-top:.5rem;background:#fff;border-radius:8px;box-shadow:0 4px 20px #00000026;min-width:280px;z-index:1000;color:#333;overflow:hidden}.settings-section{padding:.75rem;border-bottom:1px solid #eee}.settings-section:last-child{border-bottom:none}.settings-section-title{font-size:.7rem;font-weight:600;text-transform:uppercase;color:#888;margin-bottom:.5rem;letter-spacing:.5px}.settings-row{display:flex;justify-content:space-between;align-items:center;padding:.4rem 0;font-size:.875rem}.settings-row>span{color:#555}.settings-row select{padding:.3rem .5rem;border:1px solid #ddd;border-radius:4px;font-size:.8rem;background:#fff;min-width:100px}.settings-row.checkbox{cursor:pointer}.settings-row.checkbox input{margin-right:.5rem}.settings-row.checkbox:hover{background:#f5f5f5;margin:0 -.75rem;padding:.4rem .75rem}.settings-menu>.settings-row.checkbox{padding:.75rem;border-bottom:1px solid #eee}.settings-menu>.settings-row.checkbox:hover{margin:0;padding:.75rem}.settings-row.export-options{flex-direction:column;align-items:flex-start;gap:.5rem}.export-buttons{display:flex;gap:.25rem;width:100%}.export-buttons button{flex:1;padding:.4rem .5rem;background:#3498db;color:#fff;border:none;border-radius:4px;font-size:.75rem;cursor:pointer;transition:background .2s}.export-buttons button:hover{background:#2980b9}.settings-action{width:100%;padding:.5rem;background:#9b59b6;color:#fff;border:none;border-radius:4px;font-size:.875rem;cursor:pointer;transition:background .2s;margin-bottom:.5rem}.settings-action:hover{background:#8e44ad}.settings-action:last-child{margin-bottom:0}.layout-toggle.compact{margin-left:0;display:flex;gap:0}.layout-toggle.compact .layout-btn{padding:.3rem .6rem;font-size:.75rem;background:#e0e0e0;color:#555;border:1px solid #ccc}.layout-toggle.compact .layout-btn:first-child{border-radius:4px 0 0 4px}.layout-toggle.compact .layout-btn:last-child{border-radius:0 4px 4px 0}.layout-toggle.compact .layout-btn.active{background:#3498db;color:#fff;border-color:#2980b9}.settings-row.layout-modes{flex-direction:column;align-items:flex-start;gap:.5rem}.settings-row.layout-modes>span{margin-bottom:.25rem;font-weight:500}.layout-radio-group{display:flex;flex-direction:column;gap:.5rem;width:100%}.layout-radio-option{display:flex;align-items:flex-start;gap:.75rem;padding:.5rem .75rem;border:1px solid #e0e0e0;border-radius:6px;cursor:pointer;transition:all .15s ease;background:#fafafa}.layout-radio-option:hover{background:#f0f7ff;border-color:#3498db}.layout-radio-option:has(input:checked){background:#e8f4fc;border-color:#3498db;box-shadow:0 0 0 1px #3498db}.layout-radio-option input[type=radio]{margin-top:.2rem;accent-color:#3498db;width:16px;height:16px;flex-shrink:0}.layout-radio-label{display:flex;flex-direction:column;gap:.125rem}.layout-radio-label strong{font-size:.875rem;font-weight:600;color:#333}.layout-radio-label small{font-size:.75rem;color:#666}.keyboard-help-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:2000}.keyboard-help-modal{background:#fff;border-radius:12px;width:400px;max-width:90vw;box-shadow:0 8px 32px #0003;overflow:hidden}.keyboard-help-header{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:#2c3e50;color:#fff}.keyboard-help-header h2{margin:0;font-size:1.25rem}.keyboard-help-content{padding:1rem 1.5rem;max-height:60vh;overflow-y:auto}.shortcuts-table{width:100%;border-collapse:collapse}.shortcuts-table th{text-align:left;padding:.5rem 0;border-bottom:2px solid #ddd;font-weight:600;color:#2c3e50}.shortcuts-table td{padding:.5rem 0;border-bottom:1px solid #eee}.shortcuts-table td:first-child{width:120px}.shortcuts-table kbd{display:inline-block;padding:.2rem .5rem;background:#f8f9fa;border:1px solid #ddd;border-radius:4px;font-family:monospace;font-size:.875rem;box-shadow:0 1px #0000001a}.keyboard-help-footer{padding:.75rem 1.5rem;background:#f8f9fa;text-align:center;font-size:.875rem;color:#7f8c8d}.keyboard-help-footer kbd{display:inline-block;padding:.15rem .4rem;background:#fff;border:1px solid #ddd;border-radius:3px;font-family:monospace;font-size:.75rem}.keyboard-help-footer p{margin:0}.node.focused circle{stroke:#e74c3c;stroke-width:4px;filter:drop-shadow(0 0 8px rgba(231,76,60,.6))}.node.focused text{font-weight:700}@keyframes focusPulse{0%,to{filter:drop-shadow(0 0 8px rgba(231,76,60,.6))}50%{filter:drop-shadow(0 0 16px rgba(231,76,60,.8))}}.node.focused circle{animation:focusPulse 1.5s ease-in-out infinite}.sibling-group-rect{fill:#3498db1a;stroke:#3498db;stroke-width:2px;stroke-dasharray:8,4}.sibling-group:hover .sibling-group-rect{fill:#3498db33;stroke-width:3px}.sibling-group-label{font-size:11px;fill:#3498db;font-weight:500}.sibling-group:hover .sibling-group-label{fill:#2980b9}.milestone-section{margin-top:1.5rem;padding-top:1rem;border-top:1px solid #eee}.milestone-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:.75rem;padding:0 .25rem}.milestone-header h3{font-size:1rem;font-weight:600;color:#2c3e50}.btn-small{padding:.25rem .5rem;font-size:.75rem;background:#3498db;color:#fff;border:none;border-radius:4px;cursor:pointer;transition:background .2s}.btn-small:hover{background:#2980b9}.milestone-form{background:#f8f9fa;padding:1rem;border-radius:8px;margin-bottom:1rem}.milestone-form .form-row{margin-bottom:.75rem}.milestone-form .form-row label{display:block;font-size:.85rem;color:#555;margin-bottom:.25rem}.milestone-form .form-row input,.milestone-form .form-row select,.milestone-form .form-row textarea{width:100%;padding:.5rem;border:1px solid #ddd;border-radius:4px;font-size:.9rem}.milestone-form .form-row-dates{display:grid;grid-template-columns:1fr 1fr;gap:.75rem}.milestone-form .form-actions{display:flex;gap:.5rem;margin-top:1rem}.milestone-loading,.milestone-empty{padding:1rem;text-align:center;color:#888;font-size:.9rem}.milestone-list{display:flex;flex-direction:column;gap:.75rem}.milestone-item{display:flex;gap:.75rem;padding:.75rem;background:#f8f9fa;border-radius:8px;align-items:flex-start}.milestone-icon{font-size:1.5rem;line-height:1;flex-shrink:0}.milestone-content{flex:1;min-width:0}.milestone-title{font-weight:600;font-size:.95rem;color:#2c3e50;margin-bottom:.25rem}.milestone-meta{display:flex;flex-wrap:wrap;gap:.5rem;font-size:.8rem;color:#666}.milestone-date{color:#3498db}.milestone-location:before{content:"|";margin-right:.5rem;color:#ccc}.milestone-description{margin-top:.5rem;font-size:.85rem;color:#555;line-height:1.4}.milestone-actions{display:flex;gap:.25rem;flex-shrink:0}.milestone-actions .btn-icon{padding:.25rem .5rem;font-size:.7rem;background:transparent;border:1px solid #ddd;border-radius:4px;cursor:pointer;color:#666;transition:all .2s}.milestone-actions .btn-icon:hover{background:#f0f0f0;border-color:#ccc}.milestone-actions .btn-icon.btn-danger:hover{background:#fee;border-color:#e74c3c;color:#e74c3c}.milestone-toggle{display:block;width:100%;margin-top:.75rem;padding:.5rem;background:none;border:none;color:#3498db;font-size:.85rem;cursor:pointer;text-align:center}.milestone-toggle:hover{text-decoration:underline}.btn-link{background:none;border:none;color:#3498db;cursor:pointer;font-size:inherit;padding:0}.btn-link:hover{text-decoration:underline}.orbit-ring{pointer-events:none;opacity:.5}.orbit-rings{pointer-events:none}.fan-chart{pointer-events:all}.fan-generation-bg{pointer-events:none}.fan-generation-label{pointer-events:none;font-weight:500;text-transform:uppercase;letter-spacing:.5px}.fan-center-bg{transition:fill .2s ease}.fan-center-bg:hover{fill:#bbdefb}.fan-center-name{pointer-events:all;transition:fill .2s ease}.fan-center-name:hover{fill:#1565c0}.fan-segment{transition:fill .15s ease,stroke .15s ease}.fan-segment:hover{stroke:#757575;stroke-width:2;filter:brightness(.95)}.fan-name{pointer-events:none;font-weight:500}.fan-dates{pointer-events:none}.graph-tooltip{background:#2c3e50f2;color:#fff;padding:8px 12px;border-radius:6px;font-size:.85rem;box-shadow:0 2px 8px #0003;z-index:1000;transition:opacity .15s ease;max-width:200px}.graph-tooltip strong{display:block;margin-bottom:2px}.graph-tooltip .tooltip-relationship{color:#bdc3c7;font-size:.8rem}.graph-tooltip .tooltip-hint{color:#74b9ff;font-size:.75rem;font-style:italic}.node:focus{outline:none}.node:focus circle{stroke:#f39c12;stroke-width:4px}.legend-container{position:absolute;bottom:20px;left:20px;background:#fffffff2;border-radius:8px;box-shadow:0 2px 12px #00000026;z-index:100;min-width:140px}.legend-toggle{display:flex;align-items:center;justify-content:space-between;width:100%;padding:8px 12px;background:none;border:none;cursor:pointer;font-size:.75rem;font-weight:600;text-transform:uppercase;color:#7f8c8d;letter-spacing:.5px}.legend-toggle:hover{color:#2c3e50}.legend-toggle-icon{font-size:.6rem;margin-left:8px}.legend-container.collapsed .legend-toggle{border-radius:8px}.legend-container.expanded .legend-toggle{border-bottom:1px solid #ecf0f1}.legend-content{padding:8px 12px 12px}.legend-section{margin-bottom:0}.legend-section-title{font-size:.65rem;font-weight:600;text-transform:uppercase;color:#95a5a6;margin-bottom:6px;letter-spacing:.3px}.legend-divider{height:1px;background:#ecf0f1;margin:10px 0}.legend-table{border-collapse:collapse}.legend-table td{padding:2px 0}.legend-line-cell{padding-right:8px;vertical-align:middle}.legend-label-cell{font-size:.75rem;color:#2c3e50;vertical-align:middle}.legend-node-cell{padding-right:8px;vertical-align:middle}.loading-page{display:flex;align-items:center;justify-content:center;height:100%;font-size:1.25rem;color:#7f8c8d}.onboarding-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#2c3e50,#3498db);padding:2rem}.onboarding-container{background:#fff;border-radius:12px;padding:2.5rem;width:100%;max-width:450px;box-shadow:0 10px 40px #0003}.onboarding-header{text-align:center;margin-bottom:2rem}.onboarding-header h1{font-size:1.75rem;color:#2c3e50;margin-bottom:.5rem}.onboarding-header p{color:#7f8c8d;font-size:1rem}.onboarding-form{display:flex;flex-direction:column;gap:1.5rem}.onboarding-form .form-group label{display:block;margin-bottom:.5rem;font-weight:600;color:#374151;font-size:1rem}.onboarding-form .form-group input{width:100%;padding:.875rem;border:2px solid #e5e7eb;border-radius:8px;font-size:1rem;transition:border-color .2s}.onboarding-form .form-group input:focus{outline:none;border-color:#3498db}.onboarding-submit{padding:1rem;font-size:1.1rem;margin-top:.5rem}.onboarding-footer{margin-top:2rem;text-align:center}.btn-link{background:none;border:none;color:#6b7280;cursor:pointer;font-size:.875rem;text-decoration:underline}.btn-link:hover{color:#374151}.auth-page{min-height:100vh;display:flex;align-items:center;justify-content:center;background:linear-gradient(135deg,#2c3e50,#3498db);padding:2rem}.auth-container{background:#fff;border-radius:12px;padding:2rem;width:100%;max-width:400px;box-shadow:0 10px 40px #0003}.auth-header{text-align:center;margin-bottom:2rem}.auth-header h1{font-size:1.75rem;color:#2c3e50;margin-bottom:.5rem}.auth-header p{color:#7f8c8d}.auth-form{display:flex;flex-direction:column;gap:1rem}.auth-error{background:#fee2e2;color:#dc2626;padding:.75rem;border-radius:6px;font-size:.875rem}.auth-warning{background:#fef3c7;color:#92400e;padding:.75rem;border-radius:6px;font-size:.875rem;margin-bottom:1rem}.auth-submit{padding:.875rem;font-size:1rem;margin-top:.5rem}.auth-divider{display:flex;align-items:center;margin:1.5rem 0}.auth-divider:before,.auth-divider:after{content:"";flex:1;border-bottom:1px solid #e5e7eb}.auth-divider span{padding:0 1rem;color:#9ca3af;font-size:.875rem}.btn-google{display:flex;align-items:center;justify-content:center;gap:.75rem;width:100%;padding:.875rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff;color:#374151;font-size:.9375rem;cursor:pointer;transition:background .2s}.btn-google:hover{background:#f9fafb}.auth-footer{margin-top:1.5rem;text-align:center;color:#6b7280;font-size:.875rem}.auth-footer a{color:#3498db;text-decoration:none}.auth-footer a:hover{text-decoration:underline}.auth-features-cta{display:flex;align-items:center;justify-content:center;gap:.75rem;margin-top:2rem;padding:1rem 1.5rem;background:linear-gradient(135deg,#f0f9ff,#faf5ff);border:2px solid #e0e7ff;border-radius:12px;text-decoration:none;transition:all .3s ease;cursor:pointer}.auth-features-cta:hover{background:linear-gradient(135deg,#e0f2fe,#f3e8ff);border-color:#c7d2fe;transform:translateY(-2px);box-shadow:0 8px 20px #6366f126}.features-cta-icon{font-size:1.5rem;animation:sparkle 2s ease-in-out infinite}@keyframes sparkle{0%,to{transform:scale(1) rotate(0)}25%{transform:scale(1.1) rotate(-5deg)}50%{transform:scale(1) rotate(0)}75%{transform:scale(1.1) rotate(5deg)}}.features-cta-text{font-size:1rem;font-weight:600;color:#4f46e5}.features-cta-arrow{font-size:1.25rem;color:#6366f1;transition:transform .2s ease}.auth-features-cta:hover .features-cta-arrow{transform:translate(4px)}.invite-preview{background:#f0f9ff;border:1px solid #bae6fd;border-radius:8px;padding:1rem;margin-bottom:1rem;text-align:center}.invite-preview.large{padding:1.5rem;margin-bottom:1.5rem}.invite-preview-label{font-size:.75rem;color:#0369a1;text-transform:uppercase;letter-spacing:.5px;margin-bottom:.25rem}.invite-preview-name{font-size:1.25rem;font-weight:600;color:#0c4a6e}.invite-preview-details{font-size:.875rem;color:#0369a1;margin-top:.25rem}.invite-preview-role{font-size:.875rem;color:#0369a1;margin-top:.5rem}.invite-only-notice{background:#fef3c7;border:1px solid #f59e0b;border-radius:8px;padding:.75rem 1rem;margin-bottom:1rem;color:#92400e;font-size:.875rem;text-align:center}.input-success{border-color:#22c55e!important}.input-error{border-color:#ef4444!important}.input-hint{font-size:.75rem;margin-top:.25rem}.input-hint.success{color:#22c55e}.input-hint.error{color:#ef4444}.join-success{text-align:center;padding:2rem 0}.success-icon{width:60px;height:60px;background:#22c55e;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:2rem;margin:0 auto 1rem}.redirect-notice{color:#6b7280;margin-top:1rem}.join-actions{margin-top:1.5rem}.join-auth-options{margin-top:1.5rem;text-align:center}.join-auth-options p{color:#6b7280;margin-bottom:1rem}.join-buttons{display:flex;gap:1rem;justify-content:center}.family-map-switcher{position:relative}.switcher-trigger{display:flex;align-items:center;gap:.5rem;padding:.5rem .75rem;background:#ffffff1a;border:1px solid rgba(255,255,255,.2);border-radius:6px;color:#fff;cursor:pointer;transition:background .2s}.switcher-trigger:hover{background:#fff3}.switcher-trigger.empty{background:#3498db4d;border-color:#3498db80}.switcher-name{font-weight:500;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.switcher-role{font-size:.75rem;padding:.125rem .375rem;background:#fff3;border-radius:4px}.switcher-arrow{font-size:.625rem;opacity:.7}.switcher-dropdown{position:absolute;top:100%;left:0;margin-top:.5rem;min-width:250px;background:#fff;border-radius:8px;box-shadow:0 4px 20px #00000026;z-index:1000;overflow:hidden}.switcher-list{padding:.5rem 0}.switcher-item{display:flex;align-items:center;gap:.5rem;width:100%;padding:.625rem 1rem;border:none;background:none;color:#374151;cursor:pointer;text-align:left;transition:background .15s}.switcher-item:hover{background:#f3f4f6}.switcher-item.active{background:#eff6ff;color:#1d4ed8}.switcher-item.create{color:#3498db}.switcher-item.logout,.switcher-item.logout .item-check{color:#e74c3c}.item-check{width:1.25rem;text-align:center;color:#3498db}.item-name{flex:1}.item-role{font-size:.75rem;color:#6b7280}.switcher-divider{height:1px;background:#e5e7eb;margin:.25rem 0}.settings-page{min-height:100vh;background:#f5f5f5;padding:2rem}.settings-container{max-width:800px;margin:0 auto}.settings-header{display:flex;align-items:center;gap:1rem;margin-bottom:2rem}.settings-header h1{font-size:1.5rem;color:#2c3e50}.btn-back{padding:.5rem 1rem;background:none;border:1px solid #e5e7eb;border-radius:6px;color:#374151;cursor:pointer;transition:all .2s}.btn-back:hover{background:#fff;border-color:#d1d5db}.settings-tabs{display:flex;gap:.5rem;margin-bottom:1.5rem;border-bottom:1px solid #e5e7eb;padding-bottom:.5rem}.settings-tabs .tab{padding:.625rem 1rem;background:none;border:none;border-radius:6px;color:#6b7280;cursor:pointer;font-size:.9375rem;transition:all .2s;position:relative}.settings-tabs .tab:hover{color:#374151;background:#f3f4f6}.settings-tabs .tab.active{color:#2563eb;background:#eff6ff}.settings-tabs .badge{display:inline-flex;align-items:center;justify-content:center;min-width:1.25rem;height:1.25rem;padding:0 .375rem;background:#ef4444;color:#fff;font-size:.75rem;border-radius:10px;margin-left:.5rem}.settings-error{background:#fee2e2;color:#dc2626;padding:.75rem 1rem;border-radius:6px;margin-bottom:1rem}.settings-success{background:#dcfce7;color:#16a34a;padding:.75rem 1rem;border-radius:6px;margin-bottom:1rem}.settings-content{background:#fff;border-radius:12px;box-shadow:0 1px 3px #0000001a}.settings-section{padding:1.5rem}.settings-section h2{font-size:1.125rem;color:#2c3e50;margin-bottom:1rem}.settings-section h3{font-size:.9375rem;color:#4b5563;margin:1.5rem 0 .75rem}.settings-divider{height:1px;background:#e5e7eb;margin:1.5rem 0}.input-with-button{display:flex;gap:.75rem}.input-with-button input{flex:1}.static-value{color:#4b5563;padding:.5rem 0}.action-buttons{display:flex;gap:.75rem}.danger-zone{padding:1rem;background:#fef2f2;border-radius:8px;border:1px solid #fecaca}.btn-danger{padding:.625rem 1rem;background:#dc2626;border:none;border-radius:6px;color:#fff;cursor:pointer;transition:background .2s}.btn-danger:hover{background:#b91c1c}.members-list{display:flex;flex-direction:column;gap:.5rem}.member-row{display:flex;align-items:center;justify-content:space-between;padding:.75rem;background:#f9fafb;border-radius:6px}.member-info{display:flex;align-items:center;gap:.75rem}.member-name{font-weight:500;color:#374151}.member-role{font-size:.75rem;padding:.125rem .5rem;background:#e5e7eb;border-radius:4px;color:#6b7280}.member-actions{display:flex;align-items:center;gap:.5rem}.member-actions select{padding:.375rem .5rem;font-size:.875rem}.btn-danger-small{padding:.375rem .625rem;background:#fee2e2;border:none;border-radius:4px;color:#dc2626;cursor:pointer;font-size:.75rem}.btn-danger-small:hover{background:#fecaca}.section-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.invites-list{display:flex;flex-direction:column;gap:.75rem}.invite-row{display:flex;align-items:center;justify-content:space-between;padding:1rem;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb}.invite-info{display:flex;flex-direction:column;gap:.25rem}.invite-code{font-family:monospace;font-size:1rem;font-weight:600;color:#374151}.invite-details{display:flex;gap:.75rem;font-size:.75rem;color:#6b7280}.invite-actions{display:flex;gap:.5rem}.btn-secondary-small{padding:.375rem .625rem;background:#f3f4f6;border:1px solid #e5e7eb;border-radius:4px;color:#374151;cursor:pointer;font-size:.75rem}.btn-secondary-small:hover{background:#e5e7eb}.empty-message{color:#6b7280;text-align:center;padding:2rem}.role-options{display:flex;flex-direction:column;gap:.5rem}.radio-option{display:flex;align-items:flex-start;gap:.75rem;padding:.75rem;background:#f9fafb;border-radius:6px;cursor:pointer;transition:background .15s}.radio-option:hover{background:#f3f4f6}.radio-option input[type=radio]{margin-top:.25rem}.radio-content{display:flex;flex-direction:column}.radio-content span{font-size:.75rem;color:#6b7280;margin-top:.125rem}.invite-created{text-align:center;padding:1rem 0}.invite-link-box{display:flex;gap:.5rem;margin:1rem 0}.invite-link-box input{flex:1;font-size:.875rem}.invite-code-display{color:#6b7280;font-size:.875rem}.status-filter{padding:.375rem .75rem;font-size:.875rem}.pending-changes-list{display:flex;flex-direction:column;gap:.5rem}.change-row{display:flex;align-items:flex-start;gap:.75rem;padding:1rem;background:#f9fafb;border-radius:8px;border:1px solid #e5e7eb}.change-row.status-approved{background:#f0fdf4;border-color:#86efac}.change-row.status-rejected{background:#fef2f2;border-color:#fecaca}.change-icon{font-size:1.25rem}.change-info{flex:1}.change-title{font-weight:500;color:#374151}.change-meta{display:flex;gap:.75rem;font-size:.75rem;color:#6b7280;margin-top:.25rem}.change-status{display:flex;align-items:center;gap:.5rem;margin-top:.5rem}.status-badge{font-size:.625rem;padding:.125rem .375rem;border-radius:4px;text-transform:uppercase;font-weight:600}.status-badge.approved{background:#86efac;color:#166534}.status-badge.rejected{background:#fecaca;color:#991b1b}.review-note{font-size:.75rem;color:#6b7280;font-style:italic}.change-actions{display:flex;gap:.5rem}.review-content{padding:1rem 0}.review-meta{margin-bottom:1rem;color:#6b7280;font-size:.875rem}.review-meta p{margin:.25rem 0}.payload-section{margin:1rem 0}.payload-section h3{font-size:.875rem;color:#4b5563;margin-bottom:.5rem}.payload-fields{background:#f9fafb;border-radius:6px;padding:1rem}.payload-field{display:flex;gap:.5rem;padding:.25rem 0}.field-label{font-weight:500;color:#6b7280;min-width:100px}.field-value{color:#374151}.rejection-section{margin-top:1rem}.rejection-section label{display:block;font-size:.875rem;color:#4b5563;margin-bottom:.5rem}.rejection-section textarea{width:100%;padding:.5rem;border:1px solid #e5e7eb;border-radius:6px;resize:vertical}.node.pending circle{stroke:#95a5a6;stroke-dasharray:4,4;stroke-width:2px;fill:#bdc3c7;opacity:.7}.node.pending text{fill:#7f8c8d;font-style:italic}.node.pending .pending-badge{fill:#f39c12}.modal-content.small{max-width:450px;max-height:calc(100vh - 2rem);overflow-y:auto;display:flex;flex-direction:column}.modal-content.small .modal-header{position:sticky;top:0;background:#fff;z-index:1;border-bottom:1px solid #e5e7eb;padding:1rem 1.5rem;margin:0;flex-shrink:0}.modal-content.small .modal-form{flex:1;overflow-y:auto}.modal-content.small .modal-actions{position:sticky;bottom:0;background:#fff;z-index:1;padding:1rem 1.5rem;margin:0;border-top:1px solid #e5e7eb}.modal-content.large{max-width:700px;max-height:80vh;display:flex;flex-direction:column}.people-list-controls{padding:1rem;border-bottom:1px solid #e5e7eb}.people-filter-input{width:100%;padding:.5rem .75rem;border:1px solid #d1d5db;border-radius:6px;font-size:.875rem}.people-filter-input:focus{outline:none;border-color:#3498db;box-shadow:0 0 0 2px #3498db33}.people-list-table-wrapper{flex:1;overflow-y:auto;padding:0 1rem}.people-list-table{width:100%;border-collapse:collapse}.people-list-table th{text-align:left;padding:.75rem .5rem;border-bottom:2px solid #e5e7eb;font-size:.75rem;text-transform:uppercase;color:#6b7280;position:sticky;top:0;background:#fff}.people-list-table th.sortable{cursor:pointer}.people-list-table th.sortable:hover{color:#3498db}.people-list-row{cursor:pointer;transition:background .15s}.people-list-row:hover{background:#f3f4f6}.people-list-table td{padding:.75rem .5rem;border-bottom:1px solid #e5e7eb;font-size:.875rem}.person-name-cell{font-weight:500}.pending-badge-small{display:inline-block;margin-left:.5rem;padding:.125rem .375rem;background:#f39c12;color:#fff;font-size:.625rem;border-radius:4px;font-weight:500;text-transform:uppercase}.status-pill{display:inline-block;padding:.125rem .5rem;border-radius:12px;font-size:.75rem;font-weight:500}.status-pill.confirmed{background:#d1fae5;color:#065f46}.status-pill.placeholder{background:#fef3c7;color:#92400e}.people-list-table .no-results{text-align:center;color:#6b7280;padding:2rem}.modal-footer{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-top:1px solid #e5e7eb}.people-count{font-size:.875rem;color:#6b7280}.modal-form{display:flex;flex-direction:column;gap:1rem;padding:1.5rem}.modal-form>*:first-child{margin-top:1rem}.modal-form>.form-error:first-child+.form-group{margin-top:1rem}.modal-form .form-group label{display:block;margin-bottom:.5rem;padding-top:.25rem;font-weight:600;color:#374151;font-size:.9375rem;line-height:1.4}.modal-actions{display:flex;justify-content:flex-end;gap:.75rem;padding-top:1rem;border-top:1px solid #e5e7eb;margin-top:1rem}.form-error{background:#fee2e2;color:#dc2626;padding:.75rem;border-radius:6px;font-size:.875rem}.feedback-intro{color:#6b7280;font-size:.9375rem;line-height:1.5}.feedback-success{text-align:center;padding:2rem}.feedback-success .success-icon{width:48px;height:48px;background:#10b981;color:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:1.5rem;margin:0 auto 1rem}.feedback-success h2{color:#374151;margin-bottom:.5rem}.feedback-success p{color:#6b7280}.char-count{text-align:right;font-size:.75rem;color:#9ca3af;margin-top:.25rem}.checkbox-group{margin-top:.5rem}.checkbox-label{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-weight:400}.checkbox-label input[type=checkbox]{width:18px;height:18px;cursor:pointer}.checkbox-hint{color:#9ca3af;font-size:.8125rem;margin-top:.25rem;margin-left:26px}.field-hint{color:#9ca3af;font-size:.8125rem;margin-top:.5rem}.screenshot-options{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.screenshot-or{color:#9ca3af;font-size:.875rem}.file-input{display:none}.btn-upload{cursor:pointer}.screenshot-preview{border:1px solid #e5e7eb;border-radius:8px;overflow:hidden;background:#f9fafb}.screenshot-preview img{width:100%;max-height:200px;object-fit:contain;display:block}.screenshot-info{display:flex;align-items:center;justify-content:space-between;padding:.75rem;border-top:1px solid #e5e7eb;background:#fff}.screenshot-name{font-size:.875rem;color:#374151;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.btn-remove-screenshot{background:none;border:none;color:#dc2626;font-size:.875rem;cursor:pointer;padding:.25rem .5rem;border-radius:4px}.btn-remove-screenshot:hover{background:#fee2e2}.settings-empty{text-align:center;padding:4rem 2rem}.settings-empty h2{color:#374151;margin-bottom:.5rem}.settings-empty p{color:#6b7280}.verification-email{font-weight:600;color:#2c3e50;word-break:break-all}.verification-form{margin:1.5rem 0}.verification-code-wrapper{display:flex;justify-content:center;margin:1.5rem 0}.verification-code-input{display:flex;gap:.5rem;justify-content:center}.verification-code-digit{width:3rem;height:3.5rem;text-align:center;font-size:1.5rem;font-weight:600;border:2px solid #e5e7eb;border-radius:8px;background:#fff;transition:border-color .2s,box-shadow .2s}.verification-code-digit:focus{outline:none;border-color:#3498db;box-shadow:0 0 0 3px #3498db33}.verification-code-digit:disabled{background:#f9fafb;color:#9ca3af}.verification-status{text-align:center;color:#6b7280;margin-top:1rem}.verification-actions{text-align:center;margin-top:1.5rem;padding-top:1.5rem;border-top:1px solid #e5e7eb}.verification-hint{color:#6b7280;margin-bottom:.5rem}.auth-success{background:#dcfce7;color:#166534;padding:.75rem;border-radius:6px;font-size:.875rem;margin-bottom:1rem}.dev-code-banner{background:#fef3c7;color:#92400e;padding:1rem;border-radius:6px;font-size:.875rem;margin-bottom:1rem;text-align:center;border:1px dashed #f59e0b}.dev-code-banner code{background:#fff;padding:.25rem .5rem;border-radius:4px;font-size:1.25rem;font-weight:700;letter-spacing:4px;margin-left:.5rem}.bottom-nav{display:none;position:fixed;bottom:0;left:0;right:0;background:#2c3e50;border-top:1px solid rgba(255,255,255,.1);padding:.5rem .25rem;padding-bottom:calc(.5rem + env(safe-area-inset-bottom,0px));z-index:1000;justify-content:space-around;align-items:center}.bottom-nav-item-wrapper{position:relative}.bottom-nav-item{display:flex;flex-direction:column;align-items:center;justify-content:center;background:transparent;border:none;color:#ffffffb3;padding:.5rem 1rem;min-width:64px;min-height:var(--touch-target-min);cursor:pointer;transition:color .2s;touch-action:manipulation}.bottom-nav-item:hover,.bottom-nav-item:focus{color:#fff}.bottom-nav-item.active{color:#3498db}.bottom-nav-icon{font-size:1.25rem;line-height:1;margin-bottom:.25rem}.bottom-nav-label{font-size:.625rem;text-transform:uppercase;letter-spacing:.5px;font-weight:500}.bottom-nav-add{background:#3498db;color:#fff;border-radius:50%;width:56px;height:56px;margin-top:-1rem;box-shadow:0 2px 8px #3498db66}.bottom-nav-add .bottom-nav-icon{font-size:1.5rem;font-weight:700}.bottom-nav-add .bottom-nav-label{display:none}.bottom-nav-add:hover,.bottom-nav-add:focus{background:#2980b9;color:#fff}.bottom-nav-menu{position:absolute;bottom:100%;left:50%;transform:translate(-50%);background:#fff;border-radius:8px;box-shadow:0 -4px 16px #00000026;padding:.5rem 0;min-width:160px;margin-bottom:.5rem}.bottom-nav-menu button{display:block;width:100%;padding:.75rem 1rem;border:none;background:transparent;text-align:left;font-size:.875rem;color:#374151;cursor:pointer;touch-action:manipulation}.bottom-nav-menu button:hover,.bottom-nav-menu button:focus{background:#f3f4f6}.bottom-nav-menu button.active{color:#3498db;font-weight:500}.mobile-search-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;background:#00000080;z-index:1001;padding:1rem;padding-top:env(safe-area-inset-top,1rem)}.mobile-search-overlay.open{display:flex;flex-direction:column}.mobile-search-container{background:#fff;border-radius:12px;padding:1rem;max-height:80vh;overflow-y:auto}.mobile-search-header{display:flex;justify-content:space-between;align-items:center;margin-bottom:1rem}.mobile-search-header h3{margin:0;font-size:1.125rem}.mobile-search-close{background:transparent;border:none;font-size:1.5rem;cursor:pointer;padding:.5rem;color:#6b7280}.bottom-sheet-overlay{display:none;position:fixed;top:0;left:0;right:0;bottom:0;z-index:900;pointer-events:none}.bottom-sheet-backdrop{position:absolute;top:0;left:0;right:0;bottom:0;background:#00000080;pointer-events:auto}.bottom-sheet{position:absolute;bottom:0;left:0;right:0;background:#fff;border-radius:16px 16px 0 0;box-shadow:0 -4px 20px #00000026;pointer-events:auto;display:flex;flex-direction:column;max-height:95vh;padding-bottom:env(safe-area-inset-bottom,0px)}.bottom-sheet.dragging{-webkit-user-select:none;user-select:none}.bottom-sheet-handle{flex-shrink:0;display:flex;justify-content:center;align-items:center;padding:12px 0 8px;cursor:grab;touch-action:none}.bottom-sheet-handle:active{cursor:grabbing}.bottom-sheet-handle-bar{width:40px;height:4px;background:#d1d5db;border-radius:2px}.bottom-sheet-content{flex:1;overflow-y:auto;overflow-x:hidden;-webkit-overflow-scrolling:touch;overscroll-behavior:contain}.bottom-sheet .person-panel{border:none;box-shadow:none;height:100%;max-height:none}.bottom-sheet .panel-header{position:sticky;top:0;background:#fff;z-index:1;padding:.75rem 1rem;border-bottom:1px solid #e5e7eb}.bottom-sheet .panel-content{padding:1rem}@media screen and (max-width:767px){.bottom-nav{display:flex}.app{padding-bottom:calc(70px + env(safe-area-inset-bottom,0px))}.header .btn-add,.header .view-toggle,.header .btn-settings,.header-right,.header-center{display:none}.header.header-two-row{padding:0}.header-row-1{padding:.35rem .75rem}.header-row-1 h1{font-size:1rem}.header-row-2{padding:.35rem .75rem;gap:.5rem}.center-person-selector,.generations-selector,.layout-selector{display:none}.header{padding:.5rem;flex-wrap:nowrap;gap:.5rem;justify-content:space-between}.header h1{font-size:1rem}.header.header-hidden{transform:translateY(-100%)}.header.header-hidden+.main-content{margin-top:calc(-1 * (var(--spacing-md) + 1rem))}.control-button{padding:.4rem .6rem;font-size:.75rem;min-height:var(--touch-target-min)}.graph-container svg{touch-action:none}.node circle{stroke-width:3px}.node:hover circle{stroke-width:3px}.node:active circle{stroke-width:4px;filter:brightness(1.2)}.main-content{flex-direction:column}.side-panel,.person-panel:not(.bottom-sheet .person-panel){display:none}.bottom-sheet-overlay{display:block}.person-details{padding:var(--spacing-md)}.person-details h2{font-size:1.25rem}.auth-container{padding:var(--spacing-md);margin:var(--spacing-sm);max-width:none;width:calc(100% - var(--spacing-md))}.auth-header h1{font-size:1.5rem}.form-group input,.form-group select,.form-group textarea{font-size:16px;padding:.75rem;min-height:var(--touch-target-min)}.btn-primary,.btn-secondary,.btn-google,.auth-submit{padding:.75rem 1rem;font-size:1rem;min-height:var(--touch-target-min)}.auth-page{min-height:100vh;min-height:100dvh;padding:var(--spacing-md);padding-bottom:calc(var(--spacing-md) + env(safe-area-inset-bottom));align-items:flex-start;padding-top:var(--spacing-lg);overflow-y:auto}.auth-container{margin-bottom:var(--spacing-xl)}.auth-form{gap:1.25rem}.form-group{margin-bottom:.25rem}.form-group label{font-size:.9375rem;margin-bottom:.5rem;display:block}.modal-overlay .modal{width:calc(100% - var(--spacing-md));max-width:none;margin:var(--spacing-sm);max-height:90vh}.modal-header,.modal-body{padding:var(--spacing-md)}.modal-footer{padding:var(--spacing-md);flex-direction:column;gap:var(--spacing-sm)}.modal-footer button{width:100%}.dropdown-menu,.user-menu-dropdown{min-width:200px;right:0}.invite-manager,.settings-page{padding:var(--spacing-md)}.settings-container{max-width:none;padding:0}.pending-changes-panel{width:100%;max-width:none}.verification-code-digit{width:var(--touch-target-min);height:3.25rem;font-size:1.5rem}.verification-code-input{gap:.375rem}.invite-table-container{overflow-x:auto;-webkit-overflow-scrolling:touch}.family-map-switcher{max-width:calc(100vw - var(--spacing-lg))}.notification-container{left:var(--spacing-sm);right:var(--spacing-sm);bottom:var(--spacing-sm)}.mobile-drawer-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#0000;z-index:1100;visibility:hidden;transition:background .3s ease,visibility .3s}.mobile-drawer-overlay.open{visibility:visible;background:#00000080}.mobile-drawer{position:fixed;top:0;right:0;bottom:0;width:85%;max-width:320px;background:#fff;transform:translate(100%);transition:transform .3s ease;overflow-y:auto;-webkit-overflow-scrolling:touch;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom)}.mobile-drawer.open{transform:translate(0)}.mobile-drawer-header{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-md);background:linear-gradient(135deg,#2c3e50,#3498db);color:#fff}.mobile-drawer-user{display:flex;align-items:center;gap:var(--spacing-sm);flex:1;min-width:0}.mobile-drawer-avatar{width:44px;height:44px;border-radius:50%;background:#fff3;display:flex;align-items:center;justify-content:center;font-size:1.25rem;font-weight:600;flex-shrink:0}.mobile-drawer-user-info{flex:1;min-width:0}.mobile-drawer-user-name{font-weight:600;font-size:1rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-drawer-user-email{font-size:.75rem;opacity:.8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.mobile-drawer-close{width:44px;height:44px;border:none;background:#ffffff1a;color:#fff;font-size:1.5rem;border-radius:50%;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}.mobile-drawer-section{padding:var(--spacing-md);border-bottom:1px solid #e5e7eb}.mobile-drawer-section:last-child{border-bottom:none}.mobile-drawer-section-title{font-size:.75rem;font-weight:600;color:#6b7280;text-transform:uppercase;letter-spacing:.5px;margin-bottom:var(--spacing-sm)}.mobile-drawer-row{display:flex;align-items:center;justify-content:space-between;padding:var(--spacing-xs) 0;gap:var(--spacing-sm)}.mobile-drawer-row>span{color:#374151;font-size:.9375rem}.mobile-drawer-row select{padding:.5rem .75rem;border:1px solid #d1d5db;border-radius:6px;font-size:.9375rem;min-height:var(--touch-target-min)}.mobile-drawer-button-group{display:flex;gap:2px;background:#e5e7eb;border-radius:6px;padding:2px}.mobile-drawer-button-group button{padding:.5rem .75rem;border:none;background:transparent;color:#6b7280;font-size:.8125rem;border-radius:4px;cursor:pointer;transition:all .2s}.mobile-drawer-button-group button.active{background:#fff;color:#2c3e50;font-weight:500;box-shadow:0 1px 2px #0000001a}.mobile-drawer-layout-section{margin-bottom:var(--spacing-sm)}.mobile-drawer-layout-title{display:block;font-size:.875rem;font-weight:500;color:#374151;margin-bottom:var(--spacing-xs)}.mobile-drawer-layout-options{display:grid;grid-template-columns:1fr 1fr;gap:.5rem}.mobile-drawer-layout-option{display:flex;align-items:flex-start;gap:.5rem;padding:.625rem .5rem;border:1px solid #e5e7eb;border-radius:8px;cursor:pointer;background:#fafafa;transition:all .15s ease;min-height:var(--touch-target-min)}.mobile-drawer-layout-option:active{background:#e8f4fc}.mobile-drawer-layout-option:has(input:checked){background:#e8f4fc;border-color:#3498db;box-shadow:0 0 0 1px #3498db}.mobile-drawer-layout-option input[type=radio]{margin-top:.125rem;accent-color:#3498db;width:18px;height:18px;flex-shrink:0}.mobile-drawer-layout-label{display:flex;flex-direction:column;gap:.0625rem}.mobile-drawer-layout-label strong{font-size:.875rem;font-weight:600;color:#333}.mobile-drawer-layout-label small{font-size:.6875rem;color:#666}.mobile-drawer-checkbox{display:flex;align-items:center;gap:var(--spacing-sm);padding:var(--spacing-xs) 0;color:#374151;font-size:.9375rem;min-height:var(--touch-target-min)}.mobile-drawer-checkbox input[type=checkbox]{width:20px;height:20px;accent-color:#3498db}.mobile-drawer-action{display:flex;align-items:center;gap:var(--spacing-sm);width:100%;padding:var(--spacing-sm) 0;border:none;background:transparent;color:#374151;font-size:.9375rem;text-align:left;cursor:pointer;min-height:var(--touch-target-min)}.mobile-drawer-action:active{background:#f3f4f6}.mobile-drawer-action-icon{font-size:1.25rem;width:28px;text-align:center}.mobile-drawer-logout{color:#dc2626}.mobile-drawer-export{display:flex;flex-direction:column;gap:var(--spacing-xs);padding:var(--spacing-xs) 0}.mobile-drawer-export-label{color:#374151;font-size:.9375rem}.mobile-drawer-export-buttons{display:flex;gap:var(--spacing-xs)}.mobile-drawer-export-buttons button{flex:1;padding:.5rem;border:1px solid #d1d5db;border-radius:6px;background:#fff;color:#374151;font-size:.8125rem;cursor:pointer;min-height:var(--touch-target-min)}.mobile-drawer-export-buttons button:active{background:#f3f4f6}.mobile-drawer .family-map-switcher{width:100%;max-width:none}.mobile-drawer .family-map-switcher .dropdown-menu{position:static;box-shadow:none;border:1px solid #e5e7eb;margin-top:var(--spacing-xs)}}@media screen and (min-width:768px)and (max-width:1023px){.header{padding:.5rem 1rem}.side-panel{width:300px}.auth-container{max-width:400px}.modal-overlay .modal{max-width:500px}}@media screen and (max-width:767px)and (orientation:landscape){.header{padding:.25rem .5rem}.header h1{font-size:.875rem}.side-panel{max-height:40vh}.auth-container{margin-top:var(--spacing-sm)}}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){.auth-container,.modal,.side-panel,.person-details{border-width:.5px}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}@media print{.header,.side-panel,.modal-overlay,.notification-container{display:none!important}.main-content{height:auto!important}}.photo-section{margin-top:1rem;border-top:1px solid #eee;padding-top:.75rem}.photo-section .section-header{display:flex;justify-content:space-between;align-items:center;cursor:pointer;padding:.5rem 0}.photo-section .section-header.clickable:hover{background:#f9f9f9;margin:0 -1rem;padding:.5rem 1rem}.photo-section .section-header h3{font-size:.95rem;font-weight:600;color:#333;margin:0}.photo-section .section-header .count{color:#666;font-weight:400}.photo-section .expand-icon{color:#666;font-size:1.2rem;font-weight:700}.photo-section-content{padding:.75rem 0}.primary-photo-preview{width:80px;height:80px;border-radius:50%;overflow:hidden;margin:.5rem auto;cursor:pointer;border:3px solid #3498db;transition:transform .2s}.primary-photo-preview:hover{transform:scale(1.05)}.primary-photo-preview img{width:100%;height:100%;object-fit:cover}.photo-upload{margin-top:1rem}.photo-upload-zone{border:2px dashed #ccc;border-radius:8px;padding:1.5rem;text-align:center;cursor:pointer;transition:all .2s;background:#fafafa}.photo-upload-zone:hover:not(.disabled){border-color:#3498db;background:#f0f7fc}.photo-upload-zone.dragging{border-color:#3498db;background:#e8f4fc}.photo-upload-zone.disabled{opacity:.6;cursor:not-allowed}.upload-icon{font-size:2rem;color:#999;margin-bottom:.5rem}.upload-text{color:#666;font-size:.9rem}.upload-status{display:flex;flex-direction:column;align-items:center;gap:.5rem}.upload-spinner{width:24px;height:24px;border:3px solid #e0e0e0;border-top-color:#3498db;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.upload-error{color:#e74c3c;font-size:.85rem;margin-top:.5rem;text-align:center}.photo-gallery{display:grid;grid-template-columns:repeat(3,1fr);gap:.5rem}.photo-gallery-empty{text-align:center;padding:1.5rem;color:#999;font-style:italic}.photo-gallery-item{position:relative;aspect-ratio:1;border-radius:6px;overflow:hidden;cursor:pointer;background:#f0f0f0}.photo-gallery-item img{width:100%;height:100%;object-fit:cover;transition:transform .2s}.photo-gallery-item:hover img{transform:scale(1.05)}.photo-gallery-item.primary{border:2px solid #3498db}.photo-gallery-item .primary-badge{position:absolute;top:4px;left:4px;background:#3498db;color:#fff;width:18px;height:18px;border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:.75rem;font-weight:700}.photo-gallery-item .photo-actions{position:absolute;top:4px;right:4px;display:none;gap:4px}.photo-gallery-item:hover .photo-actions{display:flex}.photo-action-btn{width:24px;height:24px;min-height:24px;border:none;border-radius:4px;background:#0009;color:#fff;cursor:pointer;display:flex;align-items:center;justify-content:center;font-size:.75rem;padding:0}.photo-action-btn:hover{background:#000c}.photo-action-btn.delete:hover{background:#e74c3c}.lightbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000f2;z-index:10000;display:flex;align-items:center;justify-content:center}.lightbox-content{position:relative;max-width:90vw;max-height:90vh;display:flex;flex-direction:column;align-items:center}.lightbox-image{max-width:100%;max-height:80vh;object-fit:contain}.lightbox-close{position:absolute;top:-40px;right:0;background:none;border:none;color:#fff;font-size:2rem;cursor:pointer;padding:.5rem;min-height:auto}.lightbox-close:hover{color:#ccc}.lightbox-nav{position:absolute;top:50%;transform:translateY(-50%);background:#ffffff1a;border:none;color:#fff;font-size:2rem;padding:1rem;cursor:pointer;min-height:auto}.lightbox-nav:hover{background:#fff3}.lightbox-nav.prev{left:-60px}.lightbox-nav.next{right:-60px}.lightbox-caption{color:#fff;margin-top:1rem;font-size:1rem;text-align:center}.lightbox-date{color:#aaa;margin-top:.5rem;font-size:.875rem}.photo-loading,.photo-error{text-align:center;padding:1rem;color:#666}.photo-error{color:#e74c3c}@media(max-width:768px){.photo-gallery{grid-template-columns:repeat(3,1fr);gap:.375rem}.photo-gallery-item .photo-actions{display:flex}.lightbox-nav.prev{left:10px}.lightbox-nav.next{right:10px}.lightbox-nav{padding:.5rem;font-size:1.5rem;background:#00000080;border-radius:50%;width:44px;height:44px;display:flex;align-items:center;justify-content:center}}.node-photo-border{stroke:#3498db;stroke-width:3px}.node.center .node-photo-border{stroke:#f39c12;stroke-width:4px}.node-label{text-anchor:middle;fill:#333;font-weight:500}.features-page{min-height:100vh;background:#f8fafc}.features-nav{display:flex;justify-content:space-between;align-items:center;padding:1rem 2rem;background:#fff;box-shadow:0 1px 3px #0000001a;position:sticky;top:0;z-index:100}.nav-logo{font-size:1.5rem;font-weight:700;color:#2c3e50;text-decoration:none}.nav-links{display:flex;align-items:center;gap:1rem}.nav-link{color:#64748b;text-decoration:none;font-weight:500;padding:.5rem 1rem;transition:color .2s}.nav-link:hover{color:#2c3e50}.btn-primary{display:inline-block;background:linear-gradient(135deg,#3498db,#2980b9);color:#fff;padding:.625rem 1.25rem;border-radius:8px;text-decoration:none;font-weight:600;transition:all .2s;border:none;cursor:pointer}.btn-primary:hover{background:linear-gradient(135deg,#2980b9,#1f6dad);transform:translateY(-1px);box-shadow:0 4px 12px #3498db4d}.btn-secondary{display:inline-block;background:#fff;color:#3498db;padding:.625rem 1.25rem;border-radius:8px;text-decoration:none;font-weight:600;border:2px solid #3498db;transition:all .2s;cursor:pointer}.btn-secondary:hover{background:#f0f9ff}.btn-large{padding:1rem 2rem;font-size:1.125rem}.features-hero{text-align:center;padding:5rem 2rem;background:linear-gradient(180deg,#fff,#f0f9ff)}.features-hero h1{font-size:3rem;font-weight:800;color:#1e293b;margin-bottom:1.5rem;line-height:1.2}.highlight-text{background:linear-gradient(135deg,#3498db,#9b59b6);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}.hero-subtitle{font-size:1.25rem;color:#64748b;max-width:700px;margin:0 auto 2.5rem;line-height:1.6}.hero-cta{display:flex;justify-content:center;gap:1rem;flex-wrap:wrap}.features-section{padding:5rem 2rem;max-width:1400px;margin:0 auto}.features-section-alt{background:#fff}.section-header{text-align:center;margin-bottom:3rem}.section-badge{display:inline-block;background:#e0f2fe;color:#0369a1;padding:.375rem 1rem;border-radius:999px;font-size:.875rem;font-weight:600;margin-bottom:1rem}.section-header h2{font-size:2.25rem;font-weight:700;color:#1e293b;margin-bottom:1rem}.section-header p{font-size:1.125rem;color:#64748b;max-width:600px;margin:0 auto}.features-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:2rem}.features-grid-large .feature-card{min-height:420px}.feature-card{background:#fff;border-radius:16px;overflow:hidden;box-shadow:0 4px 6px -1px #0000001a,0 2px 4px -2px #0000001a;transition:all .3s ease;position:relative}.feature-card:hover{transform:translateY(-4px);box-shadow:0 20px 25px -5px #0000001a,0 8px 10px -6px #0000001a}.feature-card.highlight{border:2px solid #3498db}.feature-badge{position:absolute;top:1rem;right:1rem;background:linear-gradient(135deg,#3498db,#9b59b6);color:#fff;padding:.25rem .75rem;border-radius:999px;font-size:.75rem;font-weight:700;text-transform:uppercase;letter-spacing:.5px;z-index:10}.feature-image{width:100%;height:220px;background:#f1f5f9;overflow:hidden}.feature-image img{width:100%;height:100%;object-fit:cover;transition:transform .3s ease}.feature-card:hover .feature-image img{transform:scale(1.05)}.feature-image{cursor:pointer;position:relative}.image-zoom-hint{position:absolute;bottom:0;left:0;right:0;background:linear-gradient(transparent,#000000b3);color:#fff;padding:1.5rem 1rem .75rem;font-size:.8125rem;opacity:0;transition:opacity .2s ease;text-align:center}.feature-image:hover .image-zoom-hint{opacity:1}.lightbox-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#000000f2;z-index:10000;display:flex;flex-direction:column;align-items:center;justify-content:center;padding:1rem;cursor:pointer;overflow:hidden}.lightbox-header{position:absolute;top:0;left:0;right:0;display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;background:linear-gradient(to bottom,rgba(0,0,0,.8),transparent);z-index:10001}.lightbox-back{display:flex;align-items:center;gap:.5rem;background:#ffffff26;border:1px solid rgba(255,255,255,.3);color:#fff;padding:.625rem 1.25rem;border-radius:8px;font-size:.9375rem;font-weight:500;cursor:pointer;transition:all .2s}.lightbox-back:hover{background:#ffffff40;border-color:#ffffff80}.lightbox-back svg{width:18px;height:18px}.lightbox-close{background:#ffffff26;border:1px solid rgba(255,255,255,.3);color:#fff;width:44px;height:44px;border-radius:8px;font-size:1.75rem;cursor:pointer;transition:all .2s;display:flex;align-items:center;justify-content:center;line-height:1}.lightbox-close:hover{background:#ffffff40;border-color:#ffffff80}.lightbox-content{width:100%;height:100%;display:flex;flex-direction:column;align-items:center;justify-content:center;cursor:default;padding-top:4rem;padding-bottom:3rem}.lightbox-content img{max-width:calc(100vw - 2rem);max-height:calc(100vh - 8rem);width:auto;height:auto;object-fit:contain;border-radius:8px;box-shadow:0 8px 32px #00000080}.lightbox-caption{color:#fff;margin-top:1rem;font-size:.9375rem;opacity:.8;text-align:center}.lightbox-hint{position:absolute;bottom:1rem;left:50%;transform:translate(-50%);color:#ffffff80;font-size:.8125rem}.feature-content{padding:1.5rem}.feature-content h3{font-size:1.25rem;font-weight:700;color:#1e293b;margin-bottom:.75rem}.feature-content p{color:#64748b;line-height:1.6;font-size:.9375rem}.benefits-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.5rem}.benefit-card{background:#fff;padding:2rem;border-radius:12px;text-align:center;box-shadow:0 1px 3px #0000001a;transition:all .2s}.benefit-card:hover{box-shadow:0 4px 12px #0000001a}.benefit-icon{font-size:2.5rem;margin-bottom:1rem}.benefit-card h3{font-size:1.125rem;font-weight:700;color:#1e293b;margin-bottom:.5rem}.benefit-card p{color:#64748b;font-size:.9375rem;line-height:1.5}.features-cta{text-align:center;padding:5rem 2rem;background:linear-gradient(135deg,#2c3e50,#34495e);color:#fff}.features-cta h2{font-size:2.5rem;font-weight:700;margin-bottom:1rem}.features-cta p{font-size:1.125rem;opacity:.9;margin-bottom:2rem}.cta-buttons{display:flex;justify-content:center;gap:1rem;flex-wrap:wrap}.features-cta .btn-secondary{background:transparent;border-color:#fff;color:#fff}.features-cta .btn-secondary:hover{background:#ffffff1a}.features-footer{background:#1e293b;color:#94a3b8;text-align:center;padding:2rem;font-size:.875rem}@media(max-width:768px){.features-nav{padding:1rem}.nav-logo{font-size:1.25rem}.features-hero{padding:3rem 1rem}.features-hero h1{font-size:2rem}.hero-subtitle{font-size:1rem}.features-section{padding:3rem 1rem}.section-header h2{font-size:1.75rem}.features-grid{grid-template-columns:1fr}.feature-image{height:180px}.features-cta{padding:3rem 1rem}.features-cta h2{font-size:1.75rem}.btn-large{padding:.875rem 1.5rem;font-size:1rem}}.floating-feedback-button{position:fixed;bottom:1.5rem;right:1.5rem;display:flex;align-items:center;gap:.5rem;padding:.75rem 1rem;background:#3498db;color:#fff;border:none;border-radius:50px;font-size:.875rem;font-weight:500;cursor:pointer;box-shadow:0 4px 12px #3498db66;transition:all .2s ease;z-index:1000}.floating-feedback-button:hover{background:#2980b9;transform:translateY(-2px);box-shadow:0 6px 16px #3498db80}.floating-feedback-button:active{transform:translateY(0)}.floating-feedback-icon{display:flex;align-items:center;justify-content:center;width:20px;height:20px;background:#fff3;border-radius:50%;font-weight:700;font-size:.75rem}.floating-feedback-text{white-space:nowrap}@media(max-width:768px){.floating-feedback-button{bottom:calc(60px + 1rem);right:1rem;padding:.75rem;border-radius:50%}.floating-feedback-text{display:none}.floating-feedback-icon{width:24px;height:24px;font-size:.875rem;background:transparent}}.contextual-feedback{display:inline-flex;align-items:center;gap:.75rem;padding:.5rem .75rem;background:#f8f9fa;border-radius:8px;font-size:.875rem}.contextual-feedback-question{color:#666}.contextual-feedback-buttons{display:flex;gap:.25rem}.contextual-feedback-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid #ddd;border-radius:6px;background:#fff;color:#666;cursor:pointer;transition:all .15s ease}.contextual-feedback-btn:hover:not(:disabled){border-color:#3498db;color:#3498db}.contextual-feedback-btn.thumbs-up:hover:not(:disabled){background:#e8f5e9;border-color:#4caf50;color:#4caf50}.contextual-feedback-btn.thumbs-down:hover:not(:disabled){background:#ffebee;border-color:#f44336;color:#f44336}.contextual-feedback-btn:disabled{opacity:.5;cursor:not-allowed}.contextual-feedback.submitted{background:#e8f5e9}.contextual-feedback-thanks{color:#4caf50;font-weight:500}.contextual-feedback-emoji{font-size:1rem}@media(max-width:480px){.contextual-feedback{flex-direction:column;align-items:flex-start;gap:.5rem}}
