:root{--bg: #f3f4f5;--panel: #ffffff;--ink: #1f2326;--muted: #667078;--line: #dde1e4;--dark: #2a2c2e;--accent: #62a6b8;--accent-ink: #14323f;--accent-weak: #e4eff3;--danger: #c0392b;--radius: 10px;--shadow: 0 1px 2px rgba(20, 30, 40, .06), 0 4px 14px rgba(20, 30, 40, .06);color-scheme:light}*{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--ink);font-size:15px;line-height:1.45}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}h1,h2,h3{line-height:1.2;margin:0}.muted{color:var(--muted)}.small{font-size:12.5px}.only-wide{display:none}@media (min-width: 720px){.only-wide{display:inline}}.app{min-height:100%;display:flex;flex-direction:column}.topbar{background:var(--dark);color:#fff;padding:12px 20px;display:flex;align-items:center;gap:14px}.topbar .vieska-logo{height:34px;width:auto;display:block}.topbar .product{font-weight:600;font-size:15px;padding-left:14px;border-left:1px solid rgba(255,255,255,.28);letter-spacing:.01em}.brand{font-weight:700;letter-spacing:.01em;display:inline-flex;align-items:center;gap:10px}.logo{width:22px;height:22px;border:2.4px solid var(--accent);border-radius:4px;position:relative}.logo:after{content:"";position:absolute;left:4px;right:4px;bottom:0;height:8px;background:var(--accent)}button.primary{background:var(--accent);color:var(--accent-ink);border:0;padding:11px 18px;border-radius:8px;font-weight:700}button.primary:hover:not(:disabled){filter:brightness(.95)}button.primary:disabled{opacity:.5;cursor:not-allowed}button.ghost{background:transparent;border:1px solid transparent;border-radius:8px;padding:8px 10px;display:inline-flex;align-items:center;gap:6px}button.ghost:hover:not(:disabled){background:#0000000f}button:disabled{opacity:.4;cursor:default}button.icon{background:transparent;border:0;padding:6px;border-radius:6px;display:inline-flex}button.icon:hover:not(:disabled){background:#00000012}button.icon.danger:hover{color:var(--danger)}button.link{background:none;border:0;color:var(--accent-ink);text-decoration:underline;padding:0}:focus-visible{outline:3px solid #4d8fa8;outline-offset:2px}.gallery{width:100%;max-width:1100px;margin:0 auto;padding:28px 20px 60px}.hero h1{font-size:clamp(28px,4vw,40px)}.hero .lead{max-width:720px;font-size:17px;color:#3b4348;margin:12px 0 4px}.hero .sub{color:var(--muted);margin:0 0 24px}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:18px}.card{background:var(--panel);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden;display:flex;flex-direction:column}.card .thumb{border:0;padding:0;overflow:hidden;background:linear-gradient(#eef3f6,#dfe7ec);display:block;width:100%;aspect-ratio:16 / 10}.card .thumb svg,.card .thumb img{width:100%;height:100%;display:block;object-fit:cover}.card-body{padding:16px;display:flex;flex-direction:column;gap:10px;flex:1}.card-body h2{font-size:20px}.card-body p{margin:0;color:#3b4348}.card dl{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:4px 0 8px}.card dt{font-size:12px;color:var(--muted)}.card dd{margin:0;font-weight:600;font-size:14px}.card.blank{background:transparent;box-shadow:none;border:2px dashed #b9c3c9}.blank-btn{all:unset;box-sizing:border-box;cursor:pointer;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:8px;padding:24px;min-height:240px;color:#46535b}.blank-btn:hover{background:#78a6b81f}.saved{margin-top:40px}.saved h2{margin-bottom:12px}.saved ul{list-style:none;padding:0;margin:0;display:grid;gap:8px}.saved li{background:var(--panel);border-radius:8px;padding:8px 12px;display:flex;align-items:center;justify-content:space-between;gap:12px;box-shadow:var(--shadow)}.saved-open{all:unset;cursor:pointer;flex:1;display:flex;flex-direction:column;padding:4px 0}.saved-open span{color:var(--muted);font-size:13px}.saved li form{display:flex;gap:8px;width:100%}.saved li input{flex:1;padding:8px 10px;border:1px solid var(--line);border-radius:6px}.editor{display:flex;flex-direction:column;height:100vh;min-height:0}.ed-top{background:var(--dark);color:#fff;display:flex;align-items:center;gap:8px;padding:8px 12px;flex-wrap:wrap}.ed-top .name-input{order:2}.ed-top .ghost{order:1}.ed-top .ed-actions{order:3;margin-left:auto}.ed-top .ed-views{order:5;width:100%;background:#ffffff21;overflow-x:auto}.ed-top .ed-views button{color:#fff;flex:1;padding:6px 12px;white-space:nowrap}.ed-top .ed-views button:hover:not(.seg-on){background:#ffffff1f}.ed-top .ed-views button.seg-on{background:#fff;color:var(--dark)}@media (min-width: 900px){.ed-top{flex-wrap:nowrap}.ed-top .name-input{order:1;flex:1}.ed-top .ed-views{order:2;width:auto;flex:none}.ed-top .ed-actions{order:3;margin-left:0;flex:1;justify-content:flex-end}.ed-top .ghost{order:0}}.ed-top .ghost{color:#fff}.ed-top .ghost:hover:not(:disabled){background:#ffffff1f}.name-input{flex:1;min-width:0;background:transparent;border:1px solid transparent;color:#fff;font-size:17px;font-weight:600;padding:6px 8px;border-radius:6px}.name-input:hover,.name-input:focus{border-color:#ffffff4d;background:#ffffff12}.ed-actions{display:flex;gap:2px}.banner{background:#fff3cd;color:#6a5200;padding:8px 14px;font-size:14px}.ed-body{flex:1;min-height:0;display:flex;flex-direction:column-reverse}.ed-side{background:var(--panel);border-top:1px solid var(--line);overflow:hidden;max-height:52vh;display:flex;flex-direction:column;min-height:0}.ed-main{flex:1;min-height:0;display:flex;flex-direction:column;min-width:0;position:relative}@media (min-width: 900px){.ed-body{flex-direction:row}.ed-side{order:-1;width:268px;flex:none;max-height:none;border-top:0;border-right:1px solid var(--line)}}.view-area{flex:1;min-height:0;position:relative;overflow:auto;background:var(--bg)}.pad{padding:20px}.check{display:inline-flex;align-items:center;gap:6px;font-size:14px}.price-bar{flex:none;background:var(--dark);color:#fff;padding:10px 14px 12px;display:grid;gap:8px}.toggles{display:grid;gap:8px;font-size:14px}.switch{display:flex;justify-content:space-between;align-items:center;gap:8px;font-weight:600;cursor:pointer;position:relative}.switch input{position:absolute;opacity:0;top:0;right:0;bottom:0;left:0;width:100%;height:100%;margin:0;cursor:pointer}.switch i{width:40px;height:24px;border-radius:12px;background:#8a8d90;position:relative;transition:background .15s;flex:none}.switch i:after{content:"";position:absolute;top:3px;left:3px;width:18px;height:18px;border-radius:50%;background:var(--dark);transition:transform .15s}.switch input:checked+i{background:var(--accent)}.switch input:checked+i:after{transform:translate(16px)}.switch input:focus-visible+i{outline:3px solid #fff;outline-offset:2px}.price-row{display:flex;align-items:center;justify-content:space-between;gap:8px 10px;flex-wrap:wrap}.price-row .primary{flex:1;min-width:110px}.price-main{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.price-main strong{font-size:24px;letter-spacing:-.01em}.price-main span{color:#cfd5d9;font-size:13px}.price-row .primary{padding:9px 14px;white-space:nowrap}.price-details summary{cursor:pointer;font-size:13px;color:#cfd5d9;list-style-position:inside}.price-lines{list-style:none;margin:6px 0 0;padding:6px 0 0;border-top:1px solid rgba(255,255,255,.18);display:grid;gap:3px;font-size:13px;color:#dfe4e7}.price-lines li{display:flex;justify-content:space-between}.price-lines .sum{color:#fff;font-weight:600}.price-note{margin:6px 0 0;font-size:12.5px;color:#f0d98c}.panel-tabs{flex:none;display:flex;border-bottom:1px solid var(--line);background:#fff}.panel-tabs button{flex:1;border:0;background:transparent;padding:11px 6px;font-weight:600;color:var(--muted);border-bottom:2px solid transparent;display:inline-flex;justify-content:center;gap:6px;align-items:center}.panel-tabs button.on{color:var(--ink);border-bottom-color:var(--ink)}.panel-tabs em{font-style:normal;font-size:11.5px;background:var(--accent-weak);color:var(--accent-ink);border-radius:9px;padding:0 6px}.panel-scroll{flex:1;min-height:0;overflow:auto}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}.plan-opt{position:absolute;right:12px;top:10px;background:#fffffff0;padding:5px 10px;border-radius:8px;box-shadow:var(--shadow);z-index:2}.panel section{padding:14px 16px;border-bottom:1px solid var(--line)}.panel h3{font-size:13px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:10px}.field{margin-bottom:12px;display:block}.field>label{display:block;font-weight:600;margin-bottom:4px;font-size:14px}.field small{color:var(--muted)}.field select{width:100%;padding:8px 10px;border:1px solid var(--line);border-radius:6px;background:#fff}.stepper{display:grid;grid-template-columns:30px minmax(0,1fr) 30px 70px;align-items:center;gap:6px}.stepper input[type=range]{flex:1;min-width:0;accent-color:#4d8fa8}.stepper button{width:30px;height:30px;border-radius:6px;border:1px solid var(--line);background:#fff;font-size:18px;line-height:1}.stepper output{text-align:right;white-space:nowrap;font-weight:700;font-variant-numeric:tabular-nums}.swatches{display:flex;gap:6px;flex-wrap:wrap}.swatches button{width:28px;height:28px;border-radius:50%;border:2px solid #fff;box-shadow:0 0 0 1px #b8c0c5;padding:0}.swatches button.on{box-shadow:0 0 0 3px var(--accent)}.add-tools{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:10px}.add-tools button,.presets button{border:1px solid var(--line);background:#fff;border-radius:7px;padding:6px 10px;font-size:14px}.add-tools button.on,.presets button.on{background:var(--accent-weak);border-color:var(--accent);color:var(--accent-ink);font-weight:700}.hint{background:var(--accent-weak);padding:8px 10px;border-radius:6px;font-size:14px;margin:0 0 10px}.opening-list{list-style:none;margin:0 0 10px;padding:0;display:grid;gap:3px}.opening-list button{width:100%;text-align:left;border:1px solid transparent;background:transparent;padding:6px 8px;border-radius:6px;display:flex;gap:6px;align-items:baseline}.opening-list button span{margin-left:auto;color:var(--muted);font-size:13px}.opening-list button:hover{background:#f1f4f6}.opening-list button.on{background:var(--accent-weak);border-color:var(--accent)}.opening-edit{border:1px solid var(--accent);border-radius:8px;padding:10px;display:grid;gap:8px;background:#fbfdfe}.opening-head{display:flex;justify-content:space-between;align-items:center}.presets{display:flex;gap:6px;flex-wrap:wrap}.num{display:grid;grid-template-columns:1fr 78px 26px;align-items:center;gap:6px;font-size:14px}.num input{padding:6px 8px;border:1px solid var(--line);border-radius:6px;width:100%;font-variant-numeric:tabular-nums}.num em{color:var(--muted);font-style:normal;font-size:12px}.btn{font:inherit;font-size:13px;font-weight:500;padding:7px 12px;border-radius:8px;background:#fff;color:var(--ink);border:1px solid #c7ccd3;cursor:pointer;display:inline-flex;align-items:center;gap:6px;white-space:nowrap}.btn:hover{background:#f4f5f7}.btn[aria-pressed=true]{background:var(--accent-weak);border-color:var(--accent);color:var(--accent-ink)}.btn.btn-primary{background:var(--accent);color:var(--accent-ink);border-color:var(--accent);font-weight:700}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;padding:0;border:none;border-radius:8px;background:transparent;color:#5b6472;cursor:pointer}.icon-btn:hover:not(:disabled){background:#f4f5f7;color:var(--ink)}.seg{display:inline-flex;background:#f4f5f7;border-radius:9px;padding:2px;gap:2px}.seg button{font:inherit;font-size:13px;font-weight:500;padding:5px 14px;border:none;border-radius:7px;background:transparent;color:var(--ink);cursor:pointer}.seg button:hover:not(.seg-on){background:#0000000a}.seg .seg-on{background:#fff;color:var(--ink);box-shadow:var(--shadow)}.three-view{position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(#cfe5f6,#e9f4fb,#fff);overflow:hidden;container:three-scene / size}.three-canvas{position:absolute;top:0;right:0;bottom:0;left:0;touch-action:none}.three-canvas canvas{display:block;width:100%;height:100%;outline:none}.three-view-controls{position:absolute;top:12px;left:12px;z-index:2;display:flex;align-items:flex-start;gap:8px;max-width:calc(100% - 70px)}.three-mode{background:#fffffff0;box-shadow:0 2px 9px #10182829}.three-submode{background:#fffffff0;box-shadow:0 2px 9px #10182821}@container three-scene (max-width: 420px){.three-view-controls .seg button{padding-inline:8px;font-size:12px}}.three-tools{position:absolute;right:12px;top:12px;z-index:2;display:flex;gap:4px}.three-tools .icon-btn{width:30px;height:30px;background:#fff;box-shadow:0 2px 8px #10203020}.three-fit{position:absolute;left:50%;transform:translate(-50%);bottom:14px;padding:5px 10px;font-size:13px;box-shadow:0 2px 8px #10182829;z-index:2}.three-bottom{position:absolute;left:12px;bottom:14px;display:flex;gap:8px;z-index:2}.three-bottom .btn{padding:5px 10px;font-size:13px;box-shadow:0 2px 8px #10182829}.three-view.is-full{position:fixed;top:0;right:0;bottom:0;left:0;z-index:40}.three-walking .three-canvas canvas{cursor:grab}.plan-wrap{position:absolute;top:0;right:0;bottom:0;left:0;display:flex;flex-direction:column;background:#fff}.plan-svg{flex:1;min-height:0;width:100%;touch-action:none;-webkit-user-select:none;user-select:none}.plan-svg.adding{cursor:crosshair}.plan-opening.selected rect:first-child{stroke:#2d7f9d}.plan-issues{position:absolute;left:10px;top:10px;margin:0;padding:8px 12px 8px 26px;background:#fdecea;color:#8a1f14;border-radius:8px;font-size:14px;box-shadow:var(--shadow)}.elev-page{padding:14px 16px 40px}.sheet-bar{display:flex;justify-content:space-between;align-items:center;gap:10px;margin:0 auto 12px;max-width:1700px;flex-wrap:wrap}.sheet{max-width:1700px;margin:0 auto;background:#fff;border:1px solid #b8c0c6;box-shadow:var(--shadow);padding:12px;display:grid;grid-template-columns:1fr;gap:12px;page:sheet}@media (min-width: 1100px),print{.sheet .sheet-structs{grid-template-columns:repeat(3,1fr)}.sheet{grid-template-columns:1.25fr 1fr 1fr;grid-template-areas:"s w sec" "n e leg" "str str title" "foot foot title";align-items:start}.sheet>.sheet-col{display:contents}.f-s{grid-area:s}.f-w{grid-area:w}.f-sec{grid-area:sec}.f-n{grid-area:n}.f-e{grid-area:e}.sheet-legend{grid-area:leg}.sheet-structs{grid-area:str}.sheet-title{grid-area:title;align-self:end}.sheet-foot{grid-area:foot;align-self:end;margin:0}}.sheet-col{display:flex;flex-direction:column;gap:12px;min-width:0}.elev-fig{margin:0;background:#fff;padding:4px;border-bottom:1px solid var(--line)}.sheet-col .elev-fig:last-of-type{border-bottom:0}.elev-svg{width:100%;height:auto;display:block}.elev-svg *{vector-effect:non-scaling-stroke}.sheet-legend,.sheet-structs{font-family:Arial Narrow,Roboto Condensed,Helvetica Neue,Arial,sans-serif;font-size:11px}.sheet-structs{display:grid;grid-template-columns:1fr;gap:10px;padding:4px 6px}.sheet-legend{margin:0;display:grid;gap:1px;padding:4px 6px;align-content:start}.sheet-legend div{display:grid;grid-template-columns:1.1fr 1fr;gap:10px}.sheet-legend dt{font-weight:400}.sheet-legend dd{margin:0}.sheet-struct h4{margin:0 0 2px;font-size:12px;font-weight:400;display:inline-block;border-bottom:1px solid var(--ink);padding-right:40px}.sheet-struct p{margin:0;line-height:1.35}.sheet-title{border:1px solid var(--ink);font-family:Arial Narrow,Roboto Condensed,Arial,sans-serif;font-size:11px}.st-row{min-width:0;border-top:1px solid var(--ink);padding:4px 8px;display:grid;gap:1px;align-content:start}.st-row:first-child{border-top:0}.st-row.two{grid-template-columns:1fr 1fr;padding:0}.st-row.two>span{padding:4px 8px;display:grid;gap:1px}.st-row.two>span+span{border-left:1px solid var(--ink)}.st-row small{font-size:9.5px;color:#444}.st-row strong{font-size:15px;font-weight:400;letter-spacing:.02em}.st-row.company strong{font-size:14px}.st-row.company span{font-size:10.5px;color:#333}.st-row.sign{min-height:44px}.qty-page{max-width:1000px;margin:0 auto;padding:20px 16px 60px}.qty-head{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap}.qty-head p{margin:4px 0 0}.qty-actions{display:flex;gap:8px}.qty-actions button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--line);background:#fff;border-radius:8px;padding:8px 12px}.qty-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(130px,1fr));gap:10px;margin:18px 0}.qty-summary div{background:#fff;border-radius:8px;padding:10px 12px;box-shadow:var(--shadow)}.qty-summary dt{color:var(--muted);font-size:12.5px}.qty-summary dd{margin:0;font-weight:700;font-size:18px}.qty-section{margin-top:26px}.qty-section h3{font-size:17px;margin-bottom:4px}.qty-section table{width:100%;border-collapse:collapse;background:#fff;border-radius:8px;overflow:hidden;box-shadow:var(--shadow);margin-top:8px;font-size:14px}.qty-section th,.qty-section td{padding:8px 10px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}.qty-section th{background:#eef1f3;font-size:12.5px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}.qty-section .r{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#141c228c;display:flex;align-items:center;justify-content:center;padding:16px;z-index:50}.modal-card{background:#fff;border-radius:12px;padding:22px;width:100%;max-width:640px;max-height:94vh;overflow:auto;position:relative;display:grid;gap:12px}.modal-card .close{position:absolute;top:10px;right:10px}.modal-card label{display:grid;gap:4px;font-weight:600;font-size:14px}.modal-card input,.modal-card textarea{padding:9px 10px;border:1px solid var(--line);border-radius:6px;font-weight:400}.grid2{display:grid;grid-template-columns:1fr;gap:12px}@media (min-width: 600px){.grid2{grid-template-columns:1fr 1fr}}.modal-actions{display:flex;justify-content:flex-end;gap:8px}.modal-actions button:not(.primary){border:1px solid var(--line);background:#fff;border-radius:8px;padding:10px 16px}@media (max-width: 899px){.price-bar{padding-right:78px}}@page sheet{size:A3 landscape;margin:8mm}@media print{.sheet-bar{display:none!important}.sheet{box-shadow:none!important;border:1px solid #000;grid-template-columns:1.25fr 1fr 1fr!important}.topbar,.ed-top,.ed-side,.tabs,.view3d-bar,.banner{display:none!important}html,body,#root,.editor,.ed-body,.ed-main,.view-area{height:auto!important;overflow:visible!important;display:block!important;position:static!important;background:#fff!important}.qty-section table,.qty-summary div,.elev-fig{box-shadow:none;border:1px solid #ccc}.qty-section{break-inside:avoid}}.avustaja-nappi{position:fixed;right:16px;bottom:16px;width:52px;height:52px;border-radius:50%;border:2px solid var(--dark);background:#fff;color:var(--dark);display:grid;place-items:center;box-shadow:0 4px 14px #141e2859;z-index:40}.avustaja-nappi:hover{background:var(--accent-weak)}.avustaja-panel{position:fixed;right:16px;bottom:16px;width:min(380px,calc(100vw - 32px));max-height:min(560px,calc(100dvh - 32px));background:#fff;border-radius:14px;box-shadow:0 8px 30px #141e284d;z-index:41;display:flex;flex-direction:column;outline:none}.ap-head{display:flex;justify-content:space-between;align-items:center;padding:14px 14px 10px 18px;border-bottom:1px solid var(--line)}.ap-head h3{font-size:16px}.ap-body{padding:12px 18px 16px;overflow:auto;display:grid;gap:10px}.ap-body h4{font-size:16px}.ap-body h5{font-size:12px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:6px 0 4px}.ap-body p{margin:0}.ap-body kbd{background:#eef1f3;border:1px solid var(--line);border-radius:4px;padding:0 5px;font-size:12px}.ap-haku{display:flex;align-items:center;gap:8px;border:1px solid var(--line);border-radius:8px;padding:7px 10px}.ap-haku input{border:0;outline:none;flex:1;min-width:0}.ap-lista{list-style:none;margin:0;padding:0;display:grid;gap:2px}.ap-lista button{width:100%;text-align:left;background:transparent;border:0;padding:8px;border-radius:6px}.ap-lista button:hover{background:var(--accent-weak)}@media print{.avustaja-nappi,.avustaja-panel{display:none!important}}@media (max-width: 899px){.ed-top{padding:5px 10px;gap:4px 8px}.ed-top .ed-views button{padding:4px 8px;font-size:14px}.ed-side{max-height:34vh}.panel-tabs button{padding:7px 6px;font-size:14px}.price-bar{padding:6px 78px 7px 12px;gap:4px}.toggles{grid-template-columns:1fr 1fr;gap:16px;font-size:13px}.switch i{width:34px;height:20px}.switch i:after{width:14px;height:14px;top:3px;left:3px}.switch input:checked+i:after{transform:translate(14px)}.price-main strong{font-size:20px}.price-main span{font-size:12px}.price-row .primary{padding:7px 12px;font-size:14px}.price-details summary{font-size:12px}}.three-view-controls .seg button{padding:4px 10px;font-size:12.5px}.gallery-foot{margin-top:40px;padding:22px 24px;background:var(--dark);color:#dfe4e7;border-radius:var(--radius);display:grid;gap:8px}.gallery-foot img{height:38px;width:auto;justify-self:start}.gallery-foot p{margin:0;font-size:14px;color:#b9c2c7}.gallery-foot a{color:#fff}
