:root{color-scheme:light;font-family:PingFang SC,Microsoft YaHei,Hiragino Sans GB,Noto Sans CJK SC,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;--ink: #2a2226;--muted: #756a6f;--paper: #fff8fa;--surface: #ffffff;--line: #efd7dc;--rose: #d83f70;--coral: #ff6f61;--mint: #4aa88a;--gold: #e1a93f;--shadow: 0 18px 40px rgba(152, 54, 86, .12)}:root[data-theme=dark]{color-scheme:dark;--ink: #f7edf1;--muted: #c8b6be;--paper: #191316;--surface: #241b20;--line: #49323c;--rose: #ff6f9e;--coral: #ff8a76;--mint: #68c9a7;--gold: #f2c15f;--shadow: 0 18px 40px rgba(0, 0, 0, .32)}*{box-sizing:border-box}html{background:var(--paper)}body{margin:0;color:var(--ink);background:linear-gradient(135deg,rgba(216,63,112,.12),transparent 28%),linear-gradient(315deg,rgba(74,168,138,.14),transparent 34%),var(--paper)}button,input,textarea{font:inherit}button,a{-webkit-tap-highlight-color:transparent}a{color:inherit;text-decoration:none}img,video{display:block;width:100%;height:100%;object-fit:cover}.app-shell{min-height:100vh}.topbar{position:sticky;top:0;z-index:20;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:16px clamp(16px,5vw,64px);background:#fff8fadb;border-bottom:1px solid var(--line);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px)}:root[data-theme=dark] .topbar{background:#191316e6}.brand,.nav-links{display:flex;align-items:center}.brand{gap:10px;font-weight:800}.brand-mark{display:grid;width:36px;height:36px;place-items:center;color:#fff;background:linear-gradient(135deg,var(--rose),var(--coral));border-radius:8px}.nav-links{gap:8px}.nav-links a,.link-button,.app-button,.theme-toggle{display:inline-flex;min-height:42px;align-items:center;justify-content:center;border-radius:8px;border:1px solid transparent;cursor:pointer;transition:transform .18s ease,box-shadow .18s ease,background .18s ease}.nav-links a{padding:0 12px;color:var(--muted)}.theme-toggle{padding:0 14px;color:var(--ink);background:var(--surface);border:1px solid var(--line)}.nav-links a.router-link-active{color:var(--rose);background:#d83f701a}main{width:min(1440px,100%);margin:0 auto;padding:clamp(18px,4vw,42px)}.love-hero{min-height:240px;display:grid;align-content:center;gap:10px;padding:clamp(28px,6vw,70px);color:#fff;background:linear-gradient(90deg,#2a222694,#2a22261a),url(https://images.unsplash.com/photo-1529253355930-ddbe423a2ac7?auto=format&fit=crop&w=1800&q=80) center / cover;border-radius:8px;overflow:hidden;box-shadow:var(--shadow)}.love-hero h1,.detail-header h1,.editor-header h1,.calendar-title h1{margin:0;font-size:clamp(2rem,6vw,5rem);line-height:1;letter-spacing:0}.love-hero p,.detail-copy p{max-width:760px;margin:0;font-size:1.08rem;line-height:1.7}.eyebrow{margin:0;color:var(--rose);font-weight:800;text-transform:uppercase;letter-spacing:0}.love-hero .eyebrow{color:#ffe9ef}.content-grid,.detail-layout,.calendar-layout{display:grid;gap:24px;margin-top:24px}.content-grid{grid-template-columns:minmax(0,1.15fr) minmax(360px,.85fr);align-items:start}.section-title,.detail-header,.calendar-title,.form-actions,.action-row,.calendar-head{display:flex;align-items:center;justify-content:space-between;gap:16px}.section-title h2{margin:0;font-size:1.3rem}.section-title span,.notice{color:var(--muted)}.record-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px}.record-card{min-width:0;overflow:hidden;background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow);cursor:pointer;transition:transform .18s ease,box-shadow .18s ease}.record-card,.gallery-tile,.detail-media-item,.preview-item{content-visibility:auto;contain-intrinsic-size:220px}.record-card:hover,.gallery-tile:hover,.detail-media-item:hover,.app-button:hover,.link-button:hover{transform:translateY(-2px)}.record-card__media{aspect-ratio:16 / 11}.record-card__body{display:grid;gap:10px;padding:16px}.record-card__meta{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:.92rem}.mood{display:grid;width:32px;height:32px;place-items:center;border-radius:8px;background:#ff6f6124}.record-card p{margin:0;line-height:1.55}.photo-wall{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-rows:132px;gap:10px}.gallery-tile,.detail-media-item,.date-cell{padding:0;border:0;background:transparent;border-radius:8px;overflow:hidden;cursor:pointer}.gallery-tile:first-child{grid-column:span 2;grid-row:span 2}.floating-add{position:fixed;right:clamp(18px,5vw,44px);bottom:clamp(18px,5vw,44px);z-index:10;display:grid;width:58px;height:58px;place-items:center;color:#fff;background:linear-gradient(135deg,var(--rose),var(--coral));border-radius:8px;box-shadow:0 18px 32px #d83f7057;font-size:2rem;transition:transform .18s ease}.floating-add:hover{transform:translateY(-4px) rotate(8deg)}.detail-header,.editor-header,.calendar-title{margin-bottom:24px}.detail-layout{grid-template-columns:.75fr 1.25fr}.detail-copy,.editor-form,.calendar-board,.anniversary-list{background:#ffffffc2;border:1px solid var(--line);border-radius:8px;padding:clamp(18px,4vw,32px);box-shadow:var(--shadow)}.detail-media{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px}.detail-media-item{aspect-ratio:4 / 3}.detail-media-item:first-child{grid-column:1 / -1;aspect-ratio:16 / 8}.app-button,.link-button{padding:0 18px;border:0;color:#fff;background:var(--rose);font-weight:800}.link-button.secondary,.app-button--secondary{color:var(--ink);background:var(--surface);border:1px solid var(--line)}.app-button--danger{background:#b33a3a}.editor-view{max-width:960px;margin:0 auto}.editor-form{display:grid;gap:20px}.field{display:grid;gap:10px}.field>span{font-weight:800}input,textarea{width:100%;border:1px solid var(--line);border-radius:8px;padding:14px 16px;background:#fff;color:var(--ink);outline:none}select{width:100%;border:1px solid var(--line);border-radius:8px;padding:14px 16px;background:var(--surface);color:var(--ink);outline:none}textarea{min-height:120px;resize:none;line-height:1.6}input,textarea{background:var(--surface)}input:focus,textarea:focus,select:focus{border-color:var(--rose);box-shadow:0 0 0 4px #d83f701f}.filter-panel{display:grid;grid-template-columns:minmax(220px,1.4fr) repeat(3,minmax(140px,1fr)) auto;gap:12px;align-items:end;margin-top:24px;padding:16px;background:#ffffffb8;border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow)}:root[data-theme=dark] .filter-panel,:root[data-theme=dark] .detail-copy,:root[data-theme=dark] .editor-form,:root[data-theme=dark] .calendar-board,:root[data-theme=dark] .anniversary-list,:root[data-theme=dark] .chart-card{background:#241b20db}.filter-panel label,.search-field{display:grid;gap:8px}.filter-panel span,.hint{color:var(--muted);font-size:.92rem}.empty-card{display:grid;gap:8px;padding:20px;background:var(--surface);border:1px solid var(--line);border-radius:8px}.empty-card h3,.empty-card p{margin:0}.empty-card--link{transition:transform .18s ease,border-color .18s ease}.empty-card--link:hover{transform:translateY(-2px);border-color:var(--rose)}.load-more{display:grid;min-height:72px;place-items:center;color:var(--muted)}.mood-picker{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px}.mood-picker-wrap{display:grid;gap:10px}.custom-mood-row{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px}.custom-mood-row button{min-height:46px;padding:0 16px;color:#fff;background:var(--mint);border:0;border-radius:8px;cursor:pointer}.mood-option{display:grid;min-height:86px;place-items:center;gap:4px;border:1px solid var(--line);border-radius:8px;background:var(--surface);cursor:pointer}.mood-option span{font-size:1.8rem}.mood-option.active{border-color:var(--rose);background:#d83f701a}.upload-drop{display:grid;min-height:130px;place-items:center;gap:6px;border:1px dashed var(--rose);border-radius:8px;background:#d83f7012;cursor:pointer}.upload-drop input{position:absolute;width:1px;height:1px;overflow:hidden;opacity:0}.upload-drop small{color:var(--muted)}.preview-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px;margin-top:12px}.preview-item{position:relative;aspect-ratio:1;overflow:hidden;border-radius:8px}.preview-remove,.modal-close{position:absolute;top:10px;right:10px;z-index:2;width:36px;height:36px;border:0;border-radius:8px;color:#fff;background:#2a2226b3;cursor:pointer}.preview-open{display:block;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:zoom-in}.preview-remove{cursor:pointer}.preview-status{position:absolute;left:10px;bottom:10px;z-index:2;min-height:30px;padding:0 10px;border:1px solid rgba(255,255,255,.42);border-radius:8px;color:#fff;background:#1f2a44b8;font-size:.86rem;font-weight:800;line-height:30px}.preview-status--error{cursor:pointer;background:#d83f70e0}.location-picker{display:grid;gap:10px}.location-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.location-actions button{min-height:42px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:var(--surface);cursor:pointer}.map-modal{position:relative;display:grid;width:min(720px,100%);gap:16px;padding:clamp(18px,4vw,28px);background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow)}.map-modal h2{margin:4px 0 0}.mock-map{position:relative;display:grid;min-height:280px;place-items:center;overflow:hidden;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:linear-gradient(90deg,rgba(74,168,138,.16) 1px,transparent 1px),linear-gradient(rgba(216,63,112,.12) 1px,transparent 1px),linear-gradient(135deg,#4aa88a33,#d83f701f);background-size:42px 42px,42px 42px,auto;cursor:crosshair}.mock-map small{color:var(--muted)}.map-pin{position:absolute;transform:translate(-50%,-100%);font-size:2rem}.map-coordinates{display:flex;flex-wrap:wrap;gap:10px;color:var(--muted)}.record-time-list{display:grid;gap:10px;margin:20px 0 0}.record-time-list div{display:grid;gap:4px}.record-time-list dt,.record-time-list dd{margin:0}.record-time-list dt{color:var(--muted);font-size:.92rem}.record-time-list dd{font-weight:800}.calendar-layout{grid-template-columns:minmax(0,1fr) 390px;align-items:start}.calendar-board{display:grid;align-self:start;gap:16px}.calendar-head button,.viewer-nav{width:42px;height:42px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:var(--surface);cursor:pointer}.weekday-grid,.date-grid{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}.weekday-grid{color:var(--muted);text-align:center;font-weight:800}.date-cell{position:relative;display:grid;min-height:78px;place-items:center;border:1px solid var(--line);background:var(--surface)}.date-cell i{position:absolute;right:8px;bottom:8px;width:7px;height:7px;background:var(--mint);border-radius:999px}.date-cell b{position:absolute;top:6px;right:6px;display:grid;width:20px;height:20px;place-items:center;color:#fff;background:var(--gold);border-radius:999px;font-size:.72rem}.date-cell.muted{opacity:.45}.date-cell.highlighted{border-color:var(--mint);background:#4aa88a1f}.date-cell.anniversary{border-color:var(--gold)}.date-cell.selected{color:#fff;background:var(--rose);opacity:1}.anniversary-list,.selected-records{display:grid;gap:14px}.anniversary-list{align-self:start}.anniversary-item{display:flex;align-items:center;justify-content:space-between;gap:14px;padding:14px;background:var(--surface);border:1px solid var(--line);border-radius:8px}.anniversary-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:flex-end;gap:8px}.anniversary-item div{display:grid;gap:4px}.anniversary-item .anniversary-actions{display:flex}.anniversary-item time{color:var(--muted)}.anniversary-item>span{color:var(--gold);font-weight:900}.anniversary-actions span{color:var(--gold);font-weight:900}.anniversary-actions button,.mini-action{min-height:32px;padding:0 10px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:var(--surface);cursor:pointer}.mini-action{color:#fff;background:var(--rose);border-color:var(--rose)}.anniversary-modal{position:relative;display:grid;width:min(560px,100%);gap:16px;padding:clamp(18px,4vw,30px);background:var(--surface);border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow)}.anniversary-modal h2{margin:4px 0 0}.modal-backdrop{position:fixed;inset:0;z-index:50;display:grid;place-items:center;padding:clamp(10px,3vw,24px);background:#141012db}.media-viewer{position:relative;display:grid;width:min(1280px,100%);height:min(920px,96vh);grid-template-columns:56px minmax(0,1fr) 56px;grid-template-rows:auto minmax(0,1fr) auto;gap:12px;outline:none}.viewer-header{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:44px;color:#fff}.viewer-header div{display:flex;min-width:0;align-items:center;gap:10px}.viewer-header span{min-width:0;overflow:hidden;color:#ffffffb8;text-overflow:ellipsis;white-space:nowrap}.viewer-header .modal-close{position:static;flex:0 0 auto;color:#fff;background:#ffffff24;border:1px solid rgba(255,255,255,.22)}.viewer-toolbar{display:flex;flex-wrap:wrap;justify-content:center;gap:8px}.viewer-toolbar button,.load-more-button{min-height:36px;padding:0 12px;border:1px solid var(--line);border-radius:8px;color:var(--ink);background:var(--surface);cursor:pointer}.viewer-toolbar button{color:#fff;background:#ffffff1f;border-color:#ffffff38}.viewer-stage{grid-column:2;display:grid;width:100%;height:100%;min-height:0;place-items:center;overflow:auto;cursor:zoom-in;overscroll-behavior:contain}.viewer-stage img,.viewer-stage video{width:auto;max-width:100%;height:auto;max-height:100%;object-fit:contain;transition:transform .16s ease;transform-origin:center;-webkit-user-select:none;user-select:none}.viewer-nav{align-self:center;justify-self:center;font-size:2rem;color:#fff;background:#ffffff1f;border-color:#ffffff38}.viewer-nav.left{grid-column:1;grid-row:2}.viewer-nav.right{grid-column:3;grid-row:2}.viewer-footer{grid-column:1 / -1;display:grid;gap:10px;justify-items:center}.thumbnail-strip{display:flex;max-width:min(760px,100%);gap:8px;overflow-x:auto;padding:4px}.thumbnail-strip button{flex:0 0 auto;width:58px;height:58px;overflow:hidden;padding:0;border:2px solid transparent;border-radius:8px;background:transparent;cursor:pointer;opacity:.68}.thumbnail-strip button.active{border-color:var(--rose);opacity:1}.image-switch-enter-active,.image-switch-leave-active{transition:opacity .16s ease,transform .16s ease}.image-switch-enter-from,.image-switch-leave-to{opacity:0;transform:scale(.98)}.empty-state{display:grid;min-height:50vh;place-items:center;text-align:center}.location-pill{display:inline-flex;width:fit-content;margin-top:20px;padding:8px 12px;color:var(--mint);background:#4aa88a1f;border-radius:8px;font-weight:800}.detail-meta-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:18px}.detail-meta-item{display:grid;gap:6px;padding:14px;background:var(--surface);border:1px solid var(--line);border-radius:8px}.detail-meta-item span{color:var(--muted);font-size:.92rem}.detail-meta-item strong{font-size:1.05rem}.field-error{color:#b33a3a}.stats-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;margin-bottom:18px}.stat-card,.chart-card{background:#ffffffc2;border:1px solid var(--line);border-radius:8px;box-shadow:var(--shadow)}.stat-card{display:grid;gap:8px;padding:22px}.stat-card span,.stat-card p{margin:0;color:var(--muted)}.stat-card strong{font-size:clamp(2.2rem,6vw,4rem);line-height:1;color:var(--rose)}.memory-tabs{display:inline-flex;gap:8px;margin:8px 0 18px;padding:6px;background:var(--surface);border:1px solid var(--line);border-radius:8px}.memory-tabs button{min-height:38px;padding:0 16px;border:0;border-radius:8px;color:var(--muted);background:transparent;cursor:pointer}.memory-tabs button.active{color:#fff;background:var(--rose)}.chart-card{display:grid;gap:18px;padding:clamp(18px,4vw,32px)}.mood-bars{display:grid;gap:14px}.mood-bar-row{display:grid;grid-template-columns:100px minmax(0,1fr) 40px;gap:12px;align-items:center}.mood-bar-track{height:14px;overflow:hidden;background:#756a6f29;border-radius:999px}.mood-bar-track i{display:block;height:100%;min-width:6px;border-radius:999px;transition:width .26s ease}.memory-wall{grid-template-columns:repeat(5,minmax(0,1fr))}:root[data-theme=dark] body{background:linear-gradient(135deg,rgba(255,111,158,.1),transparent 28%),linear-gradient(315deg,rgba(104,201,167,.08),transparent 34%),var(--paper)}:root[data-theme=dark] .record-card,:root[data-theme=dark] .stat-card,:root[data-theme=dark] .empty-card,:root[data-theme=dark] .memory-tabs,:root[data-theme=dark] input,:root[data-theme=dark] textarea,:root[data-theme=dark] select{background:var(--surface);border-color:var(--line)}@media print{.topbar,.memory-tabs,.action-row,.floating-add{display:none}body{background:#fff}}.page-enter-active,.page-leave-active,.modal-enter-active,.modal-leave-active{transition:opacity .18s ease,transform .18s ease}.page-enter-from,.page-leave-to,.modal-enter-from,.modal-leave-to{opacity:0;transform:translateY(10px)}@media(max-width:1023px){main{padding:24px}.content-grid,.detail-layout,.calendar-layout,.filter-panel{grid-template-columns:1fr}.record-list{grid-template-columns:repeat(2,minmax(0,1fr))}.photo-wall{grid-template-columns:repeat(4,minmax(0,1fr));grid-auto-rows:120px}}@media(max-width:767px){.topbar{position:sticky;align-items:stretch;flex-direction:column;gap:12px;padding-right:96px}.theme-toggle{position:absolute;top:22px;right:30px;min-height:36px;padding:0 12px}.nav-links{display:grid;grid-template-columns:repeat(4,minmax(0,1fr))}.nav-links a{padding:0 6px;font-size:.96rem}main{padding:16px}.love-hero{min-height:280px;padding:24px}.section-title,.detail-header,.calendar-title,.form-actions{align-items:flex-start;flex-direction:column}.record-list,.detail-media,.mood-picker,.stats-grid,.custom-mood-row,.mood-bar-row,.location-actions{grid-template-columns:1fr}.anniversary-item,.anniversary-actions{align-items:flex-start;flex-direction:column}.detail-meta-grid{grid-template-columns:1fr}.photo-wall{grid-template-columns:repeat(2,minmax(0,1fr));grid-auto-rows:140px}.detail-media-item:first-child{grid-column:auto;aspect-ratio:4 / 3}.weekday-grid,.date-grid{gap:4px}.date-cell{min-height:46px}.media-viewer{height:94vh;grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr) auto auto}.viewer-toolbar{width:100%;justify-content:center}.viewer-nav{display:none}.viewer-stage{grid-column:1;grid-row:2}.viewer-footer{grid-row:3}.thumbnail-strip button{width:48px;height:48px}.floating-add{width:52px;height:52px}}
