SOURCE

console 命令行工具 X clear

                    
>
console
var d_convocations = {
    "1": { "id": 1, "years": "0126" },
    "2": { "id": 2, "years": "0127" },
    "3": { "id": 3, "years": "0128" },
    "4": { "id": 4, "years": "2004 – 2007" },
    "5": { "id": 5, "years": "2008 – 2011" },
    "6": { "id": 6, "years": "2011 – 2016" },
    "7": { "id": 7, "years": "2016 – 2021" },
}

var a_convocations = Object.keys(d_convocations).map(function (a) { return d_convocations[a]; });

var d_fractions = {
    "5707": {
        "id": 5707,
        "order": 7,
        "partyId": 1,
        "size": 54,
        "convocationId": 1,
        "offset": 271
    },
    "5708": { "id": 5708, "order": 9, "partyId": 2, "size": 58, "convocationId": 1, "offset": 349 },
    "5709": { "id": 5709, "order": 1, "partyId": 3, "size": 29, "convocationId": 1, "offset": 35 },
    "5710": { "id": 5710, "order": 0, "partyId": 4, "size": 35, "convocationId": 1, "offset": 0 },
    "5711": { "id": 5711, "order": 5, "partyId": 5, "size": 40, "convocationId": 1, "offset": 177 },
    "5712": { "id": 5712, "order": 6, "partyId": 6, "size": 54, "convocationId": 1, "offset": 217 },
    "5713": { "id": 5713, "order": 3, "partyId": 7, "size": 64, "convocationId": 1, "offset": 77 },
    "5714": { "id": 5714, "order": 11, "partyId": 8, "size": 48, "convocationId": 1, "offset": 418 },
    "5715": { "id": 5715, "order": 2, "partyId": 9, "size": 13, "convocationId": 1, "offset": 64 },
    "5716": { "id": 5716, "order": 8, "partyId": 10, "size": 24, "convocationId": 1, "offset": 325 },
    "5717": { "id": 5717, "order": 4, "partyId": 11, "size": 36, "convocationId": 1, "offset": 141 },
    "5718": { "id": 5718, "order": 10, "partyId": 12, "size": 11, "convocationId": 1, "offset": 407 },

    "5719": { "id": 5719, "order": 2, "partyId": 13, "size": 47, "convocationId": 2, "offset": 106 },
    "5720": { "id": 5720, "order": 5, "partyId": 2, "size": 42, "convocationId": 2, "offset": 270 },
    "5721": { "id": 5721, "order": 7, "partyId": 8, "size": 127, "convocationId": 2, "offset": 364 },
    "5722": { "id": 5722, "order": 6, "partyId": 14, "size": 52, "convocationId": 2, "offset": 312 },
    "5723": { "id": 5723, "order": 0, "partyId": 3, "size": 46, "convocationId": 2, "offset": 0 },
    "5724": { "id": 5724, "order": 3, "partyId": 7, "size": 77, "convocationId": 2, "offset": 153 },
    "5725": { "id": 5725, "order": 1, "partyId": 15, "size": 60, "convocationId": 2, "offset": 46 },
    "5726": { "id": 5726, "order": 4, "partyId": 16, "size": 40, "convocationId": 2, "offset": 230 },

    "5735": { "id": 5735, "order": 0, "partyId": 22, "size": 35, "convocationId": 3, "offset": 0 },
    "5730": { "id": 5730, "order": 1, "partyId": 18, "size": 66, "convocationId": 3, "offset": 35 },
    "5731": { "id": 5731, "order": 2, "partyId": 19, "size": 86, "convocationId": 3, "offset": 101 },
    "5734": { "id": 5734, "order": 3, "partyId": 3, "size": 19, "convocationId": 3, "offset": 187 },
    "5736": { "id": 5736, "order": 4, "partyId": 2, "size": 16, "convocationId": 3, "offset": 206 },
    "5728": { "id": 5728, "order": 5, "partyId": 7, "size": 23, "convocationId": 3, "offset": 222 },
    "5729": { "id": 5729, "order": 6, "partyId": 17, "size": 49, "convocationId": 3, "offset": 245 },
    "5732": { "id": 5732, "order": 7, "partyId": 20, "size": 50, "convocationId": 3, "offset": 294 },
    "5733": { "id": 5733, "order": 8, "partyId": 21, "size": 44, "convocationId": 3, "offset": 344 },
    "5727": { "id": 5727, "order": 9, "partyId": 8, "size": 88, "convocationId": 3, "offset": 388 },

    "5737": { "id": 5737, "order": 1, "partyId": 2, "size": 30, "convocationId": 4, "offset": 328 },
    "5738": { "id": 5738, "order": 0, "partyId": 23, "size": 328, "convocationId": 4, "offset": 0 },
    "5739": { "id": 5739, "order": 3, "partyId": 24, "size": 46, "convocationId": 4, "offset": 380 },
    "5740": { "id": 5740, "order": 2, "partyId": 7, "size": 22, "convocationId": 4, "offset": 358 },
    "5741": { "id": 5741, "order": 4, "partyId": 8, "size": 50, "convocationId": 4, "offset": 426 },

    "5743": { "id": 5743, "order": 1, "partyId": 2, "size": 44, "convocationId": 5, "offset": 348 },
    "5744": { "id": 5744, "order": 0, "partyId": 23, "size": 348, "convocationId": 5, "offset": 0 },
    "5745": { "id": 5745, "order": 2, "partyId": 25, "size": 39, "convocationId": 5, "offset": 392 },
    "5746": { "id": 5746, "order": 3, "partyId": 8, "size": 62, "convocationId": 5, "offset": 431 },

    "5747": { "id": 5747, "order": 3, "partyId": 8, "size": 92, "convocationId": 6, "offset": 358 },
    "5748": { "id": 5748, "order": 0, "partyId": 23, "size": 238, "convocationId": 6, "offset": 0 },
    "5749": { "id": 5749, "order": 1, "partyId": 2, "size": 56, "convocationId": 6, "offset": 238 },
    "5750": { "id": 5750, "order": 2, "partyId": 25, "size": 64, "convocationId": 6, "offset": 294 },

    "7000": { "id": 7000, "order": 0, "partyId": 23, "size": 345, "convocationId": 7, "offset": 0 },
    "7001": { "id": 7001, "order": 1, "partyId": 2, "size": 39, "convocationId": 7, "offset": 345 },
    "7002": { "id": 7002, "order": 2, "partyId": 25, "size": 24, "convocationId": 7, "offset": 384 },
    "7003": { "id": 7003, "order": 3, "partyId": 8, "size": 42, "convocationId": 7, "offset": 408 },
    "7004": { "id": 7004, "order": 4, "partyId": 24, "size": 1, "convocationId": 7, "offset": 450 },
    "7005": { "id": 7005, "order": 5, "partyId": 26, "size": 1, "convocationId": 7, "offset": 451 },
}


var a_fractions = Object.keys(d_fractions).map(function (a) { return d_fractions[a]; });
a_fractions.reverse();

var d_parties = {
    "1": { "id": 1, "name": "Аграрная партия России", color: "#a3ff6a" },
    "2": { "id": 2, "name": "ЛДПР", color: "#73b9e0" },
    "3": { "id": 3, "name": "Яблоко", color: "#44ad3c" },
    "4": { "id": 4, "name": "Стабильность", color: "#3ea9ac" },
    "5": { "id": 5, "name": "Новая региональная политика — Дума-96", color: "#743679" },
    "6": { "id": 6, "name": "Выбор России", color: "#eb7676" },
    "7": { "id": 7, "name": "Независимые", color: "#c8cac4" },
    "8": { "id": 8, "name": "КПРФ", color: "#d50200" },
    "9": { "id": 9, "name": "Партия российского единства и согласия", color: "#a0e0d6" },
    "10": { "id": 10, "name": "Женщины России", color: "#f56dcd" },
    "11": { "id": 11, "name": "Россия", color: "#dedbb4" },
    "12": { "id": 12, "name": "Демократическая партия России", color: "#a644a4" },
    "13": { "id": 13, "name": "Российские регионы", color: "#538697" },
    "14": { "id": 14, "name": "Народовластие", color: "#ca6886" },
    "15": { "id": 15, "name": "Наш дом — Россия", color: "#9e8775" },
    "16": { "id": 16, "name": "Аграрная депутатская группа", color: "#80d878" },
    "17": { "id": 17, "name": "Народный депутат", color: "#9ba0a5" },
    "18": { "id": 18, "name": "Отечество — Единая Россия", color: "#ae87d6" },
    "19": { "id": 19, "name": "Единство — Единая Россия", color: "#4381bb" },
    "20": { "id": 20, "name": "Регионы России", color: "#b4d351" },
    "21": { "id": 21, "name": "Агропромышленная депутатская группа", color: "#62b97e" },
    "22": { "id": 22, "name": "СПС", color: "#0394d3" },
    "23": { "id": 23, "name": "Единая Россия", color: "#0053a0" },
    "24": { "id": 24, "name": "Родина", color: "#fffb62" },
    "25": { "id": 25, "name": "Справедливая Россия", color: "#fab512" },
    "26": { "id": 26, "name": "Гражданская платформа", color: "#F0F0F0" }
}

var a_transitions_jump = [
    { "id": 1, "from": 5718, "to": 5727, "number": 1, "leftOffset": 3, "rightOffset": 58 },
    { "id": 2, "from": 5710, "to": 5729, "number": 1, "leftOffset": 5, "rightOffset": 0 },
    { "id": 3, "from": 5707, "to": 5730, "number": 1, "leftOffset": 1, "rightOffset": 9 },
    { "id": 4, "from": 5717, "to": 5731, "number": 1, "leftOffset": 2, "rightOffset": 6 },
    { "id": 5, "from": 5711, "to": 5731, "number": 1, "leftOffset": 2, "rightOffset": 7 },
    { "id": 6, "from": 5717, "to": 5732, "number": 1, "leftOffset": 6, "rightOffset": 12 },
    { "id": 7, "from": 5707, "to": 5733, "number": 1, "leftOffset": 18, "rightOffset": 7 },
    { "id": 8, "from": 5712, "to": 5735, "number": 4, "leftOffset": 0, "rightOffset": 8 },
    { "id": 9, "from": 5720, "to": 5737, "number": 1, "leftOffset": 10, "rightOffset": 6 },
    { "id": 10, "from": 5710, "to": 5738, "number": 1, "leftOffset": 0, "rightOffset": 50 },
    { "id": 11, "from": 5725, "to": 5738, "number": 2, "leftOffset": 1, "rightOffset": 51 },
    { "id": 12, "from": 5719, "to": 5738, "number": 1, "leftOffset": 1, "rightOffset": 102 },
    { "id": 13, "from": 5724, "to": 5738, "number": 3, "leftOffset": 4, "rightOffset": 103 },
    { "id": 14, "from": 5718, "to": 5738, "number": 1, "leftOffset": 0, "rightOffset": 152 },
    { "id": 15, "from": 5722, "to": 5739, "number": 1, "leftOffset": 20, "rightOffset": 13 },
    { "id": 16, "from": 5721, "to": 5739, "number": 1, "leftOffset": 9, "rightOffset": 17 },
    { "id": 17, "from": 5722, "to": 5740, "number": 1, "leftOffset": 19, "rightOffset": 11 },
    { "id": 18, "from": 5726, "to": 5741, "number": 1, "leftOffset": 12, "rightOffset": 0 },
    { "id": 19, "from": 5722, "to": 5741, "number": 1, "leftOffset": 25, "rightOffset": 1 },
    { "id": 20, "from": 5721, "to": 5741, "number": 1, "leftOffset": 64, "rightOffset": 9 },
    { "id": 21, "from": 5724, "to": 5743, "number": 1, "leftOffset": 20, "rightOffset": 0 },
    { "id": 22, "from": 5729, "to": 5744, "number": 2, "leftOffset": 21, "rightOffset": 168 },
    { "id": 23, "from": 5707, "to": 5744, "number": 1, "leftOffset": 0, "rightOffset": 170 },
    { "id": 24, "from": 5732, "to": 5744, "number": 1, "leftOffset": 18, "rightOffset": 171 },
    { "id": 25, "from": 5722, "to": 5744, "number": 2, "leftOffset": 0, "rightOffset": 172 },
    { "id": 26, "from": 5735, "to": 5745, "number": 1, "leftOffset": 3, "rightOffset": 0 },
    { "id": 27, "from": 5728, "to": 5745, "number": 2, "leftOffset": 9, "rightOffset": 2 },
    { "id": 28, "from": 5732, "to": 5745, "number": 1, "leftOffset": 26, "rightOffset": 4 },
    { "id": 29, "from": 5722, "to": 5746, "number": 1, "leftOffset": 26, "rightOffset": 0 },
    { "id": 30, "from": 5733, "to": 5746, "number": 1, "leftOffset": 15, "rightOffset": 1 },
    { "id": 31, "from": 5727, "to": 5746, "number": 7, "leftOffset": 33, "rightOffset": 33 },
    { "id": 32, "from": 5727, "to": 5747, "number": 4, "leftOffset": 4, "rightOffset": 0 },
    { "id": 33, "from": 5741, "to": 5747, "number": 1, "leftOffset": 0, "rightOffset": 4 },
    { "id": 34, "from": 5738, "to": 5748, "number": 2, "leftOffset": 168, "rightOffset": 108 },
    { "id": 35, "from": 5713, "to": 5748, "number": 1, "leftOffset": 1, "rightOffset": 110 },
    { "id": 36, "from": 5731, "to": 5748, "number": 1, "leftOffset": 49, "rightOffset": 111 },
    { "id": 37, "from": 5719, "to": 5748, "number": 1, "leftOffset": 2, "rightOffset": 112 },
    { "id": 38, "from": 5739, "to": 5748, "number": 1, "leftOffset": 0, "rightOffset": 114 },
    { "id": 39, "from": 5720, "to": 5749, "number": 1, "leftOffset": 8, "rightOffset": 0 },
    { "id": 40, "from": 5737, "to": 5749, "number": 1, "leftOffset": 0, "rightOffset": 1 },
    { "id": 41, "from": 5738, "to": 5750, "number": 1, "leftOffset": 171, "rightOffset": 0 },
    { "id": 42, "from": 5740, "to": 5750, "number": 1, "leftOffset": 1, "rightOffset": 2 },
    { "id": 43, "from": 5738, "to": 7000, "number": 1, "leftOffset": 170, "rightOffset": 139 },
    { "id": 44, "from": 5744, "to": 7000, "number": 7, "leftOffset": 108, "rightOffset": 132 },
    { "id": 45, "from": 5740, "to": 7000, "number": 1, "leftOffset": 0, "rightOffset": 140 },
    { "id": 46, "from": 5721, "to": 7000, "number": 1, "leftOffset": 0, "rightOffset": 141 },
    { "id": 47, "from": 5729, "to": 7002, "number": 1, "leftOffset": 28, "rightOffset": 17 },
    { "id": 48, "from": 5745, "to": 7002, "number": 1, "leftOffset": 31, "rightOffset": 18 }
];

var a_transitions_direct = [
    { "id": 49, "from": 5710, "to": 5719, "number": 2, "leftOffset": 3, "rightOffset": 0 },
    { "id": 50, "from": 5715, "to": 5719, "number": 1, "leftOffset": 2, "rightOffset": 2 },
    { "id": 51, "from": 5713, "to": 5719, "number": 7, "leftOffset": 4, "rightOffset": 3 },
    { "id": 52, "from": 5717, "to": 5719, "number": 2, "leftOffset": 3, "rightOffset": 10 },
    { "id": 53, "from": 5711, "to": 5719, "number": 5, "leftOffset": 3, "rightOffset": 12 },
    { "id": 54, "from": 5712, "to": 5719, "number": 1, "leftOffset": 4, "rightOffset": 17 },
    { "id": 55, "from": 5716, "to": 5719, "number": 2, "leftOffset": 0, "rightOffset": 18 },
    { "id": 56, "from": 5708, "to": 5720, "number": 21, "leftOffset": 8, "rightOffset": 0 },
    { "id": 57, "from": 5707, "to": 5721, "number": 1, "leftOffset": 19, "rightOffset": 0 },
    { "id": 58, "from": 5714, "to": 5721, "number": 29, "leftOffset": 6, "rightOffset": 1 },
    { "id": 59, "from": 5713, "to": 5722, "number": 6, "leftOffset": 18, "rightOffset": 0 },
    { "id": 60, "from": 5717, "to": 5722, "number": 1, "leftOffset": 7, "rightOffset": 6 },
    { "id": 61, "from": 5711, "to": 5722, "number": 1, "leftOffset": 9, "rightOffset": 7 },
    { "id": 62, "from": 5716, "to": 5722, "number": 1, "leftOffset": 3, "rightOffset": 8 },
    { "id": 63, "from": 5718, "to": 5722, "number": 1, "leftOffset": 2, "rightOffset": 9 },
    { "id": 64, "from": 5709, "to": 5723, "number": 18, "leftOffset": 0, "rightOffset": 0 },
    { "id": 65, "from": 5713, "to": 5723, "number": 1, "leftOffset": 0, "rightOffset": 18 },
    { "id": 66, "from": 5709, "to": 5724, "number": 2, "leftOffset": 18, "rightOffset": 0 },
    { "id": 67, "from": 5715, "to": 5724, "number": 1, "leftOffset": 3, "rightOffset": 2 },
    { "id": 68, "from": 5713, "to": 5724, "number": 7, "leftOffset": 11, "rightOffset": 3 },
    { "id": 69, "from": 5717, "to": 5724, "number": 1, "leftOffset": 5, "rightOffset": 10 },
    { "id": 70, "from": 5711, "to": 5724, "number": 1, "leftOffset": 8, "rightOffset": 11 },
    { "id": 71, "from": 5712, "to": 5724, "number": 7, "leftOffset": 5, "rightOffset": 12 },
    { "id": 72, "from": 5707, "to": 5724, "number": 1, "leftOffset": 3, "rightOffset": 19 },
    { "id": 73, "from": 5708, "to": 5724, "number": 8, "leftOffset": 0, "rightOffset": 20 },
    { "id": 74, "from": 5718, "to": 5724, "number": 1, "leftOffset": 1, "rightOffset": 28 },
    { "id": 75, "from": 5714, "to": 5724, "number": 3, "leftOffset": 0, "rightOffset": 29 },
    { "id": 76, "from": 5710, "to": 5725, "number": 2, "leftOffset": 1, "rightOffset": 0 },
    { "id": 77, "from": 5715, "to": 5725, "number": 2, "leftOffset": 0, "rightOffset": 2 },
    { "id": 78, "from": 5713, "to": 5725, "number": 2, "leftOffset": 2, "rightOffset": 4 },
    { "id": 79, "from": 5717, "to": 5725, "number": 2, "leftOffset": 0, "rightOffset": 6 },
    { "id": 80, "from": 5711, "to": 5725, "number": 2, "leftOffset": 0, "rightOffset": 8 },
    { "id": 81, "from": 5707, "to": 5725, "number": 1, "leftOffset": 2, "rightOffset": 10 },
    { "id": 82, "from": 5707, "to": 5726, "number": 14, "leftOffset": 4, "rightOffset": 0 },
    { "id": 83, "from": 5716, "to": 5726, "number": 1, "leftOffset": 2, "rightOffset": 14 },
    { "id": 84, "from": 5714, "to": 5726, "number": 3, "leftOffset": 3, "rightOffset": 15 },
    { "id": 85, "from": 5722, "to": 5727, "number": 4, "leftOffset": 21, "rightOffset": 0 },
    { "id": 86, "from": 5721, "to": 5727, "number": 54, "leftOffset": 10, "rightOffset": 4 },
    { "id": 87, "from": 5723, "to": 5728, "number": 2, "leftOffset": 17, "rightOffset": 0 },
    { "id": 88, "from": 5725, "to": 5728, "number": 1, "leftOffset": 10, "rightOffset": 2 },
    { "id": 89, "from": 5724, "to": 5728, "number": 5, "leftOffset": 9, "rightOffset": 3 },
    { "id": 90, "from": 5720, "to": 5728, "number": 1, "leftOffset": 7, "rightOffset": 8 },
    { "id": 91, "from": 5722, "to": 5728, "number": 1, "leftOffset": 3, "rightOffset": 9 },
    { "id": 92, "from": 5721, "to": 5728, "number": 2, "leftOffset": 1, "rightOffset": 10 },
    { "id": 93, "from": 5725, "to": 5729, "number": 2, "leftOffset": 11, "rightOffset": 1 },
    { "id": 94, "from": 5719, "to": 5729, "number": 2, "leftOffset": 6, "rightOffset": 3 },
    { "id": 95, "from": 5724, "to": 5729, "number": 5, "leftOffset": 14, "rightOffset": 5 },
    { "id": 96, "from": 5720, "to": 5729, "number": 1, "leftOffset": 9, "rightOffset": 10 },
    { "id": 97, "from": 5722, "to": 5729, "number": 1, "leftOffset": 4, "rightOffset": 11 },
    { "id": 98, "from": 5721, "to": 5729, "number": 1, "leftOffset": 3, "rightOffset": 12 },
    { "id": 99, "from": 5723, "to": 5730, "number": 1, "leftOffset": 2, "rightOffset": 0 },
    { "id": 100, "from": 5725, "to": 5730, "number": 2, "leftOffset": 3, "rightOffset": 1 },
    { "id": 101, "from": 5719, "to": 5730, "number": 2, "leftOffset": 3, "rightOffset": 3 },
    { "id": 102, "from": 5724, "to": 5730, "number": 1, "leftOffset": 7, "rightOffset": 5 },
    { "id": 103, "from": 5726, "to": 5730, "number": 3, "leftOffset": 0, "rightOffset": 6 },
    { "id": 104, "from": 5722, "to": 5730, "number": 1, "leftOffset": 2, "rightOffset": 10 },
    { "id": 105, "from": 5725, "to": 5731, "number": 5, "leftOffset": 5, "rightOffset": 0 },
    { "id": 106, "from": 5719, "to": 5731, "number": 1, "leftOffset": 5, "rightOffset": 5 },
    { "id": 107, "from": 5726, "to": 5731, "number": 2, "leftOffset": 3, "rightOffset": 8 },
    { "id": 108, "from": 5720, "to": 5731, "number": 1, "leftOffset": 0, "rightOffset": 10 },
    { "id": 109, "from": 5719, "to": 5732, "number": 12, "leftOffset": 8, "rightOffset": 0 },
    { "id": 110, "from": 5724, "to": 5732, "number": 1, "leftOffset": 19, "rightOffset": 13 },
    { "id": 111, "from": 5722, "to": 5732, "number": 7, "leftOffset": 5, "rightOffset": 14 },
    { "id": 112, "from": 5726, "to": 5733, "number": 7, "leftOffset": 5, "rightOffset": 0 },
    { "id": 113, "from": 5722, "to": 5733, "number": 7, "leftOffset": 12, "rightOffset": 8 },
    { "id": 114, "from": 5721, "to": 5733, "number": 5, "leftOffset": 4, "rightOffset": 15 },
    { "id": 115, "from": 5723, "to": 5734, "number": 14, "leftOffset": 3, "rightOffset": 0 },
    { "id": 116, "from": 5724, "to": 5734, "number": 1, "leftOffset": 8, "rightOffset": 14 },
    { "id": 117, "from": 5723, "to": 5735, "number": 2, "leftOffset": 0, "rightOffset": 0 },
    { "id": 118, "from": 5725, "to": 5735, "number": 1, "leftOffset": 0, "rightOffset": 2 },
    { "id": 119, "from": 5719, "to": 5735, "number": 1, "leftOffset": 0, "rightOffset": 3 },
    { "id": 120, "from": 5724, "to": 5735, "number": 4, "leftOffset": 0, "rightOffset": 4 },
    { "id": 121, "from": 5720, "to": 5736, "number": 6, "leftOffset": 1, "rightOffset": 0 },
    { "id": 122, "from": 5736, "to": 5737, "number": 6, "leftOffset": 1, "rightOffset": 0 },
    { "id": 123, "from": 5735, "to": 5738, "number": 3, "leftOffset": 0, "rightOffset": 0 },
    { "id": 124, "from": 5730, "to": 5738, "number": 47, "leftOffset": 0, "rightOffset": 3 },
    { "id": 125, "from": 5731, "to": 5738, "number": 49, "leftOffset": 0, "rightOffset": 53 },
    { "id": 126, "from": 5734, "to": 5738, "number": 1, "leftOffset": 0, "rightOffset": 106 },
    { "id": 127, "from": 5736, "to": 5738, "number": 1, "leftOffset": 0, "rightOffset": 107 },
    { "id": 128, "from": 5728, "to": 5738, "number": 1, "leftOffset": 0, "rightOffset": 108 },
    { "id": 129, "from": 5729, "to": 5738, "number": 21, "leftOffset": 0, "rightOffset": 109 },
    { "id": 130, "from": 5732, "to": 5738, "number": 18, "leftOffset": 0, "rightOffset": 130 },
    { "id": 131, "from": 5733, "to": 5738, "number": 4, "leftOffset": 0, "rightOffset": 148 },
    { "id": 132, "from": 5736, "to": 5739, "number": 1, "leftOffset": 8, "rightOffset": 0 },
    { "id": 133, "from": 5728, "to": 5739, "number": 3, "leftOffset": 6, "rightOffset": 1 },
    { "id": 134, "from": 5729, "to": 5739, "number": 4, "leftOffset": 24, "rightOffset": 4 },
    { "id": 135, "from": 5732, "to": 5739, "number": 5, "leftOffset": 21, "rightOffset": 8 },
    { "id": 136, "from": 5733, "to": 5739, "number": 3, "leftOffset": 5, "rightOffset": 14 },
    { "id": 137, "from": 5727, "to": 5739, "number": 3, "leftOffset": 1, "rightOffset": 18 },
    { "id": 138, "from": 5734, "to": 5740, "number": 2, "leftOffset": 1, "rightOffset": 0 },
    { "id": 139, "from": 5736, "to": 5740, "number": 1, "leftOffset": 7, "rightOffset": 2 },
    { "id": 140, "from": 5728, "to": 5740, "number": 5, "leftOffset": 1, "rightOffset": 3 },
    { "id": 141, "from": 5729, "to": 5740, "number": 1, "leftOffset": 23, "rightOffset": 8 },
    { "id": 142, "from": 5732, "to": 5740, "number": 2, "leftOffset": 19, "rightOffset": 9 },
    { "id": 143, "from": 5733, "to": 5740, "number": 1, "leftOffset": 4, "rightOffset": 12 },
    { "id": 144, "from": 5727, "to": 5740, "number": 1, "leftOffset": 0, "rightOffset": 13 },
    { "id": 145, "from": 5733, "to": 5741, "number": 7, "leftOffset": 8, "rightOffset": 2 },
    { "id": 146, "from": 5727, "to": 5741, "number": 25, "leftOffset": 8, "rightOffset": 10 },
    { "id": 147, "from": 5737, "to": 5743, "number": 18, "leftOffset": 1, "rightOffset": 1 },
    { "id": 148, "from": 5738, "to": 5744, "number": 168, "leftOffset": 0, "rightOffset": 0 },
    { "id": 149, "from": 5738, "to": 5745, "number": 1, "leftOffset": 172, "rightOffset": 1 },
    { "id": 150, "from": 5740, "to": 5745, "number": 4, "leftOffset": 2, "rightOffset": 5 },
    { "id": 151, "from": 5739, "to": 5745, "number": 8, "leftOffset": 1, "rightOffset": 9 },
    { "id": 152, "from": 5741, "to": 5746, "number": 31, "leftOffset": 1, "rightOffset": 2 },
    { "id": 153, "from": 5746, "to": 5747, "number": 46, "leftOffset": 0, "rightOffset": 5 },
    { "id": 154, "from": 5744, "to": 5748, "number": 108, "leftOffset": 0, "rightOffset": 0 },
    { "id": 155, "from": 5743, "to": 5748, "number": 1, "leftOffset": 0, "rightOffset": 113 },
    { "id": 156, "from": 5745, "to": 5748, "number": 5, "leftOffset": 0, "rightOffset": 115 },
    { "id": 157, "from": 5743, "to": 5749, "number": 20, "leftOffset": 1, "rightOffset": 2 },
    { "id": 158, "from": 5743, "to": 5750, "number": 1, "leftOffset": 21, "rightOffset": 1 },
    { "id": 159, "from": 5745, "to": 5750, "number": 26, "leftOffset": 5, "rightOffset": 3 },
    { "id": 160, "from": 5748, "to": 7000, "number": 132, "leftOffset": 0, "rightOffset": 0 },
    { "id": 161, "from": 5749, "to": 7001, "number": 25, "leftOffset": 0, "rightOffset": 0 },
    { "id": 162, "from": 5748, "to": 7002, "number": 2, "leftOffset": 132, "rightOffset": 0 },
    { "id": 163, "from": 5749, "to": 7002, "number": 1, "leftOffset": 25, "rightOffset": 2 },
    { "id": 164, "from": 5750, "to": 7002, "number": 14, "leftOffset": 0, "rightOffset": 3 },
    { "id": 165, "from": 5747, "to": 7003, "number": 33, "leftOffset": 0, "rightOffset": 0 }
];

// TODO:
// - check on mobile


if (!String.prototype.format) {
    String.prototype.format = function () {
        var args = arguments;
        return this.replace(/{(\d+)}/g, function (match, number) {
            return typeof args[number] != 'undefined'
                ? args[number]
                : match
                ;
        });
    };
}


if (!String.prototype.transliterate) {
    var tr = { "Ё": "Yo", "Й": "I", "Ц": "Ts", "У": "U", "К": "K", "Е": "E", "Н": "N", "Г": "G", "Ш": "Sh", "Щ": "Sch", "З": "Z", "Х": "H", "Ъ": "'", "ё": "yo", "й": "i", "ц": "ts", "у": "u", "к": "k", "е": "e", "н": "n", "г": "g", "ш": "sh", "щ": "sch", "з": "z", "х": "h", "ъ": "'", "Ф": "F", "Ы": "I", "В": "V", "А": "A", "П": "P", "Р": "R", "О": "O", "Л": "L", "Д": "D", "Ж": "Zh", "Э": "E", "ф": "f", "ы": "i", "в": "v", "а": "a", "п": "p", "р": "r", "о": "o", "л": "l", "д": "d", "ж": "zh", "э": "e", "Я": "Ya", "Ч": "Ch", "С": "S", "М": "M", "И": "I", "Т": "T", "Ь": "'", "Б": "B", "Ю": "Yu", "я": "ya", "ч": "ch", "с": "s", "м": "m", "и": "i", "т": "t", "ь": "'", "б": "b", "ю": "yu" };

    String.prototype.transliterate = function () {
        if (!ENGLISH)
            return this;
        return this.split('').map(function (char) {
            return tr[char] || char;
        }).join('');
    }
}

//=====================


var LEFT_MARGIN = 50,
    TOP_MARGIN = 50,
    CONVO_OFFSET = 150,

    FRACTION_WIDTH = 10,

    SHADOW_K = .1,

    SCALE_Y = 1,

    L_ALL_DEPS = 'Все депутаты',
    L_CONVO = 'созыв',
    L_DEP_OF_CONVO = 'Депутаты {0} созыва',
    L_PPL = '{0} чел.'

ENGLISH = false;


var dom = {
    svg: undefined,
    convocations: undefined,
    fractions: undefined,
    transitions: undefined,
    defs: undefined,
    deputies: undefined,
    header: undefined,
}

var s = {}

//=====================

function setTitle(name) {
    var counter = L_PPL.format(dom.deputies.selectAll('.deputat:not(.hidden)').size());

    dom.header.select('#title').html(name === undefined ? L_ALL_DEPS : name);
    dom.header.select('#supp').text(counter);
    //dom.header.select('#counter').text(supp === undefined ? '' : counter);
    dom.header.select('#clear').classed('hidden', name === undefined);
}

function hoverConvocation(convocation) {
    s.fractions
        .classed('active', function (d) { return convocation !== undefined && d.convocationId == convocation.id; });
    s.transitions
        .classed('active', false);
}

function hoverFraction(fraction) {
    s.fractions
        .classed('active', function (d) { return fraction !== undefined && d.id == fraction.id; });
}

function hoverTransition(transition) {
    s.transitions
        .classed('active', function (d) { return transition !== undefined && d.id == transition.id; });

    s.fractions
        .classed('active', function (d) {
            return transition !== undefined && (d.id == transition.from || d.id == transition.to);
        });
}

function hoverDeputat(deputat) {
    s.fractions
        .classed('active', function (d) {
            return deputat !== undefined && deputat.fractionIds.indexOf(d.id) != -1;
        })
        .classed('faded', function (d) {
            if (deputat !== undefined)
                return deputat.fractionIds.indexOf(d.id) == -1;
            else
                if (noSelection)
                    return false
                else
                    return !d3.select(this).classed('selected');
        });

    s.transitions
        .classed('active', function (d) {
            if (deputat === undefined)
                return false;
            var i = deputat.fractionIds.indexOf(d.from);
            return i != -1 && deputat.fractionIds.indexOf(d.to) == i + 1;
        })
        .classed('faded', function (d) {
            if (deputat !== undefined) {
                var i = deputat.fractionIds.indexOf(d.from);
                return i == -1 || deputat.fractionIds.indexOf(d.to) != i + 1;
            }
            else
                if (noSelection)
                    return false;
                else
                    return !d3.select(this).classed('selected');
        });
}

var noSelection = true;
function clearSelection() {
    if (!noSelection) {
        noSelection = true;

        s.fractions
            .classed('selected', false)
            .classed('faded', false);
        s.transitions
            .classed('selected', false)
            .classed('faded', false);
        s.deputies.classed('hidden', false);
    }
}

function selectFraction(fraction) {
    noSelection = false;

    s.fractions
        .classed('selected', function (d) { return d.id == fraction.datum().id; })
        .classed('faded', function (d) { return d.id != fraction.datum().id; });

    s.transitions
        .classed('faded', true)
        .classed('selected', false);


    s.deputies
        .classed('hidden', function (d) { return d.fractionIds.indexOf(fraction.datum().id) == -1; });


    setTitle(
        '{0}, {1} {2}'.format(
            fraction.datum()._name,
            d_convocations[fraction.datum().convocationId].number,
            L_CONVO
        )
    );
}

function selectTransition(transition) {
    noSelection = false;

    s.fractions
        .classed('faded', function (d) { return d.id != transition.datum().from && d.id != transition.datum().to; })
        .classed('selected', function (d) { return d.id == transition.datum().from || d.id == transition.datum().to; });

    s.transitions
        .classed('faded', function (d) { return d.id != transition.datum().id; })
        .classed('selected', function (d) { return d.id == transition.datum().id; });

    s.deputies
        .classed('hidden', function (d) {
            var i = d.fractionIds.indexOf(transition.datum().from)
            return i == -1 || d.fractionIds.indexOf(transition.datum().to) != i + 1;
        });


    var title = d_fractions[transition.datum().from].partyId == d_fractions[transition.datum().to].partyId ?
        '{0}, {1} → {2} {3}'.format(
            d_fractions[transition.datum().from]._name,
            d_fractions[transition.datum().from]._convoName,
            d_fractions[transition.datum().to]._convoName,
            L_CONVO
        ) :
        '{0}, {1} → {2}, {3}'.format(
            d_fractions[transition.datum().from]._name,
            d_fractions[transition.datum().from]._convoName,
            d_fractions[transition.datum().to]._name,
            d_fractions[transition.datum().to]._convoName
        );

    setTitle(
        title,
        '{0} → {1}'.format(d_fractions[transition.datum().from]._convoName, d_fractions[transition.datum().to]._convoName)
    );
}

function selectConvocation(convo) {
    noSelection = false;

    s.fractions
        .classed('selected', function (d) { return d.convocationId == convo.datum().id; })
        .classed('faded', function (d) { return d.convocationId != convo.datum().id; });

    s.transitions
        .classed('faded', true)
        .classed('selected', false);

    s.deputies
        .classed('hidden', function (d) { return d.convocations[convo.datum().id - 1].partyId === undefined; });

    setTitle(
        L_DEP_OF_CONVO.format(convo.datum().number)
    );
}

//=====================


function fractionPosition(fraction) {
    return [
        (LEFT_MARGIN + (d_convocations[fraction.convocationId].id - 1) * CONVO_OFFSET),
        SCALE_Y * (fraction.offset + fraction.order * 3) + TOP_MARGIN
    ]
}


function drawConvocations() {
    var convocations = dom.convocations.selectAll('.convocation').data(a_convocations).enter();

    var groups = convocations.append('g')
        .classed('convocation', true)
        .attr('transform', function (d) { return 'translate({0},{1})'.format(LEFT_MARGIN + (d.id - 1) * CONVO_OFFSET, TOP_MARGIN); });

    var labels = groups.append('g')
        .classed('convocationLabel', true)
        .attr('transform', 'translate(0,-20)')
        .on('mouseover', hoverConvocation)
        .on('mouseout', function (d) { hoverConvocation(); })
        .on('click', function (d) {
            event.stopPropagation();
            selectConvocation(d3.select(this.parentNode));
        });

    labels.append('text')
        .classed('convocationYears', true)
        .text(function (d) { return d.years; });
}

function drawTransitions() {
    var transitionsDirect = dom.transitionsDirect.selectAll('.transition').data(a_transitions_direct).enter();
    var transitionsJump = dom.transitionsJump.selectAll('.transition').data(a_transitions_jump).enter();

    var transitionsHover = dom.transitionsHover.selectAll('.transition').data(a_transitions_jump.concat(a_transitions_direct)).enter();

    var grads = dom.defs.selectAll('linearGradient')
        .data(a_transitions_direct.concat(a_transitions_jump), function (d) { return d.from + '-' + d.to })
        .enter()
        .append('linearGradient')
        .attr('id', function (d) { return 'g' + d.from + '-' + d.to; })
        .attr('x1', 0)
        .attr('y1', 0)
        .attr('x2', 1)
        .attr('y2', 0);

    grads.append('stop')
        .attr('offset', '0%')
        .attr('stop-color', function (d) { return d_fractions[d.from]._color; });

    grads.append('stop')
        .attr('offset', '100%')
        .attr('stop-color', function (d) { return d_fractions[d.to]._color; });

    function drawHelper(transitions, forHover) {
        var groups = transitions.append('g')
            .classed('transition', true);

        if (forHover !== undefined)
            groups
                .on('mouseover', hoverTransition)
                .on('mouseout', function (d) { hoverTransition(); })
                .on('click', function (d) {
                    event.stopPropagation();
                    selectTransition(d3.select(this));
                });

        var lines1 = groups.filter(function (d) {
            return d_fractions[d.from]._position[1] + d.leftOffset * SCALE_Y == d_fractions[d.to]._position[1] + d.rightOffset * SCALE_Y;
        })

        lines1.append('rect')
            .attr('x', function (d) { return d_fractions[d.from]._position[0] + FRACTION_WIDTH / 2; })
            .attr('y', function (d) { return d_fractions[d.from]._position[1] + d.leftOffset * SCALE_Y; })
            .attr('width', function (d) { return d_fractions[d.to]._position[0] - d_fractions[d.from]._position[0] - FRACTION_WIDTH; })
            .attr('height', function (d) { return d.number * SCALE_Y; })
            .attr('stroke', 'none')
            .attr('fill', function (d) {
                if (forHover === undefined)
                    return 'url(#g{0}-{1})'.format(d.from, d.to);
                else
                    return 'rgba(0, 0, 0, 0)';
            });

        var lines2 = groups.filter(function (d) {
            return d_fractions[d.from]._position[1] + d.leftOffset != d_fractions[d.to]._position[1] + d.rightOffset;
        })

        lines2.append('path')
            .attr('d', function (d) {
                var f1 = d_fractions[d.from],
                    f2 = d_fractions[d.to];
                var result = 'M {0} {1} C {2} {3}, {4} {5}, {6} {7}'.format(
                    f1._position[0] + FRACTION_WIDTH / 2, f1._position[1] + (d.leftOffset + d.number / 2) * SCALE_Y,
                    (f1._position[0] + f2._position[0]) / 2, f1._position[1] + (d.leftOffset + d.number / 2) * SCALE_Y,
                    (f1._position[0] + f2._position[0]) / 2, f2._position[1] + (d.rightOffset + d.number / 2) * SCALE_Y,
                    f2._position[0] - FRACTION_WIDTH / 2, f2._position[1] + (d.rightOffset + d.number / 2) * SCALE_Y
                );

                return result;
            })
            .attr('fill', 'none')
            .attr('stroke', function (d) {
                if (forHover === undefined)
                    return 'url(#g{0}-{1})'.format(d.from, d.to);
                else
                    return 'rgba(0, 0, 0, 0)';
            })
            .attr('stroke-width', function (d) {
                if (forHover === undefined || d.number > 5)
                    return d.number * SCALE_Y;
                else
                    return 6;
            });
    }

    drawHelper(transitionsDirect);
    drawHelper(transitionsJump);
    drawHelper(transitionsHover, true);

    s.transitions = dom.drawArea.selectAll('.transition');
}

function drawFractions() {
    var fractions = dom.fractions.selectAll('.fraction').data(a_fractions).enter();
    var fractionsHover = dom.fractionsHover.selectAll('.fraction').data(a_fractions).enter();


    var groups = fractions.append('g')
        .classed('fraction', true)
        .attr('transform', function (d) {
            d._position = fractionPosition(d);
            d._color = d_parties[d.partyId].color;
            d._name = d_parties[d.partyId].name.transliterate();
            d._convoName = d_convocations[d.convocationId].number;
            return 'translate({0},{1})'.format(d._position[0], d._position[1]);
        });

    var hoverGroups = fractionsHover.append('g')
        .classed('fraction', true)
        .attr('transform', function (d) {
            return 'translate({0},{1})'.format(d._position[0], d._position[1]);
        })
        .on('mouseover', hoverFraction)
        .on('mouseout', function () { hoverFraction(); })
        .on('click', function () {
            event.stopPropagation();
            selectFraction(d3.select(this));
        });

    groups.append('rect')
        .attr('x', -FRACTION_WIDTH / 2)
        .attr('y', 0)
        .attr('width', FRACTION_WIDTH)
        .attr('height', function (d) { return d.size * SCALE_Y; })
        .attr('fill', function (d) { return d._color; });

    hoverGroups.append('rect')
        .attr('x', -FRACTION_WIDTH / 2)
        .attr('y', function (d) {
            if (d.size < 5)
                return -(5 - d.size) / 2 * SCALE_Y;
            else
                return 0;
        })
        .attr('width', FRACTION_WIDTH)
        .attr('height', function (d) {
            if (d.size < 5)
                return 5 * SCALE_Y;
            else
                return d.size * SCALE_Y;
        })
        .attr('fill', 'rgba(0, 0, 0, 0)');


    var labels = groups.append('g')
        .classed('fractionLabel', true)
        .attr('transform', function (d) {
            var y = 0;
            var x = d.convocationId == 7 ? -13 : 7;
            var toShift = {
                5713: 10,
                5714: 10,
                5707: 10,
                5729: 10,
                5739: 10,
                7000: 20,
                5726: 15,
                5733: 15,
                7004: -12
            }

            if (toShift[d.id] !== undefined) y = toShift[d.id]

            return 'translate({0}, {1})'.format(x, y + 2);
        })
        .attr('text-anchor', function (d) {
            return d.convocationId == 7 ? 'end' : 'start';
        });

    labels.append('rect')
        .attr('y', 0)
        .attr('height', 16);

    labels.append('text')
        .text(function (d) { return d._name; })
        .attr('x', 3)
        .attr('y', 12);

    labels.each(function (d) {
        var bbox = d3.select(this).select('text').node().getBBox();
        d3.select(this).select('rect').attr('x', bbox.x - 3);
        d3.select(this).select('rect').attr('width', bbox.width + 6);
    })

    s.fractions = dom.fractions.selectAll('.fraction');
}



function draw(eng) {
    if (eng !== undefined) {
        ENGLISH = true;

        L_ALL_DEPS = 'All Deputies';
        L_CONVO = 'Convocation';
        L_DEP_OF_CONVO = 'Deputies, {0} Convocation';
        L_PPL = '{0} pers.'
    }

    if (window.innerHeight < 575 + 85 + 25) {
        SCALE_Y = (575 - TOP_MARGIN - (575 + 85 + 25 - window.innerHeight)) / (575 - TOP_MARGIN);
    }

    if (window.innerWidth < 1000 + 210 + 20) {
        CONVO_OFFSET = (1000 - (1000 + 210 + 20 - window.innerWidth) - 2 * LEFT_MARGIN) / 6;
    }

    dom.svg = d3.select('#diagram svg');
    dom.convocations = dom.svg.select('.convocations');
    dom.fractions = dom.svg.select('.fractions');
    dom.transitionsDirect = dom.svg.select('.transitions .direct');
    dom.transitionsJump = dom.svg.select('.transitions .jump');
    dom.defs = dom.svg.select('defs');
    // dom.deputies = d3.select('.deputies');
    dom.header = d3.select('#listHeader');
    dom.transitionsHover = d3.select('.hoverTransitions');
    dom.fractionsHover = d3.select('.hoverFractions');
    dom.drawArea = d3.select('svg .drawings');

    drawConvocations();
    drawFractions();
    drawTransitions();
    // addDeputies();

    // setTitle();

    // scrollEvents();

    d3.select(window).on('click', function () {
        clearSelection();
        setTitle();
    });
}

draw(false);
<!-- <link href="https://fonts.googleapis.com/css?family=Noto+Sans" rel="stylesheet"> -->

<script src="http://petrdevaikin.com/duma/d3.min.js">

</script>



<!-- <script src="http://petrdevaikin.com/duma/main.js"></script> -->


<body>
	<div id="wrap">
		<h1>新型冠状病毒可视化</h1>
		<div id="diagram">
			<svg>
				<defs>
				</defs>
				<g class="drawings">
					<g class="convocations"></g>
					<g class="transitions">
						<g class="jump"></g>
						<g class="direct"></g>
					</g>
					<g class="fractions"></g>
				</g>
				<g class="hovers">
					<g class="hoverTransitions"></g>
					<g class="hoverFractions"></g>
				</g>
			</svg>
		</div>
	</div>
</body>
/* cyrillic-ext */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr6DRASf6M7VBj.woff2) format('woff2');
    unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;
}


/* cyrillic */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr4TRASf6M7VBj.woff2) format('woff2');
    unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;
}


/* devanagari */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr5DRASf6M7VBj.woff2) format('woff2');
    unicode-range: U+0900-097F, U+1CD0-1CF6, U+1CF8-1CF9, U+200C-200D, U+20A8, U+20B9, U+25CC, U+A830-A839, U+A8E0-A8FB;
}


/* greek-ext */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr6TRASf6M7VBj.woff2) format('woff2');
    unicode-range: U+1F00-1FFF;
}


/* greek */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr5jRASf6M7VBj.woff2) format('woff2');
    unicode-range: U+0370-03FF;
}


/* vietnamese */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr6jRASf6M7VBj.woff2) format('woff2');
    unicode-range: U+0102-0103, U+0110-0111, U+1EA0-1EF9, U+20AB;
}


/* latin-ext */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr6zRASf6M7VBj.woff2) format('woff2');
    unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF;
}


/* latin */

@font-face {
    font-family: 'Noto Sans';
    font-style: normal;
    font-weight: 400;
    src: local('Noto Sans'), local('NotoSans'), url(https://fonts.gstatic.com/s/notosans/v9/o-0IIpQlx3QUlC5A4PNr5TRASf6M7Q.woff2) format('woff2');
    unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

body {
    margin: 0;
    background: #171717;
    color: #9a9a9a;
    font-family: 'Noto Sans', sans-serif;
}

#wrap {
    position: relative;
    width: 100%;
    max-width: 1300px;
    min-width: 800px;
    margin-left: auto;
    margin-right: auto;
    height: 50px;
}

#diagram {
    position: fixed;
    top: 84px;
    bottom: 0;
}

h1 {
    position: fixed;
    display: block;
    top: 0;
    margin: 20px 0 40px;
    left: 0;
    right: 0;
    text-align: center;
    font-weight: normal;
    font-size: 18px;
    color: #eee;
}

svg {
    position: relative;
    margin-top: 0px;
    width: 1000px;
    height: 570px;
}

svg .convocation line {
    stroke: #000;
}

svg .convocationLabel {
    cursor: pointer;
}

svg .convocationYears {
    text-anchor: middle;
    fill: #9a9a9a;
    font-size: 12px;
}

svg .fraction {
    -webkit-transition: opacity .5s;
    transition: opacity .5s;
}

svg .transition {
    -webkit-transition: opacity .5s;
    transition: opacity .5s;
}

svg .convocationNumber {
    text-anchor: middle;
    fill: #eee;
    font-size: 14px;
}

svg .fraction rect {
    stroke: none;
    cursor: pointer;
}

svg .fraction .fractionLabel {
    opacity: 0;
    -webkit-transition: opacity .2s;
    transition: opacity .2s;
}

svg .fraction.active .fractionLabel {
    opacity: 1;
}

svg .fraction.selected .fractionLabel {
    opacity: 1;
}

svg .fraction.selected.faded .fractionLabel {
    opacity: 0;
}

svg .fractionLabel rect {
    fill: rgba(23, 23, 23, .7);
    stroke: none;
}

svg .fractionLabel text {
    fill: #eee;
    font-size: 12px;
    font-family: sans-serif;
}

svg .transition {
    opacity: .7;
    cursor: pointer;
}

svg .transitions .jump .transition {
    opacity: .6;
}

svg .faded:not(.active) {
    opacity: .15 !important;
}

#clear {
    cursor: pointer;
}

#clear.hidden {
    display: none;
}

.deputies {
    box-sizing: border-box;
    position: relative;
    margin-left: 10px;
    margin-right: 10px;
    margin-bottom: 20px;
    margin-top: -5px;
}

.deputies .deputat {
    position: relative;
    padding: 3px 0;
    cursor: default;
}

.deputies .deputat.hidden {
    display: none;
}

.deputies .deputat .deputatName {
    color: #9a9a9a;
    position: relative;
    margin-left: 65px;
    font-size: 12px;
}

.deputies .deputat:hover .deputatName {
    color: #eee;
}

.depConvos {
    position: absolute;
    left: 0;
    top: 10px;
    width: 70px;
}

.depConvo {
    box-sizing: border-box;
    position: relative;
    float: left;
    width: 6px;
    height: 6px;
    border-radius: 50%;
    margin-right: 2px;
}

.depConvo.empty {
    border: 1px solid #333;
}