:root{--paper: #f6f1e7;--ink: #1b2a24;--ink-soft: #5b6b63;--emerald: #1f6f5c;--emerald-deep: #153f35;--coral: #e2653f;--gold: #c99a3d;--card: #ffffff;--line: rgba(27, 42, 36, .12);--bg-primary: var(--paper);--bg-secondary: var(--card);--bg-hover: #ece4d4;--text-primary: var(--ink);--text-secondary: var(--ink-soft);--border: var(--line);--accent: var(--emerald);--accent-solid: var(--emerald-deep);--accent-hover: #0f342b;--accent-soft: #e6efe9;--on-accent: #f6f1e7;--success: var(--emerald);--success-soft: #e6efe9;--danger: #b23a26;--danger-soft: #f4e0d8;--warn: #a9781f;--warn-soft: #f4e9cf;--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--font-serif: "Iowan Old Style", "Palatino Linotype", "Book Antiqua", Palatino, Georgia, "Times New Roman", serif;--font-mono: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 24px;--sp-6: 32px;--sp-7: 48px;--radius-sm: 12px;--radius: 16px;--radius-lg: 24px;--shadow-card: 0 12px 30px rgba(21, 63, 53, .08);--shadow-hover: 0 16px 34px rgba(21, 63, 53, .12);--ring: 0 0 0 2px var(--paper), 0 0 0 4px var(--emerald);--tap: 44px;--sidebar-w: 248px;--sidebar-w-collapsed: 68px;--content-max: 620px;color-scheme:light}*{box-sizing:border-box}html,body{margin:0;height:100%}body{background:var(--paper);color:var(--text-primary);font:16px/1.55 var(--font-sans);-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;touch-action:manipulation;overscroll-behavior-y:contain}#app{min-height:100%}.icon{flex:0 0 auto;display:block}.mono{font-family:var(--font-mono)}.muted{color:var(--text-secondary)}.center{text-align:center}.small{font-size:13px}.spacer{flex:1}.stack{display:flex;flex-direction:column;gap:var(--sp-4)}.hero-title,.page-title{font-family:var(--font-serif);font-weight:600;letter-spacing:-.01em;margin:0}.hero-title{font-size:30px;line-height:1.15}.page-title{font-size:27px;line-height:1.2}.section-title{font-size:16px;font-weight:600;letter-spacing:-.01em;margin:0}.lead{color:var(--text-secondary);font-size:15px;margin:0}.eyebrow{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--emerald);margin:0 0 2px}.main-header{display:flex;flex-direction:column;gap:2px}.app-shell{min-height:100%;display:grid;grid-template-columns:var(--sidebar-w) 1fr}.app-shell.is-collapsed{grid-template-columns:var(--sidebar-w-collapsed) 1fr}.sidebar{position:sticky;top:0;align-self:start;height:100vh;height:100dvh;display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-5) var(--sp-3) calc(var(--sp-4) + env(safe-area-inset-bottom)) var(--sp-3);padding-left:max(var(--sp-3),env(safe-area-inset-left));border-right:1px solid var(--border);background:#efe7d7;overflow:hidden}.side-brand{padding:var(--sp-2) var(--sp-2) var(--sp-4)}.side-nav{display:flex;flex-direction:column;gap:2px}.side-link,.side-toggle{display:flex;align-items:center;gap:var(--sp-3);min-height:var(--tap);padding:var(--sp-2) var(--sp-3);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-secondary);font:inherit;font-size:14px;font-weight:500;text-align:left;cursor:pointer;white-space:nowrap;transition:background .12s ease,color .12s ease}.side-link:hover,.side-toggle:hover{background:var(--bg-hover);color:var(--text-primary)}.side-link.is-active{background:var(--accent-soft);color:var(--emerald-deep);font-weight:600}.is-collapsed .side-label,.is-collapsed .brand-name{display:none}.is-collapsed .side-brand{padding-left:0;padding-right:0;display:flex;justify-content:center}.content{min-width:0;padding:var(--sp-6) var(--sp-5) calc(var(--sp-7) + env(safe-area-inset-bottom));padding-right:max(var(--sp-5),env(safe-area-inset-right))}.content-inner{max-width:var(--content-max);margin:0 auto;display:flex;flex-direction:column;gap:var(--sp-5)}.tabbar{display:none}.brand{display:flex;align-items:center;gap:var(--sp-2)}.brand .logo{width:30px;height:30px;object-fit:contain}.brand-name{font-family:var(--font-serif);font-size:19px;font-weight:600;letter-spacing:-.01em}.page-header{display:flex;align-items:center;gap:var(--sp-2);min-height:var(--tap)}.page-title{flex:1;min-width:0}.page-header-trailing{margin-left:auto;display:inline-flex;align-items:center;flex:0 0 auto;min-width:0}.back-btn,.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:var(--tap);height:var(--tap);border:none;border-radius:var(--radius-sm);background:transparent;color:var(--text-secondary);cursor:pointer;transition:background .12s ease,color .12s ease}.back-btn{margin-left:calc(var(--sp-2) * -1)}.page-header-trailing .icon-btn{margin-right:calc(var(--sp-2) * -1)}.back-btn:hover,.icon-btn:hover{background:var(--bg-hover);color:var(--text-primary)}.card{background:var(--card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--sp-5);display:flex;flex-direction:column;gap:var(--sp-4);box-shadow:var(--shadow-card)}.empty-state{align-items:center;text-align:center;gap:var(--sp-3);color:var(--text-secondary);padding:var(--sp-6) var(--sp-4)}.empty-state .icon{color:var(--emerald);opacity:.6}.empty-state p{margin:0}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);min-height:var(--tap);padding:var(--sp-3) var(--sp-4);font:inherit;font-size:15px;font-weight:600;border:1px solid transparent;border-radius:var(--radius);cursor:pointer;transition:background .12s ease,border-color .12s ease,transform .04s ease,box-shadow .12s ease}.btn:active{transform:translateY(1px)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--emerald-deep);color:var(--on-accent)}.btn-primary:hover:not(:disabled){background:var(--accent-hover);box-shadow:var(--shadow-hover)}.btn-ghost{background:var(--card);color:var(--text-primary);border-color:var(--border)}.btn-ghost:hover:not(:disabled){background:var(--bg-hover)}.btn-danger{background:transparent;color:var(--danger);border-color:var(--danger)}.btn-danger:hover:not(:disabled){background:var(--danger-soft)}.btn-row{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.btn-row .btn{flex:1;min-width:160px}.danger-zone{margin-top:var(--sp-2);padding-top:var(--sp-4);border-top:1px solid var(--border)}.danger-zone .btn{width:100%}textarea,input[type=text],input[type=email],input[type=tel],input[type=date]{font:inherit;font-size:15px;width:100%;min-height:var(--tap);background:var(--paper);color:var(--text-primary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--sp-3);resize:vertical;transition:border-color .12s ease,box-shadow .12s ease}textarea:focus,input:focus{outline:none;border-color:var(--emerald);box-shadow:0 0 0 3px var(--accent-soft)}textarea::placeholder,input::placeholder{color:var(--text-secondary)}.row{display:flex;gap:var(--sp-3)}.row>*{flex:1}.form-field{display:flex;flex-direction:column;gap:var(--sp-2)}.field-label{color:var(--text-secondary);font-size:11px;font-weight:600;letter-spacing:.08em;text-transform:uppercase}.field{display:flex;justify-content:space-between;gap:var(--sp-3);font-size:14px}.field-value{color:var(--text-primary);text-align:right}.checkbox{display:flex;align-items:flex-start;gap:var(--sp-3);font-size:14px}.checkbox input{width:auto;min-height:0;margin-top:3px;accent-color:var(--emerald)}.id-box{background:var(--paper);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--sp-3);word-break:break-all;font-size:13px;line-height:1.5}.id-box-copy{display:block;width:100%;text-align:left;color:var(--text-primary);font:inherit;font-size:13px;cursor:pointer;transition:background .12s ease,border-color .12s ease}.id-box-copy:hover{background:var(--bg-hover);border-color:var(--emerald)}.id-box-value{font-family:var(--font-mono);word-break:break-all;line-height:1.5;user-select:all}.phrase{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2)}.word{display:flex;gap:var(--sp-2);align-items:baseline;background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--sp-2) var(--sp-3);font-size:14px}.word-n{color:var(--text-secondary);min-width:16px;text-align:right;font-size:12px;font-variant-numeric:tabular-nums}.word-t{font-weight:500}.notice{display:flex;gap:var(--sp-2);border-radius:var(--radius);padding:var(--sp-3) var(--sp-4);font-size:14px;line-height:1.5;border:1px solid transparent}.notice-warn{border-color:color-mix(in srgb,var(--warn) 35%,transparent);background:var(--warn-soft);color:var(--warn)}.notice-danger{border-color:color-mix(in srgb,var(--danger) 35%,transparent);background:var(--danger-soft);color:var(--danger)}.avatar{border-radius:50%;display:flex;align-items:center;justify-content:center;font-family:var(--font-serif);font-weight:600;flex:0 0 auto}.avatar-ring{border-radius:50%;padding:3px;background:conic-gradient(from 220deg,var(--emerald),var(--gold),var(--coral),var(--emerald));flex:0 0 auto;display:flex}.profile-head{display:flex;align-items:center;gap:var(--sp-4)}.profile-id{min-width:0}.profile-name{font-family:var(--font-serif);font-size:21px;font-weight:600;letter-spacing:-.01em}.id-field{margin-top:var(--sp-4);padding-top:var(--sp-3);border-top:1px solid var(--border)}.id-field .field-value{font-size:16px;margin-top:3px;font-weight:500;text-align:left}.search-bar{display:flex;align-items:center;gap:var(--sp-2);background:var(--card);border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 var(--sp-3);box-shadow:var(--shadow-card)}.search-bar .icon{color:var(--text-secondary)}.search-bar input{border:none;background:transparent;box-shadow:none;padding:var(--sp-3) 0;min-height:46px}.search-bar input:focus{box-shadow:none}.chips{display:flex;gap:var(--sp-2);overflow-x:auto;padding-bottom:2px;scrollbar-width:none}.chips::-webkit-scrollbar{display:none}.chip-filter{flex-shrink:0;font-size:12.5px;font-weight:600;padding:7px 14px;border-radius:999px;border:1px solid var(--border);background:var(--card);color:var(--text-secondary);white-space:nowrap;cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.chip-filter:hover{background:var(--bg-hover)}.chip-filter.is-active{background:var(--emerald-deep);border-color:var(--emerald-deep);color:var(--on-accent)}.friend-groups{display:flex;flex-direction:column;gap:var(--sp-5)}.friend-group{display:flex;flex-direction:column;gap:var(--sp-1)}.friend-group-title{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin:0 0 var(--sp-1);font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.08em;color:var(--emerald)}.friend-group-count{font-variant-numeric:tabular-nums;color:var(--text-secondary)}.friend-list{display:flex;flex-direction:column}.friend-row{display:flex;align-items:center;gap:var(--sp-3);text-align:left;width:100%;min-height:var(--tap);background:transparent;border:none;border-bottom:1px solid var(--border);padding:var(--sp-3) var(--sp-1);color:var(--text-primary);font:inherit;cursor:pointer;transition:background .12s ease}.friend-row:last-child{border-bottom:none}.friend-row:hover{background:var(--bg-hover)}.row-avatar{position:relative;flex:0 0 auto}.status-dot{position:absolute;bottom:-1px;right:-1px;width:12px;height:12px;border-radius:50%;border:2px solid var(--paper);background:var(--ink-soft)}.status-dot.is-verified{background:var(--emerald)}.status-dot.is-pending{background:var(--gold)}.friend-meta{display:flex;flex-direction:column;gap:1px;flex:1;min-width:0}.friend-name{font-weight:600;font-size:14.5px}.friend-sub{font-size:12px;color:var(--text-secondary)}.friend-row>.icon{color:var(--text-secondary)}.fab{position:fixed;right:max(var(--sp-5),env(safe-area-inset-right));bottom:calc(96px + env(safe-area-inset-bottom));width:56px;height:56px;border-radius:50%;border:none;background:var(--coral);color:#fff;display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:0 10px 22px #e2653f66;z-index:35;transition:transform .06s ease,box-shadow .12s ease}.fab:hover{box-shadow:0 14px 28px #e2653f80}.fab:active{transform:translateY(1px)}.group-picker{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.group-toggle{font-size:13px;font-weight:600;padding:8px 14px;border-radius:999px;border:1px solid var(--border);background:var(--paper);color:var(--text-secondary);cursor:pointer;transition:background .12s ease,color .12s ease,border-color .12s ease}.group-toggle.is-on{background:var(--accent-soft);border-color:var(--emerald);color:var(--emerald-deep)}.group-toggle.group-add{color:var(--emerald);border-style:dashed}.group-manage-row{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-1) 0;border-bottom:1px solid var(--border)}.group-manage-row:last-child{border-bottom:none}.group-manage-count{color:var(--text-secondary);font-size:13px;font-variant-numeric:tabular-nums;min-width:18px;text-align:right}.group-name-input{flex:1;min-width:0;min-height:var(--tap);border:1px solid transparent;background:transparent;border-radius:var(--radius-sm);padding:var(--sp-2);font:inherit;font-weight:600;color:var(--text-primary)}.group-name-input:hover{background:var(--paper)}.group-name-input:focus{outline:none;background:var(--paper);border-color:var(--emerald);box-shadow:0 0 0 3px var(--accent-soft)}.group-add-row{display:flex;gap:var(--sp-2);align-items:center}.group-add-row input{flex:1;min-width:0}.group-add-row .btn{flex:0 0 auto}.group-new-input{width:170px;max-width:100%;min-height:0;font:inherit;font-size:13px;font-weight:600;padding:8px 14px;border-radius:999px;border:1px solid var(--emerald);background:var(--paper);color:var(--text-primary)}.group-new-input:focus{outline:none;box-shadow:0 0 0 3px var(--accent-soft)}.share-card{background:var(--emerald-deep);border-radius:var(--radius-lg);padding:var(--sp-6) var(--sp-5);color:var(--paper);text-align:center;box-shadow:var(--shadow-card);display:flex;flex-direction:column;gap:var(--sp-4)}.share-card .share-lead{font-size:13px;color:#c7bfa9;margin:0}.qr-wrap{background:var(--paper);border-radius:18px;padding:var(--sp-4);margin:0 auto;width:210px;max-width:100%}.qr-wrap .qr{display:block;width:100%;height:auto;border-radius:8px}.id-strip{font-family:var(--font-mono);font-size:11px;line-height:1.5;background:#f6f1e714;border:1px solid rgba(246,241,231,.18);border-radius:12px;padding:var(--sp-3);word-break:break-all;color:#d8d0be;cursor:pointer;transition:background .12s ease}.id-strip:hover{background:#f6f1e724}.share-actions{display:flex;gap:var(--sp-2)}.share-btn{flex:1;min-height:var(--tap);padding:var(--sp-3) var(--sp-2);border-radius:var(--radius);background:#f6f1e71a;border:1px solid rgba(246,241,231,.2);color:var(--paper);font:inherit;font-size:13px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);cursor:pointer;transition:background .12s ease}.share-btn:hover{background:#f6f1e72e}.sync-indicator{display:inline-flex;align-items:center;gap:var(--sp-1);white-space:nowrap;font-variant-numeric:tabular-nums}.sync-indicator[hidden]{display:none}.sync-indicator.is-warn{color:var(--warn)}.sync-spinner{width:12px;height:12px;flex:0 0 auto;border-radius:50%;border:2px solid var(--border);border-top-color:var(--emerald);opacity:0;animation:sync-spin .7s linear infinite}.sync-indicator.is-syncing .sync-spinner{opacity:1}@keyframes sync-spin{to{transform:rotate(360deg)}}.ptr-indicator{height:var(--ptr, 0px);overflow:hidden;display:flex;align-items:center;justify-content:center;gap:var(--sp-2);color:var(--text-secondary);transition:height .24s ease}.is-pulling .ptr-indicator{transition:none}.ptr-spinner{width:16px;height:16px;flex:0 0 auto;border-radius:50%;border:2px solid var(--border);border-top-color:var(--emerald)}.is-refreshing .ptr-spinner{animation:sync-spin .7s linear infinite}.qr-card{align-self:center;background:var(--paper);padding:var(--sp-4);border:1px solid var(--border);border-radius:var(--radius)}.qr{display:block;width:220px;height:220px;max-width:100%}.screen-centered{min-height:100%;display:flex;justify-content:center;align-items:flex-start;padding:var(--sp-6) var(--sp-4) calc(var(--sp-6) + env(safe-area-inset-bottom))}.centered-inner{width:100%;max-width:420px;display:flex;flex-direction:column;gap:var(--sp-4)}.screen-centered .card,.skeleton{gap:var(--sp-3)}.skel-line{height:14px;border-radius:var(--radius-sm);background:linear-gradient(90deg,var(--bg-hover) 25%,var(--border) 37%,var(--bg-hover) 63%);background-size:400% 100%;animation:skel-shimmer 1.4s ease infinite}.skel-line-short{width:55%}@keyframes skel-shimmer{0%{background-position:100% 0}to{background-position:0 0}}.toast{position:fixed;left:50%;bottom:calc(24px + env(safe-area-inset-bottom));transform:translate(-50%) translateY(8px);background:var(--ink);color:var(--paper);padding:var(--sp-3) var(--sp-4);border-radius:999px;font-size:14px;font-weight:500;box-shadow:0 4px 16px #0000002e;opacity:0;transition:opacity .2s ease,transform .2s ease;pointer-events:none;z-index:60}.toast.show{opacity:1;transform:translate(-50%) translateY(0)}.scan-inline{display:none;position:relative;width:100%;aspect-ratio:4 / 3;max-height:260px;border-radius:var(--radius);overflow:hidden;background:#000;border:1px solid var(--border)}.scan-inline.is-active{display:block;animation:scan-reveal .28s cubic-bezier(.22,1,.36,1) both}@keyframes scan-reveal{0%{opacity:0;transform:translateY(-6px) scale(.98)}to{opacity:1;transform:none}}.scan-inline-video{width:100%;height:100%;object-fit:cover;display:block}.scan-inline-frame{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:60%;aspect-ratio:1;border:3px solid rgba(246,241,231,.92);border-radius:16px;box-shadow:0 0 0 100vmax #0006;pointer-events:none}.scan-inline-hint{position:absolute;left:50%;bottom:var(--sp-3);transform:translate(-50%);color:#fff;background:#00000080;padding:var(--sp-1) var(--sp-3);border-radius:999px;font-size:12px;pointer-events:none}.sheet-overlay{position:fixed;inset:0;z-index:55;display:flex;align-items:flex-end;justify-content:center}.sheet-scrim{position:absolute;inset:0;background:#152a2473;opacity:0;transition:opacity .28s ease}.sheet-overlay.is-open .sheet-scrim{opacity:1}.sheet{position:relative;width:100%;max-width:560px;background:var(--paper);border-radius:28px 28px 0 0;padding:var(--sp-3) var(--sp-5) calc(var(--sp-6) + env(safe-area-inset-bottom));padding-left:max(var(--sp-5),env(safe-area-inset-left));padding-right:max(var(--sp-5),env(safe-area-inset-right));display:flex;flex-direction:column;gap:var(--sp-4);box-shadow:0 -12px 40px #153f3547;max-height:88vh;overflow-y:auto;transform:translateY(100%);transition:transform .34s cubic-bezier(.22,1,.36,1)}.sheet-overlay.is-open .sheet{transform:none}.sheet.is-dragging{transition:none}.sheet-handle{width:40px;height:4px;border-radius:999px;background:var(--line);align-self:center;margin-bottom:var(--sp-1);flex:0 0 auto;touch-action:none}.sheet-handle,.sheet-title{cursor:grab}.sheet.is-dragging .sheet-handle,.sheet.is-dragging .sheet-title{cursor:grabbing}.sheet-title{font-family:var(--font-serif);font-size:22px;font-weight:600;letter-spacing:-.01em;margin:0;touch-action:none}.screen-enter{animation:screen-enter .3s cubic-bezier(.22,1,.36,1) both}@keyframes screen-enter{0%{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}.fab{animation:fab-pop .32s cubic-bezier(.22,1,.36,1) both}@keyframes fab-pop{0%{opacity:0;transform:scale(.6)}to{opacity:1;transform:none}}:focus-visible{outline:none;box-shadow:var(--ring);border-radius:var(--radius-sm)}.btn:focus-visible,.friend-row:focus-visible,.side-link:focus-visible,.tab:focus-visible,.chip-filter:focus-visible,.fab:focus-visible{box-shadow:var(--ring)}input:focus-visible,textarea:focus-visible{box-shadow:0 0 0 3px var(--accent-soft)}@media (max-width: 767px){.app-shell,.app-shell.is-collapsed{display:block;grid-template-columns:none}.sidebar{display:none}.content{padding:var(--sp-5) var(--sp-4) calc(72px + env(safe-area-inset-bottom));padding-left:max(var(--sp-4),env(safe-area-inset-left));padding-right:max(var(--sp-4),env(safe-area-inset-right))}.content-inner{max-width:560px;gap:var(--sp-4)}.tabbar{position:fixed;left:0;right:0;bottom:0;display:flex;background:color-mix(in srgb,var(--paper) 90%,transparent);border-top:1px solid var(--border);padding:var(--sp-1) var(--sp-2) max(var(--sp-1),env(safe-area-inset-bottom));padding-left:max(var(--sp-2),env(safe-area-inset-left));padding-right:max(var(--sp-2),env(safe-area-inset-right));backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);z-index:40}.tab{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-height:var(--tap);padding:var(--sp-1) var(--sp-1);background:transparent;border:none;border-radius:var(--radius-sm);color:var(--text-secondary);font:inherit;cursor:pointer}.tab-label{font-size:11px;font-weight:600}.tab.is-active{color:var(--emerald-deep)}.field{flex-direction:column;gap:2px}.field-value{text-align:left}.btn-row .btn{min-width:120px}.toast{bottom:calc(96px + env(safe-area-inset-bottom))}}@media (min-width: 1200px){:root{--content-max: 720px}.content{padding-top:var(--sp-7)}.fab{right:calc((100vw - var(--content-max)) / 2 - 72px)}}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important}.skel-line{animation:none;background:var(--bg-hover)}.sync-spinner,.ptr-spinner{animation:none}}
