*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246/0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }/*
! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com
*/*,:after,:before{box-sizing:border-box;border:0 solid #e5e7eb}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;-o-tab-size:4;tab-size:4;font-family:ui-sans-serif,system-ui,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;letter-spacing:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}input::-moz-placeholder,textarea::-moz-placeholder{opacity:1;color:#9ca3af}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]:where(:not([hidden=until-found])){display:none}.visible{visibility:visible}.table{display:table}.hidden{display:none}.resize{resize:both}.truncate{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}:root{color-scheme:light;--paper:#f7f3ec;--ink:#373831;--muted:#73776b;--line:#dfdfd1;--green:#53654d}*{box-sizing:border-box}body{margin:0;background:var(--paper);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,sans-serif;line-height:1.65}.shell{max-width:1180px;margin:auto;padding:48px 24px}.masthead{display:flex;justify-content:space-between;align-items:center;margin-bottom:28px;border-bottom:1px solid var(--line);padding-bottom:28px}.eyebrow{font-size:10px;letter-spacing:.2em;color:var(--muted);margin:0 0 14px}h1{font-family:Georgia,Songti SC,serif;font-size:42px;font-weight:500;margin:0;letter-spacing:.08em}h1 span{display:block;font-family:sans-serif;font-size:12px;font-weight:400;letter-spacing:.12em;color:var(--muted);margin-top:10px}h2{font-family:Georgia,Songti SC,serif;font-size:22px;margin:0 0 14px}h2,h3{font-weight:500}h3{font-size:14px}p{margin:10px 0}.dateline,.muted,details,footer{color:var(--muted);font-size:13px}.card{background:#fffdf8;border:1px solid var(--line);padding:28px;border-radius:10px;margin-bottom:22px}.login{max-width:520px;margin:60px auto;padding:42px}label{display:block;font-size:13px;margin:12px 0}input,select,textarea{display:block;width:100%;background:#fff;border:1px solid #c6cbbc;border-radius:5px;padding:10px 12px;margin-top:6px;font:inherit;color:var(--ink)}textarea{min-height:110px;resize:vertical}input[type=file]{padding:12px}.check{display:flex;align-items:flex-start;gap:10px}.check input{width:16px;height:16px;margin-top:3px;flex-shrink:0;accent-color:var(--green)}button{cursor:pointer;border:1px solid transparent;background:var(--green);color:white;padding:10px 18px;border-radius:5px;font:inherit;font-size:13px}button:hover{filter:brightness(.94)}button:disabled{opacity:.45;cursor:not-allowed}button.quiet{background:transparent;border-color:var(--line);color:var(--ink)}button.danger{color:#9b4534;margin-top:12px}button:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,textarea:focus-visible{outline:2px solid var(--green);outline-offset:3px}.actions,.tabs{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin:16px 0}.refresh{margin-left:auto}.statusbar{display:flex;gap:22px;flex-wrap:wrap;font-size:12px;color:var(--muted);padding:8px 0 20px}.alert{border:1px solid #afc1a6;background:#eef3e8;padding:12px 18px;border-radius:5px;margin:12px 0}.alert.error{background:#fff0e9;border-color:#d9ac9a}.error-text{display:block;color:#9b4534}.photo-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:22px}.photo-card{margin:0;min-width:0}.photo-card>img{width:100%;height:240px;-o-object-fit:contain;object-fit:contain;background:#eeeee6;border-radius:5px}.badge{display:inline-block;margin:15px 0;border:1px solid var(--line);padding:2px 9px;border-radius:3px;font-size:11px;color:var(--muted)}summary{cursor:pointer;padding:7px 0}.draft{white-space:pre-wrap;font:inherit;font-size:13px;background:#f1f2e9;padding:12px}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 22px}.wide{grid-column:1/-1}.form-grid>button{justify-self:start}.rows{margin-top:26px}.row{display:flex;align-items:center;gap:16px;border-top:1px solid var(--line);padding:16px 0;font-size:13px}.row>div{flex:1;min-width:0;overflow-wrap:anywhere}.mini{width:50px;height:55px;-o-object-fit:cover;object-fit:cover;border-radius:4px}.jobs{font-size:12px;margin-top:12px}.upload-items{margin:12px 0;padding:0;list-style:none;font-size:13px}.upload-items li{border-top:1px solid var(--line);padding:10px 0}.upload-filename{display:block;overflow-wrap:anywhere;font-weight:500}.upload-items progress{display:block;width:100%;height:10px;margin-top:8px;accent-color:var(--green)}.reader{display:grid;grid-template-columns:minmax(0,2.2fr) minmax(210px,1fr);gap:24px}.reader-main{padding:40px}.letter h2{line-height:1.5;font-size:25px}.letter-photo{width:100%;max-height:650px;-o-object-fit:contain;object-fit:contain;border-radius:3px;background:#f1efe8;margin:22px 0 12px}.caption{font-family:Georgia,Songti SC,serif;white-space:pre-wrap;font-size:18px;line-height:2;margin:28px 0;overflow-wrap:anywhere}.letter aside{border-top:1px solid var(--line);padding-top:18px;font-size:12px;color:var(--muted)}.archive{align-self:start}.archive h2{font-size:17px}.archive-link{display:block;width:100%;background:transparent;color:var(--ink);text-align:left;border-bottom:1px solid var(--line);border-radius:0;padding:16px 0}.archive-link span{display:block;color:var(--muted);font-size:10px;letter-spacing:.1em}.archive-link.chosen{color:var(--green);font-weight:600}.empty{text-align:center;padding:65px 15px;color:var(--muted)}hr{border:0;margin:32px 0}footer,hr{border-top:1px solid var(--line)}footer{margin-top:50px;padding-top:22px;font-size:11px}.table-scroll{overflow-x:auto}.admin-table{width:100%;border-collapse:collapse;font-size:13px;text-align:left}.admin-table td,.admin-table th{border-bottom:1px solid var(--line);padding:12px 10px;vertical-align:top}.admin-table th{font-weight:600;white-space:nowrap}.admin-table a{color:var(--green);text-decoration:underline}.metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(135px,1fr));gap:12px;margin:20px 0}.metric{border:1px solid var(--line);border-radius:5px;padding:14px}.metric span{display:block;color:var(--muted);font-size:12px}.metric strong{font:600 26px ui-monospace,monospace}.shell:has(.library),.shell:has(.metrics),.shell:has(.statusbar){max-width:1360px;padding-top:24px}.shell:has(.statusbar) h1{font-family:inherit;font-size:25px;font-weight:600;letter-spacing:0}.shell:has(.statusbar) h2{font-family:inherit;font-size:18px;font-weight:600}.shell:has(.statusbar) .masthead{padding-bottom:16px;margin-bottom:16px}.shell:has(.statusbar) .badge{margin:0;white-space:nowrap}fieldset{min-width:0;border:0;padding:0;margin:0}.ai-toolbar,.editor-header,.library-toolbar,.pagination,.section-heading{display:flex;align-items:center;gap:16px}.section-heading{justify-content:space-between;flex-wrap:wrap}.section-heading h2{margin:0}.library-toolbar{align-items:flex-end;margin-bottom:18px}.library-toolbar label{margin:0}.library-toolbar label:first-child{flex:1}.library-toolbar select{min-width:150px}.pagination{justify-content:flex-end;margin-top:20px;font-size:13px}.material-table{table-layout:fixed}.material-table th:first-child{width:84px}.material-table th:nth-child(2){width:23%}.material-table th:nth-child(4){width:140px}.material-table th:last-child{width:120px}.material-caption{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.thumbnail-button{padding:0;background:transparent;display:block}.mini{width:58px;height:64px;-o-object-fit:contain;object-fit:contain;background:#eeeee6}.photo-dialog{width:min(1160px,calc(100vw - 32px));max-height:calc(100dvh - 32px);padding:0;border:1px solid var(--line);border-radius:10px;color:var(--ink);background:#fffdf8}.photo-dialog::backdrop{background:rgb(20 27 24/55%)}.photo-dialog h2{font-family:inherit;font-size:20px;font-weight:600;margin:0}.editor-header{justify-content:space-between;padding:16px 24px;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:2;background:#fffdf8}.editor-header .actions{margin:0;gap:8px}.editor-body{display:grid;grid-template-columns:minmax(0,.85fr) minmax(0,1.3fr);gap:28px;padding:24px}.editor-photo>img{width:100%;max-height:65vh;-o-object-fit:contain;object-fit:contain;background:#efefe8;border-radius:6px}.editor-photo details{margin-top:16px}.editor-fields label:first-child{margin-top:0}.editor-fields .caption-input{min-height:155px;font-size:16px}.ai-toolbar{align-items:flex-end;flex-wrap:wrap;margin-top:10px}.ai-toolbar label{margin:0}.editor-footer{border-top:1px solid var(--line);background:#fffdf8;padding:16px 24px}.editor-footer .actions{margin:0}.editor-footer .alert{margin-top:0}.draft-preview{max-width:430px;margin:20px auto;background:#fffefa;padding:20px 20px 36px;border:1px solid var(--line)}.draft-preview img{max-height:450px;width:100%;-o-object-fit:contain;object-fit:contain}.draft-preview .caption{font-family:inherit;margin:12px 0}.preset-panel{background:#eef3e8;border:1px solid var(--line);border-radius:6px;padding:16px;margin:12px 0;font-size:13px}@media (max-width:720px){.shell{padding:26px 16px}h1{font-size:34px}.card,.reader-main{padding:22px}.form-grid,.photo-grid,.reader{grid-template-columns:1fr}.wide{grid-column:auto}.photo-card>img{height:260px}.tabs{gap:5px}.tabs button{padding:9px 11px}.login{margin:30px auto}.library-toolbar{flex-wrap:wrap;gap:10px}.library-toolbar label:first-child{flex-basis:100%}.material-table{min-width:580px}.photo-dialog{width:100vw;max-width:100vw;height:100dvh;max-height:100dvh;border-radius:0;border:0}.editor-header{padding:12px;gap:8px}.editor-header .actions{gap:4px}.editor-header button{padding:8px}.editor-body{grid-template-columns:1fr;padding:16px;gap:16px}.editor-photo>img{max-height:32vh}.editor-footer{padding:16px}.pagination{justify-content:space-between}}