html,body,#root{height:100%;margin:0;padding:0}body{-webkit-font-smoothing:antialiased}:root{--cream:#fbf5ec;--panel:#fff7ec;--line:#eaddc9;--line-soft:#efe0cb;--brown:#4a3b32;--brown-soft:#b9825f;--orange:#e8663f;--orange-dark:#c14b28;--orange-tint:#fff1e2}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{background:var(--cream);color:var(--brown);-webkit-font-smoothing:antialiased;font-family:Inter,system-ui,-apple-system,Segoe UI,sans-serif}button{cursor:pointer;font-family:inherit}.shell{flex-direction:column;height:100vh;display:flex}.topnav{background:var(--panel);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;height:62px;min-height:62px;padding:0 24px;display:flex}.topnav .brand{color:var(--orange-dark);letter-spacing:-.01em;cursor:pointer;align-items:center;gap:10px;font-size:19px;font-weight:800;display:flex}.topnav .brand .mk{font-size:24px}.topnav .nav-right{align-items:center;gap:16px;display:flex}.topnav .navlink{color:var(--brown-soft);background:0 0;border:none;font-size:14px;font-weight:600}.topnav .navlink:hover,.topnav .navlink.active{color:var(--orange-dark)}.topnav .avatar{background:var(--orange);color:#fff;border-radius:50%;place-items:center;width:34px;height:34px;font-size:14px;font-weight:700;display:grid}.topnav .chip-local{color:var(--brown-soft);background:var(--orange-tint);border:1px solid var(--line-soft);border-radius:999px;padding:5px 11px;font-size:12px}.body,.app{flex:1;min-width:0;min-height:0;display:flex}.panel{background:var(--panel);border-right:1px solid var(--line);flex-direction:column;gap:13px;width:304px;min-width:304px;height:100%;padding:20px 18px 40px;display:flex;overflow-y:auto}.nameinput{width:100%;color:var(--brown);background:#fffdf8;border:1px solid #e6d6bf;border-radius:12px;padding:11px 13px;font-family:inherit;font-size:14px;font-weight:600}.nameinput:focus{border-color:var(--orange);outline:none}.upload{cursor:pointer;background:var(--orange-tint);color:var(--orange-dark);text-align:center;border:2px dashed #e2a07f;border-radius:16px;flex-direction:column;align-items:center;gap:3px;padding:18px;transition:border-color .15s,background .15s;display:flex}.upload:hover{border-color:var(--orange);background:#ffe9d6}.upload span{font-size:14px;font-weight:700}.upload small{color:var(--brown-soft);font-size:11px}.btn,button.primary,button.ghost{border:none;border-radius:14px;width:100%;padding:12px;font-size:14px;transition:filter .15s,background .15s}button.primary{background:var(--orange);color:#fff;font-weight:800;box-shadow:0 6px 16px #e8663f52}button.primary:hover{filter:brightness(1.05)}button.primary:disabled{opacity:.5;cursor:not-allowed;box-shadow:none}button.ghost{background:var(--orange-tint);color:var(--orange-dark);font-weight:700}button.ghost:hover{background:#ffe9d6}button.ghost:disabled{opacity:.5;cursor:not-allowed}.actions{flex-direction:column;gap:8px;display:flex}.section{border-top:1px solid var(--line);flex-direction:column;gap:13px;padding-top:13px;display:flex}.section h2{text-transform:uppercase;letter-spacing:.05em;color:#a9663f;margin:0;font-size:12px;font-weight:800}.control.disabled{opacity:.4;pointer-events:none}.control-row{justify-content:space-between;align-items:baseline;margin-bottom:6px;display:flex}.control-row label{color:var(--brown);font-size:13px;font-weight:600}.control-row .val{color:var(--orange);font-variant-numeric:tabular-nums;font-size:12px;font-weight:700}input[type=range]{appearance:none;background:#f0dfc8;border-radius:6px;outline:none;width:100%;height:6px}input[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:var(--orange);cursor:pointer;border:3px solid var(--panel);border-radius:50%;width:17px;height:17px;box-shadow:0 1px 4px #c8502866}input[type=range]::-moz-range-thumb{background:var(--orange);cursor:pointer;border:3px solid var(--panel);border-radius:50%;width:15px;height:15px}.toggle{color:var(--brown);cursor:pointer;-webkit-user-select:none;user-select:none;align-items:center;gap:9px;font-size:13px;font-weight:600;display:flex}.toggle input{width:16px;height:16px;accent-color:var(--orange);cursor:pointer}.stats{border-top:1px solid var(--line);flex-direction:column;gap:7px;padding-top:13px;display:flex}.stats div{justify-content:space-between;font-size:13px;display:flex}.stats span{color:var(--brown-soft)}.stats b{font-variant-numeric:tabular-nums;color:var(--brown)}.viewport{flex:1;min-width:0;height:100%;position:relative;overflow:hidden}.viewport canvas{display:block;position:absolute;top:0;left:0;width:100%!important;height:100%!important}.badge{background:var(--orange);color:#fff;z-index:5;border-radius:999px;padding:6px 14px;font-size:12px;font-weight:700;position:absolute;top:16px;left:50%;transform:translate(-50%)}.toast{color:var(--orange-dark);border:1px solid var(--line);z-index:6;background:#fff;border-radius:12px;padding:9px 15px;font-size:13px;font-weight:700;position:absolute;top:16px;right:16px;box-shadow:0 8px 24px #7850281f}.hint{color:var(--brown-soft);pointer-events:none;font-size:11px;position:absolute;bottom:14px;left:50%;transform:translate(-50%)}.gallery{flex:1;padding:28px 36px;overflow-y:auto}.gallery-head{justify-content:space-between;align-items:center;margin-bottom:22px;display:flex}.gallery-head h2{color:var(--orange-dark);letter-spacing:-.02em;margin:0;font-size:25px;font-weight:800}.gallery-head button{width:auto;padding:11px 20px}.grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:20px;display:grid}.card{border:1px solid var(--line-soft);cursor:pointer;background:#fff;border-radius:18px;transition:transform .12s,box-shadow .12s;position:relative;overflow:hidden;box-shadow:0 4px 14px #7850280f}.card:hover{transform:translateY(-2px);box-shadow:0 12px 28px #7850281f}.card .thumb{background:var(--orange-tint);place-items:center;height:150px;display:grid}.card .thumb img{object-fit:contain;width:100%;height:100%}.card .thumb .ph{opacity:.5;font-size:40px}.card .meta{padding:13px 15px}.card .meta b{font-size:15px;display:block}.card .meta small{color:var(--brown-soft);margin-top:3px;font-size:11.5px;display:block}.card .del{width:28px;height:28px;color:var(--orange-dark);opacity:0;background:#ffffffd9;border:none;border-radius:8px;place-items:center;font-size:14px;transition:opacity .12s;display:grid;position:absolute;top:10px;right:10px}.card:hover .del{opacity:1}.card .del:hover{background:#fff}.empty{text-align:center;color:var(--brown-soft);padding:70px 20px}.empty .mk{font-size:46px}.empty h3{color:var(--brown);margin:12px 0 6px}.empty button{width:auto;margin-top:14px;padding:11px 22px;display:inline-block}.auth-wrap{flex:1;place-items:center;padding:24px;display:grid}.auth-card{border:1px solid var(--line-soft);text-align:center;background:#fff;border-radius:22px;width:100%;max-width:400px;padding:34px 30px;box-shadow:0 12px 40px #7850281a}.auth-card .mk{font-size:44px}.auth-card h1{color:var(--orange-dark);margin:10px 0 4px;font-size:23px;font-weight:800}.auth-card p{color:var(--brown-soft);margin:0 0 22px;font-size:14px;line-height:1.5}.auth-card input{border:1px solid #e6d6bf;border-radius:12px;width:100%;margin-bottom:12px;padding:13px 15px;font-family:inherit;font-size:15px}.auth-card input:focus{border-color:var(--orange);outline:none}.auth-card .msg{color:var(--orange-dark);margin-top:14px;font-size:13px;font-weight:600}.auth-card .msg.ok{color:#2e7d4f}.admin{flex:1;max-width:920px;padding:28px 36px;overflow-y:auto}.admin-head{justify-content:space-between;align-items:center;margin-bottom:18px;display:flex}.admin-head h2{color:var(--orange-dark);letter-spacing:-.02em;margin:0;font-size:24px;font-weight:800}button.ghost.small,button.small{width:auto;padding:8px 14px;font-size:13px}.admin-msg{border-radius:12px;margin-bottom:14px;padding:10px 14px;font-size:13px;font-weight:600}.admin-msg.ok{color:#2e7d4f;background:#e8f6ec}.admin-msg.err{color:#c0392b;background:#fdecea}.admin-new{border:1px solid var(--line-soft);background:#fff;border-radius:14px;flex-wrap:wrap;align-items:center;gap:10px;margin-bottom:20px;padding:14px;display:flex}.admin-new input{border:1px solid #e6d6bf;border-radius:10px;flex:1;min-width:130px;padding:9px 12px;font-family:inherit;font-size:14px}.admin-new input:focus{border-color:var(--orange);outline:none}.admin-new .toggle{flex:none}.admin-new button.primary{width:auto;padding:10px 18px}.admin-table{border-collapse:collapse;border:1px solid var(--line-soft);background:#fff;border-radius:14px;width:100%;overflow:hidden}.admin-table th{text-align:left;text-transform:uppercase;letter-spacing:.06em;color:#a9663f;border-bottom:1px solid var(--line-soft);padding:12px 14px;font-size:11px}.admin-table td{border-bottom:1px solid var(--line-soft);vertical-align:middle;padding:12px 14px;font-size:14px}.admin-table tr:last-child td{border-bottom:none}.admin-table .muted{color:var(--brown-soft)}.admin-table .you{color:var(--brown-soft);font-size:12px}.pill{color:#8a6a45;background:#efe3d0;border-radius:999px;padding:3px 10px;font-size:11.5px;font-weight:700}.pill.admin{color:var(--orange-dark);background:#ffe0d3}.row-actions{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}button.mini{background:var(--orange-tint);width:auto;color:var(--orange-dark);border-radius:8px;padding:6px 11px;font-size:12px;font-weight:600}button.mini:hover{background:#ffe1cf}button.mini.danger{color:#c0392b;background:#fdecea}button.mini.danger:hover{background:#f9d9d5}button.mini:disabled{opacity:.4;cursor:not-allowed}.account{flex:1;place-items:center;padding:24px;display:grid}.account-card{border:1px solid var(--line-soft);background:#fff;border-radius:20px;width:100%;max-width:400px;padding:30px;box-shadow:0 8px 30px #78502814}.account-card h2{color:var(--orange-dark);margin:0 0 4px;font-size:22px;font-weight:800}.account-card p{color:var(--brown-soft);margin:0 0 20px;font-size:14px}.account-card input{border:1px solid #e6d6bf;border-radius:12px;width:100%;margin-bottom:12px;padding:12px 14px;font-family:inherit;font-size:15px}.account-card input:focus{border-color:var(--orange);outline:none}.splash{color:var(--brown-soft);flex:1;place-items:center;display:grid}.splash .mk{font-size:40px;animation:1.3s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:.4}50%{opacity:1}}
