{"format":"murdoku-puzzle/1","id":"photostudio","version":1,"difficulty":"very-easy","level":1,"size":{"rows":5,"cols":5},"languages":["en","hu","de","fr","es","it","nl","pl","pt","ro","ca","cs","fi","vi","tr","el","ru","uk","ar","ko","ja","zh-Hans","zh-Hant"],"defaultLanguage":"en","title":"Valokuvastudio","tagline":"Muotokuvastudio Wienissä · sateinen huhtikuun aamu vuonna 1924 · lamput lämpenivät","author":"mathace","concept":"Murdoku – Manuel Garand (murdoku.com); unofficial fan-made case","created":"2026-09-29","story":"Wien, sateinen huhtikuun aamu vuonna 1924. Kärntner Straßen muotokuvastudiossa suuri puinen kamera oli valmiina, studiolamppu lämpeni ja meikkaaja levitteli puuterinsa esiin. Valeska, kauden operettidiiva, oli tullut hakemaan muotokuviaan – ja ilmoittamaan haastavansa studion oikeuteen retusoinnista, joka sai hänet näyttämään kymmenen vuotta vanhemmalta. Muutamaa minuuttia myöhemmin hänet löydettiin kuolleena vastaanotosta, tuolin vierestä. Studiossa oli neljä ihmistä, ja jokainen antoi yhden lyhyen lausunnon – etsi se, joka oli hänen kanssaan kahden kesken.","rules":{"standard":["Jokaisella <b>rivillä</b> ja jokaisessa <b>sarakkeessa</b> on täsmälleen <b>yksi henkilö</b>. Heti kun sijoitat jonkun, yliviivaa koko hänen rivinsä ja sarakkeensa.","<b>”Vieressä”</b> = suoraan vasemmalla, oikealla, ylä- tai alapuolella, ja <b>samalla alueella</b>. Esineruutuja (kamera, studiolamppu, kirjoituspöytä, pukeutumispöytä ja vaatekaappi) ei voi miehittää; tuolin, jakkaran, sohvan ja nojatuolin voi.","Murhaaja oli <b>yksin uhrin kanssa</b>: kukaan muu ei ollut sillä alueella."],"special":[]},"roleNames":{"customer":"asiakas","staff":"henkilökunta","victim":"uhri"},"personGroups":[{"id":"customers","name":"Asiakkaat","persons":["A","B","V"]},{"id":"staff","name":"Studion henkilökunta","persons":["C","D"]}],"map":{"groups":[],"gaps":[],"areas":[{"id":"Reception","cells":[[1,1],[1,2],[2,1],[2,2],[2,3],[3,2]],"fill":"#efe4d4","pattern":"carpet","labelAt":[2,2],"name":"Vastaanotto"},{"id":"Studio","cells":[[1,3],[1,4],[1,5],[2,4],[2,5],[3,3],[3,4],[3,5],[4,3],[4,4],[5,3]],"fill":"#e6e6ea","pattern":"boards","labelAt":[2,4],"name":"Studio"},{"id":"Dressing Room","cells":[[3,1],[4,1],[4,2],[5,1],[5,2]],"fill":"#f3dde3","pattern":"carpet","labelAt":[5,2],"name":"Pukuhuone"},{"id":"Waiting Corner","cells":[[4,5],[5,4],[5,5]],"fill":"#e8dccb","pattern":"planks","labelAt":[4,5],"name":"Odotusnurkkaus"}],"objectTypes":{"armchair":{"occupiable":true,"name":"nojatuoli","icon":"<rect x=\"6\" y=\"14\" width=\"34\" height=\"24\" rx=\"6\" fill=\"#b3252f\" stroke=\"#6b1218\" stroke-width=\"1.5\"/><rect x=\"11\" y=\"8\" width=\"24\" height=\"14\" rx=\"5\" fill=\"#d0333f\" stroke=\"#6b1218\" stroke-width=\"1.5\"/><rect x=\"6\" y=\"20\" width=\"7\" height=\"14\" rx=\"3\" fill=\"#8a1a22\"/><rect x=\"33\" y=\"20\" width=\"7\" height=\"14\" rx=\"3\" fill=\"#8a1a22\"/>"},"chair":{"occupiable":true,"name":"tuoli","icon":"<rect x=\"9\" y=\"7\" width=\"28\" height=\"32\" rx=\"6\" fill=\"#fbfaf6\" stroke=\"#8c8a82\" stroke-width=\"1.5\"/><rect x=\"9\" y=\"7\" width=\"28\" height=\"9\" rx=\"4\" fill=\"#d9d5cc\" stroke=\"#8c8a82\" stroke-width=\"1.5\"/>"},"sofa":{"occupiable":true,"name":"sohva","icon":"<rect x=\"3\" y=\"14\" width=\"40\" height=\"20\" rx=\"6\" fill=\"#7a5a9a\" stroke=\"#4a3560\" stroke-width=\"1.5\"/><rect x=\"7\" y=\"9\" width=\"32\" height=\"10\" rx=\"4\" fill=\"#9a7abd\" stroke=\"#4a3560\" stroke-width=\"1.5\"/><line x1=\"8\" y1=\"34\" x2=\"8\" y2=\"39\" stroke=\"#4a3560\" stroke-width=\"2\"/><line x1=\"38\" y1=\"34\" x2=\"38\" y2=\"39\" stroke=\"#4a3560\" stroke-width=\"2\"/>"},"stool":{"occupiable":true,"name":"jakkara","icon":"<circle cx=\"23\" cy=\"23\" r=\"11\" fill=\"#fbfaf6\" stroke=\"#8c8a82\" stroke-width=\"1.5\"/><circle cx=\"23\" cy=\"23\" r=\"5\" fill=\"#d9d5cc\"/>"},"camera":{"occupiable":false,"name":"kamera","icon":"<rect x=\"6\" y=\"14\" width=\"26\" height=\"18\" rx=\"3\" fill=\"#2b2f33\" stroke=\"#0b0e12\" stroke-width=\"1.5\"/><path d=\"M32 19 l9 -5 v18 l-9 -5 z\" fill=\"#2b2f33\" stroke=\"#0b0e12\" stroke-width=\"1.5\"/><circle cx=\"15\" cy=\"23\" r=\"5\" fill=\"#5b6b76\" stroke=\"#c9d6dd\" stroke-width=\"1.2\"/><circle cx=\"26\" cy=\"18\" r=\"1.6\" fill=\"#e0362e\"/><rect x=\"17\" y=\"32\" width=\"4\" height=\"9\" fill=\"#5b6b76\"/><path d=\"M10 42 l9 -4 l9 4\" fill=\"none\" stroke=\"#5b6b76\" stroke-width=\"2.5\"/>"},"desk":{"occupiable":false,"name":"kirjoituspöytä","icon":"<rect x=\"5\" y=\"12\" width=\"36\" height=\"22\" rx=\"3\" fill=\"#8f6a44\" stroke=\"#5e4127\" stroke-width=\"1.5\"/><rect x=\"9\" y=\"16\" width=\"14\" height=\"10\" fill=\"#f4efe6\" stroke=\"#8c8a82\"/><rect x=\"27\" y=\"17\" width=\"10\" height=\"4\" fill=\"#3d444b\"/>"},"dressing_table":{"occupiable":false,"name":"pukeutumispöytä","icon":"<rect x=\"6\" y=\"24\" width=\"34\" height=\"16\" rx=\"3\" fill=\"#b98a5a\" stroke=\"#6e4d2c\" stroke-width=\"1.5\"/><circle cx=\"23\" cy=\"13\" r=\"10\" fill=\"#dfe9ee\" stroke=\"#8c8a82\" stroke-width=\"1.5\"/><circle cx=\"23\" cy=\"13\" r=\"6\" fill=\"#f4f9fb\"/><rect x=\"10\" y=\"28\" width=\"8\" height=\"4\" fill=\"#e6cfa8\"/><rect x=\"28\" y=\"28\" width=\"8\" height=\"4\" fill=\"#e6cfa8\"/>"},"spotlight":{"occupiable":false,"name":"studiolamppu","icon":"<path d=\"M23 27 L13 44 M23 27 L33 44 M23 27 V44\" stroke=\"#2b2b2b\" stroke-width=\"2\" stroke-linecap=\"round\"/><path d=\"M27 12 L45 3 V25 Z\" fill=\"#f7e7a8\" opacity=\".55\"/><g transform=\"rotate(-25 21 18)\"><rect x=\"12\" y=\"12\" width=\"17\" height=\"12\" rx=\"3\" fill=\"#2f3338\" stroke=\"#111\" stroke-width=\"1.2\"/><rect x=\"28\" y=\"11\" width=\"3\" height=\"14\" rx=\"1\" fill=\"#555\"/><rect x=\"14\" y=\"9.5\" width=\"6\" height=\"2.5\" rx=\"1\" fill=\"#555\"/></g><circle cx=\"23\" cy=\"26\" r=\"2.2\" fill=\"#555\"/>"},"wardrobe":{"occupiable":false,"name":"vaatekaappi","icon":"<rect x=\"8\" y=\"3\" width=\"30\" height=\"40\" rx=\"2\" fill=\"#8f6a44\" stroke=\"#5e4127\" stroke-width=\"1.5\"/><line x1=\"23\" y1=\"3\" x2=\"23\" y2=\"43\" stroke=\"#5e4127\"/><circle cx=\"19\" cy=\"24\" r=\"1.6\" fill=\"#e6cfa8\"/><circle cx=\"27\" cy=\"24\" r=\"1.6\" fill=\"#e6cfa8\"/>"}},"wallTypes":{},"objects":[{"cell":[1,2],"type":"chair"},{"cell":[1,3],"type":"camera"},{"cell":[1,5],"type":"spotlight"},{"cell":[2,1],"type":"desk"},{"cell":[3,4],"type":"stool"},{"cell":[4,1],"type":"dressing_table"},{"cell":[4,3],"type":"sofa"},{"cell":[5,1],"type":"wardrobe"},{"cell":[5,5],"type":"armchair"}],"wallFeatures":[],"extras":[],"cellSize":46},"persons":[{"id":"A","name":"Adalbert","gender":"M","role":"customer","color":"#c62828","avatar":{"bg":"#2f4858","skin":"#e4b998","hair":"#e8e4dc","style":"short","shirt":"#264653","mustache":true,"mustacheColor":"#e8e4dc"},"clue":"Hän oli <b>Odotusnurkkauksessa</b>.","job":"eläkkeellä oleva eversti, joka odotti passikuvaansa","avatarSvg":"<svg viewBox=\"0 0 80 80\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-label=\"Adalbert\"><rect width=\"80\" height=\"80\" fill=\"#2f4858\"/><path d=\"M10 80 Q12 56 40 54 Q68 56 70 80 Z\" fill=\"#264653\"/><rect x=\"34\" y=\"44\" width=\"12\" height=\"13\" fill=\"#e4b998\"/><ellipse cx=\"40\" cy=\"34\" rx=\"14\" ry=\"16\" fill=\"#e4b998\"/><path d=\"M26 32 Q26 15 40 15 Q54 15 54 32 Q50 24 40 24 Q30 24 26 32 Z\" fill=\"#e8e4dc\"/><circle cx=\"34\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><circle cx=\"46\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><path d=\"M36 43 Q40 46 44 43\" fill=\"none\" stroke=\"#a5735a\" stroke-width=\"1.4\"/><path d=\"M33 41 Q40 37 47 41 Q40 43 33 41 Z\" fill=\"#e8e4dc\"/></svg>","solverRole":"customer","constraints":[{"type":"area","areas":["Waiting Corner"]}]},{"id":"B","name":"Blanka","gender":"F","role":"customer","color":"#2e7d32","avatar":{"bg":"#ad1457","skin":"#f6d8c0","hair":"#d9b464","style":"long","shirt":"#f4efe6","necklace":true},"clue":"Hän istui <b>jakkaralla</b>.","job":"morsian, joka poseerasi kihlajaismuotokuvaansa varten","avatarSvg":"<svg viewBox=\"0 0 80 80\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-label=\"Blanka\"><rect width=\"80\" height=\"80\" fill=\"#ad1457\"/><path d=\"M22 42 Q20 14 40 14 Q60 14 58 42 L62 72 L18 72 Z\" fill=\"#d9b464\"/><path d=\"M10 80 Q12 56 40 54 Q68 56 70 80 Z\" fill=\"#f4efe6\"/><path d=\"M31 58 Q40 66 49 58\" fill=\"none\" stroke=\"#f3e2b3\" stroke-width=\"2\" stroke-dasharray=\"2 2\"/><rect x=\"34\" y=\"44\" width=\"12\" height=\"13\" fill=\"#f6d8c0\"/><ellipse cx=\"40\" cy=\"34\" rx=\"14\" ry=\"16\" fill=\"#f6d8c0\"/><path d=\"M26 36 Q26 16 40 16 Q54 16 54 36 Q52 24 40 24 Q28 24 26 36 Z\" fill=\"#d9b464\"/><circle cx=\"34\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><circle cx=\"46\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><path d=\"M36 43 Q40 46 44 43\" fill=\"none\" stroke=\"#a5735a\" stroke-width=\"1.4\"/></svg>","solverRole":"customer","constraints":[{"type":"on","obj":"stool"}]},{"id":"C","name":"Cyprienne","gender":"F","role":"staff","color":"#1565c0","avatar":{"bg":"#6a1b9a","skin":"#f0cdb0","hair":"#1c1a1a","style":"bob","shirt":"#b83a5a","earrings":true},"clue":"Hän oli <b>pukeutumispöydän</b> vieressä.","job":"meikkaaja","avatarSvg":"<svg viewBox=\"0 0 80 80\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-label=\"Cyprienne\"><rect width=\"80\" height=\"80\" fill=\"#6a1b9a\"/><path d=\"M22 40 Q22 14 40 14 Q58 14 58 40 L58 58 L22 58 Z\" fill=\"#1c1a1a\"/><path d=\"M10 80 Q12 56 40 54 Q68 56 70 80 Z\" fill=\"#b83a5a\"/><rect x=\"34\" y=\"44\" width=\"12\" height=\"13\" fill=\"#f0cdb0\"/><ellipse cx=\"40\" cy=\"34\" rx=\"14\" ry=\"16\" fill=\"#f0cdb0\"/><path d=\"M26 36 Q26 16 40 16 Q54 16 54 36 Q52 24 40 24 Q28 24 26 36 Z\" fill=\"#1c1a1a\"/><circle cx=\"34\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><circle cx=\"46\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><path d=\"M36 43 Q40 46 44 43\" fill=\"none\" stroke=\"#a5735a\" stroke-width=\"1.4\"/><circle cx=\"26\" cy=\"41\" r=\"1.8\" fill=\"#f0c95a\"/><circle cx=\"54\" cy=\"41\" r=\"1.8\" fill=\"#f0c95a\"/></svg>","solverRole":"staff","constraints":[{"type":"beside","obj":"dressing_table"}]},{"id":"D","name":"Dieter","gender":"M","role":"staff","color":"#6a1b9a","avatar":{"bg":"#1565c0","skin":"#f1c8a5","hair":"#7a4a2a","style":"slick","shirt":"#1b1b1b","beard":true,"glasses":true},"clue":"Hän <b>ei</b> ollut <b>tuolin</b> vieressä.","job":"valokuvaaja, joka omisti studion","avatarSvg":"<svg viewBox=\"0 0 80 80\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-label=\"Dieter\"><rect width=\"80\" height=\"80\" fill=\"#1565c0\"/><path d=\"M10 80 Q12 56 40 54 Q68 56 70 80 Z\" fill=\"#1b1b1b\"/><rect x=\"34\" y=\"44\" width=\"12\" height=\"13\" fill=\"#f1c8a5\"/><ellipse cx=\"40\" cy=\"34\" rx=\"14\" ry=\"16\" fill=\"#f1c8a5\"/><path d=\"M26 30 Q27 16 44 15 Q56 15 55 26 Q48 22 40 23 Q30 24 26 30 Z\" fill=\"#7a4a2a\"/><circle cx=\"34\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><circle cx=\"46\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><path d=\"M36 43 Q40 46 44 43\" fill=\"none\" stroke=\"#a5735a\" stroke-width=\"1.4\"/><circle cx=\"34\" cy=\"35\" r=\"5\" fill=\"none\" stroke=\"#2b2b2b\" stroke-width=\"1.4\"/><circle cx=\"46\" cy=\"35\" r=\"5\" fill=\"none\" stroke=\"#2b2b2b\" stroke-width=\"1.4\"/><line x1=\"39\" y1=\"35\" x2=\"41\" y2=\"35\" stroke=\"#2b2b2b\" stroke-width=\"1.4\"/><path d=\"M27 38 Q30 52 40 53 Q50 52 53 38 Q50 47 40 48 Q30 47 27 38 Z\" fill=\"#7a4a2a\"/></svg>","solverRole":"staff","constraints":[{"type":"not_beside","obj":"chair"}]},{"id":"V","name":"Valeska","gender":"F","role":"victim","color":"#1b1b1b","avatar":{"bg":"#5a2a2a","skin":"#f3d3b5","hair":"#b7482c","style":"curly","shirt":"#7a1b3a","necklace":true,"earrings":true},"clue":"<b>Uhri.</b> Hänet löydettiin <b>Vastaanotosta</b>, <b>tuolin</b> vierestä – yksin murhaajan kanssa.","job":"operettidiiva, joka oli tullut hakemaan muotokuviaan","avatarSvg":"<svg viewBox=\"0 0 80 80\" xmlns=\"http://www.w3.org/2000/svg\" role=\"img\" aria-label=\"Valeska\"><rect width=\"80\" height=\"80\" fill=\"#5a2a2a\"/><path d=\"M10 80 Q12 56 40 54 Q68 56 70 80 Z\" fill=\"#7a1b3a\"/><path d=\"M31 58 Q40 66 49 58\" fill=\"none\" stroke=\"#f3e2b3\" stroke-width=\"2\" stroke-dasharray=\"2 2\"/><rect x=\"34\" y=\"44\" width=\"12\" height=\"13\" fill=\"#f3d3b5\"/><ellipse cx=\"40\" cy=\"34\" rx=\"14\" ry=\"16\" fill=\"#f3d3b5\"/><path d=\"M25 34 q-3 -8 4 -10 q0 -8 8 -7 q3 -4 8 -1 q6 -3 9 3 q7 0 5 8 q4 4 -1 9 q-6 -14 -16 -12 q-9 -1 -17 10 Z\" fill=\"#b7482c\"/><circle cx=\"34\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><circle cx=\"46\" cy=\"35\" r=\"1.6\" fill=\"#2b2b2b\"/><path d=\"M36 43 Q40 46 44 43\" fill=\"none\" stroke=\"#a5735a\" stroke-width=\"1.4\"/><circle cx=\"26\" cy=\"41\" r=\"1.8\" fill=\"#f0c95a\"/><circle cx=\"54\" cy=\"41\" r=\"1.8\" fill=\"#f0c95a\"/><path d=\"M12 12 L68 68 M68 12 L12 68\" stroke=\"#e0362e\" stroke-width=\"5\" stroke-linecap=\"round\" opacity=\".9\"/></svg>","solverRole":"customer","constraints":[{"type":"area","areas":["Reception"]},{"type":"beside","obj":"chair"}]}],"victim":"V","murderer":"D","solution":{"V":[1,1],"D":[2,3],"B":[3,4],"C":[4,2],"A":[5,5]},"walkthrough":[{"place":["B"],"cand":{"A":[[4,5],[5,5]],"C":[[4,2]]},"text":"Blanka istui jakkaralla, ja jakkaroita on vain yksi, ruudussa R3C4. <b>Blanka on ruudussa R3C4</b>: ruksi rivi 3 ja sarake 4."},{"place":["C","A"],"cand":{},"text":"Cyprienne oli pukeutumispöydän (R4C1, Pukuhuoneessa) vieressä. Pöydän naapuriruudut ovat R3C1, R4C2 ja vaatekaappi ruudussa R5C1; rivillä 3 on jo Blanka, joten <b>Cyprienne on ruudussa R4C2</b>. Adalbert oli Odotusnurkkauksessa: R4C5, R5C4 tai R5C5. Rivillä 4 on jo Cyprienne ja sarakkeessa 4 Blanka: <b>Adalbert on ruudussa R5C5</b>, nojatuolissa."},{"place":["D"],"cand":{},"text":"Dieter ei ollut tuolin vieressä. Hänelle ovat vielä vapaina rivit 1 ja 2 sekä sarakkeet 1 ja 3, mikä jättää jäljelle ruudut R1C1 ja R2C3 (R1C3 on kamera, R2C1 kirjoituspöytä). R1C1 on aivan tuolin (R1C2) vieressä, molemmat Vastaanotossa: <b>Dieter on ruudussa R2C3</b>."},{"final":true,"text":"Tapaus ratkaistu: viimeinen vapaa ruutu, R1C1, on uhrin – Vastaanotossa, tuolin vieressä, aivan kuten hänen korttinsa sanoo, vaikka emme koskaan tarvinneet sitä. Valeska oli siellä yksin valokuvaajan kanssa. <b>Dieter on murhaaja!</b>"}],"solver":{"rules":[],"occupiable":["armchair","chair","sofa","stool"]},"verification":{"tool":"tools/murdoku_solver.py","unique":true,"guessFree":true,"checked":"2026-09-29"}}