DmitrMakeev commited on
Commit
2c7ab53
·
verified ·
1 Parent(s): f28bcce

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +217 -207
app.py CHANGED
@@ -979,6 +979,150 @@ def clear_chat():
979
 
980
 
981
  # енерирует HTML код мандалы идентично JavaScript верси
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
982
  def generate_mandala_html(pattern_array, container_id="mandala-container"):
983
  """Генер��рует HTML код мандалы идентично JavaScript версии"""
984
 
@@ -1017,12 +1161,36 @@ def generate_mandala_html(pattern_array, container_id="mandala-container"):
1017
 
1018
  return '\n'.join(html_parts)
1019
 
1020
- # HTML шаблон как строка
1021
  MANDALA_TEMPLATE = """
1022
  <!DOCTYPE html>
1023
  <html>
1024
  <head>
1025
  <style>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1026
  .container_top { padding-top: 30px; }
1027
  .details_numbers { margin: 15px 0 0px 0; }
1028
  .details_numbers br { clear: both; }
@@ -1032,7 +1200,6 @@ MANDALA_TEMPLATE = """
1032
  .smenu { margin: 0 auto 20px auto; width: 100%; }
1033
  .btn.disabled{ }
1034
  .hid { display: none!important; }
1035
-
1036
  .clear { clear: both; }
1037
  .graphs { margin: 20px 0 0 0; }
1038
  .graph_numbers { /* float: left; */ }
@@ -1043,16 +1210,12 @@ MANDALA_TEMPLATE = """
1043
  .method_light tr td { border-right: 1px #000 solid; border-bottom: 1px #000 solid; vertical-align: middle; text-align: center; }
1044
  .method_light tr td.decart_gorizont { border-bottom: 3px #000 solid!important; }
1045
  .method_light tr td.decart_vertical { border-right: 3px #000 solid!important; }
1046
-
1047
  .graph_colors .method_light { border-left: 1px #000 solid; border-top: 1px #000 solid; }
1048
  .graph_colors .method_light tr { padding: 0px; margin: 0px; }
1049
  .graph_colors .method_light tr td { padding: 0px; margin: 0px; border-right: 1px #000 solid; border-bottom: 1px #000 solid; }
1050
-
1051
  .no-border .method_light, .no-border .method_light tr td {
1052
  border: 0px!important;
1053
  }
1054
-
1055
-
1056
  .cell, .cell_noresize { text-align: center; display: block; width: 18px; height: 18px; }
1057
  .cell_noresize { border: 1px #ccc solid; }
1058
  .white { color: #ffffff; background-color: #ffffff; }
@@ -1065,7 +1228,6 @@ MANDALA_TEMPLATE = """
1065
  .pink { color: #ff00ff; background-color: #ff00ff; }
1066
  .orange { color: #ff9900; background-color: #ff9900; }
1067
  .violet { color: #9900ff; background-color: #9900ff; }
1068
-
1069
  @media print {
1070
  .white { color: #ffffff!important; background-color: #ffffff!important; }
1071
  .red { color: #ff0000!important; background-color: #ff0000!important; }
@@ -1081,22 +1243,18 @@ MANDALA_TEMPLATE = """
1081
 
1082
  .hide, .mob-only { display: none;}
1083
  .show { display: block; }
1084
-
1085
  .print { margin: 40px auto; }
1086
  .one_color {}
1087
  .one_color .cell_noresize { margin-right: 8px; }
1088
  .one_color span { float: left; }
1089
  .one_color p { clear: both; /* padding: 0 37px; */ }
1090
-
1091
  #word { max-width: calc(100% - 80px); height: 66x; font-size: 20px; }
1092
  .navbar-form-own .btn-default { width: 18%; text-transform: uppercase; }
1093
  .off { display: none; }
1094
  .on { display: block; }
1095
-
1096
  .numerology_details { }
1097
  .numerology_details tr td { text-align: center; width: 25px; }
1098
  .numerology_details tr td.wc { font-weight: bold; }
1099
-
1100
  .plinks { margin: 10px 0 0 0; padding: 0px; }
1101
  .plinks li {
1102
  list-style: none;
@@ -1104,17 +1262,12 @@ MANDALA_TEMPLATE = """
1104
  margin: 0 20px 0 0;
1105
  padding: 0px;
1106
  }
1107
-
1108
  .green_b { background: green!important; }
1109
  .red_b { background: red!important; }
1110
  .point_number { width: 50px; text-align: center; }
1111
-
1112
  .method_point { margin: auto; }
1113
  .graph_numbers .method_point tr td { width: 16px; height: 16px; vertical-align: middle; font-size: 18px; line-height: 16px; }
1114
  .method_point tr td { vertical-align: middle; text-align: center; }
1115
-
1116
-
1117
-
1118
  .tooltip{
1119
  position:absolute;
1120
  z-index:1070;
@@ -1209,7 +1362,6 @@ MANDALA_TEMPLATE = """
1209
  background-color:#000;
1210
  border-radius:.25rem
1211
  }
1212
-
1213
  .glyphicon-exclamation-sign{
1214
  margin: 10px 10px 0 10px;
1215
  }
@@ -1225,19 +1377,16 @@ MANDALA_TEMPLATE = """
1225
  padding: 0px!important;
1226
  }
1227
  }
1228
-
1229
  .overflow-auto { overflow: auto; width: 100%; }
1230
  .nowrap { white-space: nowrap; }
1231
  .w100 { text-align: center; margin: 10px 0 0 10px; }
1232
  .tor_value { font-size: 10px; }
1233
-
1234
  .nav-pills{
1235
  display: flex;
1236
  justify-content: center;
1237
  align-items: center;
1238
 
1239
  }
1240
-
1241
  .tab-ids li a { font-weight: 600; }
1242
  .navbar-form-own {
1243
  }
@@ -1256,9 +1405,7 @@ MANDALA_TEMPLATE = """
1256
  }
1257
 
1258
  }
1259
-
1260
 
1261
-
1262
  .romb {
1263
  width: 0;
1264
  height: 0;
@@ -1284,18 +1431,11 @@ MANDALA_TEMPLATE = """
1284
  /* color: white; */
1285
  z-index: 2;
1286
  }
1287
-
1288
-
1289
-
1290
-
1291
-
1292
-
1293
  .hexagon.courts {
1294
  height: 700px;
1295
  width: 700px;
1296
  margin: 90px auto 20px;
1297
  }
1298
-
1299
  .courts .hex {
1300
  margin-top: 8px;
1301
  width: 16px;
@@ -1320,11 +1460,9 @@ MANDALA_TEMPLATE = """
1320
  border-left: 8px solid transparent;
1321
  border-right: 8px solid transparent;
1322
  }
1323
-
1324
  .hexagon.courts .line {
1325
  margin-top: -4px!important;
1326
  }
1327
-
1328
  .hexagon.courts .side {
1329
  display: inline-block;
1330
  margin: 0px;
@@ -1351,7 +1489,6 @@ MANDALA_TEMPLATE = """
1351
  top: 133px;
1352
  z-index: 4;
1353
  }
1354
-
1355
  .hexagon.courts .side-4 {
1356
  transform: rotate(150deg);
1357
  position: absolute;
@@ -1373,9 +1510,6 @@ MANDALA_TEMPLATE = """
1373
  top: 114px;
1374
  z-index: 1;
1375
  }
1376
-
1377
-
1378
-
1379
  .hexagon {
1380
  position: relative;
1381
  /* max-width: 438px;*/
@@ -1391,7 +1525,6 @@ MANDALA_TEMPLATE = """
1391
  width: 500px;
1392
  margin-top: -11px;
1393
  }
1394
-
1395
  .hexagon .side {
1396
  display: inline-block;
1397
  margin: 0px;
@@ -1415,7 +1548,6 @@ MANDALA_TEMPLATE = """
1415
  left: 256px;
1416
  top: 148px;
1417
  }
1418
-
1419
  .hexagon .side-4 {
1420
  transform: rotate(150deg);
1421
  position: absolute;
@@ -1434,11 +1566,6 @@ MANDALA_TEMPLATE = """
1434
  left: -85px;
1435
  top: 148px;
1436
  }
1437
-
1438
-
1439
-
1440
-
1441
-
1442
  .hexagon.size-6 {
1443
  position: relative;
1444
  height: 400px;
@@ -1453,7 +1580,6 @@ MANDALA_TEMPLATE = """
1453
  width: 500px;
1454
  margin-top: -11px;
1455
  }
1456
-
1457
  .hexagon.size-6 .side {
1458
  display: inline-block;
1459
  margin: 0px;
@@ -1476,9 +1602,7 @@ MANDALA_TEMPLATE = """
1476
  position: absolute;
1477
  left: 114px;
1478
  top: 66px;
1479
-
1480
  }
1481
-
1482
  .hexagon.size-6 .side-4 {
1483
  transform: rotate(150deg);
1484
  position: absolute;
@@ -1497,8 +1621,6 @@ MANDALA_TEMPLATE = """
1497
  left: -38px;
1498
  top: 66px;
1499
  }
1500
-
1501
-
1502
  .hexagon.size-8 {
1503
  position: relative;
1504
  /* max-width: 438px;*/
@@ -1514,7 +1636,6 @@ MANDALA_TEMPLATE = """
1514
  width: 500px;
1515
  margin-top: -11px;
1516
  }
1517
-
1518
  .hexagon.size-8 .side {
1519
  display: inline-block;
1520
  margin: 0px;
@@ -1538,7 +1659,6 @@ MANDALA_TEMPLATE = """
1538
  left: 143px;
1539
  top: 82px;
1540
  }
1541
-
1542
  .hexagon.size-8 .side-4 {
1543
  transform: rotate(150deg);
1544
  position: absolute;
@@ -1557,9 +1677,6 @@ MANDALA_TEMPLATE = """
1557
  left: -48px;
1558
  top: 82px;
1559
  }
1560
-
1561
-
1562
-
1563
  .hexagon.size-12 {
1564
  position: relative;
1565
  height: 580px;
@@ -1574,7 +1691,6 @@ MANDALA_TEMPLATE = """
1574
  width: 500px;
1575
  margin-top: -11px;
1576
  }
1577
-
1578
  .hexagon.size-12 .side {
1579
  display: inline-block;
1580
  margin: 0px;
@@ -1598,7 +1714,6 @@ MANDALA_TEMPLATE = """
1598
  left: 200px;
1599
  top: 115px;
1600
  }
1601
-
1602
  .hexagon.size-12 .side-4 {
1603
  transform: rotate(150deg);
1604
  position: absolute;
@@ -1617,9 +1732,6 @@ MANDALA_TEMPLATE = """
1617
  left: -67px;
1618
  top: 115px;
1619
  }
1620
-
1621
-
1622
-
1623
  .hexagon.courts.size-12 {
1624
  position: relative;
1625
  height: 580px;
@@ -1634,7 +1746,6 @@ MANDALA_TEMPLATE = """
1634
  width: 500px;
1635
  margin-top: -11px;
1636
  }
1637
-
1638
  .hexagon.courts.size-12 .side {
1639
  display: inline-block;
1640
  margin: 0px;
@@ -1658,7 +1769,6 @@ MANDALA_TEMPLATE = """
1658
  left: 115px;
1659
  top: 68px;
1660
  }
1661
-
1662
  .hexagon.courts.size-12 .side-4 {
1663
  transform: rotate(150deg);
1664
  position: absolute;
@@ -1678,9 +1788,6 @@ left: 115px;
1678
  left: -39px;
1679
  top: 67px;
1680
  }
1681
-
1682
-
1683
-
1684
  .hexagon.courts.size-16 .side-1 {
1685
  transform: rotate(-30deg);
1686
  position: absolute;
@@ -1699,7 +1806,6 @@ left: 115px;
1699
  left: 158px;
1700
  top: 90px;
1701
  }
1702
-
1703
  .hexagon.courts.size-16 .side-4 {
1704
  transform: rotate(150deg);
1705
  position: absolute;
@@ -1718,18 +1824,10 @@ transform: rotate(270deg);
1718
  left: -52px;
1719
  top: 92px;
1720
  }
1721
-
1722
  .octagon.size-16 {
1723
  width: 700px;
1724
  height: 700px;
1725
  }
1726
-
1727
-
1728
-
1729
-
1730
-
1731
-
1732
-
1733
  .hexagon.size-24 {
1734
  position: relative;
1735
  /* max-width: 438px;*/
@@ -1768,7 +1866,6 @@ transform: rotate(270deg);
1768
  left: 371px;
1769
  top: 214px;
1770
  }
1771
-
1772
  .hexagon.size-24 .side-4 {
1773
  transform: rotate(150deg);
1774
  position: absolute;
@@ -1787,9 +1884,6 @@ transform: rotate(270deg);
1787
  left: -124px;
1788
  top: 213px;
1789
  }
1790
-
1791
-
1792
-
1793
  .octagon {
1794
  position: relative;
1795
  /* max-width: 438px;*/
@@ -1820,7 +1914,6 @@ transform: rotate(270deg);
1820
  left: 256px;
1821
  top: 106px;
1822
  }
1823
-
1824
  .octagon .side-4 {
1825
  transform: rotate(112.5deg);
1826
  position: absolute;
@@ -1839,25 +1932,18 @@ transform: rotate(270deg);
1839
  left: 0px;
1840
  top: 362px;
1841
  }
1842
-
1843
  .octagon .side-7 {
1844
  transform: rotate(247.5deg);
1845
  position: absolute;
1846
  left: -106px;
1847
  top: 256px;
1848
  }
1849
-
1850
  .octagon .side-8 {
1851
  transform: rotate(292.5deg);
1852
  position: absolute;
1853
  left: -106px;
1854
  top: 106px;
1855
  }
1856
-
1857
-
1858
-
1859
-
1860
-
1861
  .octagon.size-6 {
1862
  position: relative;
1863
  /* max-width: 438px;*/
@@ -1888,7 +1974,6 @@ transform: rotate(270deg);
1888
  left: 113px;
1889
  top: 47px;
1890
  }
1891
-
1892
  .octagon.size-6 .side-4 {
1893
  transform: rotate(112.5deg);
1894
  position: absolute;
@@ -1907,24 +1992,18 @@ transform: rotate(270deg);
1907
  left: 0px;
1908
  top: 161px;
1909
  }
1910
-
1911
  .octagon.size-6 .side-7 {
1912
  transform: rotate(247.5deg);
1913
  position: absolute;
1914
  left: -47px;
1915
  top: 114px;
1916
  }
1917
-
1918
  .octagon.size-6 .side-8 {
1919
  transform: rotate(292.5deg);
1920
  position: absolute;
1921
  left: -47px;
1922
  top: 47px;
1923
  }
1924
-
1925
-
1926
-
1927
-
1928
  .octagon.size-8 {
1929
  position: relative;
1930
  /* max-width: 438px;*/
@@ -1955,7 +2034,6 @@ transform: rotate(270deg);
1955
  left: 142px;
1956
  top: 59px;
1957
  }
1958
-
1959
  .octagon.size-8 .side-4 {
1960
  transform: rotate(112.5deg);
1961
  position: absolute;
@@ -1974,24 +2052,18 @@ transform: rotate(270deg);
1974
  left: 0px;
1975
  top: 201px;
1976
  }
1977
-
1978
  .octagon.size-8 .side-7 {
1979
  transform: rotate(247.5deg);
1980
  position: absolute;
1981
  left: -59px;
1982
  top: 142px;
1983
  }
1984
-
1985
  .octagon.size-8 .side-8 {
1986
  transform: rotate(292.5deg);
1987
  position: absolute;
1988
  left: -59px;
1989
  top: 59px;
1990
  }
1991
-
1992
-
1993
-
1994
-
1995
  .octagon.size-12 {
1996
  position: relative;
1997
  /* max-width: 438px;*/
@@ -2022,7 +2094,6 @@ transform: rotate(270deg);
2022
  left: 220px;
2023
  top: 106px;
2024
  }
2025
-
2026
  .octagon.size-12 .side-4 {
2027
  transform: rotate(112.5deg);
2028
  position: absolute;
@@ -2041,24 +2112,18 @@ transform: rotate(270deg);
2041
  left: 20px;
2042
  top: 305px;
2043
  }
2044
-
2045
  .octagon.size-12 .side-7 {
2046
  transform: rotate(247.5deg);
2047
  position: absolute;
2048
  left: -63px;
2049
  top: 223px;
2050
  }
2051
-
2052
  .octagon.size-12 .side-8 {
2053
  transform: rotate(292.5deg);
2054
  position: absolute;
2055
  left: -63px;
2056
  top: 106px;
2057
  }
2058
-
2059
-
2060
-
2061
-
2062
  .octagon.size-24 {
2063
  position: relative;
2064
  /* max-width: 438px;*/
@@ -2089,7 +2154,6 @@ transform: rotate(270deg);
2089
  left: 349px;
2090
  top: 153px;
2091
  }
2092
-
2093
  .octagon.size-24 .side-4 {
2094
  transform: rotate(112.5deg);
2095
  position: absolute;
@@ -2108,26 +2172,18 @@ transform: rotate(270deg);
2108
  left: -20px;
2109
  top: 521px;
2110
  }
2111
-
2112
  .octagon.size-24 .side-7 {
2113
  transform: rotate(247.5deg);
2114
  position: absolute;
2115
  left: -172px;
2116
  top: 368px;
2117
  }
2118
-
2119
  .octagon.size-24 .side-8 {
2120
  transform: rotate(292.5deg);
2121
  position: absolute;
2122
  left: -174px;
2123
  top: 152px;
2124
  }
2125
-
2126
-
2127
-
2128
-
2129
-
2130
-
2131
  .octagon .romb {
2132
  width: 0;
2133
  height: 0;
@@ -2153,8 +2209,6 @@ transform: rotate(270deg);
2153
  /* color: white; */
2154
  z-index: 2;
2155
  }
2156
-
2157
-
2158
  .octagon .line {
2159
  display: flex;
2160
  justify-content: center;
@@ -2163,18 +2217,12 @@ transform: rotate(270deg);
2163
  width: 400px;
2164
  margin-top: -9px;
2165
  }
2166
-
2167
-
2168
-
2169
-
2170
  :root {
2171
  --hex-color: transparent;
2172
  --hex-border-color: #000;
2173
  --dark_blue-color: #0000ff;
2174
  --red-color: #ff0000;
2175
  }
2176
-
2177
-
2178
  .romb.white { color: #ffffff; border-bottom-color: #ffffff; }
2179
  .romb.white:after { color: #ffffff; border-top-color: #ffffff; }
2180
  .romb.red{ color: #ff0000; border-bottom-color: #ff0000; }
@@ -2195,8 +2243,6 @@ transform: rotate(270deg);
2195
  .romb.orange:after { color: #ff9900; border-top-color: #ff9900; }
2196
  .romb.violet { color: #9900ff; border-bottom-color: #9900ff; }
2197
  .romb.violet:after { color: #9900ff; border-top-color: #9900ff; }
2198
-
2199
-
2200
  .hex.white { background-color: #ffffff; color:#ffffff; }
2201
  .hex.white:before { border-bottom-color: #ffffff; }
2202
  .hex.white:after { border-top-color: #ffffff;}
@@ -2227,8 +2273,6 @@ transform: rotate(270deg);
2227
  .hex.violet { background-color: #9900ff; color:#9900ff; }
2228
  .hex.violet:before { border-bottom-color: #9900ff; }
2229
  .hex.violet:after { border-top-color: #9900ff;}
2230
-
2231
-
2232
  .hex {
2233
  margin-top: 10px;
2234
  width: 18px;
@@ -2238,7 +2282,6 @@ transform: rotate(270deg);
2238
  color: #fff;
2239
  /* transform: rotate(90deg); */
2240
  }
2241
-
2242
  .hex span {
2243
  position: absolute;
2244
  top: -2px;
@@ -2247,7 +2290,6 @@ transform: rotate(270deg);
2247
  font-size: 10px;
2248
  /* transform: rotate(-90deg); */
2249
  }
2250
-
2251
 
2252
  .hex:before {
2253
  content: " ";
@@ -2267,9 +2309,6 @@ transform: rotate(270deg);
2267
  border-left: 9px solid transparent;
2268
  border-right: 9px solid transparent;
2269
  }
2270
-
2271
-
2272
-
2273
  .cards_start {
2274
  display: flex;
2275
 
@@ -2279,22 +2318,16 @@ transform: rotate(270deg);
2279
  margin-left: -170px;
2280
  }
2281
  */
2282
-
2283
-
2284
-
2285
  .owl-carousel { -ms-touch-action: pan-y; touch-action: pan-y; }
2286
  .owl-carousel .owl-item img { max-width: 100%; width: auto!important; }
2287
  .cards_start.owl-carousel .owl-stage-outer { overflow: inherit; }
2288
-
2289
  .scene {
2290
  width: 220px;
2291
  height: 321px;
2292
  perspective: 600px;
2293
  margin-left: -120px;
2294
  }
2295
-
2296
  .scene:first-child { margin-left: 0px; }
2297
-
2298
  .card {
2299
  width: 100%;
2300
  height: 100%;
@@ -2308,34 +2341,24 @@ transform: rotate(270deg);
2308
  text-align: center;
2309
  }
2310
  .card img { max-width: 221px; }
2311
-
2312
  .scene-active { width: 381px; height: 551px; margin-top: -110px;}
2313
  .scene-active .card img { max-width: 381px; }
2314
  .card.is-flipped {
2315
  transform: rotateY(180deg);
2316
  }
2317
-
2318
  .card__face {
2319
  position: absolute;
2320
  width: 100%;
2321
  height: 100%;
2322
  backface-visibility: hidden;
2323
  }
2324
-
2325
  .card__face--front {
2326
  }
2327
-
2328
  .card__face--back {
2329
  transform: rotateY(180deg);
2330
  }
2331
-
2332
  .rekl { text-align: center; }
2333
  .lazy { margin: auto; vertical-align: middle; }
2334
-
2335
-
2336
-
2337
-
2338
-
2339
  .form-inputs {
2340
 
2341
  display: flex;
@@ -2354,7 +2377,6 @@ transform: rotate(270deg);
2354
  .send_build_web { display: block; }
2355
  .width-100 { max-width: 100%!important; }
2356
  .more-save i img { max-height: 18px; }
2357
-
2358
  @media (max-width: 768px){
2359
  h1 { font-size: 24px!important; }
2360
  h2 { font-size: 20px!important; }
@@ -2375,8 +2397,6 @@ transform: rotate(270deg);
2375
 
2376
  .center { text-align: center; }
2377
  }
2378
-
2379
-
2380
  .flex-center {
2381
  display: flex;
2382
  align-items: center;
@@ -2388,7 +2408,6 @@ transform: rotate(270deg);
2388
  line-height: 16px;
2389
  }
2390
  .flex-side { display: inline-block; }
2391
-
2392
  .mt-5 { margin-top: 5px; }
2393
  .mt-10 { margin-top: 10px; }
2394
  .mt-20 { margin-top: 20px; }
@@ -2397,74 +2416,65 @@ transform: rotate(270deg);
2397
  .m-none { display: none!important; }
2398
  .btn { padding: 6px 10px!important;}
2399
  }
2400
-
2401
  .center-red { background: #f6f6f6; color: red; padding: 5px 10px; margin: auto; width: 430px; max-width: 100%; }
2402
  </style>
2403
  </head>
2404
  <body>
2405
- {{ mandala_html|safe }}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2406
  </body>
2407
  </html>
2408
  """
2409
 
2410
- @app.route('/mandala')
2411
  def show_mandala():
2412
- pattern = [
2413
- "577416161737624147874371687965675387455166255764767112646",
2414
- "35257777811486552662718756762243826291673871341244823811",
2415
- "8773555692535217838989632448467218821741268475368315292",
2416
- "651811262788738622888695683314939713825385323895246722",
2417
- "26992388967612584177565252645433784217824855285761494",
2418
- "8692527864473743585322777819976163638616341714347544",
2419
- "562779651821127844854955691974779992577975885772398",
2420
- "28957626913239638349451261172257992735773474359538",
2421
- "1853488614553692274496387289473792918351722785582",
2422
- "948737575918962492846926918421172219286894964141",
2423
- "43611333519868642131628619363289431215584461555",
2424
- "7972466861855516344781571399518474336143817611",
2425
- "779613557941167978269638439569322769757298472",
2426
- "57674813745274776186692373526354946733928329",
2427
- "3442394129792254795362511878989441416321252",
2428
- "786534532772479275898762966888485557953377",
2429
- "65287985959627293488648263577334113758615",
2430
- "2716784555689923737513189835167524134576",
2431
- "987463911258925111364498828674376547934",
2432
- "86219312374827622491848711542714292737",
2433
- "5831343512319484641933682696985622911",
2434
- "424477863541433115136951866684284212",
2435
- "66825659895576426649656953353613633",
2436
- "3517225885134168314622658688974996",
2437
- "868947474647575245184824557872496",
2438
- "55842222112333769693316913669646",
2439
- "1436444323566146663647614936611",
2440
- "579188755823751339912475439372",
2441
- "37197631415136463913623973319",
2442
- "1817494556649119314985371641",
2443
- "998244912314121345484818715",
2444
- "98168413545533479933399686",
2445
- "8975354899186727936639655",
2446
- "873889389195499739393621",
2447
- "61278328115949713333983",
2448
- "7396251926544784666382",
2449
- "136876128298263133921",
2450
- "49564731128189446323",
2451
- "4521214231998481955",
2452
- "973335654198339151",
2453
- "71668229518263166",
2454
- "8735142569189473",
2455
- "618656726198421",
2456
- "79522498718363",
2457
- "7574648689299",
2458
- "332113558229",
2459
- "65324814142",
2460
- "2856395556",
2461
- "142935112",
2462
- "56238623"
2463
- ]
2464
-
2465
- mandala_html = generate_mandala_html(pattern)
2466
  return render_template_string(MANDALA_TEMPLATE, mandala_html=mandala_html)
2467
 
 
 
 
 
 
 
 
 
 
 
 
 
2468
 
2469
 
2470
 
 
979
 
980
 
981
  # енерирует HTML код мандалы идентично JavaScript верси
982
+ from flask import Flask, render_template_string, request, jsonify
983
+
984
+ app = Flask(__name__)
985
+
986
+ # Паттерны в виде JSON
987
+ PATTERNS = {
988
+ "pattern1": [
989
+ "577416161737624147874371687965675387455166255764767112646",
990
+ "35257777811486552662718756762243826291673871341244823811",
991
+ "8773555692535217838989632448467218821741268475368315292",
992
+ "651811262788738622888695683314939713825385323895246722",
993
+ "26992388967612584177565252645433784217824855285761494",
994
+ "8692527864473743585322777819976163638616341714347544",
995
+ "562779651821127844854955691974779992577975885772398",
996
+ "28957626913239638349451261172257992735773474359538",
997
+ "1853488614553692274496387289473792918351722785582",
998
+ "948737575918962492846926918421172219286894964141",
999
+ "43611333519868642131628619363289431215584461555",
1000
+ "7972466861855516344781571399518474336143817611",
1001
+ "779613557941167978269638439569322769757298472",
1002
+ "57674813745274776186692373526354946733928329",
1003
+ "3442394129792254795362511878989441416321252",
1004
+ "786534532772479275898762966888485557953377",
1005
+ "65287985959627293488648263577334113758615",
1006
+ "2716784555689923737513189835167524134576",
1007
+ "987463911258925111364498828674376547934",
1008
+ "86219312374827622491848711542714292737",
1009
+ "5831343512319484641933682696985622911",
1010
+ "424477863541433115136951866684284212",
1011
+ "66825659895576426649656953353613633",
1012
+ "3517225885134168314622658688974996",
1013
+ "868947474647575245184824557872496",
1014
+ "55842222112333769693316913669646",
1015
+ "1436444323566146663647614936611",
1016
+ "579188755823751339912475439372",
1017
+ "37197631415136463913623973319",
1018
+ "1817494556649119314985371641",
1019
+ "998244912314121345484818715",
1020
+ "98168413545533479933399686",
1021
+ "8975354899186727936639655",
1022
+ "873889389195499739393621",
1023
+ "61278328115949713333983",
1024
+ "7396251926544784666382",
1025
+ "136876128298263133921",
1026
+ "49564731128189446323",
1027
+ "4521214231998481955",
1028
+ "973335654198339151",
1029
+ "71668229518263166",
1030
+ "8735142569189473",
1031
+ "618656726198421",
1032
+ "79522498718363",
1033
+ "7574648689299",
1034
+ "332113558229",
1035
+ "65324814142",
1036
+ "2856395556",
1037
+ "142935112",
1038
+ "56238623"
1039
+ ],
1040
+ "pattern2": [
1041
+ "577416161737624147874371687965675387455166255764767112646",
1042
+ "35257777811486552662718756762243826291673871341244823811",
1043
+ "8773555692535217838989632448467218821741268475368315292",
1044
+ "651811262788738622888695683314939713825385323895246722",
1045
+ "26992388967612584177565252645433784217824855285761494",
1046
+ "8692527864473743585322777819976163638616341714347544",
1047
+ "562779651821127844854955691974779992577975885772398",
1048
+ "28957626913239638349451261172257992735773474359538",
1049
+ "1853488614553692274496387289473792918351722785582",
1050
+ "948737575918962492846926918421172219286894964141",
1051
+ "43611333519868642131628619363289431215584461555",
1052
+ "7972466861855516344781571399518474336143817611",
1053
+ "779613557941167978269638439569322769757298472",
1054
+ "57674813745274776186692373526354946733928329",
1055
+ "3442394129792254795362511878989441416321252",
1056
+ "786534532772479275898762966888485557953377",
1057
+ "65287985959627293488648263577334113758615",
1058
+ "2716784555689923737513189835167524134576",
1059
+ "987463911258925111364498828674376547934",
1060
+ "86219312374827622491848711542714292737",
1061
+ "5831343512319484641933682696985622911",
1062
+ "424477863541433115136951866684284212",
1063
+ "66825659895576426649656953353613633",
1064
+ "3517225885134168314622658688974996",
1065
+ "868947474647575245184824557872496",
1066
+ "55842222112333769693316913669646",
1067
+ "1436444323566146663647614936611",
1068
+ "579188755823751339912475439372",
1069
+ "37197631415136463913623973319",
1070
+ "1817494556649119314985371641",
1071
+ "998244912314121345484818715",
1072
+ "98168413545533479933399686",
1073
+ "8975354899186727936639655",
1074
+ "873889389195499739393621",
1075
+ "61278328115949713333983",
1076
+ "7396251926544784666382",
1077
+ "136876128298263133921",
1078
+ "49564731128189446323",
1079
+ "4521214231998481955",
1080
+ "973335654198339151",
1081
+ "71668229518263166",
1082
+ "8735142569189473",
1083
+ "618656726198421",
1084
+ "79522498718363",
1085
+ "7574648689299",
1086
+ "332113558229",
1087
+ "65324814142",
1088
+ "2856395556",
1089
+ "142935112",
1090
+ "56238623"
1091
+ ],
1092
+ "pattern3": [
1093
+ "6874371515144176932462356166320254753",
1094
+ "562718666658584635618582773952279238",
1095
+ "28989533324443198279441951357497252",
1096
+ "1888586656887418197485156483247977",
1097
+ "977445322576259917234662132562775",
1098
+ "75289854734875918957138345728953",
1099
+ "3718849217363519853842279391858",
1100
+ "189734238199861848236497331944",
1101
+ "98717652919857933159147164148",
1102
+ "8688427211843736465152871553",
1103
+ "557369932937119112667168618",
1104
+ "13196935231821123834875579",
1105
+ "4416638754913235227363137",
1106
+ "857392639414558749199441",
1107
+ "43132893455914624119485",
1108
+ "7445183791515186521434",
1109
+ "289692171666695273577",
1110
+ "18662388733365791835",
1111
+ "9538527616692371928",
1112
+ "582479477362518121",
1113
+ "41627425198769933",
1114
+ "5789267618646936",
1115
+ "368284479511639",
1116
+ "95113827562793",
1117
+ "5624219328973",
1118
+ "286631351871",
1119
+ "15394486968",
1120
+ "6834835665",
1121
+ "527328232",
1122
+ "79151155"
1123
+ ]
1124
+ }
1125
+
1126
  def generate_mandala_html(pattern_array, container_id="mandala-container"):
1127
  """Генер��рует HTML код мандалы идентично JavaScript версии"""
1128
 
 
1161
 
1162
  return '\n'.join(html_parts)
1163
 
1164
+ # HTML шаблон с кнопками
1165
  MANDALA_TEMPLATE = """
1166
  <!DOCTYPE html>
1167
  <html>
1168
  <head>
1169
  <style>
1170
+ .button-container {
1171
+ text-align: center;
1172
+ margin: 20px 0;
1173
+ }
1174
+ .pattern-btn {
1175
+ padding: 10px 20px;
1176
+ margin: 0 10px;
1177
+ font-size: 16px;
1178
+ cursor: pointer;
1179
+ background-color: #4CAF50;
1180
+ color: white;
1181
+ border: none;
1182
+ border-radius: 5px;
1183
+ }
1184
+ .pattern-btn:hover {
1185
+ background-color: #45a049;
1186
+ }
1187
+ .pattern-btn.active {
1188
+ background-color: #2196F3;
1189
+ }
1190
+ #mandala-container {
1191
+ margin: 20px auto;
1192
+ }
1193
+ /* Базовые стили для мандалы */
1194
  .container_top { padding-top: 30px; }
1195
  .details_numbers { margin: 15px 0 0px 0; }
1196
  .details_numbers br { clear: both; }
 
1200
  .smenu { margin: 0 auto 20px auto; width: 100%; }
1201
  .btn.disabled{ }
1202
  .hid { display: none!important; }
 
1203
  .clear { clear: both; }
1204
  .graphs { margin: 20px 0 0 0; }
1205
  .graph_numbers { /* float: left; */ }
 
1210
  .method_light tr td { border-right: 1px #000 solid; border-bottom: 1px #000 solid; vertical-align: middle; text-align: center; }
1211
  .method_light tr td.decart_gorizont { border-bottom: 3px #000 solid!important; }
1212
  .method_light tr td.decart_vertical { border-right: 3px #000 solid!important; }
 
1213
  .graph_colors .method_light { border-left: 1px #000 solid; border-top: 1px #000 solid; }
1214
  .graph_colors .method_light tr { padding: 0px; margin: 0px; }
1215
  .graph_colors .method_light tr td { padding: 0px; margin: 0px; border-right: 1px #000 solid; border-bottom: 1px #000 solid; }
 
1216
  .no-border .method_light, .no-border .method_light tr td {
1217
  border: 0px!important;
1218
  }
 
 
1219
  .cell, .cell_noresize { text-align: center; display: block; width: 18px; height: 18px; }
1220
  .cell_noresize { border: 1px #ccc solid; }
1221
  .white { color: #ffffff; background-color: #ffffff; }
 
1228
  .pink { color: #ff00ff; background-color: #ff00ff; }
1229
  .orange { color: #ff9900; background-color: #ff9900; }
1230
  .violet { color: #9900ff; background-color: #9900ff; }
 
1231
  @media print {
1232
  .white { color: #ffffff!important; background-color: #ffffff!important; }
1233
  .red { color: #ff0000!important; background-color: #ff0000!important; }
 
1243
 
1244
  .hide, .mob-only { display: none;}
1245
  .show { display: block; }
 
1246
  .print { margin: 40px auto; }
1247
  .one_color {}
1248
  .one_color .cell_noresize { margin-right: 8px; }
1249
  .one_color span { float: left; }
1250
  .one_color p { clear: both; /* padding: 0 37px; */ }
 
1251
  #word { max-width: calc(100% - 80px); height: 66x; font-size: 20px; }
1252
  .navbar-form-own .btn-default { width: 18%; text-transform: uppercase; }
1253
  .off { display: none; }
1254
  .on { display: block; }
 
1255
  .numerology_details { }
1256
  .numerology_details tr td { text-align: center; width: 25px; }
1257
  .numerology_details tr td.wc { font-weight: bold; }
 
1258
  .plinks { margin: 10px 0 0 0; padding: 0px; }
1259
  .plinks li {
1260
  list-style: none;
 
1262
  margin: 0 20px 0 0;
1263
  padding: 0px;
1264
  }
 
1265
  .green_b { background: green!important; }
1266
  .red_b { background: red!important; }
1267
  .point_number { width: 50px; text-align: center; }
 
1268
  .method_point { margin: auto; }
1269
  .graph_numbers .method_point tr td { width: 16px; height: 16px; vertical-align: middle; font-size: 18px; line-height: 16px; }
1270
  .method_point tr td { vertical-align: middle; text-align: center; }
 
 
 
1271
  .tooltip{
1272
  position:absolute;
1273
  z-index:1070;
 
1362
  background-color:#000;
1363
  border-radius:.25rem
1364
  }
 
1365
  .glyphicon-exclamation-sign{
1366
  margin: 10px 10px 0 10px;
1367
  }
 
1377
  padding: 0px!important;
1378
  }
1379
  }
 
1380
  .overflow-auto { overflow: auto; width: 100%; }
1381
  .nowrap { white-space: nowrap; }
1382
  .w100 { text-align: center; margin: 10px 0 0 10px; }
1383
  .tor_value { font-size: 10px; }
 
1384
  .nav-pills{
1385
  display: flex;
1386
  justify-content: center;
1387
  align-items: center;
1388
 
1389
  }
 
1390
  .tab-ids li a { font-weight: 600; }
1391
  .navbar-form-own {
1392
  }
 
1405
  }
1406
 
1407
  }
 
1408
 
 
1409
  .romb {
1410
  width: 0;
1411
  height: 0;
 
1431
  /* color: white; */
1432
  z-index: 2;
1433
  }
 
 
 
 
 
 
1434
  .hexagon.courts {
1435
  height: 700px;
1436
  width: 700px;
1437
  margin: 90px auto 20px;
1438
  }
 
1439
  .courts .hex {
1440
  margin-top: 8px;
1441
  width: 16px;
 
1460
  border-left: 8px solid transparent;
1461
  border-right: 8px solid transparent;
1462
  }
 
1463
  .hexagon.courts .line {
1464
  margin-top: -4px!important;
1465
  }
 
1466
  .hexagon.courts .side {
1467
  display: inline-block;
1468
  margin: 0px;
 
1489
  top: 133px;
1490
  z-index: 4;
1491
  }
 
1492
  .hexagon.courts .side-4 {
1493
  transform: rotate(150deg);
1494
  position: absolute;
 
1510
  top: 114px;
1511
  z-index: 1;
1512
  }
 
 
 
1513
  .hexagon {
1514
  position: relative;
1515
  /* max-width: 438px;*/
 
1525
  width: 500px;
1526
  margin-top: -11px;
1527
  }
 
1528
  .hexagon .side {
1529
  display: inline-block;
1530
  margin: 0px;
 
1548
  left: 256px;
1549
  top: 148px;
1550
  }
 
1551
  .hexagon .side-4 {
1552
  transform: rotate(150deg);
1553
  position: absolute;
 
1566
  left: -85px;
1567
  top: 148px;
1568
  }
 
 
 
 
 
1569
  .hexagon.size-6 {
1570
  position: relative;
1571
  height: 400px;
 
1580
  width: 500px;
1581
  margin-top: -11px;
1582
  }
 
1583
  .hexagon.size-6 .side {
1584
  display: inline-block;
1585
  margin: 0px;
 
1602
  position: absolute;
1603
  left: 114px;
1604
  top: 66px;
 
1605
  }
 
1606
  .hexagon.size-6 .side-4 {
1607
  transform: rotate(150deg);
1608
  position: absolute;
 
1621
  left: -38px;
1622
  top: 66px;
1623
  }
 
 
1624
  .hexagon.size-8 {
1625
  position: relative;
1626
  /* max-width: 438px;*/
 
1636
  width: 500px;
1637
  margin-top: -11px;
1638
  }
 
1639
  .hexagon.size-8 .side {
1640
  display: inline-block;
1641
  margin: 0px;
 
1659
  left: 143px;
1660
  top: 82px;
1661
  }
 
1662
  .hexagon.size-8 .side-4 {
1663
  transform: rotate(150deg);
1664
  position: absolute;
 
1677
  left: -48px;
1678
  top: 82px;
1679
  }
 
 
 
1680
  .hexagon.size-12 {
1681
  position: relative;
1682
  height: 580px;
 
1691
  width: 500px;
1692
  margin-top: -11px;
1693
  }
 
1694
  .hexagon.size-12 .side {
1695
  display: inline-block;
1696
  margin: 0px;
 
1714
  left: 200px;
1715
  top: 115px;
1716
  }
 
1717
  .hexagon.size-12 .side-4 {
1718
  transform: rotate(150deg);
1719
  position: absolute;
 
1732
  left: -67px;
1733
  top: 115px;
1734
  }
 
 
 
1735
  .hexagon.courts.size-12 {
1736
  position: relative;
1737
  height: 580px;
 
1746
  width: 500px;
1747
  margin-top: -11px;
1748
  }
 
1749
  .hexagon.courts.size-12 .side {
1750
  display: inline-block;
1751
  margin: 0px;
 
1769
  left: 115px;
1770
  top: 68px;
1771
  }
 
1772
  .hexagon.courts.size-12 .side-4 {
1773
  transform: rotate(150deg);
1774
  position: absolute;
 
1788
  left: -39px;
1789
  top: 67px;
1790
  }
 
 
 
1791
  .hexagon.courts.size-16 .side-1 {
1792
  transform: rotate(-30deg);
1793
  position: absolute;
 
1806
  left: 158px;
1807
  top: 90px;
1808
  }
 
1809
  .hexagon.courts.size-16 .side-4 {
1810
  transform: rotate(150deg);
1811
  position: absolute;
 
1824
  left: -52px;
1825
  top: 92px;
1826
  }
 
1827
  .octagon.size-16 {
1828
  width: 700px;
1829
  height: 700px;
1830
  }
 
 
 
 
 
 
 
1831
  .hexagon.size-24 {
1832
  position: relative;
1833
  /* max-width: 438px;*/
 
1866
  left: 371px;
1867
  top: 214px;
1868
  }
 
1869
  .hexagon.size-24 .side-4 {
1870
  transform: rotate(150deg);
1871
  position: absolute;
 
1884
  left: -124px;
1885
  top: 213px;
1886
  }
 
 
 
1887
  .octagon {
1888
  position: relative;
1889
  /* max-width: 438px;*/
 
1914
  left: 256px;
1915
  top: 106px;
1916
  }
 
1917
  .octagon .side-4 {
1918
  transform: rotate(112.5deg);
1919
  position: absolute;
 
1932
  left: 0px;
1933
  top: 362px;
1934
  }
 
1935
  .octagon .side-7 {
1936
  transform: rotate(247.5deg);
1937
  position: absolute;
1938
  left: -106px;
1939
  top: 256px;
1940
  }
 
1941
  .octagon .side-8 {
1942
  transform: rotate(292.5deg);
1943
  position: absolute;
1944
  left: -106px;
1945
  top: 106px;
1946
  }
 
 
 
 
 
1947
  .octagon.size-6 {
1948
  position: relative;
1949
  /* max-width: 438px;*/
 
1974
  left: 113px;
1975
  top: 47px;
1976
  }
 
1977
  .octagon.size-6 .side-4 {
1978
  transform: rotate(112.5deg);
1979
  position: absolute;
 
1992
  left: 0px;
1993
  top: 161px;
1994
  }
 
1995
  .octagon.size-6 .side-7 {
1996
  transform: rotate(247.5deg);
1997
  position: absolute;
1998
  left: -47px;
1999
  top: 114px;
2000
  }
 
2001
  .octagon.size-6 .side-8 {
2002
  transform: rotate(292.5deg);
2003
  position: absolute;
2004
  left: -47px;
2005
  top: 47px;
2006
  }
 
 
 
 
2007
  .octagon.size-8 {
2008
  position: relative;
2009
  /* max-width: 438px;*/
 
2034
  left: 142px;
2035
  top: 59px;
2036
  }
 
2037
  .octagon.size-8 .side-4 {
2038
  transform: rotate(112.5deg);
2039
  position: absolute;
 
2052
  left: 0px;
2053
  top: 201px;
2054
  }
 
2055
  .octagon.size-8 .side-7 {
2056
  transform: rotate(247.5deg);
2057
  position: absolute;
2058
  left: -59px;
2059
  top: 142px;
2060
  }
 
2061
  .octagon.size-8 .side-8 {
2062
  transform: rotate(292.5deg);
2063
  position: absolute;
2064
  left: -59px;
2065
  top: 59px;
2066
  }
 
 
 
 
2067
  .octagon.size-12 {
2068
  position: relative;
2069
  /* max-width: 438px;*/
 
2094
  left: 220px;
2095
  top: 106px;
2096
  }
 
2097
  .octagon.size-12 .side-4 {
2098
  transform: rotate(112.5deg);
2099
  position: absolute;
 
2112
  left: 20px;
2113
  top: 305px;
2114
  }
 
2115
  .octagon.size-12 .side-7 {
2116
  transform: rotate(247.5deg);
2117
  position: absolute;
2118
  left: -63px;
2119
  top: 223px;
2120
  }
 
2121
  .octagon.size-12 .side-8 {
2122
  transform: rotate(292.5deg);
2123
  position: absolute;
2124
  left: -63px;
2125
  top: 106px;
2126
  }
 
 
 
 
2127
  .octagon.size-24 {
2128
  position: relative;
2129
  /* max-width: 438px;*/
 
2154
  left: 349px;
2155
  top: 153px;
2156
  }
 
2157
  .octagon.size-24 .side-4 {
2158
  transform: rotate(112.5deg);
2159
  position: absolute;
 
2172
  left: -20px;
2173
  top: 521px;
2174
  }
 
2175
  .octagon.size-24 .side-7 {
2176
  transform: rotate(247.5deg);
2177
  position: absolute;
2178
  left: -172px;
2179
  top: 368px;
2180
  }
 
2181
  .octagon.size-24 .side-8 {
2182
  transform: rotate(292.5deg);
2183
  position: absolute;
2184
  left: -174px;
2185
  top: 152px;
2186
  }
 
 
 
 
 
 
2187
  .octagon .romb {
2188
  width: 0;
2189
  height: 0;
 
2209
  /* color: white; */
2210
  z-index: 2;
2211
  }
 
 
2212
  .octagon .line {
2213
  display: flex;
2214
  justify-content: center;
 
2217
  width: 400px;
2218
  margin-top: -9px;
2219
  }
 
 
 
 
2220
  :root {
2221
  --hex-color: transparent;
2222
  --hex-border-color: #000;
2223
  --dark_blue-color: #0000ff;
2224
  --red-color: #ff0000;
2225
  }
 
 
2226
  .romb.white { color: #ffffff; border-bottom-color: #ffffff; }
2227
  .romb.white:after { color: #ffffff; border-top-color: #ffffff; }
2228
  .romb.red{ color: #ff0000; border-bottom-color: #ff0000; }
 
2243
  .romb.orange:after { color: #ff9900; border-top-color: #ff9900; }
2244
  .romb.violet { color: #9900ff; border-bottom-color: #9900ff; }
2245
  .romb.violet:after { color: #9900ff; border-top-color: #9900ff; }
 
 
2246
  .hex.white { background-color: #ffffff; color:#ffffff; }
2247
  .hex.white:before { border-bottom-color: #ffffff; }
2248
  .hex.white:after { border-top-color: #ffffff;}
 
2273
  .hex.violet { background-color: #9900ff; color:#9900ff; }
2274
  .hex.violet:before { border-bottom-color: #9900ff; }
2275
  .hex.violet:after { border-top-color: #9900ff;}
 
 
2276
  .hex {
2277
  margin-top: 10px;
2278
  width: 18px;
 
2282
  color: #fff;
2283
  /* transform: rotate(90deg); */
2284
  }
 
2285
  .hex span {
2286
  position: absolute;
2287
  top: -2px;
 
2290
  font-size: 10px;
2291
  /* transform: rotate(-90deg); */
2292
  }
 
2293
 
2294
  .hex:before {
2295
  content: " ";
 
2309
  border-left: 9px solid transparent;
2310
  border-right: 9px solid transparent;
2311
  }
 
 
 
2312
  .cards_start {
2313
  display: flex;
2314
 
 
2318
  margin-left: -170px;
2319
  }
2320
  */
 
 
 
2321
  .owl-carousel { -ms-touch-action: pan-y; touch-action: pan-y; }
2322
  .owl-carousel .owl-item img { max-width: 100%; width: auto!important; }
2323
  .cards_start.owl-carousel .owl-stage-outer { overflow: inherit; }
 
2324
  .scene {
2325
  width: 220px;
2326
  height: 321px;
2327
  perspective: 600px;
2328
  margin-left: -120px;
2329
  }
 
2330
  .scene:first-child { margin-left: 0px; }
 
2331
  .card {
2332
  width: 100%;
2333
  height: 100%;
 
2341
  text-align: center;
2342
  }
2343
  .card img { max-width: 221px; }
 
2344
  .scene-active { width: 381px; height: 551px; margin-top: -110px;}
2345
  .scene-active .card img { max-width: 381px; }
2346
  .card.is-flipped {
2347
  transform: rotateY(180deg);
2348
  }
 
2349
  .card__face {
2350
  position: absolute;
2351
  width: 100%;
2352
  height: 100%;
2353
  backface-visibility: hidden;
2354
  }
 
2355
  .card__face--front {
2356
  }
 
2357
  .card__face--back {
2358
  transform: rotateY(180deg);
2359
  }
 
2360
  .rekl { text-align: center; }
2361
  .lazy { margin: auto; vertical-align: middle; }
 
 
 
 
 
2362
  .form-inputs {
2363
 
2364
  display: flex;
 
2377
  .send_build_web { display: block; }
2378
  .width-100 { max-width: 100%!important; }
2379
  .more-save i img { max-height: 18px; }
 
2380
  @media (max-width: 768px){
2381
  h1 { font-size: 24px!important; }
2382
  h2 { font-size: 20px!important; }
 
2397
 
2398
  .center { text-align: center; }
2399
  }
 
 
2400
  .flex-center {
2401
  display: flex;
2402
  align-items: center;
 
2408
  line-height: 16px;
2409
  }
2410
  .flex-side { display: inline-block; }
 
2411
  .mt-5 { margin-top: 5px; }
2412
  .mt-10 { margin-top: 10px; }
2413
  .mt-20 { margin-top: 20px; }
 
2416
  .m-none { display: none!important; }
2417
  .btn { padding: 6px 10px!important;}
2418
  }
 
2419
  .center-red { background: #f6f6f6; color: red; padding: 5px 10px; margin: auto; width: 430px; max-width: 100%; }
2420
  </style>
2421
  </head>
2422
  <body>
2423
+ <div class="button-container">
2424
+ <button class="pattern-btn active" onclick="switchPattern('pattern1')">Паттерн 1</button>
2425
+ <button class="pattern-btn" onclick="switchPattern('pattern2')">Паттерн 2</button>
2426
+ <button class="pattern-btn" onclick="switchPattern('pattern3')">Паттерн 3</button>
2427
+ </div>
2428
+
2429
+ <div id="mandala-display">
2430
+ {{ mandala_html|safe }}
2431
+ </div>
2432
+
2433
+ <script>
2434
+ function switchPattern(patternName) {
2435
+ // Обновляем активную кнопку
2436
+ document.querySelectorAll('.pattern-btn').forEach(btn => {
2437
+ btn.classList.remove('active');
2438
+ });
2439
+ event.target.classList.add('active');
2440
+
2441
+ // Загружаем новый паттерн
2442
+ fetch('/switch-pattern', {
2443
+ method: 'POST',
2444
+ headers: {
2445
+ 'Content-Type': 'application/json',
2446
+ },
2447
+ body: JSON.stringify({pattern: patternName})
2448
+ })
2449
+ .then(response => response.json())
2450
+ .then(data => {
2451
+ document.getElementById('mandala-display').innerHTML = data.mandala_html;
2452
+ })
2453
+ .catch(error => console.error('Error:', error));
2454
+ }
2455
+ </script>
2456
  </body>
2457
  </html>
2458
  """
2459
 
2460
+ @app.route('/')
2461
  def show_mandala():
2462
+ # Используем паттерн по умолчанию
2463
+ mandala_html = generate_mandala_html(PATTERNS["pattern1"])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2464
  return render_template_string(MANDALA_TEMPLATE, mandala_html=mandala_html)
2465
 
2466
+ @app.route('/switch-pattern', methods=['POST'])
2467
+ def switch_pattern():
2468
+ data = request.get_json()
2469
+ pattern_name = data.get('pattern', 'pattern1')
2470
+
2471
+ if pattern_name in PATTERNS:
2472
+ mandala_html = generate_mandala_html(PATTERNS[pattern_name])
2473
+ return jsonify({'mandala_html': mandala_html})
2474
+ else:
2475
+ return jsonify({'error': 'Pattern not found'}), 404
2476
+
2477
+
2478
 
2479
 
2480