:root{--color-bg: #f5f4ed;--color-surface: #faf9f5;--color-text: #141413;--color-text-secondary: #5e5d59;--color-text-tertiary: #6f6e68;--color-border: #f0eee6;--color-brand: #b5512f;--radius-md: 8px;--radius-lg: 12px;--radius-xl: 16px;--shadow-whisper: 0 4px 24px rgba(0, 0, 0, .05)}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--color-bg);color:var(--color-text);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Hiragino Sans GB,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased}#root{min-height:100vh}.page{min-height:100vh;padding:16px}.app-header{position:sticky;top:0;z-index:10;display:flex;align-items:center;justify-content:space-between;height:52px;padding:0 16px;background:var(--color-bg);border-bottom:1px solid var(--color-border)}.app-header__brand{font-weight:600;font-size:17px;color:var(--color-text);text-decoration:none}.app-header__actions{display:flex;align-items:center;gap:12px}.app-header__user{max-width:140px;overflow:hidden;font-size:14px;color:var(--color-text-secondary);text-decoration:none;text-overflow:ellipsis;white-space:nowrap}.app-header__link{font-size:14px;color:var(--color-text-secondary);text-decoration:none}.app-header__link:hover{color:var(--color-brand)}.btn{display:inline-flex;align-items:center;justify-content:center;min-height:44px;padding:0 16px;border:1px solid transparent;border-radius:var(--radius-lg);font-size:15px;font-weight:500;cursor:pointer;text-decoration:none;transition:background .15s ease,border-color .15s ease}.btn:disabled{opacity:.6;cursor:not-allowed}.btn--primary{background:var(--color-brand);color:#faf9f5}.btn--ghost{background:var(--color-surface);color:var(--color-text-secondary);border-color:var(--color-border)}.btn--block{width:100%}.btn--github{margin-top:12px;background:var(--color-text);color:var(--color-surface)}.auth-page{display:flex;align-items:flex-start;justify-content:center;min-height:calc(100vh - 52px);padding:48px 16px}.auth-card{width:100%;max-width:400px;padding:28px 24px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-whisper)}.auth-card__title{margin:0 0 6px;font-size:24px;font-weight:600;color:var(--color-text)}.auth-card__subtitle{margin:0 0 24px;font-size:14px;color:var(--color-text-tertiary)}.form-field{margin-bottom:16px}.form-field label{display:block;margin-bottom:6px;font-size:13px;color:var(--color-text-secondary)}.form-field input{width:100%;height:44px;padding:0 12px;border:1px solid var(--color-border);border-radius:var(--radius-lg);font-size:15px;color:var(--color-text);background:var(--color-bg);outline:none}.form-field input:focus{border-color:var(--color-brand)}.form-field__error{display:block;margin-top:4px;font-size:12px;color:#b53333}.form-notice{margin:0 0 12px;padding:10px 12px;border-radius:var(--radius-md);font-size:13px}.form-notice--error{color:#b53333;background:#b5333314}.form-notice--ok{color:#4d7c4d;background:#4d7c4d14}.link-button{display:block;margin:16px auto 0;padding:0;border:none;background:none;font-size:14px;color:var(--color-text-secondary);cursor:pointer;text-decoration:underline}.page-title{margin:8px 0 4px;font-size:26px;font-weight:600;color:var(--color-text)}.page-subtitle{margin:0 0 20px;font-size:14px;color:var(--color-text-tertiary)}.create-page,.detail-page{max-width:640px;margin:0 auto}.create-form{padding:20px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-whisper)}.form-field__label{display:block;margin-bottom:6px;font-size:13px;color:var(--color-text-secondary)}.form-field textarea{width:100%;padding:12px;border:1px solid var(--color-border);border-radius:var(--radius-lg);font-size:15px;font-family:inherit;line-height:1.5;color:var(--color-text);background:var(--color-bg);outline:none;resize:vertical}.form-field textarea:focus{border-color:var(--color-brand)}.form-field__count{display:block;margin-top:4px;font-size:12px;text-align:right;color:var(--color-text-tertiary)}.image-uploader{display:block;width:100%;min-height:180px;padding:0;border:1px dashed var(--color-text-tertiary);border-radius:var(--radius-lg);background:var(--color-bg);cursor:pointer;overflow:hidden}.image-uploader.has-image{border-style:solid;border-color:var(--color-border)}.image-uploader__input{display:none}.image-uploader__placeholder{display:flex;align-items:center;justify-content:center;min-height:180px;padding:16px;font-size:14px;color:var(--color-text-tertiary)}.image-uploader__preview{display:block;width:100%;max-height:420px;object-fit:cover}.cause-picker{display:flex;flex-wrap:wrap;gap:8px}.cause-picker__item{min-height:40px;padding:0 14px;border:1px solid var(--color-border);border-radius:999px;background:var(--color-surface);font-size:14px;color:var(--color-text-secondary);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.cause-picker__item.is-active{background:var(--color-brand);border-color:var(--color-brand);color:#faf9f5}.rating-picker{display:flex;gap:4px}.rating-picker__star{padding:0;border:none;background:none;font-size:30px;line-height:1;color:var(--color-border);cursor:pointer;transition:color .15s ease,transform .15s ease}.rating-picker__star:hover{transform:scale(1.12)}.rating-picker__star.is-active{color:#e0a13b}.location-picker__map{width:100%;height:240px;border:1px solid var(--color-border);border-radius:var(--radius-lg);overflow:hidden}.location-picker__hint{margin:6px 0 0;font-size:12px;color:var(--color-text-tertiary)}.detail-page--missing{text-align:center}.detail-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-whisper);overflow:hidden}.detail-card__image{display:block;width:100%;max-height:480px;object-fit:cover}.detail-card__body{padding:20px}.detail-card__head{display:flex;align-items:center;justify-content:space-between;gap:12px}.detail-card__title{margin:0;font-size:24px;font-weight:600;color:var(--color-text)}.detail-card__cause{flex-shrink:0;padding:4px 12px;border-radius:999px;background:#c964421f;color:var(--color-brand);font-size:13px}.detail-card__rating{display:flex;gap:2px;margin-top:10px;font-size:22px}.detail-card__star{color:var(--color-border)}.detail-card__star.is-active{color:#e0a13b}.detail-card__epitaph{margin:16px 0 0;padding:12px 14px;border-left:3px solid var(--color-brand);background:var(--color-bg);border-radius:0 var(--radius-md) var(--radius-md) 0;font-size:15px;line-height:1.7;color:var(--color-text)}.detail-card__story{margin:16px 0 0;padding:14px;background:var(--color-bg);border:1px solid var(--color-border);border-radius:var(--radius-lg)}.detail-card__story-title{margin:0 0 8px;font-size:14px;font-weight:600;color:var(--color-text-secondary)}.detail-card__story-content{margin:0;font-size:14px;line-height:1.8;color:var(--color-text);white-space:pre-wrap;word-break:break-word}.detail-card__meta{display:grid;grid-template-columns:repeat(2,1fr);gap:10px 16px;margin:18px 0 0}.detail-card__meta div{display:flex;justify-content:space-between;gap:8px;padding:8px 0;border-bottom:1px solid var(--color-border)}.detail-card__meta dt{font-size:13px;color:var(--color-text-tertiary)}.detail-card__meta dd{margin:0;font-size:13px;color:var(--color-text);text-align:right;word-break:break-all}.detail-card__location{margin:14px 0 0;font-size:13px;color:var(--color-text-secondary)}.detail-card__map{margin-top:16px;border-radius:var(--radius-lg);overflow:hidden}.tombstone-marker{display:block;filter:drop-shadow(0 3px 4px rgba(0,0,0,.35))}.home-page{max-width:640px;margin:0 auto;padding-top:8px}.home-header{padding:8px 4px 16px}.home-header__title{margin:0;font-size:24px;font-weight:600;color:var(--color-text)}.home-header__subtitle{margin:4px 0 0;font-size:13px;color:var(--color-text-tertiary)}.cause-filter{display:flex;gap:8px;margin-bottom:14px;padding-bottom:4px;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}.cause-filter::-webkit-scrollbar{display:none}.cause-filter__chip{flex-shrink:0;min-height:36px;padding:0 14px;border:1px solid var(--color-border);border-radius:999px;background:var(--color-surface);font-size:14px;color:var(--color-text-secondary);cursor:pointer;transition:background .15s ease,color .15s ease,border-color .15s ease}.cause-filter__chip.is-active{background:var(--color-brand);border-color:var(--color-brand);color:#faf9f5}.tombstone-list{display:flex;flex-direction:column;gap:14px}.tombstone-card{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-whisper);overflow:hidden;transition:transform .15s ease}.tombstone-card:active{transform:scale(.99)}.tombstone-card__link{display:block;color:inherit;text-decoration:none}.tombstone-card__media{position:relative;aspect-ratio:4 / 3;background:var(--color-bg);overflow:hidden}.tombstone-card__media img{display:block;width:100%;height:100%;object-fit:cover}.tombstone-card__media-skeleton{position:absolute;top:0;right:0;bottom:0;left:0}.tombstone-card__body{padding:12px 14px 14px}.tombstone-card__head{display:flex;align-items:center;justify-content:space-between;gap:10px}.tombstone-card__title{margin:0;font-size:17px;font-weight:600;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.cause-tag{flex-shrink:0;padding:3px 10px;border-radius:999px;background:#c964421f;color:var(--color-brand);font-size:12px}.tombstone-card__rating{display:flex;gap:2px;margin-top:8px;font-size:14px}.tombstone-card__star{color:var(--color-border)}.tombstone-card__star.is-active{color:#e0a13b}.tombstone-card__footer{display:flex;align-items:center;gap:10px;margin-top:12px;font-size:12px;color:var(--color-text-tertiary)}.tombstone-card__author{display:inline-flex;align-items:center;gap:6px;min-width:0;color:var(--color-text-secondary)}.tombstone-card__username{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tombstone-card__avatar{flex-shrink:0;width:22px;height:22px;border-radius:50%;object-fit:cover;background:var(--color-bg)}.tombstone-card__avatar--fallback{display:inline-flex;align-items:center;justify-content:center;background:var(--color-brand);color:#faf9f5;font-size:11px}.tombstone-card__time{flex-shrink:0}.tombstone-card__footer .flower-button-wrap{margin-left:auto;flex-shrink:0}.flower-button-wrap{display:inline-flex;flex-direction:column;align-items:flex-start;gap:6px}.flower-button{display:inline-flex;align-items:center;gap:6px;min-height:34px;padding:0 12px;border:1px solid var(--color-border);border-radius:999px;background:var(--color-surface);font-size:13px;color:var(--color-text-secondary);cursor:pointer;transition:background .15s ease,border-color .15s ease,color .15s ease}.flower-button:hover:not(:disabled){border-color:var(--color-brand);color:var(--color-brand)}.flower-button:disabled{opacity:.65;cursor:not-allowed}.flower-button.is-flowered{background:#c964421f;border-color:#c9644259;color:var(--color-brand)}.flower-button-wrap--detail .flower-button{min-height:44px;padding:0 20px;font-size:15px}.flower-button__count{font-variant-numeric:tabular-nums}.flower-button__notice{font-size:12px;color:#b53333}.detail-card__actions{margin-top:18px}.detail-messages{margin-top:24px}.detail-messages__title{margin:0 0 12px;font-size:18px;font-weight:600;color:var(--color-text)}.message-list{display:flex;flex-direction:column;gap:2px}.message-list__state{margin:0 0 14px;padding:20px 16px;border-radius:var(--radius-lg);background:var(--color-surface);border:1px solid var(--color-border);font-size:13px;text-align:center;color:var(--color-text-tertiary)}.message-item{display:flex;gap:10px;padding:12px 4px}.message-item__avatar{flex-shrink:0;width:30px;height:30px;border-radius:50%;overflow:hidden;background:var(--color-bg)}.message-item__avatar img{display:block;width:100%;height:100%;object-fit:cover}.message-item__avatar-fallback{display:flex;align-items:center;justify-content:center;width:100%;height:100%;background:var(--color-brand);color:#faf9f5;font-size:13px}.message-item__body{flex:1;min-width:0;padding:10px 12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg)}.message-item__meta{display:flex;align-items:center;gap:8px;font-size:12px;color:var(--color-text-tertiary)}.message-item__author{font-weight:600;color:var(--color-text-secondary)}.message-item__delete{margin-left:auto;padding:0;border:none;background:none;font-size:12px;color:var(--color-text-tertiary);text-decoration:underline;cursor:pointer}.message-item__delete:disabled{opacity:.5;cursor:not-allowed}.message-item__content{margin:6px 0 0;font-size:14px;line-height:1.6;color:var(--color-text);white-space:pre-wrap;word-break:break-word}.message-list__more{margin-top:8px}.message-form{margin-top:14px;padding:14px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg)}.message-form textarea{width:100%;padding:10px 12px;border:1px solid var(--color-border);border-radius:var(--radius-md);font-family:inherit;font-size:14px;line-height:1.5;color:var(--color-text);background:var(--color-bg);outline:none;resize:vertical}.message-form textarea:focus{border-color:var(--color-brand)}.message-form__footer{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-top:8px}.message-form__footer .form-field__count{margin:0}.message-form__hint{margin-top:14px;padding:16px;border-radius:var(--radius-lg);background:var(--color-surface);border:1px solid var(--color-border);text-align:center}.profile-page{max-width:640px;margin:0 auto}.profile-card{display:flex;align-items:center;gap:14px;padding:18px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);box-shadow:var(--shadow-whisper)}.profile-card__avatar{flex-shrink:0;width:56px;height:56px;border-radius:50%;object-fit:cover;background:var(--color-bg)}.profile-card__avatar--fallback{display:flex;align-items:center;justify-content:center;background:var(--color-brand);color:#faf9f5;font-size:24px;font-weight:600}.profile-card__info{flex:1;min-width:0}.profile-card__name{margin:0;font-size:20px;font-weight:600;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-card__bio{margin:4px 0 0;font-size:13px;line-height:1.5;color:var(--color-text-secondary);white-space:pre-wrap;word-break:break-word}.profile-card__edit{flex-shrink:0;min-height:36px;padding:0 12px;font-size:13px}.profile-editor{margin-top:14px;padding:16px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl)}.profile-editor__actions{display:flex;justify-content:flex-end;gap:10px;margin-top:4px}.profile-tabs{display:flex;gap:8px;margin:20px 0 14px;padding:4px;border-radius:var(--radius-lg);background:var(--color-bg);border:1px solid var(--color-border)}.profile-tabs__item{flex:1;min-height:38px;border:none;border-radius:var(--radius-md);background:none;font-size:14px;color:var(--color-text-secondary);cursor:pointer}.profile-tabs__item.is-active{background:var(--color-surface);color:var(--color-text);font-weight:600;box-shadow:0 1px 4px #00000014}.profile-list{display:flex;flex-direction:column;gap:10px}.profile-list__state{margin:0;padding:32px 16px;text-align:center;font-size:13px;color:var(--color-text-tertiary)}.profile-tombstone{display:flex;align-items:center;gap:12px;padding:10px 12px;background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-lg)}.profile-tombstone--link{color:inherit;text-decoration:none}.profile-tombstone__main{display:flex;align-items:center;gap:12px;flex:1;min-width:0;color:inherit;text-decoration:none}.profile-tombstone__thumb{flex-shrink:0;width:52px;height:52px;border-radius:var(--radius-md);object-fit:cover;background:var(--color-bg)}.profile-tombstone__info{display:flex;flex-direction:column;gap:4px;min-width:0}.profile-tombstone__name{font-size:15px;font-weight:600;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-tombstone__meta{font-size:12px;color:var(--color-text-tertiary)}.profile-tombstone__delete{flex-shrink:0;min-height:34px;padding:0 12px;font-size:13px}.dialog-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:24px;background:#14141373}.dialog{width:100%;max-width:360px;padding:22px;background:var(--color-surface);border-radius:var(--radius-xl);box-shadow:0 12px 40px #00000040}.dialog__title{margin:0 0 10px;font-size:18px;font-weight:600;color:var(--color-text)}.dialog__message{margin:0 0 20px;font-size:14px;line-height:1.6;color:var(--color-text-secondary)}.dialog__actions{display:flex;justify-content:flex-end;gap:10px}.btn--danger{background:#b53333;color:#faf9f5}.home-map-page{max-width:640px;margin:0 auto;padding-bottom:96px}.home-map__frame{position:relative;border-radius:var(--radius-xl);overflow:hidden;border:1px solid var(--color-border);box-shadow:var(--shadow-whisper)}.nearby-map{display:block}.home-map__loading{display:flex;align-items:center;justify-content:center;height:520px;font-size:14px;color:var(--color-text-tertiary);background:var(--color-surface)}.home-map__overlay{position:absolute;left:50%;bottom:18px;transform:translate(-50%);width:max-content;max-width:calc(100% - 32px);padding:12px 16px;border-radius:var(--radius-lg);background:var(--color-surface);border:1px solid var(--color-border);box-shadow:var(--shadow-whisper);text-align:center;font-size:13px;color:var(--color-text-secondary)}.home-map__overlay .btn{margin-top:8px;min-height:36px;font-size:13px}.fab{position:fixed;right:max(16px,calc((100vw - 640px)/2 + 16px));bottom:24px;z-index:50;display:inline-flex;align-items:center;justify-content:center;min-width:88px;height:48px;padding:0 22px;border-radius:999px;background:var(--color-brand);color:#faf9f5;font-size:15px;font-weight:600;text-decoration:none;box-shadow:0 6px 20px #b5512f66;transition:transform .15s ease}.fab:hover{transform:translateY(-1px)}.skeleton{background:linear-gradient(90deg,#eeece3 25%,#f6f4ec 37%,#eeece3 63%);background-size:400% 100%;animation:skeleton-shimmer 1.3s ease infinite}@keyframes skeleton-shimmer{0%{background-position:100% 50%}to{background-position:0 50%}}.tombstone-skeleton{background:var(--color-surface);border:1px solid var(--color-border);border-radius:var(--radius-xl);overflow:hidden}.tombstone-skeleton__media{aspect-ratio:4 / 3}.tombstone-skeleton__body{padding:12px 14px 16px}.tombstone-skeleton__line{height:14px;margin-top:10px;border-radius:6px}.tombstone-skeleton__line--title{width:55%;height:18px;margin-top:0}.tombstone-skeleton__line--rating{width:35%}.tombstone-skeleton__line--meta{width:75%}.timeline-state{padding:48px 16px;text-align:center;color:var(--color-text-tertiary)}.timeline-state .btn{margin-top:12px}.timeline-sentinel{height:1px}.timeline-loading-more,.timeline-end{margin:16px 0 32px;text-align:center;font-size:13px;color:var(--color-text-tertiary)}.pull-indicator{display:flex;align-items:center;justify-content:center;height:40px;margin:0 -16px;font-size:13px;color:var(--color-text-tertiary)}.pull-indicator.is-ready{color:var(--color-brand)}
