@import "https://fonts.googleapis.com/css2?family=DM+Sans:wght@400;600;700&family=Fraunces:opsz,wght@9..144,700&display=swap";.react-flow{--xy-edge-stroke-default:#b1b1b7;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#555;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#ffffff80;--xy-minimap-background-color-default:#fff;--xy-minimap-mask-background-color-default:#f0f0f099;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#e2e2e2;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:transparent;--xy-background-pattern-dots-color-default:#91919a;--xy-background-pattern-lines-color-default:#eee;--xy-background-pattern-cross-color-default:#e2e2e2;background-color:var(--xy-background-color,var(--xy-background-color-default));--xy-node-color-default:inherit;--xy-node-border-default:1px solid #1a192b;--xy-node-background-color-default:#fff;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #00000014;--xy-node-boxshadow-selected-default:0 0 0 .5px #1a192b;--xy-node-border-radius-default:3px;--xy-handle-background-color-default:#1a192b;--xy-handle-border-color-default:#fff;--xy-selection-background-color-default:#0059dc14;--xy-selection-border-default:1px dotted #0059dccc;--xy-controls-button-background-color-default:#fefefe;--xy-controls-button-background-color-hover-default:#f4f4f4;--xy-controls-button-color-default:inherit;--xy-controls-button-color-hover-default:inherit;--xy-controls-button-border-color-default:#eee;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#fff;--xy-edge-label-color-default:inherit;--xy-resize-background-color-default:#3367d9;direction:ltr}.react-flow.dark{--xy-edge-stroke-default:#3e3e3e;--xy-edge-stroke-width-default:1;--xy-edge-stroke-selected-default:#727272;--xy-connectionline-stroke-default:#b1b1b7;--xy-connectionline-stroke-width-default:1;--xy-attribution-background-color-default:#96969640;--xy-minimap-background-color-default:#141414;--xy-minimap-mask-background-color-default:#3c3c3c99;--xy-minimap-mask-stroke-color-default:transparent;--xy-minimap-mask-stroke-width-default:1;--xy-minimap-node-background-color-default:#2b2b2b;--xy-minimap-node-stroke-color-default:transparent;--xy-minimap-node-stroke-width-default:2;--xy-background-color-default:#141414;--xy-background-pattern-dots-color-default:#555;--xy-background-pattern-lines-color-default:#333;--xy-background-pattern-cross-color-default:#333;--xy-node-color-default:#f8f8f8;--xy-node-border-default:1px solid #3c3c3c;--xy-node-background-color-default:#1e1e1e;--xy-node-group-background-color-default:#f0f0f040;--xy-node-boxshadow-hover-default:0 1px 4px 1px #ffffff14;--xy-node-boxshadow-selected-default:0 0 0 .5px #999;--xy-handle-background-color-default:#bebebe;--xy-handle-border-color-default:#1e1e1e;--xy-selection-background-color-default:#c8c8dc14;--xy-selection-border-default:1px dotted #c8c8dccc;--xy-controls-button-background-color-default:#2b2b2b;--xy-controls-button-background-color-hover-default:#3e3e3e;--xy-controls-button-color-default:#f8f8f8;--xy-controls-button-color-hover-default:#fff;--xy-controls-button-border-color-default:#5b5b5b;--xy-controls-box-shadow-default:0 0 2px 1px #00000014;--xy-edge-label-background-color-default:#141414;--xy-edge-label-color-default:#f8f8f8}.react-flow__background{background-color:var(--xy-background-color-props,var(--xy-background-color,var(--xy-background-color-default)));pointer-events:none;z-index:-1}.react-flow__container{width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__pane{z-index:1;touch-action:none}.react-flow__pane.draggable{cursor:grab}.react-flow__pane.dragging{cursor:grabbing}.react-flow__pane.selection{cursor:pointer}.react-flow__viewport{transform-origin:0 0;z-index:2;pointer-events:none}.react-flow__renderer{z-index:4}.react-flow__selection{z-index:6}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible{outline:none}.react-flow__edge-path{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default));stroke-width:var(--xy-edge-stroke-width,var(--xy-edge-stroke-width-default));fill:none}.react-flow__connection-path{stroke:var(--xy-connectionline-stroke,var(--xy-connectionline-stroke-default));stroke-width:var(--xy-connectionline-stroke-width,var(--xy-connectionline-stroke-width-default));fill:none}.react-flow .react-flow__edges{position:absolute}.react-flow .react-flow__edges svg{pointer-events:none;position:absolute;overflow:visible}.react-flow__edge{pointer-events:visibleStroke}.react-flow__edge.selectable{cursor:pointer}.react-flow__edge.animated path{stroke-dasharray:5;animation:.5s linear infinite dashdraw}.react-flow__edge.animated path.react-flow__edge-interaction{stroke-dasharray:none;animation:none}.react-flow__edge.inactive{pointer-events:none}.react-flow__edge.selected,.react-flow__edge:focus,.react-flow__edge:focus-visible{outline:none}.react-flow__edge.selected .react-flow__edge-path,.react-flow__edge.selectable:focus .react-flow__edge-path,.react-flow__edge.selectable:focus-visible .react-flow__edge-path{stroke:var(--xy-edge-stroke-selected,var(--xy-edge-stroke-selected-default))}.react-flow__edge-textwrapper{pointer-events:all}.react-flow__edge .react-flow__edge-text{pointer-events:none;-webkit-user-select:none;user-select:none}.react-flow__arrowhead polyline{stroke:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__arrowhead polyline.arrowclosed{fill:var(--xy-edge-stroke,var(--xy-edge-stroke-default))}.react-flow__connection{pointer-events:none}.react-flow__connection .animated{stroke-dasharray:5;animation:.5s linear infinite dashdraw}svg.react-flow__connectionline{z-index:1001;position:absolute;overflow:visible}.react-flow__nodes{pointer-events:none;transform-origin:0 0}.react-flow__node{-webkit-user-select:none;user-select:none;pointer-events:all;transform-origin:0 0;box-sizing:border-box;cursor:default;position:absolute}.react-flow__node.selectable{cursor:pointer}.react-flow__node.draggable{cursor:grab;pointer-events:all}.react-flow__node.draggable.dragging{cursor:grabbing}.react-flow__nodesselection{z-index:3;transform-origin:0 0;pointer-events:none}.react-flow__nodesselection-rect{pointer-events:all;cursor:grab;position:absolute}.react-flow__handle{pointer-events:none;background-color:var(--xy-handle-background-color,var(--xy-handle-background-color-default));border:1px solid var(--xy-handle-border-color,var(--xy-handle-border-color-default));border-radius:100%;width:6px;min-width:5px;height:6px;min-height:5px;position:absolute}.react-flow__handle.connectingfrom{pointer-events:all}.react-flow__handle.connectionindicator{pointer-events:all;cursor:crosshair}.react-flow__handle-bottom{top:auto;bottom:0;left:50%;transform:translate(-50%,50%)}.react-flow__handle-top{top:0;left:50%;transform:translate(-50%,-50%)}.react-flow__handle-left{top:50%;left:0;transform:translate(-50%,-50%)}.react-flow__handle-right{top:50%;right:0;transform:translate(50%,-50%)}.react-flow__edgeupdater{cursor:move;pointer-events:all}.react-flow__pane.selection .react-flow__panel{pointer-events:none}.react-flow__panel{z-index:5;margin:15px;position:absolute}.react-flow__panel.top{top:0}.react-flow__panel.bottom{bottom:0}.react-flow__panel.top.center,.react-flow__panel.bottom.center{left:50%;transform:translate(-15px)translate(-50%)}.react-flow__panel.left{left:0}.react-flow__panel.right{right:0}.react-flow__panel.left.center,.react-flow__panel.right.center{top:50%;transform:translateY(-15px)translateY(-50%)}.react-flow__attribution{background:var(--xy-attribution-background-color,var(--xy-attribution-background-color-default));margin:0;padding:2px 3px;font-size:10px}.react-flow__attribution a{color:#999;text-decoration:none}@keyframes dashdraw{0%{stroke-dashoffset:10px}}.react-flow__edgelabel-renderer{pointer-events:none;-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__viewport-portal{-webkit-user-select:none;user-select:none;width:100%;height:100%;position:absolute;top:0;left:0}.react-flow__minimap{background:var(--xy-minimap-background-color-props,var(--xy-minimap-background-color,var(--xy-minimap-background-color-default)))}.react-flow__minimap-svg{display:block}.react-flow__minimap-mask{fill:var(--xy-minimap-mask-background-color-props,var(--xy-minimap-mask-background-color,var(--xy-minimap-mask-background-color-default)));stroke:var(--xy-minimap-mask-stroke-color-props,var(--xy-minimap-mask-stroke-color,var(--xy-minimap-mask-stroke-color-default)));stroke-width:var(--xy-minimap-mask-stroke-width-props,var(--xy-minimap-mask-stroke-width,var(--xy-minimap-mask-stroke-width-default)))}.react-flow__minimap-node{fill:var(--xy-minimap-node-background-color-props,var(--xy-minimap-node-background-color,var(--xy-minimap-node-background-color-default)));stroke:var(--xy-minimap-node-stroke-color-props,var(--xy-minimap-node-stroke-color,var(--xy-minimap-node-stroke-color-default)));stroke-width:var(--xy-minimap-node-stroke-width-props,var(--xy-minimap-node-stroke-width,var(--xy-minimap-node-stroke-width-default)))}.react-flow__background-pattern.dots{fill:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-dots-color-default)))}.react-flow__background-pattern.lines{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-lines-color-default)))}.react-flow__background-pattern.cross{stroke:var(--xy-background-pattern-color-props,var(--xy-background-pattern-color,var(--xy-background-pattern-cross-color-default)))}.react-flow__controls{box-shadow:var(--xy-controls-box-shadow,var(--xy-controls-box-shadow-default));flex-direction:column;display:flex}.react-flow__controls.horizontal{flex-direction:row}.react-flow__controls-button{background:var(--xy-controls-button-background-color,var(--xy-controls-button-background-color-default));border:none;border-bottom:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)));width:26px;height:26px;color:var(--xy-controls-button-color-props,var(--xy-controls-button-color,var(--xy-controls-button-color-default)));cursor:pointer;-webkit-user-select:none;user-select:none;justify-content:center;align-items:center;padding:4px;display:flex}.react-flow__controls-button svg{fill:currentColor;width:100%;max-width:12px;max-height:12px}.react-flow__edge.updating .react-flow__edge-path{stroke:#777}.react-flow__edge-text{font-size:10px}.react-flow__node.selectable:focus,.react-flow__node.selectable:focus-visible{outline:none}.react-flow__node-input,.react-flow__node-default,.react-flow__node-output,.react-flow__node-group{border-radius:var(--xy-node-border-radius,var(--xy-node-border-radius-default));width:150px;color:var(--xy-node-color,var(--xy-node-color-default));text-align:center;border:var(--xy-node-border,var(--xy-node-border-default));background-color:var(--xy-node-background-color,var(--xy-node-background-color-default));padding:10px;font-size:12px}.react-flow__node-input.selectable:hover,.react-flow__node-default.selectable:hover,.react-flow__node-output.selectable:hover,.react-flow__node-group.selectable:hover{box-shadow:var(--xy-node-boxshadow-hover,var(--xy-node-boxshadow-hover-default))}.react-flow__node-input.selectable.selected,.react-flow__node-input.selectable:focus,.react-flow__node-input.selectable:focus-visible,.react-flow__node-default.selectable.selected,.react-flow__node-default.selectable:focus,.react-flow__node-default.selectable:focus-visible,.react-flow__node-output.selectable.selected,.react-flow__node-output.selectable:focus,.react-flow__node-output.selectable:focus-visible,.react-flow__node-group.selectable.selected,.react-flow__node-group.selectable:focus,.react-flow__node-group.selectable:focus-visible{box-shadow:var(--xy-node-boxshadow-selected,var(--xy-node-boxshadow-selected-default))}.react-flow__node-group{background-color:var(--xy-node-group-background-color,var(--xy-node-group-background-color-default))}.react-flow__nodesselection-rect,.react-flow__selection{background:var(--xy-selection-background-color,var(--xy-selection-background-color-default));border:var(--xy-selection-border,var(--xy-selection-border-default))}.react-flow__nodesselection-rect:focus,.react-flow__nodesselection-rect:focus-visible,.react-flow__selection:focus,.react-flow__selection:focus-visible{outline:none}.react-flow__controls-button:hover{background:var(--xy-controls-button-background-color-hover-props,var(--xy-controls-button-background-color-hover,var(--xy-controls-button-background-color-hover-default)));color:var(--xy-controls-button-color-hover-props,var(--xy-controls-button-color-hover,var(--xy-controls-button-color-hover-default)))}.react-flow__controls-button:disabled{pointer-events:none}.react-flow__controls-button:disabled svg{fill-opacity:.4}.react-flow__controls-button:last-child{border-bottom:none}.react-flow__controls.horizontal .react-flow__controls-button{border-bottom:none;border-right:1px solid var(--xy-controls-button-border-color-props,var(--xy-controls-button-border-color,var(--xy-controls-button-border-color-default)))}.react-flow__controls.horizontal .react-flow__controls-button:last-child{border-right:none}.react-flow__resize-control{position:absolute}.react-flow__resize-control.left,.react-flow__resize-control.right{cursor:ew-resize}.react-flow__resize-control.top,.react-flow__resize-control.bottom{cursor:ns-resize}.react-flow__resize-control.top.left,.react-flow__resize-control.bottom.right{cursor:nwse-resize}.react-flow__resize-control.bottom.left,.react-flow__resize-control.top.right{cursor:nesw-resize}.react-flow__resize-control.handle{background-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border:1px solid #fff;border-radius:1px;width:5px;height:5px;translate:-50% -50%}.react-flow__resize-control.handle.left{top:50%;left:0}.react-flow__resize-control.handle.right{top:50%;left:100%}.react-flow__resize-control.handle.top{top:0;left:50%}.react-flow__resize-control.handle.bottom{top:100%;left:50%}.react-flow__resize-control.handle.top.left,.react-flow__resize-control.handle.bottom.left{left:0}.react-flow__resize-control.handle.top.right,.react-flow__resize-control.handle.bottom.right{left:100%}.react-flow__resize-control.line{border-color:var(--xy-resize-background-color,var(--xy-resize-background-color-default));border-style:solid;border-width:0}.react-flow__resize-control.line.left,.react-flow__resize-control.line.right{width:1px;height:100%;top:0;transform:translate(-50%)}.react-flow__resize-control.line.left{border-left-width:1px;left:0}.react-flow__resize-control.line.right{border-right-width:1px;left:100%}.react-flow__resize-control.line.top,.react-flow__resize-control.line.bottom{width:100%;height:1px;left:0;transform:translateY(-50%)}.react-flow__resize-control.line.top{border-top-width:1px;top:0}.react-flow__resize-control.line.bottom{border-bottom-width:1px;top:100%}.react-flow__edge-textbg{fill:var(--xy-edge-label-background-color,var(--xy-edge-label-background-color-default))}.react-flow__edge-text{fill:var(--xy-edge-label-color,var(--xy-edge-label-color-default))}:root{color:#24322d;background:#f3edde;font-family:DM Sans,sans-serif}*{box-sizing:border-box}body{margin:0}main{grid-template-rows:76px 1fr;height:100vh;display:grid}header{z-index:5;background:#fffaf0;border-bottom:1px solid #ded3bd;align-items:center;gap:12px;padding:12px 24px;display:flex}header h1{color:#273c35;margin:0;font:700 25px/1 Fraunces,serif}header p{color:#6f776e;margin:5px 0 0;font-size:12px}.flow-panel-toggle{color:#40544c;background:#f5ecda;border:1px solid #d9cfba;width:42px;height:42px;padding:0;font-size:25px}.brand-mark{background:#f7b267;border-radius:13px;place-items:center;width:42px;height:42px;font-size:22px;display:grid;box-shadow:inset 0 -3px #e89b51}.workspace{min-height:0;display:flex;overflow:hidden}.canvas{flex:1;min-width:0;min-height:0}.flow-panel{background:#fffaf0;border-right:1px solid #ded3bd;flex:0 0 270px;width:270px;padding:16px 13px;transition:width .22s,flex-basis .22s,padding .22s,opacity .18s;overflow:hidden auto}.flow-panel-hidden .flow-panel{opacity:0;visibility:hidden;border-right:0;flex-basis:0;width:0;padding-left:0;padding-right:0}.flow-panel-heading{justify-content:space-between;align-items:center;margin:2px 3px 13px;display:flex}.flow-panel-heading strong{font:700 19px Fraunces,serif}.flow-panel-heading span{color:#667068;text-align:center;background:#eadfc9;border-radius:999px;min-width:25px;padding:3px 7px;font-size:11px;font-weight:700}.new-flow-button{color:#fff;background:#405f9e;margin-bottom:14px}.flow-list{gap:8px;display:grid}.flow-list-item{color:#405048;text-align:left;background:#fffdf8;border:1px solid #ded3bd;grid-template-columns:29px minmax(0,1fr);align-items:center;gap:9px;padding:10px;display:grid}.flow-list-item>span{color:#796d59;background:#eee4d1;border-radius:9px;place-items:center;width:29px;height:29px;font-size:11px;display:grid}.flow-list-item div{min-width:0}.flow-list-item strong,.flow-list-item small{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.flow-list-item strong{font-size:12px}.flow-list-item small{color:#8a8f88;margin-top:3px;font-size:9px;font-weight:600}.flow-list-item.active{background:#fff0dc;border-color:#e89b51;box-shadow:inset 3px 0 #e87f4f}.flow-list-item.active>span{color:#fff;background:#e87f4f}.flow-switch-note{color:#8b685c;margin:14px 4px;font-size:10px;line-height:1.45}.node-card{background:#fffdf8;border:1px solid #d9cfba;border-radius:18px;padding:18px;box-shadow:0 12px 30px #443c2c1f}.story-node{border-top:6px solid #f7b267;width:390px}.page-node{border-top:6px solid #82c0a8;width:330px}.cover-node{border-top:6px solid #d193ba;width:360px}.image-node{border-top:6px solid #7f96d1;width:440px}.node-kicker{color:#75827b;letter-spacing:.14em;font-size:10px;font-weight:700}.node-card h2,.node-card h3{margin:6px 0 12px;font-family:Fraunces,serif}.node-card h2{font-size:24px}.node-card h3{font-size:19px}.node-card label{color:#667068;font-size:11px;font-weight:700;display:block}textarea,input,select{width:100%;font:inherit;color:inherit;background:#fff;border:1px solid #d9cfba;border-radius:9px;margin-top:5px;padding:9px}textarea{resize:vertical;height:94px}.form-grid{grid-template-columns:1.3fr .7fr .7fr;gap:8px;margin:10px 0;display:grid}button{cursor:pointer;border:0;border-radius:10px;width:100%;padding:11px;font:700 13px DM Sans}button:disabled{opacity:.55;cursor:wait}.run-button{color:#fff;background:#e87f4f}.all-images-button{color:#fff;background:#405f9e;margin-top:8px}.upload-divider{color:#8a8f88;align-items:center;gap:8px;margin:12px 0 8px;font-size:10px;display:flex}.upload-divider:before,.upload-divider:after{content:"";background:#ded4c1;flex:1;height:1px}.upload-json{text-align:center;cursor:pointer;background:#f8f4e9;border:1px dashed #a9a088;border-radius:10px;padding:10px;display:block}.upload-json span{color:#586b63;font-size:12px}.upload-json input{opacity:0;pointer-events:none;width:1px;height:1px;position:absolute}.cover-button{color:#fff;background:#a45683;margin-top:10px}.image-button{color:#fff;background:#2d7a64;margin-top:12px}.page-content-editor{height:112px;margin-bottom:7px;font-size:12px;line-height:1.5}.save-content-button{color:#356451;background:#dfe9e3;margin-bottom:9px;padding:8px}.save-message{color:#2d745d;text-align:center;background:#e8f5ee;border-radius:8px;margin-bottom:8px;padding:7px;font-size:10px}.cover-node>p{color:#58645e;max-height:100px;font-size:12px;line-height:1.5;overflow:auto}.page-node>p{color:#46564f;max-height:105px;font-size:13px;line-height:1.55;overflow:auto}details{color:#65736c;border-top:1px dashed #d8ceba;padding-top:9px;font-size:11px}details summary{cursor:pointer;font-weight:700}details p{line-height:1.4}.image-node img{background:#eee;border-radius:12px;width:100%;margin:10px 0;display:block}.image-node a{color:#536aa9;font-size:12px;font-weight:700;text-decoration:none}.image-links{justify-content:space-between;gap:12px;display:flex}.error{color:#a63c32;background:#ffebe6;border-radius:8px;margin-top:9px;padding:8px;font-size:11px}.react-flow__handle{background:#fff;border:3px solid #53665e;width:11px;height:11px}.react-flow__edge-path{stroke:#7f8f86;stroke-width:2px}.react-flow__minimap{border:1px solid #d6cbb5;border-radius:12px;overflow:hidden}.book-actions{z-index:20;background:#fffaf0f2;border:1px solid #d7cbb5;border-radius:15px;flex-wrap:wrap;justify-content:center;gap:9px;width:max-content;max-width:calc(100vw - 24px);padding:9px;display:flex;position:fixed;bottom:22px;left:50%;transform:translate(-50%);box-shadow:0 10px 30px #302b2233}.book-actions button{white-space:nowrap;color:#fff;background:#53665e;width:auto;padding:12px 17px}.book-actions .review-button{background:#d96f46}.book-actions .pdf-button{background:#8a4f76}.print-controls{gap:7px;display:flex}.print-controls select{width:auto;margin:0;padding:0 10px;font-size:12px}.generation-controls{gap:7px;display:flex}.generation-controls select{width:auto;margin:0;padding:0 10px;font-size:12px}.book-actions .generate-bottom-button{background:#405f9e}.processing-toast{z-index:80;color:#fff;background:#27322df0;border-radius:999px;align-items:center;gap:10px;padding:11px 17px;font-size:12px;font-weight:700;display:flex;position:fixed;top:92px;left:50%;transform:translate(-50%);box-shadow:0 10px 28px #00000040}.processing-toast i,.node-processing i{border:2px solid #ffffff59;border-top-color:currentColor;border-radius:50%;flex:none;width:14px;height:14px;animation:.8s linear infinite processing-spin}.node-processing{color:#405f9e;background:#edf1fa;border-radius:9px;justify-content:center;align-items:center;gap:7px;margin-top:8px;padding:8px;font-size:10px;font-weight:700;display:flex}.node-processing i{border-color:currentColor #405f9e40 #405f9e40}@keyframes processing-spin{to{transform:rotate(360deg)}}.book-actions span{color:#a63c32;align-self:center;max-width:220px;font-size:11px}.review-overlay{z-index:100;background:radial-gradient(circle,#3a3932e0,#161917f7);place-items:center;display:grid;position:fixed;inset:0;overflow:hidden}.review-close{color:#fff;z-index:2;background:#ffffff26;border-radius:50%;width:45px;height:45px;padding:0;font-size:30px;position:absolute;top:22px;right:28px}.pageflip-stage{perspective:2200px;grid-template-columns:54px minmax(0,1fr) 54px;place-items:center;gap:8px;width:100vw;height:100vh;padding:12px 14px 52px;display:grid}.real-flip-book{filter:drop-shadow(0 32px 38px #0000007a);margin:auto}.flip-page{background:#fffaf0;border:1px solid #d7c8ad;grid-template-rows:minmax(0,1fr) auto;width:100%;height:100%;display:grid;position:relative;overflow:hidden}.flip-page:after{content:"";pointer-events:none;position:absolute;inset:0;box-shadow:inset 12px 0 22px -22px #000000b3,inset -12px 0 22px -22px #000000b3}.flip-page>img{object-fit:contain;background:#eee5d4;width:100%;height:100%;min-height:0}.flip-cover{background:#3f2933;border-radius:5px 18px 18px 5px;padding:12px;display:block}.flip-cover>img{object-fit:contain;border-radius:4px 13px 13px 4px}.flip-page-caption{border-top:1px solid #e7dbc4;min-height:150px;padding:14px 24px 18px}.flip-page-caption span{color:#a96e4f;text-transform:uppercase;letter-spacing:.14em;font-size:9px;font-weight:700}.flip-page-caption h3{margin:5px 0 8px;font:700 clamp(17px,1.6vw,25px) Fraunces,serif}.flip-page-caption p{color:#47544e;max-height:72px;margin:0;font-size:clamp(11px,1vw,15px);line-height:1.55;overflow:auto}.flip-page-number{z-index:3;color:#69716c;letter-spacing:.04em;background:#454c471a;border-radius:999px;padding:3px 8px;font-size:10px;font-weight:700;position:absolute;bottom:9px;right:15px}.closed-book{background:#3f2933;border-radius:10px 28px 28px 10px;width:min(760px,76vw);height:min(570px,76vh);padding:14px;transition:transform .3s,box-shadow .3s;position:relative;overflow:hidden;transform:rotateY(-5deg);box-shadow:-16px 14px #24181e,0 35px 90px #0000008c}.closed-book:hover{transform:rotateY(0)translateY(-5px);box-shadow:-10px 12px #24181e,0 42px 100px #000000a6}.closed-book>img{object-fit:contain;background:#35262d;border-radius:6px 20px 20px 6px;width:100%;height:100%}.book-stage{perspective:1800px;grid-template-columns:62px minmax(0,1fr) 62px;align-items:center;gap:18px;width:min(1100px,92vw);display:grid}.open-stage{width:min(1500px,96vw)}.book-spread{width:100%;height:min(700px,78vh);transform-style:preserve-3d;background:#d7c6a7;border-radius:18px;grid-template-columns:1fr 1fr;padding:10px;display:grid;position:relative;overflow:hidden;box-shadow:0 35px 90px #00000085}.book-spread:after{content:"";z-index:4;pointer-events:none;background:linear-gradient(90deg,#0000,#352a1f33,#ffffff47,#352a1f33,#0000);width:28px;position:absolute;top:10px;bottom:10px;left:50%;transform:translate(-50%)}.spread-page{background:#fffaf0;grid-template-rows:minmax(0,1fr) auto;min-width:0;display:grid;overflow:hidden}.left-page{border-radius:12px 2px 2px 12px;box-shadow:inset -14px 0 20px -18px #000000b3}.right-page{border-radius:2px 12px 12px 2px;box-shadow:inset 14px 0 20px -18px #000000b3}.spread-page>img{object-fit:contain;background:#eee5d4;width:100%;height:100%;min-height:0}.spread-caption{border-top:1px solid #eadfca;min-height:145px;padding:13px 24px 18px}.spread-caption span{color:#a96e4f;text-transform:uppercase;letter-spacing:.14em;font-size:9px;font-weight:700}.spread-caption h3{margin:5px 0 7px;font:700 clamp(16px,1.5vw,24px) Fraunces,serif}.spread-caption p{color:#48544e;max-height:68px;margin:0;font-size:clamp(11px,1vw,15px);line-height:1.5;overflow:auto}.blank-page{background:linear-gradient(110deg,#f3ead8,#fffaf0)}.page-turn-sheet{z-index:8;width:calc(50% - 10px);transform-style:preserve-3d;pointer-events:none;background:#fffaf0;position:absolute;top:10px;bottom:10px;box-shadow:0 2px 18px #0000004d}.page-turn-sheet>img,.turn-page-back{border-radius:inherit;backface-visibility:hidden;width:100%;height:100%;position:absolute;inset:0}.page-turn-sheet>img{object-fit:contain;background:#eee5d4}.turn-page-back{background:linear-gradient(100deg,#e8dcc5,#fffaf0 45%,#e5d7bf);transform:rotateY(180deg)}.flip-next{transform-origin:100%;border-radius:12px 2px 2px 12px;animation:.7s cubic-bezier(.45,.05,.3,1) forwards flipLeftToRight;left:10px}.flip-previous{transform-origin:0;border-radius:2px 12px 12px 2px;animation:.7s cubic-bezier(.45,.05,.3,1) forwards flipRightToLeft;right:10px}.book-page{transform-origin:0;background:#fffaf0;border-radius:8px 22px 22px 8px;grid-template-columns:1.55fr .75fr;min-height:min(680px,78vh);padding:18px;animation:.55s cubic-bezier(.2,.8,.2,1) turnPage;display:grid;overflow:hidden;box-shadow:-12px 10px #d2c3a8,0 30px 80px #00000073}.book-page.cover{background:#412d36;grid-template-columns:1fr;padding:14px;position:relative}.book-page img{object-fit:contain;background:#eee6d7;border-radius:7px;width:100%;height:100%;max-height:calc(78vh - 36px)}.page-caption{flex-direction:column;justify-content:center;padding:32px;display:flex}.page-caption span,.cover-caption span{color:#a96e4f;text-transform:uppercase;letter-spacing:.16em;font-size:10px;font-weight:700}.page-caption h3,.cover-caption h2{margin:10px 0 18px;font-family:Fraunces,serif;font-size:clamp(25px,3vw,42px)}.page-caption p{font-size:clamp(14px,1.5vw,20px);line-height:1.7}.cover-caption{text-align:center;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#fffaf0e6;border-radius:18px;width:70%;padding:18px;position:absolute;bottom:38px;left:50%;transform:translate(-50%)}.cover-caption h2{margin:7px 0}.page-nav{color:#3c4a44;background:#fffaf0;border-radius:50%;width:58px;height:58px;padding:0;font-size:42px;line-height:1;box-shadow:0 8px 22px #00000040}.review-count{color:#fff;letter-spacing:.08em;text-align:center;font-size:12px;position:absolute;bottom:22px}.review-count span{color:#c9bca8;text-transform:uppercase;margin-top:5px;font-size:10px;font-weight:700;display:block}.review-8x6 .flip-page-caption{min-height:105px;padding-top:10px;padding-bottom:13px}.review-8x6 .flip-page-caption p{max-height:48px}@keyframes turnPage{0%{opacity:.25;transform:rotateY(-18deg)translate(30px)}to{opacity:1;transform:rotateY(0)translate(0)}}@keyframes openSpread{0%{opacity:.2;transform:scaleX(.55)rotateX(8deg)}to{opacity:1;transform:scaleX(1)rotateX(0)}}@keyframes flipLeftToRight{0%{filter:brightness();transform:rotateY(0)}45%{filter:brightness(.72)}to{filter:brightness();transform:rotateY(180deg)}}@keyframes flipRightToLeft{0%{filter:brightness();transform:rotateY(0)}45%{filter:brightness(.72)}to{filter:brightness();transform:rotateY(-180deg)}}@media (width<=760px){.flow-panel{z-index:35;flex-basis:auto;width:min(300px,86vw);position:absolute;top:76px;bottom:0;left:0;box-shadow:12px 0 30px #302b2233}.flow-panel-hidden .flow-panel{width:0}.book-stage{grid-template-columns:42px minmax(0,1fr) 42px;gap:6px}.book-page{grid-template-columns:1fr;overflow-y:auto}.book-page img{height:auto}.page-caption{padding:18px}.page-nav{width:40px;height:40px;font-size:30px}.book-actions{bottom:10px}.closed-book{width:88vw;height:68vh}.open-stage{grid-template-columns:38px minmax(0,1fr) 38px}.book-spread{height:78vh}.spread-caption{min-height:155px;padding:10px}.pageflip-stage{grid-template-columns:40px minmax(0,1fr) 40px;gap:4px;width:100vw;height:100vh;padding:8px 4px 48px}.flip-page-caption{min-height:135px;padding:10px}}.gallery-list{gap:10px;margin-top:12px;display:grid}.gallery-card{text-align:left;gap:7px;width:100%;display:grid}.gallery-card img{aspect-ratio:4/3;object-fit:cover;border-radius:8px;width:100%}.gallery-card small{font-weight:400}.catalog-metadata{border:1px solid #d9cfba;border-radius:12px;flex-wrap:wrap;align-items:center;gap:16px;margin:12px 20px;display:flex}.catalog-metadata label{gap:4px;font-size:12px;display:grid}.catalog-metadata input{border:1px solid #d9cfba;border-radius:6px;padding:8px}.catalog-metadata small{font-size:11px}.analytics-overlay{z-index:1000;background:#17201cd9;padding:24px;position:fixed;inset:0;overflow:auto}.analytics-dashboard{color:#293c35;background:#fffdf7;border-radius:16px;max-width:1280px;margin:auto;padding:24px}.analytics-heading{justify-content:space-between;align-items:flex-start;gap:16px;display:flex}.analytics-heading h2{margin-top:0}.analytics-toolbar{flex-wrap:wrap;align-items:end;gap:12px;margin:20px 0;display:flex}.analytics-toolbar label{gap:5px;font-size:13px;display:grid}.analytics-toolbar input,.analytics-toolbar select{border:1px solid #b6c1b6;border-radius:7px;width:auto;padding:9px}.analytics-cards{grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:12px;display:grid}.analytics-cards>div{background:#eef1e9;border-radius:10px;gap:8px;padding:16px;display:grid}.analytics-cards strong{font-size:25px}.analytics-table{overflow-x:auto}.analytics-table table{border-collapse:collapse;width:100%;font-size:12px}.analytics-table td,.analytics-table th{text-align:left;border-bottom:1px solid #dce0d6;padding:10px}.analytics-table code{overflow-wrap:anywhere;font-size:10px}.analytics-dashboard [role=alert]{color:#a02020}@media (width<=600px){.analytics-overlay{padding:8px}.analytics-dashboard{padding:14px}}.login-screen{grid-template-rows:none;place-items:center;height:auto;min-height:100dvh;padding:24px;display:grid}.login-card{background:#fffaf0;border:1px solid #ded3bd;border-radius:22px;width:min(100%,440px);padding:32px;box-shadow:0 16px 48px #24322d15}.login-card h1{margin:22px 0 12px;font:700 28px Fraunces,serif}.login-card p{line-height:1.6}.login-card form{gap:12px;margin-top:24px;display:grid}.login-card input{width:100%;min-height:44px;font:inherit;border:1px solid #cabea6;border-radius:9px;padding:10px 12px}.login-card button{min-height:44px}.login-card button[type=submit]{color:#fff;background:#405f9e;margin-top:8px}.login-actions{flex-wrap:wrap;gap:8px;display:flex}.logout-button{white-space:nowrap;width:auto;margin-left:auto}
