:root{--color-paper:oklch(96% .012 77);--color-paper-2:oklch(92% .018 75);--color-ink:oklch(19% .018 63);--color-muted:oklch(45% .02 65);--color-rule:oklch(81% .025 72);--color-accent:oklch(56% .19 28);--color-accent-ink:oklch(98% .01 80);--color-focus:oklch(48% .16 255);--color-error:oklch(54% .2 28);--color-scrim:oklch(19% .018 63/.42);--shadow-float:0 18px 55px oklch(19% .018 63/.2);--font-display:Georgia, "Times New Roman", serif;--font-body:Inter, ui-sans-serif, system-ui, sans-serif;--space-xs:.25rem;--space-sm:.5rem;--space-md:1rem;--space-lg:1.5rem;--space-xl:2rem;--space-2xl:3rem;--text-sm:.82rem;--text-base:1rem;--text-lg:1.25rem;--text-display:clamp(2.4rem, 7vw, 6.8rem);--ease-out:cubic-bezier(.16,1,.3,1);--ease-in:cubic-bezier(.7,0,.84,0);--ease-in-out:cubic-bezier(.65,0,.35,1);--dur-short:.18s;--dur-enter:.42s;--rule-thin:1px;--radius-field:.55rem;--radius-box:1rem;--radius-round:999px}*{box-sizing:border-box}html,body{overflow-x:clip}body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);margin:0;padding-bottom:7rem}button,input{font:inherit}:focus-visible{outline:3px solid var(--color-focus);outline-offset:3px}.shell{min-height:100vh;padding:var(--space-md)}.topbar{max-width:1100px;margin:0 auto var(--space-md);justify-content:space-between;align-items:center;gap:var(--space-md);display:flex}.brand{font-family:var(--font-display);font-size:var(--text-lg);letter-spacing:-.03em;font-weight:700}.brand span{color:var(--color-accent)}.visually-hidden{clip:rect(0 0 0 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.upload-entry{max-width:1100px;margin:0 auto var(--space-lg);align-items:end;gap:var(--space-xl);border:var(--rule-thin) solid var(--color-rule);border-radius:var(--radius-box);background:var(--color-paper-2);grid-template-columns:minmax(0,1fr) auto;padding:clamp(1.25rem,4vw,3rem);display:grid;overflow:hidden}.upload-copy{gap:var(--space-sm);display:grid}.upload-kicker{color:var(--color-accent);font-size:var(--text-sm);letter-spacing:.12em;font-weight:800}.upload-entry h1{max-width:12ch;font-family:var(--font-display);letter-spacing:-.055em;margin:0;font-size:clamp(2.2rem,6vw,5.2rem);line-height:.88}.upload-entry p{margin:var(--space-sm) 0 0;color:var(--color-muted)}.upload-button{gap:var(--space-sm);cursor:pointer;min-width:10rem}.upload-button>span:first-child{font-size:1.35rem;line-height:1}.upload-entry.has-photos{padding-block:var(--space-lg);grid-template-columns:minmax(0,1fr) auto}.upload-entry.has-photos .upload-kicker,.upload-entry.has-photos h1{display:none}.upload-entry.has-photos p{color:var(--color-ink);margin:0;font-weight:700}.workspace{gap:var(--space-md);max-width:1500px;margin:auto;display:grid}.panel{background:var(--color-paper-2);color:var(--color-ink);border:var(--rule-thin) solid var(--color-rule);box-shadow:none}.panel .card-body{gap:var(--space-lg)}.panel-title{font-family:var(--font-display);font-size:1.65rem;line-height:1}.field{gap:var(--space-sm);display:grid}.field-label{font-size:var(--text-sm);font-weight:700}.field-help{min-height:1lh;color:var(--color-muted);font-size:var(--text-sm)}.input,.file-input,.select{background:var(--color-paper);width:100%;min-height:44px;color:var(--color-ink);border-width:1px}.input:hover,.file-input:hover,.select:hover{background:var(--color-paper-2)}.input[aria-invalid=true],.file-input[aria-invalid=true]{border-color:var(--color-error)}.actions{gap:var(--space-sm);grid-template-columns:1fr 1fr;display:grid}.export-options{gap:var(--space-sm);grid-template-columns:minmax(0,1fr) minmax(0,1fr);display:grid}.month-field{gap:var(--space-sm);grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);display:grid}.btn{min-height:44px;transition:background-color var(--dur-short) var(--ease-out), transform .1s var(--ease-out)}.btn:active{transform:translateY(1px)}.btn-primary{background:var(--color-accent);color:var(--color-accent-ink);border-color:var(--color-accent)}.btn[disabled]{opacity:.5;cursor:not-allowed}.canvas-wrap{justify-content:center;min-width:0;max-width:1100px;margin:auto;display:flex}.calendar-art{isolation:isolate;background:var(--color-ink);min-height:72vh;color:var(--color-paper);border-radius:var(--radius-box);animation:enter var(--dur-enter) var(--ease-out) both;place-items:center;padding:clamp(1.25rem,4vw,4rem);display:grid;position:relative;overflow:hidden;box-shadow:0 24px 70px oklch(19% .018 63/.18)}.calendar-art[data-ratio="3:4"]{aspect-ratio:3/4;width:min(100%,75svh - 6.75rem);min-height:0}.calendar-art[data-ratio="9:16"]{aspect-ratio:9/16;width:min(100%,56.25svh - 5.0625rem);min-height:0}.calendar-art[data-ratio="9:19.5"]{aspect-ratio:9/19.5;width:min(100%,46.1538svh - 4.15385rem);min-height:0}.calendar-art:before{content:"";z-index:-2;background-image:var(--bg-image);opacity:1;background-position:50%;background-size:cover;position:absolute;inset:0}.calendar-content{width:100%}.month-heading{font-family:var(--font-display);font-size:var(--text-display);letter-spacing:-.06em;text-align:center;margin:0 0 clamp(1rem,3vw,2.5rem);line-height:.82}.weekdays,.days{grid-template-columns:repeat(7,minmax(0,1fr));gap:clamp(.35rem,1.2vw,1rem);display:grid}.weekdays{margin-bottom:var(--space-md);font-size:var(--text-sm);text-align:center;font-weight:700}.day{aspect-ratio:1;background:oklch(98% .01 80/.1);border:1px solid oklch(98% .01 80/.38);border-radius:48% 52% 45% 55%/52% 45% 55% 48%;place-items:center;min-width:0;display:grid;position:relative;overflow:hidden}.day:nth-child(3n){border-radius:36% 64% 55% 45%/55% 40% 60% 45%}.day:nth-child(4n){border-radius:var(--radius-round)}.day.empty{background:0 0;border-color:#0000}.day img{object-fit:cover;width:100%;height:100%}.day-number{border-radius:var(--radius-round);min-width:1.45rem;min-height:1.45rem;color:var(--color-paper);background:oklch(15% .02 70/.68);place-items:center;padding:.1rem;font-size:clamp(.58rem,1.1vw,.78rem);font-weight:800;display:grid;position:absolute;bottom:.1rem;right:.18rem}.day.date-only .day-number{font-family:var(--font-display);background:0 0;font-size:clamp(1rem,2.8vw,2rem);position:static}.empty-state{text-align:center;place-content:center;justify-items:center;gap:var(--space-sm);height:100%;min-height:60vh;display:grid}.empty-state strong{font-family:var(--font-display);font-size:clamp(2rem,5vw,4.5rem);line-height:.92}.empty-state p{color:oklch(92% .01 80);max-width:34ch}.app-status{min-height:1.4rem;color:var(--color-muted);font-size:var(--text-sm);text-align:right;margin:0}.tool-dock{left:50%;right:auto;bottom:max(var(--space-md), env(safe-area-inset-bottom));border:var(--rule-thin) solid var(--color-rule);border-radius:var(--radius-box);background:var(--color-paper-2);width:min(100% - 2rem,34rem);height:4.75rem;color:var(--color-ink);box-shadow:var(--shadow-float);overflow:hidden;transform:translate(-50%)}.tool-dock button{white-space:nowrap;min-width:0}.tool-dock button.dock-active{background:var(--color-accent);color:var(--color-accent-ink)}.settings-panel{z-index:1;border-radius:var(--radius-box) 0 0 var(--radius-box);background:var(--color-paper);width:min(28rem,100%);max-width:none;height:100dvh;max-height:100dvh;color:var(--color-ink);margin:0}.settings-heading{justify-content:space-between;align-items:flex-start;gap:var(--space-md);margin-bottom:var(--space-xl);display:flex}.settings-heading h1{font-family:var(--font-display);margin:0;font-size:2.4rem;font-style:normal;line-height:1}.settings-kicker{margin:0 0 var(--space-xs);color:var(--color-accent);font-size:var(--text-sm);letter-spacing:.12em;font-weight:800}.settings-fields{gap:var(--space-xl);display:grid}.privacy-note{margin-top:var(--space-xl);padding-top:var(--space-md);border-top:var(--rule-thin) solid var(--color-rule);color:var(--color-muted);font-size:var(--text-sm)}.modal::backdrop{background:var(--color-scrim)}@keyframes enter{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}@media (width>=900px){.shell{padding:var(--space-lg)}}@media (width<=560px){.topbar{justify-content:start;display:grid}.brand{white-space:nowrap;max-width:100%;font-size:.95rem}.app-status{text-align:left;max-width:100%}.upload-entry,.upload-entry.has-photos{align-items:stretch;gap:var(--space-lg);grid-template-columns:1fr}.upload-entry h1{font-size:clamp(2.35rem,13vw,4rem)}.upload-button{width:100%}.calendar-art{min-height:0;padding:var(--space-md)}.weekdays,.days{gap:.28rem}.settings-panel{border-radius:var(--radius-box) var(--radius-box) 0 0}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
